@wrongstack/webui 1.0.16 → 1.0.19

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 (112) hide show
  1. package/dist/assets/{AgentRosterView-DMxOg0xX.js → AgentRosterView-D4TuVXe8.js} +4 -4
  2. package/dist/assets/AnalyticsDashboard-DmQd0E0V.js +1 -0
  3. package/dist/assets/{AudienceMemoryPanel-CyfpggCK.js → AudienceMemoryPanel-DHJM4rf1.js} +1 -1
  4. package/dist/assets/ChangesView-CZ-nCe26.js +1 -0
  5. package/dist/assets/{ChimeraReviewsView-DencEMIY.js → ChimeraReviewsView-CNeRLesP.js} +1 -1
  6. package/dist/assets/{ChronicleDashboard-CvDPqZKE.js → ChronicleDashboard-CYELq7EO.js} +1 -1
  7. package/dist/assets/{CodeEditor-s0lHP0DZ.js → CodeEditor-CLscjkIR.js} +2 -2
  8. package/dist/assets/CodeMap-CdVy9Q7V.js +1 -0
  9. package/dist/assets/{CronJobsPanel-LoDmuRHl.js → CronJobsPanel-TcZy_W2t.js} +1 -1
  10. package/dist/assets/{DeadCodeScanPanel-ByhAW_bl.js → DeadCodeScanPanel-BOD2JEyf.js} +1 -1
  11. package/dist/assets/{DebugDashboard-BP1Mia-L.js → DebugDashboard-DFPNPzQ_.js} +1 -1
  12. package/dist/assets/{DesignGalleryView-taDxRN63.js → DesignGalleryView-BXABwAji.js} +1 -1
  13. package/dist/assets/{GoalView-CcLxMYXe.js → GoalView-Cepqrg9l.js} +1 -1
  14. package/dist/assets/KanbanView-FSePkLch.js +3 -0
  15. package/dist/assets/MailboxDetailView-QyNmt1Gv.js +1 -0
  16. package/dist/assets/{MemoryDrawer-CuFQypU-.js → MemoryDrawer-BZsyD1dh.js} +1 -1
  17. package/dist/assets/MemoryManager-IHmhWn4P.js +1 -0
  18. package/dist/assets/ProcessMonitor-Bz0jZvHJ.js +1 -0
  19. package/dist/assets/{PromptJournalView-CdC4ldrv.js → PromptJournalView-Ct8cLcGU.js} +1 -1
  20. package/dist/assets/{ProviderTestView-Dy7EQEI9.js → ProviderTestView-Dy3k2bVu.js} +1 -1
  21. package/dist/assets/{QueuePanel-DE9ySxkR.js → QueuePanel-oVkTB68Q.js} +1 -1
  22. package/dist/assets/{RefreshDebugView-Dbq_bHwj.js → RefreshDebugView-_XPrBDq3.js} +1 -1
  23. package/dist/assets/RepositoryHistoryView-Wlnvi5r1.js +2 -0
  24. package/dist/assets/RequirementIntakeView-Cj5arGFF.js +1 -0
  25. package/dist/assets/{SageTabs-Dwbux3im.js → SageTabs-qrBn3VQr.js} +2 -2
  26. package/dist/assets/{SddFlowGraph-BZkvlaQ1.js → SddFlowGraph-DS8R2zEj.js} +1 -1
  27. package/dist/assets/SddHub-C8pHQYSM.js +2 -0
  28. package/dist/assets/{SessionInspectView-Bak1hK82.js → SessionInspectView-CuRk2DS0.js} +1 -1
  29. package/dist/assets/{SessionList-xXaygO5X.js → SessionList-BgRb1Mp4.js} +1 -1
  30. package/dist/assets/{SessionsDashboard-CaSXukNy.js → SessionsDashboard-CSkm28Bx.js} +1 -1
  31. package/dist/assets/{SetupScreen-BSEF1air.js → SetupScreen-CNcJ_9O9.js} +1 -1
  32. package/dist/assets/{SkillDetailView-OdtAJM43.js → SkillDetailView-Bc9owpaX.js} +1 -1
  33. package/dist/assets/{TechStackView-BUIbnU2F.js → TechStackView-BHiGCRBT.js} +1 -1
  34. package/dist/assets/{TerminalPanel-CfoKklMj.js → TerminalPanel-7VeXK8LB.js} +1 -1
  35. package/dist/assets/{activity-DBsMiPsa.js → activity-1wlPY6yi.js} +4 -4
  36. package/dist/assets/{activity-BazcMhZZ.js → activity-BVbAv0x7.js} +4 -4
  37. package/dist/assets/{activity-Cmq0z33p.js → activity-BmJTU8kX.js} +4 -4
  38. package/dist/assets/{activity-B-GYDVn2.js → activity-By_aWEsY.js} +4 -4
  39. package/dist/assets/{activity-BWPWyp3o.js → activity-Cps_29WN.js} +4 -4
  40. package/dist/assets/{activity-VTOCX_jm.js → activity-Du_fOnvF.js} +4 -4
  41. package/dist/assets/{activity-Bk7N_ZW5.js → activity-p_2o4eC6.js} +4 -4
  42. package/dist/assets/button-BbeB5Qm8.js +1 -0
  43. package/dist/assets/{chat-store-DNRce6sE.js → chat-store-C-PKlsCR.js} +1 -1
  44. package/dist/assets/common-BXosnbIt.js +1 -0
  45. package/dist/assets/common-CzfPgMjC.js +1 -0
  46. package/dist/assets/common-DDDPz7Dv.js +1 -0
  47. package/dist/assets/common-DYx9oSoC.js +1 -0
  48. package/dist/assets/common-DZ-05t4z.js +1 -0
  49. package/dist/assets/common-MjX8fcng.js +1 -0
  50. package/dist/assets/common-ipsuLC3n.js +1 -0
  51. package/dist/assets/config-store-xSv1mChc.js +21 -0
  52. package/dist/assets/dialog-b-Ai37sa.js +1 -0
  53. package/dist/assets/empty-state-pfuS5znr.js +1 -0
  54. package/dist/assets/{i18n-CbyUyl6G.js → i18n--QdD6NCn.js} +3 -3
  55. package/dist/assets/index-DiX5j910.css +1 -0
  56. package/dist/assets/{index-3TGBKeBP.js → index-FWwLmwjx.js} +80 -80
  57. package/dist/assets/input-BA6D2L3K.js +1 -0
  58. package/dist/assets/mailbox-store-ZQO_Rv6E.js +1 -0
  59. package/dist/assets/{roster-ws-z8DKquaN.js → roster-ws-CxKDc-ET.js} +1 -1
  60. package/dist/assets/stores-2kakt8j9.js +7 -0
  61. package/dist/assets/{vector-memory-panel-DZFEwwGM.js → vector-memory-panel-YWv6xcza.js} +1 -1
  62. package/dist/assets/view-navigation-DTs4cSQ6.js +1 -0
  63. package/dist/components/CodeMap.d.ts +1 -1
  64. package/dist/components/CodeMapCanvasSurface.d.ts +2 -1
  65. package/dist/components/ConfirmModal.d.ts +10 -0
  66. package/dist/components/FileExplorer/FileExplorerModals.d.ts +4 -5
  67. package/dist/components/KanbanColumnView.d.ts +13 -0
  68. package/dist/components/MainViewSlot.d.ts +1 -1
  69. package/dist/components/MemoryManager/useMemoryManagerState.d.ts +2 -2
  70. package/dist/components/PanelSuspense.d.ts +0 -4
  71. package/dist/components/RepositoryHistoryView.d.ts +1 -1
  72. package/dist/components/RequirementIntakeView.d.ts +22 -1
  73. package/dist/components/SddHub.d.ts +3 -3
  74. package/dist/components/ui/dialog.d.ts +1 -1
  75. package/dist/components/ui/dropdown-menu.d.ts +1 -1
  76. package/dist/components/ui/empty-state.d.ts +1 -1
  77. package/dist/components/ui/tabs.d.ts +1 -1
  78. package/dist/index.html +12 -12
  79. package/dist/index.js +2154 -1576
  80. package/dist/lib/kanban-cleaner.d.ts +1 -1
  81. package/dist/lib/view-navigation.d.ts +2 -2
  82. package/dist/lib/ws-client-domain-methods.d.ts +1 -1
  83. package/dist/lib/ws-client-echo.d.ts +1 -1
  84. package/dist/stores/index.d.ts +1 -1
  85. package/dist/stores/sdd-wizard-store.d.ts +7 -0
  86. package/package.json +9 -9
  87. package/dist/assets/AnalyticsDashboard-DGQk1vSi.js +0 -1
  88. package/dist/assets/ChangesView-C8x8tmpi.js +0 -1
  89. package/dist/assets/CodeMap-6mmDO9gJ.js +0 -1
  90. package/dist/assets/KanbanView-C-K6OBw8.js +0 -3
  91. package/dist/assets/MailboxDetailView-N00dLbpr.js +0 -1
  92. package/dist/assets/MemoryManager-Bmz62aEV.js +0 -1
  93. package/dist/assets/ProcessMonitor-CkAtUjrR.js +0 -1
  94. package/dist/assets/RepositoryHistoryView-D0ynYRgu.js +0 -2
  95. package/dist/assets/RequirementIntakeView-CPRtncuJ.js +0 -1
  96. package/dist/assets/SddHub-CoRKeq7Q.js +0 -2
  97. package/dist/assets/button-9ewV4TF3.js +0 -1
  98. package/dist/assets/common-5rSj2oHt.js +0 -1
  99. package/dist/assets/common-B5Uslzr2.js +0 -1
  100. package/dist/assets/common-BnhmJl6b.js +0 -1
  101. package/dist/assets/common-CmkkiJUR.js +0 -1
  102. package/dist/assets/common-CpZ-DoXd.js +0 -1
  103. package/dist/assets/common-Ct-Iodid.js +0 -1
  104. package/dist/assets/common-D9w3BalB.js +0 -1
  105. package/dist/assets/config-store-BAUadwHd.js +0 -22
  106. package/dist/assets/dialog-C7EIBM_2.js +0 -1
  107. package/dist/assets/empty-state-5YP1rmE6.js +0 -1
  108. package/dist/assets/index-NBVZNAcU.css +0 -1
  109. package/dist/assets/input-ag1CrUiS.js +0 -1
  110. package/dist/assets/mailbox-store-C49LeBj8.js +0 -1
  111. package/dist/assets/stores-RkHrTaRO.js +0 -7
  112. package/dist/assets/view-navigation-DHtNFXIl.js +0 -1
@@ -1,3 +1,3 @@
1
1
  const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/vendor-V3ydTHqN.js","assets/rolldown-runtime-hePW80VL.js","assets/react-core-wiHys0m2.js","assets/xyflow-BqDBClm9.js","assets/xyflow-DLioOiRN.css","assets/markdown-CXRzjX3p.js","assets/vendor-jL-bRT8f.css"])))=>i.map(i=>d[i]);
