@hienlh/ppm 0.13.20 → 0.13.22

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 (90) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/assets/skills/ppm/SKILL.md +1 -1
  3. package/assets/skills/ppm/references/http-api.md +1 -1
  4. package/dist/web/assets/{ai-settings-section-DR5BueEL.js → ai-settings-section-DN4egS8e.js} +1 -1
  5. package/dist/web/assets/architecture-PBZL5I3N-CZBayZMd.js +1 -0
  6. package/dist/web/assets/{audio-preview-DwyrUe-V.js → audio-preview-CrTLA4VQ.js} +1 -1
  7. package/dist/web/assets/chat-tab-DFCOXFk8.js +12 -0
  8. package/dist/web/assets/code-editor-J864BoOW.js +8 -0
  9. package/dist/web/assets/{conflict-editor-C8vTvS9w.js → conflict-editor-BIwUtzO5.js} +1 -1
  10. package/dist/web/assets/{csv-preview-Bo-N3GHl.js → csv-preview-BIfojSWd.js} +1 -1
  11. package/dist/web/assets/{data-grid-overlay-editor-DqcDQ9st.js → data-grid-overlay-editor-DZIqEOsz.js} +1 -1
  12. package/dist/web/assets/{database-viewer-_RTlPC26.js → database-viewer-DhawNQtp.js} +1 -1
  13. package/dist/web/assets/{diff-viewer-P2Dc__bQ.js → diff-viewer-nupJr1AG.js} +1 -1
  14. package/dist/web/assets/{esm-Dvc8oJly.js → esm-UZtw2QcY.js} +1 -1
  15. package/dist/web/assets/{extension-webview-CHqtkQBd.js → extension-webview-BXDYtTXe.js} +2 -2
  16. package/dist/web/assets/gitGraph-HDMCJU4V-CboO1wK8.js +1 -0
  17. package/dist/web/assets/{glide-data-grid-9TPVejSQ.js → glide-data-grid-DttB_tob.js} +6 -6
  18. package/dist/web/assets/{image-preview--nh-wHgF.js → image-preview-Dh11TP_j.js} +1 -1
  19. package/dist/web/assets/index-C5sLGvFC.css +2 -0
  20. package/dist/web/assets/index-CPcnZtNl.js +27 -0
  21. package/dist/web/assets/info-3K5VOQVL-D_qKNgUf.js +1 -0
  22. package/dist/web/assets/keybindings-store-DvBC5IaA.js +1 -0
  23. package/dist/web/assets/{markdown-renderer-Bsow9WVr.js → markdown-renderer-Bwpgzn7n.js} +3 -3
  24. package/dist/web/assets/notification-store-D1sxDh0s.js +1 -0
  25. package/dist/web/assets/{number-overlay-editor-XTjjEXtk.js → number-overlay-editor-CewUR5pB.js} +1 -1
  26. package/dist/web/assets/packet-RMMSAZCW-XtGc2GdX.js +1 -0
  27. package/dist/web/assets/{pdf-preview-BqntOcNA.js → pdf-preview-CI-lrcdD.js} +1 -1
  28. package/dist/web/assets/pie-UPGHQEXC-DNZ5YtCW.js +1 -0
  29. package/dist/web/assets/{port-forwarding-tab-WWRLWcTB.js → port-forwarding-tab-DOEfu8ca.js} +1 -1
  30. package/dist/web/assets/{postgres-viewer-g7-3kOzD.js → postgres-viewer-Bb3RwFMj.js} +3 -3
  31. package/dist/web/assets/radar-KQ55EAFF-uCGpAvZE.js +1 -0
  32. package/dist/web/assets/{settings-store-D2MtC9tm.js → settings-store-CVrIYYCB.js} +2 -2
  33. package/dist/web/assets/settings-tab-i8KAi1LY.js +1 -0
  34. package/dist/web/assets/{sql-query-editor-CultKZsI.js → sql-query-editor-C3ZrhqZr.js} +1 -1
  35. package/dist/web/assets/sqlite-viewer-Cucs41S6.js +1 -0
  36. package/dist/web/assets/terminal-tab-upGE8feC.js +1 -0
  37. package/dist/web/assets/treemap-KZPCXAKY-DQvivjBa.js +1 -0
  38. package/dist/web/assets/{use-monaco-theme-CugUkORI.js → use-monaco-theme-BePWbY58.js} +1 -1
  39. package/dist/web/assets/{vendor-mermaid-CPtQ2zua.js → vendor-mermaid-Cl50p6TB.js} +2 -2
  40. package/dist/web/assets/{video-preview-C4PxtiOc.js → video-preview-CSdxf4fH.js} +1 -1
  41. package/dist/web/index.html +6 -6
  42. package/dist/web/sw.js +1 -1
  43. package/package.json +1 -1
  44. package/src/providers/claude-agent-sdk.ts +13 -1
  45. package/src/server/routes/chat.ts +73 -3
  46. package/src/server/routes/database.ts +11 -2
  47. package/src/server/ws/chat.ts +12 -3
  48. package/src/services/autostart-generator.ts +2 -2
  49. package/src/services/autostart-register.ts +6 -3
  50. package/src/services/db.service.ts +41 -1
  51. package/src/services/supervisor.ts +20 -7
  52. package/src/web/app.tsx +12 -0
  53. package/src/web/components/chat/chat-history-bar.tsx +43 -13
  54. package/src/web/components/chat/chat-tab.tsx +3 -0
  55. package/src/web/components/chat/session-list-panel.tsx +15 -8
  56. package/src/web/components/chat/session-picker.tsx +33 -5
  57. package/src/web/components/database/connection-list.tsx +55 -205
  58. package/src/web/components/database/connection-row.tsx +104 -0
  59. package/src/web/components/database/database-sidebar.tsx +1 -1
  60. package/src/web/components/database/schema-table-tree.tsx +98 -0
  61. package/src/web/components/database/use-connections.ts +9 -6
  62. package/src/web/components/layout/command-palette.tsx +10 -2
  63. package/src/web/components/layout/editor-panel.tsx +16 -39
  64. package/src/web/components/layout/tab-pool.tsx +196 -0
  65. package/src/web/hooks/use-chat.ts +9 -2
  66. package/src/web/hooks/use-debounced-value.ts +10 -0
  67. package/src/web/stores/notification-store.ts +42 -0
  68. package/dist/web/assets/architecture-PBZL5I3N-7JKY4P1L.js +0 -1
  69. package/dist/web/assets/chat-tab-DqS9Qk3O.js +0 -12
  70. package/dist/web/assets/code-editor-DwdeigGe.js +0 -8
  71. package/dist/web/assets/gitGraph-HDMCJU4V-Daf9rhiF.js +0 -1
  72. package/dist/web/assets/index-nC9UURj4.css +0 -2
  73. package/dist/web/assets/index-xpTdWKsA.js +0 -27
  74. package/dist/web/assets/info-3K5VOQVL-gn0pjNiT.js +0 -1
  75. package/dist/web/assets/keybindings-store-C0XkvJcm.js +0 -1
  76. package/dist/web/assets/packet-RMMSAZCW-Csaeizjc.js +0 -1
  77. package/dist/web/assets/pie-UPGHQEXC-DatkjxTH.js +0 -1
  78. package/dist/web/assets/radar-KQ55EAFF-BnGB20hR.js +0 -1
  79. package/dist/web/assets/settings-tab-DO3s244B.js +0 -1
  80. package/dist/web/assets/sqlite-viewer-BtYh66b0.js +0 -1
  81. package/dist/web/assets/terminal-tab-C25rc_34.js +0 -1
  82. package/dist/web/assets/treemap-KZPCXAKY-CgEYv38e.js +0 -1
  83. /package/dist/web/assets/{api-settings-DowGyuVy.js → api-settings-DnHv6JgF.js} +0 -0
  84. /package/dist/web/assets/{data-grid-types-DqqspyVw.js → data-grid-types-BISkUXAY.js} +0 -0
  85. /package/dist/web/assets/{dist-_jZs3YZC.js → dist-B1I_4Jtc.js} +0 -0
  86. /package/dist/web/assets/{dist-D1SZxtVS.js → dist-CcDNqGjt.js} +0 -0
  87. /package/dist/web/assets/{katex-DzXRfQ_m.js → katex-Bqvo_ZG0.js} +0 -0
  88. /package/dist/web/assets/{lib-Dub8DlCJ.js → lib-Bu71-TFS.js} +0 -0
  89. /package/dist/web/assets/{use-blob-url-DGY5qKiT.js → use-blob-url-QX-XajU8.js} +0 -0
  90. /package/dist/web/assets/{vendor-xterm-Dyfw49hJ.js → vendor-xterm-K3_Xwigj.js} +0 -0
