@principal-ade/panel-layouts 0.2.2 → 0.2.3

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/index.js CHANGED
@@ -1,2 +1,8 @@
1
- "use strict";require('./index.css');var X=Object.defineProperty;var G=(o,e,t)=>e in o?X(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var I=(o,e,t)=>G(o,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const D=require("@principal-ade/panels"),s=require("react"),x=require("react/jsx-runtime"),j=require("@principal-ade/industry-theme");class N{constructor(){I(this,"storageKey","panel-layouts")}async load(e){try{const t=localStorage.getItem(`${this.storageKey}:${e}`);return t?JSON.parse(t):null}catch(t){return console.error(`Failed to load panel layout for ${e}:`,t),null}}async save(e,t){try{localStorage.setItem(`${this.storageKey}:${e}`,JSON.stringify(t))}catch(a){console.error(`Failed to save panel layout for ${e}:`,a)}}}function Q(o){const{viewKey:e,defaultSizes:t,panelType:a,adapter:r=new N}=o,[n,l]=s.useState(t),[i,y]=s.useState(o.collapsed),h=s.useRef(o.collapsed),b=s.useRef({}),p=s.useRef(null),m=s.useRef(null);s.useEffect(()=>{(async()=>{const S=await r.load(e);S!=null&&S.sizes&&(l(S.sizes),f(S.sizes))})()},[e]);const f=s.useCallback(g=>{"left"in g&&g.left>0&&(b.current.left=g.left),"middle"in g&&g.middle>0&&(b.current.middle=g.middle),"right"in g&&g.right>0&&(b.current.right=g.right)},[]),d=s.useCallback(g=>{const S=b.current[g];if(S&&S>0)return S;if(g==="left"&&"left"in t&&t.left>0)return t.left;if(g==="right"&&"right"in t&&t.right>0)return t.right},[t]),c=s.useRef(t);s.useEffect(()=>{("left"in t&&t.left!==c.current.left||"middle"in t&&"middle"in c.current&&t.middle!==c.current.middle||"right"in t&&t.right!==c.current.right)&&(l(t),f(t),c.current=t)},[t,f]),s.useEffect(()=>{const g=o.collapsed.left!==h.current.left,S="right"in o.collapsed&&"right"in h.current&&o.collapsed.right!==h.current.right;(g||S)&&(y(o.collapsed),h.current={...o.collapsed})},[o.collapsed.left,o.collapsed.right]);const w=s.useCallback(async g=>{try{await r.save(e,{sizes:g})}catch(S){console.error(`Failed to save panel preferences for ${e}:`,S)}},[e,r]),P=s.useCallback(g=>{const S={...g};let C=!0;if("left"in g){const k=!!(i!=null&&i.left),u=g.left;if(k){const v=d("left");v!==void 0&&v>0?S.left=v:C=!1}else u===0&&(C=!1)}if(a==="three-panel"&&"right"in g){const k=!!(i!=null&&i.right),u=g.right;if(k){const v=d("right");v!==void 0&&v>0?S.right=v:C=!1}else u===0&&(C=!1)}if(l(S),f(S),p.current&&(clearTimeout(p.current),p.current=null),!C){m.current=null;return}m.current=S,p.current=setTimeout(()=>{const k=m.current;k&&(w(k),m.current=null),p.current=null},500)},[i,d,a,w,f]);s.useEffect(()=>()=>{if(p.current){const g=m.current;g&&(w(g),m.current=null),clearTimeout(p.current),p.current=null}},[w]);const T=s.useCallback(async()=>{},[]),W=s.useCallback(async()=>{},[]),L=s.useCallback(async()=>{},[]),A=s.useCallback(async()=>{},[]);return a==="three-panel"?{type:"three-panel",sizes:n,collapsed:i,handlePanelResize:P,handleLeftCollapseComplete:T,handleLeftExpandComplete:W,handleRightCollapseComplete:L,handleRightExpandComplete:A}:{type:"two-panel",sizes:n,collapsed:i,handlePanelResize:P,handleLeftCollapseComplete:T,handleLeftExpandComplete:W}}class M{constructor(){I(this,"PRESETS_KEY","panel-layouts:workspace-presets");I(this,"REPO_STATE_PREFIX","panel-layouts:repo-state:")}async loadWorkspacePresets(){try{const e=localStorage.getItem(this.PRESETS_KEY);return e?JSON.parse(e):{}}catch(e){return console.error("Failed to load workspace presets:",e),{}}}async saveWorkspacePresets(e){try{localStorage.setItem(this.PRESETS_KEY,JSON.stringify(e))}catch(t){throw console.error("Failed to save workspace presets:",t),t}}async loadRepositoryState(e){try{const t=`${this.REPO_STATE_PREFIX}${e}`,a=localStorage.getItem(t);return a?JSON.parse(a):null}catch(t){return console.error(`Failed to load repository state for ${e}:`,t),null}}async saveRepositoryState(e,t){try{const a=`${this.REPO_STATE_PREFIX}${e}`;localStorage.setItem(a,JSON.stringify(t))}catch(a){throw console.error(`Failed to save repository state for ${e}:`,a),a}}async loadAllRepositoryStates(){try{const e={};for(let t=0;t<localStorage.length;t++){const a=localStorage.key(t);if(a&&a.startsWith(this.REPO_STATE_PREFIX)){const r=a.substring(this.REPO_STATE_PREFIX.length),n=localStorage.getItem(a);if(n)try{e[r]=JSON.parse(n)}catch(l){console.error(`Failed to parse repository state for ${r}:`,l)}}}return e}catch(e){return console.error("Failed to load all repository states:",e),{}}}}class R{static setAdapter(e){this.adapter=e}static async getWorkspaceLayouts(){const e=this.getBuiltInWorkspaceLayouts();return{...await this.adapter.loadWorkspacePresets(),...e}}static async getWorkspaceLayout(e){return(await this.getWorkspaceLayouts())[e]||null}static async createWorkspaceLayout(e){const t=await this.adapter.loadWorkspacePresets(),a=this.generateWorkspaceId(e.name),r={id:a,name:e.name,description:e.description,layout:e.layout,defaultSizes:e.defaultSizes,defaultCollapsed:e.defaultCollapsed,createdAt:Date.now(),updatedAt:Date.now(),isBuiltIn:!1},n={...t,[a]:r};return await this.adapter.saveWorkspacePresets(n),r}static async updateWorkspaceLayout(e,t){const a=await this.adapter.loadWorkspacePresets(),r=a[e];if(!r)return console.error(`Workspace layout ${e} not found`),null;if(r.isBuiltIn)return console.error(`Cannot update built-in workspace layout ${e}`),null;const n={...r,...t,id:e,createdAt:r.createdAt,updatedAt:Date.now()},l={...a,[e]:n};return await this.adapter.saveWorkspacePresets(l),n}static async deleteWorkspaceLayout(e){const t=await this.adapter.loadWorkspacePresets(),a=t[e];if(!a)return console.error(`Workspace layout ${e} not found`),!1;if(a.isBuiltIn)return console.error(`Cannot delete built-in workspace layout ${e}`),!1;const r={...t};return delete r[e],await this.adapter.saveWorkspacePresets(r),!0}static async getRepositoryState(e){return await this.adapter.loadRepositoryState(e)}static async setRepositoryState(e,t){await this.adapter.saveRepositoryState(e,t)}static async updateRepositorySizes(e,t){const a=await this.getRepositoryState(e);a&&await this.setRepositoryState(e,{...a,sizes:t})}static async updateRepositoryCollapsed(e,t){const a=await this.getRepositoryState(e);a&&await this.setRepositoryState(e,{...a,collapsed:t})}static hasStateDeviation(e,t){const a=t.defaultSizes?JSON.stringify(e.sizes)!==JSON.stringify(t.defaultSizes):!1,r=t.defaultCollapsed?JSON.stringify(e.collapsed)!==JSON.stringify(t.defaultCollapsed):!1;return{hasSizeDeviation:a,hasCollapsedDeviation:r}}static async updateWorkspaceFromRepositoryState(e,t){const a=await this.getWorkspaceLayout(e),r=await this.getRepositoryState(t);if(!a||!r||a.isBuiltIn){console.error("Cannot update built-in workspace or workspace/state not found");return}await this.updateWorkspaceLayout(e,{defaultSizes:r.sizes,defaultCollapsed:r.collapsed})}static async resetRepositoryToWorkspaceDefaults(e,t){const a=await this.getWorkspaceLayout(t);if(!a){console.error(`Workspace ${t} not found`);return}const r=await this.getRepositoryState(e);r&&await this.setRepositoryState(e,{...r,sizes:a.defaultSizes||{left:20,middle:45,right:35},collapsed:a.defaultCollapsed||{left:!1,right:!1}})}static isLayoutMatchingWorkspace(e,t){return this.areLayoutsEqual(e,t.layout)}static async findMatchingWorkspace(e){const t=await this.getWorkspaceLayouts();for(const[a,r]of Object.entries(t))if(this.isLayoutMatchingWorkspace(e,r))return a;return null}static areLayoutsEqual(e,t){return JSON.stringify(e)===JSON.stringify(t)}static generateWorkspaceId(e){return`${e.toLowerCase().replace(/[^a-z0-9]+/g,"-")}-${Date.now()}`}static getBuiltInWorkspaceLayouts(){const e=Date.now();return{"project-management":{id:"project-management",name:"Project Management",description:"Tasks, dependencies, issues, file tree, docs, drawings, multi terminal, city visualization, code viewer, markdown slides, and excalidraw",layout:{left:{type:"tabs",panels:["tasks","dependencies","gitIssues","fileTree","docs","drawings"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:"multiTerminal",right:{type:"tabs",panels:["cityVisualization","codeViewer","markdownViewer","excalidrawDiagram"],config:{defaultActiveTab:0,tabPosition:"top"}}},defaultSizes:{left:20,middle:45,right:35},defaultCollapsed:{left:!1,right:!1},createdAt:e,updatedAt:e,isBuiltIn:!0},"code-review":{id:"code-review",name:"Code Review",description:"Git changes, pull requests, and file tree on left, git diff and code viewer in middle, city map on right",layout:{left:{type:"tabs",panels:["gitChanges","gitPullRequests","fileTree"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:{type:"tabs",panels:["gitDiff","codeViewer"],config:{defaultActiveTab:0,tabPosition:"top"}},right:"cityVisualization"},defaultSizes:{left:20,middle:50,right:30},defaultCollapsed:{left:!1,right:!1},createdAt:e,updatedAt:e,isBuiltIn:!0},documentation:{id:"documentation",name:"Documentation",description:"Docs, markdown viewer, and code viewer",layout:{left:"docs",middle:"markdownViewer",right:"codeViewer"},defaultSizes:{left:20,middle:50,right:30},defaultCollapsed:{left:!1,right:!0},createdAt:e,updatedAt:e,isBuiltIn:!0},"agent-work":{id:"agent-work",name:"Agent Work",description:"Tasks, agent sessions, file tree, agent context, git changes, docs, multi terminal, city map, agent events, code viewer, and markdown slides",layout:{left:{type:"tabs",panels:["tasks","agentSessions","fileTree","agentContext","gitChanges","docs"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:"multiTerminal",right:{type:"tabs",panels:["cityVisualization","agentEvents","codeViewer","markdownViewer"],config:{defaultActiveTab:0,tabPosition:"top"}}},defaultSizes:{left:20,middle:45,right:35},defaultCollapsed:{left:!1,right:!1},createdAt:e,updatedAt:e,isBuiltIn:!0},"quality-check":{id:"quality-check",name:"Quality Check",description:"Package information, tools, and dependencies on left; city visualization map in middle; multi terminal and code viewer on right (collapsed)",layout:{left:{type:"tabs",panels:["packageInfo","tools","dependencies"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:"cityVisualization",right:{type:"tabs",panels:["multiTerminal","codeViewer"],config:{defaultActiveTab:0,tabPosition:"top"}}},defaultSizes:{left:20,middle:45,right:35},defaultCollapsed:{left:!1,right:!0},createdAt:e,updatedAt:e,isBuiltIn:!0},drawing:{id:"drawing",name:"Drawing",description:"Drawings and docs, excalidraw diagram, multi terminal and markdown viewer",layout:{left:{type:"tabs",panels:["drawings","docs"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:"excalidrawDiagram",right:{type:"tabs",panels:["multiTerminal","markdownViewer"],config:{defaultActiveTab:0,tabPosition:"top"}}},defaultSizes:{left:20,middle:50,right:30},defaultCollapsed:{left:!1,right:!0},createdAt:e,updatedAt:e,isBuiltIn:!0},"old-school":{id:"old-school",name:"Old School",description:"File tree, search, git changes, and docs on left; code viewer and markdown viewer in middle; multi terminal and city map on right (collapsed)",layout:{left:{type:"tabs",panels:["fileTree","search","gitChanges","docs"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:{type:"tabs",panels:["codeViewer","markdownViewer"],config:{defaultActiveTab:0,tabPosition:"top"}},right:{type:"tabs",panels:["multiTerminal","cityVisualization"],config:{defaultActiveTab:0,tabPosition:"top"}}},defaultSizes:{left:20,middle:50,right:30},defaultCollapsed:{left:!1,right:!0},createdAt:e,updatedAt:e,isBuiltIn:!0},"principal-office":{id:"principal-office",name:"Principal Office",description:"Alexandria docs on left, MDX editor in middle, multi terminal on right",layout:{left:"docs",middle:"mdxEditor",right:"multiTerminal"},defaultSizes:{left:20,middle:50,right:30},defaultCollapsed:{left:!1,right:!1},createdAt:e,updatedAt:e,isBuiltIn:!0}}}static async initializeWorkspaceLayouts(){const e=await this.adapter.loadWorkspacePresets();Object.keys(e).length}}I(R,"adapter",new M);function Y(o={}){const{repositoryKey:e,autoInitialize:t=!1,defaultWorkspaceId:a}=o,[r,n]=s.useState({}),[l,i]=s.useState(null),[y,h]=s.useState(null),[b,p]=s.useState(!0),[m,f]=s.useState(null),d=s.useCallback(async()=>{try{p(!0),f(null);const C=await R.getWorkspaceLayouts();if(n(C),e){let k=await R.getRepositoryState(e);if(!k&&t){const u=a||"project-management",v=await R.getWorkspaceLayout(u);v&&(k={workspaceId:u,sizes:v.defaultSizes||{left:20,middle:45,right:35},collapsed:v.defaultCollapsed||{left:!1,right:!1}},await R.setRepositoryState(e,k))}if(i(k),k!=null&&k.workspaceId){const u=await R.getWorkspaceLayout(k.workspaceId);h(u)}else h(null)}}catch(C){f(C),console.error("Failed to load workspace data:",C)}finally{p(!1)}},[e,t,a]);s.useEffect(()=>{d()},[d]);const c=s.useCallback(async C=>await R.getWorkspaceLayout(C),[]),w=s.useCallback(async C=>{const k=await R.createWorkspaceLayout(C);return await d(),k},[d]),P=s.useCallback(async(C,k)=>{const u=await R.updateWorkspaceLayout(C,k);return await d(),u},[d]),T=s.useCallback(async C=>{const k=await R.deleteWorkspaceLayout(C);return k&&await d(),k},[d]),W=s.useCallback(async C=>{if(!e){console.error("Cannot apply workspace without repositoryKey");return}const k=await R.getWorkspaceLayout(C);if(!k){console.error(`Workspace ${C} not found`);return}const u={workspaceId:C,sizes:k.defaultSizes||{left:20,middle:45,right:35},collapsed:k.defaultCollapsed||{left:!1,right:!1}};await R.setRepositoryState(e,u),await d()},[e,d]),L=s.useCallback(async C=>{if(!e){console.error("Cannot update sizes without repositoryKey");return}await R.updateRepositorySizes(e,C),await d()},[e,d]),A=s.useCallback(async C=>{if(!e){console.error("Cannot update collapsed without repositoryKey");return}await R.updateRepositoryCollapsed(e,C),await d()},[e,d]),g=s.useCallback(async()=>{if(!e||!(l!=null&&l.workspaceId)){console.error("Cannot reset without repositoryKey and active workspace");return}await R.resetRepositoryToWorkspaceDefaults(e,l.workspaceId),await d()},[e,l==null?void 0:l.workspaceId,d]),S=s.useCallback(async()=>{await d()},[d]);return{workspaces:r,repositoryState:l,activeWorkspace:y,loading:b,error:m,getWorkspace:c,createWorkspace:w,updateWorkspace:P,deleteWorkspace:T,applyWorkspace:W,updateSizes:L,updateCollapsed:A,resetToDefaults:g,refresh:S}}function Z(o={}){const{initialFocus:e=null,collapsed:t={},panelType:a="three-panel",onFocusChange:r,events:n,getPanelId:l}=o,[i,y]=s.useState(e),h=s.useCallback(c=>{const w=i;if(y(c),r==null||r(c),n&&l){if(w){const T=l(w);T&&n.emit({type:"panel:blur",source:"panel-layouts",timestamp:Date.now(),payload:{panelId:T,panelSlot:w,nextPanelId:l(c)}})}const P=l(c);P&&n.emit({type:"panel:focus",source:"panel-layouts",timestamp:Date.now(),payload:{panelId:P,panelSlot:c,source:"keyboard-shortcut"}})}},[i,r,n,l]),b=s.useCallback(()=>{const c=i;if(y(null),r==null||r(null),n&&l&&c){const w=l(c);w&&n.emit({type:"panel:blur",source:"panel-layouts",timestamp:Date.now(),payload:{panelId:w,panelSlot:c}})}},[i,r,n,l]),p=s.useCallback(()=>{const c=[];return t.left||c.push("left"),c.push("middle"),a==="three-panel"&&!t.right&&c.push("right"),c},[t,a]),m=s.useCallback(()=>{const c=p();if(c.length===0)return;if(i===null){h(c[0]);return}const w=c.indexOf(i);if(w===-1){h(c[0]);return}const P=(w+1)%c.length;h(c[P])},[i,p,h]),f=s.useCallback(()=>{const c=p();if(c.length===0)return;if(i===null){h(c[c.length-1]);return}const w=c.indexOf(i);if(w===-1){h(c[c.length-1]);return}const P=w===0?c.length-1:w-1;h(c[P])},[i,p,h]),d=s.useCallback(c=>i===c,[i]);return{focusedPanel:i,setFocus:h,clearFocus:b,focusNext:m,focusPrevious:f,isFocused:d}}function U(o){const{enabled:e=!0,focusedPanel:t,collapsed:a,panelType:r,setFocus:n,onExpand:l,onCollapse:i}=o,y=s.useRef(t),h=s.useRef(a),b=s.useRef(r);s.useEffect(()=>{y.current=t},[t]),s.useEffect(()=>{h.current=a},[a]),s.useEffect(()=>{b.current=r},[r]);const p=s.useCallback(m=>{if(!m.altKey||m.ctrlKey||m.metaKey||m.shiftKey)return;const f=m.code,d=y.current,c=h.current,w=b.current;f==="Digit1"||f==="Numpad1"?(m.preventDefault(),c.left?l("left"):d!=="left"?n("left"):(i("left"),n("middle"))):f==="Digit2"||f==="Numpad2"?(m.preventDefault(),n("middle")):(f==="Digit3"||f==="Numpad3")&&w==="three-panel"&&(m.preventDefault(),c.right?l("right"):d!=="right"?n("right"):(i("right"),n("middle")))},[n,l,i]);s.useEffect(()=>{if(e)return window.addEventListener("keydown",p),()=>{window.removeEventListener("keydown",p)}},[e,p])}function ee(o,e,t,a){s.useEffect(()=>{const r=e.on("panel:focus",l=>{l.payload.panelId===o&&t()});let n;return a&&(n=e.on("panel:blur",l=>{l.payload.panelId===o&&a()})),()=>{r(),n==null||n()}},[o,e,t,a])}const te=({isFocused:o,className:e="",style:t={}})=>{if(!o)return null;const a={position:"absolute",top:0,left:0,right:0,bottom:0,pointerEvents:"none",border:"2px solid var(--panel-focus-border-color, #0066cc)",borderRadius:"4px",boxShadow:"0 0 0 1px var(--panel-focus-shadow-color, rgba(0, 102, 204, 0.2))",zIndex:1e3,transition:"opacity 0.15s ease-in-out",...t};return x.jsx("div",{className:`panel-focus-indicator ${e}`,style:a,role:"presentation","aria-hidden":"true"})},K=({value:o,onChange:e,placeholder:t="> Type a command...",onClose:a,onEnter:r})=>{const{theme:n}=j.useTheme(),l=s.useRef(null);s.useEffect(()=>{l.current&&l.current.focus()},[]);const i=y=>{switch(y.key){case"Enter":y.preventDefault(),r==null||r();break;case"Escape":y.preventDefault(),a();break}};return x.jsx("div",{style:{padding:"0",borderBottom:`1px solid ${n.colors.border}`,backgroundColor:n.colors.background},children:x.jsx("input",{ref:l,type:"text",value:o,onChange:y=>e(y.target.value),onKeyDown:i,placeholder:t,style:{width:"100%",padding:"16px 20px",fontSize:"16px",fontFamily:n.fonts.monospace,backgroundColor:"transparent",border:"none",outline:"none",color:n.colors.text,caretColor:n.colors.primary},autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:!1})})},O=s.forwardRef(({command:o,isSelected:e,onClick:t,onMouseEnter:a},r)=>{const{theme:n}=j.useTheme(),{label:l,description:i,icon:y,shortcut:h}=o,[b,p]=s.useState(!1);return x.jsxs("div",{ref:r,onClick:t,onMouseEnter:()=>{p(!0),a()},onMouseLeave:()=>p(!1),style:{padding:"10px 16px",cursor:"pointer",backgroundColor:e||b?n.colors.backgroundSecondary:"transparent",borderLeft:e||b?`3px solid ${n.colors.primary}`:"3px solid transparent",transition:"all 0.1s ease",display:"flex",alignItems:"center",gap:"12px"},onMouseDown:m=>{m.preventDefault()},children:[y&&x.jsx("div",{style:{flexShrink:0,width:"20px",height:"20px",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"16px",color:e||b?n.colors.primary:n.colors.textSecondary},children:y}),x.jsxs("div",{style:{flex:1,minWidth:0},children:[x.jsx("div",{style:{fontSize:"14px",fontWeight:500,color:e||b?n.colors.text:n.colors.textSecondary,marginBottom:i?"2px":0},children:l}),i&&x.jsx("div",{style:{fontSize:"12px",color:n.colors.textMuted,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:i})]}),h&&x.jsx("div",{style:{flexShrink:0,fontSize:"11px",color:n.colors.textMuted,padding:"2px 8px",backgroundColor:n.colors.background,border:`1px solid ${n.colors.border}`,borderRadius:"4px",fontFamily:n.fonts.monospace},children:h})]})});O.displayName="CommandItem";const V=({commands:o,selectedIndex:e,onSelect:t,onHover:a,maxResults:r=10})=>{const{theme:n}=j.useTheme(),l=s.useRef(null),i=s.useRef(null),y=o.slice(0,r);s.useEffect(()=>{if(i.current&&l.current){const p=i.current,m=l.current,f=p.offsetTop,d=f+p.offsetHeight,c=m.scrollTop,w=m.clientHeight;f<c?m.scrollTop=f-8:d>c+w&&(m.scrollTop=d-w+8)}},[e]);const h=y.reduce((p,m,f)=>{const d=m.category||"Other";return p[d]||(p[d]=[]),p[d].push({command:m,index:f}),p},{}),b=Object.keys(h).sort((p,m)=>p==="Other"?1:m==="Other"?-1:p.localeCompare(m));return x.jsxs("div",{ref:l,style:{overflowY:"auto",maxHeight:"400px",padding:"8px 0"},children:[b.map(p=>x.jsxs("div",{children:[b.length>1&&x.jsx("div",{style:{padding:"8px 16px 4px",fontSize:"11px",fontWeight:600,textTransform:"uppercase",color:n.colors.textMuted,letterSpacing:"0.5px"},children:p}),h[p].map(({command:m,index:f})=>x.jsx(O,{command:m,isSelected:f===e,onClick:()=>t(m),onMouseEnter:()=>a(f),ref:f===e?i:void 0},m.id))]},p)),o.length>r&&x.jsxs("div",{style:{padding:"8px 16px",fontSize:"12px",color:n.colors.textMuted,textAlign:"center",borderTop:`1px solid ${n.colors.border}`},children:["Showing ",r," of ",o.length," results"]})]})},ae=({commandPalette:o,config:e})=>{const{theme:t}=j.useTheme(),a=s.useRef(null),{isOpen:r,close:n,query:l,setQuery:i,filteredCommands:y,selectedIndex:h,setSelectedIndex:b,executeSelected:p}=o;if(s.useEffect(()=>{if(!r)return;const d=w=>{a.current&&!a.current.contains(w.target)&&n()},c=setTimeout(()=>{document.addEventListener("mousedown",d)},100);return()=>{clearTimeout(c),document.removeEventListener("mousedown",d)}},[r,n]),!r)return null;const m=(e==null?void 0:e.maxHeight)||"50vh",f=(e==null?void 0:e.placeholder)||"> Type a command...";return x.jsxs(x.Fragment,{children:[x.jsx("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0, 0, 0, 0.4)",backdropFilter:"blur(2px)",zIndex:999},onClick:n}),x.jsxs("div",{ref:a,className:e==null?void 0:e.className,style:{position:"fixed",bottom:0,left:0,right:0,maxHeight:m,backgroundColor:t.colors.surface,borderTop:`1px solid ${t.colors.border}`,boxShadow:t.shadows[2],zIndex:1e3,display:"flex",flexDirection:"column-reverse",...e==null?void 0:e.style},children:[x.jsxs("div",{children:[x.jsx(K,{value:l,onChange:i,placeholder:f,onClose:n,onEnter:p}),x.jsxs("div",{style:{padding:"8px 16px",borderTop:`1px solid ${t.colors.border}`,display:"flex",gap:"16px",fontSize:"12px",color:t.colors.textMuted,backgroundColor:t.colors.background},children:[x.jsxs("span",{children:[x.jsx("kbd",{style:{padding:"2px 6px",backgroundColor:t.colors.backgroundSecondary,borderRadius:"3px",border:`1px solid ${t.colors.border}`},children:"Enter"})," Execute"]}),x.jsxs("span",{children:[x.jsx("kbd",{style:{padding:"2px 6px",backgroundColor:t.colors.backgroundSecondary,borderRadius:"3px",border:`1px solid ${t.colors.border}`},children:"Esc"})," Close"]})]})]}),y.length>0&&x.jsx(V,{commands:y,selectedIndex:h,onSelect:d=>{o.executeCommand(d.id)},onHover:b,maxResults:e==null?void 0:e.maxResults}),l&&y.length===0&&x.jsxs("div",{style:{padding:"24px 16px",color:t.colors.textMuted,textAlign:"center",fontSize:"14px"},children:['No commands found for "',l,'"']})]})]})};class ${constructor(){I(this,"commands",new Map);I(this,"listeners",new Set)}registerCommands(e){e.forEach(t=>{this.commands.set(t.id,t)}),this.notifyListeners()}registerCommand(e){this.commands.set(e.id,e),this.notifyListeners()}unregisterCommands(e){e.forEach(t=>{this.commands.delete(t)}),this.notifyListeners()}unregisterCommand(e){this.commands.delete(e),this.notifyListeners()}getCommands(e){const t=Array.from(this.commands.values());return e?t.filter(a=>a.isAvailable?a.isAvailable(e):!0):t}getCommand(e){return this.commands.get(e)}async executeCommand(e,t){var r,n;const a=this.commands.get(e);if(!a){console.warn(`Command not found: ${e}`);return}if(a.isAvailable&&!a.isAvailable(t)){console.warn(`Command not available: ${e}`);return}try{await a.execute(t),(r=t.events)==null||r.emit({type:"command:executed",source:"command-palette",timestamp:Date.now(),payload:{commandId:a.id,commandLabel:a.label}})}catch(l){console.error(`Error executing command ${e}:`,l),(n=t.events)==null||n.emit({type:"command:error",source:"command-palette",timestamp:Date.now(),payload:{commandId:a.id,error:l instanceof Error?l.message:String(l)}})}}searchCommands(e,t){const a=this.getCommands(t);if(!e.trim())return this.sortCommands(a);const r=e.toLowerCase();return a.map(l=>{var y,h;let i=0;return l.label.toLowerCase()===r?i+=1e3:l.label.toLowerCase().startsWith(r)?i+=500:l.label.toLowerCase().includes(r)&&(i+=250),(y=l.description)!=null&&y.toLowerCase().includes(r)&&(i+=100),l.keywords&&l.keywords.some(p=>p.toLowerCase().includes(r))&&(i+=150),(h=l.category)!=null&&h.toLowerCase().includes(r)&&(i+=50),i>0&&l.priority&&(i+=l.priority),{command:l,score:i}}).filter(l=>l.score>0).sort((l,i)=>i.score-l.score).map(l=>l.command)}sortCommands(e){return e.sort((t,a)=>{const r=(a.priority||0)-(t.priority||0);if(r!==0)return r;const n=t.category||"",l=a.category||"",i=n.localeCompare(l);return i!==0?i:t.label.localeCompare(a.label)})}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}clear(){this.commands.clear(),this.notifyListeners()}get size(){return this.commands.size}notifyListeners(){this.listeners.forEach(e=>e())}}let z=null;function se(){return z||(z=new $),z}function oe(){z=null}function re({context:o,commands:e=[],keyboard:t={key:" ",altKey:!0},config:a={},registry:r}){const[n,l]=s.useState(!1),[i,y]=s.useState(""),[h,b]=s.useState(0),[p,m]=s.useState([]),f=s.useMemo(()=>r||new $,[r]),d=s.useMemo(()=>({...o,closeCommandPalette:()=>l(!1)}),[o]);s.useEffect(()=>{let u=!0;const v=f.subscribe(()=>{if(u){const E=f.getCommands(d);m(E)}});if(e.length>0)f.registerCommands(e);else{const E=f.getCommands(d);m(E)}return()=>{u=!1,v()}},[f]);const c=s.useMemo(()=>(a.fuzzySearch===!1,f.searchCommands(i,d)),[i,f,d,a.fuzzySearch]);s.useEffect(()=>{b(0)},[c]);const w=s.useCallback(()=>{var u;l(!0),y(""),b(0),(u=o.events)==null||u.emit({type:"command-palette:opened",source:"command-palette",timestamp:Date.now(),payload:{}})},[o.events]),P=s.useCallback(()=>{var u;l(!1),y(""),b(0),(u=o.events)==null||u.emit({type:"command-palette:closed",source:"command-palette",timestamp:Date.now(),payload:{}})},[o.events]),T=s.useCallback(()=>{n?P():w()},[n,w,P]),W=s.useCallback(async u=>{await f.executeCommand(u,d),P()},[f,d,P]),L=s.useCallback(()=>{b(u=>{const v=a.maxResults||c.length,E=Math.min(c.length,v)-1;return u<E?u+1:0})},[c.length,a.maxResults]),A=s.useCallback(()=>{b(u=>{const v=a.maxResults||c.length,E=Math.min(c.length,v)-1;return u>0?u-1:E})},[c.length,a.maxResults]),g=s.useCallback(async()=>{const u=c[0];u&&await W(u.id)},[c,W]),S=s.useCallback(u=>{f.registerCommands(u)},[f]),C=s.useCallback(u=>{f.unregisterCommands(u)},[f]),k=s.useCallback(u=>{const{key:v=" ",altKey:E=!0,ctrlKey:J=!1,metaKey:_=!1,shiftKey:q=!1}=t,H=u.altKey===E&&u.ctrlKey===J&&u.metaKey===_&&u.shiftKey===q;if((v===" "?u.code==="Space":u.key===v)&&H){const F=u.target;if(F.tagName==="INPUT"||F.tagName==="TEXTAREA"||F.isContentEditable)return;u.preventDefault(),T()}},[t,T]);return s.useEffect(()=>(window.addEventListener("keydown",k),()=>window.removeEventListener("keydown",k)),[k]),{isOpen:n,open:w,close:P,toggle:T,query:i,setQuery:y,filteredCommands:c,executeCommand:W,selectedIndex:h,setSelectedIndex:b,selectNext:L,selectPrevious:A,executeSelected:g,commands:p,registerCommands:S,unregisterCommands:C}}const B=[{id:"panel.focus.left",label:"Focus Left Panel",description:"Set focus to the left panel",icon:"◀",category:"Panel Navigation",shortcut:"Alt+1",priority:100,keywords:["left","sidebar","focus","switch"],execute:o=>{o.setFocus("left")},isAvailable:o=>o.focusedPanel!=="left"},{id:"panel.focus.middle",label:"Focus Middle Panel",description:"Set focus to the middle panel",icon:"▣",category:"Panel Navigation",shortcut:"Alt+2",priority:100,keywords:["middle","center","main","focus","switch"],execute:o=>{o.setFocus("middle")},isAvailable:o=>o.focusedPanel!=="middle"},{id:"panel.focus.right",label:"Focus Right Panel",description:"Set focus to the right panel",icon:"▶",category:"Panel Navigation",shortcut:"Alt+3",priority:100,keywords:["right","sidebar","focus","switch"],execute:o=>{o.setFocus("right")},isAvailable:o=>o.focusedPanel!=="right"},{id:"panel.toggle.left",label:"Toggle Left Panel",description:"Expand or collapse the left panel",icon:"◀◀",category:"Panel Control",keywords:["toggle","left","collapse","expand","hide","show"],priority:80,execute:o=>{var e;(e=o.events)==null||e.emit({type:"panel:toggle",source:"command-palette",timestamp:Date.now(),payload:{panelId:"left"}})}},{id:"panel.toggle.right",label:"Toggle Right Panel",description:"Expand or collapse the right panel",icon:"▶▶",category:"Panel Control",keywords:["toggle","right","collapse","expand","hide","show"],priority:80,execute:o=>{var e;(e=o.events)==null||e.emit({type:"panel:toggle",source:"command-palette",timestamp:Date.now(),payload:{panelId:"right"}})}},{id:"panel.collapse.all",label:"Collapse All Panels",description:"Collapse all side panels to maximize middle panel",icon:"⬌",category:"Panel Control",keywords:["collapse","hide","all","maximize","focus mode"],priority:70,execute:o=>{var e;(e=o.events)==null||e.emit({type:"panel:collapse-all",source:"command-palette",timestamp:Date.now(),payload:{}})}},{id:"panel.expand.all",label:"Expand All Panels",description:"Expand all side panels to default layout",icon:"⬍",category:"Panel Control",keywords:["expand","show","all","restore","default"],priority:70,execute:o=>{var e;(e=o.events)==null||e.emit({type:"panel:expand-all",source:"command-palette",timestamp:Date.now(),payload:{}})}},{id:"panel.refresh",label:"Refresh Panel Data",description:"Reload data for the currently focused panel",icon:"↻",category:"Panel Control",keywords:["refresh","reload","update","sync"],priority:60,execute:o=>{var t;const e=o.focusedPanel;e&&((t=o.events)==null||t.emit({type:"panel:refresh",source:"command-palette",timestamp:Date.now(),payload:{panelId:e}}))},isAvailable:o=>o.focusedPanel!==null},{id:"panel.reset.layout",label:"Reset Panel Layout",description:"Reset panel sizes to default layout",icon:"⟲",category:"Panel Control",keywords:["reset","layout","default","restore"],priority:50,execute:o=>{var e;(e=o.events)==null||e.emit({type:"panel:reset-layout",source:"command-palette",timestamp:Date.now(),payload:{}})}}];function le(){return B}Object.defineProperty(exports,"EditableConfigurablePanelLayout",{enumerable:!0,get:()=>D.EditableConfigurablePanelLayout});Object.defineProperty(exports,"ResponsiveConfigurablePanelLayout",{enumerable:!0,get:()=>D.ResponsiveConfigurablePanelLayout});Object.defineProperty(exports,"mapThemeToPanelVars",{enumerable:!0,get:()=>D.mapThemeToPanelVars});Object.defineProperty(exports,"mapThemeToTabVars",{enumerable:!0,get:()=>D.mapThemeToTabVars});exports.CommandInput=K;exports.CommandItem=O;exports.CommandList=V;exports.CommandPalette=ae;exports.CommandRegistryService=$;exports.FocusIndicator=te;exports.LocalStoragePersistenceAdapter=N;exports.LocalStorageWorkspaceAdapter=M;exports.WorkspaceLayoutService=R;exports.getGlobalCommandRegistry=se;exports.getPanelCommands=le;exports.panelCommands=B;exports.resetGlobalCommandRegistry=oe;exports.useCommandPalette=re;exports.usePanelFocus=Z;exports.usePanelFocusListener=ee;exports.usePanelKeyboardShortcuts=U;exports.usePanelPersistence=Q;exports.useWorkspace=Y;
1
+ "use strict";require('./index.css');var le=Object.defineProperty;var ie=(a,e,t)=>e in a?le(a,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):a[e]=t;var W=(a,e,t)=>ie(a,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const j=require("@principal-ade/panels"),l=require("react"),x=require("react/jsx-runtime"),_=require("@principal-ade/industry-theme");class N{constructor(){W(this,"storageKey","panel-layouts")}async load(e){try{const t=localStorage.getItem(`${this.storageKey}:${e}`);return t?JSON.parse(t):null}catch(t){return console.error(`Failed to load panel layout for ${e}:`,t),null}}async save(e,t){try{localStorage.setItem(`${this.storageKey}:${e}`,JSON.stringify(t))}catch(o){console.error(`Failed to save panel layout for ${e}:`,o)}}}function ce(a){const{viewKey:e,defaultSizes:t,panelType:o,adapter:s=new N}=a,[r,n]=l.useState(t),[i,y]=l.useState(a.collapsed),g=l.useRef(a.collapsed),h=l.useRef({}),u=l.useRef(null),f=l.useRef(null);l.useEffect(()=>{(async()=>{const v=await s.load(e);v!=null&&v.sizes&&(n(v.sizes),m(v.sizes))})()},[e]);const m=l.useCallback(b=>{"left"in b&&b.left>0&&(h.current.left=b.left),"middle"in b&&b.middle>0&&(h.current.middle=b.middle),"right"in b&&b.right>0&&(h.current.right=b.right)},[]),d=l.useCallback(b=>{const v=h.current[b];if(v&&v>0)return v;if(b==="left"&&"left"in t&&t.left>0)return t.left;if(b==="right"&&"right"in t&&t.right>0)return t.right},[t]),c=l.useRef(t);l.useEffect(()=>{("left"in t&&t.left!==c.current.left||"middle"in t&&"middle"in c.current&&t.middle!==c.current.middle||"right"in t&&t.right!==c.current.right)&&(n(t),m(t),c.current=t)},[t,m]),l.useEffect(()=>{const b=a.collapsed.left!==g.current.left,v="right"in a.collapsed&&"right"in g.current&&a.collapsed.right!==g.current.right;(b||v)&&(y(a.collapsed),g.current={...a.collapsed})},[a.collapsed.left,a.collapsed.right]);const w=l.useCallback(async b=>{try{await s.save(e,{sizes:b})}catch(v){console.error(`Failed to save panel preferences for ${e}:`,v)}},[e,s]),P=l.useCallback(b=>{const v={...b};let C=!0;if("left"in b){const k=!!(i!=null&&i.left),p=b.left;if(k){const S=d("left");S!==void 0&&S>0?v.left=S:C=!1}else p===0&&(C=!1)}if(o==="three-panel"&&"right"in b){const k=!!(i!=null&&i.right),p=b.right;if(k){const S=d("right");S!==void 0&&S>0?v.right=S:C=!1}else p===0&&(C=!1)}if(n(v),m(v),u.current&&(clearTimeout(u.current),u.current=null),!C){f.current=null;return}f.current=v,u.current=setTimeout(()=>{const k=f.current;k&&(w(k),f.current=null),u.current=null},500)},[i,d,o,w,m]);l.useEffect(()=>()=>{if(u.current){const b=f.current;b&&(w(b),f.current=null),clearTimeout(u.current),u.current=null}},[w]);const R=l.useCallback(async()=>{},[]),I=l.useCallback(async()=>{},[]),E=l.useCallback(async()=>{},[]),L=l.useCallback(async()=>{},[]);return o==="three-panel"?{type:"three-panel",sizes:r,collapsed:i,handlePanelResize:P,handleLeftCollapseComplete:R,handleLeftExpandComplete:I,handleRightCollapseComplete:E,handleRightExpandComplete:L}:{type:"two-panel",sizes:r,collapsed:i,handlePanelResize:P,handleLeftCollapseComplete:R,handleLeftExpandComplete:I}}class q{constructor(){W(this,"PRESETS_KEY","panel-layouts:workspace-presets");W(this,"REPO_STATE_PREFIX","panel-layouts:repo-state:")}async loadWorkspacePresets(){try{const e=localStorage.getItem(this.PRESETS_KEY);return e?JSON.parse(e):{}}catch(e){return console.error("Failed to load workspace presets:",e),{}}}async saveWorkspacePresets(e){try{localStorage.setItem(this.PRESETS_KEY,JSON.stringify(e))}catch(t){throw console.error("Failed to save workspace presets:",t),t}}async loadRepositoryState(e){try{const t=`${this.REPO_STATE_PREFIX}${e}`,o=localStorage.getItem(t);return o?JSON.parse(o):null}catch(t){return console.error(`Failed to load repository state for ${e}:`,t),null}}async saveRepositoryState(e,t){try{const o=`${this.REPO_STATE_PREFIX}${e}`;localStorage.setItem(o,JSON.stringify(t))}catch(o){throw console.error(`Failed to save repository state for ${e}:`,o),o}}async loadAllRepositoryStates(){try{const e={};for(let t=0;t<localStorage.length;t++){const o=localStorage.key(t);if(o&&o.startsWith(this.REPO_STATE_PREFIX)){const s=o.substring(this.REPO_STATE_PREFIX.length),r=localStorage.getItem(o);if(r)try{e[s]=JSON.parse(r)}catch(n){console.error(`Failed to parse repository state for ${s}:`,n)}}}return e}catch(e){return console.error("Failed to load all repository states:",e),{}}}}class T{static setAdapter(e){this.adapter=e}static async getWorkspaceLayouts(){const e=this.getBuiltInWorkspaceLayouts();return{...await this.adapter.loadWorkspacePresets(),...e}}static async getWorkspaceLayout(e){return(await this.getWorkspaceLayouts())[e]||null}static async createWorkspaceLayout(e){const t=await this.adapter.loadWorkspacePresets(),o=this.generateWorkspaceId(e.name),s={id:o,name:e.name,description:e.description,layout:e.layout,defaultSizes:e.defaultSizes,defaultCollapsed:e.defaultCollapsed,createdAt:Date.now(),updatedAt:Date.now(),isBuiltIn:!1},r={...t,[o]:s};return await this.adapter.saveWorkspacePresets(r),s}static async updateWorkspaceLayout(e,t){const o=await this.adapter.loadWorkspacePresets(),s=o[e];if(!s)return console.error(`Workspace layout ${e} not found`),null;if(s.isBuiltIn)return console.error(`Cannot update built-in workspace layout ${e}`),null;const r={...s,...t,id:e,createdAt:s.createdAt,updatedAt:Date.now()},n={...o,[e]:r};return await this.adapter.saveWorkspacePresets(n),r}static async deleteWorkspaceLayout(e){const t=await this.adapter.loadWorkspacePresets(),o=t[e];if(!o)return console.error(`Workspace layout ${e} not found`),!1;if(o.isBuiltIn)return console.error(`Cannot delete built-in workspace layout ${e}`),!1;const s={...t};return delete s[e],await this.adapter.saveWorkspacePresets(s),!0}static async getRepositoryState(e){return await this.adapter.loadRepositoryState(e)}static async setRepositoryState(e,t){await this.adapter.saveRepositoryState(e,t)}static async updateRepositorySizes(e,t){const o=await this.getRepositoryState(e);o&&await this.setRepositoryState(e,{...o,sizes:t})}static async updateRepositoryCollapsed(e,t){const o=await this.getRepositoryState(e);o&&await this.setRepositoryState(e,{...o,collapsed:t})}static hasStateDeviation(e,t){const o=t.defaultSizes?JSON.stringify(e.sizes)!==JSON.stringify(t.defaultSizes):!1,s=t.defaultCollapsed?JSON.stringify(e.collapsed)!==JSON.stringify(t.defaultCollapsed):!1;return{hasSizeDeviation:o,hasCollapsedDeviation:s}}static async updateWorkspaceFromRepositoryState(e,t){const o=await this.getWorkspaceLayout(e),s=await this.getRepositoryState(t);if(!o||!s||o.isBuiltIn){console.error("Cannot update built-in workspace or workspace/state not found");return}await this.updateWorkspaceLayout(e,{defaultSizes:s.sizes,defaultCollapsed:s.collapsed})}static async resetRepositoryToWorkspaceDefaults(e,t){const o=await this.getWorkspaceLayout(t);if(!o){console.error(`Workspace ${t} not found`);return}const s=await this.getRepositoryState(e);s&&await this.setRepositoryState(e,{...s,sizes:o.defaultSizes||{left:20,middle:45,right:35},collapsed:o.defaultCollapsed||{left:!1,right:!1}})}static isLayoutMatchingWorkspace(e,t){return this.areLayoutsEqual(e,t.layout)}static async findMatchingWorkspace(e){const t=await this.getWorkspaceLayouts();for(const[o,s]of Object.entries(t))if(this.isLayoutMatchingWorkspace(e,s))return o;return null}static areLayoutsEqual(e,t){return JSON.stringify(e)===JSON.stringify(t)}static generateWorkspaceId(e){return`${e.toLowerCase().replace(/[^a-z0-9]+/g,"-")}-${Date.now()}`}static getBuiltInWorkspaceLayouts(){const e=Date.now();return{"project-management":{id:"project-management",name:"Project Management",description:"Tasks, dependencies, issues, file tree, docs, drawings, multi terminal, city visualization, code viewer, markdown slides, and excalidraw",layout:{left:{type:"tabs",panels:["tasks","dependencies","gitIssues","fileTree","docs","drawings"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:"multiTerminal",right:{type:"tabs",panels:["cityVisualization","codeViewer","markdownViewer","excalidrawDiagram"],config:{defaultActiveTab:0,tabPosition:"top"}}},defaultSizes:{left:20,middle:45,right:35},defaultCollapsed:{left:!1,right:!1},createdAt:e,updatedAt:e,isBuiltIn:!0},"code-review":{id:"code-review",name:"Code Review",description:"Git changes, pull requests, and file tree on left, git diff and code viewer in middle, city map on right",layout:{left:{type:"tabs",panels:["gitChanges","gitPullRequests","fileTree"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:{type:"tabs",panels:["gitDiff","codeViewer"],config:{defaultActiveTab:0,tabPosition:"top"}},right:"cityVisualization"},defaultSizes:{left:20,middle:50,right:30},defaultCollapsed:{left:!1,right:!1},createdAt:e,updatedAt:e,isBuiltIn:!0},documentation:{id:"documentation",name:"Documentation",description:"Docs, markdown viewer, and code viewer",layout:{left:"docs",middle:"markdownViewer",right:"codeViewer"},defaultSizes:{left:20,middle:50,right:30},defaultCollapsed:{left:!1,right:!0},createdAt:e,updatedAt:e,isBuiltIn:!0},"agent-work":{id:"agent-work",name:"Agent Work",description:"Tasks, agent sessions, file tree, agent context, git changes, docs, multi terminal, city map, agent events, code viewer, and markdown slides",layout:{left:{type:"tabs",panels:["tasks","agentSessions","fileTree","agentContext","gitChanges","docs"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:"multiTerminal",right:{type:"tabs",panels:["cityVisualization","agentEvents","codeViewer","markdownViewer"],config:{defaultActiveTab:0,tabPosition:"top"}}},defaultSizes:{left:20,middle:45,right:35},defaultCollapsed:{left:!1,right:!1},createdAt:e,updatedAt:e,isBuiltIn:!0},"quality-check":{id:"quality-check",name:"Quality Check",description:"Package information, tools, and dependencies on left; city visualization map in middle; multi terminal and code viewer on right (collapsed)",layout:{left:{type:"tabs",panels:["packageInfo","tools","dependencies"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:"cityVisualization",right:{type:"tabs",panels:["multiTerminal","codeViewer"],config:{defaultActiveTab:0,tabPosition:"top"}}},defaultSizes:{left:20,middle:45,right:35},defaultCollapsed:{left:!1,right:!0},createdAt:e,updatedAt:e,isBuiltIn:!0},drawing:{id:"drawing",name:"Drawing",description:"Drawings and docs, excalidraw diagram, multi terminal and markdown viewer",layout:{left:{type:"tabs",panels:["drawings","docs"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:"excalidrawDiagram",right:{type:"tabs",panels:["multiTerminal","markdownViewer"],config:{defaultActiveTab:0,tabPosition:"top"}}},defaultSizes:{left:20,middle:50,right:30},defaultCollapsed:{left:!1,right:!0},createdAt:e,updatedAt:e,isBuiltIn:!0},"old-school":{id:"old-school",name:"Old School",description:"File tree, search, git changes, and docs on left; code viewer and markdown viewer in middle; multi terminal and city map on right (collapsed)",layout:{left:{type:"tabs",panels:["fileTree","search","gitChanges","docs"],config:{defaultActiveTab:0,tabPosition:"top"}},middle:{type:"tabs",panels:["codeViewer","markdownViewer"],config:{defaultActiveTab:0,tabPosition:"top"}},right:{type:"tabs",panels:["multiTerminal","cityVisualization"],config:{defaultActiveTab:0,tabPosition:"top"}}},defaultSizes:{left:20,middle:50,right:30},defaultCollapsed:{left:!1,right:!0},createdAt:e,updatedAt:e,isBuiltIn:!0},"principal-office":{id:"principal-office",name:"Principal Office",description:"Alexandria docs on left, MDX editor in middle, multi terminal on right",layout:{left:"docs",middle:"mdxEditor",right:"multiTerminal"},defaultSizes:{left:20,middle:50,right:30},defaultCollapsed:{left:!1,right:!1},createdAt:e,updatedAt:e,isBuiltIn:!0}}}static async initializeWorkspaceLayouts(){const e=await this.adapter.loadWorkspacePresets();Object.keys(e).length}}W(T,"adapter",new q);function de(a={}){const{repositoryKey:e,autoInitialize:t=!1,defaultWorkspaceId:o}=a,[s,r]=l.useState({}),[n,i]=l.useState(null),[y,g]=l.useState(null),[h,u]=l.useState(!0),[f,m]=l.useState(null),d=l.useCallback(async()=>{try{u(!0),m(null);const C=await T.getWorkspaceLayouts();if(r(C),e){let k=await T.getRepositoryState(e);if(!k&&t){const p=o||"project-management",S=await T.getWorkspaceLayout(p);S&&(k={workspaceId:p,sizes:S.defaultSizes||{left:20,middle:45,right:35},collapsed:S.defaultCollapsed||{left:!1,right:!1}},await T.setRepositoryState(e,k))}if(i(k),k!=null&&k.workspaceId){const p=await T.getWorkspaceLayout(k.workspaceId);g(p)}else g(null)}}catch(C){m(C),console.error("Failed to load workspace data:",C)}finally{u(!1)}},[e,t,o]);l.useEffect(()=>{d()},[d]);const c=l.useCallback(async C=>await T.getWorkspaceLayout(C),[]),w=l.useCallback(async C=>{const k=await T.createWorkspaceLayout(C);return await d(),k},[d]),P=l.useCallback(async(C,k)=>{const p=await T.updateWorkspaceLayout(C,k);return await d(),p},[d]),R=l.useCallback(async C=>{const k=await T.deleteWorkspaceLayout(C);return k&&await d(),k},[d]),I=l.useCallback(async C=>{if(!e){console.error("Cannot apply workspace without repositoryKey");return}const k=await T.getWorkspaceLayout(C);if(!k){console.error(`Workspace ${C} not found`);return}const p={workspaceId:C,sizes:k.defaultSizes||{left:20,middle:45,right:35},collapsed:k.defaultCollapsed||{left:!1,right:!1}};await T.setRepositoryState(e,p),await d()},[e,d]),E=l.useCallback(async C=>{if(!e){console.error("Cannot update sizes without repositoryKey");return}await T.updateRepositorySizes(e,C),await d()},[e,d]),L=l.useCallback(async C=>{if(!e){console.error("Cannot update collapsed without repositoryKey");return}await T.updateRepositoryCollapsed(e,C),await d()},[e,d]),b=l.useCallback(async()=>{if(!e||!(n!=null&&n.workspaceId)){console.error("Cannot reset without repositoryKey and active workspace");return}await T.resetRepositoryToWorkspaceDefaults(e,n.workspaceId),await d()},[e,n==null?void 0:n.workspaceId,d]),v=l.useCallback(async()=>{await d()},[d]);return{workspaces:s,repositoryState:n,activeWorkspace:y,loading:h,error:f,getWorkspace:c,createWorkspace:w,updateWorkspace:P,deleteWorkspace:R,applyWorkspace:I,updateSizes:E,updateCollapsed:L,resetToDefaults:b,refresh:v}}function ue(a={}){const{initialFocus:e=null,collapsed:t={},panelType:o="three-panel",onFocusChange:s,events:r,getPanelId:n}=a,[i,y]=l.useState(e),g=l.useCallback(c=>{const w=i;if(y(c),s==null||s(c),r&&n){if(w){const R=n(w);R&&r.emit({type:"panel:blur",source:"panel-layouts",timestamp:Date.now(),payload:{panelId:R,panelSlot:w,nextPanelId:n(c)}})}const P=n(c);P&&r.emit({type:"panel:focus",source:"panel-layouts",timestamp:Date.now(),payload:{panelId:P,panelSlot:c,source:"keyboard-shortcut"}})}},[i,s,r,n]),h=l.useCallback(()=>{const c=i;if(y(null),s==null||s(null),r&&n&&c){const w=n(c);w&&r.emit({type:"panel:blur",source:"panel-layouts",timestamp:Date.now(),payload:{panelId:w,panelSlot:c}})}},[i,s,r,n]),u=l.useCallback(()=>{const c=[];return t.left||c.push("left"),c.push("middle"),o==="three-panel"&&!t.right&&c.push("right"),c},[t,o]),f=l.useCallback(()=>{const c=u();if(c.length===0)return;if(i===null){g(c[0]);return}const w=c.indexOf(i);if(w===-1){g(c[0]);return}const P=(w+1)%c.length;g(c[P])},[i,u,g]),m=l.useCallback(()=>{const c=u();if(c.length===0)return;if(i===null){g(c[c.length-1]);return}const w=c.indexOf(i);if(w===-1){g(c[c.length-1]);return}const P=w===0?c.length-1:w-1;g(c[P])},[i,u,g]),d=l.useCallback(c=>i===c,[i]);return{focusedPanel:i,setFocus:g,clearFocus:h,focusNext:f,focusPrevious:m,isFocused:d}}function pe(a){const{enabled:e=!0,focusedPanel:t,collapsed:o,panelType:s,setFocus:r,onExpand:n,onCollapse:i}=a,y=l.useRef(t),g=l.useRef(o),h=l.useRef(s);l.useEffect(()=>{y.current=t},[t]),l.useEffect(()=>{g.current=o},[o]),l.useEffect(()=>{h.current=s},[s]);const u=l.useCallback(f=>{if(!f.altKey||f.ctrlKey||f.metaKey||f.shiftKey)return;const m=f.code,d=y.current,c=g.current,w=h.current;m==="Digit1"||m==="Numpad1"?(f.preventDefault(),c.left?n("left"):d!=="left"?r("left"):(i("left"),r("middle"))):m==="Digit2"||m==="Numpad2"?(f.preventDefault(),r("middle")):(m==="Digit3"||m==="Numpad3")&&w==="three-panel"&&(f.preventDefault(),c.right?n("right"):d!=="right"?r("right"):(i("right"),r("middle")))},[r,n,i]);l.useEffect(()=>{if(e)return window.addEventListener("keydown",u),()=>{window.removeEventListener("keydown",u)}},[e,u])}function fe(a,e,t,o){l.useEffect(()=>{const s=e.on("panel:focus",n=>{n.payload.panelId===a&&t()});let r;return o&&(r=e.on("panel:blur",n=>{n.payload.panelId===a&&o()})),()=>{s(),r==null||r()}},[a,e,t,o])}const me=({isFocused:a,className:e="",style:t={}})=>{if(!a)return null;const o={position:"absolute",top:0,left:0,right:0,bottom:0,pointerEvents:"none",border:"2px solid var(--panel-focus-border-color, #0066cc)",borderRadius:"4px",boxShadow:"0 0 0 1px var(--panel-focus-shadow-color, rgba(0, 102, 204, 0.2))",zIndex:1e3,transition:"opacity 0.15s ease-in-out",...t};return x.jsx("div",{className:`panel-focus-indicator ${e}`,style:o,role:"presentation","aria-hidden":"true"})},M=({value:a,onChange:e,placeholder:t="> Type a command...",onClose:o,onEnter:s})=>{const{theme:r}=_.useTheme(),n=l.useRef(null);l.useEffect(()=>{n.current&&n.current.focus()},[]);const i=y=>{switch(y.key){case"Enter":y.preventDefault(),s==null||s();break;case"Escape":y.preventDefault(),o();break}};return x.jsx("div",{style:{padding:"0",borderBottom:`1px solid ${r.colors.border}`,backgroundColor:r.colors.background},children:x.jsx("input",{ref:n,type:"text",value:a,onChange:y=>e(y.target.value),onKeyDown:i,placeholder:t,style:{width:"100%",padding:"16px 20px",fontSize:"16px",fontFamily:r.fonts.monospace,backgroundColor:"transparent",border:"none",outline:"none",color:r.colors.text,caretColor:r.colors.primary},autoComplete:"off",autoCorrect:"off",autoCapitalize:"off",spellCheck:!1})})},F=l.forwardRef(({command:a,isSelected:e,onClick:t,onMouseEnter:o},s)=>{const{theme:r}=_.useTheme(),{label:n,description:i,icon:y,shortcut:g}=a,[h,u]=l.useState(!1);return x.jsxs("div",{ref:s,onClick:t,onMouseEnter:()=>{u(!0),o()},onMouseLeave:()=>u(!1),style:{padding:"10px 16px",cursor:"pointer",backgroundColor:e||h?r.colors.backgroundSecondary:"transparent",borderLeft:e||h?`3px solid ${r.colors.primary}`:"3px solid transparent",transition:"all 0.1s ease",display:"flex",alignItems:"center",gap:"12px"},onMouseDown:f=>{f.preventDefault()},children:[y&&x.jsx("div",{style:{flexShrink:0,width:"20px",height:"20px",display:"flex",alignItems:"center",justifyContent:"center",fontSize:"16px",color:e||h?r.colors.primary:r.colors.textSecondary},children:y}),x.jsxs("div",{style:{flex:1,minWidth:0},children:[x.jsx("div",{style:{fontSize:"14px",fontWeight:500,color:e||h?r.colors.text:r.colors.textSecondary,marginBottom:i?"2px":0},children:n}),i&&x.jsx("div",{style:{fontSize:"12px",color:r.colors.textMuted,overflow:"hidden",textOverflow:"ellipsis",whiteSpace:"nowrap"},children:i})]}),g&&x.jsx("div",{style:{flexShrink:0,fontSize:"11px",color:r.colors.textMuted,padding:"2px 8px",backgroundColor:r.colors.background,border:`1px solid ${r.colors.border}`,borderRadius:"4px",fontFamily:r.fonts.monospace},children:g})]})});F.displayName="CommandItem";const K=({commands:a,selectedIndex:e,onSelect:t,onHover:o,maxResults:s=10})=>{const{theme:r}=_.useTheme(),n=l.useRef(null),i=l.useRef(null),y=a.slice(0,s);l.useEffect(()=>{if(i.current&&n.current){const u=i.current,f=n.current,m=u.offsetTop,d=m+u.offsetHeight,c=f.scrollTop,w=f.clientHeight;m<c?f.scrollTop=m-8:d>c+w&&(f.scrollTop=d-w+8)}},[e]);const g=y.reduce((u,f,m)=>{const d=f.category||"Other";return u[d]||(u[d]=[]),u[d].push({command:f,index:m}),u},{}),h=Object.keys(g).sort((u,f)=>u==="Other"?1:f==="Other"?-1:u.localeCompare(f));return x.jsxs("div",{ref:n,style:{overflowY:"auto",maxHeight:"400px",padding:"8px 0"},children:[h.map(u=>x.jsxs("div",{children:[h.length>1&&x.jsx("div",{style:{padding:"8px 16px 4px",fontSize:"11px",fontWeight:600,textTransform:"uppercase",color:r.colors.textMuted,letterSpacing:"0.5px"},children:u}),g[u].map(({command:f,index:m})=>x.jsx(F,{command:f,isSelected:m===e,onClick:()=>t(f),onMouseEnter:()=>o(m),ref:m===e?i:void 0},f.id))]},u)),a.length>s&&x.jsxs("div",{style:{padding:"8px 16px",fontSize:"12px",color:r.colors.textMuted,textAlign:"center",borderTop:`1px solid ${r.colors.border}`},children:["Showing ",s," of ",a.length," results"]})]})},ye=({commandPalette:a,config:e})=>{const{theme:t}=_.useTheme(),o=l.useRef(null),{isOpen:s,close:r,query:n,setQuery:i,filteredCommands:y,selectedIndex:g,setSelectedIndex:h,executeSelected:u}=a;if(l.useEffect(()=>{if(!s)return;const d=w=>{o.current&&!o.current.contains(w.target)&&r()},c=setTimeout(()=>{document.addEventListener("mousedown",d)},100);return()=>{clearTimeout(c),document.removeEventListener("mousedown",d)}},[s,r]),!s)return null;const f=(e==null?void 0:e.maxHeight)||"50vh",m=(e==null?void 0:e.placeholder)||"> Type a command...";return x.jsxs(x.Fragment,{children:[x.jsx("div",{style:{position:"fixed",inset:0,backgroundColor:"rgba(0, 0, 0, 0.4)",backdropFilter:"blur(2px)",zIndex:999},onClick:r}),x.jsxs("div",{ref:o,className:e==null?void 0:e.className,style:{position:"fixed",bottom:0,left:0,right:0,maxHeight:f,backgroundColor:t.colors.surface,borderTop:`1px solid ${t.colors.border}`,boxShadow:t.shadows[2],zIndex:1e3,display:"flex",flexDirection:"column-reverse",...e==null?void 0:e.style},children:[x.jsxs("div",{children:[x.jsx(M,{value:n,onChange:i,placeholder:m,onClose:r,onEnter:u}),x.jsxs("div",{style:{padding:"8px 16px",borderTop:`1px solid ${t.colors.border}`,display:"flex",gap:"16px",fontSize:"12px",color:t.colors.textMuted,backgroundColor:t.colors.background},children:[x.jsxs("span",{children:[x.jsx("kbd",{style:{padding:"2px 6px",backgroundColor:t.colors.backgroundSecondary,borderRadius:"3px",border:`1px solid ${t.colors.border}`},children:"Enter"})," Execute"]}),x.jsxs("span",{children:[x.jsx("kbd",{style:{padding:"2px 6px",backgroundColor:t.colors.backgroundSecondary,borderRadius:"3px",border:`1px solid ${t.colors.border}`},children:"Esc"})," Close"]})]})]}),y.length>0&&x.jsx(K,{commands:y,selectedIndex:g,onSelect:d=>{a.executeCommand(d.id)},onHover:h,maxResults:e==null?void 0:e.maxResults}),n&&y.length===0&&x.jsxs("div",{style:{padding:"24px 16px",color:t.colors.textMuted,textAlign:"center",fontSize:"14px"},children:['No commands found for "',n,'"']})]})]})};class ${constructor(){W(this,"commands",new Map);W(this,"listeners",new Set)}registerCommands(e){e.forEach(t=>{this.commands.set(t.id,t)}),this.notifyListeners()}registerCommand(e){this.commands.set(e.id,e),this.notifyListeners()}unregisterCommands(e){e.forEach(t=>{this.commands.delete(t)}),this.notifyListeners()}unregisterCommand(e){this.commands.delete(e),this.notifyListeners()}getCommands(e){const t=Array.from(this.commands.values());return e?t.filter(o=>o.isAvailable?o.isAvailable(e):!0):t}getCommand(e){return this.commands.get(e)}async executeCommand(e,t){var s,r;const o=this.commands.get(e);if(!o){console.warn(`Command not found: ${e}`);return}if(o.isAvailable&&!o.isAvailable(t)){console.warn(`Command not available: ${e}`);return}try{await o.execute(t),(s=t.events)==null||s.emit({type:"command:executed",source:"command-palette",timestamp:Date.now(),payload:{commandId:o.id,commandLabel:o.label}})}catch(n){console.error(`Error executing command ${e}:`,n),(r=t.events)==null||r.emit({type:"command:error",source:"command-palette",timestamp:Date.now(),payload:{commandId:o.id,error:n instanceof Error?n.message:String(n)}})}}searchCommands(e,t){const o=this.getCommands(t);if(!e.trim())return this.sortCommands(o);const s=e.toLowerCase();return o.map(n=>{var y,g;let i=0;return n.label.toLowerCase()===s?i+=1e3:n.label.toLowerCase().startsWith(s)?i+=500:n.label.toLowerCase().includes(s)&&(i+=250),(y=n.description)!=null&&y.toLowerCase().includes(s)&&(i+=100),n.keywords&&n.keywords.some(u=>u.toLowerCase().includes(s))&&(i+=150),(g=n.category)!=null&&g.toLowerCase().includes(s)&&(i+=50),i>0&&n.priority&&(i+=n.priority),{command:n,score:i}}).filter(n=>n.score>0).sort((n,i)=>i.score-n.score).map(n=>n.command)}sortCommands(e){return e.sort((t,o)=>{const s=(o.priority||0)-(t.priority||0);if(s!==0)return s;const r=t.category||"",n=o.category||"",i=r.localeCompare(n);return i!==0?i:t.label.localeCompare(o.label)})}subscribe(e){return this.listeners.add(e),()=>{this.listeners.delete(e)}}clear(){this.commands.clear(),this.notifyListeners()}get size(){return this.commands.size}notifyListeners(){this.listeners.forEach(e=>e())}}let z=null;function ge(){return z||(z=new $),z}function he(){z=null}function be({context:a,commands:e=[],keyboard:t={key:" ",altKey:!0},config:o={},registry:s}){const[r,n]=l.useState(!1),[i,y]=l.useState(""),[g,h]=l.useState(0),[u,f]=l.useState([]),m=l.useMemo(()=>s||new $,[s]),d=l.useMemo(()=>({...a,closeCommandPalette:()=>n(!1)}),[a]);l.useEffect(()=>{let p=!0;const S=m.subscribe(()=>{if(p){const A=m.getCommands(d);f(A)}});if(e.length>0)m.registerCommands(e);else{const A=m.getCommands(d);f(A)}return()=>{p=!1,S()}},[m]);const c=l.useMemo(()=>(o.fuzzySearch===!1,m.searchCommands(i,d)),[i,m,d,o.fuzzySearch]);l.useEffect(()=>{h(0)},[c]);const w=l.useCallback(()=>{var p;n(!0),y(""),h(0),(p=a.events)==null||p.emit({type:"command-palette:opened",source:"command-palette",timestamp:Date.now(),payload:{}})},[a.events]),P=l.useCallback(()=>{var p;n(!1),y(""),h(0),(p=a.events)==null||p.emit({type:"command-palette:closed",source:"command-palette",timestamp:Date.now(),payload:{}})},[a.events]),R=l.useCallback(()=>{r?P():w()},[r,w,P]),I=l.useCallback(async p=>{await m.executeCommand(p,d),P()},[m,d,P]),E=l.useCallback(()=>{h(p=>{const S=o.maxResults||c.length,A=Math.min(c.length,S)-1;return p<A?p+1:0})},[c.length,o.maxResults]),L=l.useCallback(()=>{h(p=>{const S=o.maxResults||c.length,A=Math.min(c.length,S)-1;return p>0?p-1:A})},[c.length,o.maxResults]),b=l.useCallback(async()=>{const p=c[0];p&&await I(p.id)},[c,I]),v=l.useCallback(p=>{m.registerCommands(p)},[m]),C=l.useCallback(p=>{m.unregisterCommands(p)},[m]),k=l.useCallback(p=>{const{key:S=" ",altKey:A=!0,ctrlKey:oe=!1,metaKey:se=!1,shiftKey:re=!1}=t,ne=p.altKey===A&&p.ctrlKey===oe&&p.metaKey===se&&p.shiftKey===re;if((S===" "?p.code==="Space":p.key===S)&&ne){const D=p.target;if(D.tagName==="INPUT"||D.tagName==="TEXTAREA"||D.isContentEditable)return;p.preventDefault(),R()}},[t,R]);return l.useEffect(()=>(window.addEventListener("keydown",k),()=>window.removeEventListener("keydown",k)),[k]),{isOpen:r,open:w,close:P,toggle:R,query:i,setQuery:y,filteredCommands:c,executeCommand:I,selectedIndex:g,setSelectedIndex:h,selectNext:E,selectPrevious:L,executeSelected:b,commands:u,registerCommands:v,unregisterCommands:C}}const V=[{id:"panel.focus.left",label:"Focus Left Panel",description:"Set focus to the left panel",icon:"◀",category:"Panel Navigation",shortcut:"Alt+1",priority:100,keywords:["left","sidebar","focus","switch"],execute:a=>{a.setFocus("left")},isAvailable:a=>a.focusedPanel!=="left"},{id:"panel.focus.middle",label:"Focus Middle Panel",description:"Set focus to the middle panel",icon:"▣",category:"Panel Navigation",shortcut:"Alt+2",priority:100,keywords:["middle","center","main","focus","switch"],execute:a=>{a.setFocus("middle")},isAvailable:a=>a.focusedPanel!=="middle"},{id:"panel.focus.right",label:"Focus Right Panel",description:"Set focus to the right panel",icon:"▶",category:"Panel Navigation",shortcut:"Alt+3",priority:100,keywords:["right","sidebar","focus","switch"],execute:a=>{a.setFocus("right")},isAvailable:a=>a.focusedPanel!=="right"},{id:"panel.toggle.left",label:"Toggle Left Panel",description:"Expand or collapse the left panel",icon:"◀◀",category:"Panel Control",keywords:["toggle","left","collapse","expand","hide","show"],priority:80,execute:a=>{var e;(e=a.events)==null||e.emit({type:"panel:toggle",source:"command-palette",timestamp:Date.now(),payload:{panelId:"left"}})}},{id:"panel.toggle.right",label:"Toggle Right Panel",description:"Expand or collapse the right panel",icon:"▶▶",category:"Panel Control",keywords:["toggle","right","collapse","expand","hide","show"],priority:80,execute:a=>{var e;(e=a.events)==null||e.emit({type:"panel:toggle",source:"command-palette",timestamp:Date.now(),payload:{panelId:"right"}})}},{id:"panel.collapse.all",label:"Collapse All Panels",description:"Collapse all side panels to maximize middle panel",icon:"⬌",category:"Panel Control",keywords:["collapse","hide","all","maximize","focus mode"],priority:70,execute:a=>{var e;(e=a.events)==null||e.emit({type:"panel:collapse-all",source:"command-palette",timestamp:Date.now(),payload:{}})}},{id:"panel.expand.all",label:"Expand All Panels",description:"Expand all side panels to default layout",icon:"⬍",category:"Panel Control",keywords:["expand","show","all","restore","default"],priority:70,execute:a=>{var e;(e=a.events)==null||e.emit({type:"panel:expand-all",source:"command-palette",timestamp:Date.now(),payload:{}})}},{id:"panel.refresh",label:"Refresh Panel Data",description:"Reload data for the currently focused panel",icon:"↻",category:"Panel Control",keywords:["refresh","reload","update","sync"],priority:60,execute:a=>{var t;const e=a.focusedPanel;e&&((t=a.events)==null||t.emit({type:"panel:refresh",source:"command-palette",timestamp:Date.now(),payload:{panelId:e}}))},isAvailable:a=>a.focusedPanel!==null},{id:"panel.reset.layout",label:"Reset Panel Layout",description:"Reset panel sizes to default layout",icon:"⟲",category:"Panel Control",keywords:["reset","layout","default","restore"],priority:50,execute:a=>{var e;(e=a.events)==null||e.emit({type:"panel:reset-layout",source:"command-palette",timestamp:Date.now(),payload:{}})}}];function we(){return V}const B={name:"toggle_panel",description:"Collapse or expand a side panel to give more space to the main content area.",inputs:{type:"object",properties:{panel:{type:"string",enum:["left","right"],description:'Which panel to toggle: "left" or "right"'}},required:["panel"]},outputs:{type:"object",properties:{success:{type:"boolean"},panel:{type:"string"},action:{type:"string"}}},tags:["panel","layout","toggle","collapse","expand","sidebar"],tool_call_template:{call_template_type:"panel_event",event_type:"panel:toggle"}},J={name:"collapse_all_panels",description:"Collapse both left and right panels to maximize the main content area. Useful for focus mode.",inputs:{type:"object",properties:{},required:[]},outputs:{type:"object",properties:{success:{type:"boolean"},action:{type:"string"}}},tags:["panel","layout","collapse","focus","maximize"],tool_call_template:{call_template_type:"panel_event",event_type:"panel:collapse-all"}},G={name:"expand_all_panels",description:"Expand both left and right panels to show all content. Restores the default layout.",inputs:{type:"object",properties:{},required:[]},outputs:{type:"object",properties:{success:{type:"boolean"},action:{type:"string"}}},tags:["panel","layout","expand","restore","show"],tool_call_template:{call_template_type:"panel_event",event_type:"panel:expand-all"}},H={name:"switch_panel",description:"Change which content is displayed in a panel slot (left, middle, or right).",inputs:{type:"object",properties:{slot:{type:"string",enum:["left","middle","right"],description:'Which slot to change: "left", "middle", or "right"'},panel:{type:"string",description:"The panel ID to display in the slot"}},required:["slot","panel"]},outputs:{type:"object",properties:{success:{type:"boolean"},slot:{type:"string"},panel:{type:"string"}}},tags:["panel","layout","switch","navigation","view"],tool_call_template:{call_template_type:"panel_event",event_type:"panel:switch"}},X={name:"focus_panel",description:"Set focus to a specific panel slot for keyboard navigation.",inputs:{type:"object",properties:{slot:{type:"string",enum:["left","middle","right"],description:'Which slot to focus: "left", "middle", or "right"'}},required:["slot"]},outputs:{type:"object",properties:{success:{type:"boolean"},slot:{type:"string"}}},tags:["panel","focus","navigation","keyboard"],tool_call_template:{call_template_type:"panel_event",event_type:"panel:focus"}},Y={name:"reset_layout",description:"Reset panel sizes to the default layout configuration.",inputs:{type:"object",properties:{},required:[]},outputs:{type:"object",properties:{success:{type:"boolean"},action:{type:"string"}}},tags:["panel","layout","reset","default","restore"],tool_call_template:{call_template_type:"panel_event",event_type:"panel:reset-layout"}},Q=[B,J,G,H,X,Y],ke={id:"panel-layouts",name:"Panel Layouts",description:"Generic panel layout operations",tools:Q};function U(a,e,t={}){const{categoryPrefix:o="Panel Tools",basePriority:s=50,includePanelInCategory:r=!0}=t,n=r?`${o} > ${a.panelId}`:o,i=ve(a.inputs);return{id:`tool.${a.qualifiedName}`,label:xe(a.name),description:a.description,category:n,keywords:[...a.tags,a.panelId,"tool"],priority:s,execute:async y=>{var h;if(i){console.warn(`Tool "${a.qualifiedName}" requires parameters. Invoke programmatically with: registry.invokeTool('${a.qualifiedName}', { ... })`),(h=y.events)==null||h.emit({type:"tool:requires-parameters",source:"command-palette",timestamp:Date.now(),payload:{toolName:a.qualifiedName,inputs:a.inputs}});return}const g=await e.invokeTool(a.qualifiedName,{},"command-palette");g.success||console.error(`Tool invocation failed: ${g.error}`),y.closeCommandPalette()}}}function O(a,e={}){return a.getAllTools().map(o=>U(o,a,e))}function Ce(a,e={}){return()=>O(a,e)}function xe(a){return a.split("_").map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(" ")}function ve(a){return!(a.type!=="object"||!a.required||a.required.length===0)}function Se(a,e={}){return O(a,e)}function Pe(a){const{inputs:e}=a;if(e.type!=="object"||!e.properties)return[];const t=new Set(e.required||[]),o=[];for(const[s,r]of Object.entries(e.properties))o.push({name:s,type:r.type||"unknown",description:r.description||"",required:t.has(s),default:r.default,enum:r.enum});return o}function Z(a){const e={};if(a.inputs.properties)for(const[t,o]of Object.entries(a.inputs.properties)){const s=o;e[t]={type:s.type||"string",description:s.description,...s.enum&&{enum:s.enum}}}return{name:a.name,description:a.description,parameters:{type:"object",properties:e,required:a.inputs.required||[]}}}function Te(a){return{functionDeclarations:a.map(Z)}}function ee(a){return{type:"function",function:{name:a.name,description:a.description,parameters:a.inputs}}}function Re(a){return a.map(ee)}function te(a){return{name:a.name,description:a.description,input_schema:a.inputs}}function Ae(a){return a.map(te)}function ae(a){return{name:a.name,description:a.description,parameters:a.inputs}}function Ie(a){return a.map(ae)}function We(a,e={}){const{header:t="You have access to the following tools:",includeParameters:o=!0}=e,s=a.map(r=>{let n=`- ${r.name}: ${r.description}`;if(o&&r.inputs.properties){const i=Object.entries(r.inputs.properties).map(([y,g])=>{var f;const h=g,u=(f=r.inputs.required)!=null&&f.includes(y)?" (required)":"";return` - ${y}: ${h.description||h.type}${u}`}).join(`
2
+ `);i&&(n+=`
3
+ ${i}`)}return n});return`${t}
4
+
5
+ ${s.join(`
6
+
7
+ `)}`}Object.defineProperty(exports,"EditableConfigurablePanelLayout",{enumerable:!0,get:()=>j.EditableConfigurablePanelLayout});Object.defineProperty(exports,"ResponsiveConfigurablePanelLayout",{enumerable:!0,get:()=>j.ResponsiveConfigurablePanelLayout});Object.defineProperty(exports,"mapThemeToPanelVars",{enumerable:!0,get:()=>j.mapThemeToPanelVars});Object.defineProperty(exports,"mapThemeToTabVars",{enumerable:!0,get:()=>j.mapThemeToTabVars});exports.CommandInput=M;exports.CommandItem=F;exports.CommandList=K;exports.CommandPalette=ye;exports.CommandRegistryService=$;exports.FocusIndicator=me;exports.LocalStoragePersistenceAdapter=N;exports.LocalStorageWorkspaceAdapter=q;exports.WorkspaceLayoutService=T;exports.collapseAllPanelsTool=J;exports.createToolCommandsProvider=Ce;exports.expandAllPanelsTool=G;exports.focusPanelTool=X;exports.generateToolsSystemPrompt=We;exports.getGlobalCommandRegistry=ge;exports.getPanelCommands=we;exports.getToolParameterInfo=Pe;exports.layoutTools=Q;exports.layoutToolsMetadata=ke;exports.panelCommands=V;exports.resetGlobalCommandRegistry=he;exports.resetLayoutTool=Y;exports.switchPanelTool=H;exports.togglePanelTool=B;exports.toolToAIFunction=ae;exports.toolToAnthropicFormat=te;exports.toolToCommand=U;exports.toolToGeminiFunction=Z;exports.toolToOpenAIFunction=ee;exports.toolsToAIFunctions=Ie;exports.toolsToAnthropicFormat=Ae;exports.toolsToCommands=O;exports.toolsToGeminiFormat=Te;exports.toolsToOpenAIFormat=Re;exports.useCommandPalette=be;exports.usePanelFocus=ue;exports.usePanelFocusListener=fe;exports.usePanelKeyboardShortcuts=pe;exports.usePanelPersistence=ce;exports.useToolCommands=Se;exports.useWorkspace=de;
2
8
  //# sourceMappingURL=index.js.map