2
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-core-wiHys0m2.js";import{Ja as r,Ma as i,Mr as a,Mt as o,Pa as ee,Qt as te,Ti as ne,Vn as re,Zn as ie,bi as ae,ea as oe,fn as se,ja as s,no as c,qi as ce,ri as le,tr as ue,wo as l,xo as u}from"./vendor-V3ydTHqN.js";import"./i18n-CbyUyl6G.js";import{t as d}from"./vite-preload-BZ1Pz5am.js";import{t as f}from"./utils-CKsqCaP8.js";import{o as de}from"./view-navigation-DHtNFXIl.js";import{n as fe}from"./ui-store-DC3mkswy.js";import{S as pe}from"./fonts-DRGbd-AM.js";import{a as me,n as he,o as ge,t as _e}from"./dialog-C7EIBM_2.js";import{u as ve}from"./markdown-CXRzjX3p.js";import{L as ye,o as p,x as m,y as be}from"./index-3TGBKeBP.js";import{t as xe}from"./empty-state-5YP1rmE6.js";var h=e(t(),1),g=n(),_=(0,h.lazy)(()=>d(()=>import(`./vendor-V3ydTHqN.js`).then(e=>e.r),__vite__mapDeps([0,1,2,3,4,5,6])));function v(e){return e===`project`||e===`user`}function Se(e){let t=e.match(/^(.+?)\/SKILL(?:\.save)?\.md$/);return t?t[1]:null}function Ce({source:e}){let{t}=u(),n=e===`project`?`project`:e===`user`?`user`:`bundled`;return(0,g.jsx)(`span`,{className:f(`inline-flex items-center rounded-md border px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide`,n===`project`&&`border-success/25 bg-success/8 text-success`,n===`user`&&`border-primary/25 bg-primary/10 text-primary`,n===`bundled`&&`border-border/70 bg-muted/60 text-muted-foreground`),children:t(`activity:skillDetail.${{project:`scopeProject`,user:`scopeGlobal`,bundled:`scopeBundled`}[n]}`)})}function y({className:e}){let{t}=u(),{client:n}=ye(),d=fe(e=>e.skillsState),y=fe(e=>e.setSkillsState),b=d.selectedSkill,x=d.navHistory,S=d.historyIndex,[C,w]=(0,h.useState)(null),[we,T]=(0,h.useState)(!1),[E,D]=(0,h.useState)(null),Te=be(`skill-detail`,!!C),[O,k]=(0,h.useState)(!1),[A,j]=(0,h.useState)(``),[M,N]=(0,h.useState)(!1),[P,F]=(0,h.useState)(null),[I,L]=(0,h.useState)(!1),[R,z]=(0,h.useState)(null),[B,V]=(0,h.useState)(!1),H=(0,h.useRef)(``),[Ee,De]=(0,h.useState)(!1),[U,W]=(0,h.useState)(null),[Oe,ke]=(0,h.useState)(!1),[G,K]=(0,h.useState)(null),[q,Ae]=(0,h.useState)(!1),[je,Me]=(0,h.useState)([]),J=(0,h.useRef)(d);J.current=d;let Y=(0,h.useRef)(!1),X=(0,h.useMemo)(()=>A?{lines:A.split(`
2
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-core-wiHys0m2.js";import{Ja as r,Ma as i,Mr as a,Mt as o,Pa as ee,Qt as te,Ti as ne,Vn as re,Zn as ie,bi as ae,ea as oe,fn as se,ja as s,no as c,qi as ce,ri as le,tr as ue,wo as l,xo as u}from"./vendor-V3ydTHqN.js";import"./i18n--QdD6NCn.js";import{t as d}from"./vite-preload-BZ1Pz5am.js";import{t as f}from"./utils-CKsqCaP8.js";import{o as de}from"./view-navigation-DTs4cSQ6.js";import{n as fe}from"./ui-store-DC3mkswy.js";import{S as pe}from"./fonts-DRGbd-AM.js";import{a as me,n as he,o as ge,t as _e}from"./dialog-b-Ai37sa.js";import{u as ve}from"./markdown-CXRzjX3p.js";import{L as ye,o as p,x as m,y as be}from"./index-FWwLmwjx.js";import{t as xe}from"./empty-state-pfuS5znr.js";var h=e(t(),1),g=n(),_=(0,h.lazy)(()=>d(()=>import(`./vendor-V3ydTHqN.js`).then(e=>e.r),__vite__mapDeps([0,1,2,3,4,5,6])));function v(e){return e===`project`||e===`user`}function Se(e){let t=e.match(/^(.+?)\/SKILL(?:\.save)?\.md$/);return t?t[1]:null}function Ce({source:e}){let{t}=u(),n=e===`project`?`project`:e===`user`?`user`:`bundled`;return(0,g.jsx)(`span`,{className:f(`inline-flex items-center rounded-md border px-1.5 py-0.5 text-[10px] font-semibold uppercase tracking-wide`,n===`project`&&`border-success/25 bg-success/8 text-success`,n===`user`&&`border-primary/25 bg-primary/10 text-primary`,n===`bundled`&&`border-border/70 bg-muted/60 text-muted-foreground`),children:t(`activity:skillDetail.${{project:`scopeProject`,user:`scopeGlobal`,bundled:`scopeBundled`}[n]}`)})}function y({className:e}){let{t}=u(),{client:n}=ye(),d=fe(e=>e.skillsState),y=fe(e=>e.setSkillsState),b=d.selectedSkill,x=d.navHistory,S=d.historyIndex,[C,w]=(0,h.useState)(null),[we,T]=(0,h.useState)(!1),[E,D]=(0,h.useState)(null),Te=be(`skill-detail`,!!C),[O,k]=(0,h.useState)(!1),[A,j]=(0,h.useState)(``),[M,N]=(0,h.useState)(!1),[P,F]=(0,h.useState)(null),[I,L]=(0,h.useState)(!1),[R,z]=(0,h.useState)(null),[B,V]=(0,h.useState)(!1),H=(0,h.useRef)(``),[Ee,De]=(0,h.useState)(!1),[U,W]=(0,h.useState)(null),[Oe,ke]=(0,h.useState)(!1),[G,K]=(0,h.useState)(null),[q,Ae]=(0,h.useState)(!1),[je,Me]=(0,h.useState)([]),J=(0,h.useRef)(d);J.current=d;let Y=(0,h.useRef)(!1),X=(0,h.useMemo)(()=>A?{lines:A.split(`
3
3
  `).length,words:A.trim()?A.trim().split(/\s+/).length:0,chars:A.length}:{lines:0,words:0,chars:0},[A]),Z=(0,h.useMemo)(()=>{if(!A)return null;let e=5242880,t=new Blob([A]).size;return t>=e?{level:`critical`,used:t,limit:e}:t>=4194304?{level:`warn`,used:t,limit:e}:null},[A]);(0,h.useEffect)(()=>{if(!R)return;let e=setTimeout(()=>z(null),2e3);return()=>clearTimeout(e)},[R]),(0,h.useEffect)(()=>{if(!O||!b)return;let e=setInterval(()=>{A&&A!==H.current&&(H.current=A,localStorage.setItem(`skills_draft_${b.name}`,JSON.stringify({content:A,savedAt:Date.now()})),z(Date.now()))},5e3);return()=>clearInterval(e)},[O,A,b]),(0,h.useEffect)(()=>{if(!b||!O)return;let e=localStorage.getItem(`skills_draft_${b.name}`);if(e)try{let{content:t}=JSON.parse(e);t&&t!==A&&t!==H.current&&(j(t),H.current=t,V(!0))}catch{}},[b?.name,O]),(0,h.useEffect)(()=>{if(!n||!b)return;T(!0),w(null),D(null);let e=setTimeout(()=>{T(!1),D(l.t(`activity:skillDetail.timeoutError`))},1e4),t=t=>{clearTimeout(e);let n=t;n.payload.error?D(n.payload.error):n.payload.name&&w(n.payload),T(!1)},r=e=>{let t=e;De(!1);let r=J.current;if(t.payload.success){let e={...r.knownRefs};for(let n of t.payload.updated??[])e[n.name]=n.newRef;y({...r,knownRefs:e,updateAvailableCount:0}),W({updated:t.payload.updated??[],unchanged:t.payload.unchanged??[],errors:t.payload.errors??[]}),n.send({type:`skills.list`},{echoToChat:!1})}else W({updated:[],unchanged:[],errors:[{name:``,error:t.payload.error??l.t(`activity:skillDetail.updateFailed`)}]})},i=e=>{let t=e;t.payload.skills&&Me(t.payload.skills)};return n.on(`skills.content`,t),n.on(`skills.updated`,r),n.on(`skills.list`,i),n.send({type:`skills.content`,payload:{name:b.name,source:b.source}}),()=>{clearTimeout(e),n.off(`skills.content`,t),n.off(`skills.updated`,r),n.off(`skills.list`,i)}},[n,b?.name,b?.source]),(0,h.useEffect)(()=>{O&&(k(!1),j(``),F(null))},[b?.name]);let Q=(0,h.useCallback)(e=>je.find(t=>t.name.toLowerCase()===e.toLowerCase()),[je]),Ne=(0,h.useCallback)(e=>{let t=Q(e);if(t){Y.current=!1;let e=x.slice(0,S+1);e.push(t),y({...J.current,selectedSkill:t,navHistory:e,historyIndex:e.length-1}),k(!1),j(``),W(null)}},[Q,x,S,y]),Pe=(0,h.useCallback)(()=>{if(S<=0)return;Y.current=!0;let e=S-1,t=x[e];y({...J.current,selectedSkill:t,historyIndex:e}),k(!1),j(``),W(null)},[S,x,y]),Fe=(0,h.useCallback)(()=>{if(S>=x.length-1)return;Y.current=!0;let e=S+1,t=x[e];y({...J.current,selectedSkill:t,historyIndex:e}),k(!1),j(``),W(null)},[S,x,y]),$=(0,h.useCallback)(()=>{de(`chat`)},[]),Ie=(0,h.useCallback)(()=>{C&&(j(C.body),H.current=C.body,V(!1),F(null),k(!0),L(!1))},[C]),Le=(0,h.useCallback)(()=>{k(!1),j(``),F(null),L(!1),V(!1),b&&localStorage.removeItem(`skills_draft_${b.name}`)},[b]),Re=(0,h.useCallback)(()=>{b&&C&&(V(!1),j(C.body),H.current=C.body,b&&localStorage.removeItem(`skills_draft_${b.name}`))},[b,C]),ze=(0,h.useCallback)(()=>{if(!n||!b||!A.trim())return;N(!0),F(null);let e=t=>{let r=t;N(!1),r.payload.success?(H.current=``,localStorage.removeItem(`skills_draft_${b.name}`),V(!1),k(!1),n.send({type:`skills.content`,payload:{name:b.name,source:b.source}}),n.send({type:`skills.list`},{echoToChat:!1})):F(r.payload.error??l.t(`activity:skillDetail.saveFailed`)),n.off(`skills.edited`,e)};n.on(`skills.edited`,e),n.editSkill(b.name,A)},[n,b,A]),Be=(0,h.useCallback)(()=>{n&&b&&(De(!0),W(null),n.checkForUpdates(b.name,b.source===`user`))},[n,b]),Ve=(0,h.useCallback)(()=>{b?.sourceUrl&&navigator.clipboard.writeText(b.sourceUrl).then(()=>{ke(!0),setTimeout(()=>ke(!1),2e3)})},[b]),He=(0,h.useCallback)(()=>{if(!C?.body)return;let e=new Blob([C.body],{type:`text/markdown`}),t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`${C.name.replace(/\//g,`_`)}-SKILL.md`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(t)},[C]),Ue=(0,h.useCallback)(async e=>{if(!n||!e)return;Ae(!0);let t=e=>{let r=e;Ae(!1),r.payload.success?(K(null),n.send({type:`skills.list`},{echoToChat:!1}),$()):F(r.payload.error??l.t(`activity:skillDetail.uninstallFailed`)),n.off(`skills.uninstalled`,t)};n.on(`skills.uninstalled`,t),n.uninstallSkill(e.name,e.source===`user`)},[n,$]);return b?(0,g.jsxs)(`div`,{className:f(`flex h-full min-h-0 min-w-0 flex-col gap-3 overflow-hidden bg-[hsl(var(--surface-2)/0.45)] p-3`,e),children:[(0,g.jsxs)(`div`,{className:`shrink-0 rounded-xl border border-border/70 bg-card/75 p-4 shadow-sm`,children:[(0,g.jsxs)(`div`,{className:`flex flex-col gap-3 lg:flex-row lg:items-start lg:justify-between`,children:[(0,g.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,g.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-2`,children:[(0,g.jsx)(`span`,{className:`flex h-8 w-8 shrink-0 items-center justify-center rounded-lg bg-primary/10 text-primary`,children:(0,g.jsx)(se,{className:`h-4 w-4`})}),(0,g.jsx)(`h1`,{className:`min-w-0 truncate text-base font-semibold`,children:b.name}),b.version&&(0,g.jsxs)(`span`,{className:`text-xs text-muted-foreground`,children:[`v`,b.version]}),(0,g.jsx)(Ce,{source:b.source})]}),(0,g.jsx)(`p`,{className:`text-sm text-muted-foreground mt-1 line-clamp-2`,children:b.description||b.trigger}),b.sourceUrl&&(0,g.jsxs)(`div`,{className:`mt-2 flex min-w-0 items-center gap-1`,children:[(0,g.jsxs)(`a`,{href:`https://${b.sourceUrl.replace(`github:`,``)}`,target:`_blank`,rel:`noopener noreferrer`,className:`flex min-w-0 items-center gap-1 text-xs text-muted-foreground transition-colors hover:text-foreground`,title:t(`activity:skillDetail.openSourceRepo`),children:[(0,g.jsx)(le,{className:`h-3 w-3 shrink-0`}),(0,g.jsx)(`span`,{className:`truncate font-mono`,children:b.sourceUrl})]}),(0,g.jsx)(`button`,{type:`button`,onClick:Ve,className:`flex shrink-0 items-center text-muted-foreground transition-colors hover:text-foreground`,title:t(`activity:skillDetail.copySourceUrl`),children:Oe?(0,g.jsx)(ee,{className:`h-3 w-3 text-success`}):(0,g.jsx)(oe,{className:`h-3 w-3`})})]}),b.scope.length>0&&(0,g.jsx)(`div`,{className:`flex flex-wrap gap-1 mt-2`,children:b.scope.map(e=>(0,g.jsx)(`span`,{className:`px-1.5 py-0.5 text-[10px] rounded bg-muted text-muted-foreground`,children:e},e))}),U&&(0,g.jsxs)(`div`,{className:`mt-2 text-xs space-y-1`,children:[U.updated.length>0&&(0,g.jsx)(`div`,{className:`text-success`,children:t(`activity:skillDetail.updatedLabel`,{list:U.updated.map(e=>`${e.name} (${e.oldRef} → ${e.newRef})`).join(`, `)})}),U.unchanged.length>0&&(0,g.jsx)(`div`,{className:`text-muted-foreground`,children:t(`activity:skillDetail.upToDateLabel`,{list:U.unchanged.join(`, `)})}),U.errors.length>0&&(0,g.jsx)(`div`,{className:`text-destructive`,children:t(`activity:skillDetail.errorsLabel`,{list:U.errors.map(e=>`${e.name?`${e.name}: `:``}${e.error}`).join(`; `)})})]})]}),(0,g.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1 lg:ml-auto lg:shrink-0 lg:justify-end`,children:[v(b.source)&&b.sourceUrl&&(0,g.jsx)(`button`,{type:`button`,onClick:Be,disabled:Ee,className:`flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:opacity-50`,title:t(`activity:skillDetail.checkUpdatesTitle`),children:Ee?(0,g.jsx)(a,{className:`h-3.5 w-3.5 animate-spin`}):(0,g.jsx)(re,{className:`h-3.5 w-3.5`})}),b.source!==`bundled`&&!O&&(0,g.jsx)(`button`,{type:`button`,onClick:He,className:`flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground`,title:t(`activity:skillDetail.exportTitle`),children:(0,g.jsx)(ce,{className:`h-3.5 w-3.5`})}),v(b.source)&&!O&&(0,g.jsx)(`button`,{type:`button`,onClick:Ie,className:`flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-accent hover:text-foreground`,title:t(`activity:skillDetail.editTitle`),children:(0,g.jsx)(ie,{className:`h-3.5 w-3.5`})}),v(b.source)&&(0,g.jsx)(`button`,{type:`button`,onClick:()=>K(b),className:`flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground transition-colors hover:bg-destructive/10 hover:text-destructive`,title:t(`activity:skillDetail.uninstallTitle`),children:(0,g.jsx)(te,{className:`h-3.5 w-3.5`})}),(0,g.jsx)(`button`,{type:`button`,onClick:$,className:`flex h-8 w-8 items-center justify-center rounded-md text-muted-foreground hover:bg-accent hover:text-foreground`,title:t(`activity:skillDetail.closeTitle`),children:(0,g.jsx)(o,{className:`h-4 w-4`})})]})]}),x.length>1&&(0,g.jsxs)(`div`,{className:`mt-3 flex min-w-0 items-center gap-1 rounded-lg border border-border/60 bg-muted/35 px-2 py-1`,children:[(0,g.jsx)(`button`,{type:`button`,onClick:Pe,disabled:S<=0,className:f(`rounded p-1 transition-colors`,S<=0?`text-muted-foreground/65 cursor-not-allowed`:`hover:bg-accent text-muted-foreground cursor-pointer`),title:t(`activity:skillDetail.backTitle`),children:(0,g.jsx)(i,{className:`h-4 w-4`})}),(0,g.jsx)(`button`,{type:`button`,onClick:Fe,disabled:S>=x.length-1,className:f(`rounded p-1 transition-colors`,S>=x.length-1?`text-muted-foreground/65 cursor-not-allowed`:`hover:bg-accent text-muted-foreground cursor-pointer`),title:t(`activity:skillDetail.forwardTitle`),children:(0,g.jsx)(s,{className:`h-4 w-4`})}),(0,g.jsx)(`div`,{className:`flex items-center gap-0.5 overflow-x-auto text-xs`,children:x.map((e,t)=>(0,g.jsxs)(`span`,{className:`flex items-center shrink-0`,children:[t>0&&(0,g.jsx)(s,{className:`h-3 w-3 text-muted-foreground/65 mx-0.5 shrink-0`}),(0,g.jsx)(`button`,{type:`button`,onClick:()=>{t<S&&(Y.current=!0,y({...J.current,selectedSkill:e,historyIndex:t}),k(!1),j(``),W(null))},className:f(`hover:text-primary cursor-pointer transition-colors`,t===S?`text-primary font-medium`:`text-muted-foreground`),children:e.name})]},e.name+t))})]})]}),C&&(C.relatedFiles.length>0||C.references.length>0)&&(0,g.jsxs)(`div`,{className:`shrink-0 space-y-2 rounded-xl border border-border/70 bg-card/70 px-4 py-3 shadow-sm`,children:[C.relatedFiles.length>0&&(0,g.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-1 text-[10px] text-muted-foreground`,children:[(0,g.jsx)(ae,{className:`h-3 w-3`}),(0,g.jsx)(`span`,{className:`font-medium uppercase tracking-wide`,children:t(`activity:skillDetail.relatedFiles`)})]}),C.relatedFiles.map(e=>{let n=Se(e);return n&&Q(n)?(0,g.jsxs)(`button`,{type:`button`,onClick:()=>Ne(n),className:`inline-flex min-w-0 items-center gap-1 rounded-md border border-border/70 bg-background/60 px-1.5 py-0.5 text-[10px] transition-colors hover:border-primary/40 hover:text-primary`,title:t(`activity:skillDetail.goToSkillTitle`,{name:n}),children:[(0,g.jsx)(c,{className:`h-2.5 w-2.5`}),e]},e):(0,g.jsx)(`span`,{className:`rounded-md border border-border/70 bg-background/60 px-1.5 py-0.5 text-[10px] text-muted-foreground`,children:e},e)})]}),C.references.length>0&&(0,g.jsxs)(`div`,{className:`flex items-center gap-2 flex-wrap`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-1 text-[10px] text-muted-foreground`,children:[(0,g.jsx)(ne,{className:`h-3 w-3`}),(0,g.jsx)(`span`,{className:`font-medium uppercase tracking-wide`,children:t(`activity:skillDetail.references`)})]}),C.references.map(e=>{let n=Se(e)??e.replace(/\.md$/,``);return Q(n)?(0,g.jsxs)(`button`,{type:`button`,onClick:()=>Ne(n),className:`inline-flex min-w-0 items-center gap-1 rounded-md border border-primary/20 bg-primary/5 px-1.5 py-0.5 text-[10px] text-primary transition-colors hover:border-primary/30 hover:bg-primary/10`,title:t(`activity:skillDetail.goToSkillTitle`,{name:n}),children:[(0,g.jsx)(c,{className:`h-2.5 w-2.5`}),n]},e):(0,g.jsx)(`span`,{className:`rounded-md bg-muted px-1.5 py-0.5 text-[10px] text-muted-foreground`,children:n},e)})]})]}),(0,g.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1 overflow-hidden rounded-xl border border-border/70 bg-card/70 shadow-sm`,children:we?(0,g.jsxs)(`div`,{className:`flex h-full min-h-[16rem] flex-col items-center justify-center p-8 text-center text-muted-foreground`,children:[(0,g.jsx)(a,{className:`mx-auto mb-2 h-6 w-6 animate-spin text-primary`}),(0,g.jsx)(`p`,{children:t(`activity:skillDetail.loadingContent`)})]}):O?(0,g.jsxs)(`div`,{className:`flex h-full min-h-0 min-w-0 flex-col`,children:[(0,g.jsxs)(`div`,{className:`flex shrink-0 flex-col gap-2 border-b border-border/70 bg-muted/30 px-4 py-2 sm:flex-row sm:items-center sm:justify-between`,children:[(0,g.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-x-3 gap-y-1`,children:[(0,g.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:t(`activity:skillDetail.editingLabel`,{name:b.name})}),(0,g.jsx)(`span`,{className:`text-xs text-muted-foreground tabular-nums`,children:t(`activity:skillDetail.editStats`,{lines:X.lines,words:X.words,chars:X.chars})}),Z&&(0,g.jsx)(`span`,{className:`text-xs tabular-nums ${Z.level===`critical`?`font-medium text-destructive`:`text-warning`}`,children:t(`activity:skillDetail.charsWarningFmt`,{used:(Z.used/1048576).toFixed(1),limit:(Z.limit/1048576).toFixed(0)})}),R&&(0,g.jsx)(`span`,{className:`text-xs text-success animate-pulse`,children:t(`activity:skillDetail.draftSaved`)}),B&&(0,g.jsx)(`span`,{className:`animate-pulse text-xs text-warning`,children:t(`activity:skillDetail.draftRestored`)})]}),(0,g.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[P&&(0,g.jsx)(`span`,{className:`text-xs text-destructive`,children:P}),B&&(0,g.jsx)(`button`,{type:`button`,onClick:Re,className:`rounded-md border border-warning/35 px-2 py-1 text-[10px] text-warning transition-colors hover:bg-warning/10`,children:t(`activity:skillDetail.discardDraft`)}),(0,g.jsx)(`button`,{type:`button`,onClick:Le,className:`rounded-md border border-border/70 px-2 py-1 text-xs transition-colors hover:bg-accent`,children:t(`common:action.cancel`)}),(0,g.jsx)(`button`,{type:`button`,onClick:()=>L(e=>!e),title:t(I?`activity:skillDetail.hidePreviewTitle`:`activity:skillDetail.splitViewTitle`),className:`rounded-md border px-2 py-1 text-xs transition-colors ${I?`border-primary/40 bg-primary/10 text-primary`:`border-border/70 text-muted-foreground hover:bg-accent`}`,children:(0,g.jsx)(ue,{className:`h-3 w-3 inline`})}),(0,g.jsx)(`button`,{type:`button`,onClick:ze,disabled:M||!A.trim(),className:`rounded-md bg-primary px-3 py-1 text-xs text-primary-foreground shadow-sm shadow-primary/15 transition-colors hover:bg-primary/90 disabled:opacity-50`,children:M?(0,g.jsx)(a,{className:`h-3 w-3 animate-spin inline`}):t(`common:action.save`)})]})]}),I?(0,g.jsxs)(`div`,{className:`flex flex-1 min-h-0 gap-0.5`,children:[(0,g.jsx)(`div`,{className:`flex-1 min-w-0 flex flex-col min-h-0`,children:(0,g.jsx)(h.Suspense,{fallback:null,children:(0,g.jsx)(_,{value:A,onChange:e=>j(e.target.value??``),language:`markdown`,className:`flex-1`,style:{fontSize:pe(12),fontFamily:`var(--font-editor)`,backgroundColor:`transparent`,minHeight:0},placeholder:t(`activity:skillDetail.contentPlaceholder`)})})}),(0,g.jsx)(`div`,{className:`w-px bg-border flex-shrink-0`}),(0,g.jsx)(`div`,{className:`min-h-0 min-w-0 flex-1 overflow-y-auto overscroll-contain bg-background/45 p-4 prose prose-sm dark:prose-invert max-w-none`,children:(0,g.jsx)(p,{rehypePlugins:[ve],components:m,children:A})})]}):(0,g.jsx)(h.Suspense,{fallback:null,children:(0,g.jsx)(_,{value:A,onChange:e=>j(e.target.value??``),language:`markdown`,className:`flex-1`,style:{fontSize:pe(12),fontFamily:`var(--font-editor)`,backgroundColor:`transparent`,minHeight:0},placeholder:t(`activity:skillDetail.contentPlaceholder`)})})]}):C?(0,g.jsx)(`div`,{ref:Te,className:`h-full min-h-0 overflow-y-auto overscroll-contain p-5 sm:p-6 prose prose-sm dark:prose-invert max-w-none`,children:(0,g.jsx)(p,{rehypePlugins:[ve],components:m,children:C.body})}):E?(0,g.jsxs)(`div`,{className:`flex h-full min-h-[16rem] flex-col items-center justify-center p-8 text-center`,children:[(0,g.jsx)(`p`,{className:`text-destructive mb-2`,children:t(`activity:skillDetail.loadFailed`)}),(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:E}),(0,g.jsx)(`button`,{type:`button`,onClick:()=>{n&&b&&(T(!0),D(null),n.send({type:`skills.content`,payload:{name:b.name,source:b.source}}))},className:`mt-4 rounded-md border border-border/70 px-3 py-1.5 text-xs transition-colors hover:bg-accent`,children:t(`common:action.retry`)})]}):(0,g.jsx)(`div`,{className:`flex h-full min-h-[16rem] items-center justify-center p-8 text-center text-muted-foreground`,children:t(`activity:skillDetail.noContent`)})}),(0,g.jsx)(_e,{open:!!G,onOpenChange:e=>{e||K(null)},children:(0,g.jsxs)(he,{className:`flex max-h-[calc(100dvh-2rem)] w-[380px] max-w-[90vw] flex-col gap-0 overflow-hidden p-0`,showCloseButton:!1,children:[(0,g.jsxs)(me,{className:`flex shrink-0 items-center justify-between border-b border-border/70 p-4 sm:flex-row sm:justify-between sm:space-y-0`,children:[(0,g.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,g.jsx)(te,{className:`h-4 w-4 text-destructive`}),(0,g.jsx)(ge,{className:`font-semibold text-sm`,children:t(`activity:skillDetail.uninstallSkillHeading`)})]}),(0,g.jsx)(`button`,{type:`button`,onClick:()=>K(null),"aria-label":t(`common:action.close`),className:`rounded p-1 text-muted-foreground hover:bg-accent hover:text-accent-foreground`,children:(0,g.jsx)(o,{className:`h-4 w-4`})})]}),(0,g.jsxs)(`div`,{className:`min-h-0 flex-1 space-y-2 overflow-y-auto overscroll-contain p-4`,children:[(0,g.jsx)(`p`,{className:`text-sm`,children:G&&t(`activity:skillDetail.uninstallConfirm`,{name:G.name})}),(0,g.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:G&&t(`activity:skillDetail.uninstallRemovePath`,{path:G.path})})]}),(0,g.jsxs)(`div`,{className:`flex shrink-0 justify-end gap-2 border-t border-border/70 bg-muted/20 p-4`,children:[(0,g.jsx)(`button`,{type:`button`,onClick:()=>K(null),disabled:q,className:`rounded-md border border-border/70 px-3 py-1.5 text-xs transition-colors hover:bg-accent disabled:opacity-50`,children:t(`common:action.cancel`)}),(0,g.jsxs)(`button`,{type:`button`,onClick:()=>G&&Ue(G),disabled:q,className:`flex items-center gap-1.5 rounded-md bg-destructive px-3 py-1.5 text-xs text-destructive-foreground transition-colors hover:bg-destructive/90 disabled:cursor-not-allowed disabled:opacity-50`,children:[q&&(0,g.jsx)(a,{className:`h-3 w-3 animate-spin`}),t(`activity:skillDetail.uninstallAction`)]})]})]})})]}):(0,g.jsx)(xe,{icon:(0,g.jsx)(r,{className:`h-6 w-6`}),title:t(`activity:skillDetail.noSkillSelected`),description:t(`activity:skillDetail.selectSkillHint`),action:{label:t(`activity:skillDetail.goToChat`),onClick:$},className:e})}export{y as SkillDetailView};
@@ -1,2 +1,2 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-core-wiHys0m2.js";import{Dn as r,Fi as i,Ga as a,Hi as o,Mr as s,Mt as c,Q as l,Rn as u,Ti as d,Vn as f,Wa as p,ca as m,di as h,fn as g,hn as _,jt as v,la as y,mi as b,mr as x,po as ee,qi as te,so as S,sr as ne,ta as C,tn as w,xo as T,yn as re}from"./vendor-V3ydTHqN.js";import"./i18n-CbyUyl6G.js";import{t as E}from"./utils-CKsqCaP8.js";import{n as D}from"./stores-RkHrTaRO.js";import{t as O}from"./button-9ewV4TF3.js";import{t as k}from"./input-ag1CrUiS.js";import{B as ie,E as A,H as ae,T as oe,V as j,z as se}from"./index-3TGBKeBP.js";var M=e(t(),1),N=n(),P={current:{labelKey:`activity:techStackStatus.current`,badge:`border-success/35 bg-success/10 text-success`,dot:`bg-success`,weight:0},update_available_safe:{labelKey:`activity:techStackStatus.update_available_safe`,badge:`border-info/35 bg-info/10 text-info`,dot:`bg-info`,weight:30},update_available_breaking:{labelKey:`activity:techStackStatus.update_available_breaking`,badge:`border-warning/35 bg-warning/10 text-warning`,dot:`bg-warning`,weight:50},vulnerable:{labelKey:`activity:techStackStatus.vulnerable`,badge:`border-destructive/45 bg-destructive/15 text-destructive`,dot:`bg-destructive`,weight:100},deprecated:{labelKey:`activity:techStackStatus.deprecated`,badge:`border-destructive/35 bg-destructive/10 text-destructive`,dot:`bg-destructive`,weight:70},yanked:{labelKey:`activity:techStackStatus.yanked`,badge:`border-destructive/45 bg-destructive/15 text-destructive`,dot:`bg-destructive`,weight:80},unmaintained_suspected:{labelKey:`activity:techStackStatus.unmaintained_suspected`,badge:`border-warning/35 bg-warning/10 text-warning`,dot:`bg-warning`,weight:60},blocked_by_constraints:{labelKey:`activity:techStackStatus.blocked_by_constraints`,badge:`border-warning/30 bg-warning/5 text-warning`,dot:`bg-warning`,weight:40},private_or_unresolved:{labelKey:`activity:techStackStatus.private_or_unresolved`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:10},local_path:{labelKey:`activity:techStackStatus.local_path`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:5},git_dependency:{labelKey:`activity:techStackStatus.git_dependency`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:5},unsupported:{labelKey:`activity:techStackStatus.unsupported`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:5},unknown:{labelKey:`activity:techStackStatus.unknown`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:20}},ce={labelKey:`activity:techStackStatus.unknown`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:0};function F(e){return P[e]??ce}var le={npm:{label:`npm / Node.js`,icon:ne},python:{label:`Python`,icon:y},rust:{label:`Rust`,icon:_},go:{label:`Go`,icon:u},dotnet:{label:`.NET`,icon:x},php:{label:`PHP`,icon:w},dart:{label:`Dart / Flutter`,icon:C},maven:{label:`Maven`,icon:ee},gradle:{label:`Gradle`,icon:a},ruby:{label:`Ruby`,icon:h},swift:{label:`Swift`,icon:v},elixir:{label:`Elixir`,icon:w},cpp:{label:`C / C++`,icon:m}},ue={labelKey:`activity:techStackStatus.unknown`};function I(e,t){let n=L(e);return n.labelKey?t(n.labelKey):n.label??e}function L(e){return le[e]??ue}function R({ecosystem:e,className:t=`size-3.5 shrink-0`}){let n=L(e);if(!n.icon)return null;let r=n.icon;return(0,N.jsx)(r,{className:t})}function de(e){return F(e.status).weight>=50}var fe=[`critical`,`high`,`medium`,`low`,`info`],z={critical:{labelKey:`activity:techStackSeverity.critical`,badge:`border-destructive/45 bg-destructive/15 text-destructive`},high:{labelKey:`activity:techStackSeverity.high`,badge:`border-destructive/35 bg-destructive/10 text-destructive`},medium:{labelKey:`activity:techStackSeverity.medium`,badge:`border-warning/35 bg-warning/10 text-warning`},low:{labelKey:`activity:techStackSeverity.low`,badge:`border-info/35 bg-info/10 text-info`},info:{labelKey:`activity:techStackSeverity.info`,badge:`border-border/70 bg-muted text-muted-foreground`}},B={none:`activity:techStackAction.none`,upgrade_patch:`activity:techStackAction.upgrade_patch`,upgrade_minor:`activity:techStackAction.upgrade_minor`,upgrade_major:`activity:techStackAction.upgrade_major`,replace:`activity:techStackAction.replace`,remove:`activity:techStackAction.remove`,investigate:`activity:techStackAction.investigate`},V={full:{labelKey:`activity:techStackCoverage.full`,badge:`border-success/35 bg-success/10 text-success`,noteKey:void 0},partial:{labelKey:`activity:techStackCoverage.partial`,badge:`border-warning/35 bg-warning/10 text-warning`,noteKey:`activity:techStackCoverage.partialNote`},unsupported:{labelKey:`activity:techStackCoverage.unsupported`,badge:`border-border/70 bg-muted text-muted-foreground`,noteKey:`activity:techStackCoverage.unsupportedNote`}};function H(e){return V[e]??V.unsupported}function U(e){if(!e)return null;let t=/^\D*(\d+)/.exec(e);if(!t?.[1])return null;let n=Number(t[1]);return Number.isFinite(n)?n:null}function W(e){let t=U(e.locked??e.installed??e.requested),n=U(e.latestStable);if(t===null||n===null||n<=t)return{majorsBehind:0,label:null};let r=n-t;return{majorsBehind:r,label:`${r} major${r===1?``:`s`} behind`}}function G(e){return e.locked??e.installed??e.requested??null}function K(e){return e.confidence<1}function q({className:e,children:t}){return(0,N.jsx)(`span`,{className:E(`inline-flex shrink-0 items-center gap-1 border px-1.5 py-0.5 text-[10px] font-medium`,e),children:t})}function J({label:e,value:t,hint:n,tone:r=`default`}){let i={default:`text-foreground`,success:`text-success`,warning:`text-warning`,info:`text-info`,destructive:`text-destructive`}[r];return(0,N.jsxs)(`div`,{className:`border border-border/70 bg-card/55 px-3 py-2.5 shadow-[inset_0_1px_0_hsl(var(--foreground)/0.035)]`,children:[(0,N.jsx)(`p`,{className:`text-[9px] font-bold uppercase tracking-[0.16em] text-muted-foreground`,children:e}),(0,N.jsxs)(`div`,{className:`mt-1 flex items-end justify-between gap-2`,children:[(0,N.jsx)(`p`,{className:E(`font-mono text-xl font-bold tabular-nums`,i),children:t}),(0,N.jsx)(`p`,{className:`truncate text-[9px] text-muted-foreground`,children:n})]})]})}function Y(e,t){let n,r,i;if(t===`json`)n=JSON.stringify(e,null,2),r=`techstack.json`,i=`application/json`;else if(t===`spdx`){let t={spdxVersion:`SPDX-2.3`,dataLicense:`CC0-1.0`,SPDXID:`SPDXRef-DOCUMENT`,name:`TechStack-SBOM-${e.projectId}`,documentNamespace:`https://wrongstack.dev/spdx/${e.id}`,creationInfo:{created:e.createdAt,creators:[`Tool: WrongStack TechStack Engine`]},packages:e.dependencies.map((e,t)=>({name:e.name,SPDXID:`SPDXRef-Package-${t}`,versionInfo:e.locked??e.requested,downloadLocation:e.purl?`https://purl.io/${e.purl}`:`NOASSERTION`,licenseConcluded:e.license??`NOASSERTION`}))};n=JSON.stringify(t,null,2),r=`techstack-sbom-spdx.json`,i=`application/json`}else if(t===`cyclonedx`){let t={bomFormat:`CycloneDX`,specVersion:`1.5`,version:1,metadata:{timestamp:e.createdAt,tools:[{name:`WrongStack TechStack Engine`,version:e.adapterVersion}]},components:e.dependencies.map(e=>({type:`library`,name:e.name,version:e.locked??e.requested,...e.purl?{purl:e.purl}:{},...e.license?{licenses:[{license:{id:e.license}}]}:{}}))};n=JSON.stringify(t,null,2),r=`techstack-sbom-cyclonedx.json`,i=`application/json`}else{let t=[`# TechStack Report`,``,`**Generated:** ${e.createdAt}`,`**Target:** ${e.targetRoot}`,`**Fingerprint:** ${e.fingerprint}`,`**Workspaces:** ${e.workspaces.length}`,`**Dependencies:** ${e.dependencies.length}`,`**Findings:** ${e.findings.length}`,`**Coverage:** ${e.coverage}`,``];if(e.workspaces.length>0){t.push(`## Workspaces`,``,`| Workspace | Ecosystem | Coverage | Deps |`,`|---|---|---|---|`);for(let n of e.workspaces){let r=e.dependencies.filter(e=>e.workspaceId===n.id).length;t.push(`| ${n.relativeRoot} | ${n.ecosystem} | ${n.coverage} | ${r} |`)}t.push(``)}if(e.findings.length>0){t.push(`## Findings`,``);let n=new Map;for(let t of e.findings)n.set(t.severity,[...n.get(t.severity)??[],t]);for(let r of[`critical`,`high`,`medium`,`low`,`info`]){let i=n.get(r);if(i?.length){t.push(`### ${r.charAt(0).toUpperCase()+r.slice(1)} (${i.length})`,``);for(let n of i){let r=e.dependencies.find(e=>e.id===n.dependencyId);t.push(`- **${r?.name??n.dependencyId}** — ${n.type} — ${n.rationale}`)}t.push(``)}}}if(e.dependencies.length>0){t.push(`## Dependencies`,``,`| Name | Ecosystem | Status | Locked | Latest |`,`|---|---|---|---|---|`);for(let n of e.dependencies)t.push(`| ${n.name} | ${n.ecosystem} | ${n.status} | ${n.locked??`—`} | ${n.latestStable??`—`} |`)}n=t.join(`
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-core-wiHys0m2.js";import{Dn as r,Fi as i,Ga as a,Hi as o,Mr as s,Mt as c,Q as l,Rn as u,Ti as d,Vn as f,Wa as p,ca as m,di as h,fn as g,hn as _,jt as v,la as y,mi as b,mr as x,po as ee,qi as te,so as S,sr as ne,ta as C,tn as w,xo as T,yn as re}from"./vendor-V3ydTHqN.js";import"./i18n--QdD6NCn.js";import{t as E}from"./utils-CKsqCaP8.js";import{n as D}from"./stores-2kakt8j9.js";import{t as O}from"./button-BbeB5Qm8.js";import{t as k}from"./input-BA6D2L3K.js";import{B as ie,E as A,H as ae,T as oe,V as j,z as se}from"./index-FWwLmwjx.js";var M=e(t(),1),N=n(),P={current:{labelKey:`activity:techStackStatus.current`,badge:`border-success/35 bg-success/10 text-success`,dot:`bg-success`,weight:0},update_available_safe:{labelKey:`activity:techStackStatus.update_available_safe`,badge:`border-info/35 bg-info/10 text-info`,dot:`bg-info`,weight:30},update_available_breaking:{labelKey:`activity:techStackStatus.update_available_breaking`,badge:`border-warning/35 bg-warning/10 text-warning`,dot:`bg-warning`,weight:50},vulnerable:{labelKey:`activity:techStackStatus.vulnerable`,badge:`border-destructive/45 bg-destructive/15 text-destructive`,dot:`bg-destructive`,weight:100},deprecated:{labelKey:`activity:techStackStatus.deprecated`,badge:`border-destructive/35 bg-destructive/10 text-destructive`,dot:`bg-destructive`,weight:70},yanked:{labelKey:`activity:techStackStatus.yanked`,badge:`border-destructive/45 bg-destructive/15 text-destructive`,dot:`bg-destructive`,weight:80},unmaintained_suspected:{labelKey:`activity:techStackStatus.unmaintained_suspected`,badge:`border-warning/35 bg-warning/10 text-warning`,dot:`bg-warning`,weight:60},blocked_by_constraints:{labelKey:`activity:techStackStatus.blocked_by_constraints`,badge:`border-warning/30 bg-warning/5 text-warning`,dot:`bg-warning`,weight:40},private_or_unresolved:{labelKey:`activity:techStackStatus.private_or_unresolved`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:10},local_path:{labelKey:`activity:techStackStatus.local_path`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:5},git_dependency:{labelKey:`activity:techStackStatus.git_dependency`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:5},unsupported:{labelKey:`activity:techStackStatus.unsupported`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:5},unknown:{labelKey:`activity:techStackStatus.unknown`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:20}},ce={labelKey:`activity:techStackStatus.unknown`,badge:`border-border/70 bg-muted text-muted-foreground`,dot:`bg-muted-foreground`,weight:0};function F(e){return P[e]??ce}var le={npm:{label:`npm / Node.js`,icon:ne},python:{label:`Python`,icon:y},rust:{label:`Rust`,icon:_},go:{label:`Go`,icon:u},dotnet:{label:`.NET`,icon:x},php:{label:`PHP`,icon:w},dart:{label:`Dart / Flutter`,icon:C},maven:{label:`Maven`,icon:ee},gradle:{label:`Gradle`,icon:a},ruby:{label:`Ruby`,icon:h},swift:{label:`Swift`,icon:v},elixir:{label:`Elixir`,icon:w},cpp:{label:`C / C++`,icon:m}},ue={labelKey:`activity:techStackStatus.unknown`};function I(e,t){let n=L(e);return n.labelKey?t(n.labelKey):n.label??e}function L(e){return le[e]??ue}function R({ecosystem:e,className:t=`size-3.5 shrink-0`}){let n=L(e);if(!n.icon)return null;let r=n.icon;return(0,N.jsx)(r,{className:t})}function de(e){return F(e.status).weight>=50}var fe=[`critical`,`high`,`medium`,`low`,`info`],z={critical:{labelKey:`activity:techStackSeverity.critical`,badge:`border-destructive/45 bg-destructive/15 text-destructive`},high:{labelKey:`activity:techStackSeverity.high`,badge:`border-destructive/35 bg-destructive/10 text-destructive`},medium:{labelKey:`activity:techStackSeverity.medium`,badge:`border-warning/35 bg-warning/10 text-warning`},low:{labelKey:`activity:techStackSeverity.low`,badge:`border-info/35 bg-info/10 text-info`},info:{labelKey:`activity:techStackSeverity.info`,badge:`border-border/70 bg-muted text-muted-foreground`}},B={none:`activity:techStackAction.none`,upgrade_patch:`activity:techStackAction.upgrade_patch`,upgrade_minor:`activity:techStackAction.upgrade_minor`,upgrade_major:`activity:techStackAction.upgrade_major`,replace:`activity:techStackAction.replace`,remove:`activity:techStackAction.remove`,investigate:`activity:techStackAction.investigate`},V={full:{labelKey:`activity:techStackCoverage.full`,badge:`border-success/35 bg-success/10 text-success`,noteKey:void 0},partial:{labelKey:`activity:techStackCoverage.partial`,badge:`border-warning/35 bg-warning/10 text-warning`,noteKey:`activity:techStackCoverage.partialNote`},unsupported:{labelKey:`activity:techStackCoverage.unsupported`,badge:`border-border/70 bg-muted text-muted-foreground`,noteKey:`activity:techStackCoverage.unsupportedNote`}};function H(e){return V[e]??V.unsupported}function U(e){if(!e)return null;let t=/^\D*(\d+)/.exec(e);if(!t?.[1])return null;let n=Number(t[1]);return Number.isFinite(n)?n:null}function W(e){let t=U(e.locked??e.installed??e.requested),n=U(e.latestStable);if(t===null||n===null||n<=t)return{majorsBehind:0,label:null};let r=n-t;return{majorsBehind:r,label:`${r} major${r===1?``:`s`} behind`}}function G(e){return e.locked??e.installed??e.requested??null}function K(e){return e.confidence<1}function q({className:e,children:t}){return(0,N.jsx)(`span`,{className:E(`inline-flex shrink-0 items-center gap-1 border px-1.5 py-0.5 text-[10px] font-medium`,e),children:t})}function J({label:e,value:t,hint:n,tone:r=`default`}){let i={default:`text-foreground`,success:`text-success`,warning:`text-warning`,info:`text-info`,destructive:`text-destructive`}[r];return(0,N.jsxs)(`div`,{className:`border border-border/70 bg-card/55 px-3 py-2.5 shadow-[inset_0_1px_0_hsl(var(--foreground)/0.035)]`,children:[(0,N.jsx)(`p`,{className:`text-[9px] font-bold uppercase tracking-[0.16em] text-muted-foreground`,children:e}),(0,N.jsxs)(`div`,{className:`mt-1 flex items-end justify-between gap-2`,children:[(0,N.jsx)(`p`,{className:E(`font-mono text-xl font-bold tabular-nums`,i),children:t}),(0,N.jsx)(`p`,{className:`truncate text-[9px] text-muted-foreground`,children:n})]})]})}function Y(e,t){let n,r,i;if(t===`json`)n=JSON.stringify(e,null,2),r=`techstack.json`,i=`application/json`;else if(t===`spdx`){let t={spdxVersion:`SPDX-2.3`,dataLicense:`CC0-1.0`,SPDXID:`SPDXRef-DOCUMENT`,name:`TechStack-SBOM-${e.projectId}`,documentNamespace:`https://wrongstack.dev/spdx/${e.id}`,creationInfo:{created:e.createdAt,creators:[`Tool: WrongStack TechStack Engine`]},packages:e.dependencies.map((e,t)=>({name:e.name,SPDXID:`SPDXRef-Package-${t}`,versionInfo:e.locked??e.requested,downloadLocation:e.purl?`https://purl.io/${e.purl}`:`NOASSERTION`,licenseConcluded:e.license??`NOASSERTION`}))};n=JSON.stringify(t,null,2),r=`techstack-sbom-spdx.json`,i=`application/json`}else if(t===`cyclonedx`){let t={bomFormat:`CycloneDX`,specVersion:`1.5`,version:1,metadata:{timestamp:e.createdAt,tools:[{name:`WrongStack TechStack Engine`,version:e.adapterVersion}]},components:e.dependencies.map(e=>({type:`library`,name:e.name,version:e.locked??e.requested,...e.purl?{purl:e.purl}:{},...e.license?{licenses:[{license:{id:e.license}}]}:{}}))};n=JSON.stringify(t,null,2),r=`techstack-sbom-cyclonedx.json`,i=`application/json`}else{let t=[`# TechStack Report`,``,`**Generated:** ${e.createdAt}`,`**Target:** ${e.targetRoot}`,`**Fingerprint:** ${e.fingerprint}`,`**Workspaces:** ${e.workspaces.length}`,`**Dependencies:** ${e.dependencies.length}`,`**Findings:** ${e.findings.length}`,`**Coverage:** ${e.coverage}`,``];if(e.workspaces.length>0){t.push(`## Workspaces`,``,`| Workspace | Ecosystem | Coverage | Deps |`,`|---|---|---|---|`);for(let n of e.workspaces){let r=e.dependencies.filter(e=>e.workspaceId===n.id).length;t.push(`| ${n.relativeRoot} | ${n.ecosystem} | ${n.coverage} | ${r} |`)}t.push(``)}if(e.findings.length>0){t.push(`## Findings`,``);let n=new Map;for(let t of e.findings)n.set(t.severity,[...n.get(t.severity)??[],t]);for(let r of[`critical`,`high`,`medium`,`low`,`info`]){let i=n.get(r);if(i?.length){t.push(`### ${r.charAt(0).toUpperCase()+r.slice(1)} (${i.length})`,``);for(let n of i){let r=e.dependencies.find(e=>e.id===n.dependencyId);t.push(`- **${r?.name??n.dependencyId}** — ${n.type} — ${n.rationale}`)}t.push(``)}}}if(e.dependencies.length>0){t.push(`## Dependencies`,``,`| Name | Ecosystem | Status | Locked | Latest |`,`|---|---|---|---|---|`);for(let n of e.dependencies)t.push(`| ${n.name} | ${n.ecosystem} | ${n.status} | ${n.locked??`—`} | ${n.latestStable??`—`} |`)}n=t.join(`
2
2
  `),r=`techstack-report.md`,i=`text/markdown`}let a=new Blob([n],{type:i}),o=URL.createObjectURL(a),s=document.createElement(`a`);s.href=o,s.download=r,s.click(),URL.revokeObjectURL(o)}function pe({dependency:e,findings:t,deepDive:n,onDeepDive:r,onBack:i,coverage:a}){let{t:c}=T(),l=F(e.status),u=G(e),d=W(e),f=a?H(a).noteKey:void 0;return(0,N.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,N.jsxs)(`header`,{className:`shrink-0 border-b border-border/70 bg-card/45 p-3`,children:[(0,N.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,N.jsx)(O,{variant:`ghost`,size:`icon`,onClick:i,"aria-label":c(`activity:techStack.backToDependencyList`),className:`shrink-0 md:hidden`,children:(0,N.jsx)(S,{className:`size-4`})}),(0,N.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,N.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,N.jsx)(`h2`,{className:`min-w-0 truncate font-mono text-sm font-bold text-foreground`,children:e.name}),(0,N.jsx)(q,{className:l.badge,children:c(l.labelKey)})]}),(0,N.jsxs)(`p`,{className:`mt-0.5 truncate text-[10px] text-muted-foreground`,children:[I(e.ecosystem,c),` ·`,` `,e.direct?`direct`:`transitive`,` · `,e.scope,` ·`,` `,e.sourceType,f&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`span`,{"aria-hidden":`true`,children:` · `}),(0,N.jsx)(`span`,{className:`text-warning`,children:c(f)})]})]})]})]}),(0,N.jsxs)(`div`,{className:`mt-2 flex flex-wrap items-baseline gap-2 font-mono text-xs`,children:[(0,N.jsx)(`span`,{className:`text-foreground`,children:u??`—`}),e.latestStable&&e.latestStable!==u&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`span`,{className:`text-muted-foreground`,children:`→`}),(0,N.jsx)(`span`,{className:`text-info`,children:e.latestStable})]}),d.label&&(0,N.jsxs)(`span`,{className:`text-[10px] text-warning`,children:[`(`,d.label,`)`]})]})]}),(0,N.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-auto p-3`,children:[(0,N.jsxs)(`dl`,{className:`grid grid-cols-2 gap-px border border-border/70 bg-border/60`,children:[(0,N.jsx)(X,{label:c(`activity:techStack.constraint`),value:e.requested??`—`,mono:!0}),(0,N.jsx)(X,{label:c(`activity:techStack.locked`),value:e.locked??`—`,mono:!0}),(0,N.jsx)(X,{label:c(`activity:techStack.latestStable`),value:e.latestStable??`—`,mono:!0}),(0,N.jsx)(X,{label:c(`activity:techStack.license`),value:e.license??`—`}),e.wanted&&(0,N.jsx)(X,{label:c(`activity:techStack.wanted`),value:e.wanted,mono:!0}),e.resolvable&&(0,N.jsx)(X,{label:c(`activity:techStack.resolvable`),value:e.resolvable,mono:!0}),e.purl&&(0,N.jsx)(X,{label:c(`activity:techStack.purl`),value:e.purl,mono:!0}),(0,N.jsx)(X,{label:c(`activity:techStack.registryFlags`),value:[e.deprecated&&`deprecated`,e.yanked&&`yanked`].filter(Boolean).join(`, `)||`none`})]}),(0,N.jsxs)(`section`,{className:`mt-4`,children:[(0,N.jsxs)(`div`,{className:`mb-1.5 flex flex-wrap items-center justify-between gap-2`,children:[(0,N.jsx)(`h3`,{className:`text-[9px] font-bold uppercase tracking-[0.16em] text-muted-foreground`,children:c(`activity:techStack.findings`)}),(0,N.jsxs)(O,{variant:`outline`,size:`sm`,onClick:()=>r(e),disabled:n.status===`loading`,className:`h-7 text-[10px]`,children:[n.status===`loading`?(0,N.jsx)(s,{className:`size-3 animate-spin`}):(0,N.jsx)(g,{className:`size-3`}),n.status===`loading`?`Researching…`:`Deep dive`]})]}),n.status===`error`&&n.error&&(0,N.jsx)(`p`,{role:`alert`,className:`mb-1.5 text-[10px] text-destructive`,children:n.error}),t.length===0?(0,N.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:c(`activity:techStack.nothingFlaggedRunADeepDive`)}):(0,N.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:t.map(e=>(0,N.jsxs)(`div`,{className:`border border-border/70 bg-card/40 p-2`,children:[(0,N.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,N.jsx)(q,{className:z[e.severity].badge,children:c(z[e.severity].labelKey)}),(0,N.jsx)(q,{className:`border-border/70 bg-muted text-muted-foreground`,children:B[e.action]?c(B[e.action]):e.action}),K(e)&&(0,N.jsxs)(q,{className:`border-info/35 bg-info/10 text-info`,children:[(0,N.jsx)(g,{className:`size-2.5`}),`AI · `,Math.round(e.confidence*100),`%`]})]}),(0,N.jsx)(`p`,{className:`mt-1 text-[11px] leading-relaxed text-muted-foreground`,children:e.rationale}),e.breakingRisk&&(0,N.jsx)(`p`,{className:`mt-1 border-l-2 border-warning/40 pl-2 text-[10px] leading-relaxed text-warning`,children:e.breakingRisk})]},e.id))})]}),(0,N.jsxs)(`section`,{className:`mt-4`,children:[(0,N.jsx)(`h3`,{className:`mb-1.5 text-[9px] font-bold uppercase tracking-[0.16em] text-muted-foreground`,children:c(`activity:techStack.evidence`)}),e.evidence.length===0?(0,N.jsx)(`p`,{className:`text-[11px] text-muted-foreground`,children:c(`activity:techStack.noEvidenceRecorded`)}):(0,N.jsx)(`ul`,{className:`flex flex-col gap-1`,children:e.evidence.map((t,n)=>(0,N.jsxs)(`li`,{className:`border border-border/70 bg-card/40 p-2`,children:[(0,N.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,N.jsx)(q,{className:`border-border/70 bg-muted text-muted-foreground`,children:t.kind}),(0,N.jsx)(`span`,{className:`font-mono text-[9px] text-muted-foreground`,children:new Date(t.retrievedAt).toLocaleString()})]}),t.source.startsWith(`http`)?(0,N.jsxs)(`a`,{href:t.source,target:`_blank`,rel:`noreferrer noopener`,className:`mt-1 flex min-w-0 items-center gap-1 truncate text-[10px] text-info underline-offset-2 hover:underline`,children:[(0,N.jsx)(`span`,{className:`truncate`,children:t.source}),(0,N.jsx)(o,{className:`size-2.5 shrink-0`})]}):(0,N.jsx)(`p`,{className:`mt-1 truncate font-mono text-[10px] text-muted-foreground`,children:t.source}),t.detail&&(0,N.jsx)(`p`,{className:`mt-0.5 text-[10px] leading-relaxed text-muted-foreground`,children:t.detail})]},`${e.id}-evidence-${n}`))})]})]})]})}function X({label:e,value:t,mono:n}){return(0,N.jsxs)(`div`,{className:`bg-card/55 px-2.5 py-1.5`,children:[(0,N.jsx)(`dt`,{className:`text-[9px] font-bold uppercase tracking-[0.14em] text-muted-foreground`,children:e}),(0,N.jsx)(`dd`,{className:E(`mt-0.5 truncate text-[11px] text-foreground`,n&&`font-mono`),children:t})]})}var me=`grid grid-cols-[minmax(0,2.2fr)_minmax(0,1.6fr)_minmax(0,1.1fr)] gap-2`;function he({dependencies:e,selectedId:t,hasDependencies:n,coverageByWorkspaceId:r,onSelect:i}){let{t:a}=T(),o=A(e,30);return e.length===0?(0,N.jsx)(`div`,{className:`flex flex-1 items-center justify-center p-8 text-center`,children:(0,N.jsx)(`p`,{className:`max-w-xs text-xs text-muted-foreground`,children:n?`No dependencies match the current filters.`:`No dependencies inventoried yet. Run a scan to populate the inventory.`})}):(0,N.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,N.jsxs)(`div`,{className:E(me,`shrink-0 border-b border-border/70 bg-card/45 px-3 py-1.5 text-[9px] font-bold uppercase tracking-[0.14em] text-muted-foreground`),children:[(0,N.jsx)(`span`,{children:a(`activity:techStack.package`)}),(0,N.jsx)(`span`,{children:a(`activity:techStack.installedLatest`)}),(0,N.jsx)(`span`,{children:a(`activity:techStack.status`)})]}),(0,N.jsx)(`div`,{className:`min-h-0 flex-1`,children:(0,N.jsx)(l,{className:`h-full`,"aria-label":a(`activity:techStack.dependencies`),children:o.pageItems.map(e=>(0,N.jsx)(ge,{dependency:e,selected:e.id===t,coverage:r?.get(e.workspaceId),onSelect:i},e.id))})}),(0,N.jsx)(oe,{page:o.page,pageSize:o.pageSize,totalItems:o.totalItems,onPageChange:o.setPage,itemLabel:`dependencies`})]})}function ge({dependency:e,selected:t,coverage:n,onSelect:r}){let{t:i}=T(),a=F(e.status),o=G(e),s=W(e),c=n?H(n).noteKey:void 0;return(0,N.jsxs)(`button`,{type:`button`,onClick:()=>r(e),"aria-current":t,className:E(me,`w-full items-center border-b border-border/40 px-3 py-2 text-left transition-colors hover:bg-accent/40`,t&&`bg-accent/60`),children:[(0,N.jsxs)(`div`,{className:`min-w-0`,children:[(0,N.jsxs)(`div`,{className:`flex min-w-0 items-center gap-1.5`,children:[(0,N.jsx)(`span`,{className:E(`size-1.5 shrink-0`,a.dot),"aria-hidden":`true`}),(0,N.jsx)(`span`,{className:`truncate font-mono text-xs text-foreground`,children:e.name})]}),(0,N.jsxs)(`p`,{className:`mt-0.5 truncate text-[10px] text-muted-foreground`,children:[(0,N.jsx)(R,{ecosystem:e.ecosystem,className:`mr-0.5 inline-block size-3 align-text-bottom`}),I(e.ecosystem,i),` · `,e.direct?`direct`:`transitive`,` · `,e.scope,c&&(0,N.jsxs)(N.Fragment,{children:[` · `,(0,N.jsx)(`span`,{className:`text-warning`,children:i(c)})]})]})]}),(0,N.jsxs)(`div`,{className:`min-w-0`,children:[(0,N.jsxs)(`div`,{className:`flex min-w-0 items-baseline gap-1.5 font-mono text-[11px]`,children:[(0,N.jsx)(`span`,{className:`truncate text-foreground`,children:o??`—`}),e.latestStable&&e.latestStable!==o&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`span`,{className:`shrink-0 text-muted-foreground`,children:`→`}),(0,N.jsx)(`span`,{className:`truncate text-info`,children:e.latestStable})]})]}),s.label?(0,N.jsx)(`p`,{className:`mt-0.5 truncate text-[10px] text-warning`,children:s.label}):e.requested&&(0,N.jsx)(`p`,{className:`mt-0.5 truncate font-mono text-[10px] text-muted-foreground`,children:e.requested})]}),(0,N.jsxs)(`div`,{className:`flex min-w-0 flex-wrap items-center gap-1`,children:[(0,N.jsx)(q,{className:a.badge,children:i(a.labelKey)}),e.deprecated&&(0,N.jsx)(q,{className:`border-destructive/35 bg-destructive/10 text-destructive`,children:`dep`}),e.yanked&&(0,N.jsx)(q,{className:`border-destructive/45 bg-destructive/15 text-destructive`,children:`yank`})]})]})}function _e({findings:e,dependenciesById:t,onSelectDependency:n}){let{t:r}=T(),i=A(e,20);if(e.length===0)return(0,N.jsx)(`div`,{className:`flex flex-1 items-center justify-center p-8 text-center`,children:(0,N.jsxs)(`p`,{className:`max-w-sm text-xs text-muted-foreground`,children:[r(`activity:techStack.noFindingsRun`),` `,(0,N.jsx)(`span`,{className:`font-mono text-foreground`,children:r(`activity:techStack.analyze`)}),` `,r(`activity:techStack.toCheckVersionsAndAdvisoriesAgainst`)]})});let a=fe.map(e=>[e,i.pageItems.filter(t=>t.severity===e)]).filter(([,e])=>e.length>0);return(0,N.jsxs)(`div`,{className:`flex min-h-0 flex-1 flex-col`,children:[(0,N.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto p-3`,children:(0,N.jsx)(`div`,{className:`flex flex-col gap-4`,children:a.map(([e,i])=>(0,N.jsxs)(`section`,{children:[(0,N.jsxs)(`div`,{className:`mb-1.5 flex items-center gap-2`,children:[(0,N.jsx)(q,{className:z[e].badge,children:r(z[e].labelKey)}),(0,N.jsx)(`span`,{className:`font-mono text-[10px] tabular-nums text-muted-foreground`,children:i.length})]}),(0,N.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:i.map(e=>(0,N.jsx)(ve,{finding:e,dependency:t.get(e.dependencyId),onSelectDependency:n},e.id))})]},e))})}),(0,N.jsx)(oe,{page:i.page,pageSize:i.pageSize,totalItems:i.totalItems,onPageChange:i.setPage,itemLabel:`findings`})]})}function ve({finding:e,dependency:t,onSelectDependency:n}){let{t:r}=T(),i=K(e);return(0,N.jsxs)(`div`,{className:`border border-border/70 bg-card/40 p-2.5`,children:[(0,N.jsxs)(`div`,{className:`flex flex-wrap items-center gap-1.5`,children:[(0,N.jsx)(`button`,{type:`button`,onClick:()=>n(e.dependencyId),className:`min-w-0 truncate font-mono text-xs text-foreground underline-offset-2 hover:underline`,children:t?.name??e.dependencyId}),(0,N.jsx)(q,{className:`border-border/70 bg-muted text-muted-foreground`,children:B[e.action]?r(B[e.action]):e.action}),i&&(0,N.jsxs)(q,{className:`border-info/35 bg-info/10 text-info`,children:[(0,N.jsx)(g,{className:`size-2.5`}),`AI · `,Math.round(e.confidence*100),`%`]})]}),(0,N.jsx)(`p`,{className:`mt-1.5 text-[11px] leading-relaxed text-muted-foreground`,children:e.rationale}),e.breakingRisk&&(0,N.jsx)(`p`,{className:`mt-1 border-l-2 border-warning/40 pl-2 text-[10px] leading-relaxed text-warning`,children:e.breakingRisk}),e.evidence.length>0&&(0,N.jsx)(`ul`,{className:E(`mt-1.5 flex flex-col gap-0.5`),children:e.evidence.slice(0,4).map((t,n)=>(0,N.jsx)(`li`,{className:`min-w-0 truncate text-[10px]`,children:t.source.startsWith(`http`)?(0,N.jsx)(`a`,{href:t.source,target:`_blank`,rel:`noreferrer noopener`,className:`text-info underline-offset-2 hover:underline`,children:t.detail??t.source}):(0,N.jsx)(`span`,{className:`text-muted-foreground`,children:t.detail??t.source})},`${e.id}-${n}`))})]})}function ye({searchQuery:e,ecosystemFilter:t,statusFilter:n,directOnly:i,sort:a,hasFilters:o,ecosystems:s,statuses:l,visibleCount:u,totalCount:d,onSearchChange:f,onEcosystemFilterChange:p,onStatusFilterChange:m,onToggleDirectOnly:h,onSortChange:g,onClearFilters:_}){let{t:v}=T();return(0,N.jsxs)(`div`,{className:`shrink-0 space-y-2 border-b border-border/70 bg-card/45 p-3`,children:[(0,N.jsxs)(`div`,{className:`flex gap-2`,children:[(0,N.jsxs)(`div`,{className:`relative min-w-0 flex-1`,children:[(0,N.jsx)(r,{className:`pointer-events-none absolute left-3 top-1/2 size-3.5 -translate-y-1/2 text-muted-foreground`}),(0,N.jsx)(k,{"aria-label":v(`activity:techStack.searchDependencies`),value:e,onChange:e=>f(e.target.value),placeholder:v(`activity:techStack.searchByPackageName`),className:`h-10 min-w-0 bg-background pl-9 pr-8 text-xs`}),e&&(0,N.jsx)(`button`,{type:`button`,"aria-label":v(`activity:techStack.clearSearch`),onClick:()=>f(``),className:`absolute right-2 top-1/2 -translate-y-1/2 p-1 text-muted-foreground hover:text-foreground`,children:(0,N.jsx)(c,{className:`size-3.5`})})]}),(0,N.jsx)(O,{variant:i?`default`:`outline`,size:`sm`,onClick:h,"aria-pressed":i,title:v(`activity:techStack.showOnlyDependenciesThisProjectDeclaresItself`),className:`shrink-0`,children:v(`activity:techStack.directOnly`)}),o&&(0,N.jsx)(O,{variant:`ghost`,size:`icon`,onClick:_,"aria-label":v(`activity:techStack.clearAllFilters`),title:v(`activity:techStack.clearAllFilters`),className:`shrink-0`,children:(0,N.jsx)(b,{className:`size-4`})})]}),(0,N.jsxs)(`div`,{className:`grid gap-2 sm:grid-cols-3`,children:[(0,N.jsxs)(`div`,{children:[(0,N.jsx)(`label`,{className:`sr-only`,htmlFor:`techstack-ecosystem-filter`,children:v(`activity:techStack.filterByEcosystem`)}),(0,N.jsxs)(`select`,{id:`techstack-ecosystem-filter`,value:t,onChange:e=>p(e.target.value),className:`h-9 w-full min-w-0 border border-input bg-background px-2 text-xs`,children:[(0,N.jsx)(`option`,{value:`all`,children:v(`activity:techStack.allEcosystems`)}),s.map(([e,t])=>(0,N.jsxs)(`option`,{value:e,children:[I(e,v),` · `,t]},e))]})]}),(0,N.jsxs)(`div`,{children:[(0,N.jsx)(`label`,{className:`sr-only`,htmlFor:`techstack-status-filter`,children:v(`activity:techStack.filterByStatus`)}),(0,N.jsxs)(`select`,{id:`techstack-status-filter`,value:n,onChange:e=>m(e.target.value),className:`h-9 w-full min-w-0 border border-input bg-background px-2 text-xs`,children:[(0,N.jsx)(`option`,{value:`all`,children:v(`activity:techStack.allStatuses`)}),l.map(([e,t])=>(0,N.jsxs)(`option`,{value:e,children:[v(F(e).labelKey),` · `,t]},e))]})]}),(0,N.jsxs)(`div`,{children:[(0,N.jsx)(`label`,{className:`sr-only`,htmlFor:`techstack-sort`,children:v(`activity:techStack.sortDependencies`)}),(0,N.jsxs)(`select`,{id:`techstack-sort`,value:a,onChange:e=>g(e.target.value),className:`h-9 w-full min-w-0 border border-input bg-background px-2 text-xs`,children:[(0,N.jsx)(`option`,{value:`attention`,children:v(`activity:techStack.sortNeedsAttention`)}),(0,N.jsx)(`option`,{value:`drift`,children:v(`activity:techStack.sortMostOutOfDate`)}),(0,N.jsx)(`option`,{value:`name`,children:v(`activity:techStack.sortName`)})]})]})]}),(0,N.jsx)(`p`,{className:E(`text-[10px] text-muted-foreground`,o&&`text-info`),children:u===d?`${d} dependencies`:`${u} of ${d} dependencies`})]})}var be=[{id:`dependencies`,labelKey:`activity:techStack.tabDependencies`},{id:`findings`,labelKey:`activity:techStack.tabFindings`},{id:`workspaces`,labelKey:`activity:techStack.tabWorkspaces`},{id:`trends`,labelKey:`activity:techStack.tabTrends`},{id:`remediation`,labelKey:`activity:techStack.tabRemediation`}],Z=new Set([`npm`,`python`,`rust`,`go`,`php`,`dotnet`]);function Q(){let{t:e}=T(),t=D(e=>e.snapshot),n=D(e=>e.stale),r=D(e=>e.loading),a=D(e=>e.error),o=D(e=>e.activeJob),[l,u]=(0,M.useState)(`dependencies`),[p,m]=(0,M.useState)(``),[h,v]=(0,M.useState)(`all`),[y,b]=(0,M.useState)(`all`),[x,ee]=(0,M.useState)(!1),[S,ne]=(0,M.useState)(`attention`),[C,w]=(0,M.useState)(null),[k,A]=(0,M.useState)([]),[oe,P]=(0,M.useState)({status:`idle`,error:null}),[ce,le]=(0,M.useState)(null),[ue,I]=(0,M.useState)(null),[L,R]=(0,M.useState)(new Set),[fe,z]=(0,M.useState)(!1),B=(0,M.useCallback)(async()=>{let e=D.getState();e.setLoading(!0),e.setError(null);try{let t=await fetch(`/api/techstack/snapshot`);if(t.status===404){e.setSnapshot(null,!1);return}if(!t.ok)throw Error(`HTTP ${t.status}: ${t.statusText}`);let n=await t.json();e.setSnapshot(n.snapshot,n.stale)}catch(t){e.setError(t instanceof Error?t.message:String(t))}},[]),V=(0,M.useCallback)(async e=>{let t=D.getState();t.setLoading(!0),t.setError(null);try{let n=await fetch(`/api/techstack/${e}`,{method:`POST`}),r=await n.json();if(!n.ok||!r.jobId)throw Error(r.error??`HTTP ${n.status}: ${n.statusText}`);t.jobStarted(r.jobId,e)}catch(e){t.setError(e instanceof Error?e.message:String(e))}},[]),H=(0,M.useCallback)(async()=>{let e=D.getState().activeJob;if(e)try{let t=await fetch(`/api/techstack/jobs/${encodeURIComponent(e.id)}/cancel`,{method:`POST`});if(!t.ok)throw Error(`HTTP ${t.status}: ${t.statusText}`);D.getState().jobCancelled(e.id)}catch(e){D.getState().setError(e instanceof Error?e.message:String(e))}},[]),U=(0,M.useCallback)(async e=>{P({status:`loading`,error:null});try{let t=await fetch(`/api/techstack/deps/${encodeURIComponent(e.id)}/research`,{method:`POST`}),n=await t.json();if(!t.ok)throw Error(n.error??`HTTP ${t.status}`);A(n.findings??[]),P({status:`idle`,error:null})}catch(e){P({status:`error`,error:e instanceof Error?e.message:String(e)})}},[]);(0,M.useEffect)(()=>{B()},[B]),(0,M.useEffect)(()=>{(l===`trends`||l===`remediation`)&&fetch(`/api/techstack/${l===`trends`?`trends`:`remediation`}`).then(async e=>{let t=await e.json();if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);t.trend&&le(t.trend),t.plan&&I(t.plan)}).catch(e=>D.getState().setError(e instanceof Error?e.message:String(e)))},[l,t?.id]);let G=(0,M.useCallback)(async()=>{if(L.size!==0){z(!0);try{let e=await fetch(`/api/techstack/remediation/apply`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({approvedItems:[...L]})}),t=await e.json();if(!e.ok)throw Error(t.error??`HTTP ${e.status}`);R(new Set),await V(`inventory`)}catch(e){D.getState().setError(e instanceof Error?e.message:String(e))}finally{z(!1)}}},[L,V]);(0,M.useEffect)(()=>{A([]),P({status:`idle`,error:null})},[t?.id]);let K=(0,M.useMemo)(()=>t?.dependencies??[],[t]),q=(0,M.useMemo)(()=>t?.findings??[],[t]),X=(0,M.useMemo)(()=>new Map(K.map(e=>[e.id,e])),[K]),me=(0,M.useMemo)(()=>Ee(K.map(e=>e.ecosystem)),[K]),ge=(0,M.useMemo)(()=>Ee(K.map(e=>e.status)),[K]),ve=(0,M.useMemo)(()=>new Map(t?.workspaces.map(e=>[e.id,e.coverage])??[]),[t]),Z=(0,M.useMemo)(()=>{let e=p.trim().toLowerCase(),t=[...K.filter(t=>!(e&&!t.name.toLowerCase().includes(e)||h!==`all`&&t.ecosystem!==h||y!==`all`&&t.status!==y||x&&!t.direct))];return S===`name`?t.sort((e,t)=>e.name.localeCompare(t.name)):S===`drift`?t.sort((e,t)=>W(t).majorsBehind-W(e).majorsBehind||e.name.localeCompare(t.name)):t.sort((e,t)=>F(t.status).weight-F(e.status).weight||Number(t.direct)-Number(e.direct)||e.name.localeCompare(t.name)),t},[K,p,h,y,x,S]),Q=C?X.get(C):void 0,De=(0,M.useMemo)(()=>Q?[...q.filter(e=>e.dependencyId===Q.id),...k.filter(e=>e.dependencyId===Q.id)]:[],[q,k,Q]),Oe=(0,M.useMemo)(()=>K.filter(de).length,[K]),ke=(0,M.useMemo)(()=>K.filter(e=>W(e).majorsBehind>0).length,[K]),Ae=(0,M.useMemo)(()=>K.filter(e=>e.status===`vulnerable`).length,[K]),je=p.trim()!==``||h!==`all`||y!==`all`||x,Me=(0,M.useCallback)(()=>{m(``),v(`all`),b(`all`),ee(!1)},[]),$=!(!o||[`completed`,`failed`,`cancelled`].includes(o.status)),Ne=(0,M.useCallback)(e=>{w(e),u(`dependencies`)},[]);return(0,N.jsxs)(`div`,{className:`flex h-full min-h-0 flex-col`,children:[(0,N.jsx)(`header`,{className:`shrink-0 border-b border-border/70 px-4 py-3`,children:(0,N.jsxs)(`div`,{className:`flex flex-wrap items-start gap-3`,children:[(0,N.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,N.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,N.jsx)(`h1`,{className:`text-base font-bold sm:text-lg`,children:e(`activity:techStack.techstack`)}),(0,N.jsx)(`span`,{className:`border border-info/35 bg-info/10 px-2 py-0.5 font-mono text-[9px] font-bold uppercase text-info`,children:t?`${t.workspaces.length} workspaces`:`no scan yet`}),n&&(0,N.jsx)(`span`,{className:`border border-warning/35 bg-warning/10 px-2 py-0.5 font-mono text-[9px] font-bold uppercase text-warning`,children:e(`activity:techStack.staleGt24h`)})]}),(0,N.jsx)(`p`,{className:`mt-0.5 truncate text-[10px] text-muted-foreground sm:text-xs`,children:t?`${t.targetRoot} · scanned ${new Date(t.createdAt).toLocaleString()}`:`Scan the open project to inventory its dependencies.`})]}),(0,N.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,N.jsxs)(O,{variant:`outline`,size:`sm`,onClick:()=>void V(`inventory`),disabled:$,title:e(`activity:techStack.offlineReReadManifestsAndLockfiles`),children:[(0,N.jsx)(f,{className:E(`size-3.5`,$&&`animate-spin`)}),(0,N.jsx)(`span`,{className:`hidden sm:inline`,children:e(`activity:techStack.refresh`)})]}),(0,N.jsxs)(O,{size:`sm`,onClick:()=>void V(`analyze`),disabled:$,title:e(`activity:techStack.checkRegistriesAndAdvisoriesThenInterpretTheResultsWithTheModel`),children:[(0,N.jsx)(g,{className:`size-3.5`}),e(`activity:techStack.analyze`)]}),$&&(0,N.jsx)(O,{variant:`ghost`,size:`icon`,onClick:()=>void H(),"aria-label":e(`activity:techStack.cancelJob`),children:(0,N.jsx)(c,{className:`size-4`})}),(0,N.jsxs)(se,{children:[(0,N.jsx)(ae,{asChild:!0,children:(0,N.jsx)(O,{variant:`ghost`,size:`icon`,disabled:!t,"aria-label":e(`activity:techStack.exportOptions`),title:e(`activity:techStack.exportOptions`),children:(0,N.jsx)(te,{className:`size-4`})})}),(0,N.jsxs)(ie,{align:`end`,className:`w-60`,children:[(0,N.jsxs)(j,{onClick:()=>t&&Y(t,`json`),children:[(0,N.jsx)(i,{className:`mr-2 size-4`}),e(`activity:techStack.exportSnapshotAsJson`)]}),(0,N.jsxs)(j,{onClick:()=>t&&Y(t,`spdx`),children:[(0,N.jsx)(_,{className:`mr-2 size-4`}),e(`activity:techStack.exportSbomSpdx`)]}),(0,N.jsxs)(j,{onClick:()=>t&&Y(t,`cyclonedx`),children:[(0,N.jsx)(re,{className:`mr-2 size-4`}),e(`activity:techStack.exportSbomCycloneDx`)]}),(0,N.jsxs)(j,{onClick:()=>t&&Y(t,`md`),children:[(0,N.jsx)(d,{className:`mr-2 size-4`}),e(`activity:techStack.exportReportMd`)]})]})]})]})]})}),t&&(0,N.jsxs)(`div`,{className:`grid shrink-0 grid-cols-2 gap-px border-b border-border/70 bg-border/60 sm:grid-cols-4`,children:[(0,N.jsx)(J,{label:e(`activity:techStack.dependencies`),value:K.length,hint:`${Z.length} visible`}),(0,N.jsx)(J,{label:e(`activity:techStack.outdated`),value:ke,hint:e(`activity:techStack.majorsBehind`),tone:ke>0?`warning`:`success`}),(0,N.jsx)(J,{label:e(`activity:techStack.vulnerable`),value:Ae,hint:e(`activity:techStack.knownAdvisories`),tone:Ae>0?`destructive`:`success`}),(0,N.jsx)(J,{label:e(`activity:techStack.findings`),value:q.length,hint:`${Oe} need attention`,tone:q.length>0?`info`:`default`})]}),($||a)&&(0,N.jsxs)(`div`,{className:`shrink-0 border-b border-border/70 px-4 py-2`,"aria-live":`polite`,children:[$&&o&&(0,N.jsxs)(`div`,{role:`status`,className:`flex items-center gap-2 text-xs text-info`,children:[(0,N.jsx)(s,{className:`size-3.5 animate-spin`}),(0,N.jsx)(`span`,{className:`font-mono`,children:o.status}),o.progress&&(0,N.jsxs)(`span`,{className:`text-muted-foreground`,children:[o.progress.completed,`/`,o.progress.total]})]}),a&&(0,N.jsxs)(`div`,{role:`alert`,className:`flex items-center gap-2 text-xs text-destructive`,children:[(0,N.jsx)(`span`,{className:`min-w-0 flex-1 truncate`,children:a}),(0,N.jsx)(`button`,{type:`button`,onClick:()=>void B(),className:`underline`,children:e(`activity:techStack.retry`)})]})]}),r&&!t?(0,N.jsx)(we,{}):t?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`nav`,{className:`flex shrink-0 gap-1 border-b border-border/70 px-2`,children:be.map(t=>(0,N.jsxs)(`button`,{type:`button`,onClick:()=>u(t.id),"aria-current":l===t.id,className:E(`border-b-2 px-3 py-2 text-xs font-medium transition-colors`,l===t.id?`border-primary text-foreground`:`border-transparent text-muted-foreground hover:text-foreground`),children:[e(t.labelKey),t.id===`findings`&&q.length>0&&(0,N.jsx)(`span`,{className:`ml-1.5 font-mono text-[10px] tabular-nums text-muted-foreground`,children:q.length})]},t.id))}),l===`dependencies`&&(0,N.jsxs)(`div`,{className:`grid min-h-0 flex-1 md:grid-cols-[minmax(340px,1fr)_minmax(0,1.15fr)]`,children:[(0,N.jsxs)(`section`,{className:E(`min-h-0 border-r border-border/70`,Q?`hidden md:flex md:flex-col`:`flex flex-col`),"aria-label":e(`activity:techStack.dependencyList`),children:[(0,N.jsx)(ye,{searchQuery:p,ecosystemFilter:h,statusFilter:y,directOnly:x,sort:S,hasFilters:je,ecosystems:me,statuses:ge,visibleCount:Z.length,totalCount:K.length,onSearchChange:m,onEcosystemFilterChange:v,onStatusFilterChange:b,onToggleDirectOnly:()=>ee(e=>!e),onSortChange:ne,onClearFilters:Me}),(0,N.jsx)(he,{dependencies:Z,selectedId:C,hasDependencies:K.length>0,coverageByWorkspaceId:ve,onSelect:e=>w(e.id)})]}),(0,N.jsx)(`section`,{className:E(`min-h-0`,Q?`flex flex-col`:`hidden md:flex md:flex-col`),"aria-label":e(`activity:techStack.dependencyDetail`),children:Q?(0,N.jsx)(pe,{dependency:Q,findings:De,deepDive:oe,onDeepDive:U,onBack:()=>w(null),coverage:ve.get(Q.workspaceId)}):(0,N.jsx)(`div`,{className:`flex flex-1 items-center justify-center p-8 text-center`,children:(0,N.jsx)(`p`,{className:`max-w-xs text-xs text-muted-foreground`,children:e(`activity:techStack.selectADependencyToSeeIts`)})})})]}),l===`findings`&&(0,N.jsx)(_e,{findings:q,dependenciesById:X,onSelectDependency:Ne}),l===`workspaces`&&(0,N.jsx)(Ce,{snapshot:t}),l===`trends`&&(0,N.jsx)(xe,{trend:ce}),l===`remediation`&&(0,N.jsx)(Se,{plan:ue,approved:L,applying:fe,onToggle:e=>R(t=>{let n=new Set(t);return n.has(e)?n.delete(e):n.add(e),n}),onApply:()=>void G()})]}):(0,N.jsx)(Te,{onScan:()=>void V(`inventory`),disabled:$})]})}function xe({trend:e}){return e?(0,N.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-auto p-3`,children:[(0,N.jsxs)(`p`,{className:`mb-3 text-xs text-muted-foreground`,children:[e.snapshots,` snapshots`,e.vulnerabilityHalfLifeMs===void 0?``:` · vulnerability half-life ${(e.vulnerabilityHalfLifeMs/864e5).toFixed(1)} days`]}),(0,N.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:e.points.map(e=>(0,N.jsxs)(`div`,{className:`grid grid-cols-4 border border-border/70 bg-card/40 p-2 text-xs`,children:[(0,N.jsx)(`span`,{children:new Date(e.createdAt).toLocaleDateString()}),(0,N.jsxs)(`span`,{children:[e.dependencies,` deps`]}),(0,N.jsxs)(`span`,{className:`text-warning`,children:[e.outdated,` outdated`]}),(0,N.jsxs)(`span`,{className:`text-destructive`,children:[e.vulnerable,` vulnerable`]})]},e.snapshotId))})]}):(0,N.jsx)(we,{})}function Se({plan:e,approved:t,applying:n,onToggle:r,onApply:i}){let{t:a}=T();return e?(0,N.jsxs)(`div`,{className:`min-h-0 flex-1 overflow-auto p-3`,children:[(0,N.jsxs)(`div`,{className:`mb-3 flex items-center justify-between gap-3`,children:[(0,N.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:e.warning}),(0,N.jsxs)(O,{size:`sm`,disabled:t.size===0||n,onClick:i,children:[n&&(0,N.jsx)(s,{className:`size-3.5 animate-spin`}),`Apply `,t.size>0?t.size:``]})]}),(0,N.jsxs)(`div`,{className:`flex flex-col gap-1.5`,children:[e.items.map(e=>{let n=`${e.workspaceId}:${e.ecosystem}:${e.dependencyName}:${e.action}`,i=e.action===`replace`||e.action===`investigate`||!Z.has(e.ecosystem);return(0,N.jsxs)(`label`,{className:E(`flex gap-3 border border-border/70 bg-card/40 p-2.5`,i?`cursor-not-allowed opacity-65`:`cursor-pointer`),children:[(0,N.jsx)(`input`,{type:`checkbox`,disabled:i,checked:t.has(n),onChange:()=>r(n)}),(0,N.jsxs)(`span`,{className:`min-w-0 flex-1`,children:[(0,N.jsxs)(`span`,{className:`block font-mono text-xs`,children:[e.dependencyName,` · `,e.action]}),(0,N.jsxs)(`span`,{className:`block text-[10px] text-muted-foreground`,children:[e.currentVersion??`?`,` → `,e.targetVersion??`latest`,` · `,e.rationale]}),i&&(0,N.jsx)(`span`,{className:`block text-[10px] text-warning`,children:a(`activity:techStack.requiresAManualPackageChoice`)})]})]},n)}),e.items.length===0&&(0,N.jsx)(`p`,{className:`p-8 text-center text-xs text-muted-foreground`,children:a(`activity:techStack.noRemediationNeeded`)})]})]}):(0,N.jsx)(we,{})}function Ce({snapshot:e}){let{t}=T(),n=(0,M.useMemo)(()=>{let t=new Map;for(let n of e.dependencies)t.set(n.workspaceId,(t.get(n.workspaceId)??0)+1);return t},[e]);return e.workspaces.length===0?(0,N.jsx)(`div`,{className:`flex flex-1 items-center justify-center p-8`,children:(0,N.jsx)(`p`,{className:`text-xs text-muted-foreground`,children:t(`activity:techStack.noWorkspacesDetected`)})}):(0,N.jsx)(`div`,{className:`min-h-0 flex-1 overflow-auto p-3`,children:(0,N.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:e.workspaces.map(e=>{let r=V[e.coverage];return(0,N.jsxs)(`div`,{className:`border border-border/70 bg-card/40 p-2.5`,children:[(0,N.jsxs)(`div`,{className:`flex flex-wrap items-center justify-between gap-2`,children:[(0,N.jsxs)(`div`,{className:`min-w-0`,children:[(0,N.jsx)(`p`,{className:`truncate font-mono text-xs text-foreground`,children:e.relativeRoot}),(0,N.jsxs)(`p`,{className:`mt-0.5 flex items-center gap-1 truncate text-[10px] text-muted-foreground`,children:[(0,N.jsx)(R,{ecosystem:e.ecosystem}),(0,N.jsx)(`span`,{children:I(e.ecosystem,t)}),e.packageManager?(0,N.jsxs)(N.Fragment,{children:[(0,N.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,N.jsx)(`span`,{children:e.packageManager})]}):null,(0,N.jsx)(`span`,{"aria-hidden":`true`,children:`·`}),(0,N.jsxs)(`span`,{children:[n.get(e.id)??0,` deps`]})]})]}),(0,N.jsx)(`span`,{className:E(`shrink-0 border px-1.5 py-0.5 text-[10px] font-medium`,r.badge),children:t(r.labelKey)})]}),e.manifests.length>0&&(0,N.jsx)(`div`,{className:`mt-1.5 flex flex-wrap gap-1`,children:e.manifests.map(e=>(0,N.jsx)(`span`,{className:`border border-border/70 bg-background/45 px-1.5 py-0.5 font-mono text-[9px] text-muted-foreground`,children:e.split(/[/\\]/).pop()},e))})]},e.id)})})})}function we(){let{t:e}=T();return(0,N.jsx)(`div`,{className:`flex flex-1 items-center justify-center`,children:(0,N.jsxs)(`div`,{className:`flex flex-col items-center gap-2`,children:[(0,N.jsx)(s,{className:`size-5 animate-spin text-muted-foreground`}),(0,N.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:e(`activity:techStack.loadingSnapshot`)})]})})}function Te({onScan:e,disabled:t}){let{t:n}=T(),r=(0,M.useMemo)(()=>Object.values(le).map(e=>e.label??``).filter(Boolean).join(`, `),[]);return(0,N.jsx)(`div`,{className:`flex flex-1 items-center justify-center p-8`,children:(0,N.jsxs)(`div`,{className:`flex max-w-md flex-col items-center gap-3 text-center`,children:[(0,N.jsx)(`div`,{className:`flex size-14 items-center justify-center border border-info/25 bg-info/5 text-info`,children:(0,N.jsx)(p,{className:`size-6`})}),(0,N.jsx)(`h2`,{className:`text-sm font-semibold`,children:n(`activity:techStack.noInventoryYet`)}),(0,N.jsxs)(`p`,{className:`text-xs leading-relaxed text-muted-foreground`,children:[`TechStack reads every manifest and lockfile in the open project — `,r,` — and compares what you have against the upstream registries.`]}),(0,N.jsxs)(O,{size:`sm`,onClick:e,disabled:t,children:[(0,N.jsx)(f,{className:E(`size-3.5`,t&&`animate-spin`)}),n(`activity:techStack.scanThisProject`)]})]})})}function Ee(e){let t=new Map;for(let n of e)t.set(n,(t.get(n)??0)+1);return[...t.entries()].sort((e,t)=>t[1]-e[1]||e[0].localeCompare(t[0]))}export{Q as TechStackView};