@@ -1 +0,0 @@
1
- import{V as e}from"./vendor-mermaid-CPtQ2zua.js";export{e as createInfoServices};
@@ -1 +0,0 @@
1
- import"./vendor-markdown-0Mxgxy0L.js";import"./api-client-DIhJ5qVW.js";import{E as e}from"./index-xpTdWKsA.js";export{e as useKeybindingsStore};
@@ -1 +0,0 @@
1
- import{z as e}from"./vendor-mermaid-CPtQ2zua.js";export{e as createPacketServices};
@@ -1 +0,0 @@
1
- import{L as e}from"./vendor-mermaid-CPtQ2zua.js";export{e as createPieServices};
@@ -1 +0,0 @@
1
- import{F as e}from"./vendor-mermaid-CPtQ2zua.js";export{e as createRadarServices};
@@ -1 +0,0 @@
1
- import"./vendor-markdown-0Mxgxy0L.js";import"./vendor-ui-B-89Uj8i.js";import"./scroll-area-iv39O3VN.js";import"./ai-settings-section-DR5BueEL.js";import"./dist-CaKCIxem.js";import"./input-4ll___Gh.js";import"./api-client-DIhJ5qVW.js";import"./settings-store-D2MtC9tm.js";import"./vendor-mermaid-CPtQ2zua.js";import"./file-store-DOxcU_7s.js";import"./api-settings-DowGyuVy.js";import{s as e}from"./index-xpTdWKsA.js";export{e as SettingsTab};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import"./vendor-ui-B-89Uj8i.js";import{t as r}from"./database-DOWH9-Vv.js";import{t as i}from"./glide-data-grid-9TPVejSQ.js";import{t as a}from"./refresh-cw-BjrAbUJe.js";import{t as o}from"./table-BzjWcs87.js";import{i as s,t as c}from"./api-client-DIhJ5qVW.js";import"./settings-store-D2MtC9tm.js";import"./vendor-mermaid-CPtQ2zua.js";import"./tab-store-Dow2Ztto.js";import{B as l,Q as u}from"./index-xpTdWKsA.js";import"./data-grid-types-DqqspyVw.js";import"./use-monaco-theme-CugUkORI.js";import{t as d}from"./sql-query-editor-CultKZsI.js";var f=e(n(),1);function p(e,t,n){let[r,i]=(0,f.useState)([]),[a,o]=(0,f.useState)(null),[l,u]=(0,f.useState)(null),[d,p]=(0,f.useState)([]),[m,h]=(0,f.useState)(!1),[g,_]=(0,f.useState)(null),[v,y]=(0,f.useState)(1),[b,x]=(0,f.useState)(null),[S,C]=(0,f.useState)(null),[w,T]=(0,f.useState)(!1),E=n?`/api/db/connections/${n}`:null,D=E??`${s(e)}/sqlite`,O=E?``:`path=${encodeURIComponent(t)}`,k=(0,f.useCallback)(async()=>{h(!0),_(null);try{let e=E?`?cached=1`:O?`?${O}`:``,t=await c.get(`${D}/tables${e}`);i(t),!E&&t.length>0&&!a&&o(t[0].name)}catch(e){_(e.message)}finally{h(!1)}},[D,O,E]);(0,f.useEffect)(()=>{k()},[k]);let A=(0,f.useCallback)(async()=>{if(a){h(!0);try{let e=O?`${O}&`:``,[t,n]=await Promise.all([c.get(`${D}/data?${e}table=${encodeURIComponent(a)}&page=${v}&limit=100`),c.get(`${D}/schema?${e}table=${encodeURIComponent(a)}`)]);u(t),p(n)}catch(e){_(e.message)}finally{h(!1)}}},[D,O,a,v]);return(0,f.useEffect)(()=>{A()},[A]),{tables:r,selectedTable:a,selectTable:(0,f.useCallback)(e=>{o(e),y(1),x(null)},[]),tableData:l,schema:d,loading:m,error:g,page:v,setPage:y,queryResult:b,queryError:S,queryLoading:w,executeQuery:(0,f.useCallback)(async e=>{T(!0),C(null);try{let n=E?{sql:e}:{path:t,sql:e},r=await c.post(`${D}/query`,n);x(r),r.changeType===`modify`&&A()}catch(e){C(e.message)}finally{T(!1)}},[D,E,t,A]),updateCell:(0,f.useCallback)(async(e,n,r)=>{if(a)try{E?await c.put(`${D}/cell`,{table:a,pkColumn:`rowid`,pkValue:e,column:n,value:r}):await c.put(`${D}/cell`,{path:t,table:a,rowid:e,column:n,value:r}),A()}catch(e){_(e.message)}},[D,E,t,a,A]),deleteRow:(0,f.useCallback)(async e=>{if(a)try{E?await c.del(`${D}/row`,{table:a,pkColumn:`rowid`,pkValue:e}):await c.del(`${D}/row`,{path:t,table:a,rowid:e}),A(),k()}catch(e){_(e.message)}},[D,E,t,a,A,k]),refreshTables:k,refreshData:A}}var m=t();function h({tables:e,selectedTable:t,onSelect:n,onRefresh:r}){return(0,m.jsxs)(`div`,{className:`w-48 shrink-0 flex flex-col bg-background overflow-hidden`,children:[(0,m.jsxs)(`div`,{className:`flex items-center justify-between px-3 py-2 border-b border-border`,children:[(0,m.jsx)(`span`,{className:`text-xs font-medium text-muted-foreground uppercase tracking-wider`,children:`Tables`}),(0,m.jsx)(`button`,{type:`button`,onClick:r,className:`text-muted-foreground hover:text-foreground transition-colors`,title:`Refresh tables`,children:(0,m.jsx)(a,{className:`size-3`})})]}),(0,m.jsxs)(`div`,{className:`flex-1 overflow-y-auto`,children:[e.map(e=>(0,m.jsxs)(`button`,{type:`button`,onClick:()=>n(e.name),className:`w-full flex items-center gap-2 px-3 py-1.5 text-left text-xs transition-colors ${t===e.name?`bg-muted text-foreground`:`text-muted-foreground hover:bg-muted/50 hover:text-foreground`}`,children:[(0,m.jsx)(o,{className:`size-3 shrink-0`}),(0,m.jsx)(`span`,{className:`truncate flex-1`,children:e.name}),(0,m.jsx)(`span`,{className:`text-[10px] opacity-60`,children:e.rowCount})]},e.name)),e.length===0&&(0,m.jsx)(`p`,{className:`px-3 py-4 text-xs text-muted-foreground text-center`,children:`No tables found`})]})]})}function g({onExecute:e,loading:t}){return(0,m.jsx)(d,{onExecute:e,loading:t})}function _({metadata:e}){let t=e?.filePath,n=e?.projectName,i=e?.connectionId,a=e?.tableName,[o,s]=(0,f.useState)(!1);return i?(0,m.jsx)(v,{projectName:``,dbPath:``,connectionId:i,connectionName:e?.connectionName,initialTable:a,queryPanelOpen:o,onToggleQueryPanel:()=>s(e=>!e),hideTableList:!0}):!t||!n?(0,m.jsxs)(`div`,{className:`flex items-center justify-center h-full text-text-secondary text-sm`,children:[(0,m.jsx)(r,{className:`size-5 mr-2`}),` No database file selected.`]}):(0,m.jsx)(v,{projectName:n,dbPath:t,queryPanelOpen:o,onToggleQueryPanel:()=>s(e=>!e)})}function v({projectName:e,dbPath:t,connectionId:n,connectionName:a,initialTable:o,queryPanelOpen:s,onToggleQueryPanel:c,hideTableList:d}){let _=p(e,t,n),v=(0,f.useRef)(!1);return(0,f.useEffect)(()=>{o&&!v.current&&_.tables.length>0&&(v.current=!0,_.selectTable(o))},[o,_.tables]),_.error&&_.tables.length===0?(0,m.jsxs)(`div`,{className:`flex flex-col items-center justify-center h-full gap-3 text-text-secondary`,children:[(0,m.jsx)(u,{className:`size-10 text-destructive`}),(0,m.jsx)(`p`,{className:`text-sm`,children:_.error})]}):_.loading&&_.tables.length===0?(0,m.jsxs)(`div`,{className:`flex items-center justify-center h-full gap-2 text-text-secondary`,children:[(0,m.jsx)(l,{className:`size-5 animate-spin`}),(0,m.jsx)(`span`,{className:`text-sm`,children:`Loading database...`})]}):(0,m.jsxs)(`div`,{className:`flex h-full w-full overflow-hidden`,children:[!d&&(0,m.jsx)(h,{tables:_.tables,selectedTable:_.selectedTable,onSelect:_.selectTable,onRefresh:_.refreshTables}),(0,m.jsxs)(`div`,{className:`flex-1 flex flex-col overflow-hidden ${d?``:`border-l border-border`}`,children:[(0,m.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1.5 border-b border-border bg-background shrink-0`,children:[(0,m.jsx)(r,{className:`size-3.5 text-muted-foreground`}),(0,m.jsx)(`span`,{className:`text-xs text-muted-foreground truncate`,children:a??t}),(0,m.jsx)(`span`,{className:`text-xs text-muted-foreground`,children:_.selectedTable&&`/ ${_.selectedTable}`}),(0,m.jsx)(`div`,{className:`ml-auto`,children:(0,m.jsx)(`button`,{type:`button`,onClick:c,className:`px-2 py-1 rounded text-xs transition-colors ${s?`bg-muted text-foreground`:`text-muted-foreground hover:text-foreground`}`,children:`SQL`})})]}),(0,m.jsx)(`div`,{className:`flex-1 overflow-hidden ${s?`max-h-[60%]`:``}`,children:_.tableData?(0,m.jsx)(i,{columns:_.tableData.columns,rows:_.tableData.rows,total:_.tableData.total,limit:_.tableData.limit,schema:_.schema.map(e=>({name:e.name,type:e.type,nullable:!e.notnull,pk:!!e.pk,defaultValue:e.dflt_value,fk:e.fk??null})),loading:_.loading,page:_.page,onPageChange:_.setPage,onCellUpdate:(e,t,n,r)=>_.updateCell(t,n,r),onRowDelete:(e,t)=>_.deleteRow(t)}):(0,m.jsx)(`div`,{className:`flex items-center justify-center h-full text-xs text-muted-foreground`,children:_.loading?(0,m.jsx)(l,{className:`size-4 animate-spin`}):`Select a table`})}),s&&(0,m.jsx)(`div`,{className:`border-t border-border h-[40%] shrink-0`,children:(0,m.jsx)(g,{onExecute:_.executeQuery,loading:_.queryLoading})})]})]})}export{_ as SqliteViewer};
@@ -1 +0,0 @@
1
- import{o as e}from"./rolldown-runtime-FhOqtrmT.js";import{b as t,x as n}from"./vendor-markdown-0Mxgxy0L.js";import"./api-client-DIhJ5qVW.js";import{n as r}from"./settings-store-D2MtC9tm.js";import"./vendor-mermaid-CPtQ2zua.js";import{n as i}from"./utils-CQux7CsO.js";import{L as a,X as o,Y as s}from"./index-xpTdWKsA.js";import{n as c,r as l,t as u}from"./vendor-xterm-Dyfw49hJ.js";var d=e(n(),1),f={background:`#0f1419`,foreground:`#e5e7eb`,cursor:`#e5e7eb`,selectionBackground:`#3b82f640`,black:`#1a1f2e`,red:`#ef4444`,green:`#10b981`,yellow:`#f59e0b`,blue:`#3b82f6`,magenta:`#a855f7`,cyan:`#06b6d4`,white:`#e5e7eb`,brightBlack:`#6b7280`,brightRed:`#f87171`,brightGreen:`#34d399`,brightYellow:`#fbbf24`,brightBlue:`#60a5fa`,brightMagenta:`#c084fc`,brightCyan:`#22d3ee`,brightWhite:`#f9fafb`},p={background:`#ffffff`,foreground:`#1a1f2e`,cursor:`#1a1f2e`,selectionBackground:`#2563eb30`,black:`#1a1f2e`,red:`#dc2626`,green:`#059669`,yellow:`#d97706`,blue:`#2563eb`,magenta:`#9333ea`,cyan:`#0891b2`,white:`#f8fafc`,brightBlack:`#64748b`,brightRed:`#ef4444`,brightGreen:`#10b981`,brightYellow:`#f59e0b`,brightBlue:`#3b82f6`,brightMagenta:`#a855f7`,brightCyan:`#06b6d4`,brightWhite:`#ffffff`};function m(e){return e===`system`?window.matchMedia(`(prefers-color-scheme: dark)`).matches?f:p:e===`light`?p:f}var h=`RESIZE:`;function g(e){let{sessionId:t,containerRef:n}=e,i=(0,d.useRef)(null),a=(0,d.useRef)(null),o=(0,d.useRef)(null),s=(0,d.useRef)(null),f=(0,d.useRef)(0),[p,g]=(0,d.useState)(!1),[_,v]=(0,d.useState)(!1),[y,b]=(0,d.useState)(!1),x=(0,d.useRef)(t),S=(0,d.useCallback)(e=>{let t=o.current;t?.readyState===WebSocket.OPEN&&t.send(e)},[]),C=(0,d.useCallback)(()=>i.current?.getSelection()??``,[]),w=(0,d.useCallback)(()=>{let e=i.current,t=o.current;e&&t?.readyState===WebSocket.OPEN&&t.send(`${h}${e.cols},${e.rows}`)},[]),T=(0,d.useCallback)(()=>{s.current&&clearTimeout(s.current),o.current?.close(),o.current=null,x.current=`new`,f.current=0,b(!1),g(!1),v(!1),setTimeout(()=>E(),0)},[]),E=(0,d.useCallback)(()=>{let t=i.current;if(!t)return;let n=window.location.protocol===`https:`?`wss:`:`ws:`,r=e.projectName??``,a=x.current,s=`${n}//${window.location.host}/ws/project/${encodeURIComponent(r)}/terminal/${a}`,c=new WebSocket(s);o.current=c,c.onopen=()=>{g(!0),v(!1),f.current=0,w()},c.onmessage=e=>{if(typeof e.data==`string`){if(e.data.startsWith(`{`))try{let n=JSON.parse(e.data);if(n.type===`session`||n.type===`error`||n.type===`exited`||n.type===`ping`){n.type===`session`&&n.id&&(x.current=n.id),n.type===`error`&&t.write(`\r\n\x1b[31mError: ${n.message}\x1b[0m\r\n`),n.type===`exited`&&b(!0);return}}catch{}t.write(e.data)}},c.onclose=()=>{g(!1),D()},c.onerror=()=>{c.close()}},[t,w]);function D(){let e=Math.min(1e3*2**f.current,3e4);f.current++,v(!0),s.current=setTimeout(()=>{E()},e)}return(0,d.useEffect)(()=>{let e=n.current;if(!e)return;let t=new l({cursorBlink:!0,fontSize:13,fontFamily:`var(--font-mono)`,theme:m(r.getState().theme)}),d=new c,f=new u;t.loadAddon(d),t.loadAddon(f),t.open(e),d.fit(),i.current=t,a.current=d,t.onData(e=>{let t=o.current;t?.readyState===WebSocket.OPEN&&t.send(e)}),E();let p=new ResizeObserver(()=>{try{d.fit(),w()}catch{}});p.observe(e);let h=r.getState().theme,g=r.subscribe(e=>{e.theme!==h&&(h=e.theme,t.options.theme=m(e.theme))});return()=>{g(),p.disconnect(),s.current&&clearTimeout(s.current),o.current?.close(),o.current=null,t.dispose(),i.current=null,a.current=null}},[t]),{connected:p,reconnecting:_,exited:y,sendData:S,getSelection:C,restart:T}}var _=t(),v=[{label:`Tab`,value:` `},{label:`Esc`,value:`\x1B`},{label:`Ctrl`,value:null,isModifier:!0},{label:`↑`,value:`\x1B[A`},{label:`↓`,value:`\x1B[B`},{label:`←`,value:`\x1B[D`},{label:`→`,value:`\x1B[C`}],y=(0,d.memo)(function({metadata:e}){let t=e?.sessionId??`new`,n=e?.projectName,r=(0,d.useRef)(null),{connected:c,reconnecting:l,exited:u,sendData:f,getSelection:p,restart:m}=g({sessionId:t,projectName:n,containerRef:r}),[h,y]=(0,d.useState)(!1),[b,x]=(0,d.useState)(null);(0,d.useEffect)(()=>{let e=window.visualViewport;if(!e)return;function t(){e&&x(e.height)}return e.addEventListener(`resize`,t),()=>e.removeEventListener(`resize`,t)},[]);let S=(0,d.useCallback)(()=>{(r.current?.querySelector(`.xterm-helper-textarea`))?.focus()},[]),C=(0,d.useCallback)(e=>{if(S(),h&&e.length===1){let t=e.toLowerCase().charCodeAt(0)-96;t>=1&&t<=26&&f(String.fromCharCode(t)),y(!1);return}f(e)},[h,f,S]),w=(0,d.useCallback)(async()=>{let e=p();e&&await navigator.clipboard.writeText(e)},[p]),T=(0,d.useCallback)(async()=>{try{let e=await navigator.clipboard.readText();e&&(f(e),S())}catch{}},[f,S]),E=typeof window<`u`&&`ontouchstart`in window;return(0,_.jsxs)(`div`,{className:`flex flex-col h-full`,style:b?{maxHeight:`${b}px`}:void 0,children:[(0,_.jsxs)(`div`,{className:`flex items-center gap-2 px-3 py-1 bg-surface border-b border-border text-xs`,children:[(0,_.jsx)(`span`,{className:i(`size-2 rounded-full`,u?`bg-error`:c?`bg-success`:l?`bg-warning`:`bg-error`)}),(0,_.jsx)(`span`,{className:`text-text-secondary`,children:u?`Process exited`:c?`Connected`:l?`Reconnecting...`:`Disconnected`}),u&&(0,_.jsxs)(`button`,{onClick:m,className:`flex items-center gap-1 px-1.5 py-0.5 rounded text-xs bg-surface-elevated text-text-primary hover:bg-primary hover:text-primary-foreground active:bg-primary active:text-primary-foreground transition-colors`,children:[(0,_.jsx)(a,{size:10}),`Restart`]}),(0,_.jsx)(`span`,{className:`text-text-subtle ml-auto font-mono`,children:t})]}),(0,_.jsx)(`div`,{ref:r,className:`flex-1 min-h-0 bg-background p-1`}),E&&(0,_.jsxs)(`div`,{className:`flex items-center gap-1 px-2 py-1.5 bg-surface border-t border-border overflow-x-auto`,children:[(0,_.jsx)(`button`,{onClick:w,className:`px-2 py-1.5 rounded text-xs min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,children:(0,_.jsx)(s,{size:14})}),(0,_.jsx)(`button`,{onClick:T,className:`px-2 py-1.5 rounded text-xs min-w-[36px] min-h-[32px] bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground transition-colors select-none`,children:(0,_.jsx)(o,{size:14})}),(0,_.jsx)(`div`,{className:`w-px h-5 bg-border mx-0.5`}),v.map(e=>(0,_.jsx)(`button`,{onClick:()=>{e.label===`Ctrl`?y(!h):e.value&&C(e.value)},className:i(`px-3 py-1.5 rounded text-xs font-mono min-w-[36px] min-h-[32px]`,`bg-surface-elevated text-text-primary active:bg-primary active:text-primary-foreground`,`transition-colors select-none`,e.label===`Ctrl`&&h&&`bg-primary text-primary-foreground`),children:e.label},e.label))]})]})});export{y as TerminalTab};
@@ -1 +0,0 @@
1
- import{N as e}from"./vendor-mermaid-CPtQ2zua.js";export{e as createTreemapServices};