tide-commander 1.45.0 → 1.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/assets/{BossLogsModal-N4CnX-0x.js → BossLogsModal-BIFXXaaq.js} +1 -1
- package/dist/assets/BossSpawnModal-CL4eQrBS.js +1 -0
- package/dist/assets/{ControlsModal-Cr5klRxS.js → ControlsModal-DX_FqPx7.js} +1 -1
- package/dist/assets/{DockerLogsModal-D6U9obTe.js → DockerLogsModal-SoHgFfH1.js} +1 -1
- package/dist/assets/{EmbeddedEditor-Bnm-9Q73.js → EmbeddedEditor-Dx6Y7JM3.js} +1 -1
- package/dist/assets/{GmailOAuthSetup-GoKvyYWS.js → GmailOAuthSetup-K-SZcqrr.js} +1 -1
- package/dist/assets/{GoogleOAuthSetup-D3sAGlZq.js → GoogleOAuthSetup-BfpfXmbM.js} +1 -1
- package/dist/assets/{IframeModal-DQqev6_V.js → IframeModal-BAgB3UQ3.js} +1 -1
- package/dist/assets/IntegrationsPanel-B1nXTZW8.js +2 -0
- package/dist/assets/{LogViewerModal-DB0xx-oB.js → LogViewerModal-4do7lATm.js} +1 -1
- package/dist/assets/{MonitoringModal-BspW74kP.js → MonitoringModal-OAExiDTA.js} +1 -1
- package/dist/assets/{PM2LogsModal-Cz4GZtyl.js → PM2LogsModal-DnA2AsIM.js} +1 -1
- package/dist/assets/{RestoreArchivedAreaModal-KCCSJy3B.js → RestoreArchivedAreaModal-C0ADFzsM.js} +1 -1
- package/dist/assets/{SaveSnapshotModal-DqZ1JedM.js → SaveSnapshotModal-Ct4aW93y.js} +1 -1
- package/dist/assets/Scene2DCanvas-C5mj6yGY.js +1 -0
- package/dist/assets/{SceneManager-DggU0iAh.js → SceneManager-CPtKPGZP.js} +1 -1
- package/dist/assets/SkillsPanel-B0XFw3Ae.js +28 -0
- package/dist/assets/SnapshotManager-0NaWlDXc.js +1 -0
- package/dist/assets/SpawnModal-BOJQ1pln.js +1 -0
- package/dist/assets/SubordinateAssignmentModal-BuzBY1CB.js +1 -0
- package/dist/assets/{SupervisorPanel-CxId5lI7.js → SupervisorPanel-B2_2QYL0.js} +1 -1
- package/dist/assets/{TriggerManagerPanel-BCzGGCPD.js → TriggerManagerPanel-CUD10Dg9.js} +2 -2
- package/dist/assets/{WorkflowEditorPanel-BmNCGmxP.js → WorkflowEditorPanel-qfjb7ozq.js} +2 -2
- package/dist/assets/{index-CcYTUJp1.js → index-BfXYjLRr.js} +4 -4
- package/dist/assets/{index-Sej69v19.js → index-BzvQBrQn.js} +3 -3
- package/dist/assets/{index-COBkxsEU.js → index-CKitMIQJ.js} +1 -1
- package/dist/assets/{index-CvJuv-ho.js → index-CTdXoSNs.js} +2 -2
- package/dist/assets/{index-Bhb-rse9.js → index-D0e5Zn8j.js} +3 -3
- package/dist/assets/{index-C9B8kaWK.js → index-DFTYc8O3.js} +1 -1
- package/dist/assets/index-K6Ld2Man.js +1 -0
- package/dist/assets/{index-8WVMR823.js → index-RddWDRes.js} +1 -1
- package/dist/assets/{main-DjGrMNoB.css → main-Ch2CJGT4.css} +1 -1
- package/dist/assets/{main-6CnCKW13.js → main-D3GShQ8B.js} +78 -78
- package/dist/assets/{web-CrUhsC9T.js → web-D0MII38C.js} +1 -1
- package/dist/assets/{web-RTEsf66y.js → web-bLUMZcn-.js} +1 -1
- package/dist/index.html +2 -2
- package/dist/src/packages/server/data/index.js +25 -0
- package/dist/src/packages/server/routes/config.js +7 -0
- package/dist/src/packages/server/routes/custom-class-icons.js +138 -0
- package/dist/src/packages/server/routes/index.js +2 -0
- package/dist/src/packages/server/services/custom-class-service.js +7 -2
- package/package.json +1 -1
- package/dist/assets/BossSpawnModal-4CPjS2xn.js +0 -1
- package/dist/assets/IntegrationsPanel-C9hWD7mO.js +0 -2
- package/dist/assets/Scene2DCanvas-MRhWT6EA.js +0 -1
- package/dist/assets/SkillsPanel-DZC0Im2z.js +0 -28
- package/dist/assets/SnapshotManager-3LQMRFLh.js +0 -1
- package/dist/assets/SpawnModal-C_e6q2uv.js +0 -1
- package/dist/assets/SubordinateAssignmentModal-BZdSk9WL.js +0 -1
- package/dist/assets/index-B8SWRPUd.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{u as J,a as Z,r as n,s as b,j as e,D as re,b as le,c as ce,d as ie,g as de,e as oe,Q as ue,R as be}from"./main-6CnCKW13.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const me=({building:a,connections:p,activeConnectionId:l,activeDatabase:i,collapsed:y,onToggleCollapse:x,onConnectionChange:$,onDatabaseChange:N,onInsertTable:Q,onSelectTableQuery:P})=>{const{t:d}=J(["terminal"]),w=Z(a.id),[M,r]=n.useState(new Set),[o,v]=n.useState(""),[S,F]=n.useState(""),[H,k]=n.useState(!1),[U,R]=n.useState(null),O=n.useRef(null),q=n.useRef(null),A=n.useRef(null),j=l?w.databases.get(l)??[]:[],G=l&&i?`${l}:${i}`:"",f=G?w.tables.get(G)??[]:[],_=l?w.connectionStatus.get(l):void 0,D=n.useMemo(()=>{if(!o.trim())return j;const t=o.toLowerCase();return j.filter(u=>u.toLowerCase().includes(t))},[j,o]),h=n.useMemo(()=>{if(!S.trim())return f;const t=S.toLowerCase();return f.filter(u=>u.name.toLowerCase().includes(t))},[f,S]);n.useEffect(()=>{const t=u=>{q.current&&!q.current.contains(u.target)&&k(!1)};return H&&document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[H]),n.useEffect(()=>{l&&!_&&b.testDatabaseConnection(a.id,l)},[a.id,l,_]),n.useEffect(()=>{l&&(_!=null&&_.connected)&&j.length===0&&b.listDatabases(a.id,l)},[a.id,l,_==null?void 0:_.connected,j.length]),n.useEffect(()=>{l&&i&&f.length===0&&b.listTables(a.id,l,i)},[a.id,l,i,f.length]),n.useEffect(()=>{R(null),F("")},[l,i]);const C=n.useCallback(t=>{r(u=>{const g=new Set(u);if(g.has(t))g.delete(t);else if(g.add(t),l&&i){const T=`${l}:${i}:${t}`;w.tableSchemas.has(T)||b.getTableSchema(a.id,l,i,t)}return g})},[a.id,l,i,w.tableSchemas]),K=t=>{if(!l||!i)return null;const u=`${l}:${i}:${t}`;return w.tableSchemas.get(u)};return y?e.jsx("div",{className:"database-sidebar database-sidebar--collapsed",children:e.jsx("button",{className:"database-sidebar__toggle",onClick:x,title:d("terminal:database.expandSidebar"),children:"»"})}):e.jsxs("div",{className:"database-sidebar",children:[e.jsxs("div",{className:"database-sidebar__header",children:[e.jsx("span",{children:d("terminal:database.explorer")}),e.jsx("button",{className:"database-sidebar__toggle",onClick:x,title:d("terminal:database.collapseSidebar"),children:"«"})]}),e.jsxs("div",{className:"database-sidebar__section",children:[e.jsx("div",{className:"database-sidebar__section-title",children:d("terminal:database.connection")}),e.jsx("select",{className:"database-sidebar__select",value:l||"",onChange:t=>$(t.target.value),children:p.length===0?e.jsx("option",{value:"",children:d("terminal:database.noConnections")}):p.map(t=>{var u;return e.jsxs("option",{value:t.id,children:[((u=re[t.engine])==null?void 0:u.icon)??"🗄️"," ",t.name]},t.id)})}),_&&e.jsx("div",{className:`database-sidebar__status ${_.connected?"database-sidebar__status--connected":"database-sidebar__status--error"}`,children:_.connected?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"database-sidebar__status-icon",children:"✓"}),d("terminal:database.connected"),_.serverVersion&&e.jsxs("span",{className:"database-sidebar__version",children:["(",_.serverVersion,")"]})]}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"database-sidebar__status-icon",children:"✗"}),_.error||d("terminal:database.disconnected")]})})]}),j.length>0&&e.jsxs("div",{className:"database-sidebar__section",children:[e.jsx("div",{className:"database-sidebar__section-title",children:d("terminal:database.databaseTitle")}),e.jsxs("div",{className:"database-sidebar__searchable-select",ref:q,children:[e.jsx("input",{ref:O,className:"database-sidebar__search-input",type:"text",value:H?o:i||"",placeholder:d("terminal:database.selectDatabase"),onChange:t=>{v(t.target.value),H||k(!0)},onFocus:()=>{k(!0),v("")},onKeyDown:t=>{var u,g;t.key==="Escape"?(k(!1),v(""),(u=O.current)==null||u.blur()):t.key==="Enter"&&D.length===1&&(N(D[0]),k(!1),v(""),(g=O.current)==null||g.blur())}}),H&&e.jsx("div",{className:"database-sidebar__dropdown",children:D.length===0?e.jsx("div",{className:"database-sidebar__dropdown-empty",children:"No matches"}):D.map(t=>e.jsx("div",{className:`database-sidebar__dropdown-item ${t===i?"database-sidebar__dropdown-item--active":""}`,onMouseDown:u=>{u.preventDefault(),N(t),k(!1),v("")},children:t},t))})]})]}),f.length>0&&e.jsxs("div",{className:"database-sidebar__section database-sidebar__section--tables",children:[e.jsx("div",{className:"database-sidebar__section-title",children:S.trim()?d("terminal:database.tablesCount",{count:h.length})+` / ${f.length}`:d("terminal:database.tablesCount",{count:f.length})}),e.jsxs("div",{className:"database-sidebar__table-filter",children:[e.jsx("input",{ref:A,className:"database-sidebar__table-filter-input",type:"text",value:S,placeholder:d("terminal:database.filterTables"),onChange:t=>F(t.target.value),onKeyDown:t=>{var u;t.key==="Escape"&&(S?F(""):(u=A.current)==null||u.blur(),t.stopPropagation())}}),S&&e.jsx("button",{className:"database-sidebar__table-filter-clear",onClick:()=>{var t;F(""),(t=A.current)==null||t.focus()},title:"Clear filter",children:"×"})]}),e.jsxs("div",{className:"database-sidebar__tables",children:[S.trim()&&h.length===0&&e.jsx("div",{className:"database-sidebar__tables-empty",children:d("terminal:database.noTablesMatch")}),h.map(t=>{const u=M.has(t.name),g=u?K(t.name):null;return e.jsxs("div",{className:"database-sidebar__table",children:[e.jsxs("div",{className:"database-sidebar__table-header",children:[e.jsx("button",{className:"database-sidebar__table-expand",onClick:()=>C(t.name),title:u?"Collapse table schema":"Expand table schema",children:u?"▼":"▶"}),e.jsx("span",{className:"database-sidebar__table-icon",children:t.type==="view"?"👁":"📋"}),e.jsx("span",{className:`database-sidebar__table-name ${U===t.name?"database-sidebar__table-name--selected":""}`,onClick:()=>R(t.name),onDoubleClick:()=>{R(t.name),P(t.name)},children:t.name}),e.jsx("button",{className:"database-sidebar__table-insert",onClick:T=>{T.stopPropagation(),Q(t.name)},title:d("terminal:database.insertTableName"),children:"+"})]}),u&&g&&e.jsx("div",{className:"database-sidebar__table-columns",children:g.columns.map(T=>e.jsxs("div",{className:"database-sidebar__column",onClick:()=>Q(T.name),title:`${T.type}${T.nullable?" NULL":" NOT NULL"}${T.primaryKey?" PK":""}`,children:[e.jsx("span",{className:"database-sidebar__column-icon",children:T.primaryKey?"🔑":""}),e.jsx("span",{className:"database-sidebar__column-name",children:T.name}),e.jsx("span",{className:"database-sidebar__column-type",children:T.type})]},T.name))})]},t.name)})]})]})]})},he=({buildingId:a,history:p,onLoadQuery:l})=>{const{t:i}=J(["terminal"]),[y,x]=n.useState(""),[$,N]=n.useState(!1),Q=n.useMemo(()=>{let r=p;if($&&(r=r.filter(o=>o.favorite)),y.trim()){const o=y.toLowerCase();r=r.filter(v=>v.query.toLowerCase().includes(o)||v.database.toLowerCase().includes(o))}return r},[p,$,y]),P=r=>{const o=new Date(r),S=new Date().getTime()-o.getTime();return S<1440*60*1e3?o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):S<10080*60*1e3?o.toLocaleDateString([],{weekday:"short"})+" "+o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):o.toLocaleDateString([],{month:"short",day:"numeric"})},d=n.useCallback((r,o)=>{o.stopPropagation(),b.toggleQueryFavorite(a,r)},[a]),w=n.useCallback((r,o)=>{o.stopPropagation(),b.deleteQueryFromHistory(a,r)},[a]),M=n.useCallback(()=>{confirm(i("terminal:database.confirmClearHistory"))&&b.clearQueryHistory(a)},[a,i]);return p.length===0?e.jsxs("div",{className:"query-history query-history--empty",children:[e.jsx("p",{children:i("terminal:database.noHistory")}),e.jsx("p",{children:i("terminal:database.queriesAppearHere")})]}):e.jsxs("div",{className:"query-history",children:[e.jsxs("div",{className:"query-history__toolbar",children:[e.jsx("input",{type:"text",className:"query-history__search",placeholder:i("terminal:database.searchQueries"),value:y,onChange:r=>x(r.target.value)}),e.jsxs("label",{className:"query-history__filter",children:[e.jsx("input",{type:"checkbox",checked:$,onChange:r=>N(r.target.checked)}),i("terminal:database.favoritesOnly")]}),e.jsx("button",{className:"query-history__clear",onClick:M,title:i("terminal:database.clearAll"),children:i("terminal:database.clearAll")})]}),e.jsxs("div",{className:"query-history__list",children:[Q.map(r=>e.jsxs("div",{className:`query-history__item ${r.status==="error"?"query-history__item--error":""}`,onClick:()=>l(r.query),children:[e.jsxs("div",{className:"query-history__item-header",children:[e.jsx("span",{className:`query-history__status ${r.status==="success"?"query-history__status--success":"query-history__status--error"}`,children:r.status==="success"?"✓":"✗"}),e.jsx("span",{className:"query-history__database",children:r.database}),e.jsx("span",{className:"query-history__date",children:P(r.executedAt)}),e.jsxs("span",{className:"query-history__duration",children:[r.duration,"ms"]}),r.rowCount!==void 0&&e.jsx("span",{className:"query-history__row-count",children:i("terminal:database.rowCount",{count:r.rowCount})})]}),e.jsx("div",{className:"query-history__query",children:e.jsx("code",{children:r.query.length>200?r.query.substring(0,200)+"...":r.query})}),r.error&&e.jsx("div",{className:"query-history__error",children:r.error}),e.jsxs("div",{className:"query-history__actions",children:[e.jsx("button",{className:`query-history__favorite ${r.favorite?"query-history__favorite--active":""}`,onClick:o=>d(r.id,o),title:r.favorite?i("terminal:database.removeFromFavorites"):i("terminal:database.addToFavorites"),children:r.favorite?"★":"☆"}),e.jsx("button",{className:"query-history__delete",onClick:o=>w(r.id,o),title:i("terminal:database.deleteFromHistory"),children:"🗑"})]})]},r.id)),Q.length===0&&e.jsx("div",{className:"query-history__no-results",children:i("terminal:database.noQueriesMatch")})]})]})},_e=({tabs:a,activeTabId:p,onTabClick:l,onTabClose:i})=>{const{t:y}=J(["terminal"]);return e.jsx("div",{className:"database-tabs",children:a.map(x=>e.jsxs("div",{className:`database-tabs__tab ${p===x.id?"database-tabs__tab--active":""}`,children:[e.jsxs("button",{className:"database-tabs__tab-label",onClick:()=>l(x),title:`${x.connectionName} / ${x.database}`,children:[x.database,e.jsx("span",{className:"database-tabs__tab-connection",children:x.connectionName})]}),e.jsx("button",{className:"database-tabs__tab-close",onClick:()=>i(x.id),title:y("terminal:database.closeTab"),"aria-label":`Close ${x.database} tab`,children:"×"})]},x.id))})},I=a=>`db-panel-${a}`;function pe(a){try{const p=localStorage.getItem(I(a));return p?JSON.parse(p):{}}catch{return{}}}function xe(a,p){try{localStorage.setItem(I(a),JSON.stringify(p))}catch{}}const ve=({building:a,onClose:p})=>{var B,Y,W,X;const{t:l}=J(["terminal","common"]),i=Z(a.id),y=le(a.id),x=ce(a.id),$=ie(a.id),N=n.useRef(pe(a.id)),Q=n.useRef(null),P=n.useRef(0),d=((B=a.database)==null?void 0:B.connections)??[],w=(s,c)=>`${s}:${c}`,M=s=>s?(N.current.queries??{})[s]??"":N.current.generalQuery??"",[r,o]=n.useState("results"),[v,S]=n.useState(0),[F,H]=n.useState(!1),[k,U]=n.useState(!1),[R,O]=n.useState(()=>(N.current.openTabs??[]).map(c=>{var m;return{id:`${c.connectionId}:${c.database}`,connectionId:c.connectionId,connectionName:((m=d.find(L=>L.id===c.connectionId))==null?void 0:m.name)??c.connectionId,database:c.database}})),[q,A]=n.useState(N.current.activeTabId??null),[j,G]=n.useState(()=>{const s=N.current.queries??{};return N.current.generalQuery,s}),[f,_]=n.useState(M(q)),D=n.useCallback(s=>{_(c=>{const m=typeof s=="function"?s(c):s;return G(L=>{const E={...L};return q&&(E[q]=m),E}),m})},[q]),h=i.activeConnectionId??N.current.connectionId??((Y=a.database)==null?void 0:Y.activeConnectionId)??((W=d[0])==null?void 0:W.id),C=i.activeDatabase??N.current.database??((X=a.database)==null?void 0:X.activeDatabase),K=d.find(s=>s.id===h),t=n.useCallback((s,c)=>{var E;const m=w(s,c),L=((E=d.find(z=>z.id===s))==null?void 0:E.name)??s;O(z=>{if(z.some(ne=>ne.id===m))return z;const te={id:m,connectionId:s,connectionName:L,database:c};return[...z,te]}),A(m),_(j[m]??""),b.setActiveConnection(a.id,s),b.setActiveDatabase(a.id,c)},[a.id,d,j]),u=n.useCallback(s=>{O(c=>c.filter(m=>m.id!==s)),q===s&&O(c=>{if(c.length>0){const m=c[0];A(m.id),_(j[m.id]??""),b.setActiveConnection(a.id,m.connectionId),b.setActiveDatabase(a.id,m.database)}else A(null),_("");return c})},[q,a.id,j]),g=n.useCallback(s=>{A(s.id),_(j[s.id]??""),b.setActiveConnection(a.id,s.connectionId),b.setActiveDatabase(a.id,s.database)},[a.id,j]);n.useEffect(()=>{if(!k&&d.length>0){const s=N.current;s.connectionId&&d.some(c=>c.id===s.connectionId)&&(b.setActiveConnection(a.id,s.connectionId),b.listDatabases(a.id,s.connectionId),s.database&&(b.setActiveDatabase(a.id,s.database),b.listTables(a.id,s.connectionId,s.database))),U(!0)}},[a.id,d,k]),n.useEffect(()=>{b.requestQueryHistory(a.id)},[a.id]),n.useEffect(()=>{const s=c=>{c.key==="Escape"&&(c.preventDefault(),c.stopPropagation(),p())};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[p]),n.useEffect(()=>{k&&h&&xe(a.id,{connectionId:h,database:C,lastQuery:f,queries:j,generalQuery:"",openTabs:R.map(s=>({connectionId:s.connectionId,database:s.database})),activeTabId:q??void 0})},[a.id,h,C,f,k,R,q,j]);const T=n.useCallback(s=>{var c;if(!(!h||!C||!f.trim()||$))if(s==="cursor"){const m=(c=Q.current)==null?void 0:c.querySelector(".query-editor__textarea"),L=(m==null?void 0:m.selectionStart)??P.current,E=de(f,L);E&&b.executeQuery(a.id,h,C,E)}else{const m=oe(f);m.length<=1?b.executeQuery(a.id,h,C,f.trim()):m.forEach((L,E)=>{setTimeout(()=>{b.executeQuery(a.id,h,C,L.sql)},E*150)})}},[a.id,h,C,f,$]),ee=n.useCallback(s=>{D(s),o("results")},[]),ae=n.useCallback(s=>{b.setActiveConnection(a.id,s),b.listDatabases(a.id,s)},[a.id]),se=n.useCallback(s=>{h&&(t(h,s),b.listTables(a.id,h,s))},[a.id,h,t]),V=y[v];return d.length===0?e.jsxs("div",{className:"database-panel",ref:Q,children:[e.jsxs("div",{className:"database-panel__header",children:[e.jsxs("div",{className:"database-panel__title",children:[e.jsx("span",{className:"database-panel__icon",children:"🗄️"}),e.jsx("span",{className:"database-panel__name",children:a.name})]}),e.jsx("button",{className:"database-panel__close",onClick:p,children:"×"})]}),e.jsx("div",{className:"database-panel__body",children:e.jsxs("div",{className:"database-panel__no-connections",children:[e.jsx("div",{className:"database-panel__no-connections-icon",children:"🔌"}),e.jsx("h3",{children:l("terminal:database.noConnections")}),e.jsx("p",{children:l("terminal:database.noConnectionsDesc")}),e.jsx("p",{children:l("terminal:database.toGetStarted")}),e.jsxs("ol",{children:[e.jsx("li",{children:l("terminal:database.step1Close")}),e.jsx("li",{children:l("terminal:database.step2Settings")}),e.jsx("li",{children:l("terminal:database.step3AddConnection")}),e.jsx("li",{children:l("terminal:database.step4Reopen")})]})]})})]}):e.jsxs("div",{className:"database-panel",ref:Q,children:[e.jsxs("div",{className:"database-panel__header",children:[e.jsxs("div",{className:"database-panel__title",children:[e.jsx("span",{className:"database-panel__icon",children:(K==null?void 0:K.engine)==="mysql"?"🐬":"🐘"}),e.jsx("span",{className:"database-panel__name",children:a.name}),K&&e.jsxs("span",{className:"database-panel__connection-info",children:[K.name," / ",C||l("terminal:database.noDatabaseSelected")]})]}),e.jsx("button",{className:"database-panel__close",onClick:p,children:"×"})]}),e.jsxs("div",{className:"database-panel__body",children:[e.jsx(me,{building:a,connections:d,activeConnectionId:h,activeDatabase:C,collapsed:F,onToggleCollapse:()=>H(!F),onConnectionChange:ae,onDatabaseChange:se,onInsertTable:s=>D(c=>c+` ${s}`),onSelectTableQuery:s=>{const c=`SELECT * FROM ${s}`;D(c),h&&C&&b.executeQuery(a.id,h,C,c)}}),e.jsxs("div",{className:"database-panel__main",children:[R.length>0&&e.jsx(_e,{tabs:R,activeTabId:q,onTabClick:g,onTabClose:u}),e.jsx(ue,{query:f,onChange:D,onExecute:T,isExecuting:$,disabled:!h||!C}),e.jsxs("div",{className:"database-panel__tabs",children:[e.jsxs("button",{className:`database-panel__tab ${r==="results"?"database-panel__tab--active":""}`,onClick:()=>o("results"),children:[l("terminal:database.results"),y.length>0&&e.jsx("span",{className:"database-panel__tab-badge",children:y.length})]}),e.jsxs("button",{className:`database-panel__tab ${r==="history"?"database-panel__tab--active":""}`,onClick:()=>o("history"),children:[l("terminal:database.history"),x.length>0&&e.jsx("span",{className:"database-panel__tab-badge",children:x.length})]}),r==="results"&&y.length>1&&e.jsxs("div",{className:"database-panel__result-nav",children:[e.jsxs("button",{disabled:v>=y.length-1,onClick:()=>S(s=>s+1),children:["← ",l("terminal:database.older")]}),e.jsxs("span",{children:[v+1," / ",y.length]}),e.jsxs("button",{disabled:v<=0,onClick:()=>S(s=>s-1),children:[l("terminal:database.newer")," →"]})]})]}),e.jsx("div",{className:"database-panel__tab-content",children:r==="results"?V?e.jsx(be,{result:V,buildingId:a.id,building:a}):e.jsxs("div",{className:"database-panel__empty",children:[e.jsx("p",{children:l("terminal:database.noResultsYet")}),e.jsx("p",{children:l("terminal:database.selectDbAndRun")})]}):e.jsx(he,{buildingId:a.id,history:x,onLoadQuery:ee})})]})]})]})};export{ve as DatabasePanel,me as DatabaseSidebar,_e as DatabaseTabs,ue as QueryEditor,he as QueryHistoryPanel,be as ResultsTable};
|
|
1
|
+
import{u as J,a as Z,r as n,s as b,j as e,D as re,b as le,c as ce,d as ie,g as de,e as oe,Q as ue,R as be}from"./main-D3GShQ8B.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const me=({building:a,connections:p,activeConnectionId:l,activeDatabase:i,collapsed:y,onToggleCollapse:x,onConnectionChange:$,onDatabaseChange:N,onInsertTable:Q,onSelectTableQuery:P})=>{const{t:d}=J(["terminal"]),w=Z(a.id),[M,r]=n.useState(new Set),[o,v]=n.useState(""),[S,F]=n.useState(""),[H,k]=n.useState(!1),[U,R]=n.useState(null),O=n.useRef(null),q=n.useRef(null),A=n.useRef(null),j=l?w.databases.get(l)??[]:[],G=l&&i?`${l}:${i}`:"",f=G?w.tables.get(G)??[]:[],_=l?w.connectionStatus.get(l):void 0,D=n.useMemo(()=>{if(!o.trim())return j;const t=o.toLowerCase();return j.filter(u=>u.toLowerCase().includes(t))},[j,o]),h=n.useMemo(()=>{if(!S.trim())return f;const t=S.toLowerCase();return f.filter(u=>u.name.toLowerCase().includes(t))},[f,S]);n.useEffect(()=>{const t=u=>{q.current&&!q.current.contains(u.target)&&k(!1)};return H&&document.addEventListener("mousedown",t),()=>document.removeEventListener("mousedown",t)},[H]),n.useEffect(()=>{l&&!_&&b.testDatabaseConnection(a.id,l)},[a.id,l,_]),n.useEffect(()=>{l&&(_!=null&&_.connected)&&j.length===0&&b.listDatabases(a.id,l)},[a.id,l,_==null?void 0:_.connected,j.length]),n.useEffect(()=>{l&&i&&f.length===0&&b.listTables(a.id,l,i)},[a.id,l,i,f.length]),n.useEffect(()=>{R(null),F("")},[l,i]);const C=n.useCallback(t=>{r(u=>{const g=new Set(u);if(g.has(t))g.delete(t);else if(g.add(t),l&&i){const T=`${l}:${i}:${t}`;w.tableSchemas.has(T)||b.getTableSchema(a.id,l,i,t)}return g})},[a.id,l,i,w.tableSchemas]),K=t=>{if(!l||!i)return null;const u=`${l}:${i}:${t}`;return w.tableSchemas.get(u)};return y?e.jsx("div",{className:"database-sidebar database-sidebar--collapsed",children:e.jsx("button",{className:"database-sidebar__toggle",onClick:x,title:d("terminal:database.expandSidebar"),children:"»"})}):e.jsxs("div",{className:"database-sidebar",children:[e.jsxs("div",{className:"database-sidebar__header",children:[e.jsx("span",{children:d("terminal:database.explorer")}),e.jsx("button",{className:"database-sidebar__toggle",onClick:x,title:d("terminal:database.collapseSidebar"),children:"«"})]}),e.jsxs("div",{className:"database-sidebar__section",children:[e.jsx("div",{className:"database-sidebar__section-title",children:d("terminal:database.connection")}),e.jsx("select",{className:"database-sidebar__select",value:l||"",onChange:t=>$(t.target.value),children:p.length===0?e.jsx("option",{value:"",children:d("terminal:database.noConnections")}):p.map(t=>{var u;return e.jsxs("option",{value:t.id,children:[((u=re[t.engine])==null?void 0:u.icon)??"🗄️"," ",t.name]},t.id)})}),_&&e.jsx("div",{className:`database-sidebar__status ${_.connected?"database-sidebar__status--connected":"database-sidebar__status--error"}`,children:_.connected?e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"database-sidebar__status-icon",children:"✓"}),d("terminal:database.connected"),_.serverVersion&&e.jsxs("span",{className:"database-sidebar__version",children:["(",_.serverVersion,")"]})]}):e.jsxs(e.Fragment,{children:[e.jsx("span",{className:"database-sidebar__status-icon",children:"✗"}),_.error||d("terminal:database.disconnected")]})})]}),j.length>0&&e.jsxs("div",{className:"database-sidebar__section",children:[e.jsx("div",{className:"database-sidebar__section-title",children:d("terminal:database.databaseTitle")}),e.jsxs("div",{className:"database-sidebar__searchable-select",ref:q,children:[e.jsx("input",{ref:O,className:"database-sidebar__search-input",type:"text",value:H?o:i||"",placeholder:d("terminal:database.selectDatabase"),onChange:t=>{v(t.target.value),H||k(!0)},onFocus:()=>{k(!0),v("")},onKeyDown:t=>{var u,g;t.key==="Escape"?(k(!1),v(""),(u=O.current)==null||u.blur()):t.key==="Enter"&&D.length===1&&(N(D[0]),k(!1),v(""),(g=O.current)==null||g.blur())}}),H&&e.jsx("div",{className:"database-sidebar__dropdown",children:D.length===0?e.jsx("div",{className:"database-sidebar__dropdown-empty",children:"No matches"}):D.map(t=>e.jsx("div",{className:`database-sidebar__dropdown-item ${t===i?"database-sidebar__dropdown-item--active":""}`,onMouseDown:u=>{u.preventDefault(),N(t),k(!1),v("")},children:t},t))})]})]}),f.length>0&&e.jsxs("div",{className:"database-sidebar__section database-sidebar__section--tables",children:[e.jsx("div",{className:"database-sidebar__section-title",children:S.trim()?d("terminal:database.tablesCount",{count:h.length})+` / ${f.length}`:d("terminal:database.tablesCount",{count:f.length})}),e.jsxs("div",{className:"database-sidebar__table-filter",children:[e.jsx("input",{ref:A,className:"database-sidebar__table-filter-input",type:"text",value:S,placeholder:d("terminal:database.filterTables"),onChange:t=>F(t.target.value),onKeyDown:t=>{var u;t.key==="Escape"&&(S?F(""):(u=A.current)==null||u.blur(),t.stopPropagation())}}),S&&e.jsx("button",{className:"database-sidebar__table-filter-clear",onClick:()=>{var t;F(""),(t=A.current)==null||t.focus()},title:"Clear filter",children:"×"})]}),e.jsxs("div",{className:"database-sidebar__tables",children:[S.trim()&&h.length===0&&e.jsx("div",{className:"database-sidebar__tables-empty",children:d("terminal:database.noTablesMatch")}),h.map(t=>{const u=M.has(t.name),g=u?K(t.name):null;return e.jsxs("div",{className:"database-sidebar__table",children:[e.jsxs("div",{className:"database-sidebar__table-header",children:[e.jsx("button",{className:"database-sidebar__table-expand",onClick:()=>C(t.name),title:u?"Collapse table schema":"Expand table schema",children:u?"▼":"▶"}),e.jsx("span",{className:"database-sidebar__table-icon",children:t.type==="view"?"👁":"📋"}),e.jsx("span",{className:`database-sidebar__table-name ${U===t.name?"database-sidebar__table-name--selected":""}`,onClick:()=>R(t.name),onDoubleClick:()=>{R(t.name),P(t.name)},children:t.name}),e.jsx("button",{className:"database-sidebar__table-insert",onClick:T=>{T.stopPropagation(),Q(t.name)},title:d("terminal:database.insertTableName"),children:"+"})]}),u&&g&&e.jsx("div",{className:"database-sidebar__table-columns",children:g.columns.map(T=>e.jsxs("div",{className:"database-sidebar__column",onClick:()=>Q(T.name),title:`${T.type}${T.nullable?" NULL":" NOT NULL"}${T.primaryKey?" PK":""}`,children:[e.jsx("span",{className:"database-sidebar__column-icon",children:T.primaryKey?"🔑":""}),e.jsx("span",{className:"database-sidebar__column-name",children:T.name}),e.jsx("span",{className:"database-sidebar__column-type",children:T.type})]},T.name))})]},t.name)})]})]})]})},he=({buildingId:a,history:p,onLoadQuery:l})=>{const{t:i}=J(["terminal"]),[y,x]=n.useState(""),[$,N]=n.useState(!1),Q=n.useMemo(()=>{let r=p;if($&&(r=r.filter(o=>o.favorite)),y.trim()){const o=y.toLowerCase();r=r.filter(v=>v.query.toLowerCase().includes(o)||v.database.toLowerCase().includes(o))}return r},[p,$,y]),P=r=>{const o=new Date(r),S=new Date().getTime()-o.getTime();return S<1440*60*1e3?o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):S<10080*60*1e3?o.toLocaleDateString([],{weekday:"short"})+" "+o.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit"}):o.toLocaleDateString([],{month:"short",day:"numeric"})},d=n.useCallback((r,o)=>{o.stopPropagation(),b.toggleQueryFavorite(a,r)},[a]),w=n.useCallback((r,o)=>{o.stopPropagation(),b.deleteQueryFromHistory(a,r)},[a]),M=n.useCallback(()=>{confirm(i("terminal:database.confirmClearHistory"))&&b.clearQueryHistory(a)},[a,i]);return p.length===0?e.jsxs("div",{className:"query-history query-history--empty",children:[e.jsx("p",{children:i("terminal:database.noHistory")}),e.jsx("p",{children:i("terminal:database.queriesAppearHere")})]}):e.jsxs("div",{className:"query-history",children:[e.jsxs("div",{className:"query-history__toolbar",children:[e.jsx("input",{type:"text",className:"query-history__search",placeholder:i("terminal:database.searchQueries"),value:y,onChange:r=>x(r.target.value)}),e.jsxs("label",{className:"query-history__filter",children:[e.jsx("input",{type:"checkbox",checked:$,onChange:r=>N(r.target.checked)}),i("terminal:database.favoritesOnly")]}),e.jsx("button",{className:"query-history__clear",onClick:M,title:i("terminal:database.clearAll"),children:i("terminal:database.clearAll")})]}),e.jsxs("div",{className:"query-history__list",children:[Q.map(r=>e.jsxs("div",{className:`query-history__item ${r.status==="error"?"query-history__item--error":""}`,onClick:()=>l(r.query),children:[e.jsxs("div",{className:"query-history__item-header",children:[e.jsx("span",{className:`query-history__status ${r.status==="success"?"query-history__status--success":"query-history__status--error"}`,children:r.status==="success"?"✓":"✗"}),e.jsx("span",{className:"query-history__database",children:r.database}),e.jsx("span",{className:"query-history__date",children:P(r.executedAt)}),e.jsxs("span",{className:"query-history__duration",children:[r.duration,"ms"]}),r.rowCount!==void 0&&e.jsx("span",{className:"query-history__row-count",children:i("terminal:database.rowCount",{count:r.rowCount})})]}),e.jsx("div",{className:"query-history__query",children:e.jsx("code",{children:r.query.length>200?r.query.substring(0,200)+"...":r.query})}),r.error&&e.jsx("div",{className:"query-history__error",children:r.error}),e.jsxs("div",{className:"query-history__actions",children:[e.jsx("button",{className:`query-history__favorite ${r.favorite?"query-history__favorite--active":""}`,onClick:o=>d(r.id,o),title:r.favorite?i("terminal:database.removeFromFavorites"):i("terminal:database.addToFavorites"),children:r.favorite?"★":"☆"}),e.jsx("button",{className:"query-history__delete",onClick:o=>w(r.id,o),title:i("terminal:database.deleteFromHistory"),children:"🗑"})]})]},r.id)),Q.length===0&&e.jsx("div",{className:"query-history__no-results",children:i("terminal:database.noQueriesMatch")})]})]})},_e=({tabs:a,activeTabId:p,onTabClick:l,onTabClose:i})=>{const{t:y}=J(["terminal"]);return e.jsx("div",{className:"database-tabs",children:a.map(x=>e.jsxs("div",{className:`database-tabs__tab ${p===x.id?"database-tabs__tab--active":""}`,children:[e.jsxs("button",{className:"database-tabs__tab-label",onClick:()=>l(x),title:`${x.connectionName} / ${x.database}`,children:[x.database,e.jsx("span",{className:"database-tabs__tab-connection",children:x.connectionName})]}),e.jsx("button",{className:"database-tabs__tab-close",onClick:()=>i(x.id),title:y("terminal:database.closeTab"),"aria-label":`Close ${x.database} tab`,children:"×"})]},x.id))})},I=a=>`db-panel-${a}`;function pe(a){try{const p=localStorage.getItem(I(a));return p?JSON.parse(p):{}}catch{return{}}}function xe(a,p){try{localStorage.setItem(I(a),JSON.stringify(p))}catch{}}const ve=({building:a,onClose:p})=>{var B,Y,W,X;const{t:l}=J(["terminal","common"]),i=Z(a.id),y=le(a.id),x=ce(a.id),$=ie(a.id),N=n.useRef(pe(a.id)),Q=n.useRef(null),P=n.useRef(0),d=((B=a.database)==null?void 0:B.connections)??[],w=(s,c)=>`${s}:${c}`,M=s=>s?(N.current.queries??{})[s]??"":N.current.generalQuery??"",[r,o]=n.useState("results"),[v,S]=n.useState(0),[F,H]=n.useState(!1),[k,U]=n.useState(!1),[R,O]=n.useState(()=>(N.current.openTabs??[]).map(c=>{var m;return{id:`${c.connectionId}:${c.database}`,connectionId:c.connectionId,connectionName:((m=d.find(L=>L.id===c.connectionId))==null?void 0:m.name)??c.connectionId,database:c.database}})),[q,A]=n.useState(N.current.activeTabId??null),[j,G]=n.useState(()=>{const s=N.current.queries??{};return N.current.generalQuery,s}),[f,_]=n.useState(M(q)),D=n.useCallback(s=>{_(c=>{const m=typeof s=="function"?s(c):s;return G(L=>{const E={...L};return q&&(E[q]=m),E}),m})},[q]),h=i.activeConnectionId??N.current.connectionId??((Y=a.database)==null?void 0:Y.activeConnectionId)??((W=d[0])==null?void 0:W.id),C=i.activeDatabase??N.current.database??((X=a.database)==null?void 0:X.activeDatabase),K=d.find(s=>s.id===h),t=n.useCallback((s,c)=>{var E;const m=w(s,c),L=((E=d.find(z=>z.id===s))==null?void 0:E.name)??s;O(z=>{if(z.some(ne=>ne.id===m))return z;const te={id:m,connectionId:s,connectionName:L,database:c};return[...z,te]}),A(m),_(j[m]??""),b.setActiveConnection(a.id,s),b.setActiveDatabase(a.id,c)},[a.id,d,j]),u=n.useCallback(s=>{O(c=>c.filter(m=>m.id!==s)),q===s&&O(c=>{if(c.length>0){const m=c[0];A(m.id),_(j[m.id]??""),b.setActiveConnection(a.id,m.connectionId),b.setActiveDatabase(a.id,m.database)}else A(null),_("");return c})},[q,a.id,j]),g=n.useCallback(s=>{A(s.id),_(j[s.id]??""),b.setActiveConnection(a.id,s.connectionId),b.setActiveDatabase(a.id,s.database)},[a.id,j]);n.useEffect(()=>{if(!k&&d.length>0){const s=N.current;s.connectionId&&d.some(c=>c.id===s.connectionId)&&(b.setActiveConnection(a.id,s.connectionId),b.listDatabases(a.id,s.connectionId),s.database&&(b.setActiveDatabase(a.id,s.database),b.listTables(a.id,s.connectionId,s.database))),U(!0)}},[a.id,d,k]),n.useEffect(()=>{b.requestQueryHistory(a.id)},[a.id]),n.useEffect(()=>{const s=c=>{c.key==="Escape"&&(c.preventDefault(),c.stopPropagation(),p())};return window.addEventListener("keydown",s),()=>window.removeEventListener("keydown",s)},[p]),n.useEffect(()=>{k&&h&&xe(a.id,{connectionId:h,database:C,lastQuery:f,queries:j,generalQuery:"",openTabs:R.map(s=>({connectionId:s.connectionId,database:s.database})),activeTabId:q??void 0})},[a.id,h,C,f,k,R,q,j]);const T=n.useCallback(s=>{var c;if(!(!h||!C||!f.trim()||$))if(s==="cursor"){const m=(c=Q.current)==null?void 0:c.querySelector(".query-editor__textarea"),L=(m==null?void 0:m.selectionStart)??P.current,E=de(f,L);E&&b.executeQuery(a.id,h,C,E)}else{const m=oe(f);m.length<=1?b.executeQuery(a.id,h,C,f.trim()):m.forEach((L,E)=>{setTimeout(()=>{b.executeQuery(a.id,h,C,L.sql)},E*150)})}},[a.id,h,C,f,$]),ee=n.useCallback(s=>{D(s),o("results")},[]),ae=n.useCallback(s=>{b.setActiveConnection(a.id,s),b.listDatabases(a.id,s)},[a.id]),se=n.useCallback(s=>{h&&(t(h,s),b.listTables(a.id,h,s))},[a.id,h,t]),V=y[v];return d.length===0?e.jsxs("div",{className:"database-panel",ref:Q,children:[e.jsxs("div",{className:"database-panel__header",children:[e.jsxs("div",{className:"database-panel__title",children:[e.jsx("span",{className:"database-panel__icon",children:"🗄️"}),e.jsx("span",{className:"database-panel__name",children:a.name})]}),e.jsx("button",{className:"database-panel__close",onClick:p,children:"×"})]}),e.jsx("div",{className:"database-panel__body",children:e.jsxs("div",{className:"database-panel__no-connections",children:[e.jsx("div",{className:"database-panel__no-connections-icon",children:"🔌"}),e.jsx("h3",{children:l("terminal:database.noConnections")}),e.jsx("p",{children:l("terminal:database.noConnectionsDesc")}),e.jsx("p",{children:l("terminal:database.toGetStarted")}),e.jsxs("ol",{children:[e.jsx("li",{children:l("terminal:database.step1Close")}),e.jsx("li",{children:l("terminal:database.step2Settings")}),e.jsx("li",{children:l("terminal:database.step3AddConnection")}),e.jsx("li",{children:l("terminal:database.step4Reopen")})]})]})})]}):e.jsxs("div",{className:"database-panel",ref:Q,children:[e.jsxs("div",{className:"database-panel__header",children:[e.jsxs("div",{className:"database-panel__title",children:[e.jsx("span",{className:"database-panel__icon",children:(K==null?void 0:K.engine)==="mysql"?"🐬":"🐘"}),e.jsx("span",{className:"database-panel__name",children:a.name}),K&&e.jsxs("span",{className:"database-panel__connection-info",children:[K.name," / ",C||l("terminal:database.noDatabaseSelected")]})]}),e.jsx("button",{className:"database-panel__close",onClick:p,children:"×"})]}),e.jsxs("div",{className:"database-panel__body",children:[e.jsx(me,{building:a,connections:d,activeConnectionId:h,activeDatabase:C,collapsed:F,onToggleCollapse:()=>H(!F),onConnectionChange:ae,onDatabaseChange:se,onInsertTable:s=>D(c=>c+` ${s}`),onSelectTableQuery:s=>{const c=`SELECT * FROM ${s}`;D(c),h&&C&&b.executeQuery(a.id,h,C,c)}}),e.jsxs("div",{className:"database-panel__main",children:[R.length>0&&e.jsx(_e,{tabs:R,activeTabId:q,onTabClick:g,onTabClose:u}),e.jsx(ue,{query:f,onChange:D,onExecute:T,isExecuting:$,disabled:!h||!C}),e.jsxs("div",{className:"database-panel__tabs",children:[e.jsxs("button",{className:`database-panel__tab ${r==="results"?"database-panel__tab--active":""}`,onClick:()=>o("results"),children:[l("terminal:database.results"),y.length>0&&e.jsx("span",{className:"database-panel__tab-badge",children:y.length})]}),e.jsxs("button",{className:`database-panel__tab ${r==="history"?"database-panel__tab--active":""}`,onClick:()=>o("history"),children:[l("terminal:database.history"),x.length>0&&e.jsx("span",{className:"database-panel__tab-badge",children:x.length})]}),r==="results"&&y.length>1&&e.jsxs("div",{className:"database-panel__result-nav",children:[e.jsxs("button",{disabled:v>=y.length-1,onClick:()=>S(s=>s+1),children:["← ",l("terminal:database.older")]}),e.jsxs("span",{children:[v+1," / ",y.length]}),e.jsxs("button",{disabled:v<=0,onClick:()=>S(s=>s-1),children:[l("terminal:database.newer")," →"]})]})]}),e.jsx("div",{className:"database-panel__tab-content",children:r==="results"?V?e.jsx(be,{result:V,buildingId:a.id,building:a}):e.jsxs("div",{className:"database-panel__empty",children:[e.jsx("p",{children:l("terminal:database.noResultsYet")}),e.jsx("p",{children:l("terminal:database.selectDbAndRun")})]}):e.jsx(he,{buildingId:a.id,history:x,onLoadQuery:ee})})]})]})]})};export{ve as DatabasePanel,me as DatabaseSidebar,_e as DatabaseTabs,ue as QueryEditor,he as QueryHistoryPanel,be as ResultsTable};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{z as ts,u as ns,B as _s,j as e,C as Is,E as Ms,G as Es,H as $s,r as g,I as Ds,J as Ss,K as Ls,L as Xs,s as U,n as Z}from"./main-D3GShQ8B.js";import"./modulepreload-polyfill-B5Qt9EMX.js";import"./vendor-react--Eh9ivFN.js";import"./vendor-three-Chj50gSY.js";const Rs=1,gs=Rs*2.5;function Ps(s,v,d){const l=v.filter(o=>o.position&&!isNaN(o.position.x)&&!isNaN(o.position.z));let t,i,n,u;if(s.type==="rectangle"){const o=(s.width||10)/2,b=(s.height||10)/2;t=s.center.x-o,i=s.center.x+o,n=s.center.z-b,u=s.center.z+b}else{const o=s.radius||5;t=s.center.x-o,i=s.center.x+o,n=s.center.z-o,u=s.center.z+o}const p=2;if(t+=p,i-=p,n+=p,u-=p,d){const o={...d};if(o.x=Math.max(t,Math.min(i,o.x)),o.z=Math.max(n,Math.min(u,o.z)),fs(o,l,s))return o}const N=(t+i)/2,S=(n+u)/2,j=Math.min(i-N,u-S);for(let o=0;o<j;o+=gs*.5)for(let b=0;b<Math.PI*2;b+=Math.PI/8){const z=N+Math.cos(b)*o,M=S+Math.sin(b)*o,_={x:z,z:M};if(_.x=Math.max(t,Math.min(i,_.x)),_.z=Math.max(n,Math.min(u,_.z)),fs(_,l,s))return _}return{x:N,z:S}}function fs(s,v,d){for(const l of v){if(!l.position)continue;if(Math.hypot(s.x-l.position.x,s.z-l.position.z)<gs)return!1}if(d.type==="rectangle"){const l=(d.width||10)/2,t=(d.height||10)/2,i=s.x>=d.center.x-l+1&&s.x<=d.center.x+l-1,n=s.z>=d.center.z-t+1&&s.z<=d.center.z+t-1;return i&&n}else{const l=(d.radius||5)-1;return Math.hypot(s.x-d.center.x,s.z-d.center.z)<=l}}function vs(s){switch(s){case"idle":case"running":return"healthy";case"working":case"waiting":case"waiting_permission":case"starting":case"stopping":return"working";case"error":case"offline":case"orphaned":case"stopped":return"error";default:return"unknown"}}function Us(s){switch(s){case"server":return"🖥️";case"link":return"🔗";case"database":return"🗄️";case"docker":return"🐳";case"monitor":return"📊";case"folder":return"📁";case"boss":return"🏰";default:return"🏢"}}function Ys(s,v){const d=[],l=new Set;for(const i of v.values()){if(i.archived)continue;const n=[];for(const u of i.assignedAgentIds){const p=s.get(u);p&&(n.push(p),l.add(u))}d.push({area:i,agents:n,label:i.name,color:i.color})}d.sort((i,n)=>i.label.localeCompare(n.label));const t=[];for(const i of s.values())l.has(i.id)||t.push(i);return t.length>0&&d.push({area:null,agents:t,label:"Unassigned",color:"#555"}),d}function Gs(s,v){const d=[],l=[],t=[];for(const n of s.values())n.status==="working"||n.status==="waiting"||n.status==="waiting_permission"?d.push(n):n.status==="error"||n.status==="offline"||n.status==="orphaned"?t.push(n):v&&v.has(n.id)?d.push(n):l.push(n);const i=[];return t.length>0&&i.push({area:null,agents:t,label:"Errors",color:"#d64545"}),d.length>0&&i.push({area:null,agents:d,label:"Working & Unseen",color:"#f5d76e"}),l.length>0&&i.push({area:null,agents:l,label:"Idle",color:"#5cb88a"}),i}function Hs(s){const v=Date.now(),l=[...Array.from(s.values())].sort((o,b)=>(b.lastActivity||0)-(o.lastActivity||0)),t=[],i=[],n=[],u=[],p=300*1e3,N=3600*1e3,S=1440*60*1e3;for(const o of l){const b=v-(o.lastActivity||0);b<p?t.push(o):b<N?i.push(o):b<S?n.push(o):u.push(o)}const j=[];return t.length>0&&j.push({area:null,agents:t,label:"Just Now (< 5m)",color:"#4ade80"}),i.length>0&&j.push({area:null,agents:i,label:"Recent (5m - 1h)",color:"#60a5fa"}),n.length>0&&j.push({area:null,agents:n,label:"Stale (1h - 1d)",color:"#facc15"}),u.length>0&&j.push({area:null,agents:u,label:"Very Stale (> 1d)",color:"#f87171"}),j}function Zs(s){return s.contextLimit<=0?0:Math.round(s.contextUsed/s.contextLimit*100)}function Bs(s){return s>=80?"red":s>=50?"yellow":"green"}function ms(s){return as(s)}function as(s,v={}){const{prioritizeRecentlyIdle:d=!1}=v;return[...s].sort((l,t)=>{const i={error:0,offline:0,orphaned:0,working:1,waiting:1,waiting_permission:1,idle:2},n=i[l.status]??3,u=i[t.status]??3;if(n!==u)return n-u;if(d&&l.status==="idle"&&t.status==="idle"){const p=!!l.taskLabel,N=!!t.taskLabel;return p!==N?p?-1:1:(t.lastActivity||0)-(l.lastActivity||0)}return l.name.localeCompare(t.name)})}const ps=ts.memo(({agent:s,isSelected:v,isKeyboardFocused:d=!1,onSelect:l,onDoubleClick:t,onChat:i,onFocus:n,onKill:u,onDragStart:p})=>{const{t:N}=ns(["dashboard","common"]),j=_s().has(s.id),o=vs(s.status),b=Zs(s),z=Bs(b),M=s.taskLabel?`📋 ${s.taskLabel}`:s.currentTask||s.lastAssignedTask,_=s.status==="idle"&&s.lastActivity>0,[,B]=ts.useState(0);return ts.useEffect(()=>{if(!_)return;const A=window.setInterval(()=>B(q=>q+1),15e3);return()=>window.clearInterval(A)},[_]),e.jsxs("div",{className:`dash-card dash-card--${o} ${v?"dash-card--selected":""} ${d?"dash-card--keyboard-focused":""}`,"data-agent-id":s.id,onClick:l,onDoubleClick:A=>{A.stopPropagation(),t()},onDragStart:A=>{p==null||p(s),A.dataTransfer.effectAllowed="move"},draggable:!0,title:N("cards.doubleClickHint"),children:[e.jsxs("div",{className:"dash-card__row1",children:[e.jsx("span",{className:`dash-card__status-dot dash-card__status-dot--${o}`}),e.jsx("span",{className:"dash-card__name",children:s.name}),e.jsxs("span",{className:"dash-card__class",children:[e.jsx(Is,{agent:s,size:14})," ",s.class]}),e.jsxs("span",{className:`dash-card__provider dash-card__provider--${s.provider}`,children:[s.provider==="codex"?"🔸":s.provider==="opencode"?"🟢":"🤖"," ",s.provider]}),j&&e.jsx("span",{className:"dash-card__unseen-badge",title:"New output available - click to view",children:"!"})]}),e.jsxs("div",{className:"dash-card__row2",children:[e.jsx("span",{className:`dash-card__status dash-card__status--${o}`,children:j?"Unseen":s.status}),e.jsxs("div",{className:"dash-card__context",children:[e.jsx("div",{className:"dash-card__context-bar",children:e.jsx("div",{className:`dash-card__context-fill dash-card__context-fill--${z}`,style:{width:`${b}%`}})}),e.jsxs("span",{className:`dash-card__context-pct dash-card__context-pct--${z}`,children:[b,"%"]})]})]}),e.jsxs("div",{className:"dash-card__row3",children:[e.jsxs("span",{className:"dash-card__workdir",title:s.cwd,children:["📁 ",s.cwd.split("/").pop()||s.cwd]}),_&&e.jsxs("span",{className:"dash-card__idle-time",style:{color:$s(s.lastActivity)},title:Es(s.lastActivity),children:["⏱ ",Ms(s.lastActivity)]})]}),M&&e.jsx("div",{className:"dash-card__row4",children:e.jsx("span",{className:"dash-card__task",children:M})}),e.jsxs("div",{className:"dash-card__actions",children:[i&&e.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--chat",onClick:A=>{A.stopPropagation(),i()},title:N("cards.openTerminal"),children:N("cards.chat")}),u&&e.jsx("button",{className:"dash-card__action-btn dash-card__action-btn--danger",onClick:A=>{A.stopPropagation(),u()},title:N("cards.killAgent"),children:N("cards.stop")})]})]})});ps.displayName="AgentCard";const bs=({buildings:s,onSelectBuilding:v})=>{const{t:d}=ns(["dashboard"]),l=g.useMemo(()=>Array.from(s.values()).sort((t,i)=>t.name.localeCompare(i.name)),[s]);return e.jsxs("div",{className:"dashboard-view__buildings",children:[e.jsxs("div",{className:"dashboard-view__buildings-header",children:[e.jsx("span",{className:"dashboard-view__buildings-title",children:d("buildings.title")}),e.jsx("span",{className:"dashboard-view__buildings-count",children:l.length})]}),e.jsx("div",{className:"dashboard-view__buildings-row",children:l.map(t=>{const i=vs(t.status),n=Us(t.type);return e.jsxs("button",{className:`dash-pill dash-pill--${i}`,onClick:()=>v==null?void 0:v(t.id),title:`${t.name} (${t.type}) - ${t.status}`,children:[e.jsx("span",{className:"dash-pill__icon",children:n}),e.jsx("span",{className:"dash-pill__name",children:t.name}),e.jsx("span",{className:`dash-pill__dot dash-pill__dot--${i}`})]},t.id)})})]})};bs.displayName="BuildingPills";function Ks({onSelectAgent:s,onFocusAgent:v,onKillAgent:d,onSelectBuilding:l,onOpenTerminal:t,onFocusZone:i}){const{t:n}=ns(["dashboard","common"]),u=Ds(),p=Ss(),N=Ls(),S=Xs(),j=_s(),[o,b]=g.useState(""),[z,M]=g.useState("all"),[_,B]=g.useState("zone"),[A,q]=g.useState(new Set),[E,J]=g.useState(null),[ws,T]=g.useState(null),[Y,Q]=g.useState(!1),[I,F]=g.useState(null),V=g.useMemo(()=>{const a=Array.from(u.values());return{total:a.length,working:a.filter(h=>h.status==="working"||h.status==="waiting"||h.status==="waiting_permission").length,idle:a.filter(h=>h.status==="idle").length,error:a.filter(h=>h.status==="error"||h.status==="offline"||h.status==="orphaned").length}},[u]),rs=g.useMemo(()=>_==="zone"?Ys(u,N):_==="status"?Gs(u,j):Hs(u),[u,N,_,j]),W=g.useMemo(()=>{const a=o.toLowerCase().trim(),h=rs.map(w=>({...w,agents:w.agents.filter(k=>{if(z==="working"){if(k.status!=="working"&&k.status!=="waiting"&&k.status!=="waiting_permission")return!1}else if(z==="error"&&k.status!=="error"&&k.status!=="offline"&&k.status!=="orphaned")return!1;return!(a&&!k.name.toLowerCase().includes(a)&&!k.class.toLowerCase().includes(a))})}));return _==="zone"?h:h.filter(w=>w.agents.length>0)},[rs,z,o,_]),O=g.useCallback(a=>a.area?`area:${a.area.id}`:`${_}:${a.label}`,[_]),$=g.useMemo(()=>{const a=[];return W.forEach(h=>{const w=O(h);if(A.has(w))return;const k=_==="status"?as(h.agents,{prioritizeRecentlyIdle:!0}):ms(h.agents);a.push(...k)}),a},[W,A,_,O]),xs=g.useCallback(a=>{q(h=>{const w=new Set(h);return w.has(a)?w.delete(a):w.add(a),w})},[]),Ns=g.useCallback(a=>{t==null||t(a)},[t]),ks=g.useCallback(a=>{J(a)},[]),js=g.useCallback((a,h)=>{a.preventDefault(),a.dataTransfer.dropEffect="move",T(h)},[]),ys=g.useCallback(()=>{T(null)},[]),As=g.useCallback(a=>{if(!E)return;if(a===null){const X=U.getState(),r=Array.from(X.areas.values()).find(c=>c.assignedAgentIds.includes(E.id));r&&U.unassignAgentFromArea(E.id,r.id),J(null),T(null);return}const h=N.get(a);if(!h)return;const w=Array.from(u.values()),k=Ps(h,w,E.position);U.updateAgent({...E,position:{...E.position,x:k.x,z:k.z}}),U.assignAgentToArea(E.id,a),J(null),T(null)},[E,N,u]);return g.useEffect(()=>{if($.length===0){Q(!1),F(null);return}Y&&(!I||!$.some(a=>a.id===I))&&(F($[0].id),s==null||s($[0].id))},[$,Y,I,s]),g.useEffect(()=>{const a=r=>r instanceof HTMLElement?r.tagName==="INPUT"||r.tagName==="TEXTAREA"||r.tagName==="SELECT"||r.isContentEditable:!1,h=r=>r instanceof HTMLElement?!!r.closest(".guake-terminal")||r.classList.contains("guake-input")||r.classList.contains("agent-panel-input"):!1,w=r=>{const c=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).find(L=>L.dataset.agentId===r);c==null||c.scrollIntoView({block:"nearest",inline:"nearest"})},k=(r,c)=>{var os,cs,ds,ls,us,hs;const L=Array.from(document.querySelectorAll(".dash-card[data-agent-id]")).map(f=>{const x=f.dataset.agentId;if(!x)return null;const D=f.getBoundingClientRect();return{id:x,centerX:D.left+D.width/2,centerY:D.top+D.height/2,height:D.height}}).filter(f=>f!==null).sort((f,x)=>f.centerY-x.centerY||f.centerX-x.centerX);if(L.length===0)return r;const ss=L.reduce((f,x)=>f+x.height,0)/L.length,es=Math.max(18,ss*.6),C=[];for(const f of L){const x=C[C.length-1];if(!x){C.push([{id:f.id,centerX:f.centerX,centerY:f.centerY}]);continue}const D=x.reduce((Cs,zs)=>Cs+zs.centerY,0)/x.length;Math.abs(f.centerY-D)<=es?x.push({id:f.id,centerX:f.centerX,centerY:f.centerY}):C.push([{id:f.id,centerX:f.centerX,centerY:f.centerY}])}C.forEach(f=>f.sort((x,D)=>x.centerX-D.centerX));const G=C.findIndex(f=>f.some(x=>x.id===r));if(G===-1)return((cs=(os=C[0])==null?void 0:os[0])==null?void 0:cs.id)??r;const R=C[G],y=R.findIndex(f=>f.id===r);if(y===-1)return((ls=(ds=C[0])==null?void 0:ds[0])==null?void 0:ls.id)??r;if(c==="left")return((us=R[Math.max(0,y-1)])==null?void 0:us.id)??r;if(c==="right")return((hs=R[Math.min(R.length-1,y+1)])==null?void 0:hs.id)??r;const K=c==="up"?Math.max(0,G-1):Math.min(C.length-1,G+1),m=C[K],H=R[y].centerX;let P=m[0],is=Math.abs(P.centerX-H);for(const f of m){const x=Math.abs(f.centerX-H);x<is&&(P=f,is=x)}return(P==null?void 0:P.id)??r},X=r=>{const c=U.getShortcuts(),L=c.find(m=>m.id==="dashboard-selector-toggle"),ss=c.find(m=>m.id==="dashboard-vim-left"),es=c.find(m=>m.id==="dashboard-vim-down"),C=c.find(m=>m.id==="dashboard-vim-up"),G=c.find(m=>m.id==="dashboard-vim-right"),R=c.find(m=>m.id==="open-terminal"),y=U.getState();if(a(r.target))if(!y.terminalOpen&&h(r.target)&&document.activeElement instanceof HTMLElement)document.activeElement.blur();else return;if(Z(r,L)){if($.length===0)return;r.preventDefault(),r.stopPropagation(),Q(!0),F(m=>{const H=m&&$.some(P=>P.id===m)?m:$[0].id;return s==null||s(H),window.setTimeout(()=>w(H),0),H});return}const K=Z(r,ss)||r.key==="ArrowLeft"?"left":Z(r,es)||r.key==="ArrowDown"?"down":Z(r,C)||r.key==="ArrowUp"?"up":Z(r,G)||r.key==="ArrowRight"?"right":null;if(K&&Y&&I){r.preventDefault(),r.stopPropagation();const m=k(I,K);m!==I&&(F(m),s==null||s(m),window.setTimeout(()=>w(m),0));return}if(Z(r,R)){if(y.terminalOpen)return;if(Y&&I&&y.agents.has(I)){r.preventDefault(),t==null||t(I);return}if(y.selectedAgentIds.size===1){r.preventDefault();const m=Array.from(y.selectedAgentIds)[0];t==null||t(m);return}if(y.lastSelectedAgentId&&y.agents.has(y.lastSelectedAgentId)){r.preventDefault(),t==null||t(y.lastSelectedAgentId);return}}};return document.addEventListener("keydown",X,!0),()=>document.removeEventListener("keydown",X,!0)},[$,Y,I,t,s]),g.useEffect(()=>{const a=document.activeElement;a instanceof HTMLElement&&a.closest(".guake-terminal")&&!U.getState().terminalOpen&&a.blur()},[]),e.jsxs("div",{className:"dashboard-view",children:[e.jsxs("div",{className:"dashboard-view__topbar",children:[e.jsxs("div",{className:"dashboard-view__metrics",children:[e.jsxs("button",{className:`dashboard-view__metric-btn ${z==="all"?"dashboard-view__metric-btn--active":""}`,onClick:()=>M("all"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:V.total}),e.jsx("span",{className:"dashboard-view__metric-label",children:n("common:labels.agents")})]}),e.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--working ${z==="working"?"dashboard-view__metric-btn--active":""}`,onClick:()=>M("working"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:V.working}),e.jsx("span",{className:"dashboard-view__metric-label",children:n("common:status.working")})]}),e.jsxs("button",{className:"dashboard-view__metric-btn dashboard-view__metric-btn--idle ",onClick:()=>M("all"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:V.idle}),e.jsx("span",{className:"dashboard-view__metric-label",children:n("common:status.idle")})]}),e.jsxs("button",{className:`dashboard-view__metric-btn dashboard-view__metric-btn--error ${z==="error"?"dashboard-view__metric-btn--active":""}`,onClick:()=>M("error"),children:[e.jsx("span",{className:"dashboard-view__metric-value",children:V.error}),e.jsx("span",{className:"dashboard-view__metric-label",children:n("common:status.error")})]})]}),e.jsx("input",{className:"dashboard-view__search",type:"text",placeholder:n("searchPlaceholder"),value:o,onChange:a=>b(a.target.value)})]}),e.jsxs("div",{className:"dashboard-view__grouping",children:[e.jsx("button",{className:`dashboard-view__grouping-btn ${_==="zone"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>B("zone"),children:n("grouping.byZone")}),e.jsx("button",{className:`dashboard-view__grouping-btn ${_==="status"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>B("status"),children:n("grouping.byStatus")}),e.jsx("button",{className:`dashboard-view__grouping-btn ${_==="activity"?"dashboard-view__grouping-btn--active":""}`,onClick:()=>B("activity"),children:n("grouping.byActivity")})]}),e.jsxs("div",{className:"dashboard-view__content",children:[W.map(a=>{const h=O(a),w=A.has(h),k=_==="status"?as(a.agents,{prioritizeRecentlyIdle:!0}):ms(a.agents),X=a.agents.filter(c=>c.status==="working"||c.status==="waiting"||c.status==="waiting_permission").length,r=a.agents.filter(c=>j.has(c.id)).length;return e.jsxs("div",{className:`dashboard-view__zone ${ws===(a.area?a.area.id:null)&&E?"dashboard-view__zone--drag-over":""}`,onDragOver:c=>js(c,a.area?a.area.id:null),onDragLeave:ys,onDrop:()=>As(a.area?a.area.id:null),children:[e.jsxs("div",{className:"dashboard-view__zone-header",onClick:()=>xs(h),children:[e.jsxs("div",{className:"dashboard-view__zone-left",children:[e.jsx("span",{className:`dashboard-view__zone-chevron ${w?"dashboard-view__zone-chevron--collapsed":""}`,children:"▼"}),e.jsx("span",{className:"dashboard-view__zone-dot",style:{backgroundColor:a.color}}),e.jsx("span",{className:"dashboard-view__zone-name",children:a.label}),e.jsxs("span",{className:"dashboard-view__zone-count",children:[n("agentCount",{count:a.agents.length}),X>0&&e.jsxs("span",{className:"dashboard-view__zone-working",children:[" · ",X," ",n("working")]}),r>0&&e.jsxs("span",{className:"dashboard-view__zone-unseen",children:[" · ",r," Unseen"]})]})]}),a.area&&i&&e.jsx("button",{className:"dashboard-view__zone-focus",onClick:c=>{c.stopPropagation(),i(a.area.id)},title:n("focusZone"),children:n("focusZone")})]}),!w&&e.jsx("div",{className:"dashboard-view__zone-grid",children:k.map(c=>e.jsx(ps,{agent:c,isSelected:S.has(c.id),isKeyboardFocused:Y&&I===c.id,onSelect:()=>{s==null||s(c.id),Q(!0),F(c.id)},onDoubleClick:()=>Ns(c.id),onChat:()=>t==null?void 0:t(c.id),onFocus:v?()=>v(c.id):void 0,onKill:d?()=>d(c.id):void 0,onDragStart:ks},c.id))})]},h)}),W.length===0&&e.jsx("div",{className:"dashboard-view__empty",children:o?n("noAgentsMatching",{search:o}):n("noAgentsSpawned")}),p.size>0&&e.jsx(bs,{buildings:p,onSelectBuilding:l})]})]})}export{Ks as DashboardView};
|