@@ -1 +1 @@
1
- import{r as e}from"./rolldown-runtime-hePW80VL.js";import{K as t,t as n,tt as r}from"./config-store-BAUadwHd.js";import{i,t as a}from"./react-core-wiHys0m2.js";import{In as o,Mt as s,Qt as c,ln as l,qn as u,wo as d,xo as f}from"./vendor-V3ydTHqN.js";import"./i18n-CbyUyl6G.js";import{n as p,t as m}from"./utils-CKsqCaP8.js";import{n as h}from"./ui-store-DC3mkswy.js";import"./stores-RkHrTaRO.js";import{w as g}from"./fonts-DRGbd-AM.js";import{m as _}from"./index-3TGBKeBP.js";import{n as v,t as y}from"./xterm-DA3G7037.js";var b=e(i(),1),x=`wrongstack.terminalDockHeight`,S=260;function C(e){let t=typeof window>`u`?640:Math.max(140,Math.min(640,Math.floor(window.innerHeight*.55),window.innerHeight-S));return Math.min(Math.max(Math.round(e),140),t)}var w=a(),T={background:`#1e1e2e`,foreground:`#cdd6f4`,cursor:`#f5e0dc`,selectionBackground:`#585b70`,black:`#45475a`,red:`#f38ba8`,green:`#a6e3a1`,yellow:`#f9e2af`,blue:`#89b4fa`,magenta:`#f5c2e7`,cyan:`#94e2d5`,white:`#bac2de`,brightBlack:`#585b70`,brightRed:`#f38ba8`,brightGreen:`#a6e3a1`,brightYellow:`#f9e2af`,brightBlue:`#89b4fa`,brightMagenta:`#f5c2e7`,brightCyan:`#94e2d5`,brightWhite:`#a6adc8`},E=8;function D(e=!1){return typeof window>`u`?300:C(window.innerHeight*(e?.32:.4))}function O(e=!1){if(typeof window>`u`)return D(e);try{let t=window.localStorage.getItem(x),n=t?Number.parseInt(t,10):NaN;return Number.isFinite(n)?C(n):D(e)}catch{return D(e)}}function k(e){try{window.localStorage.setItem(x,String(C(e)))}catch{}}function A(){return p()}function j(e){return{id:A(),name:`Terminal ${e}`,status:`starting`}}function M({desktopShell:e=!1,onClose:t}){let n=(0,b.useRef)(null),{t:i}=f(),a=(0,b.useRef)(1),[d,p]=(0,b.useState)(()=>O(e)),[g,_]=(0,b.useState)(()=>[j(1)]),[v,y]=(0,b.useState)(()=>g[0]?.id??``),x=h(e=>e.terminalCreateNonce),S=(0,b.useRef)(x),T=r(e=>e.projectName),D=r(e=>e.cwd);(0,b.useEffect)(()=>{let e=()=>{p(e=>{let t=C(e);return k(t),t})};return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let M=e=>{e.preventDefault(),n.current?.();let t=e.clientY,r=d,i=document.body.style.cursor,a=document.body.style.userSelect;document.body.style.cursor=`ns-resize`,document.body.style.userSelect=`none`;let o=e=>{let n=C(r+t-e.clientY);p(n),k(n)},s=()=>{document.body.style.cursor=i,document.body.style.userSelect=a,window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),window.removeEventListener(`pointercancel`,s),n.current===s&&(n.current=null)};n.current=s,window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s,{once:!0}),window.addEventListener(`pointercancel`,s,{once:!0})};(0,b.useEffect)(()=>()=>n.current?.(),[]);let P=()=>{if(g.length>=E)return;a.current+=1;let e=j(a.current);_([...g,e]),y(e.id)};(0,b.useEffect)(()=>{x!==S.current&&(S.current=x,P())},[x]);let F=e=>{let n=g.findIndex(t=>t.id===e);if(n===-1)return;let r=g.filter(t=>t.id!==e);if(_(r),r.length===0){queueMicrotask(t);return}v===e&&y(r[Math.max(0,n-1)]?.id??r[0]?.id??``)},I=e=>{let t=A();g.some(t=>t.id===e)&&(_(g.map(n=>n.id===e?{...n,id:t,status:`starting`,exitCode:void 0}:n)),y(t))},L=()=>{_([]),y(``),queueMicrotask(t)},R=(e,t)=>{_(n=>n.map(n=>n.id===e?{...n,...t}:n))},z=g.find(e=>e.id===v)??g[0]??null;return(0,w.jsxs)(`div`,{"data-terminal-dock":!0,style:{height:d},"data-shell":e?`desktop`:`browser`,className:m(`z-30 flex min-h-0 shrink-0 flex-col border-t border-border/70 bg-card shadow-2xl`,e&&`ws-terminal-desktop`),children:[(0,w.jsx)(`hr`,{"aria-orientation":`horizontal`,tabIndex:0,title:i(`activity:terminal.resize`),onPointerDown:M,className:`h-1.5 cursor-ns-resize bg-muted/70 transition-colors hover:bg-primary/35 border-0`}),(0,w.jsxs)(`div`,{className:m(`flex min-w-0 items-center justify-between gap-3 border-b border-border/70 bg-card/85`,e?`px-2 py-1`:`px-3 py-1.5`),children:[(0,w.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 text-xs text-foreground`,children:[(0,w.jsx)(l,{className:`h-3.5 w-3.5 shrink-0 text-primary`}),(0,w.jsx)(`span`,{className:`font-medium`,children:i(e?`activity:terminal.labelSingular`:`activity:terminal.labelPlural`)}),(0,w.jsx)(`span`,{className:`min-w-0 truncate text-muted-foreground`,children:T||D||i(`activity:terminal.projectShell`)})]}),(0,w.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,w.jsx)(`button`,{type:`button`,onClick:P,disabled:g.length>=E,title:g.length>=E?i(`activity:terminal.maxTerminals`,{count:E}):i(`activity:terminal.newTerminal`),className:`inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,children:(0,w.jsx)(u,{className:`h-4 w-4`})}),(0,w.jsx)(`button`,{type:`button`,onClick:()=>z&&I(z.id),disabled:!z,title:i(`activity:terminal.restart`),className:`inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,children:(0,w.jsx)(o,{className:`h-3.5 w-3.5`})}),(0,w.jsx)(`button`,{type:`button`,onClick:L,disabled:g.length===0,title:i(`activity:terminal.closeAll`),className:`inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,children:(0,w.jsx)(c,{className:`h-3.5 w-3.5`})}),(0,w.jsx)(`button`,{type:`button`,onClick:t,title:i(`activity:terminal.closeDock`),className:`inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground`,children:(0,w.jsx)(s,{className:`h-4 w-4`})})]})]}),(0,w.jsx)(`div`,{className:m(`flex min-w-0 items-center gap-1 overflow-x-auto border-b border-border/70 bg-[hsl(var(--surface-2)/0.45)]`,e?`px-1.5 py-0.5`:`px-2 py-1`),children:g.map(t=>(0,w.jsxs)(`div`,{className:m(`group inline-flex items-center rounded border text-xs transition-colors`,e?`h-6 min-w-[92px] max-w-[148px]`:`h-7 min-w-[112px] max-w-[180px]`,v===t.id?`border-primary/35 bg-primary/10 text-primary`:`border-transparent bg-transparent text-muted-foreground hover:bg-accent hover:text-foreground`),children:[(0,w.jsxs)(`button`,{type:`button`,onClick:()=>y(t.id),title:t.status===`exited`?`${t.name} exited`:t.name,className:`inline-flex min-w-0 flex-1 items-center gap-2 px-2 text-left`,children:[(0,w.jsx)(`span`,{className:m(`h-1.5 w-1.5 shrink-0 rounded-full`,t.status===`running`&&`bg-success`,t.status===`starting`&&`bg-primary`,t.status===`exited`&&`bg-destructive`)}),(0,w.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[t.name,t.status===`exited`&&typeof t.exitCode==`number`?` (${t.exitCode})`:``]})]}),(0,w.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),F(t.id)},className:`mr-1 inline-flex h-4 w-4 shrink-0 items-center justify-center rounded text-muted-foreground opacity-70 hover:bg-accent hover:text-foreground hover:opacity-100`,title:i(`activity:terminal.closeTab`,{name:t.name}),children:(0,w.jsx)(s,{className:`h-3 w-3`})})]},t.id))}),D&&!e&&(0,w.jsx)(`div`,{className:`min-w-0 truncate border-b border-border/60 bg-muted/30 px-3 py-1 text-[11px] font-mono text-muted-foreground`,children:D}),(0,w.jsx)(`div`,{className:`relative min-h-0 min-w-0 flex-1 overflow-hidden`,children:g.map(e=>(0,w.jsx)(N,{id:e.id,active:e.id===v,onRunning:()=>R(e.id,{status:`running`}),onExit:t=>R(e.id,{status:`exited`,exitCode:t})},e.id))})]})}function N({id:e,active:r,onRunning:i,onExit:a}){let o=(0,b.useRef)(null),s=(0,b.useRef)(null),c=(0,b.useRef)(null),l=(0,b.useRef)(i),u=(0,b.useRef)(a),f=n(e=>e.wsConnected),{terminal:p}=_();return(0,b.useEffect)(()=>{l.current=i,u.current=a},[a,i]),(0,b.useEffect)(()=>{let e=s.current;if(e){e.options.fontFamily===p.fontFamily&&(e.options.fontFamily=`monospace`),e.options.fontFamily=p.fontFamily,e.options.fontSize=p.fontSize,e.options.lineHeight=p.lineHeight;try{c.current?.fit()}catch{}}},[p]),(0,b.useEffect)(()=>{let r=o.current;if(!r)return;let i=new y({...g(n.getState().fonts),cursorBlink:!0,theme:T,scrollback:5e3}),a=new v;s.current=i,c.current=a,i.loadAddon(a),i.open(r);try{a.fit()}catch{}let f=t(n.getState().wsUrl);f.send({type:`terminal.create`,payload:{id:e,cols:i.cols,rows:i.rows}});let p=!1,m=f.on(`terminal.output`,t=>{t.type===`terminal.output`&&t.payload.id===e&&(p||(p=!0,l.current()),i.write(t.payload.data))}),h=f.on(`terminal.exit`,t=>{t.type===`terminal.exit`&&t.payload.id===e&&(i.write(`\r\n\x1b[2m${d.t(`activity:terminal.processExited`,{code:t.payload.exitCode})}\x1b[0m\r\n`),u.current(t.payload.exitCode))}),_=i.onData(t=>{f.send({type:`terminal.input`,payload:{id:e,data:t}})}),b=new ResizeObserver(()=>{if(r.offsetParent)try{a.fit(),f.send({type:`terminal.resize`,payload:{id:e,cols:i.cols,rows:i.rows}})}catch{}});return b.observe(r),()=>{m(),h(),_.dispose(),b.disconnect(),f.send({type:`terminal.close`,payload:{id:e}}),i.dispose(),s.current=null,c.current=null}},[e,f]),(0,b.useEffect)(()=>{r&&window.requestAnimationFrame(()=>{try{c.current?.fit();let r=s.current;r&&(t(n.getState().wsUrl).send({type:`terminal.resize`,payload:{id:e,cols:r.cols,rows:r.rows}}),r.focus())}catch{}})},[r,e]),(0,w.jsx)(`div`,{ref:o,className:m(`absolute inset-0 min-h-0 min-w-0 overflow-hidden px-2 py-1`,r?`block`:`hidden`)})}export{M as TerminalPanel};
1
+ import{r as e}from"./rolldown-runtime-hePW80VL.js";import{K as t,t as n,tt as r}from"./config-store-xSv1mChc.js";import{i,t as a}from"./react-core-wiHys0m2.js";import{In as o,Mt as s,Qt as c,ln as l,qn as u,wo as d,xo as f}from"./vendor-V3ydTHqN.js";import"./i18n--QdD6NCn.js";import{n as p,t as m}from"./utils-CKsqCaP8.js";import{n as h}from"./ui-store-DC3mkswy.js";import"./stores-2kakt8j9.js";import{w as g}from"./fonts-DRGbd-AM.js";import{m as _}from"./index-FWwLmwjx.js";import{n as v,t as y}from"./xterm-DA3G7037.js";var b=e(i(),1),x=`wrongstack.terminalDockHeight`,S=260;function C(e){let t=typeof window>`u`?640:Math.max(140,Math.min(640,Math.floor(window.innerHeight*.55),window.innerHeight-S));return Math.min(Math.max(Math.round(e),140),t)}var w=a(),T={background:`#1e1e2e`,foreground:`#cdd6f4`,cursor:`#f5e0dc`,selectionBackground:`#585b70`,black:`#45475a`,red:`#f38ba8`,green:`#a6e3a1`,yellow:`#f9e2af`,blue:`#89b4fa`,magenta:`#f5c2e7`,cyan:`#94e2d5`,white:`#bac2de`,brightBlack:`#585b70`,brightRed:`#f38ba8`,brightGreen:`#a6e3a1`,brightYellow:`#f9e2af`,brightBlue:`#89b4fa`,brightMagenta:`#f5c2e7`,brightCyan:`#94e2d5`,brightWhite:`#a6adc8`},E=8;function D(e=!1){return typeof window>`u`?300:C(window.innerHeight*(e?.32:.4))}function O(e=!1){if(typeof window>`u`)return D(e);try{let t=window.localStorage.getItem(x),n=t?Number.parseInt(t,10):NaN;return Number.isFinite(n)?C(n):D(e)}catch{return D(e)}}function k(e){try{window.localStorage.setItem(x,String(C(e)))}catch{}}function A(){return p()}function j(e){return{id:A(),name:`Terminal ${e}`,status:`starting`}}function M({desktopShell:e=!1,onClose:t}){let n=(0,b.useRef)(null),{t:i}=f(),a=(0,b.useRef)(1),[d,p]=(0,b.useState)(()=>O(e)),[g,_]=(0,b.useState)(()=>[j(1)]),[v,y]=(0,b.useState)(()=>g[0]?.id??``),x=h(e=>e.terminalCreateNonce),S=(0,b.useRef)(x),T=r(e=>e.projectName),D=r(e=>e.cwd);(0,b.useEffect)(()=>{let e=()=>{p(e=>{let t=C(e);return k(t),t})};return window.addEventListener(`resize`,e),()=>window.removeEventListener(`resize`,e)},[]);let M=e=>{e.preventDefault(),n.current?.();let t=e.clientY,r=d,i=document.body.style.cursor,a=document.body.style.userSelect;document.body.style.cursor=`ns-resize`,document.body.style.userSelect=`none`;let o=e=>{let n=C(r+t-e.clientY);p(n),k(n)},s=()=>{document.body.style.cursor=i,document.body.style.userSelect=a,window.removeEventListener(`pointermove`,o),window.removeEventListener(`pointerup`,s),window.removeEventListener(`pointercancel`,s),n.current===s&&(n.current=null)};n.current=s,window.addEventListener(`pointermove`,o),window.addEventListener(`pointerup`,s,{once:!0}),window.addEventListener(`pointercancel`,s,{once:!0})};(0,b.useEffect)(()=>()=>n.current?.(),[]);let P=()=>{if(g.length>=E)return;a.current+=1;let e=j(a.current);_([...g,e]),y(e.id)};(0,b.useEffect)(()=>{x!==S.current&&(S.current=x,P())},[x]);let F=e=>{let n=g.findIndex(t=>t.id===e);if(n===-1)return;let r=g.filter(t=>t.id!==e);if(_(r),r.length===0){queueMicrotask(t);return}v===e&&y(r[Math.max(0,n-1)]?.id??r[0]?.id??``)},I=e=>{let t=A();g.some(t=>t.id===e)&&(_(g.map(n=>n.id===e?{...n,id:t,status:`starting`,exitCode:void 0}:n)),y(t))},L=()=>{_([]),y(``),queueMicrotask(t)},R=(e,t)=>{_(n=>n.map(n=>n.id===e?{...n,...t}:n))},z=g.find(e=>e.id===v)??g[0]??null;return(0,w.jsxs)(`div`,{"data-terminal-dock":!0,style:{height:d},"data-shell":e?`desktop`:`browser`,className:m(`z-30 flex min-h-0 shrink-0 flex-col border-t border-border/70 bg-card shadow-2xl`,e&&`ws-terminal-desktop`),children:[(0,w.jsx)(`hr`,{"aria-orientation":`horizontal`,tabIndex:0,title:i(`activity:terminal.resize`),onPointerDown:M,className:`h-1.5 cursor-ns-resize bg-muted/70 transition-colors hover:bg-primary/35 border-0`}),(0,w.jsxs)(`div`,{className:m(`flex min-w-0 items-center justify-between gap-3 border-b border-border/70 bg-card/85`,e?`px-2 py-1`:`px-3 py-1.5`),children:[(0,w.jsxs)(`div`,{className:`flex min-w-0 items-center gap-2 text-xs text-foreground`,children:[(0,w.jsx)(l,{className:`h-3.5 w-3.5 shrink-0 text-primary`}),(0,w.jsx)(`span`,{className:`font-medium`,children:i(e?`activity:terminal.labelSingular`:`activity:terminal.labelPlural`)}),(0,w.jsx)(`span`,{className:`min-w-0 truncate text-muted-foreground`,children:T||D||i(`activity:terminal.projectShell`)})]}),(0,w.jsxs)(`div`,{className:`flex items-center gap-1`,children:[(0,w.jsx)(`button`,{type:`button`,onClick:P,disabled:g.length>=E,title:g.length>=E?i(`activity:terminal.maxTerminals`,{count:E}):i(`activity:terminal.newTerminal`),className:`inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,children:(0,w.jsx)(u,{className:`h-4 w-4`})}),(0,w.jsx)(`button`,{type:`button`,onClick:()=>z&&I(z.id),disabled:!z,title:i(`activity:terminal.restart`),className:`inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,children:(0,w.jsx)(o,{className:`h-3.5 w-3.5`})}),(0,w.jsx)(`button`,{type:`button`,onClick:L,disabled:g.length===0,title:i(`activity:terminal.closeAll`),className:`inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:cursor-not-allowed disabled:opacity-40`,children:(0,w.jsx)(c,{className:`h-3.5 w-3.5`})}),(0,w.jsx)(`button`,{type:`button`,onClick:t,title:i(`activity:terminal.closeDock`),className:`inline-flex h-6 w-6 items-center justify-center rounded text-muted-foreground transition-colors hover:bg-accent hover:text-foreground`,children:(0,w.jsx)(s,{className:`h-4 w-4`})})]})]}),(0,w.jsx)(`div`,{className:m(`flex min-w-0 items-center gap-1 overflow-x-auto border-b border-border/70 bg-[hsl(var(--surface-2)/0.45)]`,e?`px-1.5 py-0.5`:`px-2 py-1`),children:g.map(t=>(0,w.jsxs)(`div`,{className:m(`group inline-flex items-center rounded border text-xs transition-colors`,e?`h-6 min-w-[92px] max-w-[148px]`:`h-7 min-w-[112px] max-w-[180px]`,v===t.id?`border-primary/35 bg-primary/10 text-primary`:`border-transparent bg-transparent text-muted-foreground hover:bg-accent hover:text-foreground`),children:[(0,w.jsxs)(`button`,{type:`button`,onClick:()=>y(t.id),title:t.status===`exited`?`${t.name} exited`:t.name,className:`inline-flex min-w-0 flex-1 items-center gap-2 px-2 text-left`,children:[(0,w.jsx)(`span`,{className:m(`h-1.5 w-1.5 shrink-0 rounded-full`,t.status===`running`&&`bg-success`,t.status===`starting`&&`bg-primary`,t.status===`exited`&&`bg-destructive`)}),(0,w.jsxs)(`span`,{className:`min-w-0 flex-1 truncate`,children:[t.name,t.status===`exited`&&typeof t.exitCode==`number`?` (${t.exitCode})`:``]})]}),(0,w.jsx)(`button`,{type:`button`,onClick:e=>{e.stopPropagation(),F(t.id)},className:`mr-1 inline-flex h-4 w-4 shrink-0 items-center justify-center rounded text-muted-foreground opacity-70 hover:bg-accent hover:text-foreground hover:opacity-100`,title:i(`activity:terminal.closeTab`,{name:t.name}),children:(0,w.jsx)(s,{className:`h-3 w-3`})})]},t.id))}),D&&!e&&(0,w.jsx)(`div`,{className:`min-w-0 truncate border-b border-border/60 bg-muted/30 px-3 py-1 text-[11px] font-mono text-muted-foreground`,children:D}),(0,w.jsx)(`div`,{className:`relative min-h-0 min-w-0 flex-1 overflow-hidden`,children:g.map(e=>(0,w.jsx)(N,{id:e.id,active:e.id===v,onRunning:()=>R(e.id,{status:`running`}),onExit:t=>R(e.id,{status:`exited`,exitCode:t})},e.id))})]})}function N({id:e,active:r,onRunning:i,onExit:a}){let o=(0,b.useRef)(null),s=(0,b.useRef)(null),c=(0,b.useRef)(null),l=(0,b.useRef)(i),u=(0,b.useRef)(a),f=n(e=>e.wsConnected),{terminal:p}=_();return(0,b.useEffect)(()=>{l.current=i,u.current=a},[a,i]),(0,b.useEffect)(()=>{let e=s.current;if(e){e.options.fontFamily===p.fontFamily&&(e.options.fontFamily=`monospace`),e.options.fontFamily=p.fontFamily,e.options.fontSize=p.fontSize,e.options.lineHeight=p.lineHeight;try{c.current?.fit()}catch{}}},[p]),(0,b.useEffect)(()=>{let r=o.current;if(!r)return;let i=new y({...g(n.getState().fonts),cursorBlink:!0,theme:T,scrollback:5e3}),a=new v;s.current=i,c.current=a,i.loadAddon(a),i.open(r);try{a.fit()}catch{}let f=t(n.getState().wsUrl);f.send({type:`terminal.create`,payload:{id:e,cols:i.cols,rows:i.rows}});let p=!1,m=f.on(`terminal.output`,t=>{t.type===`terminal.output`&&t.payload.id===e&&(p||(p=!0,l.current()),i.write(t.payload.data))}),h=f.on(`terminal.exit`,t=>{t.type===`terminal.exit`&&t.payload.id===e&&(i.write(`\r\n\x1b[2m${d.t(`activity:terminal.processExited`,{code:t.payload.exitCode})}\x1b[0m\r\n`),u.current(t.payload.exitCode))}),_=i.onData(t=>{f.send({type:`terminal.input`,payload:{id:e,data:t}})}),b=new ResizeObserver(()=>{if(r.offsetParent)try{a.fit(),f.send({type:`terminal.resize`,payload:{id:e,cols:i.cols,rows:i.rows}})}catch{}});return b.observe(r),()=>{m(),h(),_.dispose(),b.disconnect(),f.send({type:`terminal.close`,payload:{id:e}}),i.dispose(),s.current=null,c.current=null}},[e,f]),(0,b.useEffect)(()=>{r&&window.requestAnimationFrame(()=>{try{c.current?.fit();let r=s.current;r&&(t(n.getState().wsUrl).send({type:`terminal.resize`,payload:{id:e,cols:r.cols,rows:r.rows}}),r.focus())}catch{}})},[r,e]),(0,w.jsx)(`div`,{ref:o,className:m(`absolute inset-0 min-h-0 min-w-0 overflow-hidden px-2 py-1`,r?`block`:`hidden`)})}export{M as TerminalPanel};