@supanadit/morse-web 0.9.1 → 0.9.2
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.
|
@@ -10,7 +10,7 @@ ${s}`}var Oo=class{messageListeners=new Set;statusListeners=new Set;onMessage(e)
|
|
|
10
10
|
|
|
11
11
|
This response is produced in the browser, with no pi process and no server, so you can iterate on the frontend (or a new frontend framework) freely.`,r=this.nextId("assistant");this.schedule(()=>{this.appendItem({kind:"assistant",id:r,at:Date.now(),text:"",thinking:"",streaming:!0,model:this.state.model?.name})},n),n+=40;for(let s of Kb(o)){let a=s;this.schedule(()=>{this.emit({type:"transcript/delta",payload:{id:r,text:a}})},n),n+=55}this.schedule(()=>{this.streaming=!1,this.updateItem({kind:"assistant",id:r,at:Date.now(),text:o,thinking:"",streaming:!1,model:this.state.model?.name}),this.emit({type:"session/state",payload:K(V({},this.state),{streaming:!1})}),this.emitActivity()},n+80)}appendItem(e){this.items=[...this.items,e],this.emit({type:"transcript/append",payload:e})}updateItem(e){this.items=this.items.map(n=>n.id===e.id?e:n),this.emit({type:"transcript/update",payload:e})}abortRun(){for(let e of this.timers)clearTimeout(e);this.timers.clear(),this.streaming&&(this.streaming=!1,this.emitActivity())}notify(e,n){this.emit({type:"notice",payload:{level:e,text:n,at:Date.now()}})}schedule(e,n){let i=setTimeout(()=>{this.timers.delete(i),this.disposed||e()},n);this.timers.add(i)}nextId(e){return this.counter+=1,`mock-${e}-${this.counter}`}emitActivity(){let e=this.sessions.filter(n=>this.hot.has(n.id)).slice(0,4).map(n=>({sessionKey:n.id,streaming:this.streaming,busy:!1,agentReady:!0,agentStarting:!1}));this.emit({type:"session/activity",payload:{sessions:e}})}emit(e){this.emitMessage(e)}},CI={isRepo:!0,root:"/mock/workspace",branch:"main",commits:[Ss("f1a2b3c4","Add the git panel to the browser host",["e2f3a4b5"],["HEAD -> main"],2),Ss("e2f3a4b5","Merge branch feature/graph",["d3e4f5a6","c4d5e6f7"],["origin/main"],5),Ss("d3e4f5a6","Wire the graph lanes",["b5c6d7e8"],[],8),Ss("c4d5e6f7","Fix the lane colours in light mode",["b5c6d7e8"],[],11),Ss("b5c6d7e8","Bump the protocol version",["a6b7c8d9"],["tag: v0.8.0"],26),Ss("a6b7c8d9","Initial commit",[],[],52)]};function Ss(t,e,n,i,o){return{hash:t,shortHash:t.slice(0,7),parents:n,refs:i,author:"Morse Dev",date:new Date(Date.now()-o*36e5).toISOString(),subject:e}}var EI={isRepo:!0,files:[{path:"README.md",status:" M"},{path:"package.json",status:" M"},{path:"packages/protocol/src/wire.ts",status:"A "},{path:"packages/ui-angular/src/app/core/markdown.ts",status:"??"}]},wI=["diff --git a/README.md b/README.md","index 1111111..2222222 100644","--- a/README.md","+++ b/README.md","@@ -1,4 +1,5 @@"," # Morse"," ","-An old line","+A new line","+A line that was added"," A line that stayed",""].join(`
|
|
12
12
|
`),SI=["AGENTS.md","README.md","package.json","packages/core/src/chat/service.ts","packages/core/src/domain.ts","packages/core/src/session/service.ts","packages/host-runtime/src/session-controller.ts","packages/protocol/src/wire.ts","packages/ui-angular/src/app/app.ts","packages/ui-angular/src/app/chat/chat-composer/chat-composer.ts","packages/ui-angular/src/app/core/markdown.ts","packages/ui-runtime/src/client.ts"],TI={"/mock":[{name:"home",path:"/mock/home"},{name:"projects",path:"/mock/projects"},{name:"workspace",path:"/mock/workspace"}],"/mock/home":[{name:"projects",path:"/mock/home/projects"}],"/mock/home/projects":[],"/mock/projects":[{name:"morse",path:"/mock/projects/morse"},{name:"other",path:"/mock/projects/other"}],"/mock/projects/morse":[{name:"packages",path:"/mock/projects/morse/packages"}],"/mock/projects/other":[],"/mock/projects/morse/packages":[],"/mock/workspace":[]};function DI(t){let e=typeof t=="string"&&t.trim().length>0?t.trim():Ts.cwd,n=e==="/mock"?void 0:e.slice(0,e.lastIndexOf("/"))||"/";return{path:e,parent:n,directories:TI[e]??[],isGitRepo:e==="/mock/projects/morse",canOpen:!0,roots:[{name:"mock",path:"/mock"},{name:"workspace",path:Ts.cwd}]}}function Kb(t){return t.match(/.{1,14}/g)??[]}function Qb(){return typeof location>"u"?!1:new URL(location.href).searchParams.get("scope")==="workspace"}function MI(){return typeof location>"u"?!1:new URL(location.href).searchParams.get("empty")==="1"}function Xb(){let t=Date.now(),e=[{id:"/mock/morse/2026-01-01_ui-overhaul.jsonl",title:"Sidebar overhaul: projects, sessions, composer",cwd:Ts.cwd,updatedAt:t-6e4,messageCount:12},{id:"/mock/morse/2026-01-01_scrollbar.jsonl",title:"Improve native scrollbar: compact and themed",cwd:Ts.cwd,updatedAt:t-7*6e4,messageCount:6}];return Qb()?e:[...e,{id:"/mock/morse/2026-01-01_providers.jsonl",title:"Add provider picker with context sizes",cwd:"/mock/morse",updatedAt:t-20*6e4,messageCount:24},{id:"/mock/morse/2026-01-01_greeting.jsonl",title:"Greeting",cwd:"/mock/morse",updatedAt:t-180*6e4,messageCount:2},{id:"/mock/eigen-morph/2026-01-01_manifest.jsonl",title:"Manifest report-worker untuk production",cwd:"/mock/eigen-morph",updatedAt:t-1560*6e4,messageCount:31}]}function Zb(){let t=new Map;for(let e of Xb()){let n=t.get(e.cwd);if(n){n.sessionCount+=1,n.lastUsedAt=Math.max(n.lastUsedAt,e.updatedAt);continue}t.set(e.cwd,{path:e.cwd,name:e.cwd.split("/").filter(Boolean).at(-1)??e.cwd,sessionCount:1,lastUsedAt:e.updatedAt})}return[...t.values()].sort((e,n)=>n.lastUsedAt-e.lastUsedAt)}function kI(){let t=Date.now(),e=["Plan:","","1. **Navigation** \u2014 projects \u2192 sessions, collapsible, with a session search and a project filter.","2. **Header** \u2014 session title, scope, status badge, `Compact`, and the sidebar fold.","3. **Composer** \u2014 model + thinking + send in one control row.","","Two shapes, because the hosts differ: the browser host is *global* (many projects), VS Code is scoped to the folders it has open.","","```ts","export class SessionNav {"," protected readonly scope = computed(() => this.morse.capabilities()?.scope ?? 'global');",""," protected readonly groups = computed(() => {",' return this.scope() === "global"'," ? this.projects().map((project) => ({ ... }))"," : [{ path: this.workspace().cwd, name: this.workspace().name, sessions }];"," });","}","```","","And a small overview of what each scope renders:","","| Host | Scope | Navigation shape |","|---|---|---|","| NestJS browser | `global` | projects \u2192 sessions |","| VS Code | `workspace` | one group (open folders) |","","See `docs/FRONTENDS.md` for the rule that frontends must read capabilities instead of guessing."].join(`
|
|
13
|
-
`);return[{kind:"user",id:"mock-seed-user-1",at:t-15e4,text:"Refactor the sidebar to match the reference, make it responsive, and render markdown properly."},{kind:"tool",id:"mock-seed-tool-1",at:t-14e4,name:"bash",title:"bash: ls packages/ui-angular/src/app",status:"ok",output:"app.css app.html app.ts chat/ core/ nav/",durationMs:12},{kind:"tool",id:"mock-seed-tool-2",at:t-138e3,name:"read",title:"read: packages/ui-angular/src/app/app.css",status:"ok",output:"42 lines, 4 media queries",durationMs:8},{kind:"tool",id:"mock-seed-tool-3",at:t-13e4,name:"edit",title:"edit: packages/ui-angular/src/app/nav/session-nav.ts",status:"ok",output:"+26 -7",durationMs:190},{kind:"tool",id:"mock-seed-tool-4",at:t-128e3,name:"edit",title:"edit: packages/ui-angular/src/app/app.css",status:"ok",output:"+18 -4",durationMs:140},{kind:"tool",id:"mock-seed-tool-5",at:t-1800,name:"bash",title:"bash: npm run build:ui",status:"running",output:"Application bundle generation complete. [1.2 seconds]"},{kind:"assistant",id:"mock-seed-assistant-1",at:t-1e5,text:e,thinking:"The webview is narrow, so the navigation has to become a drawer below ~760px instead of a second column.",streaming:!1,model:"Mock Model"},{kind:"notice",id:"mock-seed-notice-1",at:t-6e4,level:"info",text:"Everything is wired through the same wire protocol \u2014 try ?scope=workspace to see the VS Code shape."}]}function Jb(t={}){if(Yb())return new $d;let e=t.href??(typeof location<"u"?location.href:"http://localhost/"),n=new URL(e,"http://localhost/");if(t.forceMock===!0||n.searchParams.get("mock")==="1")return new Bd;let i=n.searchParams.get("server");if(i)return new Xa({url:i,WebSocketImpl:t.WebSocketImpl});let o=n.protocol==="https:",r=t.websocketPath??"/ws";return new Xa({url:`${o?"wss":"ws"}://${n.host}${r}`,WebSocketImpl:t.WebSocketImpl})}var Ui=class t{attached=O([]);pinned=O([]);live=O(null);pendingMentions=O([]);message=O(null);counter=0;images=this.attached.asReadonly();pins=this.pinned.asReadonly();livePreview=this.live.asReadonly();mentions=this.pendingMentions.asReadonly();notice=this.message.asReadonly();count=E(()=>this.attached().length+this.pinned().length+this.pendingMentions().length);async read(e){let n=[],i=[];for(let o of e){if(!o.type.startsWith("image/")){i.push(o.name);continue}let r=await vh(o);if(!r){i.push(o.name);continue}this.counter+=1,n.push({id:`attachment-${this.counter}`,name:o.name||`image-${this.counter}.png`,mimeType:o.type,data:r,bytes:o.size})}return{images:n,skipped:i}}add(e){e.length!==0&&this.attached.update(n=>[...n,...e])}async accept(e){let{images:n,skipped:i}=await this.read(e);return this.add(n),{attached:n.length,skipped:i}}addMentions(e){let n=e.map(i=>i.trim()).filter(i=>i.length>0);n.length!==0&&this.pendingMentions.update(i=>[...i,...n])}seed(e,n){e.length>0&&this.add(e.map((i,o)=>{this.counter+=1;let s=(i.mimeType.split("/")[1]?.toLowerCase()??"").replace(/[^a-z0-9]/g,"")||"png";return{id:`seed-${this.counter}`,name:o===0?`image.${s}`:`image-${o+1}.${s}`,mimeType:i.mimeType,data:i.data,bytes:Math.floor(i.data.length*3/4)}}));for(let i of n)this.pin({path:i.path,startLine:i.startLine,endLine:i.endLine})}setPinRange(e,n){this.pinned.update(i=>i.map(o=>o.id===e?K(V({},o),{startLine:n.startLine,endLine:n.endLine}):o))}pin(e,n){if(e.path.length===0)return"";if(e.startLine===void 0){let _=this.pinned().find(C=>C.path===e.path&&C.startLine===void 0);if(_!==void 0)return _.id;this.counter+=1;let x=`pin-${this.counter}`;return this.pinned.update(C=>[...C,K(V({},e),{id:x})]),x}let i=this.pinned(),o=e.startLine,r=e.endLine??e.startLine,s=new Set(n===void 0?[]:[n]),a,c=!0;for(;c;){c=!1;for(let _ of i){if(s.has(_.id)||_.path!==e.path||_.startLine===void 0)continue;let x=_.startLine,C=_.endLine??x;x<=r+1&&C+1>=o&&(o=Math.min(o,x),r=Math.max(r,C),s.add(_.id),a??=_.id,c=!0)}}this.counter+=1;let l={id:n??a??`pin-${this.counter}`,path:e.path,startLine:o,endLine:r>o?r:void 0},p=[],f=!1;for(let _ of i){if(s.has(_.id)){f||(p.push(l),f=!0);continue}p.push(_)}return f||p.push(l),this.pinned.set(p),l.id}removePin(e){this.pinned.update(n=>n.filter(i=>i.id!==e))}setLivePreview(e){if(e===null||e.path.length===0||e.startLine===void 0){this.live.set(null);return}let n=this.live();n&&n.path===e.path&&n.startLine===e.startLine&&n.endLine===e.endLine||this.live.set({id:"live-preview",path:e.path,startLine:e.startLine,endLine:e.endLine})}lockLivePreview(){let e=this.live();e&&(this.live.set(null),this.pin({path:e.path,startLine:e.startLine,endLine:e.endLine}))}remove(e){this.attached.update(n=>n.filter(i=>i.id!==e))}takeImages(){let e=this.attached().map(({data:n,mimeType:i})=>({data:n,mimeType:i}));return this.attached.set([]),e}takePins(){let e=this.pinned().map(({path:n,startLine:i,endLine:o})=>{let r={path:n};return i!==void 0&&(r.startLine=i),o!==void 0&&(r.endLine=o),r});return this.pinned.set([]),e}takeMentions(){let e=this.pendingMentions();return this.pendingMentions.set([]),e}clear(){this.attached.set([]),this.pinned.set([]),this.live.set(null),this.pendingMentions.set([])}say(e,n){this.message.set({level:e,text:n,at:Date.now()})}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function vh(t){return new Promise(e=>{if(typeof FileReader>"u"){e(void 0);return}let n=new FileReader;n.onerror=()=>e(void 0),n.onload=()=>{let i=n.result;if(typeof i!="string"){e(void 0);return}let o=i.indexOf(",");e(o===-1?void 0:i.slice(o+1))},n.readAsDataURL(t)})}var ex=new He("morse.transport",{providedIn:"root",factory:()=>Jb()});var tx={name:"@morse/ui-angular",version:"0.9.1"},NI=6e3,Ze=class t{transport=N(ex);destroyRef=N(pt);view=O(jd());client;actions;slowConnectionTimer;connection=E(()=>this.view().connection);connectionDetail=E(()=>this.view().connectionDetail);protocolVersion=E(()=>this.view().protocolVersion);frontend=E(()=>this.view().frontend);version=E(()=>this.frontend()?.version??tx.version);slowConnection=O(!1);capabilities=E(()=>this.view().capabilities);state=E(()=>this.view().state);items=E(()=>this.view().items);projects=E(()=>this.view().projects);sessions=E(()=>this.view().sessions);activity=E(()=>this.view().activity);sessionActivity=E(()=>{let e=new Map;for(let n of this.view().activity)e.set(n.sessionKey,n);return e});pendingInteraction=E(()=>this.view().pendingInteraction);lastNotice=E(()=>this.view().lastNotice);lastError=E(()=>this.view().lastError);agentReady=E(()=>this.view().state.agentReady);agentStarting=E(()=>this.view().state.agentStarting);agentError=E(()=>this.view().state.agentError);agentFailure=E(()=>this.view().state.agentFailure);running=E(()=>this.view().state.streaming||this.view().state.busy);workspace=E(()=>this.view().state.workspace);model=E(()=>this.view().state.model);thinkingLevel=E(()=>this.view().state.thinkingLevel);availableModels=E(()=>this.view().state.availableModels);availableThinkingLevels=E(()=>this.view().state.availableThinkingLevels);availableCommands=E(()=>this.view().state.availableCommands);usage=E(()=>this.view().state.usage);hasOlderHistory=E(()=>this.view().state.hasOlderHistory===!0);loadingOlderHistory=E(()=>this.view().state.loadingOlderHistory===!0);constructor(){this.client=Bb({transport:this.transport,frontend:tx}),this.actions=this.client.actions;let e=this.client.getView();this.view.set(e),this.trackSlowConnection(e.connection),this.client.subscribe(n=>{this.view.set(n),this.trackSlowConnection(n.connection)}),this.destroyRef.onDestroy(()=>{this.clearSlowConnectionTimer(),this.client.dispose()})}trackSlowConnection(e){if(e!=="connecting"){this.clearSlowConnectionTimer(),this.slowConnection.set(!1);return}this.slowConnectionTimer===void 0&&(this.slowConnectionTimer=setTimeout(()=>{this.slowConnection.set(!0)},NI))}clearSlowConnectionTimer(){this.slowConnectionTimer!==void 0&&(clearTimeout(this.slowConnectionTimer),this.slowConnectionTimer=void 0)}prompt(e,n="new",i,o){this.actions.prompt(e,n,i,o)}editMessage(e,n){this.actions.editMessage(e,n)}forkMessage(e){this.actions.forkMessage(e)}onComposerSeed(e){return this.client.onComposerSeed(e)}onContextSelection(e){return this.client.onContextSelection(e)}onContextSelectionLive(e){return this.client.onContextSelectionLive(e)}ready(){this.actions.ready()}abort(){this.actions.abort()}newSession(e){this.actions.newSession(e)}openProject(e){this.actions.openProject(e)}requestProjects(){this.actions.requestProjects()}activateSession(e,n){this.actions.activateSession(e,n)}closeSession(e){this.actions.closeSession(e)}deleteSession(e){this.actions.deleteSession(e)}compactSession(e){this.actions.compactSession(e)}loadOlderHistory(){this.actions.loadOlderHistory()}loadSession(e){this.actions.loadSession(e)}requestSessions(){this.actions.requestSessions()}refreshCommands(){this.actions.refreshCommands()}setModel(e,n){this.actions.setModel(e,n)}setThinkingLevel(e){this.actions.setThinkingLevel(e)}respond(e){this.actions.respond(e)}hostCommand(e,n){this.actions.hostCommand(e,n)}requestHostCommand(e,n){return this.actions.hostCommand(e,n)}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};var Hd=class t{items=O([]);counter=0;queued=this.items.asReadonly();count=E(()=>this.items().length);head(e){return this.items().find(n=>n.sessionId===e)}enqueue(e,n){this.counter+=1;let i=`queued-${this.counter}`;return this.items.update(o=>[...o,K(V({},e),{id:i,sessionId:n})]),i}remove(e){this.items.update(n=>n.filter(i=>i.id!==e))}shift(e){let n=this.head(e);if(n!==void 0)return this.remove(n.id),n}clear(){this.items.set([])}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};var sx="morse.navigation.collapsed",ax="morse.git.open",cx="morse.git.expanded",bh="morse.git.width",OI=220,PI=1600,lx="morse.git.changesHeight",nx="morse.git.changesCollapsed",ix="morse.git.historyCollapsed",AI=48,RI=1200,dx="morse.explorer.height",LI=140,FI=720;function VI(){try{return globalThis.localStorage?.getItem(sx)==="1"}catch{return!1}}function jI(t){try{globalThis.localStorage?.setItem(sx,t?"1":"0")}catch{}}function $I(){try{return globalThis.localStorage?.getItem(ax)==="1"}catch{return!1}}function BI(t){try{globalThis.localStorage?.setItem(ax,t?"1":"0")}catch{}}function HI(){try{return globalThis.localStorage?.getItem(cx)==="1"}catch{return!1}}function UI(t){try{globalThis.localStorage?.setItem(cx,t?"1":"0")}catch{}}function ux(t){return Math.round(Math.min(RI,Math.max(AI,t)))}function px(t){return Math.round(Math.min(PI,Math.max(OI,t)))}function zI(){try{let t=globalThis.localStorage?.getItem(bh);if(t==null)return;let e=Number.parseInt(t,10);return Number.isFinite(e)?px(e):void 0}catch{return}}function GI(t){try{globalThis.localStorage?.setItem(bh,String(t))}catch{}}function qI(){try{let t=globalThis.localStorage?.getItem(lx);if(t==null)return;let e=Number.parseInt(t,10);return Number.isFinite(e)?ux(e):void 0}catch{return}}function WI(t){try{globalThis.localStorage?.setItem(lx,String(t))}catch{}}function ox(t){try{return globalThis.localStorage?.getItem(t)==="1"}catch{return!1}}function rx(t,e){try{globalThis.localStorage?.setItem(t,e?"1":"0")}catch{}}function fx(t){return Math.round(Math.min(FI,Math.max(LI,t)))}function YI(){try{let t=globalThis.localStorage?.getItem(dx);if(t==null)return;let e=Number.parseInt(t,10);return Number.isFinite(e)?fx(e):void 0}catch{return}}function KI(t){try{globalThis.localStorage?.setItem(dx,String(t))}catch{}}var Ht=class t{navigationVisible=O(!1);navigationOpen=this.navigationVisible.asReadonly();collapsed=O(VI());navigationCollapsed=this.collapsed.asReadonly();gitPanel=O($I());gitPanelOpen=this.gitPanel.asReadonly();gitExpanded=O(HI());gitPanelExpanded=this.gitExpanded.asReadonly();gitWidthSignal=O(zI());gitPanelWidth=this.gitWidthSignal.asReadonly();changesHeightSignal=O(qI());gitChangesHeight=this.changesHeightSignal.asReadonly();changesCollapsedSignal=O(ox(nx));gitChangesCollapsed=this.changesCollapsedSignal.asReadonly();historyCollapsedSignal=O(ox(ix));gitHistoryCollapsed=this.historyCollapsedSignal.asReadonly();explorer=O(YI());explorerHeight=this.explorer.asReadonly();projectPicker=O(!1);projectPickerOpen=this.projectPicker.asReadonly();about=O(!1);aboutOpen=this.about.asReadonly();shortcuts=O(!1);shortcutsOpen=this.shortcuts.asReadonly();projectFilter=O(!1);projectFilterOpen=this.projectFilter.asReadonly();promptTemplate=O(!1);promptTemplateOpen=this.promptTemplate.asReadonly();compactPrompt=O(void 0);compactConfirmOpen=E(()=>this.compactPrompt()!==void 0);compactInstructions=E(()=>this.compactPrompt()?.instructions);modalOpen=E(()=>this.about()||this.shortcuts()||this.projectPicker()||this.projectFilter()||this.promptTemplate()||this.compactPrompt()!==void 0);toggleNavigation(){this.navigationVisible.update(e=>!e)}openNavigation(){this.navigationVisible.set(!0)}closeNavigation(){this.navigationVisible.set(!1)}toggleNavigationCollapsed(){this.setCollapsed(!this.collapsed())}unfoldNavigation(){this.setCollapsed(!1)}setCollapsed(e){this.collapsed.set(e),jI(e)}toggleGitPanel(){this.setGitPanel(!this.gitPanel())}closeGitPanel(){this.setGitPanel(!1)}setGitPanel(e){this.gitPanel.set(e),BI(e)}toggleGitPanelExpanded(){this.setGitExpanded(!this.gitExpanded())}setGitExpanded(e){this.gitExpanded.set(e),UI(e)}toggleGitChanges(){this.changesCollapsedSignal.update(e=>!e),rx(nx,this.changesCollapsedSignal())}toggleGitHistory(){this.historyCollapsedSignal.update(e=>!e),rx(ix,this.historyCollapsedSignal())}setGitChangesHeight(e,n=!0){let i=ux(e);this.changesHeightSignal.set(i),n&&WI(i)}setGitPanelWidth(e,n=!0){let i=px(e);this.gitWidthSignal.set(i),n&&GI(i)}resetGitPanelWidth(){this.gitWidthSignal.set(void 0);try{globalThis.localStorage?.removeItem(bh)}catch{}}setExplorerHeight(e){let n=fx(e);this.explorer.set(n),KI(n)}openAbout(){this.about.set(!0)}closeAbout(){this.about.set(!1)}openShortcuts(){this.shortcuts.set(!0)}closeShortcuts(){this.shortcuts.set(!1)}toggleShortcuts(){this.shortcuts.update(e=>!e)}openProjectFilter(){this.projectFilter.set(!0)}closeProjectFilter(){this.projectFilter.set(!1)}setPromptTemplateOpen(e){this.promptTemplate.set(e)}openProjectPicker(){this.projectPicker.set(!0)}closeProjectPicker(){this.projectPicker.set(!1)}requestCompact(e){this.compactPrompt.set(e?{instructions:e}:{})}closeCompactPrompt(){this.compactPrompt.set(void 0)}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};var Ja=[{id:"session.new",group:"Session",label:"New session",detail:"The sidebar button, on the keyboard \u2014 and on a browser host it still asks which folder first.",binding:{key:"n",mod:!0,alt:!0}},{id:"session.search",group:"Session",label:"Focus the session search",detail:"Opens the sidebar when the layout hid it, and puts the caret in the field. In the prompt, `/` opens the command palette instead.",binding:{key:"/"}},{id:"project.filter",group:"Navigate",label:"Change project focus",detail:"Narrows the sidebar to one project. Only a host with several projects has this.",binding:{key:"p",mod:!0,alt:!0},overlay:!0},{id:"view.git",group:"Navigate",label:"Toggle the git panel",detail:"Shows or hides the history and graph for the active project. The browser host only \u2014 VS Code has its own Source Control view.",binding:{key:"g",mod:!0,alt:!0},overlay:!0,whileTyping:!0},{id:"model.pick",group:"Model",label:"Change model",detail:"Opens the model chooser above the prompt.",binding:{key:"m",mod:!0,alt:!0},overlay:!0,whileTyping:!0},{id:"thinking.pick",group:"Model",label:"Change thinking level",detail:"Opens the reasoning-level chooser next to the model.",binding:{key:"t",mod:!0,alt:!0},overlay:!0,whileTyping:!0},{id:"context.compact",group:"Context",label:"Compact the conversation",detail:"Asks first: pi replaces what it remembers with a summary.",binding:{key:"c",mod:!0,alt:!0},overlay:!0,whileTyping:!0},{id:"prompt.send",group:"Typing",label:"Send the prompt",detail:"While the prompt has the caret. During a run, the same key steers the agent instead.",keys:"Enter"},{id:"prompt.newline",group:"Typing",label:"New line",detail:"The prompt grows with the text rather than sending it.",keys:"Shift+Enter"},{id:"prompt.mention",group:"Typing",label:"Mention a file",detail:"Opens the picker that inserts an @path mention.",keys:"@"},{id:"prompt.commands",group:"Typing",label:"Command palette",detail:"The slash commands Morse and pi understand, filtered as you type.",keys:"/"},{id:"help.shortcuts",group:"Help",label:"This list",detail:"Opens and closes these rows, outside a text field.",binding:{key:"?"},overlay:!0}];function ec(t){return"binding"in t}function mx(){let t=globalThis.navigator;return/mac|iphone|ipad/i.test(t?.userAgent??"")}function hx(t,e=mx()){let n=[];return t.mod===!0&&n.push(e?"\u2318":"Ctrl"),t.alt===!0&&n.push(e?"\u2325":"Alt"),n.push(t.key.length===1&&/[a-z]/.test(t.key)?t.key.toUpperCase():t.key),e?n.join(""):n.join("+")}var An=class t{shell=N(Ht);handlers=new Map;revision=O(0);catalog=Ja;available=E(()=>{this.revision();let e=new Map;for(let n of Ja){if(!ec(n))continue;let i=this.handlers.get(n.id);e.set(n.id,i!==void 0&&(i.enabled?.()??!0))}return e});constructor(){let e=globalThis.document;e&&(e.addEventListener("keydown",this.onKeydown,!0),N(pt).onDestroy(()=>e.removeEventListener("keydown",this.onKeydown,!0)))}bind(e,n,i){let o={run:n,enabled:i};return this.handlers.set(e,o),this.bump(),()=>{this.handlers.get(e)===o&&(this.handlers.delete(e),this.bump())}}bump(){this.revision.update(e=>e+1)}onKeydown=e=>{if(e.defaultPrevented||e.isComposing||e.getModifierState?.("AltGraph")===!0)return;let n=Ja.find(o=>ec(o)&&ZI(o.binding,e));if(n===void 0||n.whileTyping!==!0&&QI(e.target)||n.overlay===!0&&this.shell.modalOpen()&&!(n.id==="help.shortcuts"&&this.shell.shortcutsOpen()))return;let i=this.handlers.get(n.id);i===void 0||i.enabled!==void 0&&!i.enabled()||(e.preventDefault(),i.run())};static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function ZI(t,e){return e.key.toLowerCase()!==t.key.toLowerCase()||t.mod===!0!==(mx()?e.metaKey:e.ctrlKey)?!1:t.alt===!0===e.altKey}function QI(t){let e=t;if(e===null||typeof e.tagName!="string")return!1;let n=e.tagName.toLowerCase();return n==="input"||n==="textarea"||n==="select"||e.isContentEditable===!0}var XI=10*1024*1024,Ds=class t{morse=N(Ze);available=E(()=>this.morse.capabilities()?.fileUpload===!0);async upload(e){let n=[],i=[];for(let o of e){if(o.size>XI){i.push(o.name);continue}let r=await vh(o);if(!r){i.push(o.name);continue}let s=await this.morse.requestHostCommand("uploadFile",{name:o.name,mimeType:o.type,data:r}),a=typeof s?.path=="string"?s.path:void 0;if(!a){i.push(o.name);continue}n.push({path:a,name:o.name,bytes:typeof s?.bytes=="number"?s.bytes:o.size})}return{added:n,failed:i}}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function xh(t){if(t==="??")return"U";if(t.includes("U")||t==="AA"||t==="DD")return"C";if(t.includes("R")||t.includes("C"))return"R";if(t.includes("D"))return"D";if(t.includes("A"))return"A";if(t.includes("M")||t.includes("T"))return"M"}function gx(t){if(typeof t!="object"||t===null)return;let e=t;return e.isRepo!==!0?typeof e.isRepo=="boolean"?{isRepo:!1,files:[]}:void 0:{isRepo:!0,files:Array.isArray(e.files)?e.files.map(JI).filter(i=>i!==void 0):[]}}function Ud(t){let e=new Map;for(let n of t?.files??[]){let i=xh(n.status);i!==void 0&&e.set(n.path,i)}return e}function JI(t){if(typeof t!="object"||t===null)return;let e=t,n=e.path,i=e.status;if(!(typeof n!="string"||typeof i!="string"))return{path:n,status:i}}var eN=4e3,zi=class t{morse=N(Ze);cache=O([]);loading=O(!1);statuses=O(void 0);failure=O(void 0);loadedFor;inFlight=!1;files=this.cache.asReadonly();busy=this.loading.asReadonly();status=this.statuses.asReadonly();error=this.failure.asReadonly();available=E(()=>this.morse.capabilities()?.filePicker===!0);constructor(){se(()=>{if(!this.available())return;let e=this.morse.workspace().cwd;this.ensureLoaded(this.loadedFor!==void 0&&this.loadedFor!==e)}),se(e=>{if(!this.available())return;let n=setInterval(()=>{typeof document<"u"&&document.hidden||this.ensureLoaded(!0,!0)},eN);e(()=>clearInterval(n))})}refresh(){this.ensureLoaded(!0)}ensureLoaded(e=!1,n=!1){let i=this.morse.workspace().cwd;i.length===0||this.inFlight||!e&&this.loadedFor===i||(this.inFlight=!0,n||(this.loading.set(!0),this.failure.set(void 0)),Promise.all([this.morse.requestHostCommand("listFiles",e?{fresh:!0}:void 0),this.morse.requestHostCommand("gitStatus")]).then(([o,r])=>{if(this.morse.workspace().cwd!==i)return;let s=tN(o);if(s===void 0){this.failure.set("Could not list this project.");return}this.loadedFor=i,this.cache.set(s),this.statuses.set(gx(r))}).finally(()=>{this.inFlight=!1,n||this.loading.set(!1),this.morse.workspace().cwd!==i&&this.ensureLoaded(!0)}))}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function tN(t){if(typeof t!="object"||t===null)return;let e=t.files;if(Array.isArray(e))return e.filter(n=>typeof n=="string")}var Fx=_1(Lx(),1);var Kd=Fx.default;function Vx(t){let e=t.regex,n={},i={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[n]}]};Object.assign(n,{className:"variable",variants:[{begin:e.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},i]});let o={className:"subst",begin:/\$\(/,end:/\)/,contains:[t.BACKSLASH_ESCAPE]},r=t.inherit(t.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),s={begin:/<<-?\s*(?=\w+)/,starts:{contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},a={className:"string",begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,n,o]};o.contains.push(a);let c={match:/\\"/},l={className:"string",begin:/'/,end:/'/},p={match:/\\'/},f={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},t.NUMBER_MODE,n]},_=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],x=t.SHEBANG({binary:`(${_.join("|")})`,relevance:10}),C={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[t.inherit(t.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},T=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],P=["true","false"],Y={match:/(\/[a-z._-]+)+/},W=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],be=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],ye=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],Me=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:T,literal:P,built_in:[...W,...be,"set","shopt",...ye,...Me]},contains:[x,t.SHEBANG(),C,f,r,s,Y,a,c,l,p,n]}}var GN=t=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:t.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},UNICODE_RANGE:{scope:"number",begin:/\b[Uu]\+[0-9A-Fa-f][0-9A-Fa-f?]{0,5}(-[0-9A-Fa-f][0-9A-Fa-f]{0,5})?/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:t.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),qN=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],WN=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],YN=[...qN,...WN],KN=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),ZN=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),QN=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),XN=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","corner-bottom-left-shape","corner-bottom-right-shape","corner-shape","corner-top-left-shape","corner-top-right-shape","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","unicode-range","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function jx(t){let e=t.regex,n=GN(t),i={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},o="and or not only",r=/@-?\w[\w]*(-\w+)*/,s="[a-zA-Z-][a-zA-Z0-9_-]*",a=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[n.BLOCK_COMMENT,i,n.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+s,relevance:0},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+ZN.join("|")+")"},{begin:":(:)?("+QN.join("|")+")"}]},n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+XN.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[n.BLOCK_COMMENT,n.HEXCOLOR,n.IMPORTANT,n.CSS_NUMBER_MODE,n.UNICODE_RANGE,...a,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},n.FUNCTION_DISPATCH]},{begin:e.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:r},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:o,attribute:KN.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...a,n.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+YN.join("|")+")\\b"}]}}function $x(t){let e=t.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:e.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^@@ +-\d+ +\+\d+,\d+ +@@/,/^@@ +-\d+,\d+ +\+\d+ +@@/,/^@@ +-\d+ +\+\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:e.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}function Bx(t){let r={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:r,illegal:"</",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,{className:"string",variants:[t.QUOTE_STRING_MODE,t.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:"number",variants:[{match:/-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,relevance:0},{match:/-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b0[oO](_?[0-7])*i?/,relevance:0},{match:/-?\b0[bB](_?[01])*i?/,relevance:0},{match:/-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,relevance:0}]},{begin:/:=/},{className:"function",beginKeywords:"func",end:"\\s*(\\{|$)",excludeEnd:!0,contains:[t.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:r,illegal:/["']/}]}]}}var Hx="[A-Za-z$_][0-9A-Za-z$_]*",JN=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],eO=["true","false","null","undefined","NaN","Infinity"],Ux=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],zx=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Gx=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],tO=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","self","global"],nO=[].concat(Gx,Ux,zx);function qx(t){let e=t.regex,n=(G,{after:L})=>{let ne="</"+G[0].slice(1);return G.input.indexOf(ne,L)!==-1},i=Hx,o={begin:"<>",end:"</>"},r=/<[A-Za-z0-9\\._:-]+\s*\/>/,s={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(G,L)=>{let ne=G[0].length+G.index,Le=G.input[ne];if(Le==="<"||Le===","){L.ignoreMatch();return}Le===">"&&(n(G,{after:ne})||L.ignoreMatch());let tt,Ut=G.input.substring(ne);if(tt=Ut.match(/^\s*=/)){L.ignoreMatch();return}if((tt=Ut.match(/^\s+extends\s+/))&&tt.index===0){L.ignoreMatch();return}}},a={$pattern:Hx,keyword:JN,literal:eO,built_in:nO,"variable.language":tO},c="[0-9](_?[0-9])*",l=`\\.(${c})`,p="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",f={className:"number",variants:[{begin:`(\\b(${p})((${l})|\\.)?|(${l}))[eE][+-]?(${c})\\b`},{begin:`\\b(${p})\\b((${l})\\b|\\.)?|(${l})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},_={className:"subst",begin:"\\$\\{",end:"\\}",keywords:a,contains:[]},x={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,_],subLanguage:"xml"}},C={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,_],subLanguage:"css"}},T={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,_],subLanguage:"graphql"}},P={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,_]},W={className:"comment",variants:[t.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]},be=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,x,C,T,P,{match:/\$\d+/},f];_.contains=be.concat({begin:/\{/,end:/\}/,keywords:a,contains:["self"].concat(be)});let ye=[].concat(W,_.contains),Me=ye.concat([{begin:/(\s*)\(/,end:/\)/,keywords:a,contains:["self"].concat(ye)}]),me={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:Me},Je={variants:[{match:[/class/,/\s+/,i,/\s+/,/extends/,/\s+/,e.concat(i,"(",e.concat(/\./,i),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,i],scope:{1:"keyword",3:"title.class"}}]},je={relevance:0,match:e.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...Ux,...zx]}},Be={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},ft={variants:[{match:[/function/,/\s+/,i,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[me],illegal:/%/},St={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Rt(G){return e.concat("(?!",G.join("|"),")")}let kt={match:e.concat(/\b/,Rt([...Gx,"super","import","await"].map(G=>`${G}\\s*\\(`)),i,e.lookahead(/\s*\(/)),className:"title.function",relevance:0},et={begin:e.concat(/\./,e.lookahead(e.concat(i,/(?![0-9A-Za-z$_(])/))),end:i,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Se={match:[/get|set/,/\s+/,i,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},me]},R="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",Q={match:[/const|var|let/,/\s+/,i,/\s*/,/=\s*/,/(async\s*)?/,e.lookahead(R)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[me]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:a,exports:{PARAMS_CONTAINS:Me,CLASS_REFERENCE:je},illegal:/#(?![$_A-Za-z])/,contains:[t.SHEBANG({label:"shebang",binary:"node",relevance:5}),Be,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,x,C,T,P,W,{match:/\$\d+/},f,je,{scope:"attr",match:i+e.lookahead(":"),relevance:0},Q,{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[W,t.REGEXP_MODE,{className:"function",begin:R,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:Me}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:o.begin,end:o.end},{match:r},{begin:s.begin,"on:begin":s.isTrulyOpeningTag,end:s.end}],subLanguage:"xml",contains:[{begin:s.begin,end:s.end,skip:!0,contains:["self"]}]}]},ft,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+t.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[me,t.inherit(t.TITLE_MODE,{begin:i,className:"title.function"})]},{match:/\.\.\./,relevance:0},et,{match:"\\$"+i,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[me]},kt,St,Je,Se,{match:/\$[(.]/}]}}var iO="([-+]?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)|NaN|[-+]?Infinity",oO={scope:"number",match:iO,relevance:0};function Wx(t){let e={className:"attr",begin:/(("(\\.|[^\\"\r\n])*")|('(\\.|[^\\'\r\n])*'))(?=\s*:)/,relevance:1.01},n={match:/[{}[\],:]/,className:"punctuation",relevance:0},i=["true","false","null"],o={scope:"literal",beginKeywords:i.join(" ")};return{name:"JSON",aliases:["jsonc","json5"],keywords:{literal:i},contains:[e,n,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,o,oO,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}function Yx(t){let e=t.regex,n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},i={match:/^ {0,3}([-*_])[ \t]*(?:\1[ \t]*){2,}$/},o={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},r={className:"bullet",begin:"^[ ]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},s={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},a=/[A-Za-z][A-Za-z0-9+.-]*/,c={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:e.concat(/\[.+?\]\(/,a,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},l={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},p={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},f=t.inherit(l,{contains:[]}),_=t.inherit(p,{contains:[]});l.contains.push(_),p.contains.push(f);let x=[n,c];return[l,p,f,_].forEach(Y=>{Y.contains=Y.contains.concat(x)}),x=x.concat(l,p),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:x},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:x}]}]},n,r,i,l,p,{className:"quote",begin:"^>\\s+",contains:x,end:"$"},o,c,s,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}function Kx(t){let e=t.regex,n=/(?![A-Za-z0-9])(?![$])/,i=e.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,n),o=e.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,n),r=e.concat(/[A-Z]+/,n),s={scope:"variable",match:"\\$+"+i},a={scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},c={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},l=t.inherit(t.APOS_STRING_MODE,{illegal:null}),p=t.inherit(t.QUOTE_STRING_MODE,{illegal:null,contains:t.QUOTE_STRING_MODE.contains.concat(c)}),f={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:t.QUOTE_STRING_MODE.contains.concat(c),"on:begin":(et,Se)=>{Se.data._beginMatch=et[1]||et[2]},"on:end":(et,Se)=>{Se.data._beginMatch!==et[1]&&Se.ignoreMatch()}},_=t.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),x=`[
|
|
13
|
+
`);return[{kind:"user",id:"mock-seed-user-1",at:t-15e4,text:"Refactor the sidebar to match the reference, make it responsive, and render markdown properly."},{kind:"tool",id:"mock-seed-tool-1",at:t-14e4,name:"bash",title:"bash: ls packages/ui-angular/src/app",status:"ok",output:"app.css app.html app.ts chat/ core/ nav/",durationMs:12},{kind:"tool",id:"mock-seed-tool-2",at:t-138e3,name:"read",title:"read: packages/ui-angular/src/app/app.css",status:"ok",output:"42 lines, 4 media queries",durationMs:8},{kind:"tool",id:"mock-seed-tool-3",at:t-13e4,name:"edit",title:"edit: packages/ui-angular/src/app/nav/session-nav.ts",status:"ok",output:"+26 -7",durationMs:190},{kind:"tool",id:"mock-seed-tool-4",at:t-128e3,name:"edit",title:"edit: packages/ui-angular/src/app/app.css",status:"ok",output:"+18 -4",durationMs:140},{kind:"tool",id:"mock-seed-tool-5",at:t-1800,name:"bash",title:"bash: npm run build:ui",status:"running",output:"Application bundle generation complete. [1.2 seconds]"},{kind:"assistant",id:"mock-seed-assistant-1",at:t-1e5,text:e,thinking:"The webview is narrow, so the navigation has to become a drawer below ~760px instead of a second column.",streaming:!1,model:"Mock Model"},{kind:"notice",id:"mock-seed-notice-1",at:t-6e4,level:"info",text:"Everything is wired through the same wire protocol \u2014 try ?scope=workspace to see the VS Code shape."}]}function Jb(t={}){if(Yb())return new $d;let e=t.href??(typeof location<"u"?location.href:"http://localhost/"),n=new URL(e,"http://localhost/");if(t.forceMock===!0||n.searchParams.get("mock")==="1")return new Bd;let i=n.searchParams.get("server");if(i)return new Xa({url:i,WebSocketImpl:t.WebSocketImpl});let o=n.protocol==="https:",r=t.websocketPath??"/ws";return new Xa({url:`${o?"wss":"ws"}://${n.host}${r}`,WebSocketImpl:t.WebSocketImpl})}var Ui=class t{attached=O([]);pinned=O([]);live=O(null);pendingMentions=O([]);message=O(null);counter=0;images=this.attached.asReadonly();pins=this.pinned.asReadonly();livePreview=this.live.asReadonly();mentions=this.pendingMentions.asReadonly();notice=this.message.asReadonly();count=E(()=>this.attached().length+this.pinned().length+this.pendingMentions().length);async read(e){let n=[],i=[];for(let o of e){if(!o.type.startsWith("image/")){i.push(o.name);continue}let r=await vh(o);if(!r){i.push(o.name);continue}this.counter+=1,n.push({id:`attachment-${this.counter}`,name:o.name||`image-${this.counter}.png`,mimeType:o.type,data:r,bytes:o.size})}return{images:n,skipped:i}}add(e){e.length!==0&&this.attached.update(n=>[...n,...e])}async accept(e){let{images:n,skipped:i}=await this.read(e);return this.add(n),{attached:n.length,skipped:i}}addMentions(e){let n=e.map(i=>i.trim()).filter(i=>i.length>0);n.length!==0&&this.pendingMentions.update(i=>[...i,...n])}seed(e,n){e.length>0&&this.add(e.map((i,o)=>{this.counter+=1;let s=(i.mimeType.split("/")[1]?.toLowerCase()??"").replace(/[^a-z0-9]/g,"")||"png";return{id:`seed-${this.counter}`,name:o===0?`image.${s}`:`image-${o+1}.${s}`,mimeType:i.mimeType,data:i.data,bytes:Math.floor(i.data.length*3/4)}}));for(let i of n)this.pin({path:i.path,startLine:i.startLine,endLine:i.endLine})}setPinRange(e,n){this.pinned.update(i=>i.map(o=>o.id===e?K(V({},o),{startLine:n.startLine,endLine:n.endLine}):o))}pin(e,n){if(e.path.length===0)return"";if(e.startLine===void 0){let _=this.pinned().find(C=>C.path===e.path&&C.startLine===void 0);if(_!==void 0)return _.id;this.counter+=1;let x=`pin-${this.counter}`;return this.pinned.update(C=>[...C,K(V({},e),{id:x})]),x}let i=this.pinned(),o=e.startLine,r=e.endLine??e.startLine,s=new Set(n===void 0?[]:[n]),a,c=!0;for(;c;){c=!1;for(let _ of i){if(s.has(_.id)||_.path!==e.path||_.startLine===void 0)continue;let x=_.startLine,C=_.endLine??x;x<=r+1&&C+1>=o&&(o=Math.min(o,x),r=Math.max(r,C),s.add(_.id),a??=_.id,c=!0)}}this.counter+=1;let l={id:n??a??`pin-${this.counter}`,path:e.path,startLine:o,endLine:r>o?r:void 0},p=[],f=!1;for(let _ of i){if(s.has(_.id)){f||(p.push(l),f=!0);continue}p.push(_)}return f||p.push(l),this.pinned.set(p),l.id}removePin(e){this.pinned.update(n=>n.filter(i=>i.id!==e))}setLivePreview(e){if(e===null||e.path.length===0||e.startLine===void 0){this.live.set(null);return}let n=this.live();n&&n.path===e.path&&n.startLine===e.startLine&&n.endLine===e.endLine||this.live.set({id:"live-preview",path:e.path,startLine:e.startLine,endLine:e.endLine})}lockLivePreview(){let e=this.live();e&&(this.live.set(null),this.pin({path:e.path,startLine:e.startLine,endLine:e.endLine}))}remove(e){this.attached.update(n=>n.filter(i=>i.id!==e))}takeImages(){let e=this.attached().map(({data:n,mimeType:i})=>({data:n,mimeType:i}));return this.attached.set([]),e}takePins(){let e=this.pinned().map(({path:n,startLine:i,endLine:o})=>{let r={path:n};return i!==void 0&&(r.startLine=i),o!==void 0&&(r.endLine=o),r});return this.pinned.set([]),e}takeMentions(){let e=this.pendingMentions();return this.pendingMentions.set([]),e}clear(){this.attached.set([]),this.pinned.set([]),this.live.set(null),this.pendingMentions.set([])}say(e,n){this.message.set({level:e,text:n,at:Date.now()})}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function vh(t){return new Promise(e=>{if(typeof FileReader>"u"){e(void 0);return}let n=new FileReader;n.onerror=()=>e(void 0),n.onload=()=>{let i=n.result;if(typeof i!="string"){e(void 0);return}let o=i.indexOf(",");e(o===-1?void 0:i.slice(o+1))},n.readAsDataURL(t)})}var ex=new He("morse.transport",{providedIn:"root",factory:()=>Jb()});var tx={name:"@morse/ui-angular",version:"0.9.2"},NI=6e3,Ze=class t{transport=N(ex);destroyRef=N(pt);view=O(jd());client;actions;slowConnectionTimer;connection=E(()=>this.view().connection);connectionDetail=E(()=>this.view().connectionDetail);protocolVersion=E(()=>this.view().protocolVersion);frontend=E(()=>this.view().frontend);version=E(()=>this.frontend()?.version??tx.version);slowConnection=O(!1);capabilities=E(()=>this.view().capabilities);state=E(()=>this.view().state);items=E(()=>this.view().items);projects=E(()=>this.view().projects);sessions=E(()=>this.view().sessions);activity=E(()=>this.view().activity);sessionActivity=E(()=>{let e=new Map;for(let n of this.view().activity)e.set(n.sessionKey,n);return e});pendingInteraction=E(()=>this.view().pendingInteraction);lastNotice=E(()=>this.view().lastNotice);lastError=E(()=>this.view().lastError);agentReady=E(()=>this.view().state.agentReady);agentStarting=E(()=>this.view().state.agentStarting);agentError=E(()=>this.view().state.agentError);agentFailure=E(()=>this.view().state.agentFailure);running=E(()=>this.view().state.streaming||this.view().state.busy);workspace=E(()=>this.view().state.workspace);model=E(()=>this.view().state.model);thinkingLevel=E(()=>this.view().state.thinkingLevel);availableModels=E(()=>this.view().state.availableModels);availableThinkingLevels=E(()=>this.view().state.availableThinkingLevels);availableCommands=E(()=>this.view().state.availableCommands);usage=E(()=>this.view().state.usage);hasOlderHistory=E(()=>this.view().state.hasOlderHistory===!0);loadingOlderHistory=E(()=>this.view().state.loadingOlderHistory===!0);constructor(){this.client=Bb({transport:this.transport,frontend:tx}),this.actions=this.client.actions;let e=this.client.getView();this.view.set(e),this.trackSlowConnection(e.connection),this.client.subscribe(n=>{this.view.set(n),this.trackSlowConnection(n.connection)}),this.destroyRef.onDestroy(()=>{this.clearSlowConnectionTimer(),this.client.dispose()})}trackSlowConnection(e){if(e!=="connecting"){this.clearSlowConnectionTimer(),this.slowConnection.set(!1);return}this.slowConnectionTimer===void 0&&(this.slowConnectionTimer=setTimeout(()=>{this.slowConnection.set(!0)},NI))}clearSlowConnectionTimer(){this.slowConnectionTimer!==void 0&&(clearTimeout(this.slowConnectionTimer),this.slowConnectionTimer=void 0)}prompt(e,n="new",i,o){this.actions.prompt(e,n,i,o)}editMessage(e,n){this.actions.editMessage(e,n)}forkMessage(e){this.actions.forkMessage(e)}onComposerSeed(e){return this.client.onComposerSeed(e)}onContextSelection(e){return this.client.onContextSelection(e)}onContextSelectionLive(e){return this.client.onContextSelectionLive(e)}ready(){this.actions.ready()}abort(){this.actions.abort()}newSession(e){this.actions.newSession(e)}openProject(e){this.actions.openProject(e)}requestProjects(){this.actions.requestProjects()}activateSession(e,n){this.actions.activateSession(e,n)}closeSession(e){this.actions.closeSession(e)}deleteSession(e){this.actions.deleteSession(e)}compactSession(e){this.actions.compactSession(e)}loadOlderHistory(){this.actions.loadOlderHistory()}loadSession(e){this.actions.loadSession(e)}requestSessions(){this.actions.requestSessions()}refreshCommands(){this.actions.refreshCommands()}setModel(e,n){this.actions.setModel(e,n)}setThinkingLevel(e){this.actions.setThinkingLevel(e)}respond(e){this.actions.respond(e)}hostCommand(e,n){this.actions.hostCommand(e,n)}requestHostCommand(e,n){return this.actions.hostCommand(e,n)}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};var Hd=class t{items=O([]);counter=0;queued=this.items.asReadonly();count=E(()=>this.items().length);head(e){return this.items().find(n=>n.sessionId===e)}enqueue(e,n){this.counter+=1;let i=`queued-${this.counter}`;return this.items.update(o=>[...o,K(V({},e),{id:i,sessionId:n})]),i}remove(e){this.items.update(n=>n.filter(i=>i.id!==e))}shift(e){let n=this.head(e);if(n!==void 0)return this.remove(n.id),n}clear(){this.items.set([])}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};var sx="morse.navigation.collapsed",ax="morse.git.open",cx="morse.git.expanded",bh="morse.git.width",OI=220,PI=1600,lx="morse.git.changesHeight",nx="morse.git.changesCollapsed",ix="morse.git.historyCollapsed",AI=48,RI=1200,dx="morse.explorer.height",LI=140,FI=720;function VI(){try{return globalThis.localStorage?.getItem(sx)==="1"}catch{return!1}}function jI(t){try{globalThis.localStorage?.setItem(sx,t?"1":"0")}catch{}}function $I(){try{return globalThis.localStorage?.getItem(ax)==="1"}catch{return!1}}function BI(t){try{globalThis.localStorage?.setItem(ax,t?"1":"0")}catch{}}function HI(){try{return globalThis.localStorage?.getItem(cx)==="1"}catch{return!1}}function UI(t){try{globalThis.localStorage?.setItem(cx,t?"1":"0")}catch{}}function ux(t){return Math.round(Math.min(RI,Math.max(AI,t)))}function px(t){return Math.round(Math.min(PI,Math.max(OI,t)))}function zI(){try{let t=globalThis.localStorage?.getItem(bh);if(t==null)return;let e=Number.parseInt(t,10);return Number.isFinite(e)?px(e):void 0}catch{return}}function GI(t){try{globalThis.localStorage?.setItem(bh,String(t))}catch{}}function qI(){try{let t=globalThis.localStorage?.getItem(lx);if(t==null)return;let e=Number.parseInt(t,10);return Number.isFinite(e)?ux(e):void 0}catch{return}}function WI(t){try{globalThis.localStorage?.setItem(lx,String(t))}catch{}}function ox(t){try{return globalThis.localStorage?.getItem(t)==="1"}catch{return!1}}function rx(t,e){try{globalThis.localStorage?.setItem(t,e?"1":"0")}catch{}}function fx(t){return Math.round(Math.min(FI,Math.max(LI,t)))}function YI(){try{let t=globalThis.localStorage?.getItem(dx);if(t==null)return;let e=Number.parseInt(t,10);return Number.isFinite(e)?fx(e):void 0}catch{return}}function KI(t){try{globalThis.localStorage?.setItem(dx,String(t))}catch{}}var Ht=class t{navigationVisible=O(!1);navigationOpen=this.navigationVisible.asReadonly();collapsed=O(VI());navigationCollapsed=this.collapsed.asReadonly();gitPanel=O($I());gitPanelOpen=this.gitPanel.asReadonly();gitExpanded=O(HI());gitPanelExpanded=this.gitExpanded.asReadonly();gitWidthSignal=O(zI());gitPanelWidth=this.gitWidthSignal.asReadonly();changesHeightSignal=O(qI());gitChangesHeight=this.changesHeightSignal.asReadonly();changesCollapsedSignal=O(ox(nx));gitChangesCollapsed=this.changesCollapsedSignal.asReadonly();historyCollapsedSignal=O(ox(ix));gitHistoryCollapsed=this.historyCollapsedSignal.asReadonly();explorer=O(YI());explorerHeight=this.explorer.asReadonly();projectPicker=O(!1);projectPickerOpen=this.projectPicker.asReadonly();about=O(!1);aboutOpen=this.about.asReadonly();shortcuts=O(!1);shortcutsOpen=this.shortcuts.asReadonly();projectFilter=O(!1);projectFilterOpen=this.projectFilter.asReadonly();promptTemplate=O(!1);promptTemplateOpen=this.promptTemplate.asReadonly();compactPrompt=O(void 0);compactConfirmOpen=E(()=>this.compactPrompt()!==void 0);compactInstructions=E(()=>this.compactPrompt()?.instructions);modalOpen=E(()=>this.about()||this.shortcuts()||this.projectPicker()||this.projectFilter()||this.promptTemplate()||this.compactPrompt()!==void 0);toggleNavigation(){this.navigationVisible.update(e=>!e)}openNavigation(){this.navigationVisible.set(!0)}closeNavigation(){this.navigationVisible.set(!1)}toggleNavigationCollapsed(){this.setCollapsed(!this.collapsed())}unfoldNavigation(){this.setCollapsed(!1)}setCollapsed(e){this.collapsed.set(e),jI(e)}toggleGitPanel(){this.setGitPanel(!this.gitPanel())}closeGitPanel(){this.setGitPanel(!1)}setGitPanel(e){this.gitPanel.set(e),BI(e)}toggleGitPanelExpanded(){this.setGitExpanded(!this.gitExpanded())}setGitExpanded(e){this.gitExpanded.set(e),UI(e)}toggleGitChanges(){this.changesCollapsedSignal.update(e=>!e),rx(nx,this.changesCollapsedSignal())}toggleGitHistory(){this.historyCollapsedSignal.update(e=>!e),rx(ix,this.historyCollapsedSignal())}setGitChangesHeight(e,n=!0){let i=ux(e);this.changesHeightSignal.set(i),n&&WI(i)}setGitPanelWidth(e,n=!0){let i=px(e);this.gitWidthSignal.set(i),n&&GI(i)}resetGitPanelWidth(){this.gitWidthSignal.set(void 0);try{globalThis.localStorage?.removeItem(bh)}catch{}}setExplorerHeight(e){let n=fx(e);this.explorer.set(n),KI(n)}openAbout(){this.about.set(!0)}closeAbout(){this.about.set(!1)}openShortcuts(){this.shortcuts.set(!0)}closeShortcuts(){this.shortcuts.set(!1)}toggleShortcuts(){this.shortcuts.update(e=>!e)}openProjectFilter(){this.projectFilter.set(!0)}closeProjectFilter(){this.projectFilter.set(!1)}setPromptTemplateOpen(e){this.promptTemplate.set(e)}openProjectPicker(){this.projectPicker.set(!0)}closeProjectPicker(){this.projectPicker.set(!1)}requestCompact(e){this.compactPrompt.set(e?{instructions:e}:{})}closeCompactPrompt(){this.compactPrompt.set(void 0)}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};var Ja=[{id:"session.new",group:"Session",label:"New session",detail:"The sidebar button, on the keyboard \u2014 and on a browser host it still asks which folder first.",binding:{key:"n",mod:!0,alt:!0}},{id:"session.search",group:"Session",label:"Focus the session search",detail:"Opens the sidebar when the layout hid it, and puts the caret in the field. In the prompt, `/` opens the command palette instead.",binding:{key:"/"}},{id:"project.filter",group:"Navigate",label:"Change project focus",detail:"Narrows the sidebar to one project. Only a host with several projects has this.",binding:{key:"p",mod:!0,alt:!0},overlay:!0},{id:"view.git",group:"Navigate",label:"Toggle the git panel",detail:"Shows or hides the history and graph for the active project. The browser host only \u2014 VS Code has its own Source Control view.",binding:{key:"g",mod:!0,alt:!0},overlay:!0,whileTyping:!0},{id:"model.pick",group:"Model",label:"Change model",detail:"Opens the model chooser above the prompt.",binding:{key:"m",mod:!0,alt:!0},overlay:!0,whileTyping:!0},{id:"thinking.pick",group:"Model",label:"Change thinking level",detail:"Opens the reasoning-level chooser next to the model.",binding:{key:"t",mod:!0,alt:!0},overlay:!0,whileTyping:!0},{id:"context.compact",group:"Context",label:"Compact the conversation",detail:"Asks first: pi replaces what it remembers with a summary.",binding:{key:"c",mod:!0,alt:!0},overlay:!0,whileTyping:!0},{id:"prompt.send",group:"Typing",label:"Send the prompt",detail:"While the prompt has the caret. During a run, the same key steers the agent instead.",keys:"Enter"},{id:"prompt.newline",group:"Typing",label:"New line",detail:"The prompt grows with the text rather than sending it.",keys:"Shift+Enter"},{id:"prompt.mention",group:"Typing",label:"Mention a file",detail:"Opens the picker that inserts an @path mention.",keys:"@"},{id:"prompt.commands",group:"Typing",label:"Command palette",detail:"The slash commands Morse and pi understand, filtered as you type.",keys:"/"},{id:"help.shortcuts",group:"Help",label:"This list",detail:"Opens and closes these rows, outside a text field.",binding:{key:"?"},overlay:!0}];function ec(t){return"binding"in t}function mx(){let t=globalThis.navigator;return/mac|iphone|ipad/i.test(t?.userAgent??"")}function hx(t,e=mx()){let n=[];return t.mod===!0&&n.push(e?"\u2318":"Ctrl"),t.alt===!0&&n.push(e?"\u2325":"Alt"),n.push(t.key.length===1&&/[a-z]/.test(t.key)?t.key.toUpperCase():t.key),e?n.join(""):n.join("+")}var An=class t{shell=N(Ht);handlers=new Map;revision=O(0);catalog=Ja;available=E(()=>{this.revision();let e=new Map;for(let n of Ja){if(!ec(n))continue;let i=this.handlers.get(n.id);e.set(n.id,i!==void 0&&(i.enabled?.()??!0))}return e});constructor(){let e=globalThis.document;e&&(e.addEventListener("keydown",this.onKeydown,!0),N(pt).onDestroy(()=>e.removeEventListener("keydown",this.onKeydown,!0)))}bind(e,n,i){let o={run:n,enabled:i};return this.handlers.set(e,o),this.bump(),()=>{this.handlers.get(e)===o&&(this.handlers.delete(e),this.bump())}}bump(){this.revision.update(e=>e+1)}onKeydown=e=>{if(e.defaultPrevented||e.isComposing||e.getModifierState?.("AltGraph")===!0)return;let n=Ja.find(o=>ec(o)&&ZI(o.binding,e));if(n===void 0||n.whileTyping!==!0&&QI(e.target)||n.overlay===!0&&this.shell.modalOpen()&&!(n.id==="help.shortcuts"&&this.shell.shortcutsOpen()))return;let i=this.handlers.get(n.id);i===void 0||i.enabled!==void 0&&!i.enabled()||(e.preventDefault(),i.run())};static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function ZI(t,e){return e.key.toLowerCase()!==t.key.toLowerCase()||t.mod===!0!==(mx()?e.metaKey:e.ctrlKey)?!1:t.alt===!0===e.altKey}function QI(t){let e=t;if(e===null||typeof e.tagName!="string")return!1;let n=e.tagName.toLowerCase();return n==="input"||n==="textarea"||n==="select"||e.isContentEditable===!0}var XI=10*1024*1024,Ds=class t{morse=N(Ze);available=E(()=>this.morse.capabilities()?.fileUpload===!0);async upload(e){let n=[],i=[];for(let o of e){if(o.size>XI){i.push(o.name);continue}let r=await vh(o);if(!r){i.push(o.name);continue}let s=await this.morse.requestHostCommand("uploadFile",{name:o.name,mimeType:o.type,data:r}),a=typeof s?.path=="string"?s.path:void 0;if(!a){i.push(o.name);continue}n.push({path:a,name:o.name,bytes:typeof s?.bytes=="number"?s.bytes:o.size})}return{added:n,failed:i}}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function xh(t){if(t==="??")return"U";if(t.includes("U")||t==="AA"||t==="DD")return"C";if(t.includes("R")||t.includes("C"))return"R";if(t.includes("D"))return"D";if(t.includes("A"))return"A";if(t.includes("M")||t.includes("T"))return"M"}function gx(t){if(typeof t!="object"||t===null)return;let e=t;return e.isRepo!==!0?typeof e.isRepo=="boolean"?{isRepo:!1,files:[]}:void 0:{isRepo:!0,files:Array.isArray(e.files)?e.files.map(JI).filter(i=>i!==void 0):[]}}function Ud(t){let e=new Map;for(let n of t?.files??[]){let i=xh(n.status);i!==void 0&&e.set(n.path,i)}return e}function JI(t){if(typeof t!="object"||t===null)return;let e=t,n=e.path,i=e.status;if(!(typeof n!="string"||typeof i!="string"))return{path:n,status:i}}var eN=4e3,zi=class t{morse=N(Ze);cache=O([]);loading=O(!1);statuses=O(void 0);failure=O(void 0);loadedFor;inFlight=!1;files=this.cache.asReadonly();busy=this.loading.asReadonly();status=this.statuses.asReadonly();error=this.failure.asReadonly();available=E(()=>this.morse.capabilities()?.filePicker===!0);constructor(){se(()=>{if(!this.available())return;let e=this.morse.workspace().cwd;this.ensureLoaded(this.loadedFor!==void 0&&this.loadedFor!==e)}),se(e=>{if(!this.available())return;let n=setInterval(()=>{typeof document<"u"&&document.hidden||this.ensureLoaded(!0,!0)},eN);e(()=>clearInterval(n))})}refresh(){this.ensureLoaded(!0)}ensureLoaded(e=!1,n=!1){let i=this.morse.workspace().cwd;i.length===0||this.inFlight||!e&&this.loadedFor===i||(this.inFlight=!0,n||(this.loading.set(!0),this.failure.set(void 0)),Promise.all([this.morse.requestHostCommand("listFiles",e?{fresh:!0}:void 0),this.morse.requestHostCommand("gitStatus")]).then(([o,r])=>{if(this.morse.workspace().cwd!==i)return;let s=tN(o);if(s===void 0){this.failure.set("Could not list this project.");return}this.loadedFor=i,this.cache.set(s),this.statuses.set(gx(r))}).finally(()=>{this.inFlight=!1,n||this.loading.set(!1),this.morse.workspace().cwd!==i&&this.ensureLoaded(!0)}))}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function tN(t){if(typeof t!="object"||t===null)return;let e=t.files;if(Array.isArray(e))return e.filter(n=>typeof n=="string")}var Fx=_1(Lx(),1);var Kd=Fx.default;function Vx(t){let e=t.regex,n={},i={begin:/\$\{/,end:/\}/,contains:["self",{begin:/:-/,contains:[n]}]};Object.assign(n,{className:"variable",variants:[{begin:e.concat(/\$[\w\d#@][\w\d_]*/,"(?![\\w\\d])(?![$])")},i]});let o={className:"subst",begin:/\$\(/,end:/\)/,contains:[t.BACKSLASH_ESCAPE]},r=t.inherit(t.COMMENT(),{match:[/(^|\s)/,/#.*$/],scope:{2:"comment"}}),s={begin:/<<-?\s*(?=\w+)/,starts:{contains:[t.END_SAME_AS_BEGIN({begin:/(\w+)/,end:/(\w+)/,className:"string"})]}},a={className:"string",begin:/"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,n,o]};o.contains.push(a);let c={match:/\\"/},l={className:"string",begin:/'/,end:/'/},p={match:/\\'/},f={begin:/\$?\(\(/,end:/\)\)/,contains:[{begin:/\d+#[0-9a-f]+/,className:"number"},t.NUMBER_MODE,n]},_=["fish","bash","zsh","sh","csh","ksh","tcsh","dash","scsh"],x=t.SHEBANG({binary:`(${_.join("|")})`,relevance:10}),C={className:"function",begin:/\w[\w\d_]*\s*\(\s*\)\s*\{/,returnBegin:!0,contains:[t.inherit(t.TITLE_MODE,{begin:/\w[\w\d_]*/})],relevance:0},T=["if","then","else","elif","fi","time","for","while","until","in","do","done","case","esac","coproc","function","select"],P=["true","false"],Y={match:/(\/[a-z._-]+)+/},W=["break","cd","continue","eval","exec","exit","export","getopts","hash","pwd","readonly","return","shift","test","times","trap","umask","unset"],be=["alias","bind","builtin","caller","command","declare","echo","enable","help","let","local","logout","mapfile","printf","read","readarray","source","sudo","type","typeset","ulimit","unalias"],ye=["autoload","bg","bindkey","bye","cap","chdir","clone","comparguments","compcall","compctl","compdescribe","compfiles","compgroups","compquote","comptags","comptry","compvalues","dirs","disable","disown","echotc","echoti","emulate","fc","fg","float","functions","getcap","getln","history","integer","jobs","kill","limit","log","noglob","popd","print","pushd","pushln","rehash","sched","setcap","setopt","stat","suspend","ttyctl","unfunction","unhash","unlimit","unsetopt","vared","wait","whence","where","which","zcompile","zformat","zftp","zle","zmodload","zparseopts","zprof","zpty","zregexparse","zsocket","zstyle","ztcp"],Me=["chcon","chgrp","chown","chmod","cp","dd","df","dir","dircolors","ln","ls","mkdir","mkfifo","mknod","mktemp","mv","realpath","rm","rmdir","shred","sync","touch","truncate","vdir","b2sum","base32","base64","cat","cksum","comm","csplit","cut","expand","fmt","fold","head","join","md5sum","nl","numfmt","od","paste","ptx","pr","sha1sum","sha224sum","sha256sum","sha384sum","sha512sum","shuf","sort","split","sum","tac","tail","tr","tsort","unexpand","uniq","wc","arch","basename","chroot","date","dirname","du","echo","env","expr","factor","groups","hostid","id","link","logname","nice","nohup","nproc","pathchk","pinky","printenv","printf","pwd","readlink","runcon","seq","sleep","stat","stdbuf","stty","tee","test","timeout","tty","uname","unlink","uptime","users","who","whoami","yes"];return{name:"Bash",aliases:["sh","zsh"],keywords:{$pattern:/\b[a-z][a-z0-9._-]+\b/,keyword:T,literal:P,built_in:[...W,...be,"set","shopt",...ye,...Me]},contains:[x,t.SHEBANG(),C,f,r,s,Y,a,c,l,p,n]}}var GN=t=>({IMPORTANT:{scope:"meta",begin:"!important"},BLOCK_COMMENT:t.C_BLOCK_COMMENT_MODE,HEXCOLOR:{scope:"number",begin:/#(([0-9a-fA-F]{3,4})|(([0-9a-fA-F]{2}){3,4}))\b/},UNICODE_RANGE:{scope:"number",begin:/\b[Uu]\+[0-9A-Fa-f][0-9A-Fa-f?]{0,5}(-[0-9A-Fa-f][0-9A-Fa-f]{0,5})?/},FUNCTION_DISPATCH:{className:"built_in",begin:/[\w-]+(?=\()/},ATTRIBUTE_SELECTOR_MODE:{scope:"selector-attr",begin:/\[/,end:/\]/,illegal:"$",contains:[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},CSS_NUMBER_MODE:{scope:"number",begin:t.NUMBER_RE+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",relevance:0},CSS_VARIABLE:{className:"attr",begin:/--[A-Za-z_][A-Za-z0-9_-]*/}}),qN=["a","abbr","address","article","aside","audio","b","blockquote","body","button","canvas","caption","cite","code","dd","del","details","dfn","div","dl","dt","em","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","html","i","iframe","img","input","ins","kbd","label","legend","li","main","mark","menu","nav","object","ol","optgroup","option","p","picture","q","quote","samp","section","select","source","span","strong","summary","sup","table","tbody","td","textarea","tfoot","th","thead","time","tr","ul","var","video"],WN=["defs","g","marker","mask","pattern","svg","switch","symbol","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feFlood","feGaussianBlur","feImage","feMerge","feMorphology","feOffset","feSpecularLighting","feTile","feTurbulence","linearGradient","radialGradient","stop","circle","ellipse","image","line","path","polygon","polyline","rect","text","use","textPath","tspan","foreignObject","clipPath"],YN=[...qN,...WN],KN=["any-hover","any-pointer","aspect-ratio","color","color-gamut","color-index","device-aspect-ratio","device-height","device-width","display-mode","forced-colors","grid","height","hover","inverted-colors","monochrome","orientation","overflow-block","overflow-inline","pointer","prefers-color-scheme","prefers-contrast","prefers-reduced-motion","prefers-reduced-transparency","resolution","scan","scripting","update","width","min-width","max-width","min-height","max-height"].sort().reverse(),ZN=["active","any-link","blank","checked","current","default","defined","dir","disabled","drop","empty","enabled","first","first-child","first-of-type","fullscreen","future","focus","focus-visible","focus-within","has","host","host-context","hover","indeterminate","in-range","invalid","is","lang","last-child","last-of-type","left","link","local-link","not","nth-child","nth-col","nth-last-child","nth-last-col","nth-last-of-type","nth-of-type","only-child","only-of-type","optional","out-of-range","past","placeholder-shown","read-only","read-write","required","right","root","scope","target","target-within","user-invalid","valid","visited","where"].sort().reverse(),QN=["after","backdrop","before","cue","cue-region","first-letter","first-line","grammar-error","marker","part","placeholder","selection","slotted","spelling-error"].sort().reverse(),XN=["accent-color","align-content","align-items","align-self","alignment-baseline","all","anchor-name","animation","animation-composition","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-range","animation-range-end","animation-range-start","animation-timeline","animation-timing-function","appearance","aspect-ratio","backdrop-filter","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-position-x","background-position-y","background-repeat","background-size","baseline-shift","block-size","border","border-block","border-block-color","border-block-end","border-block-end-color","border-block-end-style","border-block-end-width","border-block-start","border-block-start-color","border-block-start-style","border-block-start-width","border-block-style","border-block-width","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-end-end-radius","border-end-start-radius","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-inline","border-inline-color","border-inline-end","border-inline-end-color","border-inline-end-style","border-inline-end-width","border-inline-start","border-inline-start-color","border-inline-start-style","border-inline-start-width","border-inline-style","border-inline-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-start-end-radius","border-start-start-radius","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-align","box-decoration-break","box-direction","box-flex","box-flex-group","box-lines","box-ordinal-group","box-orient","box-pack","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","clip-path","clip-rule","color","color-interpolation","color-interpolation-filters","color-profile","color-rendering","color-scheme","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","contain","contain-intrinsic-block-size","contain-intrinsic-height","contain-intrinsic-inline-size","contain-intrinsic-size","contain-intrinsic-width","container","container-name","container-type","content","content-visibility","corner-bottom-left-shape","corner-bottom-right-shape","corner-shape","corner-top-left-shape","corner-top-right-shape","counter-increment","counter-reset","counter-set","cue","cue-after","cue-before","cursor","cx","cy","direction","display","dominant-baseline","empty-cells","enable-background","field-sizing","fill","fill-opacity","fill-rule","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","flood-color","flood-opacity","flow","font","font-display","font-family","font-feature-settings","font-kerning","font-language-override","font-optical-sizing","font-palette","font-size","font-size-adjust","font-smooth","font-smoothing","font-stretch","font-style","font-synthesis","font-synthesis-position","font-synthesis-small-caps","font-synthesis-style","font-synthesis-weight","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-emoji","font-variant-ligatures","font-variant-numeric","font-variant-position","font-variation-settings","font-weight","forced-color-adjust","gap","glyph-orientation-horizontal","glyph-orientation-vertical","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphenate-character","hyphenate-limit-chars","hyphens","icon","image-orientation","image-rendering","image-resolution","ime-mode","initial-letter","initial-letter-align","inline-size","inset","inset-area","inset-block","inset-block-end","inset-block-start","inset-inline","inset-inline-end","inset-inline-start","isolation","justify-content","justify-items","justify-self","kerning","left","letter-spacing","lighting-color","line-break","line-height","line-height-step","list-style","list-style-image","list-style-position","list-style-type","margin","margin-block","margin-block-end","margin-block-start","margin-bottom","margin-inline","margin-inline-end","margin-inline-start","margin-left","margin-right","margin-top","margin-trim","marker","marker-end","marker-mid","marker-start","marks","mask","mask-border","mask-border-mode","mask-border-outset","mask-border-repeat","mask-border-slice","mask-border-source","mask-border-width","mask-clip","mask-composite","mask-image","mask-mode","mask-origin","mask-position","mask-repeat","mask-size","mask-type","masonry-auto-flow","math-depth","math-shift","math-style","max-block-size","max-height","max-inline-size","max-width","min-block-size","min-height","min-inline-size","min-width","mix-blend-mode","nav-down","nav-index","nav-left","nav-right","nav-up","none","normal","object-fit","object-position","offset","offset-anchor","offset-distance","offset-path","offset-position","offset-rotate","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-anchor","overflow-block","overflow-clip-margin","overflow-inline","overflow-wrap","overflow-x","overflow-y","overlay","overscroll-behavior","overscroll-behavior-block","overscroll-behavior-inline","overscroll-behavior-x","overscroll-behavior-y","padding","padding-block","padding-block-end","padding-block-start","padding-bottom","padding-inline","padding-inline-end","padding-inline-start","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","paint-order","pause","pause-after","pause-before","perspective","perspective-origin","place-content","place-items","place-self","pointer-events","position","position-anchor","position-visibility","print-color-adjust","quotes","r","resize","rest","rest-after","rest-before","right","rotate","row-gap","ruby-align","ruby-position","scale","scroll-behavior","scroll-margin","scroll-margin-block","scroll-margin-block-end","scroll-margin-block-start","scroll-margin-bottom","scroll-margin-inline","scroll-margin-inline-end","scroll-margin-inline-start","scroll-margin-left","scroll-margin-right","scroll-margin-top","scroll-padding","scroll-padding-block","scroll-padding-block-end","scroll-padding-block-start","scroll-padding-bottom","scroll-padding-inline","scroll-padding-inline-end","scroll-padding-inline-start","scroll-padding-left","scroll-padding-right","scroll-padding-top","scroll-snap-align","scroll-snap-stop","scroll-snap-type","scroll-timeline","scroll-timeline-axis","scroll-timeline-name","scrollbar-color","scrollbar-gutter","scrollbar-width","shape-image-threshold","shape-margin","shape-outside","shape-rendering","speak","speak-as","src","stop-color","stop-opacity","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","tab-size","table-layout","text-align","text-align-all","text-align-last","text-anchor","text-combine-upright","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-skip-ink","text-decoration-style","text-decoration-thickness","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-indent","text-justify","text-orientation","text-overflow","text-rendering","text-shadow","text-size-adjust","text-transform","text-underline-offset","text-underline-position","text-wrap","text-wrap-mode","text-wrap-style","timeline-scope","top","touch-action","transform","transform-box","transform-origin","transform-style","transition","transition-behavior","transition-delay","transition-duration","transition-property","transition-timing-function","translate","unicode-bidi","unicode-range","user-modify","user-select","vector-effect","vertical-align","view-timeline","view-timeline-axis","view-timeline-inset","view-timeline-name","view-transition-name","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","white-space","white-space-collapse","widows","width","will-change","word-break","word-spacing","word-wrap","writing-mode","x","y","z-index","zoom"].sort().reverse();function jx(t){let e=t.regex,n=GN(t),i={begin:/-(webkit|moz|ms|o)-(?=[a-z])/},o="and or not only",r=/@-?\w[\w]*(-\w+)*/,s="[a-zA-Z-][a-zA-Z0-9_-]*",a=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE];return{name:"CSS",case_insensitive:!0,illegal:/[=|'\$]/,keywords:{keyframePosition:"from to"},classNameAliases:{keyframePosition:"selector-tag"},contains:[n.BLOCK_COMMENT,i,n.CSS_NUMBER_MODE,{className:"selector-id",begin:/#[A-Za-z0-9_-]+/,relevance:0},{className:"selector-class",begin:"\\."+s,relevance:0},n.ATTRIBUTE_SELECTOR_MODE,{className:"selector-pseudo",variants:[{begin:":("+ZN.join("|")+")"},{begin:":(:)?("+QN.join("|")+")"}]},n.CSS_VARIABLE,{className:"attribute",begin:"\\b("+XN.join("|")+")\\b"},{begin:/:/,end:/[;}{]/,contains:[n.BLOCK_COMMENT,n.HEXCOLOR,n.IMPORTANT,n.CSS_NUMBER_MODE,n.UNICODE_RANGE,...a,{begin:/(url|data-uri)\(/,end:/\)/,relevance:0,keywords:{built_in:"url data-uri"},contains:[...a,{className:"string",begin:/[^)]/,endsWithParent:!0,excludeEnd:!0}]},n.FUNCTION_DISPATCH]},{begin:e.lookahead(/@/),end:"[{;]",relevance:0,illegal:/:/,contains:[{className:"keyword",begin:r},{begin:/\s/,endsWithParent:!0,excludeEnd:!0,relevance:0,keywords:{$pattern:/[a-z-]+/,keyword:o,attribute:KN.join(" ")},contains:[{begin:/[a-z-]+(?=:)/,className:"attribute"},...a,n.CSS_NUMBER_MODE]}]},{className:"selector-tag",begin:"\\b("+YN.join("|")+")\\b"}]}}function $x(t){let e=t.regex;return{name:"Diff",aliases:["patch"],contains:[{className:"meta",relevance:10,match:e.either(/^@@ +-\d+,\d+ +\+\d+,\d+ +@@/,/^@@ +-\d+ +\+\d+,\d+ +@@/,/^@@ +-\d+,\d+ +\+\d+ +@@/,/^@@ +-\d+ +\+\d+ +@@/,/^\*\*\* +\d+,\d+ +\*\*\*\*$/,/^--- +\d+,\d+ +----$/)},{className:"comment",variants:[{begin:e.either(/Index: /,/^index/,/={3,}/,/^-{3}/,/^\*{3} /,/^\+{3}/,/^diff --git/),end:/$/},{match:/^\*{15}$/}]},{className:"addition",begin:/^\+/,end:/$/},{className:"deletion",begin:/^-/,end:/$/},{className:"addition",begin:/^!/,end:/$/}]}}function Bx(t){let r={keyword:["break","case","chan","const","continue","default","defer","else","fallthrough","for","func","go","goto","if","import","interface","map","package","range","return","select","struct","switch","type","var"],type:["bool","byte","complex64","complex128","error","float32","float64","int8","int16","int32","int64","string","uint8","uint16","uint32","uint64","int","uint","uintptr","rune"],literal:["true","false","iota","nil"],built_in:["append","cap","close","complex","copy","imag","len","make","new","panic","print","println","real","recover","delete"]};return{name:"Go",aliases:["golang"],keywords:r,illegal:"</",contains:[t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE,{className:"string",variants:[t.QUOTE_STRING_MODE,t.APOS_STRING_MODE,{begin:"`",end:"`"}]},{className:"number",variants:[{match:/-?\b0[xX]\.[a-fA-F0-9](_?[a-fA-F0-9])*[pP][+-]?\d(_?\d)*i?/,relevance:0},{match:/-?\b0[xX](_?[a-fA-F0-9])+((\.([a-fA-F0-9](_?[a-fA-F0-9])*)?)?[pP][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b0[oO](_?[0-7])*i?/,relevance:0},{match:/-?\b0[bB](_?[01])*i?/,relevance:0},{match:/-?\.\d(_?\d)*([eE][+-]?\d(_?\d)*)?i?/,relevance:0},{match:/-?\b\d(_?\d)*(\.(\d(_?\d)*)?)?([eE][+-]?\d(_?\d)*)?i?/,relevance:0}]},{begin:/:=/},{className:"function",beginKeywords:"func",end:"\\s*(\\{|$)",excludeEnd:!0,contains:[t.TITLE_MODE,{className:"params",begin:/\(/,end:/\)/,endsParent:!0,keywords:r,illegal:/["']/}]}]}}var Hx="[A-Za-z$_][0-9A-Za-z$_]*",JN=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],eO=["true","false","null","undefined","NaN","Infinity"],Ux=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],zx=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],Gx=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],tO=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","self","global"],nO=[].concat(Gx,Ux,zx);function qx(t){let e=t.regex,n=(G,{after:L})=>{let ne="</"+G[0].slice(1);return G.input.indexOf(ne,L)!==-1},i=Hx,o={begin:"<>",end:"</>"},r=/<[A-Za-z0-9\\._:-]+\s*\/>/,s={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(G,L)=>{let ne=G[0].length+G.index,Le=G.input[ne];if(Le==="<"||Le===","){L.ignoreMatch();return}Le===">"&&(n(G,{after:ne})||L.ignoreMatch());let tt,Ut=G.input.substring(ne);if(tt=Ut.match(/^\s*=/)){L.ignoreMatch();return}if((tt=Ut.match(/^\s+extends\s+/))&&tt.index===0){L.ignoreMatch();return}}},a={$pattern:Hx,keyword:JN,literal:eO,built_in:nO,"variable.language":tO},c="[0-9](_?[0-9])*",l=`\\.(${c})`,p="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",f={className:"number",variants:[{begin:`(\\b(${p})((${l})|\\.)?|(${l}))[eE][+-]?(${c})\\b`},{begin:`\\b(${p})\\b((${l})\\b|\\.)?|(${l})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},_={className:"subst",begin:"\\$\\{",end:"\\}",keywords:a,contains:[]},x={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,_],subLanguage:"xml"}},C={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,_],subLanguage:"css"}},T={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,_],subLanguage:"graphql"}},P={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,_]},W={className:"comment",variants:[t.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]},be=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,x,C,T,P,{match:/\$\d+/},f];_.contains=be.concat({begin:/\{/,end:/\}/,keywords:a,contains:["self"].concat(be)});let ye=[].concat(W,_.contains),Me=ye.concat([{begin:/(\s*)\(/,end:/\)/,keywords:a,contains:["self"].concat(ye)}]),me={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:Me},Je={variants:[{match:[/class/,/\s+/,i,/\s+/,/extends/,/\s+/,e.concat(i,"(",e.concat(/\./,i),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,i],scope:{1:"keyword",3:"title.class"}}]},je={relevance:0,match:e.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...Ux,...zx]}},Be={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},ft={variants:[{match:[/function/,/\s+/,i,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[me],illegal:/%/},St={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Rt(G){return e.concat("(?!",G.join("|"),")")}let kt={match:e.concat(/\b/,Rt([...Gx,"super","import","await"].map(G=>`${G}\\s*\\(`)),i,e.lookahead(/\s*\(/)),className:"title.function",relevance:0},et={begin:e.concat(/\./,e.lookahead(e.concat(i,/(?![0-9A-Za-z$_(])/))),end:i,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Se={match:[/get|set/,/\s+/,i,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},me]},R="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",Q={match:[/const|var|let/,/\s+/,i,/\s*/,/=\s*/,/(async\s*)?/,e.lookahead(R)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[me]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:a,exports:{PARAMS_CONTAINS:Me,CLASS_REFERENCE:je},illegal:/#(?![$_A-Za-z])/,contains:[t.SHEBANG({label:"shebang",binary:"node",relevance:5}),Be,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,x,C,T,P,W,{match:/\$\d+/},f,je,{scope:"attr",match:i+e.lookahead(":"),relevance:0},Q,{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[W,t.REGEXP_MODE,{className:"function",begin:R,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:Me}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:o.begin,end:o.end},{match:r},{begin:s.begin,"on:begin":s.isTrulyOpeningTag,end:s.end}],subLanguage:"xml",contains:[{begin:s.begin,end:s.end,skip:!0,contains:["self"]}]}]},ft,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+t.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[me,t.inherit(t.TITLE_MODE,{begin:i,className:"title.function"})]},{match:/\.\.\./,relevance:0},et,{match:"\\$"+i,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[me]},kt,St,Je,Se,{match:/\$[(.]/}]}}var iO="([-+]?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)|NaN|[-+]?Infinity",oO={scope:"number",match:iO,relevance:0};function Wx(t){let e={className:"attr",begin:/(("(\\.|[^\\"\r\n])*")|('(\\.|[^\\'\r\n])*'))(?=\s*:)/,relevance:1.01},n={match:/[{}[\],:]/,className:"punctuation",relevance:0},i=["true","false","null"],o={scope:"literal",beginKeywords:i.join(" ")};return{name:"JSON",aliases:["jsonc","json5"],keywords:{literal:i},contains:[e,n,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,o,oO,t.C_LINE_COMMENT_MODE,t.C_BLOCK_COMMENT_MODE],illegal:"\\S"}}function Yx(t){let e=t.regex,n={begin:/<\/?[A-Za-z_]/,end:">",subLanguage:"xml",relevance:0},i={match:/^ {0,3}([-*_])[ \t]*(?:\1[ \t]*){2,}$/},o={className:"code",variants:[{begin:"(`{3,})[^`](.|\\n)*?\\1`*[ ]*"},{begin:"(~{3,})[^~](.|\\n)*?\\1~*[ ]*"},{begin:"```",end:"```+[ ]*$"},{begin:"~~~",end:"~~~+[ ]*$"},{begin:"`.+?`"},{begin:"(?=^( {4}|\\t))",contains:[{begin:"^( {4}|\\t)",end:"(\\n)$"}],relevance:0}]},r={className:"bullet",begin:"^[ ]*([*+-]|(\\d+\\.))(?=\\s+)",end:"\\s+",excludeEnd:!0},s={begin:/^\[[^\n]+\]:/,returnBegin:!0,contains:[{className:"symbol",begin:/\[/,end:/\]/,excludeBegin:!0,excludeEnd:!0},{className:"link",begin:/:\s*/,end:/$/,excludeBegin:!0}]},a=/[A-Za-z][A-Za-z0-9+.-]*/,c={variants:[{begin:/\[.+?\]\[.*?\]/,relevance:0},{begin:/\[.+?\]\(((data|javascript|mailto):|(?:http|ftp)s?:\/\/).*?\)/,relevance:2},{begin:e.concat(/\[.+?\]\(/,a,/:\/\/.*?\)/),relevance:2},{begin:/\[.+?\]\([./?&#].*?\)/,relevance:1},{begin:/\[.*?\]\(.*?\)/,relevance:0}],returnBegin:!0,contains:[{match:/\[(?=\])/},{className:"string",relevance:0,begin:"\\[",end:"\\]",excludeBegin:!0,returnEnd:!0},{className:"link",relevance:0,begin:"\\]\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0},{className:"symbol",relevance:0,begin:"\\]\\[",end:"\\]",excludeBegin:!0,excludeEnd:!0}]},l={className:"strong",contains:[],variants:[{begin:/_{2}(?!\s)/,end:/_{2}/},{begin:/\*{2}(?!\s)/,end:/\*{2}/}]},p={className:"emphasis",contains:[],variants:[{begin:/\*(?![*\s])/,end:/\*/},{begin:/_(?![_\s])/,end:/_/,relevance:0}]},f=t.inherit(l,{contains:[]}),_=t.inherit(p,{contains:[]});l.contains.push(_),p.contains.push(f);let x=[n,c];return[l,p,f,_].forEach(Y=>{Y.contains=Y.contains.concat(x)}),x=x.concat(l,p),{name:"Markdown",aliases:["md","mkdown","mkd"],contains:[{className:"section",variants:[{begin:"^#{1,6}",end:"$",contains:x},{begin:"(?=^.+?\\n[=-]{2,}$)",contains:[{begin:"^[=-]*$"},{begin:"^",end:"\\n",contains:x}]}]},n,r,i,l,p,{className:"quote",begin:"^>\\s+",contains:x,end:"$"},o,c,s,{scope:"literal",match:/&([a-zA-Z0-9]+|#[0-9]{1,7}|#[Xx][0-9a-fA-F]{1,6});/}]}}function Kx(t){let e=t.regex,n=/(?![A-Za-z0-9])(?![$])/,i=e.concat(/[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*/,n),o=e.concat(/(\\?[A-Z][a-z0-9_\x7f-\xff]+|\\?[A-Z]+(?=[A-Z][a-z0-9_\x7f-\xff])){1,}/,n),r=e.concat(/[A-Z]+/,n),s={scope:"variable",match:"\\$+"+i},a={scope:"meta",variants:[{begin:/<\?php/,relevance:10},{begin:/<\?=/},{begin:/<\?/,relevance:.1},{begin:/\?>/}]},c={scope:"subst",variants:[{begin:/\$\w+/},{begin:/\{\$/,end:/\}/}]},l=t.inherit(t.APOS_STRING_MODE,{illegal:null}),p=t.inherit(t.QUOTE_STRING_MODE,{illegal:null,contains:t.QUOTE_STRING_MODE.contains.concat(c)}),f={begin:/<<<[ \t]*(?:(\w+)|"(\w+)")\n/,end:/[ \t]*(\w+)\b/,contains:t.QUOTE_STRING_MODE.contains.concat(c),"on:begin":(et,Se)=>{Se.data._beginMatch=et[1]||et[2]},"on:end":(et,Se)=>{Se.data._beginMatch!==et[1]&&Se.ignoreMatch()}},_=t.END_SAME_AS_BEGIN({begin:/<<<[ \t]*'(\w+)'\n/,end:/[ \t]*(\w+)\b/}),x=`[
|
|
14
14
|
]`,C={scope:"string",variants:[p,l,f,_]},T={scope:"number",variants:[{begin:"\\b0[bB][01]+(?:_[01]+)*\\b"},{begin:"\\b0[oO][0-7]+(?:_[0-7]+)*\\b"},{begin:"\\b0[xX][\\da-fA-F]+(?:_[\\da-fA-F]+)*\\b"},{begin:"(?:\\b\\d+(?:_\\d+)*(\\.(?:\\d+(?:_\\d+)*))?|\\B\\.\\d+)(?:[eE][+-]?\\d+)?"}],relevance:0},P=["false","null","true"],Y=["__CLASS__","__DIR__","__FILE__","__FUNCTION__","__COMPILER_HALT_OFFSET__","__LINE__","__METHOD__","__NAMESPACE__","__TRAIT__","die","echo","exit","include","include_once","print","require","require_once","array","abstract","and","as","binary","bool","boolean","break","callable","case","catch","class","clone","const","continue","declare","default","do","double","else","elseif","empty","enddeclare","endfor","endforeach","endif","endswitch","endwhile","enum","eval","extends","final","finally","float","for","foreach","from","global","goto","if","implements","instanceof","insteadof","int","integer","interface","isset","iterable","list","match|0","mixed","new","never","object","or","private","protected","public","readonly","real","return","string","switch","throw","trait","try","unset","use","var","void","while","xor","yield"],W=["Error|0","AppendIterator","ArgumentCountError","ArithmeticError","ArrayIterator","ArrayObject","AssertionError","BadFunctionCallException","BadMethodCallException","CachingIterator","CallbackFilterIterator","CompileError","Countable","DirectoryIterator","DivisionByZeroError","DomainException","EmptyIterator","ErrorException","Exception","FilesystemIterator","FilterIterator","GlobIterator","InfiniteIterator","InvalidArgumentException","IteratorIterator","LengthException","LimitIterator","LogicException","MultipleIterator","NoRewindIterator","OutOfBoundsException","OutOfRangeException","OuterIterator","OverflowException","ParentIterator","ParseError","RangeException","RecursiveArrayIterator","RecursiveCachingIterator","RecursiveCallbackFilterIterator","RecursiveDirectoryIterator","RecursiveFilterIterator","RecursiveIterator","RecursiveIteratorIterator","RecursiveRegexIterator","RecursiveTreeIterator","RegexIterator","RuntimeException","SeekableIterator","SplDoublyLinkedList","SplFileInfo","SplFileObject","SplFixedArray","SplHeap","SplMaxHeap","SplMinHeap","SplObjectStorage","SplObserver","SplPriorityQueue","SplQueue","SplStack","SplSubject","SplTempFileObject","TypeError","UnderflowException","UnexpectedValueException","UnhandledMatchError","ArrayAccess","BackedEnum","Closure","Fiber","Generator","Iterator","IteratorAggregate","Serializable","Stringable","Throwable","Traversable","UnitEnum","WeakReference","WeakMap","Directory","__PHP_Incomplete_Class","parent","php_user_filter","self","static","stdClass"],ye={keyword:Y,literal:(et=>{let Se=[];return et.forEach(R=>{Se.push(R),R.toLowerCase()===R?Se.push(R.toUpperCase()):Se.push(R.toLowerCase())}),Se})(P),built_in:W},Me=et=>et.map(Se=>Se.replace(/\|\d+$/,"")),me={variants:[{match:[/new/,e.concat(x,"+"),e.concat("(?!",Me(W).join("\\b|"),"\\b)"),o],scope:{1:"keyword",4:"title.class"}}]},Je=e.concat(i,"\\b(?!\\()"),je={variants:[{match:[e.concat(/::/,e.lookahead(/(?!class\b)/)),Je],scope:{2:"variable.constant"}},{match:[/::/,/class/],scope:{2:"variable.language"}},{match:[o,e.concat(/::/,e.lookahead(/(?!class\b)/)),Je],scope:{1:"title.class",3:"variable.constant"}},{match:[o,e.concat("::",e.lookahead(/(?!class\b)/))],scope:{1:"title.class"}},{match:[o,/::/,/class/],scope:{1:"title.class",3:"variable.language"}}]},Be={scope:"attr",match:e.concat(i,e.lookahead(":"),e.lookahead(/(?!::)/))},ft={relevance:0,begin:/\(/,end:/\)/,keywords:ye,contains:[Be,s,je,t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE,t.HASH_COMMENT_MODE,C,T,me]},St={relevance:0,match:[/\b/,e.concat("(?!fn\\b|function\\b|",Me(Y).join("\\b|"),"|",Me(W).join("\\b|"),"\\b)"),i,e.concat(x,"*"),e.lookahead(/(?=\()/)],scope:{3:"title.function.invoke"},contains:[ft]};ft.contains.push(St);let Rt=[Be,je,t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE,t.HASH_COMMENT_MODE,C,T,me],kt={begin:e.concat(/#\[\s*\\?/,e.either(o,r)),beginScope:"meta",end:/]/,endScope:"meta",keywords:{literal:P,keyword:["new","array"]},contains:[{begin:/\[/,end:/]/,keywords:{literal:P,keyword:["new","array"]},contains:["self",...Rt]},...Rt,{scope:"meta",variants:[{match:o},{match:r}]}]};return{case_insensitive:!1,keywords:ye,contains:[kt,t.HASH_COMMENT_MODE,t.COMMENT("//","$"),t.COMMENT("/\\*","\\*/",{contains:[{scope:"doctag",match:"@[A-Za-z]+"}]}),{match:/__halt_compiler\(\);/,keywords:"__halt_compiler",starts:{scope:"comment",end:t.MATCH_NOTHING_RE,contains:[{match:/\?>/,scope:"meta",endsParent:!0}]}},a,{scope:"variable.language",match:/\$this\b/},s,St,je,{match:[/const/,/\s/,i],scope:{1:"keyword",3:"variable.constant"}},me,{scope:"function",relevance:0,beginKeywords:"fn function",end:/[;{]/,excludeEnd:!0,illegal:"[$%\\[]",contains:[{beginKeywords:"use"},t.UNDERSCORE_TITLE_MODE,{begin:"=>",endsParent:!0},{scope:"params",begin:"\\(",end:"\\)",excludeBegin:!0,excludeEnd:!0,keywords:ye,contains:["self",kt,s,je,t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE,t.HASH_COMMENT_MODE,C,T]}]},{scope:"class",variants:[{beginKeywords:"enum",illegal:/[($"]/},{beginKeywords:"class interface trait",illegal:/[:($"]/}],relevance:0,end:/\{/,excludeEnd:!0,contains:[{beginKeywords:"extends implements"},t.UNDERSCORE_TITLE_MODE]},{beginKeywords:"namespace",relevance:0,end:";",illegal:/[.']/,contains:[t.inherit(t.UNDERSCORE_TITLE_MODE,{scope:"title.class"})]},{beginKeywords:"use",relevance:0,end:";",contains:[{match:/\b(as|const|function)\b/,scope:"keyword"},t.UNDERSCORE_TITLE_MODE]},C,T]}}function Zx(t){let e=t.regex,n=new RegExp("[\\p{XID_Start}_]\\p{XID_Continue}*","u"),i=["and","as","assert","async","await","break","case","class","continue","def","del","elif","else","except","finally","for","from","global","if","import","in","is","lambda","lazy","match","nonlocal|10","not","or","pass","raise","return","try","while","with","yield"],a={$pattern:/[A-Za-z]\w+|__\w+__/,keyword:i,built_in:["__import__","abs","aiter","all","anext","any","ascii","bin","bool","breakpoint","bytearray","bytes","callable","chr","classmethod","compile","complex","delattr","dict","dir","divmod","enumerate","eval","exec","filter","float","format","frozendict","frozenset","getattr","globals","hasattr","hash","help","hex","id","input","int","isinstance","issubclass","iter","len","list","locals","map","max","memoryview","min","next","object","oct","open","ord","pow","print","property","range","repr","reversed","round","sentinel","set","setattr","slice","sorted","staticmethod","str","sum","super","tuple","type","vars","zip"],literal:["__debug__","Ellipsis","False","None","NotImplemented","True"],type:["Any","Callable","Coroutine","Dict","List","Literal","Generic","Optional","Sequence","Set","Tuple","Type","Union"]},c={className:"meta",begin:/^(>>>|\.\.\.) /},l={className:"subst",begin:/\{/,end:/\}/,keywords:a,illegal:/#/},p={begin:/\{\{/,relevance:0},f={className:"string",contains:[t.BACKSLASH_ESCAPE],variants:[{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,c],relevance:10},{begin:/([uU]|[bB]|[rR]|[bB][rR]|[rR][bB])?"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,c],relevance:10},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])'''/,end:/'''/,contains:[t.BACKSLASH_ESCAPE,c,p,l]},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])"""/,end:/"""/,contains:[t.BACKSLASH_ESCAPE,c,p,l]},{begin:/([uU]|[rR])'/,end:/'/,relevance:10},{begin:/([uU]|[rR])"/,end:/"/,relevance:10},{begin:/([bB]|[bB][rR]|[rR][bB])'/,end:/'/},{begin:/([bB]|[bB][rR]|[rR][bB])"/,end:/"/},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])'/,end:/'/,contains:[t.BACKSLASH_ESCAPE,p,l]},{begin:/([fFtT][rR]|[rR][fFtT]|[fFtT])"/,end:/"/,contains:[t.BACKSLASH_ESCAPE,p,l]},t.APOS_STRING_MODE,t.QUOTE_STRING_MODE]},_="[0-9](_?[0-9])*",x=`(\\b(${_}))?\\.(${_})|\\b(${_})\\.`,C=`\\b|${i.join("|")}`,T={className:"number",relevance:0,variants:[{begin:`(\\b(${_})|(${x}))[eE][+-]?(${_})[jJ]?(?=${C})`},{begin:`(${x})[jJ]?`},{begin:`\\b([1-9](_?[0-9])*|0+(_?0)*)[lLjJ]?(?=${C})`},{begin:`\\b0[bB](_?[01])+[lL]?(?=${C})`},{begin:`\\b0[oO](_?[0-7])+[lL]?(?=${C})`},{begin:`\\b0[xX](_?[0-9a-fA-F])+[lL]?(?=${C})`},{begin:`\\b(${_})[jJ](?=${C})`}]},P={className:"comment",begin:e.lookahead(/# type:/),end:/$/,keywords:a,contains:[{begin:/# type:/},{begin:/#/,end:/\b\B/,endsWithParent:!0}]},Y={className:"params",variants:[{className:"",begin:/\(\s*\)/,skip:!0},{begin:/\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:["self",c,T,f,t.HASH_COMMENT_MODE]}]};return l.contains=[f,T,c],{name:"Python",aliases:["py","gyp","ipython"],unicodeRegex:!0,keywords:a,illegal:/(<\/|\?)|=>/,contains:[c,T,{scope:"variable.language",match:/\bself\b/},{beginKeywords:"if",relevance:0},{match:/\bor\b/,scope:"keyword"},f,P,t.HASH_COMMENT_MODE,{match:[/\bdef/,/\s+/,n],scope:{1:"keyword",3:"title.function"},contains:[Y]},{variants:[{match:[/\bclass/,/\s+/,n,/\s*/,/\(\s*/,n,/\s*\)/]},{match:[/\bclass/,/\s+/,n]}],scope:{1:"keyword",3:"title.class",6:"title.class.inherited"}},{className:"meta",begin:/^[\t ]*@/,end:/(?=#)|$/,contains:[T,Y,f]}]}}var Zd="[A-Za-z$_][0-9A-Za-z$_]*",Qx=["as","in","of","if","for","while","finally","var","new","function","do","return","void","else","break","catch","instanceof","with","throw","case","default","try","switch","continue","typeof","delete","let","yield","const","class","debugger","async","await","static","import","from","export","extends","using"],Xx=["true","false","null","undefined","NaN","Infinity"],Jx=["Object","Function","Boolean","Symbol","Math","Date","Number","BigInt","String","RegExp","Array","Float32Array","Float64Array","Int8Array","Uint8Array","Uint8ClampedArray","Int16Array","Int32Array","Uint16Array","Uint32Array","BigInt64Array","BigUint64Array","Set","Map","WeakSet","WeakMap","ArrayBuffer","SharedArrayBuffer","Atomics","DataView","JSON","Promise","Generator","GeneratorFunction","AsyncFunction","Reflect","Proxy","Intl","WebAssembly"],eC=["Error","EvalError","InternalError","RangeError","ReferenceError","SyntaxError","TypeError","URIError"],tC=["setInterval","setTimeout","clearInterval","clearTimeout","require","exports","eval","isFinite","isNaN","parseFloat","parseInt","decodeURI","decodeURIComponent","encodeURI","encodeURIComponent","escape","unescape"],nC=["arguments","this","super","console","window","document","localStorage","sessionStorage","module","self","global"],iC=[].concat(tC,Jx,eC);function rO(t){let e=t.regex,n=(G,{after:L})=>{let ne="</"+G[0].slice(1);return G.input.indexOf(ne,L)!==-1},i=Zd,o={begin:"<>",end:"</>"},r=/<[A-Za-z0-9\\._:-]+\s*\/>/,s={begin:/<[A-Za-z0-9\\._:-]+/,end:/\/[A-Za-z0-9\\._:-]+>|\/>/,isTrulyOpeningTag:(G,L)=>{let ne=G[0].length+G.index,Le=G.input[ne];if(Le==="<"||Le===","){L.ignoreMatch();return}Le===">"&&(n(G,{after:ne})||L.ignoreMatch());let tt,Ut=G.input.substring(ne);if(tt=Ut.match(/^\s*=/)){L.ignoreMatch();return}if((tt=Ut.match(/^\s+extends\s+/))&&tt.index===0){L.ignoreMatch();return}}},a={$pattern:Zd,keyword:Qx,literal:Xx,built_in:iC,"variable.language":nC},c="[0-9](_?[0-9])*",l=`\\.(${c})`,p="0|[1-9](_?[0-9])*|0[0-7]*[89][0-9]*",f={className:"number",variants:[{begin:`(\\b(${p})((${l})|\\.)?|(${l}))[eE][+-]?(${c})\\b`},{begin:`\\b(${p})\\b((${l})\\b|\\.)?|(${l})\\b`},{begin:"\\b(0|[1-9](_?[0-9])*)n\\b"},{begin:"\\b0[xX][0-9a-fA-F](_?[0-9a-fA-F])*n?\\b"},{begin:"\\b0[bB][0-1](_?[0-1])*n?\\b"},{begin:"\\b0[oO][0-7](_?[0-7])*n?\\b"},{begin:"\\b0[0-7]+n?\\b"}],relevance:0},_={className:"subst",begin:"\\$\\{",end:"\\}",keywords:a,contains:[]},x={begin:".?html`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,_],subLanguage:"xml"}},C={begin:".?css`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,_],subLanguage:"css"}},T={begin:".?gql`",end:"",starts:{end:"`",returnEnd:!1,contains:[t.BACKSLASH_ESCAPE,_],subLanguage:"graphql"}},P={className:"string",begin:"`",end:"`",contains:[t.BACKSLASH_ESCAPE,_]},W={className:"comment",variants:[t.COMMENT(/\/\*\*(?!\/)/,"\\*/",{relevance:0,contains:[{begin:"(?=@[A-Za-z]+)",relevance:0,contains:[{className:"doctag",begin:"@[A-Za-z]+"},{className:"type",begin:"\\{",end:"\\}",excludeEnd:!0,excludeBegin:!0,relevance:0},{className:"variable",begin:i+"(?=\\s*(-)|$)",endsParent:!0,relevance:0},{begin:/(?=[^\n])\s/,relevance:0}]}]}),t.C_BLOCK_COMMENT_MODE,t.C_LINE_COMMENT_MODE]},be=[t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,x,C,T,P,{match:/\$\d+/},f];_.contains=be.concat({begin:/\{/,end:/\}/,keywords:a,contains:["self"].concat(be)});let ye=[].concat(W,_.contains),Me=ye.concat([{begin:/(\s*)\(/,end:/\)/,keywords:a,contains:["self"].concat(ye)}]),me={className:"params",begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:Me},Je={variants:[{match:[/class/,/\s+/,i,/\s+/,/extends/,/\s+/,e.concat(i,"(",e.concat(/\./,i),")*")],scope:{1:"keyword",3:"title.class",5:"keyword",7:"title.class.inherited"}},{match:[/class/,/\s+/,i],scope:{1:"keyword",3:"title.class"}}]},je={relevance:0,match:e.either(/\bJSON/,/\b[A-Z][a-z]+([A-Z][a-z]*|\d)*/,/\b[A-Z]{2,}([A-Z][a-z]+|\d)+([A-Z][a-z]*)*/,/\b[A-Z]{2,}[a-z]+([A-Z][a-z]+|\d)*([A-Z][a-z]*)*/),className:"title.class",keywords:{_:[...Jx,...eC]}},Be={label:"use_strict",className:"meta",relevance:10,begin:/^\s*['"]use (strict|asm)['"]/},ft={variants:[{match:[/function/,/\s+/,i,/(?=\s*\()/]},{match:[/function/,/\s*(?=\()/]}],className:{1:"keyword",3:"title.function"},label:"func.def",contains:[me],illegal:/%/},St={relevance:0,match:/\b[A-Z][A-Z_0-9]+\b/,className:"variable.constant"};function Rt(G){return e.concat("(?!",G.join("|"),")")}let kt={match:e.concat(/\b/,Rt([...tC,"super","import","await"].map(G=>`${G}\\s*\\(`)),i,e.lookahead(/\s*\(/)),className:"title.function",relevance:0},et={begin:e.concat(/\./,e.lookahead(e.concat(i,/(?![0-9A-Za-z$_(])/))),end:i,excludeBegin:!0,keywords:"prototype",className:"property",relevance:0},Se={match:[/get|set/,/\s+/,i,/(?=\()/],className:{1:"keyword",3:"title.function"},contains:[{begin:/\(\)/},me]},R="(\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)|"+t.UNDERSCORE_IDENT_RE+")\\s*=>",Q={match:[/const|var|let/,/\s+/,i,/\s*/,/=\s*/,/(async\s*)?/,e.lookahead(R)],keywords:"async",className:{1:"keyword",3:"title.function"},contains:[me]};return{name:"JavaScript",aliases:["js","jsx","mjs","cjs"],keywords:a,exports:{PARAMS_CONTAINS:Me,CLASS_REFERENCE:je},illegal:/#(?![$_A-Za-z])/,contains:[t.SHEBANG({label:"shebang",binary:"node",relevance:5}),Be,t.APOS_STRING_MODE,t.QUOTE_STRING_MODE,x,C,T,P,W,{match:/\$\d+/},f,je,{scope:"attr",match:i+e.lookahead(":"),relevance:0},Q,{begin:"("+t.RE_STARTERS_RE+"|\\b(case|return|throw)\\b)\\s*",keywords:"return throw case",relevance:0,contains:[W,t.REGEXP_MODE,{className:"function",begin:R,returnBegin:!0,end:"\\s*=>",contains:[{className:"params",variants:[{begin:t.UNDERSCORE_IDENT_RE,relevance:0},{className:null,begin:/\(\s*\)/,skip:!0},{begin:/(\s*)\(/,end:/\)/,excludeBegin:!0,excludeEnd:!0,keywords:a,contains:Me}]}]},{begin:/,/,relevance:0},{match:/\s+/,relevance:0},{variants:[{begin:o.begin,end:o.end},{match:r},{begin:s.begin,"on:begin":s.isTrulyOpeningTag,end:s.end}],subLanguage:"xml",contains:[{begin:s.begin,end:s.end,skip:!0,contains:["self"]}]}]},ft,{beginKeywords:"while if switch catch for"},{begin:"\\b(?!function)"+t.UNDERSCORE_IDENT_RE+"\\([^()]*(\\([^()]*(\\([^()]*\\)[^()]*)*\\)[^()]*)*\\)\\s*\\{",returnBegin:!0,label:"func.def",contains:[me,t.inherit(t.TITLE_MODE,{begin:i,className:"title.function"})]},{match:/\.\.\./,relevance:0},et,{match:"\\$"+i,relevance:0},{match:[/\bconstructor(?=\s*\()/],className:{1:"title.function"},contains:[me]},kt,St,Je,Se,{match:/\$[(.]/}]}}function oC(t){let e=t.regex,n=rO(t),i=Zd,o=["any","void","number","boolean","string","object","never","symbol","bigint","unknown"],r={begin:[/namespace/,/\s+/,t.IDENT_RE],beginScope:{1:"keyword",3:"title.class"}},s={beginKeywords:"interface",end:/\{/,excludeEnd:!0,keywords:{keyword:"interface extends",built_in:o},contains:[n.exports.CLASS_REFERENCE]},a={className:"meta",relevance:10,begin:/^\s*['"]use strict['"]/},c=["type","interface","public","private","protected","implements","declare","abstract","readonly","enum","override","satisfies"],l={$pattern:Zd,keyword:Qx.concat(c),literal:Xx,built_in:iC.concat(o),"variable.language":nC},p={className:"meta",begin:"@"+i},f=(T,P,Y)=>{let W=T.contains.findIndex(be=>be.label===P);if(W===-1)throw new Error("can not find mode to replace");T.contains.splice(W,1,Y)};Object.assign(n.keywords,l),n.exports.PARAMS_CONTAINS.push(p);let _=n.contains.find(T=>T.scope==="attr"),x=Object.assign({},_,{match:e.concat(i,e.lookahead(/\s*\?:/))});n.exports.PARAMS_CONTAINS.push([n.exports.CLASS_REFERENCE,_,x]),n.contains=n.contains.concat([p,r,s,x]),f(n,"shebang",t.SHEBANG()),f(n,"use_strict",a);let C=n.contains.find(T=>T.label==="func.def");return C.relevance=0,Object.assign(n,{name:"TypeScript",aliases:["ts","tsx","mts","cts"]}),n}function rC(t){let e=t.regex,n=e.concat(/[\p{L}_]/u,e.optional(/[\p{L}0-9_.-]*:/u),/[\p{L}0-9_.-]*/u),i=/[\p{L}0-9._:-]+/u,o={className:"symbol",begin:/&[a-z]+;|&#[0-9]+;|&#x[a-f0-9]+;/},r={begin:/\s/,contains:[{className:"keyword",begin:/#?[a-z_][a-z1-9_-]+/,illegal:/\n/}]},s=t.inherit(r,{begin:/\(/,end:/\)/}),a=t.inherit(t.APOS_STRING_MODE,{className:"string"}),c=t.inherit(t.QUOTE_STRING_MODE,{className:"string"}),l={endsWithParent:!0,illegal:/</,relevance:0,contains:[{className:"attr",begin:i,relevance:0},{begin:/=\s*/,relevance:0,contains:[{className:"string",endsParent:!0,variants:[{begin:/"/,end:/"/,contains:[o]},{begin:/'/,end:/'/,contains:[o]},{begin:/[^\s"'=<>`]+/}]}]}]};return{name:"HTML, XML",aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist","wsf","svg"],case_insensitive:!0,unicodeRegex:!0,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,relevance:10,contains:[r,c,a,s,{begin:/\[/,end:/\]/,contains:[{className:"meta",begin:/<![a-z]/,end:/>/,contains:[r,s,c,a]}]}]},t.COMMENT(/<!--/,/-->/,{relevance:10}),{begin:/<!\[CDATA\[/,end:/\]\]>/,relevance:10},o,{className:"meta",end:/\?>/,variants:[{begin:/<\?xml/,relevance:10,contains:[c]},{begin:/<\?[a-z][a-z0-9]+/}]},{className:"tag",begin:/<style(?=\s|>)/,end:/>/,keywords:{name:"style"},contains:[l],starts:{end:/<\/style>/,returnEnd:!0,subLanguage:"css"}},{className:"tag",begin:/<script(?=\s|>)/,end:/>/,keywords:{name:"script"},contains:[l],starts:{end:/<\/script>/,returnEnd:!0,subLanguage:"javascript"}},{className:"tag",begin:/<>|<\/>/},{className:"tag",begin:e.concat(/</,e.lookahead(e.concat(n,e.either(/\/>/,/>/,/\s/)))),end:/\/?>/,contains:[{className:"name",begin:n,relevance:0,starts:l}]},{className:"tag",begin:e.concat(/<\//,e.lookahead(e.concat(n,/>/))),contains:[{className:"name",begin:n,relevance:0},{begin:/>/,relevance:0,endsParent:!0}]}]}}function sC(t){let e="true false yes no null",n="[\\w#;/?:@&=+$,.~*'()[\\]]+",i={className:"attr",variants:[{begin:/[\w*@][\w*@ :()\./-]*:(?=[ \t]|$)/},{begin:/"[\w*@][\w*@ :()\./-]*":(?=[ \t]|$)/},{begin:/'[\w*@][\w*@ :()\./-]*':(?=[ \t]|$)/}]},o={className:"template-variable",variants:[{begin:/\{\{/,end:/\}\}/},{begin:/%\{/,end:/\}/}]},r={className:"string",relevance:0,begin:/'/,end:/'/,contains:[{match:/''/,scope:"char.escape",relevance:0}]},s={className:"string",relevance:0,variants:[{begin:/"/,end:/"/},{begin:/\S+/}],contains:[t.BACKSLASH_ESCAPE,o]},a=t.inherit(s,{variants:[{begin:/'/,end:/'/,contains:[{begin:/''/,relevance:0}]},{begin:/"/,end:/"/},{begin:/[^\s,{}[\]]+/}]}),_={className:"number",begin:"\\b"+"[0-9]{4}(-[0-9][0-9]){0,2}"+"([Tt \\t][0-9][0-9]?(:[0-9][0-9]){2})?"+"(\\.[0-9]*)?"+"([ \\t])*(Z|[-+][0-9][0-9]?(:[0-9][0-9])?)?"+"\\b"},x={end:",",endsWithParent:!0,excludeEnd:!0,keywords:e,relevance:0},C={begin:/\{/,end:/\}/,contains:[x],illegal:"\\n",relevance:0},T={begin:"\\[",end:"\\]",contains:[x],illegal:"\\n",relevance:0},P=[i,{className:"meta",begin:"^---\\s*$",relevance:10},{className:"string",begin:"[\\|>]([1-9]?[+-])?[ ]*\\n( +)[^ ][^\\n]*\\n(\\2[^\\n]+\\n?)*"},{begin:"<%[%=-]?",end:"[%-]?%>",subLanguage:"ruby",excludeBegin:!0,excludeEnd:!0,relevance:0},{className:"type",begin:"!\\w+!"+n},{className:"type",begin:"!<"+n+">"},{className:"type",begin:"!"+n},{className:"type",begin:"!!"+n},{className:"meta",begin:"&"+t.UNDERSCORE_IDENT_RE+"$"},{className:"meta",begin:"\\*"+t.UNDERSCORE_IDENT_RE+"$"},{className:"bullet",begin:"-(?=[ ]|$)",relevance:0},t.HASH_COMMENT_MODE,{beginKeywords:e,keywords:{literal:e}},_,{className:"number",begin:t.C_NUMBER_RE+"\\b",relevance:0},C,T,r,s],Y=[...P];return Y.pop(),Y.push(a),x.contains=Y,{name:"YAML",case_insensitive:!0,aliases:["yml"],contains:P}}for(let[t,e]of Object.entries({bash:Vx,css:jx,diff:$x,go:Bx,javascript:qx,json:Wx,markdown:Yx,php:Kx,python:Zx,typescript:oC,xml:rC,yaml:sC}))Kd.registerLanguage(t,e);var sO={sh:"bash",shell:"bash",zsh:"bash",js:"javascript",mjs:"javascript",cjs:"javascript",jsx:"javascript",ts:"typescript",mts:"typescript",cts:"typescript",tsx:"typescript",html:"xml",svg:"xml",md:"markdown",yml:"yaml"},aO={bash:"bash",cjs:"javascript",css:"css",diff:"diff",go:"go",html:"xml",js:"javascript",json:"json",jsx:"javascript",md:"markdown",mjs:"javascript",patch:"diff",php:"php",py:"python",sh:"bash",svg:"xml",ts:"typescript",tsx:"typescript",xml:"xml",yaml:"yaml",yml:"yaml",zsh:"bash"};function kh(t){let e=t.split("/").pop()??"",n=e.lastIndexOf(".");if(!(n<=0))return aO[e.slice(n+1).toLowerCase()]}function Is(t,e){let n=(e??"").trim().toLowerCase(),i=sO[n]??n;return i.length>0&&Kd.getLanguage(i)!==void 0?{html:Kd.highlight(t,{language:i,ignoreIllegals:!0}).value,language:i}:{html:cO(t),language:"text"}}function cO(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}var lO="file:",dO="mention:",Ao="draft",dn=class t{morse=N(Ze);items=O([]);active=O(void 0);tabs=this.items.asReadonly();activeId=this.active.asReadonly();mainTabs=E(()=>this.items().filter(e=>e.kind==="session"||e.mention!==!0));activeTab=E(()=>this.items().find(e=>e.id===this.active()));contextSessionId=E(()=>{let e=this.activeTab();return e?.kind==="session"?e.id:e?.kind==="file"&&e.mention===!0?e.sessionId:void 0});mentionTabs=E(()=>{let e=this.contextSessionId();return this.items().filter(n=>n.kind==="file"&&n.mention===!0&&(e===void 0?n.sessionId===void 0:n.sessionId===e))});openSessionIds=E(()=>new Set(this.items().filter(e=>e.kind==="session").map(e=>e.id)));ensureSession(e){if(this.findSession(e.id)===void 0){this.items.update(i=>[...i,V({kind:"session"},e)]),this.active()===void 0&&this.active.set(e.id);return}this.refreshSession(e)}refreshSession(e){let n=this.findSession(e.id);n===void 0||n.title===e.title&&n.cwd===e.cwd||this.items.update(i=>i.map(o=>o.kind==="session"&&o.id===e.id?V(V({},o),e):o))}startDraft(e){this.openDraft(e),this.morse.newSession(e)}openDraft(e){this.items().find(i=>i.kind==="session"&&i.id===Ao)===void 0&&this.items.update(i=>[...i,{kind:"session",id:Ao,title:"New session",cwd:e,draft:!0}]),this.active.set(Ao)}focusSession(e){this.discardDraft(),this.showSession(e),this.morse.activateSession(e.id,e.cwd)}showSession(e){this.promoteDraft(e),this.ensureSession(e),this.active.set(e.id)}openFile(e){this.openFileTab(e,!1,void 0)}openMentionFile(e){this.openFileTab(e,!0,this.contextSessionId())}openFileTab(e,n,i){let o=n?aC(i,e):`${lO}${e}`,r=this.items().find(s=>s.id===o);r===void 0&&this.items.update(s=>[...s,{kind:"file",id:o,path:e,title:fO(e),language:kh(e),loading:!0,mention:n,sessionId:n?i:void 0}]),this.active.set(o),(r===void 0||this.needsLoad(r))&&this.load(o)}select(e){let n=this.items().find(i=>i.id===e);if(n!==void 0){if(this.active.set(e),n.kind==="session"){n.draft!==!0&&this.morse.activateSession(n.id,n.cwd);return}this.needsLoad(n)&&this.load(e)}}close(e){let n=this.items().findIndex(s=>s.id===e);if(n===-1)return;let i=this.items()[n],o=i.kind==="session"&&i.draft!==!0,r=i.kind==="session"?i.cwd:void 0;this.remove(this.doomedWith(e),n),o&&this.fallBackToEmptySession(r)}forget(e){let n=this.items().findIndex(i=>i.id===e);n!==-1&&this.remove(this.doomedWith(e),n)}clearActiveSession(){let e=this.items().find(n=>n.id===this.active());e!==void 0&&e.kind==="session"&&e.draft!==!0&&this.active.set(void 0)}closeOthers(e){let n=this.items().find(a=>a.id===e);if(n===void 0)return;let i=new Set([e]);if(n.kind==="session")for(let a of this.mentionFilesOf(e))i.add(a.id);else n.mention===!0&&n.sessionId!==void 0&&i.add(n.sessionId);let o=this.items().filter(a=>!i.has(a.id)),r=o.some(a=>a.kind==="session"&&a.draft!==!0),s=o.find(a=>a.kind==="session")?.cwd;this.items.update(a=>a.filter(c=>i.has(c.id))),this.active.set(e),n.kind==="session"&&n.draft!==!0&&this.morse.activateSession(n.id,n.cwd),r&&this.fallBackToEmptySession(s)}closeToTheRight(e){let n=this.items().findIndex(c=>c.id===e);if(n===-1)return;let i=this.items().slice(n+1);if(i.length===0)return;let o=new Set(i.map(c=>c.id)),r=i.some(c=>c.kind==="session"&&c.draft!==!0),s=i.find(c=>c.kind==="session")?.cwd,a=this.active();this.items.update(c=>c.filter(l=>!o.has(l.id))),this.pruneOrphanMentions(),a!==void 0&&o.has(a)&&this.select(e),r&&this.fallBackToEmptySession(s)}closeAll(){let e=this.items().some(i=>i.kind==="session"&&i.draft!==!0),n=this.items().find(i=>i.kind==="session")?.cwd;this.items.set([]),this.active.set(void 0),e&&this.fallBackToEmptySession(n)}fallBackToEmptySession(e){this.items().some(n=>n.kind==="session")||this.morse.state().sessionId!==void 0&&this.morse.newSession(e??this.morse.state().workspace.cwd)}doomedWith(e){let n=new Set([e]),i=new Set(this.items().filter(o=>o.kind==="session"&&o.id!==e).map(o=>o.id));for(let o of this.items())o.kind!=="file"||o.mention!==!0||(o.sessionId===void 0||o.sessionId===e||!i.has(o.sessionId))&&n.add(o.id);return n}mentionFilesOf(e){return this.items().filter(n=>n.kind==="file"&&n.mention===!0&&n.sessionId===e)}remove(e,n){let i=this.active();if(this.items.update(s=>s.filter(a=>!e.has(a.id))),i===void 0||!e.has(i))return;let o=this.items(),r=o[Math.min(n,o.length-1)];if(r===void 0){this.active.set(void 0);return}this.select(r.id)}pruneOrphanMentions(){let e=new Set(this.items().filter(o=>o.kind==="session").map(o=>o.id)),n=this.items(),i=new Set(n.filter(o=>o.kind==="file"&&o.mention===!0&&(o.sessionId===void 0||!e.has(o.sessionId))).map(o=>o.id));i.size!==0&&this.remove(i,n.findIndex(o=>o.id===this.active()))}reload(e){this.patch(e,{diff:void 0,diffError:void 0}),this.load(e)}loadDiff(e){let n=this.items().find(i=>i.id===e);n===void 0||n.kind!=="file"||n.diff!==void 0||n.diffLoading===!0||(this.patch(e,{diffLoading:!0,diffError:void 0}),this.morse.requestHostCommand("gitDiff",{path:n.path}).then(i=>{let o=pO(i);if(o===void 0){this.patch(e,{diffLoading:!1,diffError:"Could not read this file\u2019s changes."});return}this.patch(e,{diffLoading:!1,diff:o})}))}findSession(e){return this.items().find(n=>n.kind==="session"&&n.id===e)}promoteDraft(e){this.items().some(i=>i.kind==="session"&&i.id===Ao)&&this.items.update(i=>i.map(o=>o.kind==="session"&&o.id===Ao?V({kind:"session"},e):o.kind==="file"&&o.mention===!0&&o.sessionId===Ao?K(V({},o),{sessionId:e.id,id:aC(e.id,o.path)}):o))}discardDraft(){this.items().some(n=>n.kind==="session"&&n.id===Ao)&&(this.items.update(n=>n.filter(i=>!(i.kind==="session"&&i.id===Ao))),this.pruneOrphanMentions())}needsLoad(e){return e.kind==="file"&&!e.loading&&e.content===void 0&&e.error===void 0}async load(e){let n=this.items().find(r=>r.id===e);if(n===void 0||n.kind!=="file")return;this.patch(e,{loading:!0,error:void 0});let i=await this.morse.requestHostCommand("readFile",{path:n.path}),o=uO(i);if(o===void 0){this.patch(e,{loading:!1,error:"Could not read this file."});return}this.patch(e,{loading:!1,content:o.content,size:o.size,truncated:o.truncated,binary:o.binary,language:kh(o.path)})}patch(e,n){this.items.update(i=>i.map(o=>o.id===e&&o.kind==="file"?V(V({},o),n):o))}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function uO(t){if(typeof t!="object"||t===null)return;let e=t,n=e.content,i=e.path;if(typeof n!="string"||typeof i!="string")return;let o=e.size;return{path:i,content:n,size:typeof o=="number"?o:n.length,truncated:e.truncated===!0,binary:e.binary===!0}}function pO(t){if(typeof t!="object"||t===null)return;let e=t.diff;return typeof e=="string"?e:void 0}function fO(t){let e=t.lastIndexOf("/");return e===-1?t:t.slice(e+1)}function aC(t,e){return`${dO}${t??""}:${e}`}function mO(t,e,n=80){let i=Math.floor(t-4-8);return Math.max(n,Math.min(e,i))}var Qd=class t{preferred=te(320,{alias:"morsePopoverFit"});host=N(Bt);renderer=N(Xi).createRenderer(null,null);observer;constructor(){no(()=>{this.fit();let e=this.anchor();e&&typeof ResizeObserver<"u"&&(this.observer=new ResizeObserver(()=>this.fit()),this.observer.observe(e))}),N(pt).onDestroy(()=>this.observer?.disconnect())}onWindowResize(){this.fit()}anchor(){let e=this.host.nativeElement;return e.offsetParent??e.parentElement}fit(){let e=this.anchor()?.getBoundingClientRect().top??0,n=mO(e,this.preferred());this.renderer.setStyle(this.host.nativeElement,"--morse-popover-max-height",`${n}px`)}static \u0275fac=function(n){return new(n||t)};static \u0275dir=br({type:t,selectors:[["","morsePopoverFit",""]],hostBindings:function(n,i){n&1&&A("resize",function(){return i.onWindowResize()},um)},inputs:{preferred:[1,"morsePopoverFit","preferred"]}})};var un=class t{morseEnter=te(0);morseEnterY=te(8);morseEnterDuration=te(260);morseEnterScale=te(void 0);element=N(Bt);animation=N(ln);ngAfterViewInit(){let e=Math.max(0,this.morseEnter());this.animation.enter(this.element.nativeElement,{y:this.morseEnterY(),duration:this.morseEnterDuration(),scale:this.morseEnterScale(),delay:Math.min(e,8)*24})}static \u0275fac=function(n){return new(n||t)};static \u0275dir=br({type:t,selectors:[["","morseEnter",""]],inputs:{morseEnter:[1,"morseEnter"],morseEnterY:[1,"morseEnterY"],morseEnterDuration:[1,"morseEnterDuration"],morseEnterScale:[1,"morseEnterScale"]}})};var hO=["list"];function gO(t,e){t&1&&(y(0,"div",2),u(1,"Reading the workspace\u2026"),b())}function yO(t,e){if(t&1&&(y(0,"div",4),u(1),b()),t&2){let n=m(2);d(),ae("No match for \u201C",n.query(),"\u201D.")}}function _O(t,e){if(t&1){let n=$();y(0,"div",4),u(1," The host returned no workspace files. "),y(2,"button",5),A("click",function(){D(n);let o=m(2);return M(o.reload.emit())}),u(3,"Load again"),b()()}}function vO(t,e){if(t&1&&w(0,yO,2,1,"div",4)(1,_O,4,0,"div",4),t&2){let n=m();S(n.query().length>0?0:1)}}function bO(t,e){if(t&1){let n=$();y(0,"button",12),A("mouseenter",function(){D(n);let o=m().$index,r=m(2);return M(r.activeChange.emit(o))})("click",function(){D(n);let o=m().$implicit,r=m(2);return M(r.quote.emit(o))}),u(1," \u29C9 "),b()}}function xO(t,e){if(t&1){let n=$();y(0,"li")(1,"button",7),A("mouseenter",function(){let o=D(n).$index,r=m(2);return M(r.activeChange.emit(o))})("click",function(){let o=D(n).$implicit,r=m(2);return M(r.pick.emit(o))}),y(2,"span",8),u(3),b(),y(4,"span",9)(5,"span",10),u(6),b(),u(7),b()(),w(8,bO,2,0,"button",11),b()}if(t&2){let n=e.$implicit,i=e.$index,o=m(2);X("active",i===o.active()),d(3),k(o.isDirectory(n)?"\u25B8":"\u25A4"),d(3),k(o.split(n).dir),d(),ae("",o.split(n).base," "),d(),S(o.isDirectory(n)?-1:8)}}function CO(t,e){if(t&1&&(y(0,"ul",null,0),oe(2,xO,9,6,"li",6,Ei),b()),t&2){let n=m();d(2),re(n.files())}}var Xd=class t{files=te.required();busy=te(!1);query=te("");active=te(0);pick=it();quote=it();close=it();reload=it();activeChange=it();list=Xe("list");constructor(){se(()=>{this.active(),this.files(),setTimeout(()=>this.revealActive(),0)})}revealActive(){let e=this.list()?.nativeElement,n=e?.children.item(this.active());if(!e||!n)return;let i=e.getBoundingClientRect(),o=n.getBoundingClientRect();o.top<i.top?e.scrollTop-=i.top-o.top:o.bottom>i.bottom&&(e.scrollTop+=o.bottom-i.bottom)}split(e){let n=e.lastIndexOf("/");return n===-1?{dir:"",base:e}:{dir:e.slice(0,n+1),base:e.slice(n+1)}}isDirectory(e){return Ih(e)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-file-picker"]],viewQuery:function(n,i){n&1&>(i.list,hO,5),n&2&&vt()},inputs:{files:[1,"files"],busy:[1,"busy"],query:[1,"query"],active:[1,"active"]},outputs:{pick:"pick",quote:"quote",close:"close",reload:"reload",activeChange:"activeChange"},decls:19,vars:3,consts:[["list",""],[1,"picker",3,"morseEnter","morseEnterY"],[1,"busy"],[1,"hint"],[1,"empty"],["type","button",1,"reload",3,"click"],[3,"active"],["type","button",1,"row",3,"mouseenter","click"],[1,"icon"],[1,"path"],[1,"dir"],["type","button","title","Mention and quote a line range","aria-label","Mention and quote a line range",1,"quote"],["type","button","title","Mention and quote a line range","aria-label","Mention and quote a line range",1,"quote",3,"mouseenter","click"]],template:function(n,i){n&1&&(y(0,"div",1),w(1,gO,2,0,"div",2)(2,vO,2,1)(3,CO,4,0,"ul"),y(4,"div",3)(5,"kbd"),u(6,"\u2191"),b(),y(7,"kbd"),u(8,"\u2193"),b(),u(9," move \xB7 "),y(10,"kbd"),u(11,"Enter"),b(),u(12," mention \xB7 "),y(13,"kbd"),u(14,"\u21E7Enter"),b(),u(15," quote \xB7 "),y(16,"kbd"),u(17,"Esc"),b(),u(18," close "),b()()),n&2&&(q("morseEnter",0)("morseEnterY",6),d(),S(i.busy()&&i.files().length===0?1:i.files().length===0?2:3))},dependencies:[un],styles:["[_nghost-%COMP%]{display:block}.picker[_ngcontent-%COMP%]{display:flex;flex-direction:column;max-height:var(--%NS%morse-popover-max-height, 300px);border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-md);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 10px 28px #0000004d;overflow:hidden}ul[_ngcontent-%COMP%]{margin:0;padding:4px 0;list-style:none;overflow-y:auto}li[_ngcontent-%COMP%]{display:flex;align-items:center}li[_ngcontent-%COMP%] .row[_ngcontent-%COMP%]{flex:1;display:flex;align-items:center;gap:8px;padding:4px 10px;border:0;border-radius:0;background:transparent;color:var(--%NS%morse-fg);font-size:12px;text-align:left;cursor:pointer}li.active[_ngcontent-%COMP%] .row[_ngcontent-%COMP%]{background:var(--%NS%morse-active)}.quote[_ngcontent-%COMP%]{flex:none;width:26px;height:26px;margin-right:4px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:12px;cursor:pointer;opacity:.55}.quote[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover);color:var(--%NS%morse-fg);opacity:1}.icon[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-fg-muted);font-size:11px}.path[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--%NS%morse-font-mono)}.dir[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted)}.empty[_ngcontent-%COMP%], .busy[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:8px 10px;color:var(--%NS%morse-fg-muted);font-size:12px}.reload[_ngcontent-%COMP%]{padding:1px 8px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg);font-size:11px;cursor:pointer}.reload[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.hint[_ngcontent-%COMP%]{padding:5px 10px;border-top:1px solid var(--%NS%morse-border);color:var(--%NS%morse-fg-muted);font-size:11px}kbd[_ngcontent-%COMP%]{font-family:var(--%NS%morse-font-mono);font-size:10px;padding:0 3px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm)}"]})};function lC(t,e,n=50){let i=e.trim().toLowerCase();return t.map(o=>({file:o,score:i.length===0?0:EO(o,i)})).filter(o=>o.score<Number.POSITIVE_INFINITY).sort((o,r)=>cC(o.file)-cC(r.file)||o.score-r.score||o.file.length-r.file.length||o.file.localeCompare(r.file)).slice(0,n).map(o=>o.file)}function Ih(t){return t.endsWith("/")}function cC(t){return Ih(t)?0:1}function EO(t,e){let n=(Ih(t)?t.slice(0,-1):t).toLowerCase(),i=n.lastIndexOf("/"),o=i===-1?n:n.slice(i+1);return o.startsWith(e)?0:o.includes(e)?1:n.startsWith(e)?2:n.includes(e)?3:Number.POSITIVE_INFINITY}var wO=["list"],SO=(t,e)=>e.id;function TO(t,e){if(t&1&&(y(0,"div",3),u(1),b()),t&2){let n=m(2);d(),ae("No command matches \u201C",n.query(),"\u201D.")}}function DO(t,e){t&1&&(y(0,"div",3),u(1,"No commands available in this session."),b())}function MO(t,e){if(t&1&&w(0,TO,2,1,"div",3)(1,DO,2,0,"div",3),t&2){let n=m();S(n.query().length>0?0:1)}}function kO(t,e){if(t&1&&(y(0,"span",5),u(1),b()),t&2){let n=m().$implicit;d(),k(n.icon)}}function IO(t,e){if(t&1&&(y(0,"span",8),u(1),b()),t&2){let n=m().$implicit;d(),k(n.description)}}function NO(t,e){if(t&1&&(y(0,"span",9),u(1),b()),t&2){let n=m().$implicit;d(),k(n.badge)}}function OO(t,e){if(t&1){let n=$();y(0,"li")(1,"button",4),A("mouseenter",function(){let o=D(n).$index,r=m(2);return M(r.activeChange.emit(o))})("pointerdown",function(o){return o.preventDefault()})("click",function(){let o=D(n).$implicit,r=m(2);return M(r.pick.emit(o.id))}),w(2,kO,2,1,"span",5),y(3,"span",6)(4,"span",7),u(5),b(),w(6,IO,2,1,"span",8),b(),w(7,NO,2,1,"span",9),b()()}if(t&2){let n=e.$implicit,i=e.$index,o=m(2);d(),X("active",i===o.active()),d(),S(n.icon?2:-1),d(3),k(n.label),d(),S(n.description?6:-1),d(),S(n.badge?7:-1)}}function PO(t,e){if(t&1&&(y(0,"ul",null,0),oe(2,OO,8,6,"li",null,SO),b()),t&2){let n=m();d(2),re(n.items())}}var Jd=class t{items=te.required();query=te("");active=te(0);pick=it();close=it();activeChange=it();list=Xe("list");constructor(){se(()=>{this.active(),this.items(),setTimeout(()=>this.revealActive(),0)})}revealActive(){let e=this.list()?.nativeElement,n=e?.children.item(this.active());if(!e||!n)return;let i=e.getBoundingClientRect(),o=n.getBoundingClientRect();o.top<i.top?e.scrollTop-=i.top-o.top:o.bottom>i.bottom&&(e.scrollTop+=o.bottom-i.bottom)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-command-picker"]],viewQuery:function(n,i){n&1&>(i.list,wO,5),n&2&&vt()},inputs:{items:[1,"items"],query:[1,"query"],active:[1,"active"]},outputs:{pick:"pick",close:"close",activeChange:"activeChange"},decls:18,vars:3,consts:[["list",""],[1,"picker",3,"morseEnter","morseEnterY"],[1,"hint"],[1,"empty"],["type","button",3,"mouseenter","pointerdown","click"],[1,"icon"],[1,"text"],[1,"label"],[1,"description"],[1,"badge"]],template:function(n,i){n&1&&(y(0,"div",1),w(1,MO,2,1)(2,PO,4,0,"ul"),y(3,"div",2)(4,"kbd"),u(5,"\u2191"),b(),y(6,"kbd"),u(7,"\u2193"),b(),u(8," move \xB7 "),y(9,"kbd"),u(10,"Enter"),b(),u(11," run \xB7 "),y(12,"kbd"),u(13,"Tab"),b(),u(14," insert \xB7 "),y(15,"kbd"),u(16,"Esc"),b(),u(17," close "),b()()),n&2&&(q("morseEnter",0)("morseEnterY",6),d(),S(i.items().length===0?1:2))},dependencies:[un],styles:["[_nghost-%COMP%]{display:block}.picker[_ngcontent-%COMP%]{display:flex;flex-direction:column;max-height:var(--%NS%morse-popover-max-height, 320px);border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-md);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 10px 28px #0000004d;overflow:hidden}ul[_ngcontent-%COMP%]{margin:0;padding:4px 0;list-style:none;overflow-y:auto}li[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:5px 10px;border:0;border-radius:0;background:transparent;color:var(--%NS%morse-fg);font-size:12px;text-align:left;cursor:pointer}li[_ngcontent-%COMP%] button.active[_ngcontent-%COMP%]{background:var(--%NS%morse-active)}.icon[_ngcontent-%COMP%]{flex:none;width:14px;color:var(--%NS%morse-fg-muted);text-align:center}.text[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.label[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--%NS%morse-font-mono)}.description[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:11px}.badge[_ngcontent-%COMP%]{flex:none;padding:1px 6px;border-radius:999px;background:var(--%NS%morse-badge-bg);color:var(--%NS%morse-badge-fg);font-size:10px}.empty[_ngcontent-%COMP%]{padding:8px 10px;color:var(--%NS%morse-fg-muted);font-size:12px}.hint[_ngcontent-%COMP%]{padding:5px 10px;border-top:1px solid var(--%NS%morse-border);color:var(--%NS%morse-fg-muted);font-size:11px}kbd[_ngcontent-%COMP%]{font-family:var(--%NS%morse-font-mono);font-size:10px;padding:0 3px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm)}"]})};function dC(t,e,n=50){let i=e.trim().toLowerCase();return i.length===0?t.slice(0,n):t.map(o=>({item:o,score:AO(o,i)})).filter(o=>o.score<Number.POSITIVE_INFINITY).sort((o,r)=>o.score-r.score||o.item.label.length-r.item.label.length).slice(0,n).map(o=>o.item)}function AO(t,e){let n=t.label.toLowerCase();return n.startsWith(e)?0:n.includes(e)?1:t.description?.toLowerCase().includes(e)?2:Number.POSITIVE_INFINITY}var RO=["card"],LO=(t,e)=>e.id;function FO(t,e){t&1&&(h(0,"p",5),u(1),g()),t&2&&(d(),k(e))}function VO(t,e){t&1&&(h(0,"span",16),u(1,"required"),g())}function jO(t,e){if(t&1){let n=$();h(0,"textarea",19),F("input",function(o){D(n);let r=m().$implicit,s=m();return M(s.setValue(r.id,o))})("keydown",function(o){D(n);let r=m(2);return M(r.onSubmitKey(o))}),g()}if(t&2){let n=m().$implicit,i=m();ie("value",i.value(n.id)),J("aria-label",n.label)}}function $O(t,e){if(t&1){let n=$();h(0,"input",20),F("input",function(o){D(n);let r=m().$implicit,s=m();return M(s.setValue(r.id,o))})("keydown.enter",function(o){D(n);let r=m(2);return M(r.submit(o))}),g()}if(t&2){let n=m().$implicit,i=m();ie("value",i.value(n.id)),J("aria-label",n.label)}}function BO(t,e){if(t&1&&(h(0,"label",7)(1,"span",8),u(2),w(3,VO,2,0,"span",16),g(),w(4,jO,1,2,"textarea",17)(5,$O,1,2,"input",18),g()),t&2){let n=e.$implicit;d(2),ae(" ",n.label," "),d(),S(n.required?3:-1),d(),S(n.index===void 0?4:5)}}var eu=class t{request=te.required();submitted=it();cancelled=it();card=Xe("card");values=O({});extra=O("");preview=E(()=>Gb(this.request().form,this.values(),this.extra()));ready=E(()=>this.request().form.arguments.every(e=>!e.required||(this.values()[e.id]??"").trim().length>0));constructor(){se(()=>{this.request(),this.values.set({}),this.extra.set(""),setTimeout(()=>{this.card()?.nativeElement.querySelector("input, textarea")?.focus()},0)})}value(e){return this.values()[e]??""}setValue(e,n){let i=n.target.value;this.values.update(o=>K(V({},o),{[e]:i}))}setExtra(e){this.extra.set(e.target.value)}submit(e){e?.preventDefault(),this.ready()&&this.submitted.emit(this.preview())}onSubmitKey(e){e.key==="Enter"&&(e.ctrlKey||e.metaKey)&&this.submit(e)}onEscape(){this.cancelled.emit()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-prompt-template-dialog"]],viewQuery:function(n,i){n&1&>(i.card,RO,5),n&2&&vt()},hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},inputs:{request:[1,"request"]},outputs:{submitted:"submitted",cancelled:"cancelled"},decls:26,vars:5,consts:[["card",""],[1,"modal-layer",3,"click"],["role","dialog","aria-modal","true","aria-labelledby","template-title",1,"modal-card",3,"click"],[1,"head"],["id","template-title"],[1,"description"],[1,"fields"],[1,"field"],[1,"field-label"],[1,"optional"],["rows","3","aria-label","Additional instructions","placeholder","Anything the template does not cover",3,"input","keydown","value"],[1,"preview"],["aria-label","Prompt preview"],[1,"actions"],["type","button",1,"secondary",3,"click"],["type","button",3,"click","disabled"],[1,"required"],["rows","2","placeholder",'Shell-quoted arguments, e.g. "api tests" lint',3,"value"],["type","text",3,"value"],["rows","2","placeholder",'Shell-quoted arguments, e.g. "api tests" lint',3,"input","keydown","value"],["type","text",3,"input","keydown.enter","value"]],template:function(n,i){if(n&1&&(h(0,"div",1),F("click",function(){return i.cancelled.emit()}),h(1,"div",2,0),F("click",function(r){return r.stopPropagation()}),h(3,"header",3)(4,"h2",4),u(5),g(),w(6,FO,2,1,"p",5),g(),h(7,"div",6),oe(8,BO,6,3,"label",7,LO),h(10,"label",7)(11,"span",8),u(12," Additional instructions "),h(13,"span",9),u(14,"optional \xB7 appended below the template"),g()(),h(15,"textarea",10),F("input",function(r){return i.setExtra(r)})("keydown",function(r){return i.onSubmitKey(r)}),g()(),h(16,"div",11)(17,"span",8),u(18,"Preview"),g(),h(19,"pre",12),u(20),g()(),h(21,"div",13)(22,"button",14),F("click",function(){return i.cancelled.emit()}),u(23,"Cancel"),g(),h(24,"button",15),F("click",function(){return i.submit()}),u(25,"Send"),g()()()()()),n&2){let o;d(5),ae("/",i.request().name),d(),S((o=i.request().description)?6:-1,o),d(2),re(i.request().form.arguments),d(7),ie("value",i.extra()),d(5),k(i.preview()),d(4),ie("disabled",!i.ready())}},styles:["[_nghost-%COMP%]{display:contents}.modal-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:75;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.modal-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:12px;width:min(560px,100%);max-height:min(84vh,760px);overflow:auto;padding:16px 18px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 18px 48px #0006;animation:_ngcontent-%COMP%_template-in .14s ease-out}.head[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:3px}h2[_ngcontent-%COMP%]{margin:0;font-family:var(--%NS%morse-font-mono);font-size:14px;font-weight:600}.description[_ngcontent-%COMP%]{margin:0;font-size:12px;color:var(--%NS%morse-fg-muted)}form[_ngcontent-%COMP%], .fields[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px}.field[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}.field-label[_ngcontent-%COMP%]{font-size:11.5px;font-weight:600;color:var(--%NS%morse-fg-muted)}.required[_ngcontent-%COMP%], .optional[_ngcontent-%COMP%]{margin-left:4px;font-weight:400;font-size:10.5px}.required[_ngcontent-%COMP%]{color:var(--%NS%morse-warn)}.optional[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted)}input[_ngcontent-%COMP%], textarea[_ngcontent-%COMP%]{width:100%;padding:6px 8px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-input-bg, transparent);color:var(--%NS%morse-fg);font-family:inherit;font-size:12.5px;resize:vertical}input[_ngcontent-%COMP%]:focus, textarea[_ngcontent-%COMP%]:focus{outline:none;border-color:var(--%NS%morse-accent)}.preview[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:4px}pre[_ngcontent-%COMP%]{margin:0;max-height:180px;overflow:auto;padding:8px 10px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-code-bg, rgb(0 0 0 / 18%));color:var(--%NS%morse-fg);font-family:var(--%NS%morse-font-mono);font-size:11.5px;line-height:1.55;white-space:pre-wrap;word-break:break-word}.actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:6px}@keyframes _ngcontent-%COMP%_template-in{0%{opacity:0;transform:translateY(6px)}}@media(prefers-reduced-motion:reduce){.modal-card[_ngcontent-%COMP%]{animation:none}}"]})};function li(t){return t<1e3?t.toString():t<1e4?`${(t/1e3).toFixed(1)}k`:t<1e6?`${Math.round(t/1e3)}k`:t<1e7?`${(t/1e6).toFixed(1)}M`:`${Math.round(t/1e6)}M`}function uC(t,e){let n=t?.[e];return typeof n=="number"?li(n):"\u2014"}function Nh(t){if(!t)return;let e=t.cacheReadTokens??0,n=t.cacheWriteTokens??0,i=t.inputTokens+e+n;if(!(i<=0||e===0&&n===0))return e/i*100}function Oh(t){if(!(t===void 0||t<=0))return`$${t.toFixed(3)}`}function Ph(t){let e=[],n=t.usage;if(n){n.inputTokens>0&&e.push(`\u2191${li(n.inputTokens)}`),n.outputTokens>0&&e.push(`\u2193${li(n.outputTokens)}`),n.cacheReadTokens&&e.push(`R${li(n.cacheReadTokens)}`),n.cacheWriteTokens&&e.push(`W${li(n.cacheWriteTokens)}`);let r=Nh(n);r!==void 0&&e.push(`CH${r.toFixed(1)}%`)}let i=Oh(t.costUsd);i&&e.push(i);let o=t.contextUsage;if(o){let r=o.percent!==null?`${o.percent.toFixed(1)}%`:"?";e.push(`${r}/${li(o.contextWindow)}`)}return e.join(" ")}var HO=["search"],UO=["list"],zO=(t,e)=>e.provider,GO=(t,e)=>e.index;function qO(t,e){if(t&1&&(y(0,"div",10),u(1),b()),t&2){let n=m();d(),ae("No model matches \u201C",n.filter(),"\u201D.")}}function WO(t,e){t&1&&(y(0,"span",15),u(1),b()),t&2&&(d(),k(e))}function YO(t,e){t&1&&(y(0,"span",16),u(1,"\u2713"),b())}function KO(t,e){if(t&1){let n=$();y(0,"button",13),A("mouseenter",function(){let o=D(n).$implicit,r=m(4);return M(r.active.set(o.index))})("click",function(){let o=D(n).$implicit,r=m(4);return M(r.pick.emit(o.model))}),y(1,"span",14),u(2),b(),w(3,WO,2,1,"span",15),w(4,YO,2,0,"span",16),b()}if(t&2){let n,i=e.$implicit,o=m(4);X("active",i.index===o.active())("selected",o.keyOf(i.model)===o.current()),q("title",o.keyOf(i.model)),J("aria-current",o.keyOf(i.model)===o.current()?"true":null),d(2),k(i.model.name),d(),S((n=o.context(i.model))?3:-1,n),d(),S(o.keyOf(i.model)===o.current()?4:-1)}}function ZO(t,e){if(t&1&&(y(0,"div",11),u(1),b(),oe(2,KO,5,9,"button",12,GO)),t&2){let n=m().$implicit;d(),k(n.provider),d(),re(n.rows)}}function QO(t,e){if(t&1&&w(0,ZO,4,1),t&2){let n=e.$implicit;S(n.rows.length>0?0:-1)}}function XO(t,e){if(t&1&&oe(0,QO,1,1,null,null,zO),t&2){let n=m();re(n.groups())}}function JO(t,e){let n=e.trim().toLowerCase(),i=new Map;for(let o of t){if(n.length>0&&!`${o.provider} ${o.id} ${o.name}`.toLowerCase().includes(n))continue;let r=i.get(o.provider);r?r.push(o):i.set(o.provider,[o])}return[...i].map(([o,r])=>({provider:o,models:r}))}var tu=class t{models=te.required();current=te("");pick=it();close=it();host=N(Bt);search=Xe("search");list=Xe("list");filter=O("");active=O(0);groups=E(()=>{let e=0;return JO(this.models(),this.filter()).map(n=>({provider:n.provider,rows:n.models.map(i=>({model:i,index:e++}))}))});visible=E(()=>this.groups().flatMap(e=>e.rows.map(n=>n.model)));constructor(){no(()=>this.search()?.nativeElement.focus()),se(()=>{if(this.groups(),this.filter().trim().length>0)return;let e=this.visible().findIndex(n=>this.keyOf(n)===this.current());e>=0&&this.active.set(e)}),se(()=>{this.active(),this.groups(),setTimeout(()=>this.revealActive(),0)})}revealActive(){let e=this.list()?.nativeElement,n=e?.querySelectorAll(".row")[this.active()];if(!e||!n)return;let i=e.getBoundingClientRect(),o=n.getBoundingClientRect(),r=e.querySelector(".group")?.offsetHeight??0,s=i.top+r;o.top<s?e.scrollTop-=s-o.top:o.bottom>i.bottom&&(e.scrollTop+=o.bottom-i.bottom)}keyOf(e){return`${e.provider}/${e.id}`}context(e){return e.contextWindow?li(e.contextWindow):""}onFilter(e){this.filter.set(e.target.value),this.active.set(0)}onKeydown(e){let n=this.visible();switch(e.key){case"Escape":e.preventDefault(),this.close.emit();return;case"ArrowDown":e.preventDefault(),this.active.update(i=>Math.min(i+1,Math.max(0,n.length-1)));return;case"ArrowUp":e.preventDefault(),this.active.update(i=>Math.max(0,i-1));return;case"Enter":{let i=n[this.active()];i&&(e.preventDefault(),this.pick.emit(i));return}default:return}}onDocumentPointerdown(e){let n=e.target;n&&!this.host.nativeElement.contains(n)&&this.close.emit()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-model-picker"]],viewQuery:function(n,i){n&1&>(i.search,HO,5)(i.list,UO,5),n&2&&vt(2)},hostBindings:function(n,i){n&1&&A("pointerdown",function(r){return i.onDocumentPointerdown(r)},Mt)},inputs:{models:[1,"models"],current:[1,"current"]},outputs:{pick:"pick",close:"close"},decls:12,vars:4,consts:[["search",""],["list",""],[1,"panel",3,"morseEnter","morseEnterY"],[1,"search"],["aria-hidden","true",1,"search-icon"],["viewBox","0 0 16 16"],["cx","7","cy","7","r","4.2"],["d","M10.2 10.2 14 14"],["type","text","placeholder","Search models","aria-label","Search models",3,"input","keydown","value"],[1,"list"],[1,"empty"],[1,"group"],["type","button",1,"row",3,"active","selected","title"],["type","button",1,"row",3,"mouseenter","click","title"],[1,"name"],[1,"meta"],[1,"check"]],template:function(n,i){n&1&&(y(0,"div",2)(1,"div",3)(2,"span",4),st(),y(3,"svg",5),ve(4,"circle",6)(5,"path",7),b()(),Jt(),y(6,"input",8,0),A("input",function(r){return i.onFilter(r)})("keydown",function(r){return i.onKeydown(r)}),b()(),y(8,"div",9,1),w(10,qO,2,1,"div",10)(11,XO,2,0),b()()),n&2&&(q("morseEnter",0)("morseEnterY",6),d(6),q("value",i.filter()),d(4),S(i.visible().length===0?10:11))},dependencies:[un],styles:["[_nghost-%COMP%]{display:block}.panel[_ngcontent-%COMP%]{display:flex;flex-direction:column;max-height:var(--%NS%morse-popover-max-height, 340px);border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-md);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 12px 32px #00000059;overflow:hidden}.search[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;padding:8px 10px;border-bottom:1px solid var(--%NS%morse-border)}.search-icon[_ngcontent-%COMP%]{position:absolute;left:19px;display:inline-flex;color:var(--%NS%morse-fg-muted);pointer-events:none}.search-icon[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round}.search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1;min-width:0;padding-left:28px;font-size:12.5px}.search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]:focus-visible{outline:none}.list[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;padding-bottom:4px}.group[_ngcontent-%COMP%]{position:sticky;top:0;padding:8px 10px 4px;background:var(--%NS%morse-panel, var(--%NS%morse-bg));color:var(--%NS%morse-fg-muted);font-size:10px;font-weight:600;letter-spacing:.06em;text-transform:uppercase}.row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:5px 10px;border:0;border-radius:0;background:transparent;color:var(--%NS%morse-fg);font:inherit;font-size:12.5px;text-align:left;cursor:pointer}.row.active[_ngcontent-%COMP%], .row[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.row.selected[_ngcontent-%COMP%]{background:var(--%NS%morse-active)}.name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.meta[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-fg-muted);font-size:11px}.check[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-accent);font-size:12px}.empty[_ngcontent-%COMP%]{padding:12px 10px;color:var(--%NS%morse-fg-muted);font-size:12px}"]})};var eP=["brain"],tP=["halo"];function nP(t,e){if(t&1&&(st(),ce(0,"path")),t&2){let n=e.$implicit;J("d",n)}}function iP(t,e){t&1&&ce(0,"span",3,1)}function oP(t,e){t&1&&ce(0,"span",4,1)}var rP=["M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z","M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z","M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4","M17.599 6.5a3 3 0 0 0 .399-1.375","M6.003 5.125A3 3 0 0 0 6.401 6.5","M3.477 10.896a4 4 0 0 1 .585-.396","M19.938 10.5a4 4 0 0 1 .585.396","M6 18a4 4 0 0 1-1.967-.516","M19.967 17.484A4 4 0 0 1 18 18"],sP={off:0,minimal:1,low:2,medium:3,high:4,xhigh:5,max:6};function aP(t){return sP[t]??2}function cP(t){switch(t){case"off":return{params:{opacity:[.35,.6]},duration:5200,ease:"inOut(1)"};case"minimal":return{params:{opacity:[.6,1]},duration:2200};case"low":return{params:{rotate:["-7deg","7deg"]},duration:1500};case"medium":return{params:{scale:[1,1.14]},duration:950,halo:{duration:1300}};case"high":return{params:{scale:[1,1.18]},duration:560,halo:{duration:800}};case"xhigh":return{params:{scale:[1,1.16],rotate:["-8deg","8deg"]},duration:440,halo:{duration:620}};case"max":return{params:{scale:[1,1.22],rotate:["-12deg","12deg"]},duration:320,ease:"linear",halo:{duration:480}}}}var nu=class t{level=te.required();bumped=te(!1);host=N(Bt);animation=N(ln);brain=Xe("brain");halos=Cv("halo");stoppers=[];paths=rP;intensity=E(()=>aP(this.level()));constructor(){se(()=>{let e=this.level(),n=this.brain()?.nativeElement,i=this.halos().map(r=>r.nativeElement);if(this.stopLoops(),!n||!this.animation.isEnabled)return;let o=cP(e);this.stoppers.push(this.animation.loop(n,o.params,{duration:o.duration,delay:o.delay??0,ease:o.ease??"inOut(2)"})),o.halo&&i.forEach((r,s)=>{this.stoppers.push(this.animation.loop(r,{scale:[.72,1.9],opacity:[.55,0]},{duration:o.halo.duration,delay:(o.halo.delay??0)+s*o.halo.duration*.5,ease:"out(2)",alternate:!1}))})}),se(()=>{this.bumped()&&this.animation.pop(this.host.nativeElement,{scale:1.3,duration:420})}),N(pt).onDestroy(()=>this.stopLoops())}stopLoops(){for(let e of this.stoppers)e();this.stoppers=[]}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-brain"]],viewQuery:function(n,i){n&1&>(i.brain,eP,5)(i.halos,tP,5),n&2&&vt(2)},hostVars:3,hostBindings:function(n,i){n&2&&(J("data-level",i.level()),X("bumped",i.bumped()))},inputs:{level:[1,"level"],bumped:[1,"bumped"]},decls:6,vars:2,consts:[["brain",""],["halo",""],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","1.7","stroke-linecap","round","stroke-linejoin","round","aria-hidden","true",1,"brain"],["aria-hidden","true",1,"wave","wave-a"],["aria-hidden","true",1,"wave","wave-b"]],template:function(n,i){n&1&&(st(),h(0,"svg",2,0),oe(2,nP,1,1,":svg:path",null,Ei),g(),w(4,iP,2,0,"span",3),w(5,oP,2,0,"span",4)),n&2&&(d(2),re(i.paths),d(2),S(i.intensity()>=3?4:-1),d(),S(i.intensity()>=4?5:-1))},styles:['[_nghost-%COMP%]{position:relative;display:inline-flex;width:16px;height:16px;color:var(--%NS%morse-accent)}.brain[_ngcontent-%COMP%]{width:100%;height:100%;transform-box:fill-box;transform-origin:center}.wave[_ngcontent-%COMP%]{position:absolute;inset:-1px;border-radius:50%;border:1px solid currentColor;opacity:0;pointer-events:none}[data-level="off"][_nghost-%COMP%]{color:var(--%NS%morse-fg-muted)}[data-level="minimal"][_nghost-%COMP%]{color:var(--%NS%morse-info)}[data-level="low"][_nghost-%COMP%]{color:var(--%NS%morse-success)}[data-level="medium"][_nghost-%COMP%]{color:var(--%NS%morse-warn)}[data-level="high"][_nghost-%COMP%]{color:var(--%NS%morse-error)}[data-level="xhigh"][_nghost-%COMP%]{color:var(--%NS%morse-error);color:color-mix(in srgb,var(--%NS%morse-error) 55%,var(--%NS%morse-typename))}[data-level="max"][_nghost-%COMP%]{color:var(--%NS%morse-typename)}']})};var lP=["panel"];function dP(t,e){t&1&&(y(0,"span",10),u(1,"\u2713"),b())}function uP(t,e){if(t&1){let n=$();y(0,"button",8),A("mouseenter",function(){let o=D(n).$index,r=m(2);return M(r.active.set(o))})("click",function(){let o=D(n).$implicit,r=m(2);return M(r.choose(o))}),ve(1,"morse-brain",2),y(2,"span",9),u(3),b(),w(4,dP,2,0,"span",10),b()}if(t&2){let n=e.$implicit,i=e.$index,o=m(2);X("active",i===o.active())("selected",n===o.current()),J("aria-selected",n===o.current()),d(),q("level",n),d(2),k(n),d(),S(n===o.current()?4:-1)}}function pP(t,e){if(t&1){let n=$();y(0,"div",6,0),A("keydown",function(o){D(n);let r=m();return M(r.onKeydown(o))}),oe(2,uP,5,8,"button",7,Ei),b()}if(t&2){let n=m();q("morseEnter",0)("morseEnterY",6),d(2),re(n.levels())}}var iu=class t{levels=te.required();current=te.required();pick=it();host=N(Bt);shortcuts=N(An);destroyRef=N(pt);panel=Xe("panel");open=O(!1);active=O(0);bumped=O(!1);constructor(){let e=this.shortcuts.bind("thinking.pick",()=>this.toggle(),()=>this.levels().length>0);this.destroyRef.onDestroy(e),se(()=>{this.open()&&setTimeout(()=>this.panel()?.nativeElement.focus(),0)})}toggle(){if(this.open()){this.close();return}this.bump();let e=this.levels().indexOf(this.current());this.active.set(e>=0?e:0),this.open.set(!0)}choose(e){this.pick.emit(e),this.close()}onKeydown(e){let n=this.levels();switch(e.key){case"Escape":e.preventDefault(),this.close();return;case"ArrowDown":e.preventDefault(),this.active.update(i=>Math.min(i+1,Math.max(0,n.length-1)));return;case"ArrowUp":e.preventDefault(),this.active.update(i=>Math.max(0,i-1));return;case"Enter":{let i=n[this.active()];i&&(e.preventDefault(),this.choose(i));return}default:return}}onDocumentPointerdown(e){let n=e.target;this.open()&&n&&!this.host.nativeElement.contains(n)&&this.close()}close(){this.open.set(!1),this.bumped.set(!1)}bump(){this.bumped.set(!1),setTimeout(()=>this.bumped.set(!0),0),setTimeout(()=>this.bumped.set(!1),520)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-thinking-picker"]],viewQuery:function(n,i){n&1&>(i.panel,lP,5),n&2&&vt()},hostBindings:function(n,i){n&1&&A("pointerdown",function(r){return i.onDocumentPointerdown(r)},Mt)},inputs:{levels:[1,"levels"],current:[1,"current"]},outputs:{pick:"pick"},decls:7,vars:5,consts:[["panel",""],["type","button","aria-haspopup","listbox",1,"trigger",3,"click","title"],[3,"level"],[1,"level"],["aria-hidden","true",1,"caret"],["role","listbox","aria-label","Thinking level","tabindex","-1",1,"panel",3,"morseEnter","morseEnterY"],["role","listbox","aria-label","Thinking level","tabindex","-1",1,"panel",3,"keydown","morseEnter","morseEnterY"],["type","button","role","option",1,"row",3,"active","selected"],["type","button","role","option",1,"row",3,"mouseenter","click"],[1,"name"],["aria-hidden","true",1,"check"]],template:function(n,i){n&1&&(y(0,"button",1),A("click",function(){return i.toggle()}),ve(1,"morse-brain",2),y(2,"span",3),u(3),b(),y(4,"span",4),u(5,"\u25BE"),b()(),w(6,pP,4,2,"div",5)),n&2&&(q("title","Thinking level: "+i.current()),J("aria-expanded",i.open()),d(),q("level",i.current()),d(2),k(i.current()),d(3),S(i.open()?6:-1))},dependencies:[un,nu],styles:["[_nghost-%COMP%]{position:relative;display:inline-block}.trigger[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;padding:4px 8px;border:1px solid var(--%NS%morse-input-border);border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-input-bg);color:var(--%NS%morse-input-fg);font-size:12px;cursor:pointer}.trigger[_ngcontent-%COMP%]:hover{border-color:var(--%NS%morse-fg-muted)}.trigger[aria-expanded=true][_ngcontent-%COMP%]{border-color:var(--%NS%morse-focus)}.trigger[_ngcontent-%COMP%] .level[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-transform:capitalize}.trigger[_ngcontent-%COMP%] .caret[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-fg-muted);font-size:10px}.panel[_ngcontent-%COMP%]{position:absolute;left:0;bottom:calc(100% + 6px);z-index:30;display:flex;flex-direction:column;min-width:180px;padding:4px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-md);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 10px 28px #0000004d}.panel[_ngcontent-%COMP%]:focus-visible{outline:none}.row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:5px 8px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg);font:inherit;font-size:12px;text-align:left;cursor:pointer}.row.active[_ngcontent-%COMP%]{background:var(--%NS%morse-hover)}.row[_ngcontent-%COMP%] .name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-transform:capitalize}.row.selected[_ngcontent-%COMP%] .name[_ngcontent-%COMP%]{color:var(--%NS%morse-accent)}.row[_ngcontent-%COMP%] .check[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-accent);font-size:12px}"]})};function fP(t,e){t&1&&(h(0,"span"),u(1),g()),t&2&&(d(),ae(" \xB7 ",e))}function mP(t,e){if(t&1&&(h(0,"section")(1,"h4"),u(2,"Last assistant message"),g(),h(3,"div",13)(4,"div",14)(5,"span",15),u(6,"Input"),g(),h(7,"span",16),u(8),g()(),h(9,"div",14)(10,"span",15),u(11,"Output"),g(),h(12,"span",16),u(13),g()(),h(14,"div",14)(15,"span",15),u(16,"Reasoning"),g(),h(17,"span",16),u(18),g()(),h(19,"div",14)(20,"span",15),u(21,"Cache read"),g(),h(22,"span",16),u(23),g()(),h(24,"div",14)(25,"span",15),u(26,"Cache write"),g(),h(27,"span",16),u(28),g()(),h(29,"div",14)(30,"span",15),u(31,"Cache hit"),g(),h(32,"span",16),u(33),g()()()()),t&2){let n=m(2);d(8),k(n.lastValue("inputTokens")),d(5),k(n.lastValue("outputTokens")),d(5),k(n.lastValue("reasoningTokens")),d(5),k(n.lastValue("cacheReadTokens")),d(5),k(n.lastValue("cacheWriteTokens")),d(5),k(n.cacheHitLabel())}}function hP(t,e){if(t&1){let n=$();h(0,"button",5),F("click",function(){D(n);let o=m();return M(o.close())}),g(),h(1,"div",6)(2,"header")(3,"h3"),u(4,"Context"),g(),h(5,"button",7),F("click",function(){D(n);let o=m();return M(o.close())}),u(6,"\xD7"),g()(),h(7,"div",8),u(8),w(9,fP,2,1,"span"),g(),h(10,"div",9)(11,"span"),u(12,"Context"),g(),h(13,"span"),u(14),g()(),h(15,"div",10),ce(16,"span",11),g(),h(17,"div",12)(18,"span"),u(19),g()(),h(20,"div",13)(21,"div",14)(22,"span",15),u(23,"Messages"),g(),h(24,"span",16),u(25),g()(),h(26,"div",14)(27,"span",15),u(28,"User"),g(),h(29,"span",16),u(30),g()(),h(31,"div",14)(32,"span",15),u(33,"Assistant"),g(),h(34,"span",16),u(35),g()(),h(36,"div",14)(37,"span",15),u(38,"Tool calls"),g(),h(39,"span",16),u(40),g()(),h(41,"div",14)(42,"span",15),u(43,"Cost"),g(),h(44,"span",16),u(45),g()(),h(46,"div",14)(47,"span",15),u(48,"Output limit"),g(),h(49,"span",16),u(50),g()()(),w(51,mP,34,6,"section"),h(52,"section")(53,"h4"),u(54,"Session totals"),g(),h(55,"div",17),u(56),g()()()}if(t&2){let n,i=m();d(8),ae(" ",i.modelLabel()),d(),S((n=i.sessionTitle())?9:-1,n),d(5),wo("",i.usedLabel()," / ",i.limitLabel()),d(2),At("width",i.fillPercent(),"%"),X("warn",i.level()==="warn")("danger",i.level()==="danger"),d(3),ae("",i.percentLabel()," used"),d(6),k(i.counts()?.totalMessages??"\u2014"),d(5),k(i.counts()?.userMessages??"\u2014"),d(5),k(i.counts()?.assistantMessages??"\u2014"),d(5),k(i.counts()?.toolCalls??"\u2014"),d(5),k(i.costLabel()),d(5),k(i.outputLimitLabel()),d(),S(i.lastUsage()?51:-1),d(5),k(i.sessionLine()||"No usage yet.")}}var gP=15.5,pC=2*Math.PI*gP,ou=class t{usage=te();lastUsage=te();costUsd=te();contextUsage=te();counts=te();model=te();sessionTitle=te();open=O(!1);circumference=pC;percent=E(()=>this.contextUsage()?.percent??void 0);percentLabel=E(()=>{let e=this.contextUsage()?.percent;return e==null?"\u2013":`${e.toFixed(1)}%`});level=E(()=>{let e=this.percent()??0;return e>90?"danger":e>70?"warn":"ok"});fillPercent=E(()=>Math.min(100,Math.max(0,this.percent()??0)));dashOffset=E(()=>pC*(1-this.fillPercent()/100));usedLabel=E(()=>{let e=this.contextUsage()?.tokens;return e==null?"\u2014":li(e)});limitLabel=E(()=>{let e=this.contextUsage()?.contextWindow;return e===void 0?"\u2014":li(e)});costLabel=E(()=>Oh(this.costUsd())??"\u2014");outputLimitLabel=E(()=>{let e=this.model()?.maxTokens;return e===void 0?"\u2014":li(e)});modelLabel=E(()=>this.model()?.name??this.model()?.id??"no model");tooltip=E(()=>{let e=[`Context ${this.percentLabel()} \xB7 ${this.usedLabel()} / ${this.limitLabel()}`],n=Ph({usage:this.usage(),costUsd:this.costUsd(),contextUsage:this.contextUsage()});return n.length>0&&e.push(n),e.join(`
|
|
15
15
|
`)});sessionLine=E(()=>Ph({usage:this.usage(),costUsd:this.costUsd(),contextUsage:this.contextUsage()}));cacheHitLabel=E(()=>{let e=Nh(this.lastUsage());return e===void 0?"\u2014":`${e.toFixed(1)}%`});lastValue(e){return uC(this.lastUsage(),e)}toggle(){this.open.update(e=>!e)}close(){this.open.set(!1)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-usage-indicator"]],hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.close()},Mt)},inputs:{usage:[1,"usage"],lastUsage:[1,"lastUsage"],costUsd:[1,"costUsd"],contextUsage:[1,"contextUsage"],counts:[1,"counts"],model:[1,"model"],sessionTitle:[1,"sessionTitle"]},decls:7,vars:10,consts:[["type","button","aria-label","Context usage",1,"mini",3,"click","title"],["viewBox","0 0 36 36","aria-hidden","true",1,"ring"],["cx","18","cy","18","r","15.5",1,"track"],["cx","18","cy","18","r","15.5",1,"value"],[1,"pct"],["type","button","aria-label","Close usage",1,"scrim",3,"click"],["role","dialog","aria-label","Context usage",1,"panel"],["type","button","aria-label","Close",1,"close",3,"click"],[1,"subtitle"],[1,"bar-head"],[1,"bar"],[1,"fill"],[1,"bar-foot"],[1,"grid"],[1,"cell"],[1,"k"],[1,"v"],[1,"totals"]],template:function(n,i){n&1&&(h(0,"button",0),F("click",function(){return i.toggle()}),st(),h(1,"svg",1),ce(2,"circle",2)(3,"circle",3),g(),Jt(),h(4,"span",4),u(5),g()(),w(6,hP,57,19)),n&2&&(ie("title",i.tooltip()),J("aria-expanded",i.open()),d(),X("warn",i.level()==="warn")("danger",i.level()==="danger"),d(2),J("stroke-dasharray",i.circumference)("stroke-dashoffset",i.dashOffset()),d(2),k(i.percentLabel()),d(),S(i.open()?6:-1))},styles:["[_nghost-%COMP%]{position:relative;display:inline-flex;vertical-align:middle}.mini[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;padding:2px 7px 2px 3px;border:1px solid transparent;border-radius:999px;background:transparent;color:var(--%NS%morse-fg-muted);font-size:11px;line-height:1;cursor:pointer}.mini[_ngcontent-%COMP%]:hover, .mini[aria-expanded=true][_ngcontent-%COMP%]{border-color:var(--%NS%morse-border);background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.ring[_ngcontent-%COMP%]{width:20px;height:20px;transform:rotate(-90deg)}.track[_ngcontent-%COMP%]{fill:none;stroke:var(--%NS%morse-border);stroke-width:3.4}.value[_ngcontent-%COMP%]{fill:none;stroke:var(--%NS%morse-success);stroke-width:3.4;stroke-linecap:round;transition:stroke-dashoffset .3s ease}.ring.warn[_ngcontent-%COMP%] .value[_ngcontent-%COMP%]{stroke:var(--%NS%morse-warn)}.ring.danger[_ngcontent-%COMP%] .value[_ngcontent-%COMP%]{stroke:var(--%NS%morse-error)}.pct[_ngcontent-%COMP%]{font-family:var(--%NS%morse-font-mono);font-size:10.5px;font-variant-numeric:tabular-nums}.scrim[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:30;padding:0;border:0;background:transparent;cursor:default}.scrim[_ngcontent-%COMP%]:hover, .scrim[_ngcontent-%COMP%]:active{background:transparent}.panel[_ngcontent-%COMP%]{position:absolute;z-index:31;right:0;bottom:calc(100% + 8px);width:320px;max-height:70vh;overflow-y:auto;padding:12px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-md);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 16px 40px #00000059;color:var(--%NS%morse-fg);text-align:left}.panel[_ngcontent-%COMP%] header[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;margin-bottom:2px}.panel[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0;font-size:13px;font-weight:600}.close[_ngcontent-%COMP%]{padding:0 6px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:15px;line-height:1.4;cursor:pointer}.close[_ngcontent-%COMP%]:hover{color:var(--%NS%morse-fg);background:var(--%NS%morse-active)}.subtitle[_ngcontent-%COMP%]{margin-bottom:10px;color:var(--%NS%morse-fg-muted);font-size:11px}.bar-head[_ngcontent-%COMP%], .bar-foot[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;color:var(--%NS%morse-fg-muted);font-size:11px}.bar[_ngcontent-%COMP%]{height:7px;margin:5px 0;border-radius:999px;background:var(--%NS%morse-border);overflow:hidden}.bar[_ngcontent-%COMP%] .fill[_ngcontent-%COMP%]{display:block;height:100%;border-radius:999px;background:var(--%NS%morse-success);transition:width .3s ease}.bar[_ngcontent-%COMP%] .fill.warn[_ngcontent-%COMP%]{background:var(--%NS%morse-warn)}.bar[_ngcontent-%COMP%] .fill.danger[_ngcontent-%COMP%]{background:var(--%NS%morse-error)}.grid[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;margin-top:10px}.cell[_ngcontent-%COMP%]{padding:6px 8px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-input-bg, transparent)}.cell[_ngcontent-%COMP%] .k[_ngcontent-%COMP%]{display:block;color:var(--%NS%morse-fg-muted);font-size:10px;text-transform:uppercase;letter-spacing:.03em}.cell[_ngcontent-%COMP%] .v[_ngcontent-%COMP%]{display:block;margin-top:2px;font-family:var(--%NS%morse-font-mono);font-size:12px;font-variant-numeric:tabular-nums}section[_ngcontent-%COMP%]{margin-top:12px}section[_ngcontent-%COMP%] h4[_ngcontent-%COMP%]{margin:0 0 4px;color:var(--%NS%morse-fg-muted);font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.03em}.totals[_ngcontent-%COMP%]{padding:7px 9px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);color:var(--%NS%morse-fg-muted);font-family:var(--%NS%morse-font-mono);font-size:11.5px;font-variant-numeric:tabular-nums}"]})};var yP=["promptInput"],_P=["fileInput"],Rh=(t,e)=>e.id;function vP(t,e){if(t&1){let n=$();y(0,"div",30)(1,"span",31),u(2,"\u283F"),b(),y(3,"span",32),u(4),b(),y(5,"div",33)(6,"button",34),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.editQueued(o))}),u(7," \u270E "),y(8,"span"),u(9,"edit"),b()(),y(10,"button",35),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.sendQueued(o))}),u(11," \u27A4 "),y(12,"span"),u(13,"send"),b()(),y(14,"button",36),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.removeQueued(o))}),u(15," \xD7 "),b()()()}if(t&2){let n=e.$implicit,i=e.$index;q("morseEnter",i)("morseEnterY",4),d(3),q("title",n.text),d(),k(n.text)}}function bP(t,e){if(t&1&&(y(0,"div",3)(1,"div",26)(2,"span",27),u(3,"\u23F2"),b(),y(4,"span",28),u(5,"Queued messages"),b(),y(6,"span",29),u(7),b()(),oe(8,vP,16,4,"div",30,Rh),b()),t&2){let n=m();d(7),k(n.queuedMessages().length),d(),re(n.queuedMessages())}}function xP(t,e){if(t&1){let n=$();y(0,"button",37),A("click",function(){D(n);let o=m();return M(o.attachSelection())}),u(1," \u29C9 "),b()}}function CP(t,e){t&1&&u(0," add files \xB7 @ to mention \xB7 / for commands ")}function EP(t,e){t&1&&u(0," upload or drop files \xB7 / for commands ")}function wP(t,e){t&1&&u(0," drop files here \xB7 / for commands ")}function SP(t,e){if(t&1){let n=$();y(0,"morse-file-picker",38),A("activeChange",function(o){D(n);let r=m();return M(r.mentionActive.set(o))})("pick",function(o){D(n);let r=m();return M(r.onPickFile(o))})("quote",function(o){D(n);let r=m();return M(r.onQuoteFile(o))})("reload",function(){D(n);let o=m();return M(o.reloadFiles())})("close",function(){D(n);let o=m();return M(o.onPickerClose())}),b()}if(t&2){let n=m();q("morsePopoverFit",300)("files",n.pickerMatches())("busy",n.loadingFiles())("query",n.pickerFilter())("active",n.mentionActive())}}function TP(t,e){if(t&1){let n=$();y(0,"morse-command-picker",39),A("activeChange",function(o){D(n);let r=m();return M(r.paletteActive.set(o))})("pick",function(o){D(n);let r=m();return M(r.activatePalette(o,"run"))})("close",function(){D(n);let o=m();return M(o.onPaletteClose())}),b()}if(t&2){let n=m();q("morsePopoverFit",320)("items",n.paletteItems())("query",n.paletteFilter())("active",n.paletteActive())}}function DP(t,e){if(t&1){let n=$();y(0,"li",40)(1,"button",42),A("click",function(){D(n);let o=m(2);return M(o.lockLive())}),y(2,"span",43),u(3,"\u29C9"),b(),y(4,"span",44),u(5),b(),y(6,"span",45),u(7),b()(),y(8,"button",46),A("click",function(){D(n);let o=m(2);return M(o.dismissLive())}),u(9," \xD7 "),b()()}if(t&2){let n=e,i=m(2);q("morseEnter",0)("morseEnterY",6)("morseEnterScale",.55)("morseEnterDuration",320),d(),q("title",i.lockLiveLabel()),J("aria-label","Lock the "+n.path+" selection as a pin"),d(3),q("title",n.path),d(),k(n.path),d(2),k(i.pinRange(n)),d(),J("aria-label","Dismiss the "+n.path+" selection preview")}}function MP(t,e){if(t&1){let n=$();y(0,"li",41),ve(1,"img",47),y(2,"span",44),u(3),b(),y(4,"button",48),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.removeImage(o.id))}),u(5," \xD7 "),b()()}if(t&2){let n=e.$implicit,i=e.$index,o=m(2);q("morseEnter",o.chipOffset()+i)("morseEnterY",6)("morseEnterScale",.55)("morseEnterDuration",320),d(),q("src",o.preview(n),xi)("alt",n.name),d(),q("title",n.name),d(),k(n.name),d(),J("aria-label","Remove "+n.name)}}function kP(t,e){if(t&1&&(y(0,"span",45),u(1),b()),t&2){let n=m().$implicit,i=m(2);d(),k(i.pinRange(n))}}function IP(t,e){if(t&1){let n=$();y(0,"li",41)(1,"button",42),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.openPinPreview(o))}),y(2,"span",43),u(3,"\u29C9"),b(),y(4,"span",49),u(5),b(),w(6,kP,2,1,"span",45),b(),y(7,"button",48),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.removePin(o.id))}),u(8," \xD7 "),b()()}if(t&2){let n=e.$implicit,i=e.$index,o=m(2);q("morseEnter",o.chipOffset()+o.images().length+i)("morseEnterY",6)("morseEnterScale",.55)("morseEnterDuration",320),d(),q("title","Open "+n.path+" in the preview"),d(4),k(n.path),d(),S(n.startLine!==void 0?6:-1),d(),J("aria-label","Unpin "+n.path)}}function NP(t,e){if(t&1&&(y(0,"ul",12),w(1,DP,10,10,"li",40),oe(2,MP,6,9,"li",41,Rh),oe(4,IP,9,8,"li",41,Rh),b()),t&2){let n,i=m();d(),S((n=i.livePreview())?1:-1,n),d(),re(i.images()),d(2),re(i.pins())}}function OP(t,e){if(t&1&&(y(0,"span",51),u(1),b()),t&2){let n=m(2);d(),wo(" \u2193",n.streamedTokens()," \xB7 ",n.tokensPerSecond()??0," t/s ")}}function PP(t,e){if(t&1&&(y(0,"span",53),ve(1,"span",55),y(2,"span"),u(3),b(),y(4,"span",56),ve(5,"i")(6,"i")(7,"i"),b()()),t&2){let n=m(2);d(3),ae("Working ",n.elapsed())}}function AP(t,e){if(t&1&&ve(0,"morse-usage-indicator",54),t&2){let n=m(2);q("usage",n.usageState().usage)("lastUsage",n.usageState().lastUsage)("costUsd",n.usageState().costUsd)("contextUsage",n.usageState().contextUsage)("counts",n.usageState().counts)("model",n.usageState().model)("sessionTitle",n.usageState().sessionTitle)}}function RP(t,e){if(t&1&&(y(0,"div",14)(1,"div",50),w(2,OP,2,2,"span",51),b(),y(3,"div",52),w(4,PP,8,1,"span",53),w(5,AP,1,7,"morse-usage-indicator",54),b()()),t&2){let n=m();d(2),S(n.running()?2:-1),d(2),S(n.running()?4:-1),d(),S(n.showUsage()?5:-1)}}function LP(t,e){if(t&1&&(y(0,"span",18),u(1),b()),t&2){let n=e;q("title",n),d(),k(n)}}function FP(t,e){if(t&1){let n=$();y(0,"morse-model-picker",57),A("pick",function(o){D(n);let r=m();return M(r.onModelPick(o))})("close",function(){D(n);let o=m();return M(o.closeModelPicker())}),b()}if(t&2){let n=m();q("morsePopoverFit",340)("models",n.models())("current",n.modelKey())}}function VP(t,e){if(t&1){let n=$();y(0,"button",58),A("click",function(){D(n);let o=m();return M(o.sendWith("steer"))}),u(1,"Steer"),b(),y(2,"button",58),A("click",function(){D(n);let o=m();return M(o.sendWith("followUp"))}),u(3,"Follow up"),b(),y(4,"button",59),A("click",function(){D(n);let o=m();return M(o.abort())}),u(5,"\u25A0"),b()}}function jP(t,e){if(t&1){let n=$();y(0,"button",60),A("click",function(){D(n);let o=m();return M(o.sendWith("new"))}),u(1," \u2191 "),b()}if(t&2){let n=m();q("disabled",!n.canSend())}}function $P(t,e){if(t&1){let n=$();y(0,"morse-prompt-template-dialog",61),A("submitted",function(o){D(n);let r=m();return M(r.onTemplateSubmit(o))})("cancelled",function(){D(n);let o=m();return M(o.closeTemplate())}),b()}t&2&&q("request",e)}var ru=class t{morse=N(Ze);shell=N(Ht);shortcuts=N(An);destroyRef=N(pt);attachments=N(Ui);queue=N(Hd);workspace=N(zi);tabs=N(dn);uploads=N(Ds);promptInput=Xe("promptInput");fileInput=Xe("fileInput");draining=!1;text=O("");connected=E(()=>this.morse.connection()==="ready");agentReady=this.morse.agentReady;agentStarting=this.morse.agentStarting;agentError=this.morse.agentError;streaming=E(()=>this.morse.state().streaming);canSend=E(()=>this.connected()&&!this.agentStarting()&&this.agentError()===void 0);canAttachSelection=E(()=>this.morse.capabilities()?.editorContext===!0);thinkingLevel=E(()=>this.morse.state().thinkingLevel);models=this.morse.availableModels;levels=this.morse.availableThinkingLevels;modelKey=E(()=>{let e=this.morse.state().model;return e?`${e.provider}/${e.id}`:""});usageState=this.morse.state;showUsage=E(()=>{let e=this.morse.state();return e.usage!==void 0||e.contextUsage!==void 0});showStatusRow=E(()=>this.running()||this.showUsage());streamedTokens=E(()=>Math.round(Math.max(0,Ah(this.morse.items())-this.baseline())/4));tokensPerSecond=O(void 0);baseline=O(0);throughput=[];images=this.attachments.images;pins=this.attachments.pins;queuedMessages=this.queue.queued;openPinPreview(e){this.morse.capabilities()?.filePreview&&this.tabs.openMentionFile(e.path)}livePreview=this.attachments.livePreview;chipOffset=E(()=>this.livePreview()?1:0);lockLiveLabel=E(()=>this.livePreview()?"Lock this selection \u2014 it stops following the editor; a new selection makes a new chip.":"");pickerOpen=O(!1);workspaceFiles=this.workspace.files;loadingFiles=this.workspace.busy;mentionMode=O(!1);pickerFilter=O("");pickerMatches=E(()=>lC(this.workspaceFiles(),this.pickerFilter()));mentionActive=O(0);canPickFiles=this.workspace.available;canUpload=this.uploads.available;paletteOpen=O(!1);paletteFilter=O("");paletteActive=O(0);templateRequest=O(void 0);availableCommands=this.morse.availableCommands;paletteItems=E(()=>{let e=[...fC.map(n=>({id:`builtin:${n.name}`,label:`/${n.name}`,description:n.description,badge:"built-in",icon:"\u203A"})),...this.availableCommands().map(n=>({id:`command:${n.name}`,label:`/${n.name}`,description:n.description,badge:n.source,icon:"\u2044"}))];return dC(e,this.paletteFilter())});modelPickerOpen=O(!1);currentModel=this.morse.model;currentProvider=E(()=>this.morse.model()?.provider??"");modelLabel=E(()=>{let e=this.morse.model();return e?`${e.provider} \xB7 ${e.name}`:"no model"});canAddFiles=E(()=>this.canPickFiles()||this.canUpload()||this.canAttachSelection());addFilesLabel=E(()=>this.canPickFiles()?"Add files to the prompt":this.canUpload()?"Upload files to the prompt":"Attach the active editor selection");running=E(()=>this.morse.state().streaming||this.morse.state().busy);elapsed=E(()=>{this.tick();let e=this.startedAt(),n=e===null?0:Date.now()-e;return n<1e3?"":UP(n)});startedAt=O(null);tick=O(0);constructor(){let e=this.shortcuts.bind("model.pick",()=>this.toggleModelPicker(),()=>this.models().length>0);this.destroyRef.onDestroy(e),se(()=>{if(this.attachments.mentions().length===0)return;let o=this.attachments.takeMentions().map(s=>s.startsWith("@")?s:`@${s}`).join(`
|
|
16
16
|
`);this.text.update(s=>s.trim().length===0?o:`${s.trimEnd()}
|
|
@@ -95,4 +95,4 @@ ${i}`:i}copy(e){this.copyRaw(e.id,this.copyText(e))}copyAssistant(e){this.copyRa
|
|
|
95
95
|
${n}${n.length===0?"":`
|
|
96
96
|
`}`}var SL=["source"],TL=["gutter"],DL=(t,e)=>e.id;function ML(t,e){if(t&1&&(h(0,"span",7),u(1),g()),t&2){let n=m(2);d(),k(n.diffStats())}}function kL(t,e){if(t&1){let n=$();h(0,"div",11)(1,"button",12),F("click",function(){D(n);let o=m();return M(o.setMode("file"))}),u(2," File "),g(),h(3,"button",13),F("click",function(){D(n);let o=m();return M(o.setMode("unified"))}),u(4," Unified "),g(),h(5,"button",14),F("click",function(){D(n);let o=m();return M(o.setMode("split"))}),u(6," Split "),g()(),w(7,ML,2,1,"span",7)}if(t&2){let n=m();d(),X("on",n.mode()==="file"),d(2),X("on",n.mode()==="unified"),d(2),X("on",n.mode()==="split"),d(2),S(n.mode()!=="file"?7:-1)}}function IL(t,e){t&1&&(h(0,"span",5),u(1),g()),t&2&&(ie("title","Pinned to the next prompt"),d(),k(e))}function NL(t,e){if(t&1&&(h(0,"span",5),u(1),g()),t&2){let n=m();ie("title","Pinned to the next prompt"),d(),k(n.pinnedCount()===1?"1 range":n.pinnedCount()+" ranges")}}function OL(t,e){t&1&&(h(0,"p",9),u(1,"Reading the changes\u2026"),g())}function PL(t,e){t&1&&(h(0,"p",10),u(1),g()),t&2&&(d(),k(e))}function AL(t,e){if(t&1&&(h(0,"p",9),u(1),g()),t&2){let n=m(2);d(),ae("Binary file \xB7 ",n.size()," \xB7 no textual diff.")}}function RL(t,e){t&1&&(h(0,"p",9),u(1,"No changes against HEAD."),g())}function LL(t,e){t&1&&(h(0,"div",17)(1,"span",19),u(2),g()()),t&2&&(d(2),k(e))}function FL(t,e){if(t&1){let n=$();h(0,"div",18)(1,"div",20),F("click",function(){D(n);let o=m().$implicit,r=m(3);return M(r.toggleChange(o.left))}),h(2,"span",21),u(3),g(),h(4,"span",22),u(5),g(),ce(6,"span",23),g(),h(7,"div",20),F("click",function(){D(n);let o=m().$implicit,r=m(3);return M(r.toggleChange(o.right))}),h(8,"span",21),u(9),g(),h(10,"span",22),u(11),g(),ce(12,"span",23),g()()}if(t&2){let n=m().$implicit,i=m(3);d(),X("del",n.left?.kind==="del")("clickable",n.left?.change!==void 0)("pinned",i.isChangePinned(n.left?.newAnchor)),J("title",n.left?.change!==void 0?"Click to pin this change to your next message":null),d(2),k(n.left?.oldLine??""),d(2),k(i.diffSign(n.left)),d(),ie("innerHTML",n.left?.html,Eo),d(),X("add",n.right?.kind==="add")("clickable",n.right?.change!==void 0)("pinned",i.isChangePinned(n.right?.newAnchor)),J("title",n.right?.change!==void 0?"Click to pin this change to your next message":null),d(2),k(n.right?.newLine??""),d(2),k(i.diffSign(n.right)),d(),ie("innerHTML",n.right?.html,Eo)}}function VL(t,e){if(t&1&&w(0,LL,3,1,"div",17)(1,FL,13,20,"div",18),t&2){let n,i=e.$implicit;S((n=i.hunk)?0:1,n)}}function jL(t,e){if(t&1&&(h(0,"div",15),oe(1,VL,2,1,null,null,Ci),g()),t&2){let n=m(2);d(),re(n.splitView())}}function $L(t,e){if(t&1&&(h(0,"div",17)(1,"span",19),u(2),g()()),t&2){let n=m().$implicit;d(2),k(n.text)}}function BL(t,e){if(t&1){let n=$();h(0,"div",25),F("click",function(){D(n);let o=m().$implicit,r=m(3);return M(r.toggleChange(o))}),h(1,"span",21),u(2),g(),h(3,"span",21),u(4),g(),h(5,"span",22),u(6),g(),ce(7,"span",23),g()}if(t&2){let n=m().$implicit,i=m(3);X("add",n.kind==="add")("del",n.kind==="del")("clickable",n.change!==void 0)("pinned",i.isChangePinned(n.newAnchor)),J("title",n.change!==void 0?"Click to pin this change to your next message":null),d(2),k(n.oldLine??""),d(2),k(n.newLine??""),d(2),k(i.diffSign(n)),d(),ie("innerHTML",n.html,Eo)}}function HL(t,e){if(t&1&&w(0,$L,3,1,"div",17)(1,BL,8,13,"div",24),t&2){let n=e.$implicit;S(n.kind==="hunk"?0:1)}}function UL(t,e){if(t&1&&(h(0,"div",16),oe(1,HL,2,1,null,null,Ci),g()),t&2){let n=m(2);d(),re(n.unifiedView())}}function zL(t,e){if(t&1&&w(0,OL,2,0,"p",9)(1,PL,2,1,"p",10)(2,AL,2,1,"p",9)(3,RL,2,0,"p",9)(4,jL,3,0,"div",15)(5,UL,3,0,"div",16),t&2){let n,i=m();S(i.tab().diffLoading&&i.diffText().length===0?0:(n=i.tab().diffError)?1:i.parsed().binary?2:i.parsed().hunks.length===0?3:i.mode()==="split"?4:5,n)}}function GL(t,e){if(t&1&&(h(0,"p",9),u(1),g()),t&2){let n=m();d(),ae("Reading ",n.tab().title,"\u2026")}}function qL(t,e){t&1&&(h(0,"p",10),u(1),g()),t&2&&(d(),k(e))}function WL(t,e){if(t&1&&(h(0,"p",9),u(1),g()),t&2){let n=m();d(),ae("Binary file \xB7 ",n.size()," \xB7 no text preview.")}}function YL(t,e){if(t&1){let n=$();h(0,"span",33),F("pointerdown",function(o){let r=D(n).$implicit,s=m(2);return M(s.startSelection(o,r))}),u(1),g()}if(t&2){let n=e.$implicit,i=m(2);X("selected",i.isSelected(n)),J("data-line",n),d(),k(n)}}function KL(t,e){if(t&1){let n=$();h(0,"span",34)(1,"span",35),F("pointerdown",function(o){let r=D(n).$implicit,s=m(2);return M(s.startResizeEdge(o,r,"start"))}),g(),h(2,"span",36),F("pointerdown",function(o){let r=D(n).$implicit,s=m(2);return M(s.startResizeEdge(o,r,"end"))}),g()()}if(t&2){let n=e.$implicit,i=m(2);At("top",i.topOf(n),"px")("height",i.heightOf(n),"px"),X("merged",n.id===i.mergedId())}}function ZL(t,e){if(t&1&&(h(0,"p",9),u(1),g()),t&2){let n=m(2);d(),ae("Showing the first 512 KB of ",n.size(),".")}}function QL(t,e){if(t&1&&(h(0,"div",26)(1,"div",27,0),oe(3,YL,2,4,"span",28,Ei),g(),h(5,"div",29)(6,"pre",30,1),ce(8,"code",31),g(),oe(9,KL,3,6,"span",32,DL),g()(),w(11,ZL,2,1,"p",9)),t&2){let n=m();d(3),re(n.lines()),d(5),ie("innerHTML",n.highlighted(),Eo),d(),re(n.highlights()),d(2),S(n.tab().truncated?11:-1)}}function DE(t){return t===void 0?"":t.start===t.end?`L${t.start}`:`L${t.start}\u2013${t.end}`}var XL=19.2,xu=class t{tab=te.required();tabs=N(dn);attachments=N(Ui);animation=N(ln);sanitizer=N(Fa);display=N(Ro);workspace=N(zi);sourceElement=Xe("source");gutterElement=Xe("gutter");source=E(()=>{let e=this.tab().content??"";return e.endsWith(`
|
|
97
97
|
`)?e.slice(0,-1):e});lines=E(()=>{let e=this.source(),n=e.length===0?1:e.split(`
|
|
98
|
-
`).length;return Array.from({length:n},(i,o)=>o+1)});highlighted=E(()=>{let e=this.tab();return e.content===void 0||e.binary?this.sanitizer.bypassSecurityTrustHtml(""):this.sanitizer.bypassSecurityTrustHtml(Is(this.source(),e.language).html)});language=E(()=>this.tab().language??"text");size=E(()=>JL(this.tab().size??0));changed=E(()=>Ud(this.workspace.status()).get(this.tab().path));mode=E(()=>this.changed()===void 0?"file":this.display.diffView());diffText=E(()=>{let e=this.tab();return e.diff!==void 0&&e.diff.trim().length>0?e.diff:this.changed()==="U"&&e.content!==void 0&&!e.binary?TE(e.content):e.diff??""});parsed=E(()=>EE(this.diffText()));unified=E(()=>wE(this.parsed()));split=E(()=>SE(this.parsed()));unifiedView=E(()=>{let e=this.language();return this.unified().map(n=>K(V({},n),{html:n.kind==="hunk"?"":this.sanitizer.bypassSecurityTrustHtml(Is(n.text,e).html)}))});splitView=E(()=>{let e=this.language(),n=i=>i===void 0?void 0:K(V({},i),{html:this.sanitizer.bypassSecurityTrustHtml(Is(i.text,e).html)});return this.split().map(i=>({hunk:i.hunk,left:n(i.left),right:n(i.right)}))});diffStats=E(()=>{let e=this.parsed();return`+${e.additions} \u2212${e.deletions}`});lineHeight=O(XL);selected=O(void 0);editingId=O(void 0);mergedId=O(void 0);anchor=1;rangeLabel=E(()=>DE(this.selected()));highlights=E(()=>{let e=this.tab().path,n=this.editingId(),i=this.attachments.pins().filter(r=>r.path===e&&r.startLine!==void 0&&r.id!==n).map(r=>({id:r.id,start:r.startLine,end:r.endLine??r.startLine})),o=this.selected();return o===void 0?i:[...i,{id:"live",start:o.start,end:o.end}]});pinnedCount=E(()=>this.highlights().filter(e=>e.id!=="live").length);topOf(e){return(e.start-1)*this.lineHeight()}heightOf(e){return(e.end-e.start+1)*this.lineHeight()}constructor(){no(()=>this.measureLineHeight()),se(()=>{this.tab(),ii(()=>this.selected.set(void 0))}),se(()=>{if(this.mode()==="file"||this.changed()===void 0)return;let e=this.tab().id;ii(()=>this.tabs.loadDiff(e))})}setMode(e){this.display.setDiffView(e)}diffSign(e){if(e===void 0)return"";switch(e.kind){case"add":return"+";case"del":return"\u2212";case"context":return" ";default:return""}}isChangePinned(e){if(e===void 0)return!1;let n=this.tab().path;return this.attachments.pins().some(i=>i.path===n&&i.startLine!==void 0&&e>=i.startLine&&e<=(i.endLine??i.startLine))}toggleChange(e){let n=e!==void 0&&e.kind!=="hunk"?e.change:void 0;if(n===void 0)return;let i=this.tab().path,o=this.attachments.pins().find(r=>r.path===i&&r.startLine!==void 0&&r.startLine<=n.start&&(r.endLine??r.startLine)>=n.end);if(o!==void 0){this.attachments.removePin(o.id);return}this.attachments.pin({path:i,startLine:n.start,endLine:n.end>n.start?n.end:void 0}),this.attachments.say("info",`Pinned ${this.tab().title} ${DE(n)} to this message.`)}isSelected(e){return this.highlights().some(n=>e>=n.start&&e<=n.end)}startSelection(e,n){if(e.button!==0)return;e.preventDefault(),this.anchor=n,this.editingId.set(this.highlights().find(s=>s.id!=="live"&&n>=s.start&&n<=s.end)?.id),this.selected.set({start:n,end:n});let i=e.currentTarget;try{i.setPointerCapture(e.pointerId)}catch{}let o=s=>{let a=this.lineAt(s.clientY);a!==void 0&&this.selected.set({start:Math.min(this.anchor,a),end:Math.max(this.anchor,a)})},r=()=>{i.removeEventListener("pointermove",o),i.removeEventListener("pointerup",r),i.removeEventListener("pointercancel",r),this.pinSelection()};i.addEventListener("pointermove",o),i.addEventListener("pointerup",r),i.addEventListener("pointercancel",r)}clearSelection(){this.selected.set(void 0),this.editingId.set(void 0)}reload(){this.tabs.reload(this.tab().id)}startResizeEdge(e,n,i){if(e.button!==0)return;e.preventDefault(),e.stopPropagation();let o=e.currentTarget;try{o.setPointerCapture(e.pointerId)}catch{}let r=a=>{let c=this.lineAt(a.clientY);if(c===void 0)return;let l=this.attachments.pins().find(C=>C.id===n.id),p=l?.startLine??n.start,f=l?.endLine??p,_=i==="start"?Math.min(c,f):p,x=i==="end"?Math.max(c,p):f;this.attachments.setPinRange(n.id,{startLine:_,endLine:x>_?x:void 0})},s=()=>{o.removeEventListener("pointermove",r),o.removeEventListener("pointerup",s),o.removeEventListener("pointercancel",s);let a=this.attachments.pins().find(c=>c.id===n.id);if(a?.startLine!==void 0){let c=this.attachments.pins().length,l=this.attachments.pin({path:this.tab().path,startLine:a.startLine,endLine:a.endLine},n.id);this.attachments.pins().length<c&&this.celebrate(l,{start:a.startLine,end:a.endLine??a.startLine})}};o.addEventListener("pointermove",r),o.addEventListener("pointerup",s),o.addEventListener("pointercancel",s)}measureLineHeight(){let e=this.sourceElement()?.nativeElement;if(e===void 0)return;let n=Number.parseFloat(getComputedStyle(e).lineHeight);Number.isFinite(n)&&n>0&&this.lineHeight.set(n)}lineAt(e){let n=this.gutterElement()?.nativeElement;if(n===void 0)return;let i=n.getBoundingClientRect().top,o=Math.floor((e-i)/this.lineHeight())+1;return Math.min(this.lines().length,Math.max(1,o))}pinSelection(){let e=this.selected();if(e===void 0)return;let n=e.end>e.start?e.end:void 0,i=this.attachments.pins().length,o=this.attachments.pin({path:this.tab().path,startLine:e.start,endLine:n},this.editingId());this.attachments.pins().length<i&&this.celebrate(o,{start:e.start,end:e.end}),this.attachments.say("info",`Pinned ${this.tab().title} ${this.rangeLabel()} to this message.`),this.selected.set(void 0),this.editingId.set(void 0)}celebrate(e,n){if(e.length===0)return;this.mergedId.set(e),setTimeout(()=>{this.mergedId()===e&&this.mergedId.set(void 0)},720);let i=this.attachments.pins().find(l=>l.id===e),o=this.sourceElement()?.nativeElement.closest(".source-wrap");if(i?.startLine===void 0||!(o instanceof HTMLElement))return;let r=i.startLine,s=i.endLine??r,a=this.lineHeight(),c=s>n.end?n.end*a:r<n.start?(n.start-1)*a:((n.start+n.end)/2-.5)*a;this.animation.confetti(o,{x:o.clientWidth/2,y:c})}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-file-preview"]],viewQuery:function(n,i){n&1&>(i.sourceElement,SL,5)(i.gutterElement,TL,5),n&2&&vt(2)},inputs:{tab:[1,"tab"]},decls:18,vars:7,consts:[["gutter",""],["source",""],[1,"head"],[1,"path",3,"title"],[1,"meta"],[1,"range",3,"title"],[1,"badge"],[1,"stat"],["type","button","title","Reload from disk","aria-label","Reload from disk",1,"icon",3,"click"],[1,"hint"],[1,"hint","error"],["role","group","aria-label","Preview mode",1,"modes"],["type","button","title","The file's content",3,"click"],["type","button","title","Unified diff",3,"click"],["type","button","title","Side-by-side diff",3,"click"],[1,"diff","split"],[1,"diff"],[1,"drow","hunk"],[1,"srow"],[1,"dtext"],[1,"side",3,"click"],[1,"dnum"],[1,"dsign"],[1,"dtext",3,"innerHTML"],[1,"drow",3,"add","del","clickable","pinned"],[1,"drow",3,"click"],[1,"code"],["title","Drag line numbers to pin a range to your next message",1,"gutter"],[1,"num",3,"selected"],[1,"source-wrap"],[1,"source"],[1,"hljs",3,"innerHTML"],[1,"selection",3,"merged","top","height"],[1,"num",3,"pointerdown"],[1,"selection"],["title","Drag to resize","aria-hidden","true",1,"edge","top",3,"pointerdown"],["title","Drag to resize","aria-hidden","true",1,"edge","bottom",3,"pointerdown"]],template:function(n,i){if(n&1&&(h(0,"header",2)(1,"span",3),u(2),g(),h(3,"div",4),w(4,kL,8,7),w(5,IL,2,2,"span",5)(6,NL,2,2,"span",5),h(7,"span",6),u(8),g(),h(9,"span",7),u(10),g(),h(11,"button",8),F("click",function(){return i.reload()}),u(12," \u27F3 "),g()()(),w(13,zL,6,1)(14,GL,2,1,"p",9)(15,qL,2,1,"p",10)(16,WL,2,1,"p",9)(17,QL,12,2)),n&2){let o,r;d(),ie("title",i.tab().path),d(),k(i.tab().path),d(2),S(i.changed()?4:-1),d(),S((o=i.rangeLabel())?5:i.pinnedCount()>0?6:-1,o),d(3),k(i.language()),d(2),k(i.size()),d(3),S(i.mode()!=="file"?13:i.tab().loading?14:(r=i.tab().error)?15:i.tab().binary?16:17,r)}},styles:['[_nghost-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0;min-width:0}.head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;flex:none;min-height:var(--%NS%morse-head-height);padding:0 10px 0 14px;border-bottom:1px solid var(--%NS%morse-border)}.path[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--%NS%morse-font-mono);font-size:12px;color:var(--%NS%morse-fg)}.meta[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;flex:none}.badge[_ngcontent-%COMP%]{padding:1px 6px;border-radius:999px;background:var(--%NS%morse-badge-bg, var(--%NS%morse-hover));color:var(--%NS%morse-fg-muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.05em}.stat[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted);font-size:11px}.range[_ngcontent-%COMP%]{padding:1px 7px;border-radius:999px;background:color-mix(in srgb,var(--%NS%morse-accent) 22%,transparent);color:var(--%NS%morse-fg);font-size:11px;font-variant-numeric:tabular-nums}.icon[_ngcontent-%COMP%]{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--%NS%morse-radius-sm);background:none;color:var(--%NS%morse-fg-muted);cursor:pointer}.icon[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.modes[_ngcontent-%COMP%]{display:inline-flex;flex:none;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);overflow:hidden}.modes[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:2px 8px;border:0;background:transparent;color:var(--%NS%morse-fg-muted);font:inherit;font-size:11px;cursor:pointer}.modes[_ngcontent-%COMP%] button[_ngcontent-%COMP%] + button[_ngcontent-%COMP%]{border-left:1px solid var(--%NS%morse-border)}.modes[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.modes[_ngcontent-%COMP%] button.on[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--%NS%morse-accent) 24%,transparent);color:var(--%NS%morse-fg)}.diff[_ngcontent-%COMP%]{flex:1;min-height:0;overflow:auto;padding:6px 0;background:var(--%NS%morse-code-bg, var(--%NS%morse-bg));font-family:var(--%NS%morse-font-mono);font-size:12px;line-height:1.6}.drow[_ngcontent-%COMP%], .srow[_ngcontent-%COMP%]{display:flex;align-items:stretch;min-height:1.6em}.dtext[_ngcontent-%COMP%]{flex:1;min-width:0;padding:0 16px 0 6px;white-space:pre}.dnum[_ngcontent-%COMP%]{flex:none;min-width:44px;padding:0 8px 0 10px;color:var(--%NS%morse-fg-muted);text-align:right;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;opacity:.7}.dsign[_ngcontent-%COMP%]{flex:none;width:14px;text-align:center;color:var(--%NS%morse-fg-muted);-webkit-user-select:none;user-select:none}.drow.add[_ngcontent-%COMP%], .side.add[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--%NS%morse-success) 14%,transparent)}.drow.del[_ngcontent-%COMP%], .side.del[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--%NS%morse-error) 14%,transparent)}.drow.add[_ngcontent-%COMP%] .dsign[_ngcontent-%COMP%], .side.add[_ngcontent-%COMP%] .dsign[_ngcontent-%COMP%]{color:var(--%NS%morse-success)}.drow.del[_ngcontent-%COMP%] .dsign[_ngcontent-%COMP%], .side.del[_ngcontent-%COMP%] .dsign[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.drow.clickable[_ngcontent-%COMP%], .side.clickable[_ngcontent-%COMP%]{cursor:pointer}.drow.clickable[_ngcontent-%COMP%]:hover, .side.clickable[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--%NS%morse-accent) 12%,transparent)}.drow.pinned[_ngcontent-%COMP%], .side.pinned[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--%NS%morse-accent) 22%,transparent);box-shadow:inset 2px 0 color-mix(in srgb,var(--%NS%morse-accent) 70%,transparent)}.drow.hunk[_ngcontent-%COMP%]{margin:6px 0 2px;padding:2px 12px;background:var(--%NS%morse-code-head, var(--%NS%morse-hover));color:var(--%NS%morse-fg-muted)}.srow[_ngcontent-%COMP%] .side[_ngcontent-%COMP%]{flex:1 1 50%;min-width:0;display:flex;align-items:stretch;border-left:1px solid var(--%NS%morse-border)}.srow[_ngcontent-%COMP%] .side[_ngcontent-%COMP%]:first-child{border-left:0}.code[_ngcontent-%COMP%]{display:flex;flex:1;min-height:0;overflow:auto;padding:8px 0;background:var(--%NS%morse-code-bg, var(--%NS%morse-bg))}pre[_ngcontent-%COMP%], .gutter[_ngcontent-%COMP%]{margin:0;font-family:var(--%NS%morse-font-mono);font-size:12px;line-height:1.6}.gutter[_ngcontent-%COMP%]{flex:none;position:sticky;left:0;z-index:2;padding:0 10px 0 14px;color:var(--%NS%morse-fg-muted);text-align:right;-webkit-user-select:none;user-select:none;background:var(--%NS%morse-code-bg, var(--%NS%morse-bg));opacity:.7}.gutter[_ngcontent-%COMP%] .num[_ngcontent-%COMP%]{display:block;height:1.6em;cursor:pointer;font-variant-numeric:tabular-nums}.gutter[_ngcontent-%COMP%] .num.selected[_ngcontent-%COMP%]{color:var(--%NS%morse-fg);background:color-mix(in srgb,var(--%NS%morse-accent) 34%,transparent);opacity:1}.source-wrap[_ngcontent-%COMP%]{position:relative;flex:1;min-width:0}.source[_ngcontent-%COMP%]{position:relative;z-index:1;padding:0 16px 0 4px;white-space:pre}.selection[_ngcontent-%COMP%]{position:absolute;left:0;right:0;z-index:2;pointer-events:none;background:color-mix(in srgb,var(--%NS%morse-accent) 16%,transparent);border-left:2px solid color-mix(in srgb,var(--%NS%morse-accent) 70%,transparent)}.selection.merged[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_selection-merged .62s ease-out}@keyframes _ngcontent-%COMP%_selection-merged{0%{background:color-mix(in srgb,var(--%NS%morse-accent) 60%,transparent);box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--%NS%morse-accent) 80%,transparent)}to{background:color-mix(in srgb,var(--%NS%morse-accent) 16%,transparent);box-shadow:inset 0 0 0 0 transparent}}@property --%NS%morse-rainbow{syntax: "<angle>"; initial-value: 0deg; inherits: false;}.selection.merged[_ngcontent-%COMP%]:after{content:"";position:absolute;inset:0;border-radius:3px;padding:2px;background:conic-gradient(from var(--%NS%morse-rainbow),#f43f5e,#fb923c,#facc15,#4ade80,#38bdf8,#a78bfa,#f43f5e);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude;pointer-events:none;animation:_ngcontent-%COMP%_morse-rainbow-spin .7s linear}@keyframes _ngcontent-%COMP%_morse-rainbow-spin{0%{--%NS%morse-rainbow: 0deg}to{--%NS%morse-rainbow: 360deg}}.edge[_ngcontent-%COMP%]{position:absolute;left:0;right:0;height:6px;pointer-events:auto;cursor:ns-resize}.edge.top[_ngcontent-%COMP%]{top:-3px}.edge.bottom[_ngcontent-%COMP%]{bottom:-3px}.edge[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--%NS%morse-accent) 70%,transparent)}.hint[_ngcontent-%COMP%]{margin:0;padding:12px 16px;color:var(--%NS%morse-fg-muted);font-size:12px}.hint.error[_ngcontent-%COMP%]{color:var(--%NS%morse-warn)}']})};function JL(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(t<10*1024?1:0)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}var eF=(t,e)=>e.value;function tF(t,e){t&1&&(h(0,"p",1),u(1),g()),t&2&&(d(),k(e))}function nF(t,e){if(t&1){let n=$();h(0,"button",4),F("click",function(){let o=D(n).$implicit,r=m(3);return M(r.choose(o.value))}),u(1),g()}if(t&2){let n=e.$implicit;d(),ae(" ",n.label," ")}}function iF(t,e){if(t&1&&(w(0,tF,2,1,"p",1),h(1,"div",2),oe(2,nF,2,1,"button",3,eF),g()),t&2){let n,i=m(),o=m();S((n=o.messageOf(i))?0:-1,n),d(2),re(o.optionsOf(i))}}function oF(t,e){if(t&1){let n=$();h(0,"p"),u(1),g(),h(2,"div",2)(3,"button",5),F("click",function(){D(n);let o=m(2);return M(o.decide(!0))}),u(4,"Yes"),g(),h(5,"button",4),F("click",function(){D(n);let o=m(2);return M(o.decide(!1))}),u(6,"No"),g()()}if(t&2){let n=m(),i=m();d(),k(i.messageOf(n))}}function rF(t,e){if(t&1){let n=$();h(0,"input",6),F("input",function(o){D(n);let r=m(2);return M(r.onInput(o))}),g(),h(1,"div",2)(2,"button",5),F("click",function(){D(n);let o=m(2);return M(o.submit())}),u(3,"Submit"),g(),h(4,"button",4),F("click",function(){D(n);let o=m(2);return M(o.cancel())}),u(5,"Cancel"),g()()}if(t&2){let n=m(),i=m();ie("value",i.value()||i.prefillOf(n))("placeholder",i.placeholderOf(n))}}function sF(t,e){if(t&1){let n=$();h(0,"textarea",7),F("input",function(o){D(n);let r=m(2);return M(r.onInput(o))}),g(),h(1,"div",2)(2,"button",5),F("click",function(){D(n);let o=m(2);return M(o.submit())}),u(3,"Submit"),g(),h(4,"button",4),F("click",function(){D(n);let o=m(2);return M(o.cancel())}),u(5,"Cancel"),g()()}if(t&2){let n=m(),i=m();ie("value",i.value()||i.prefillOf(n))}}function aF(t,e){if(t&1&&(h(0,"section",0)(1,"header"),u(2),g(),w(3,iF,4,1)(4,oF,7,1)(5,rF,6,2)(6,sF,6,1),g()),t&2){let n,i=e;d(2),k(i.title),d(),S((n=i.kind)==="select"?3:n==="confirm"?4:n==="input"?5:n==="editor"?6:-1)}}var Cu=class t{morse=N(Ze);request=this.morse.pendingInteraction;value=O("");visible=E(()=>this.request()!==null&&this.morse.capabilities()?.nativeDialogs!==!0);onInput(e){this.value.set(e.target.value)}choose(e){this.respond({value:e})}decide(e){this.respond({confirmed:e})}submit(){this.respond({value:this.value()}),this.value.set("")}cancel(){this.respond({cancelled:!0}),this.value.set("")}messageOf(e){return e.kind==="select"||e.kind==="confirm"?e.message??"":""}optionsOf(e){return e.kind==="select"?e.options:[]}placeholderOf(e){return e.kind==="input"?e.placeholder??"":""}prefillOf(e){return e.kind==="editor"||e.kind==="input"?e.value??"":""}respond(e){let n=this.request();n&&this.morse.respond(V({requestId:n.requestId},e))}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-interaction-panel"]],decls:1,vars:1,consts:[["role","dialog","aria-live","polite",1,"dialog"],[1,"muted"],[1,"options"],["type","button",1,"secondary"],["type","button",1,"secondary",3,"click"],["type","button",3,"click"],["type","text",3,"input","value","placeholder"],["rows","5",3,"input","value"]],template:function(n,i){if(n&1&&w(0,aF,7,2,"section",0),n&2){let o;S((o=i.visible()&&i.request())?0:-1,o)}},styles:[".dialog[_ngcontent-%COMP%]{margin:8px;padding:8px 10px;border:1px solid var(--%NS%morse-focus);border-radius:4px;background:var(--%NS%morse-blockquote);display:flex;flex-direction:column;gap:8px}header[_ngcontent-%COMP%]{font-weight:600}p[_ngcontent-%COMP%]{margin:0;white-space:pre-wrap}.options[_ngcontent-%COMP%]{display:flex;gap:6px;flex-wrap:wrap}"]})};function ME(t){let e={name:"",path:"",kind:"dir",children:[]},n=new Map([["",e]]),i=o=>{let r=n.get(o);if(r!==void 0)return r;let s=o.lastIndexOf("/"),a=i(s===-1?"":o.slice(0,s)),c={name:o.slice(s+1),path:o,kind:"dir",children:[]};return a.children.push(c),n.set(o,c),c};for(let o of t){let r=o.endsWith("/"),s=r?o.slice(0,-1):o;if(s.length===0)continue;if(r){i(s);continue}let a=s.lastIndexOf("/"),c=i(a===-1?"":s.slice(0,a));c.children.some(l=>l.kind==="file"&&l.path===s)||c.children.push({name:s.slice(a+1),path:s,kind:"file",children:[]})}return kE(e.children),e.children}function kE(t){t.sort((e,n)=>e.kind!==n.kind?e.kind==="dir"?-1:1:e.name.localeCompare(n.name,void 0,{sensitivity:"base"}));for(let e of t)kE(e.children)}function Eu(t){let e=t.lastIndexOf("."),n=e<=0?"":t.slice(e+1).toLowerCase();return["ts","tsx","js","jsx","mjs","cjs","py","go","php","rb","rs","java"].includes(n)?"\u25C6":["md","txt","rst"].includes(n)?"\xB6":["json","yaml","yml","toml","ini"].includes(n)?"\u2699":["css","scss","less","html","xml","svg"].includes(n)?"\u25C8":["sh","bash","zsh"].includes(n)?"\u276F":"\xB7"}var cF=t=>({items:t,label:"Open tabs"}),lF=t=>({items:t,label:"Mentioned files"}),dF=(t,e)=>e.id;function uF(t,e){t&1&&ve(0,"span",6)}function pF(t,e){if(t&1&&(y(0,"span",7),u(1),b()),t&2){let n=m().$implicit,i=m(2);d(),k(i.glyph(n))}}function fF(t,e){if(t&1){let n=$();y(0,"div",5),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.select(o.id))})("keydown.enter",function(){let o=D(n).$implicit,r=m(2);return M(r.select(o.id))})("keydown.space",function(){let o=D(n).$implicit,r=m(2);return M(r.select(o.id))})("contextmenu",function(o){let r=D(n).$implicit,s=m(2);return M(s.openMenu(o,r.id))})("auxclick",function(o){let r=D(n).$implicit,s=m(2);return M(s.onAuxClick(r.id,o))}),w(1,uF,1,0,"span",6)(2,pF,2,1,"span",7),y(3,"span",8),u(4),b(),y(5,"button",9),A("click",function(o){let r=D(n).$implicit,s=m(2);return M(s.close(r.id,o))}),u(6," \xD7 "),b()()}if(t&2){let n=e.$implicit,i=m(2);X("active",n.id===i.activeId())("running",n.kind==="session"&&i.isRunning(n.id)),q("title",i.title(n)),J("aria-selected",n.id===i.activeId()),d(),S(n.kind==="session"&&i.isRunning(n.id)?1:2),d(3),k(n.title),d(),q("title","Close "+n.title)}}function mF(t,e){t&1&&(y(0,"span",4),u(1,"No open tabs"),b())}function hF(t,e){if(t&1&&(y(0,"div",2),oe(1,fF,7,9,"div",3,dF,!1,mF,2,0,"span",4),b()),t&2){let n=e.items,i=e.label;J("aria-label",i),d(),re(n)}}function gF(t,e){if(t&1&&ka(0,1),t&2){let n=m(),i=ed(1);q("ngTemplateOutlet",i)("ngTemplateOutletContext",nd(2,lF,n.mentionTabs()))}}function yF(t,e){if(t&1){let n=$();y(0,"div",10),A("click",function(){D(n);let o=m();return M(o.closeMenu())})("contextmenu",function(o){D(n);let r=m();return o.preventDefault(),M(r.closeMenu())}),b(),y(1,"div",11)(2,"button",12),A("click",function(){D(n);let o=m();return M(o.menuClose())}),u(3,"Close"),b(),y(4,"button",13),A("click",function(){D(n);let o=m();return M(o.menuCloseOthers())}),u(5," Close Others "),b(),y(6,"button",13),A("click",function(){D(n);let o=m();return M(o.menuCloseToTheRight())}),u(7," Close to the Right "),b(),y(8,"button",12),A("click",function(){D(n);let o=m();return M(o.menuCloseAll())}),u(9,"Close All"),b()()}if(t&2){let n=e,i=m();d(),At("left",n.x,"px")("top",n.y,"px"),d(3),q("disabled",!i.closableOthers()),d(2),q("disabled",!i.canCloseToTheRight(n.id))}}var wu=class t{tabs=N(dn);morse=N(Ze);items=this.tabs.tabs;activeId=this.tabs.activeId;mainTabs=this.tabs.mainTabs;mentionTabs=this.tabs.mentionTabs;menuState=O(void 0);menu=this.menuState.asReadonly();closableOthers=E(()=>this.items().length>1);glyph(e){return e.kind==="session"?"\u2726":Eu(e.title)}isRunning(e){let n=this.morse.sessionActivity().get(e);if(n!==void 0)return n.streaming;let i=this.morse.state();return i.sessionId===e&&i.streaming}title(e){return e.kind==="file"?e.path:e.title}select(e){this.tabs.select(e)}close(e,n){n.stopPropagation(),this.tabs.close(e)}onAuxClick(e,n){n.button===1&&(n.preventDefault(),this.tabs.close(e))}openMenu(e,n){e.preventDefault(),e.stopPropagation(),this.menuState.set({x:Math.max(0,Math.min(e.clientX,window.innerWidth-190)),y:Math.max(0,Math.min(e.clientY,window.innerHeight-150)),id:n})}closeMenu(){this.menuState.set(void 0)}onEscape(){this.closeMenu()}canCloseToTheRight(e){let n=this.items().findIndex(i=>i.id===e);return n!==-1&&n<this.items().length-1}withMenu(e){let n=this.menuState();this.closeMenu(),n!==void 0&&e(n.id)}menuClose(){this.withMenu(e=>this.tabs.close(e))}menuCloseOthers(){this.withMenu(e=>this.tabs.closeOthers(e))}menuCloseToTheRight(){this.withMenu(e=>this.tabs.closeToTheRight(e))}menuCloseAll(){this.closeMenu(),this.tabs.closeAll()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-tab-strip"]],hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},decls:5,vars:6,consts:[["row",""],[3,"ngTemplateOutlet","ngTemplateOutletContext"],["role","tablist",1,"strip"],["role","tab","tabindex","0",1,"tab",3,"active","running","title"],[1,"empty"],["role","tab","tabindex","0",1,"tab",3,"click","keydown.enter","keydown.space","contextmenu","auxclick","title"],["aria-hidden","true",1,"live"],["aria-hidden","true",1,"glyph"],[1,"label"],["type","button","aria-label","Close tab",1,"close",3,"click","title"],[1,"context-menu-layer",3,"click","contextmenu"],["role","menu",1,"context-menu"],["type","button",1,"context-menu-item",3,"click"],["type","button",1,"context-menu-item",3,"click","disabled"]],template:function(n,i){if(n&1&&(Jl(0,hF,4,2,"ng-template",null,0,Vm),ka(2,1),w(3,gF,1,4,"ng-container",1),w(4,yF,10,6)),n&2){let o,r=ed(1);d(2),q("ngTemplateOutlet",r)("ngTemplateOutletContext",nd(4,cF,i.mainTabs())),d(),S(i.mentionTabs().length>0?3:-1),d(),S((o=i.menu())?4:-1,o)}},dependencies:[Bm],styles:["[_nghost-%COMP%]{display:block;flex:none;min-height:30px;border-bottom:1px solid var(--%NS%morse-border);background:var(--%NS%morse-nav-bg)}.strip[_ngcontent-%COMP%]{display:flex;align-items:stretch;gap:0;height:30px;padding:0;overflow-x:auto;scrollbar-width:none}.strip[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}.strip[_ngcontent-%COMP%] + .strip[_ngcontent-%COMP%]{height:auto;min-height:30px;align-items:center;gap:6px;padding:4px 8px;border-top:1px solid var(--%NS%morse-border);background:var(--%NS%morse-panel, var(--%NS%morse-bg))}.strip[_ngcontent-%COMP%] + .strip[_ngcontent-%COMP%] .tab[_ngcontent-%COMP%]{height:22px;max-width:190px;padding:0 4px 0 8px;border:1px solid var(--%NS%morse-border);border-radius:999px;background:var(--%NS%morse-bubble, var(--%NS%morse-hover));font-size:11.5px}.strip[_ngcontent-%COMP%] + .strip[_ngcontent-%COMP%] .tab[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);border-color:var(--%NS%morse-accent);color:var(--%NS%morse-fg)}.strip[_ngcontent-%COMP%] + .strip[_ngcontent-%COMP%] .tab.active[_ngcontent-%COMP%]{border-color:var(--%NS%morse-accent);background:color-mix(in srgb,var(--%NS%morse-accent) 22%,transparent);color:var(--%NS%morse-fg);box-shadow:none}.strip[_ngcontent-%COMP%] + .strip[_ngcontent-%COMP%] .tab[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{width:15px;height:15px;font-size:11px;border-radius:999px}.tab[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;flex:none;max-width:170px;padding:0 8px 0 10px;margin:0;border:0;border-right:1px solid var(--%NS%morse-border);border-radius:0;background:none;color:var(--%NS%morse-fg-muted);font:inherit;font-size:12px;cursor:pointer}.tab[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.tab.active[_ngcontent-%COMP%]{background:var(--%NS%morse-panel, var(--%NS%morse-badge-bg));color:var(--%NS%morse-fg);box-shadow:inset 0 -2px 0 var(--%NS%morse-accent)}.tab[_ngcontent-%COMP%] .live[_ngcontent-%COMP%]{flex:none;width:9px;height:9px;border-radius:50%;border:1.5px solid color-mix(in srgb,var(--%NS%morse-accent) 30%,transparent);border-top-color:var(--%NS%morse-accent);animation:_ngcontent-%COMP%_tab-spin .8s linear infinite}@keyframes _ngcontent-%COMP%_tab-spin{to{transform:rotate(360deg)}}.glyph[_ngcontent-%COMP%]{flex:none;font-size:11px;color:var(--%NS%morse-fg-muted)}.tab.active[_ngcontent-%COMP%] .glyph[_ngcontent-%COMP%]{color:var(--%NS%morse-accent)}.label[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.close[_ngcontent-%COMP%]{flex:none;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:4px;background:none;color:var(--%NS%morse-fg-muted);font-size:13px;line-height:1;cursor:pointer;opacity:0}.tab[_ngcontent-%COMP%]:hover .close[_ngcontent-%COMP%], .tab.active[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{opacity:1}.close[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.empty[_ngcontent-%COMP%]{align-self:center;padding:0 10px;font-size:11.5px;color:var(--%NS%morse-fg-muted)}.context-menu-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:40}.context-menu[_ngcontent-%COMP%]{position:fixed;z-index:41;width:190px;max-width:min(280px,90vw);padding:4px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 8px 24px #00000059}.context-menu-item[_ngcontent-%COMP%]{display:block;width:100%;padding:5px 8px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg);font-size:12px;text-align:left;cursor:pointer}.context-menu-item[_ngcontent-%COMP%]:hover:not(:disabled), .context-menu-item[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--%NS%morse-hover)}.context-menu-item[_ngcontent-%COMP%]:disabled{color:var(--%NS%morse-fg-muted);cursor:default}.context-menu-item[_ngcontent-%COMP%]:disabled:hover{background:transparent}"]})};var OE=250,Su=class t{morse=N(Ze);items=O([]);meta=O(void 0);busy=O(!1);failure=O(void 0);generation=0;loading=this.busy.asReadonly();error=this.failure.asReadonly();isRepo=E(()=>this.meta()?.isRepo===!0);loaded=E(()=>this.meta()!==void 0);branch=E(()=>this.meta()?.branch);root=E(()=>this.meta()?.root);hasMore=E(()=>this.meta()?.hasMore===!0);commits=this.items.asReadonly();refresh(){if(!this.morse.workspace().cwd)return;let n=this.generation+=1;this.busy.set(!0),this.failure.set(void 0),this.page(0).then(i=>{if(n===this.generation){if(i===void 0){this.items.set([]),this.meta.set(void 0),this.failure.set("The host could not read git history for this project.");return}this.items.set(i.commits),this.meta.set(IE(i))}}).finally(()=>{n===this.generation&&this.busy.set(!1)})}loadMore(){if(this.busy()||!this.hasMore()||!this.isRepo())return;let e=this.generation,n=this.items().length;this.busy.set(!0),this.page(n).then(i=>{e!==this.generation||i===void 0||(this.items.update(o=>[...o,...i.commits]),this.meta.set(IE(i)))}).finally(()=>{e===this.generation&&this.busy.set(!1)})}async page(e){let n=await this.morse.requestHostCommand("gitLog",{max:OE,skip:e});return _F(n)}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function IE(t){return{isRepo:t.isRepo,root:t.root,branch:t.branch,hasMore:t.commits.length===OE}}function _F(t){if(typeof t!="object"||t===null)return;let e=t;if(e.isRepo!==!0)return typeof e.isRepo=="boolean"?{isRepo:!1,commits:[]}:void 0;let n=Array.isArray(e.commits)?e.commits.map(vF).filter(i=>i!==void 0):[];return{isRepo:!0,root:typeof e.root=="string"?e.root:void 0,branch:typeof e.branch=="string"?e.branch:void 0,commits:n}}function vF(t){if(typeof t!="object"||t===null)return;let e=t,n=e.hash,i=e.shortHash;if(!(typeof n!="string"||typeof i!="string"))return{hash:n,shortHash:i,parents:NE(e.parents),refs:NE(e.refs),author:typeof e.author=="string"?e.author:"",date:typeof e.date=="string"?e.date:"",subject:typeof e.subject=="string"?e.subject:""}}function NE(t){return Array.isArray(t)?t.filter(e=>typeof e=="string"):[]}function AE(t){let e=[],n=[],i=0;for(let o of t){let r=e.slice(),s=[];for(let l=0;l<e.length;l+=1)e[l]===o.hash&&s.push(l);let a=s.length>0?s[0]:PE(e);e[a]=void 0;for(let l=1;l<s.length;l+=1)e[s[l]]=void 0;let c=[];for(let l=0;l<r.length;l+=1)r[l]!==void 0&&e[l]===r[l]&&c.push({fromLane:l,fromY:0,toLane:l,toY:1,color:l});r[a]===o.hash&&c.push({fromLane:a,fromY:0,toLane:a,toY:.5,color:a});for(let l of s)l!==a&&c.push({fromLane:l,fromY:0,toLane:a,toY:.5,color:l});for(let l=0;l<o.parents.length;l+=1){let p=o.parents[l],f=bF(e,p,a);f===-1&&(f=l===0?a:PE(e)),e[f]=p,c.push({fromLane:a,fromY:.5,toLane:f,toY:1,color:f})}i=Math.max(i,e.length),n.push({lane:a,color:a,edges:c})}return{rows:n,laneCount:i}}function PE(t){let e=t.indexOf(void 0);return e===-1?t.length:e}function bF(t,e,n){for(let i=0;i<t.length;i+=1)if(i!==n&&t[i]===e)return i;return-1}var xF=(t,e)=>e.path,CF=(t,e)=>e.commit.hash;function EF(t,e){if(t&1&&(h(0,"span",10),u(1),g()),t&2){let n=e;ie("title",n),d(),k(n)}}function wF(t,e){if(t&1&&(h(0,"span",11),u(1),g()),t&2){let n=m();d(),ae("",n.commits().length," commits")}}function SF(t,e){t&1&&(st(),h(0,"svg",14),ce(1,"path",23)(2,"path",24)(3,"path",25)(4,"path",26),g())}function TF(t,e){t&1&&(st(),h(0,"svg",14),ce(1,"path",27)(2,"path",28)(3,"path",29)(4,"path",30),g())}function DF(t,e){if(t&1&&(h(0,"span",32),u(1),g()),t&2){let n=m(2);d(),k(n.changes().length)}}function MF(t,e){t&1&&(h(0,"div",34)(1,"span",36),st(),h(2,"svg",37),ce(3,"circle",38),g(),h(4,"svg",39),ce(5,"path",40),g()(),u(6," No uncommitted changes "),g())}function kF(t,e){if(t&1){let n=$();h(0,"li")(1,"button",41),F("click",function(){let o=D(n).$implicit,r=m(4);return M(r.openChange(o.path))}),h(2,"span"),u(3),g(),h(4,"span",42),u(5),g(),h(6,"span",43),u(7),g(),ce(8,"span",12),g()()}if(t&2){let n=e.$implicit,i=m(4);d(),ie("title",n.path),d(),Tn("badge "+n.kind),d(),k(n.kind),d(2),k(i.dirOf(n.path)),d(2),k(i.baseOf(n.path))}}function IF(t,e){if(t&1&&(h(0,"ul",35),oe(1,kF,9,6,"li",null,xF),g()),t&2){let n=m(3);d(),re(n.changes())}}function NF(t,e){if(t&1&&w(0,MF,7,0,"div",34)(1,IF,3,0,"ul",35),t&2){let n=m(2);S(n.changes().length===0?0:1)}}function OF(t,e){if(t&1){let n=$();h(0,"section",31)(1,"div",19)(2,"button",20),F("click",function(){D(n);let o=m();return M(o.toggleChanges())}),h(3,"span",21),u(4,"\u203A"),g(),h(5,"span",22),u(6,"Changes"),g(),w(7,DF,2,1,"span",32),g()(),w(8,NF,2,1),g(),h(9,"div",33),F("pointerdown",function(o){D(n);let r=m();return M(r.startResize(o))}),g()}if(t&2){let n=m();At("height",n.changesHeightPx(),"px"),d(2),J("aria-expanded",!n.changesCollapsed()),d(),X("open",!n.changesCollapsed()),d(4),S(n.changes().length>0?7:-1),d(),S(n.changesCollapsed()?-1:8),d(),X("gone",n.changesCollapsed()||n.historyCollapsed())}}function PF(t,e){t&1&&(h(0,"p",44),u(1,"Reading git history\u2026"),g())}function AF(t,e){t&1&&(h(0,"p",45),u(1),g()),t&2&&(d(),k(e))}function RF(t,e){t&1&&(h(0,"p",44),u(1,"This project is not a git repository."),g())}function LF(t,e){t&1&&(h(0,"div",34)(1,"span",47),st(),h(2,"svg",48),ce(3,"path",49)(4,"circle",50),g()(),u(5," No commits yet "),g())}function FF(t,e){if(t&1&&(st(),ce(0,"path")(1,"path",64)),t&2){let n=e.$implicit,i=m(4);At("stroke",i.color(n.color)),J("d",i.path(n)),d(),J("d",i.path(n))}}function VF(t,e){if(t&1&&(h(0,"span",66),u(1),g()),t&2){let n=e.$implicit,i=m(5);X("kind-head",i.refKind(n)==="head")("kind-local",i.refKind(n)==="local")("kind-tag",i.refKind(n)==="tag"),ie("title",i.refLabel(n)),d(),k(i.refLabel(n))}}function jF(t,e){if(t&1&&(h(0,"span",66),u(1),g()),t&2){let n=m(2).$implicit;ie("title",n.restTitle),d(),ae("+",n.moreRefs)}}function $F(t,e){if(t&1&&(h(0,"span",58),oe(1,VF,2,8,"span",65,Ei),w(3,jF,2,2,"span",66),g()),t&2){let n=m().$implicit;d(),re(n.refs),d(2),S(n.moreRefs>0?3:-1)}}function BF(t,e){if(t&1&&(h(0,"span",61),u(1,"\xB7"),g(),h(2,"span",67),u(3),g()),t&2){let n=m().$implicit;d(3),k(n.commit.author)}}function HF(t,e){if(t&1){let n=$();h(0,"li",54),st(),h(1,"svg",55),oe(2,FF,2,4,null,null,Ci),ce(4,"circle",56),g(),Jt(),h(5,"span",57),u(6),g(),w(7,$F,4,1,"span",58),ce(8,"span",12),h(9,"span",59)(10,"span",60),u(11),g(),h(12,"span",61),u(13,"\xB7"),g(),h(14,"span",62),u(15),g(),w(16,BF,4,1),g(),h(17,"button",63),F("click",function(){let o=D(n).$implicit,r=m(3);return M(r.copy(o.commit))}),u(18),g()()}if(t&2){let n=e.$implicit,i=m(3);X("expanded",i.expanded()),d(),J("width",i.graphWidth())("height",i.rowHeight)("viewBox","0 0 "+i.graphWidth()+" "+i.rowHeight),d(),re(n.row.edges),d(2),At("fill",i.rowColor(n.row)),J("cx",i.x(n.row.lane))("cy",i.rowHeight/2),d(2),k(n.commit.subject),d(),S(n.refs.length>0?7:-1),d(3),ie("title",n.commit.hash),d(),k(n.commit.shortHash),d(4),k(i.when(n.commit.date)),d(),S(i.expanded()?16:-1),d(),ie("title",i.copied()===n.commit.hash?"Copied":"Copy commit hash"),J("aria-label","Copy commit hash "+n.commit.shortHash),d(),ae(" ",i.copied()===n.commit.hash?"\u2713":"\u29C9"," ")}}function UF(t,e){if(t&1&&u(0),t&2){let n=m(3);ae(" ",n.loading()?"Loading older commits\u2026":"Scroll for older commits"," ")}}function zF(t,e){t&1&&u(0," Beginning of history ")}function GF(t,e){if(t&1){let n=$();h(0,"ul",51),F("scroll",function(o){D(n);let r=m(2);return M(r.onScroll(o))}),oe(1,HF,19,18,"li",52,CF),h(3,"li",53),w(4,UF,1,1)(5,zF,1,0),g()()}if(t&2){let n=m(2);d(),re(n.entries().rows),d(3),S(n.hasMore()?4:5)}}function qF(t,e){if(t&1&&w(0,PF,2,0,"p",44)(1,AF,2,1,"p",45)(2,RF,2,0,"p",44)(3,LF,6,0,"div",34)(4,GF,6,1,"ul",46),t&2){let n,i=m();S(i.loading()&&!i.loaded()?0:(n=i.error())?1:i.isRepo()?i.commits().length===0?3:4:2,n)}}var RE=["var(--morse-accent)","var(--morse-success)","var(--morse-number)","var(--morse-typename)","var(--morse-keyword)","var(--morse-info)","var(--morse-warn)"],tg=16,LE=32,WF=180,Tu=class t{expanded=te(!1);morse=N(Ze);shell=N(Ht);git=N(Su);workspace=N(zi);tabs=N(dn);commits=this.git.commits;branch=this.git.branch;root=this.git.root;isRepo=this.git.isRepo;loading=this.git.loading;loaded=this.git.loaded;hasMore=this.git.hasMore;error=this.git.error;changesCollapsed=this.shell.gitChangesCollapsed;historyCollapsed=this.shell.gitHistoryCollapsed;changesHeight=this.shell.gitChangesHeight;changes=E(()=>{let e=this.workspace.status();if(e===void 0||!e.isRepo)return[];let n=[];for(let i of e.files){let o=xh(i.status);o!==void 0&&n.push({path:i.path,kind:o})}return n.sort((i,o)=>i.path.localeCompare(o.path))});rowHeight=LE;copied=O(void 0);entries=E(()=>{let e=this.commits(),n=AE(e),i=this.expanded()?3:1;return{laneCount:n.laneCount,rows:n.rows.map((o,r)=>{let s=e[r],a=s.refs.slice(0,i),c=s.refs.slice(i);return{row:o,commit:s,refs:a,moreRefs:c.length,restTitle:c.map(l=>this.refLabel(l)).join(", ")}})}});graphWidth=E(()=>Math.max(1,this.entries().laneCount)*tg);constructor(){se(()=>{!this.shell.gitPanelOpen()||!this.morse.workspace().cwd||this.git.refresh()})}refresh(){this.git.refresh()}onScroll(e){let n=e.target;n.scrollHeight-n.scrollTop-n.clientHeight<600&&this.git.loadMore()}close(){this.shell.closeGitPanel()}openChange(e){this.tabs.openFile(e)}dirOf(e){let n=e.lastIndexOf("/");return n===-1?"":e.slice(0,n+1)}baseOf(e){let n=e.lastIndexOf("/");return n===-1?e:e.slice(n+1)}toggleExpanded(){this.shell.toggleGitPanelExpanded()}toggleChanges(){this.shell.toggleGitChanges()}toggleHistory(){this.shell.toggleGitHistory()}changesHeightPx(){return this.changesCollapsed()||this.historyCollapsed()?null:this.changesHeight()??null}startResize(e){e.preventDefault();let n=e.currentTarget,i=n.parentElement;if(!i)return;let o=i.getBoundingClientRect().top,r=i.getBoundingClientRect().bottom;n.setPointerCapture(e.pointerId);let s=0,a=0,c=()=>{s=0,this.shell.setGitChangesHeight(a,!1)},l=f=>{a=Math.min(r-o-80,f.clientY-o),s===0&&(s=requestAnimationFrame(c))},p=()=>{s!==0&&(cancelAnimationFrame(s),c()),this.shell.setGitChangesHeight(a),n.removeEventListener("pointermove",l),n.removeEventListener("pointerup",p),n.removeEventListener("pointercancel",p)};n.addEventListener("pointermove",l),n.addEventListener("pointerup",p),n.addEventListener("pointercancel",p)}startWidthResize(e){e.preventDefault(),this.shell.gitPanelExpanded()&&this.shell.toggleGitPanelExpanded();let n=e.currentTarget,i=n.parentElement,o=e.clientX,r=i?.getBoundingClientRect().width??340,s=n.closest(".shell"),a=s?.querySelector(".nav"),c=s?.getBoundingClientRect().width??window.innerWidth,l=this.shell.navigationCollapsed()?0:a?.getBoundingClientRect().width??240,p=Math.max(320,c-l-WF);n.setPointerCapture(e.pointerId),s?.style.setProperty("transition","none"),i?.classList.add("resizing");let f=0,_=this.shell.gitPanelWidth()??Math.round(r),x=()=>{f=0,this.shell.setGitPanelWidth(_,!1)},C=P=>{_=Math.min(p,r+(o-P.clientX)),f===0&&(f=requestAnimationFrame(x))},T=()=>{f!==0&&(cancelAnimationFrame(f),x()),s?.style.removeProperty("transition"),i?.classList.remove("resizing"),this.shell.setGitPanelWidth(_),n.removeEventListener("pointermove",C),n.removeEventListener("pointerup",T),n.removeEventListener("pointercancel",T)};n.addEventListener("pointermove",C),n.addEventListener("pointerup",T),n.addEventListener("pointercancel",T)}resetWidth(){this.shell.resetGitPanelWidth()}refLabel(e){if(e.startsWith("tag: "))return e.slice(5);let n=e.indexOf(" -> ");return n===-1?e:e.slice(n+4)}refKind(e){return e.startsWith("tag: ")?"tag":e.includes("HEAD")?"head":"local"}when(e){let n=Date.parse(e);if(!Number.isFinite(n))return"";let i=Math.max(0,Math.round((Date.now()-n)/1e3));if(i<60)return`${i}s`;let o=Math.round(i/60);if(o<60)return`${o}m`;let r=Math.round(o/60);return r<24?`${r}h`:`${Math.round(r/24)}d`}async copy(e){try{await navigator.clipboard.writeText(e.hash),this.copied.set(e.hash),setTimeout(()=>{this.copied()===e.hash&&this.copied.set(void 0)},1200)}catch{}}x(e){return e*tg+tg/2}y(e){return e*LE}color(e){return RE[e%RE.length]}path(e){let n=this.x(e.fromLane),i=this.y(e.fromY),o=this.x(e.toLane),r=this.y(e.toY);if(n===o)return`M ${n} ${i} L ${o} ${r}`;let s=(i+r)/2;return`M ${n} ${i} C ${n} ${s}, ${o} ${s}, ${o} ${r}`}rowColor(e){return this.color(e.color)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-git-panel"]],inputs:{expanded:[1,"expanded"]},decls:31,vars:19,consts:[["aria-label","Git history",1,"panel"],["role","separator","aria-orientation","vertical","aria-label","Resize the git panel","title","Drag to resize",1,"edge-resize",3,"pointerdown","dblclick"],[1,"head"],[1,"brand",3,"title"],["viewBox","0 0 16 16","aria-hidden","true"],["cx","4.5","cy","3.5","r","1.8"],["cx","4.5","cy","12.5","r","1.8"],["cx","11.5","cy","6.5","r","1.8"],["d","M4.5 5.3v5.4"],["d","M4.5 5.3c0 2.4 7 1 7 3"],[1,"branch",3,"title"],[1,"count"],[1,"grow"],["type","button",1,"icon",3,"click","title"],["viewBox","0 0 16 16","aria-hidden","true",1,"glyph"],["type","button","title","Refresh history","aria-label","Refresh history",1,"icon",3,"click","disabled"],["type","button","title","Hide the git panel","aria-label","Hide the git panel",1,"icon",3,"click"],[1,"body"],[1,"history"],[1,"section-head"],["type","button",1,"section-toggle",3,"click"],[1,"chevron"],[1,"section-title"],["d","M3.5 6.5h3v-3"],["d","M12.5 9.5h-3v3"],["d","M6.5 6.5 3 3"],["d","M9.5 9.5 13 13"],["d","M6.5 3.5h-3v3"],["d","M9.5 12.5h3v-3"],["d","M3.5 3.5 8 8"],["d","M12.5 12.5 8 8"],["aria-label","Uncommitted changes",1,"changes"],[1,"section-count"],["role","separator","aria-orientation","horizontal","aria-label","Resize the git sections","title","Drag to resize",1,"divider",3,"pointerdown"],[1,"empty"],[1,"change-list"],["aria-hidden","true",1,"mark"],["viewBox","0 0 24 24",1,"ring"],["cx","12","cy","12","r","10"],["viewBox","0 0 24 24",1,"check"],["d","M7.5 12.5 11 16l6-7"],["type","button",1,"change",3,"click","title"],[1,"change-dir"],[1,"change-name"],[1,"hint"],[1,"hint","error"],[1,"list"],["aria-hidden","true",1,"mark","node"],["viewBox","0 0 24 24"],["d","M12 3v18",1,"line"],["cx","12","cy","12","r","3.4",1,"dot"],[1,"list",3,"scroll"],[1,"commit",3,"expanded"],[1,"more"],[1,"commit"],["aria-hidden","true",1,"graph"],["r","3.4"],[1,"subject"],[1,"refs"],[1,"meta"],[1,"hash",3,"title"],["aria-hidden","true",1,"sep"],[1,"when"],["type","button",1,"copy",3,"click","title"],[1,"flow"],[1,"ref",3,"title","kind-head","kind-local","kind-tag"],[1,"ref",3,"title"],[1,"author"]],template:function(n,i){if(n&1&&(h(0,"aside",0)(1,"div",1),F("pointerdown",function(r){return i.startWidthResize(r)})("dblclick",function(){return i.resetWidth()}),g(),h(2,"header",2)(3,"span",3),st(),h(4,"svg",4),ce(5,"circle",5)(6,"circle",6)(7,"circle",7)(8,"path",8)(9,"path",9),g(),u(10," Git "),g(),w(11,EF,2,2,"span",10),w(12,wF,2,1,"span",11),Jt(),ce(13,"span",12),h(14,"button",13),F("click",function(){return i.toggleExpanded()}),w(15,SF,5,0,":svg:svg",14)(16,TF,5,0,":svg:svg",14),g(),h(17,"button",15),F("click",function(){return i.refresh()}),u(18," \u27F3 "),g(),h(19,"button",16),F("click",function(){return i.close()}),u(20," \u2715 "),g()(),h(21,"div",17),w(22,OF,10,9),h(23,"section",18)(24,"div",19)(25,"button",20),F("click",function(){return i.toggleHistory()}),h(26,"span",21),u(27,"\u203A"),g(),h(28,"span",22),u(29,"History"),g()()(),w(30,qF,5,1),g()()()),n&2){let o;X("full",i.expanded()),d(3),ie("title",i.root()??""),d(8),S((o=i.branch())?11:-1,o),d(),S(i.expanded()&&i.commits().length>0?12:-1),d(2),ie("title",i.expanded()?"Fit the git panel back into the sidebar":"Expand the git graph"),J("aria-label",i.expanded()?"Collapse the git panel":"Expand the git panel")("aria-pressed",i.expanded()),d(),S(i.expanded()?15:16),d(2),ie("disabled",i.loading()),d(4),X("changes-collapsed",i.changesCollapsed())("history-collapsed",i.historyCollapsed()),d(),S(i.isRepo()?22:-1),d(3),J("aria-expanded",!i.historyCollapsed()),d(),X("open",!i.historyCollapsed()),d(4),S(i.historyCollapsed()?-1:30)}},styles:['[_nghost-%COMP%]{position:relative;display:block;min-width:0;min-height:0;height:100%;overflow:hidden;border-left:1px solid var(--%NS%morse-border);background:var(--%NS%morse-nav-bg)}.edge-resize[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:0;width:6px;z-index:3;cursor:ew-resize}.edge-resize[_ngcontent-%COMP%]:hover, .edge-resize[_ngcontent-%COMP%]:active{background:color-mix(in srgb,var(--%NS%morse-accent) 45%,transparent)}.panel.resizing[_ngcontent-%COMP%] .body[_ngcontent-%COMP%]{pointer-events:none}.panel.resizing[_ngcontent-%COMP%] .graph[_ngcontent-%COMP%] path.flow[_ngcontent-%COMP%]{animation:none}.head[_ngcontent-%COMP%]{position:absolute;top:0;left:0;right:0;z-index:1;display:flex;align-items:center;gap:6px;min-height:var(--%NS%morse-head-height);padding:0 6px 0 10px;border-bottom:1px solid var(--%NS%morse-border);background:var(--%NS%morse-nav-bg)}.brand[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600}.brand[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}.branch[_ngcontent-%COMP%], .ref[_ngcontent-%COMP%]{flex:none;padding:0 6px;border-radius:4px;font-family:var(--%NS%morse-font-mono);font-size:10px;line-height:16px;background:color-mix(in srgb,var(--%NS%morse-fg-muted) 12%,transparent);color:var(--%NS%morse-fg-muted)}.branch[_ngcontent-%COMP%], .ref[_ngcontent-%COMP%]{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.commit.expanded[_ngcontent-%COMP%] .ref[_ngcontent-%COMP%]{max-width:240px}.branch[_ngcontent-%COMP%], .ref.kind-head[_ngcontent-%COMP%]{color:var(--%NS%morse-accent)}.ref.kind-local[_ngcontent-%COMP%]{color:var(--%NS%morse-success)}.ref.kind-tag[_ngcontent-%COMP%]{color:var(--%NS%morse-typename)}.grow[_ngcontent-%COMP%]{flex:1}.icon[_ngcontent-%COMP%]{flex:none;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid transparent;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:13px;line-height:1;cursor:pointer}.icon[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.icon[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}.count[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted);font-size:11px}.body[_ngcontent-%COMP%]{position:absolute;top:var(--%NS%morse-head-height);right:0;bottom:0;left:0;display:flex;flex-direction:column;min-height:0}.changes[_ngcontent-%COMP%]{flex:none;height:45%;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden}.body.changes-collapsed[_ngcontent-%COMP%] .changes[_ngcontent-%COMP%], .body.history-collapsed[_ngcontent-%COMP%] .changes[_ngcontent-%COMP%]{height:auto}.body.history-collapsed[_ngcontent-%COMP%] .changes[_ngcontent-%COMP%]{flex:1}.divider[_ngcontent-%COMP%]{flex:none;position:relative;height:5px;border-top:1px solid var(--%NS%morse-border);background:transparent;cursor:ns-resize}.divider[_ngcontent-%COMP%]:hover{border-top-color:var(--%NS%morse-accent);background:color-mix(in srgb,var(--%NS%morse-accent) 30%,transparent)}.divider[_ngcontent-%COMP%]:after{content:"";position:absolute;inset:-3px 0}.divider.gone[_ngcontent-%COMP%]{display:none}.history[_ngcontent-%COMP%]{flex:1;min-height:0;display:flex;flex-direction:column}.body.history-collapsed[_ngcontent-%COMP%] .history[_ngcontent-%COMP%]{flex:none}.section-head[_ngcontent-%COMP%]{display:flex;flex:none;align-items:center}.section-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:5px;flex:1;min-width:0;padding:5px 10px;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.section-toggle[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.chevron[_ngcontent-%COMP%]{flex:none;display:inline-block;color:var(--%NS%morse-fg-muted);font-size:11px;line-height:1;transition:transform .12s ease}.chevron.open[_ngcontent-%COMP%]{transform:rotate(90deg)}.section-title[_ngcontent-%COMP%]{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--%NS%morse-fg-muted)}.section-count[_ngcontent-%COMP%]{font-size:10.5px;color:var(--%NS%morse-fg-muted)}.change-list[_ngcontent-%COMP%]{margin:0;padding:0 0 6px;list-style:none}.change[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;width:100%;padding:2px 10px;border:0;background:none;color:var(--%NS%morse-fg);font:inherit;text-align:left;cursor:pointer}.change[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover)}.change-dir[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:11px}.change-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.empty[_ngcontent-%COMP%]{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:16px;color:var(--%NS%morse-fg-muted);font-size:11.5px;text-align:center}.mark[_ngcontent-%COMP%]{position:relative;display:inline-grid;place-items:center;width:38px;height:38px;animation:_ngcontent-%COMP%_mark-breathe 2.8s ease-in-out infinite}.mark[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{position:absolute;inset:0;width:100%;height:100%;fill:none;stroke-linecap:round;stroke-linejoin:round}.mark[_ngcontent-%COMP%] .ring[_ngcontent-%COMP%]{stroke:color-mix(in srgb,var(--%NS%morse-fg-muted) 40%,transparent);stroke-width:1.4}.mark[_ngcontent-%COMP%] .check[_ngcontent-%COMP%]{stroke:var(--%NS%morse-success);stroke-width:2;stroke-dasharray:20;stroke-dashoffset:20;animation:_ngcontent-%COMP%_check-draw .9s ease-out .12s forwards}.mark.node[_ngcontent-%COMP%] .line[_ngcontent-%COMP%]{stroke:color-mix(in srgb,var(--%NS%morse-fg-muted) 35%,transparent);stroke-width:1.4}.mark.node[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{stroke:var(--%NS%morse-accent);stroke-width:1.6;transform-box:fill-box;transform-origin:center;animation:_ngcontent-%COMP%_node-pulse 2.8s ease-in-out infinite}.mark[_ngcontent-%COMP%]:after{content:"";position:absolute;inset:-4px;border-radius:50%;border:1px solid color-mix(in srgb,var(--%NS%morse-success) 45%,transparent);animation:_ngcontent-%COMP%_mark-ping 2.8s ease-out infinite}.mark.node[_ngcontent-%COMP%]:after{border-color:color-mix(in srgb,var(--%NS%morse-accent) 45%,transparent)}@keyframes _ngcontent-%COMP%_mark-breathe{0%,to{transform:scale(.95)}50%{transform:scale(1.05)}}@keyframes _ngcontent-%COMP%_check-draw{to{stroke-dashoffset:0}}@keyframes _ngcontent-%COMP%_node-pulse{0%,to{transform:scale(.7);opacity:.6}50%{transform:scale(1.15);opacity:1}}@keyframes _ngcontent-%COMP%_mark-ping{0%{transform:scale(.85);opacity:.7}70%,to{transform:scale(1.35);opacity:0}}@media(prefers-reduced-motion:reduce){.mark[_ngcontent-%COMP%], .mark[_ngcontent-%COMP%]:after{animation:none}.mark[_ngcontent-%COMP%] .check[_ngcontent-%COMP%]{animation:none;stroke-dashoffset:0}.mark.node[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{animation:none}}.badge[_ngcontent-%COMP%]{flex:none;padding:0 4px;border-radius:4px;font-family:var(--%NS%morse-font-mono);font-size:9.5px;line-height:15px;color:var(--%NS%morse-fg-muted)}.badge.M[_ngcontent-%COMP%]{color:var(--%NS%morse-warn)}.badge.A[_ngcontent-%COMP%], .badge.U[_ngcontent-%COMP%]{color:var(--%NS%morse-success)}.badge.D[_ngcontent-%COMP%], .badge.C[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.badge.R[_ngcontent-%COMP%]{color:var(--%NS%morse-info)}.list[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;margin:0;padding:2px 0 10px;list-style:none}.hint[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;padding:12px;color:var(--%NS%morse-fg-muted);font-size:12px;line-height:1.5}.hint.error[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.more[_ngcontent-%COMP%]{padding:10px 12px;color:var(--%NS%morse-fg-muted);font-size:11px;text-align:center}.commit[_ngcontent-%COMP%]{display:flex;flex-wrap:nowrap;align-items:center;gap:10px;height:32px;padding-right:8px}.commit[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.graph[_ngcontent-%COMP%]{flex:none;display:block;overflow:visible}.graph[_ngcontent-%COMP%] path[_ngcontent-%COMP%]{fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.graph[_ngcontent-%COMP%] circle[_ngcontent-%COMP%]{stroke:var(--%NS%morse-nav-bg);stroke-width:1.6}.graph[_ngcontent-%COMP%] path.flow[_ngcontent-%COMP%]{stroke:var(--%NS%morse-fg);stroke-dasharray:5 15;stroke-linecap:round;opacity:.35;animation:_ngcontent-%COMP%_graph-flow 1.4s linear infinite}@keyframes _ngcontent-%COMP%_graph-flow{to{stroke-dashoffset:-20}}@media(prefers-reduced-motion:reduce){.graph[_ngcontent-%COMP%] path.flow[_ngcontent-%COMP%]{animation:none;opacity:0}}.subject[_ngcontent-%COMP%]{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;color:var(--%NS%morse-fg)}.refs[_ngcontent-%COMP%]{flex:0 1 auto;display:flex;align-items:center;gap:4px;min-width:0}.grow[_ngcontent-%COMP%]{flex:1;min-width:8px}.meta[_ngcontent-%COMP%]{flex:none;display:flex;align-items:center;gap:6px;color:var(--%NS%morse-fg-muted);font-size:11px;white-space:nowrap}.hash[_ngcontent-%COMP%]{font-family:var(--%NS%morse-font-mono)}.author[_ngcontent-%COMP%]{display:none;max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.commit.expanded[_ngcontent-%COMP%] .author[_ngcontent-%COMP%]{display:inline}.sep[_ngcontent-%COMP%]{opacity:.5}.copy[_ngcontent-%COMP%]{flex:none;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:11px;cursor:pointer;opacity:0}.commit[_ngcontent-%COMP%]:hover .copy[_ngcontent-%COMP%]{opacity:1}.copy[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-border);color:var(--%NS%morse-fg)}']})};var Ls=520,FE=70,Du=class t{animation=N(ln);async play(e,n){let i=this.resolveTarget();if(!this.animation.isEnabled||!n||!i||e.length===0||typeof document>"u")return;let o=Ls+(e.length-1)*FE;e.forEach((r,s)=>{this.launch(r,n,i,s*FE)}),await YF(o)}resolveTarget(){let e=document.querySelector("morse-chat-composer .box");if(!e)return;let n=e.getBoundingClientRect();return{x:n.left+26,y:n.top+18}}launch(e,n,i,o){let r=this.createGhost(e,n);document.body.appendChild(r);let s=Math.min(n.y,i.y)-Math.max(60,Math.abs(n.y-i.y)*.35);rn(r,{translateX:[n.x,i.x],translateY:[{to:n.y,duration:Ls*.18},{to:s,duration:Ls*.42},{to:i.y,duration:Ls*.4}],rotate:[0,-8,6,0],scale:[1,1.04,.86,.42],opacity:[1,1,.9,0],duration:Ls,delay:o,ease:"inOut(2)",onComplete:()=>r.remove()}),setTimeout(()=>r.remove(),o+Ls+400)}createGhost(e,n){let i=document.createElement("div");if(i.className="drop-ghost",e.thumbnail){let r=document.createElement("img");r.src=e.thumbnail,r.alt="",i.appendChild(r)}else{let r=document.createElement("span");r.className="drop-ghost-glyph",r.textContent="\u25A4",i.appendChild(r)}let o=document.createElement("span");return o.className="drop-ghost-name",o.textContent=e.name,i.appendChild(o),i}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function YF(t){return new Promise(e=>setTimeout(e,t))}var Mu=class t{attachments=N(Ui);flight=N(Du);uploads=N(Ds);depth=O(0);internalDrag=!1;constructor(){if(typeof document>"u")return;let e=()=>{this.internalDrag=!0},n=()=>{this.internalDrag=!1};document.addEventListener("dragstart",e,!0),document.addEventListener("dragend",n,!0),document.addEventListener("drop",n,!0)}active=E(()=>this.depth()>0);carriesFiles(e){if(this.internalDrag)return!1;let n=e.dataTransfer?.types;return n!==void 0&&n.length>0}onDragEnter(e){this.carriesFiles(e)&&(e.preventDefault(),this.depth.update(n=>n+1))}onDragOver(e){this.carriesFiles(e)&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="copy"))}onDragLeave(){this.depth.update(e=>Math.max(0,e-1))}async onDrop(e,n){if(this.depth.set(0),!this.carriesFiles(e))return;e.preventDefault();let i=e.dataTransfer;if(!i)return;let o=Array.from(i.files??[]),{images:r}=await this.attachments.read(o.filter(T=>T.type.startsWith("image/"))),s=QF(i),a=o.filter(T=>!T.type.startsWith("image/")),c=this.uploads.available()&&a.length>0?this.uploads.upload(a):Promise.resolve({added:[],failed:a.map(T=>T.name)}),l=[...s.paths.map(T=>VE(T,n)),...s.names,...a.map(T=>T.name)],p=e.clientX>0||e.clientY>0?{x:e.clientX,y:e.clientY}:KF();await this.flight.play([...r.map(T=>({name:T.name,thumbnail:`data:${T.mimeType};base64,${T.data}`})),...l.map(T=>({name:T}))],p);let f=await c,_=[...s.paths.map(T=>VE(T,n)),...s.names,...f.added.map(T=>T.path),...f.failed];this.attachments.add(r),this.attachments.addMentions(_);let x=[];if(r.length>0&&x.push(`${r.length} image${r.length===1?"":"s"} attached`),_.length>0&&x.push(`${_.length} file${_.length===1?"":"s"} added to the prompt`),x.length>0){this.attachments.say("info",x.join(" \xB7 "));return}let C=Array.from(i.types??[]).join(", ")||"none";this.attachments.say("warn",`That drop carried no file (types: ${C}).`)}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function KF(){let t=document.querySelector("main.chat");if(!t)return{x:0,y:0};let e=t.getBoundingClientRect();return{x:e.left+e.width/2,y:e.top+e.height*.35}}var ZF=["application/vnd.code.uri-list","ResourceURLs","text/uri-list"];function QF(t){let e=[];for(let o of[...ZF,"text/plain"])for(let r of XF(t.getData(o)))e.push(r);let n=[],i=[];for(let o of e){if(o.startsWith("file://")){let s=n3(o);s&&n.push(s);continue}if(/^[a-z]+:\/\//i.test(o))continue;if(t3(o)){n.push(o);continue}let r=e3(o);r&&i.push(r)}return{paths:Array.from(new Set(n)),names:Array.from(new Set(i))}}function XF(t){let e=t.trim();if(e.length===0)return[];if(e.startsWith("["))try{let n=JSON.parse(e);if(Array.isArray(n))return n.map(i=>{if(typeof i=="string")return i;let o=i,r=o.fsPath??o.uri??o.path;return typeof r=="string"?r:""}).filter(i=>i.length>0)}catch{}return JF(e)}function JF(t){return t.split(/\r?\n/).flatMap(e=>e.split(/(?<=\S)\s+(?=[/\\]|[A-Za-z]:[\\/])/)).map(e=>e.trim()).filter(e=>e.length>0&&!e.startsWith("#"))}function e3(t){let e=t.replace(/\s*\([^)]*\)\s*$/,"").trim();if(!(e.length===0||e.length>200)&&!(/\s/.test(e)||e.includes(":")))return/[^/\\]+\.[A-Za-z0-9]{1,8}$/.test(e)?e:void 0}function t3(t){return!!(t.startsWith("/")||/^[A-Za-z]:[\\/]/.test(t))}function n3(t){try{let e=new URL(t);return decodeURIComponent(e.pathname)}catch{return}}function VE(t,e){if(!e)return t;let n=e.endsWith("/")?e:`${e}/`;return t.startsWith(n)?t.slice(n.length):t}var i3="https://registry.npmjs.org/@supanadit/morse-web/latest";function o3(t){return`https://github.com/supanadit/morse/releases/tag/v${t}`}var r3=new He("morse.update.loader",{providedIn:"root",factory:()=>{let t=globalThis.fetch;if(t===void 0)return;let e=t.bind(globalThis);return async n=>(await e(n,{headers:{accept:"application/json"}})).json()}});function s3(t){let e=t;return typeof e?.version=="string"?e.version:void 0}function a3(t,e){let n=$E(t),i=$E(e);if(n===void 0||i===void 0)return!1;for(let o=0;o<n.numbers.length;o+=1)if(n.numbers[o]!==i.numbers[o])return n.numbers[o]>i.numbers[o];return n.prerelease===i.prerelease?!1:n.prerelease===void 0?!0:i.prerelease===void 0?!1:n.prerelease>i.prerelease}function c3(t,e){return t==="vscode"?`Update the Morse extension \u2014 VS Code does that on its own for a Marketplace install \u2014 or install the ${e} VSIX and reload the window.`:`Run npm install -g @supanadit/morse-web@${e}, then start the host again.`}function jE(){if(typeof location>"u")return;let t=new URL(location.href,"http://localhost/").searchParams.get("newer");return t!==null&&t.length>0?t:void 0}function $E(t){let e=/^(\d+)\.(\d+)\.(\d+)(?:-([\w.-]+))?(?:\+[\w.-]+)?$/.exec(t.trim());if(e!==null)return{numbers:[Number(e[1]),Number(e[2]),Number(e[3])],prerelease:e[4]}}var Fs=class t{morse=N(Ze);loader=N(r3);notice=O(void 0);started=!1;available=this.notice.asReadonly();constructor(){se(()=>{let e=this.morse.capabilities();this.started||jE()===void 0&&e?.updateCheck!==!0||(this.started=!0,this.check(this.morse.version(),e?.hostKind??"server"))})}async check(e,n,i=this.loader){try{let o=jE()??(i===void 0?void 0:s3(await i(i3)));if(o===void 0||!a3(o,e))return;this.notice.set({current:e,latest:o,hint:c3(n,o),url:o3(o)})}catch{}}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};var l3=(t,e)=>e.node.path;function d3(t,e){if(t&1){let n=$();h(0,"div",8),F("pointerdown",function(o){D(n);let r=m();return M(r.startResize(o))}),g()}}function u3(t,e){t&1&&(h(0,"p",9),u(1,"Loading files\u2026"),g())}function p3(t,e){t&1&&(h(0,"p",10),u(1),g()),t&2&&(d(),k(e))}function f3(t,e){t&1&&(h(0,"p",9),u(1,"No files found."),g())}function m3(t,e){if(t&1&&(h(0,"span",17),u(1),g()),t&2){let n=e,i=m(5);Tn("badge "+n),ie("title",i.badgeTitle(n)),d(),k(n)}}function h3(t,e){if(t&1&&w(0,m3,2,4,"span",16),t&2){let n,i=m().$implicit,o=m(3);S((n=o.changeOf(i.node.path))?0:-1,n)}}function g3(t,e){t&1&&ce(0,"span",15)}function y3(t,e){if(t&1){let n=$();h(0,"button",12),F("click",function(){let o=D(n).$implicit,r=m(3);return M(r.onRow(o.node))}),h(1,"span",13),u(2),g(),h(3,"span",14),u(4),g(),w(5,h3,1,1)(6,g3,1,0,"span",15),g()}if(t&2){let n=e.$implicit,i=m(3);At("padding-left",6+n.depth*12,"px"),X("dir",n.node.kind==="dir"),ie("title",n.node.path),d(2),k(i.glyph(n.node)),d(2),k(n.node.name),d(),S(n.node.kind==="file"?5:i.dirChanged(n.node.path)?6:-1)}}function _3(t,e){if(t&1&&oe(0,y3,7,8,"button",11,l3),t&2){let n=m(2);re(n.rows())}}function v3(t,e){if(t&1&&(h(0,"div",7),w(1,u3,2,0,"p",9)(2,p3,2,1,"p",10)(3,f3,2,0,"p",9)(4,_3,2,0),g()),t&2){let n,i=m();d(),S(i.isLoading()&&i.rows().length===0?1:(n=i.errorMessage())?2:i.rows().length===0?3:4,n)}}var b3=140,ku=class t{morse=N(Ze);tabs=N(dn);shell=N(Ht);workspace=N(zi);host=N(Bt);height=this.shell.explorerHeight;expanded=O(new Set);folded=O(!1);expandedFor="";tree=E(()=>ME(this.workspace.files()));rows=E(()=>x3(this.tree(),this.expanded()));fileCount=E(()=>BE(this.tree()));collapsed=this.folded.asReadonly();isLoading=this.workspace.busy;errorMessage=this.workspace.error;changes=E(()=>Ud(this.workspace.status()));changedDirs=E(()=>{let e=new Set;for(let n of this.changes().keys()){let i=n.split("/");for(let o=1;o<i.length;o+=1)e.add(i.slice(0,o).join("/"))}return e});constructor(){se(()=>{let e=this.morse.state().workspace.cwd;ii(()=>{e.length>0&&e!==this.expandedFor&&(this.expanded.set(new Set),this.expandedFor=e)})})}glyph(e){return e.kind==="dir"?this.expanded().has(e.path)?"\u25BE":"\u25B8":Eu(e.name)}isExpanded(e){return this.expanded().has(e)}changeOf(e){return this.changes().get(e)}badgeTitle(e){switch(e){case"M":return"Modified";case"A":return"Added";case"D":return"Deleted";case"R":return"Renamed";case"U":return"Untracked";case"C":return"Conflict"}}dirChanged(e){return this.changedDirs().has(e)}toggleFold(){this.folded.update(e=>!e)}refresh(){this.workspace.refresh()}onRow(e){if(e.kind==="dir"){this.expanded.update(n=>{let i=new Set(n);return i.has(e.path)?i.delete(e.path):i.add(e.path),i});return}this.tabs.openFile(e.path)}startResize(e){e.preventDefault();let n=this.host.nativeElement,i=n.getBoundingClientRect().bottom,o=n.parentElement?.getBoundingClientRect().top??0,r=Math.max(b3,i-o-120),s=e.currentTarget;s.setPointerCapture(e.pointerId);let a=l=>{this.shell.setExplorerHeight(Math.min(r,i-l.clientY))},c=()=>{s.removeEventListener("pointermove",a),s.removeEventListener("pointerup",c),s.removeEventListener("pointercancel",c)};s.addEventListener("pointermove",a),s.addEventListener("pointerup",c),s.addEventListener("pointercancel",c)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-file-explorer"]],hostVars:4,hostBindings:function(n,i){n&2&&(At("height",i.collapsed()?null:i.height(),"px"),X("sized",i.height()!==void 0&&!i.collapsed()))},decls:12,vars:6,consts:[[1,"pane-head"],["role","separator","aria-orientation","horizontal","aria-label","Resize the file explorer","title","Drag to resize",1,"resize"],["type","button",1,"pane-toggle",3,"click"],[1,"chevron"],[1,"pane-title"],[1,"pane-count"],["type","button","title","Refresh files","aria-label","Refresh files",1,"icon",3,"click"],[1,"rows"],["role","separator","aria-orientation","horizontal","aria-label","Resize the file explorer","title","Drag to resize",1,"resize",3,"pointerdown"],[1,"hint"],[1,"hint","error"],["type","button",1,"row",3,"dir","paddingLeft","title"],["type","button",1,"row",3,"click","title"],["aria-hidden","true",1,"glyph"],[1,"name"],["title","Contains changes","aria-hidden","true",1,"dot"],[3,"class","title"],[3,"title"]],template:function(n,i){n&1&&(h(0,"div",0),w(1,d3,1,0,"div",1),h(2,"button",2),F("click",function(){return i.toggleFold()}),h(3,"span",3),u(4,"\u203A"),g(),h(5,"span",4),u(6,"Explorer"),g(),h(7,"span",5),u(8),g()(),h(9,"button",6),F("click",function(){return i.refresh()}),u(10," \u27F3 "),g()(),w(11,v3,5,1,"div",7)),n&2&&(d(),S(i.collapsed()?-1:1),d(),J("aria-expanded",!i.collapsed()),d(),X("open",!i.collapsed()),d(5),k(i.fileCount()),d(3),S(i.collapsed()?-1:11))},styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;flex:none;position:relative;min-height:0;max-height:42vh;border-top:1px solid var(--%NS%morse-border)}.sized[_nghost-%COMP%]{max-height:none}.resize[_ngcontent-%COMP%]{position:absolute;top:-3px;left:0;right:0;height:7px;z-index:2;cursor:ns-resize}.resize[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--%NS%morse-accent) 60%,transparent)}.pane-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;flex:none;padding:8px 10px 6px}.pane-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:5px;flex:1;min-width:0;padding:0;border:0;background:none;color:inherit;cursor:pointer}.pane-toggle[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover);border-radius:var(--%NS%morse-radius-sm)}.pane-title[_ngcontent-%COMP%]{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--%NS%morse-fg-muted)}.pane-count[_ngcontent-%COMP%]{font-size:10.5px;color:var(--%NS%morse-fg-muted)}.chevron[_ngcontent-%COMP%]{flex:none;display:inline-block;color:var(--%NS%morse-fg-muted);transition:transform .12s ease}.chevron.open[_ngcontent-%COMP%]{transform:rotate(90deg)}.icon[_ngcontent-%COMP%]{flex:none;width:22px;height:22px;padding:0;border:0;border-radius:6px;background:none;color:var(--%NS%morse-fg-muted);cursor:pointer}.icon[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.rows[_ngcontent-%COMP%]{flex:1;min-height:0;overflow:auto;padding:0 6px 8px}.row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;width:100%;padding:2px 6px;border:0;border-radius:6px;background:none;color:var(--%NS%morse-fg);font:inherit;text-align:left;cursor:pointer}.row[_ngcontent-%COMP%]:hover:not(:disabled), .row[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--%NS%morse-hover)}.glyph[_ngcontent-%COMP%]{flex:none;width:13px;text-align:center;color:var(--%NS%morse-fg-muted);font-size:11px}.name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.row.dir[_ngcontent-%COMP%] .name[_ngcontent-%COMP%]{font-weight:600}.badge[_ngcontent-%COMP%]{flex:none;padding:0 4px;border-radius:4px;font-family:var(--%NS%morse-font-mono);font-size:9.5px;line-height:15px;color:var(--%NS%morse-fg-muted)}.badge.M[_ngcontent-%COMP%]{color:var(--%NS%morse-warn)}.badge.A[_ngcontent-%COMP%], .badge.U[_ngcontent-%COMP%]{color:var(--%NS%morse-success)}.badge.D[_ngcontent-%COMP%], .badge.C[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.badge.R[_ngcontent-%COMP%]{color:var(--%NS%morse-info)}.dot[_ngcontent-%COMP%]{flex:none;width:6px;height:6px;border-radius:50%;background:var(--%NS%morse-warn)}.hint[_ngcontent-%COMP%]{padding:4px 12px 10px;font-size:11.5px;color:var(--%NS%morse-fg-muted)}.hint.error[_ngcontent-%COMP%]{color:var(--%NS%morse-warn)}"]})};function x3(t,e){let n=[],i=(o,r)=>{for(let s of o)n.push({node:s,depth:r}),s.kind==="dir"&&e.has(s.path)&&i(s.children,r+1)};return i(t,0),n}function BE(t){let e=0;for(let n of t)e+=n.kind==="file"?1:BE(n.children);return e}var C3=["search"],E3=["list"],w3=(t,e)=>e.path||"all";function S3(t,e){if(t&1&&(h(0,"span",17),u(1),g()),t&2){let n=m().$implicit;d(),k(n.path)}}function T3(t,e){t&1&&(h(0,"span",19),u(1,"\u2713"),g())}function D3(t,e){if(t&1){let n=$();h(0,"button",15),F("mouseenter",function(){let o=D(n).$index,r=m();return M(r.active.set(o))})("click",function(){let o=D(n).$implicit,r=m();return M(r.pick(o))}),h(1,"span",16),u(2),g(),w(3,S3,2,1,"span",17),h(4,"span",18),u(5),g(),w(6,T3,2,0,"span",19),g()}if(t&2){let n=e.$implicit,i=m();X("all",n.all)("active",n.path===i.rows()[i.active()].path)("selected",n.path===i.selected()),ie("title",n.path||"Every project pi knows about"),J("aria-selected",n.path===i.selected()),d(2),k(n.name),d(),S(n.all?-1:3),d(2),k(n.sessionCount),d(),S(n.path===i.selected()?6:-1)}}var M3="All projects";function k3(t,e,n){let i={path:"",name:M3,sessionCount:n,all:!0},o=e.trim().toLowerCase(),r=t.filter(s=>o.length===0||`${s.name} ${s.path}`.toLowerCase().includes(o)).map(s=>K(V({},s),{all:!1}));return[i,...r]}var Iu=class t{projects=te.required();selected=te("");totalSessions=te(0);select=it();close=it();search=Xe("search");list=Xe("list");query=O("");active=O(0);rows=E(()=>k3(this.projects(),this.query(),this.totalSessions()));constructor(){no(()=>this.search()?.nativeElement.focus()),se(()=>{if(this.query().trim().length>0)return;let e=this.rows().findIndex(n=>n.path===this.selected());e>=0&&this.active.set(e)}),se(()=>{this.active(),this.rows(),setTimeout(()=>this.revealActive(),0)})}revealActive(){let e=this.list()?.nativeElement,n=e?.querySelectorAll(".row")[this.active()];if(!e||!n)return;let i=e.getBoundingClientRect(),o=n.getBoundingClientRect();o.top<i.top?e.scrollTop-=i.top-o.top:o.bottom>i.bottom&&(e.scrollTop+=o.bottom-i.bottom)}onQuery(e){this.query.set(e.target.value),this.active.set(0)}pick(e){this.select.emit(e.path)}onKeydown(e){let n=this.rows();switch(e.key){case"Escape":e.preventDefault(),this.close.emit();return;case"ArrowDown":e.preventDefault(),this.active.update(i=>Math.min(i+1,Math.max(0,n.length-1)));return;case"ArrowUp":e.preventDefault(),this.active.update(i=>Math.max(0,i-1));return;case"Enter":{let i=n[this.active()];i&&(e.preventDefault(),this.pick(i));return}default:return}}onEscape(){this.close.emit()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-project-filter"]],viewQuery:function(n,i){n&1&>(i.search,C3,5)(i.list,E3,5),n&2&&vt(2)},hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},inputs:{projects:[1,"projects"],selected:[1,"selected"],totalSessions:[1,"totalSessions"]},outputs:{select:"select",close:"close"},decls:18,vars:1,consts:[["search",""],["list",""],[1,"modal-layer",3,"click"],["role","dialog","aria-modal","true","aria-labelledby","project-filter-title",1,"modal-card",3,"click"],[1,"modal-head"],["id","project-filter-title"],["type","button","aria-label","Close",1,"close",3,"click"],[1,"search"],["aria-hidden","true",1,"search-icon"],["viewBox","0 0 16 16"],["cx","7","cy","7","r","4.2"],["d","M10.2 10.2 14 14"],["type","text","placeholder","Search projects","aria-label","Search projects",3,"input","keydown","value"],["role","listbox",1,"list"],["type","button","role","option",1,"row",3,"all","active","selected","title"],["type","button","role","option",1,"row",3,"mouseenter","click","title"],[1,"name"],[1,"path"],[1,"count"],["aria-hidden","true",1,"check"]],template:function(n,i){n&1&&(h(0,"div",2),F("click",function(){return i.close.emit()}),h(1,"div",3),F("click",function(r){return r.stopPropagation()}),h(2,"div",4)(3,"strong",5),u(4,"Filter by project"),g(),h(5,"button",6),F("click",function(){return i.close.emit()}),u(6,"\xD7"),g()(),h(7,"div",7)(8,"span",8),st(),h(9,"svg",9),ce(10,"circle",10)(11,"path",11),g()(),Jt(),h(12,"input",12,0),F("input",function(r){return i.onQuery(r)})("keydown",function(r){return i.onKeydown(r)}),g()(),h(14,"div",13,1),oe(16,D3,7,12,"button",14,w3),g()()()),n&2&&(d(12),ie("value",i.query()),d(4),re(i.rows()))},styles:["[_nghost-%COMP%]{display:contents}.modal-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:65;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.modal-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:min(520px,100%);max-height:min(640px,90vh);border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 18px 48px #0006;overflow:hidden}.modal-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--%NS%morse-border)}.modal-head[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{flex:1;min-width:0;font-size:13px}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{padding:2px 8px;border:0;background:transparent;color:var(--%NS%morse-fg-muted);font-size:16px;line-height:1;cursor:pointer}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]:hover{color:var(--%NS%morse-fg)}.search[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;padding:10px 14px;border-bottom:1px solid var(--%NS%morse-border)}.search-icon[_ngcontent-%COMP%]{position:absolute;left:23px;display:inline-flex;color:var(--%NS%morse-fg-muted);pointer-events:none}.search-icon[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round}.search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1;min-width:0;padding-left:30px;font-size:12.5px}.list[_ngcontent-%COMP%]{flex:1;min-height:120px;overflow-y:auto;padding:4px 6px}.row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg);font:inherit;font-size:12.5px;text-align:left;cursor:pointer}.row.active[_ngcontent-%COMP%], .row[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.row.selected[_ngcontent-%COMP%]{background:var(--%NS%morse-active)}.row.all[_ngcontent-%COMP%]{margin-bottom:4px;border-bottom:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm) var(--%NS%morse-radius-sm) 0 0}.name[_ngcontent-%COMP%]{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.path[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:11px}.count[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-fg-muted);font-size:11px}.check[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-accent);font-size:12px}.empty[_ngcontent-%COMP%]{padding:12px 8px;color:var(--%NS%morse-fg-muted);font-size:12px}"]})};var I3=["search"],UE=(t,e)=>e.path,zE=(t,e)=>e.id;function N3(t,e){if(t&1){let n=$();y(0,"button",15),A("click",function(){D(n);let o=m();return M(o.openFilter())}),y(1,"span",16),u(2,"\u25A4"),b(),y(3,"span",17),u(4),b()()}if(t&2){let n=m();X("filtered",n.selectedProject()!==void 0),q("title",n.selectedProject()?.path??"Every project pi knows about"),J("aria-expanded",n.filterOpen()),d(4),k(n.selectedProject()?.name??"All projects")}}function O3(t,e){if(t&1){let n=$();y(0,"morse-project-filter",18),A("select",function(o){D(n);let r=m();return M(r.onProjectSelect(o))})("close",function(){D(n);let o=m();return M(o.closeFilter())}),b()}if(t&2){let n=m();q("projects",n.projectOptions())("selected",n.projectFilter())("totalSessions",n.totalSessions())}}function P3(t,e){if(t&1){let n=$();y(0,"li")(1,"button",22),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.activate(o))})("contextmenu",function(o){let r=D(n).$implicit,s=m(2);return M(s.openMenu(o,r))}),ve(2,"span",23),y(3,"span",24)(4,"span",25),u(5),b(),y(6,"span",26),u(7),b()()()()}if(t&2){let n=e.$implicit,i=m(2);d(),X("active",n.id===i.activeSessionId()),q("title",n.id),d(4),k(n.title),d(2),k(i.activityLabel(n))}}function A3(t,e){if(t&1&&(y(0,"section",9)(1,"div",19)(2,"span",20),u(3,"In progress"),b(),y(4,"span",21),u(5),b()(),y(6,"ul"),oe(7,P3,8,5,"li",null,zE),b()()),t&2){let n=m();d(5),k(n.inProgress().length),d(2),re(n.inProgress())}}function R3(t,e){if(t&1&&(y(0,"span",33),u(1,"\u203A"),b()),t&2){let n=m(2).$implicit,i=m();X("open",!i.isCollapsed(n.path))}}function L3(t,e){if(t&1){let n=$();y(0,"div",27)(1,"button",28),A("click",function(){D(n);let o=m().$implicit,r=m();return M(r.toggleGroup(o.path))}),y(2,"span",29),u(3),b(),y(4,"span",30),u(5),b(),w(6,R3,2,2,"span",31),b(),y(7,"button",32),A("click",function(o){D(n);let r=m().$implicit,s=m();return M(s.newSession(o,r.path))}),u(8," + "),b()()}if(t&2){let n=m().$implicit,i=m();d(),q("title",n.path),J("aria-expanded",!i.isCollapsed(n.path)),d(2),k(n.name),d(2),k(n.sessions.length),d(),S(i.projectFilter()!==n.path?6:-1),d(),J("aria-label","New session in "+n.name)}}function F3(t,e){if(t&1&&(y(0,"div",19)(1,"span",20),u(2,"Sessions"),b(),y(3,"span",21),u(4),b()()),t&2){let n=m().$implicit;d(4),k(n.sessions.length)}}function V3(t,e){if(t&1){let n=$();y(0,"li")(1,"button",34),A("click",function(){let o=D(n).$implicit,r=m(3);return M(r.activate(o))})("contextmenu",function(o){let r=D(n).$implicit,s=m(3);return M(s.openMenu(o,r))}),y(2,"span",24)(3,"span",25),u(4),b()(),y(5,"span",35),u(6),b()()()}if(t&2){let n=e.$implicit,i=m(3);d(),X("active",n.id===i.activeSessionId()),q("title",n.id),d(3),k(n.title),d(2),k(i.age(n.updatedAt))}}function j3(t,e){if(t&1&&u(0),t&2){let n=m(5);ae(" No session matches \u201C",n.query(),"\u201D. ")}}function $3(t,e){t&1&&u(0," No sessions yet. ")}function B3(t,e){if(t&1&&(y(0,"li",36),w(1,j3,1,1)(2,$3,1,0),b()),t&2){let n=m(4);d(),S(n.query().length>0?1:2)}}function H3(t,e){if(t&1&&w(0,B3,3,1,"li",36),t&2){let n=m(2).$implicit;S(n.hiddenRunning===0?0:-1)}}function U3(t,e){if(t&1&&(y(0,"ul"),oe(1,V3,7,5,"li",null,zE,!1,H3,1,1),b()),t&2){let n=m().$implicit;d(),re(n.sessions)}}function z3(t,e){if(t&1&&(y(0,"section",9),w(1,L3,9,6,"div",27)(2,F3,5,1,"div",19),w(3,U3,4,1,"ul"),b()),t&2){let n=e.$implicit,i=m();d(),S(i.scope()==="global"?1:n.sessions.length>0?2:-1),d(2),S(i.scope()==="workspace"||!i.isCollapsed(n.path)?3:-1)}}function G3(t,e){t&1&&u(0," Looking for a project? ")}function q3(t,e){if(t&1&&(u(0),w(1,G3,1,0)),t&2){let n=m(2);ae(" No session matches \u201C",n.query(),"\u201D. "),d(),S(n.projectMatches().length>0?1:-1)}}function W3(t,e){t&1&&u(0," Nothing found. ")}function Y3(t,e){if(t&1){let n=$();y(0,"button",38),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.filterToProject(o))}),u(1),b()}if(t&2){let n=e.$implicit;d(),wo(" Show all ",n.sessionCount," sessions in ",n.name," ")}}function K3(t,e){if(t&1&&(y(0,"p",36),w(1,q3,2,2)(2,W3,1,0),b(),oe(3,Y3,2,2,"button",37,UE)),t&2){let n=m();d(),S(n.query().length>0?1:2),d(2),re(n.projectMatches())}}function Z3(t,e){t&1&&ve(0,"morse-file-explorer")}function Q3(t,e){if(t&1&&(y(0,"a",11)(1,"span",39),u(2,"\u2191"),b(),y(3,"span"),u(4,"Update available"),b(),y(5,"span",13),u(6),b()()),t&2){let n=e;q("href",n.url,xi)("title",n.hint+" You are on v"+n.current+"."),d(6),ae("v",n.latest)}}function X3(t,e){t&1&&(y(0,"span",13),u(1),b()),t&2&&(d(),ae("v",e))}function J3(t,e){if(t&1){let n=$();y(0,"p",42),u(1,"Delete this session?"),b(),y(2,"p",43),u(3),b(),y(4,"button",44),A("click",function(){D(n);let o=m(2);return M(o.closeMenu())}),u(5,"Cancel"),b(),y(6,"button",45),A("click",function(){D(n);let o=m(),r=m();return M(r.deleteNow(o.session))}),u(7," Delete "),b()}if(t&2){let n=m();d(3),k(n.session.title)}}function eV(t,e){if(t&1){let n=$();y(0,"button",44),A("click",function(){D(n);let o=m(),r=m();return M(r.closeNow(o.session))}),u(1," Close session "),b(),y(2,"button",45),A("click",function(){D(n);let o=m(),r=m();return M(r.askDelete(o))}),u(3," Delete session\u2026 "),b()}}function tV(t,e){if(t&1){let n=$();y(0,"div",40),A("click",function(){D(n);let o=m();return M(o.closeMenu())})("contextmenu",function(o){D(n);let r=m();return o.preventDefault(),M(r.closeMenu())}),b(),y(1,"div",41),w(2,J3,8,1)(3,eV,4,0),b()}if(t&2){let n=e;d(),At("left",n.x,"px")("top",n.y,"px"),d(),S(n.confirming?2:3)}}var Nu=class t{morse=N(Ze);shell=N(Ht);shortcuts=N(An);update=N(Fs);tabs=N(dn);destroyRef=N(pt);searchInput=Xe("search");query=O("");collapsed=O({});menu=O(void 0);projectFilter=O("");filterOpen=this.shell.projectFilterOpen;nativeDialogs=E(()=>this.morse.capabilities()?.nativeDialogs===!0);activeSessionId=E(()=>this.morse.state().sessionId);version=this.morse.version;updateNotice=this.update.available;sessionActivity=this.morse.sessionActivity;scope=E(()=>this.morse.capabilities()?.scope??"global");filePreview=E(()=>this.morse.capabilities()?.filePreview===!0);directoryPicker=E(()=>this.morse.capabilities()?.directoryPicker===!0);isRunning(e){let n=this.sessionActivity().get(e.id);return n!==void 0?n.streaming:e.id===this.activeSessionId()&&this.morse.state().streaming}activityLabel(e){return e.id===this.activeSessionId()?this.activeStep()??"Working\u2026":"Working\u2026"}activeStep=E(()=>{let n=this.morse.items().at(-1);return n===void 0?void 0:nV(n)});inProgress=E(()=>{let e=this.projectFilter();return this.morse.sessions().filter(n=>(e.length===0||n.cwd===e)&&this.isRunning(n)).sort((n,i)=>i.updatedAt-n.updatedAt)});groups=E(()=>{let e=this.morse.sessions();if(this.scope()==="workspace"){let n=this.morse.workspace(),i=this.morse.projects()[0];return[{path:i?.path??n.cwd,name:n.name||i?.name||"workspace",sessions:e,hiddenRunning:0}]}return this.morse.projects().map(n=>({path:n.path,name:n.name,sessions:e.filter(i=>i.cwd===n.path),hiddenRunning:0}))});visibleGroups=E(()=>{let e=this.query().trim().toLowerCase(),n=this.projectFilter(),i=new Set(this.inProgress().map(r=>r.id));return(n.length===0?this.groups():this.groups().filter(r=>r.path===n)).map(r=>{let s=e.length===0?r.sessions:r.sessions.filter(c=>c.title.toLowerCase().includes(e)),a=s.filter(c=>!i.has(c.id));return K(V({},r),{sessions:a,hiddenRunning:s.length-a.length})}).filter(r=>n.length>0||e.length===0||r.sessions.length>0)});filterable=E(()=>this.scope()==="global");projectOptions=E(()=>this.groups().map(e=>({path:e.path,name:e.name,sessionCount:e.sessions.length})));selectedProject=E(()=>this.projectOptions().find(e=>e.path===this.projectFilter()));totalSessions=E(()=>this.morse.sessions().length);projectMatches=E(()=>{let e=this.query().trim().toLowerCase();return e.length===0||this.projectFilter().length>0?[]:this.projectOptions().filter(n=>`${n.name} ${n.path}`.toLowerCase().includes(e))});constructor(){let e=[this.shortcuts.bind("session.new",()=>this.startSession()),this.shortcuts.bind("session.search",()=>this.focusSearch()),this.shortcuts.bind("project.filter",()=>this.openFilterFromKeyboard(),()=>this.filterable())];this.destroyRef.onDestroy(()=>{for(let n of e)n()})}isCollapsed(e){return this.projectFilter()===e?!1:this.collapsed()[e]===!0}toggleGroup(e){this.projectFilter()!==e&&this.collapsed.update(n=>K(V({},n),{[e]:n[e]!==!0}))}activate(e){this.tabs.focusSession({id:e.id,title:e.title,cwd:e.cwd}),this.shell.closeNavigation()}openMenu(e,n){e.preventDefault(),e.stopPropagation(),this.menu.set({x:Math.max(0,Math.min(e.clientX,window.innerWidth-200)),y:Math.max(0,Math.min(e.clientY,window.innerHeight-104)),session:n,confirming:!1})}closeMenu(){this.menu.set(void 0)}closeNow(e){this.closeMenu(),this.tabs.forget(e.id),this.morse.closeSession(e.id)}askDelete(e){if(this.nativeDialogs()){this.confirmOnHost(e);return}this.menu.set(K(V({},e),{confirming:!0}))}async confirmOnHost(e){let n=await this.morse.requestHostCommand("confirmDeleteSession",{sessionId:e.session.id,title:e.session.title});if(n===void 0){this.menu.set(K(V({},e),{confirming:!0}));return}this.closeMenu(),n.confirmed===!0&&this.morse.deleteSession(e.session.id)}deleteNow(e){this.closeMenu(),this.tabs.forget(e.id),this.morse.deleteSession(e.id)}onEscape(){if(this.filterOpen()){this.closeFilter();return}this.menu()!==void 0&&this.closeMenu()}openFilter(){this.shell.openProjectFilter()}closeFilter(){this.shell.closeProjectFilter()}onProjectSelect(e){this.projectFilter.set(e),this.closeFilter()}filterToProject(e){this.projectFilter.set(e.path),this.query.set(""),this.closeFilter()}openAbout(){this.shell.openAbout()}openShortcuts(){this.shell.openShortcuts()}newSession(e,n){e.stopPropagation(),this.startSession(n)}startSession(e){if(e===void 0&&this.directoryPicker()){this.shell.openProjectPicker(),this.shell.closeNavigation();return}this.tabs.startDraft(e??this.morse.workspace().cwd),this.shell.closeNavigation()}revealNavigation(){this.shell.unfoldNavigation();let e=this.searchInput()?.nativeElement.getBoundingClientRect();(e===void 0||e.width===0||e.right<=0)&&this.shell.openNavigation()}focusSearch(){this.revealNavigation(),setTimeout(()=>{let e=this.searchInput()?.nativeElement;e?.focus(),e?.select()},0)}openFilterFromKeyboard(){this.revealNavigation(),this.shell.openProjectFilter()}refresh(){this.morse.requestProjects(),this.morse.requestSessions()}onQuery(e){this.query.set(e.target.value)}age(e){if(e<=0)return"";let n=Math.max(0,Math.round((Date.now()-e)/1e3));if(n<60)return`${n}s`;let i=Math.round(n/60);if(i<60)return`${i}m`;let o=Math.round(i/60);return o<24?`${o}h`:`${Math.round(o/24)}d`}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-session-nav"]],viewQuery:function(n,i){n&1&>(i.searchInput,I3,5),n&2&&vt()},hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},decls:26,vars:9,consts:[["search",""],[1,"head"],["type","button",1,"primary",3,"click"],["type","button","title","Refresh",1,"secondary","icon",3,"click"],[1,"filters"],["type","button","aria-haspopup","dialog",1,"secondary","scope",3,"filtered","title"],["type","search","placeholder","Search sessions\u2026","aria-label","Search sessions",3,"input","value"],[3,"projects","selected","totalSessions"],[1,"list"],[1,"pane"],[1,"foot"],["target","_blank","rel","noreferrer noopener",1,"notice",3,"href","title"],["type","button","title","Every key Morse understands",3,"click"],[1,"stamp"],["type","button","title","About Morse and the technologies it uses",3,"click"],["type","button","aria-haspopup","dialog",1,"secondary","scope",3,"click","title"],["aria-hidden","true",1,"scope-glyph"],[1,"scope-name"],[3,"select","close","projects","selected","totalSessions"],[1,"pane-head"],[1,"pane-title"],[1,"pane-count"],["type","button",1,"session","live",3,"click","contextmenu","title"],["aria-hidden","true",1,"mark","running"],[1,"body"],[1,"title"],[1,"subtitle"],[1,"group-head"],["type","button",1,"group-title",3,"click","title"],[1,"name"],[1,"count"],[1,"chevron",3,"open"],["type","button","title","New session in this project",1,"group-new",3,"click"],[1,"chevron"],["type","button",1,"session",3,"click","contextmenu","title"],[1,"meta"],[1,"empty"],["type","button",1,"empty-action"],["type","button",1,"empty-action",3,"click"],["aria-hidden","true",1,"notice-glyph"],[1,"context-menu-layer",3,"click","contextmenu"],["role","menu",1,"context-menu"],[1,"context-menu-question"],[1,"context-menu-title"],["type","button",1,"context-menu-item",3,"click"],["type","button",1,"context-menu-item","danger",3,"click"]],template:function(n,i){if(n&1&&(y(0,"div",1)(1,"button",2),A("click",function(r){return i.newSession(r)}),u(2," New session "),b(),y(3,"button",3),A("click",function(){return i.refresh()}),u(4,"\u27F3"),b()(),y(5,"div",4),w(6,N3,5,5,"button",5),y(7,"input",6,0),A("input",function(r){return i.onQuery(r)}),b()(),w(9,O3,1,3,"morse-project-filter",7),y(10,"div",8),w(11,A3,9,1,"section",9),oe(12,z3,4,2,"section",9,UE,!1,K3,5,1),b(),w(15,Z3,1,0,"morse-file-explorer"),y(16,"div",10),w(17,Q3,7,3,"a",11),y(18,"button",12),A("click",function(){return i.openShortcuts()}),u(19," Keyboard shortcuts "),y(20,"span",13),u(21,"?"),b()(),y(22,"button",14),A("click",function(){return i.openAbout()}),u(23," About Morse "),w(24,X3,2,1,"span",13),b()(),w(25,tV,4,5)),n&2){let o,r,s;d(6),S(i.filterable()?6:-1),d(),q("value",i.query()),d(2),S(i.filterOpen()?9:-1),d(2),S(i.inProgress().length>0?11:-1),d(),re(i.visibleGroups()),d(3),S(i.filePreview()?15:-1),d(2),S((o=i.updateNotice())?17:-1,o),d(7),S((r=i.version())?24:-1,r),d(),S((s=i.menu())?25:-1,s)}},dependencies:[Iu,ku],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;min-height:0;height:100%;background:var(--%NS%morse-nav-bg);border-right:1px solid var(--%NS%morse-border)}.head[_ngcontent-%COMP%]{flex:none;display:flex;align-items:center;gap:6px;min-height:var(--%NS%morse-head-height);padding:0 10px;border-bottom:1px solid var(--%NS%morse-border)}.head[_ngcontent-%COMP%] button.primary[_ngcontent-%COMP%]{flex:1;padding:6px 10px}.filters[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:6px;padding:10px 10px 6px}.filters[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{padding:6px 9px}.scope[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;justify-content:flex-start;width:100%}.scope.filtered[_ngcontent-%COMP%]{border-color:var(--%NS%morse-accent)}.scope-glyph[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-fg-muted);font-size:11px}.scope-name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.empty-action[_ngcontent-%COMP%]{display:block;width:calc(100% - 16px);margin:0 8px 6px;padding:4px 8px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-link);font-size:11.5px;text-align:left;cursor:pointer}.empty-action[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}input[_ngcontent-%COMP%]{width:100%}.list[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;padding:6px 8px 12px}.pane[_ngcontent-%COMP%] + .pane[_ngcontent-%COMP%]{margin-top:12px}.pane-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;padding:4px 7px 5px}.pane-title[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:10.5px;font-weight:600;letter-spacing:.07em;text-transform:uppercase}.pane-count[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-fg-muted);font-size:10.5px;font-variant-numeric:tabular-nums}.group-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px}.group-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;flex:1;min-width:0;padding:5px 6px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:11px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;cursor:pointer}.group-title[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover)}.group-title[_ngcontent-%COMP%] .name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.group-title[_ngcontent-%COMP%] .count[_ngcontent-%COMP%]{flex:none}.group-new[_ngcontent-%COMP%]{flex:none;padding:1px 6px 2px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:15px;line-height:1.2;cursor:pointer}.group-new[_ngcontent-%COMP%]:hover:not(:disabled), .group-new[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.group-title[_ngcontent-%COMP%] .path[_ngcontent-%COMP%]{max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl;font-weight:400;text-transform:none}.chevron[_ngcontent-%COMP%]{transition:transform .12s ease}.chevron.open[_ngcontent-%COMP%]{transform:rotate(90deg)}ul[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0}.session[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border:0;border-radius:var(--%NS%morse-radius-md);background:transparent;color:var(--%NS%morse-fg);text-align:left;cursor:pointer;transition:background .12s ease}.session[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.session.active[_ngcontent-%COMP%]{background:var(--%NS%morse-active);box-shadow:inset 2px 0 0 var(--%NS%morse-accent)}.session[_ngcontent-%COMP%] .body[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.session[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:500}.session.active[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{font-weight:600}.session[_ngcontent-%COMP%] .subtitle[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:11px}.session[_ngcontent-%COMP%] .meta[_ngcontent-%COMP%]{flex:none;font-size:10.5px;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-variant-numeric:tabular-nums}.session[_ngcontent-%COMP%] .mark[_ngcontent-%COMP%]{flex:none;width:10px;height:10px;border-radius:50%;background:var(--%NS%morse-fg-muted)}.session[_ngcontent-%COMP%] .mark.running[_ngcontent-%COMP%]{background:transparent;border:1.6px solid color-mix(in srgb,var(--%NS%morse-accent) 30%,transparent);border-top-color:var(--%NS%morse-accent);animation:_ngcontent-%COMP%_nav-spin .8s linear infinite}@keyframes _ngcontent-%COMP%_nav-spin{to{transform:rotate(360deg)}}.context-menu-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:40}.context-menu[_ngcontent-%COMP%]{position:fixed;z-index:41;width:220px;max-width:min(280px,90vw);padding:4px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 8px 24px #00000059}.context-menu-question[_ngcontent-%COMP%]{margin:3px 7px 0;font-size:11.5px;color:var(--%NS%morse-fg)}.context-menu-title[_ngcontent-%COMP%]{margin:2px 7px 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--%NS%morse-fg-muted)}.context-menu-item[_ngcontent-%COMP%]{display:block;width:100%;padding:5px 8px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg);font-size:12px;text-align:left;cursor:pointer}.context-menu-item[_ngcontent-%COMP%]:hover:not(:disabled), .context-menu-item[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--%NS%morse-hover)}.context-menu-item.danger[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.empty[_ngcontent-%COMP%]{padding:8px;font-size:12px;color:var(--%NS%morse-fg-muted)}.foot[_ngcontent-%COMP%]{flex:none;padding:4px 6px 6px;border-top:1px solid var(--%NS%morse-border)}.foot[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .foot[_ngcontent-%COMP%] .notice[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;width:100%;padding:5px 8px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:11px;text-align:left;cursor:pointer}.foot[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.foot[_ngcontent-%COMP%] .notice[_ngcontent-%COMP%]{color:var(--%NS%morse-accent);text-decoration:none}.foot[_ngcontent-%COMP%] .notice[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-accent)}.foot[_ngcontent-%COMP%] .notice[_ngcontent-%COMP%] .notice-glyph[_ngcontent-%COMP%]{flex:none;font-size:11px}.foot[_ngcontent-%COMP%] .stamp[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right;font-family:var(--%NS%morse-font-mono);font-size:10px}"]})};function nV(t){if(t.kind==="tool"){let e=uo(t.name),n=fE(t),i=Rs(t);return e==="shell"?`${n} ${HE(i.replace(/\s+/g," ").trim(),40)}`:e==="search"?`${n} ${HE(i,40)}`:`${n} ${gu(i)}`}if(t.kind==="assistant"){if(t.thinking.trim().length>0&&t.text.trim().length===0)return"Thinking\u2026";if(t.text.trim().length>0||t.streaming)return"Writing\u2026"}}function HE(t,e){return t.length>e?`${t.slice(0,e)}\u2026`:t}var GE=(t,e)=>e.path;function iV(t,e){if(t&1){let n=$();h(0,"button",20),F("click",function(){let o=D(n).$implicit,r=m(2);return M(r.go(o.path))}),u(1),g()}if(t&2){let n=e.$implicit;ie("title",n.path),d(),ae(" ",n.name," ")}}function oV(t,e){if(t&1&&(h(0,"div",9),oe(1,iV,2,2,"button",19,GE),g()),t&2){let n=m();d(),re(n.roots())}}function rV(t,e){t&1&&(h(0,"p",11),u(1,"Reading folder\u2026"),g())}function sV(t,e){t&1&&(h(0,"p",12),u(1),g()),t&2&&(d(),k(e))}function aV(t,e){if(t&1){let n=$();h(0,"button",22),F("click",function(){let o=D(n),r=m(2);return M(r.go(o))}),h(1,"span",23),u(2,"\u21B0"),g(),h(3,"span",24),u(4,".."),g()()}t&2&&ie("title",e)}function cV(t,e){if(t&1){let n=$();h(0,"button",22),F("click",function(){let o=D(n).$implicit,r=m(2);return M(r.go(o.path))}),h(1,"span",23),u(2,"\u25B8"),g(),h(3,"span",24),u(4),g()()}if(t&2){let n=e.$implicit;ie("title",n.path),d(4),k(n.name)}}function lV(t,e){t&1&&(h(0,"p",11),u(1,"No subfolders here."),g())}function dV(t,e){if(t&1&&w(0,lV,2,0,"p",11),t&2){let n=m(2);S(n.parent()===void 0&&n.directories().length===0?0:-1)}}function uV(t,e){if(t&1&&(w(0,aV,5,1,"button",21),oe(1,cV,5,2,"button",21,GE,!1,dV,1,1)),t&2){let n,i=m();S((n=i.parent())?0:-1,n),d(),re(i.directories())}}function pV(t,e){t&1&&(h(0,"em"),u(1," \xB7 not in MORSE_PROJECTS"),g())}function fV(t,e){t&1&&(h(0,"em",15),u(1," \xB7 git"),g())}var Ou=class t{morse=N(Ze);shell=N(Ht);tabs=N(dn);loading=O(!1);error=O(void 0);path=O("");draftPath=O("");parent=O(void 0);directories=O([]);roots=O([]);isGitRepo=O(!1);canOpen=O(!1);constructor(){this.load()}go(e){let n=e?.trim();this.load(n&&n.length>0?n:void 0)}onPathInput(e){this.draftPath.set(e.target.value)}close(){this.shell.closeProjectPicker()}confirm(){let e=this.path();e.length===0||!this.canOpen()||(this.tabs.startDraft(e),this.shell.closeNavigation(),this.close())}onEscape(){this.close()}load(e){this.loading.set(!0),this.error.set(void 0),this.morse.requestHostCommand("listDirectories",e?{path:e}:void 0).then(n=>{this.loading.set(!1);let i=n;if(!i||typeof i.path!="string"){this.error.set("That folder could not be read.");return}this.path.set(i.path),this.draftPath.set(i.path),this.parent.set(i.parent),this.directories.set(i.directories??[]),this.roots.set(i.roots??[]),this.isGitRepo.set(i.isGitRepo===!0),this.canOpen.set(i.canOpen===!0)})}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-project-picker"]],hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},decls:30,vars:10,consts:[[1,"modal-layer",3,"click"],["role","dialog","aria-modal","true","aria-label","Choose the folder for a new session",1,"modal-card",3,"click"],[1,"modal-head"],["type","button","title","Close","aria-label","Close",1,"close",3,"click"],[1,"modal-sub"],[1,"path-row"],["type","button","title","Parent folder","aria-label","Parent folder",3,"click","disabled"],["type","text","spellcheck","false","autocomplete","off","aria-label","Folder path",3,"input","keydown.enter","value"],["type","button",3,"click","disabled"],[1,"roots"],[1,"listing"],[1,"state"],[1,"state","error"],[1,"modal-foot"],[1,"selected",3,"title"],[1,"ok"],[1,"actions"],["type","button",1,"secondary",3,"click"],["type","button",1,"primary",3,"click","disabled"],["type","button",1,"chip",3,"title"],["type","button",1,"chip",3,"click","title"],["type","button",1,"row",3,"title"],["type","button",1,"row",3,"click","title"],["aria-hidden","true",1,"folder"],[1,"name"]],template:function(n,i){if(n&1&&(h(0,"div",0),F("click",function(){return i.close()}),h(1,"div",1),F("click",function(r){return r.stopPropagation()}),h(2,"header",2)(3,"strong"),u(4,"New session"),g(),h(5,"button",3),F("click",function(){return i.close()}),u(6," \xD7 "),g()(),h(7,"p",4),u(8," Choose the project folder the agent should run in. It starts only after your first prompt. "),g(),h(9,"div",5)(10,"button",6),F("click",function(){return i.go(i.parent())}),u(11," \u2191 "),g(),h(12,"input",7),F("input",function(r){return i.onPathInput(r)})("keydown.enter",function(){return i.go(i.draftPath())}),g(),h(13,"button",8),F("click",function(){return i.go(i.draftPath())}),u(14," Go "),g()(),w(15,oV,3,0,"div",9),h(16,"div",10),w(17,rV,2,0,"p",11)(18,sV,2,1,"p",12)(19,uV,4,2),g(),h(20,"footer",13)(21,"span",14),u(22),w(23,pV,2,0,"em"),w(24,fV,2,0,"em",15),g(),h(25,"div",16)(26,"button",17),F("click",function(){return i.close()}),u(27,"Cancel"),g(),h(28,"button",18),F("click",function(){return i.confirm()}),u(29," New session here "),g()()()()()),n&2){let o;d(10),ie("disabled",i.parent()===void 0),d(2),ie("value",i.draftPath()),d(),ie("disabled",i.draftPath().trim().length===0),d(2),S(i.roots().length>0?15:-1),d(2),S(i.loading()?17:(o=i.error())?18:19,o),d(4),ie("title",i.path()),d(),ae(" ",i.path()," "),d(),S(i.canOpen()?-1:23),d(),S(i.isGitRepo()?24:-1),d(4),ie("disabled",!i.canOpen()||i.loading())}},styles:["[_nghost-%COMP%]{display:contents}.modal-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.modal-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:min(560px,100%);max-height:min(640px,90vh);border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 18px 48px #0006;overflow:hidden}.modal-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--%NS%morse-border)}.modal-head[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{flex:1;font-size:13px}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{padding:2px 8px;border:0;background:transparent;color:var(--%NS%morse-fg-muted);font-size:16px;line-height:1;cursor:pointer}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]:hover{color:var(--%NS%morse-fg)}.modal-sub[_ngcontent-%COMP%]{margin:0;padding:8px 14px 0;color:var(--%NS%morse-fg-muted);font-size:11.5px}.path-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;padding:10px 14px}.path-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1;min-width:0;font-family:var(--%NS%morse-font-mono);font-size:12px}.path-row[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:none;padding:4px 10px}.roots[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:6px;padding:0 14px 8px}.chip[_ngcontent-%COMP%]{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:2px 9px;border:1px solid var(--%NS%morse-border);border-radius:999px;background:transparent;color:var(--%NS%morse-fg-muted);font-size:11px;cursor:pointer}.chip[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.listing[_ngcontent-%COMP%]{flex:1;min-height:160px;overflow-y:auto;border-top:1px solid var(--%NS%morse-border);padding:4px 6px}.row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg);text-align:left;cursor:pointer}.row[_ngcontent-%COMP%]:hover, .row[_ngcontent-%COMP%]:focus-visible{background:var(--%NS%morse-hover)}.row[_ngcontent-%COMP%] .folder[_ngcontent-%COMP%]{flex:none;width:14px;color:var(--%NS%morse-fg-muted);text-align:center}.row[_ngcontent-%COMP%] .name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row[_ngcontent-%COMP%] .mark[_ngcontent-%COMP%]{flex:none;padding:0 6px;border-radius:999px;background:var(--%NS%morse-badge-bg);color:var(--%NS%morse-badge-fg);font-size:10px}.state[_ngcontent-%COMP%]{margin:8px;color:var(--%NS%morse-fg-muted);font-size:12px}.state.error[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.modal-foot[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:12px 14px;border-top:1px solid var(--%NS%morse-border)}.selected[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl;text-align:left;color:var(--%NS%morse-fg-muted);font-family:var(--%NS%morse-font-mono);font-size:11px}.selected[_ngcontent-%COMP%] em[_ngcontent-%COMP%]{color:var(--%NS%morse-warn, var(--%NS%morse-error));font-style:normal}.actions[_ngcontent-%COMP%]{display:flex;flex:none;gap:6px}"]})};var qE=[{title:"The agent",blurb:"Morse never imports pi \u2014 it spawns `pi --mode rpc` and speaks its protocol.",entries:[{name:"pi coding agent",by:"Mario Zechner",license:"MIT",url:"https://github.com/earendil-works/pi",role:"Reads, runs, edits and thinks: every reply in this window is pi talking."}]},{title:"Interface",entries:[{name:"Angular",packages:["@angular/common","@angular/compiler","@angular/core","@angular/forms","@angular/platform-browser","@angular/router"],license:"MIT",url:"https://angular.dev",role:"Components, signals and the shell both hosts render.",by:"Google"},{name:"RxJS",packages:["rxjs"],license:"Apache-2.0",url:"https://rxjs.dev",role:"The streams Angular is built on."},{name:"marked",packages:["marked"],license:"MIT",url:"https://marked.js.org",role:"Turns the agent\u2019s markdown into HTML."},{name:"DOMPurify",packages:["dompurify"],license:"(MPL-2.0 OR Apache-2.0)",url:"https://github.com/cure53/DOMPurify",role:"Sanitises that HTML before it reaches the DOM.",by:"Cure53"},{name:"highlight.js",packages:["highlight.js"],license:"BSD-3-Clause",url:"https://highlightjs.org",role:"Syntax colours in code blocks."},{name:"anime.js",packages:["animejs"],license:"MIT",url:"https://animejs.com",role:"The cold-start intro and the drop-zone pulse.",by:"Julian Garnier"},{name:"tslib",packages:["tslib"],license:"0BSD",url:"https://github.com/microsoft/tslib",role:"TypeScript\u2019s own runtime helpers.",by:"Microsoft"}]},{title:"Hosts",entries:[{name:"NestJS",packages:["@nestjs/common","@nestjs/core","@nestjs/platform-express","@nestjs/platform-ws","@nestjs/websockets"],license:"MIT",url:"https://nestjs.com",role:"The browser host: static frontend plus one WebSocket gateway.",by:"Kamil My\u015Bliwiec"},{name:"ws",packages:["ws"],license:"MIT",url:"https://github.com/websockets/ws",role:"The WebSocket server NestJS sits on."},{name:"reflect-metadata",packages:["reflect-metadata"],license:"Apache-2.0",url:"https://github.com/rbuckton/reflect-metadata",role:"Decorator metadata for NestJS\u2019s dependency injection.",by:"Ron Buckton"},{name:"Node.js",by:"OpenJS Foundation",license:"MIT",url:"https://nodejs.org",role:"Runtime for the host and for pi itself."},{name:"Visual Studio Code",by:"Microsoft",license:"MIT",url:"https://code.visualstudio.com/api",role:"The editor Morse docks into, and the API it builds against."}]},{title:"Typeface",blurb:"The browser host bundles JetBrains Mono; VS Code keeps the editor\u2019s own font and downloads nothing.",entries:[{name:"JetBrains Mono",by:"JetBrains",license:"OFL-1.1",url:"https://www.jetbrains.com/lp/mono/",role:"The interface typeface, subset to latin and latin-ext. Licence text ships beside it."},{name:"Nerd Fonts",by:"Ryan L. McIntyre",license:"MIT",url:"https://www.nerdfonts.com",role:"Where the UI\u2019s icon glyphs come from \u2014 Morse bundles none, they follow the editor font."}]},{title:"Build & test",blurb:"Not shipped with the app \u2014 but nothing here would exist without them.",entries:[{name:"TypeScript",packages:["typescript"],license:"Apache-2.0",url:"https://www.typescriptlang.org",role:"Every line of Morse, typed.",by:"Microsoft"},{name:"Angular CLI & build",packages:["@angular/cli","@angular/build","@angular/compiler-cli"],license:"MIT",url:"https://angular.dev/tools/cli",role:"Builds, bundles and serves the frontend."},{name:"esbuild",packages:["esbuild"],license:"MIT",url:"https://esbuild.github.io",role:"Bundles the libraries, the server, the CLI and the extension.",by:"Evan Wallace"},{name:"Vitest",packages:["vitest"],license:"MIT",url:"https://vitest.dev",role:"The unit suites."},{name:"jsdom",packages:["jsdom"],license:"MIT",url:"https://github.com/jsdom/jsdom",role:"A DOM for those suites."},{name:"ESLint",packages:["eslint"],license:"MIT",url:"https://eslint.org",role:"Lints the extension."},{name:"typescript-eslint",packages:["typescript-eslint"],license:"MIT",url:"https://typescript-eslint.io",role:"The type-aware lint rules."},{name:"Prettier",packages:["prettier"],license:"MIT",url:"https://prettier.io",role:"Formatting, so no diff is about whitespace."},{name:"DefinitelyTyped",packages:["@types/node","@types/ws","@types/mocha","@types/vscode"],license:"MIT",url:"https://github.com/DefinitelyTyped/DefinitelyTyped",role:"Type definitions for Node, ws, mocha and the VS Code API."},{name:"VS Code test tools",packages:["@vscode/test-cli","@vscode/test-electron"],license:"MIT",url:"https://code.visualstudio.com/api/working-with-extensions/testing-extension",role:"Runs the integration suite in a real VS Code.",by:"Microsoft"},{name:"VSCE",packages:["@vscode/vsce"],license:"MIT",url:"https://github.com/microsoft/vscode-vsce",role:"Packages the extension into a .vsix.",by:"Microsoft"},{name:"npm-run-all",packages:["npm-run-all"],license:"MIT",url:"https://github.com/mysticatea/npm-run-all",role:"Runs the dev and watch scripts side by side.",by:"Toru Nagashima"}]}];var mV=(t,e)=>e.title,hV=(t,e)=>e.name;function gV(t,e){if(t&1&&(h(0,"div")(1,"dt"),u(2,"update"),g(),h(3,"dd")(4,"a",14),u(5),g()()()),t&2){let n=e;d(4),ie("href",n.url,xi)("title",n.hint),d(),ae(" v",n.latest," available ")}}function yV(t,e){t&1&&(h(0,"p",15),u(1),g()),t&2&&(d(),k(e))}function _V(t,e){t&1&&(h(0,"span",17),u(1),g()),t&2&&(d(),ae("by ",e))}function vV(t,e){if(t&1&&(h(0,"li")(1,"a",16),u(2),w(3,_V,2,1,"span",17),g(),h(4,"span",18),u(5),g(),h(6,"p",19),u(7),g()()),t&2){let n,i=e.$implicit;d(),ie("href",i.url,xi),d(),ae(" ",i.name," "),d(),S((n=i.by)?3:-1,n),d(2),k(i.license),d(2),k(i.role)}}function bV(t,e){if(t&1&&(h(0,"section",9)(1,"h3"),u(2),g(),w(3,yV,2,1,"p",15),h(4,"ul"),oe(5,vV,8,5,"li",null,hV),g()()),t&2){let n,i=e.$implicit;d(2),k(i.title),d(),S((n=i.blurb)?3:-1,n),d(2),re(i.entries)}}var Pu=class t{morse=N(Ze);shell=N(Ht);update=N(Fs);groups=qE;protocolVersion=this.morse.protocolVersion;updateNotice=this.update.available;frontend=E(()=>{let e=this.morse.frontend();return e?`${e.name} ${e.version}`:"not reported by this host"});host=E(()=>{let e=this.morse.capabilities();return e?`${e.hostKind} \xB7 ${e.scope}`:"not connected"});close(){this.shell.closeAbout()}onEscape(){this.close()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-about-dialog"]],hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},decls:42,vars:4,consts:[[1,"modal-layer",3,"click"],["role","dialog","aria-modal","true","aria-labelledby","about-title",1,"modal-card",3,"click"],[1,"modal-head"],["id","about-title"],[1,"stamp"],["type","button","aria-label","Close",1,"close",3,"click"],[1,"intro"],[1,"identity"],[1,"scroll"],[1,"group"],[1,"modal-foot"],[1,"spacer"],["href","https://github.com/supanadit/morse","target","_blank","rel","noreferrer noopener"],["type","button",1,"secondary",3,"click"],["target","_blank","rel","noreferrer noopener",3,"href","title"],[1,"blurb"],["target","_blank","rel","noreferrer noopener",1,"name",3,"href"],[1,"by"],[1,"license"],[1,"role"]],template:function(n,i){if(n&1&&(h(0,"div",0),F("click",function(){return i.close()}),h(1,"div",1),F("click",function(r){return r.stopPropagation()}),h(2,"div",2)(3,"strong",3),u(4,"About Morse"),g(),h(5,"span",4),u(6,"a comfortable Pi interface \xB7 MIT"),g(),h(7,"button",5),F("click",function(){return i.close()}),u(8,"\xD7"),g()(),h(9,"p",6),u(10," One chat frontend for the pi coding agent: a VS Code panel, or a browser served by the Morse host. Morse never imports pi \u2014 it drives "),h(11,"code"),u(12,"pi --mode rpc"),g(),u(13," \u2014 and never talks to a model provider itself. Below is what it stands on, and the licence each piece asks for. "),g(),h(14,"dl",7)(15,"div")(16,"dt"),u(17,"frontend"),g(),h(18,"dd"),u(19),g()(),h(20,"div")(21,"dt"),u(22,"protocol"),g(),h(23,"dd"),u(24),g()(),h(25,"div")(26,"dt"),u(27,"host"),g(),h(28,"dd"),u(29),g()(),w(30,gV,6,3,"div"),g(),h(31,"div",8),oe(32,bV,7,2,"section",9,mV),g(),h(34,"div",10)(35,"span"),u(36,"Licence texts ship with this build. Morse is MIT \xB7 \xA9 2026 Supan Adit Pratama."),g(),ce(37,"span",11),h(38,"a",12),u(39," Source "),g(),h(40,"button",13),F("click",function(){return i.close()}),u(41,"Close"),g()()()()),n&2){let o;d(19),k(i.frontend()),d(5),k(i.protocolVersion()),d(5),k(i.host()),d(),S((o=i.updateNotice())?30:-1,o),d(2),re(i.groups)}},styles:["[_nghost-%COMP%]{display:contents}.modal-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.modal-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:min(620px,100%);max-height:min(680px,90vh);border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 18px 48px #0006;overflow:hidden}.modal-head[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:8px;padding:12px 14px;border-bottom:1px solid var(--%NS%morse-border)}.modal-head[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:13px}.modal-head[_ngcontent-%COMP%] .stamp[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:11px}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{padding:2px 8px;border:0;background:transparent;color:var(--%NS%morse-fg-muted);font-size:16px;line-height:1;cursor:pointer}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]:hover{color:var(--%NS%morse-fg)}.intro[_ngcontent-%COMP%]{margin:0;padding:10px 14px 0;color:var(--%NS%morse-fg-muted);font-size:11.5px;line-height:1.55}.intro[_ngcontent-%COMP%] code[_ngcontent-%COMP%], .role[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--%NS%morse-font-mono);font-size:11px;padding:0 3px;border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-hover)}dl.identity[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:6px 18px;margin:10px 14px 0;padding:8px 10px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-md);background:var(--%NS%morse-hover);font-size:11px}dl.identity[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;gap:6px;min-width:0}dt[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted);text-transform:uppercase;letter-spacing:.04em}dd[_ngcontent-%COMP%]{margin:0;font-family:var(--%NS%morse-font-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}dl.identity[_ngcontent-%COMP%] dd[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--%NS%morse-link)}dl.identity[_ngcontent-%COMP%] dd[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.scroll[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;padding:6px 14px 12px}.group[_ngcontent-%COMP%]{margin-top:12px}.group[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 2px;color:var(--%NS%morse-fg-muted);font-size:11px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}.blurb[_ngcontent-%COMP%]{margin:0 0 6px;color:var(--%NS%morse-fg-muted);font-size:11px}ul[_ngcontent-%COMP%]{margin:0;padding:0;list-style:none}li[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:0 8px;padding:6px 8px;border-radius:var(--%NS%morse-radius-sm)}li[_ngcontent-%COMP%] + li[_ngcontent-%COMP%]{border-top:1px solid var(--%NS%morse-hover)}li[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.name[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg);font-size:12px;font-weight:600;text-decoration:none}.name[_ngcontent-%COMP%]:hover{color:var(--%NS%morse-link);text-decoration:underline}.by[_ngcontent-%COMP%]{margin-left:6px;color:var(--%NS%morse-fg-muted);font-size:11px;font-weight:400}.license[_ngcontent-%COMP%]{justify-self:end;padding:1px 7px;border-radius:999px;background:var(--%NS%morse-badge-bg);color:var(--%NS%morse-badge-fg);font-family:var(--%NS%morse-font-mono);font-size:10px}.role[_ngcontent-%COMP%]{grid-column:1 / -1;margin:2px 0 0;color:var(--%NS%morse-fg-muted);font-size:11px;line-height:1.5}.modal-foot[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-top:1px solid var(--%NS%morse-border);color:var(--%NS%morse-fg-muted);font-size:11px}.modal-foot[_ngcontent-%COMP%] .spacer[_ngcontent-%COMP%]{flex:1;min-width:0}"]})};var xV=(t,e)=>e.name,CV=(t,e)=>e.id;function EV(t,e){t&1&&(h(0,"span",15),u(1,"not in this host"),g())}function wV(t,e){if(t&1&&(h(0,"li")(1,"div",13)(2,"span",14),u(3),w(4,EV,2,0,"span",15),g(),h(5,"span",16),u(6),g()(),h(7,"kbd"),u(8),g()()),t&2){let n=e.$implicit;X("unavailable",n.available===!1),d(3),ae(" ",n.label," "),d(),S(n.available===!1?4:-1),d(2),k(n.detail),d(2),k(n.keys)}}function SV(t,e){if(t&1&&(h(0,"section",8)(1,"h3"),u(2),g(),h(3,"ul"),oe(4,wV,9,6,"li",12,CV),g()()),t&2){let n=e.$implicit;d(2),k(n.name),d(2),re(n.rows)}}var Au=class t{shell=N(Ht);shortcuts=N(An);groups=E(()=>{let e=this.shortcuts.available(),n=new Map;for(let i of Ja){let o=n.get(i.group)??[];o.push({id:i.id,label:i.label,detail:i.detail,keys:ec(i)?hx(i.binding):i.keys,available:ec(i)?e.get(i.id)===!0:void 0}),n.set(i.group,o)}return[...n].map(([i,o])=>({name:i,rows:o}))});close(){this.shell.closeShortcuts()}onEscape(){this.close()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-shortcuts-dialog"]],hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},decls:20,vars:0,consts:[[1,"modal-layer",3,"click"],["role","dialog","aria-modal","true","aria-labelledby","shortcuts-title",1,"modal-card",3,"click"],[1,"modal-head"],["id","shortcuts-title"],[1,"stamp"],["type","button","aria-label","Close",1,"close",3,"click"],[1,"intro"],[1,"scroll"],[1,"group"],[1,"modal-foot"],[1,"spacer"],["type","button",1,"secondary",3,"click"],[3,"unavailable"],[1,"what"],[1,"label"],[1,"why"],[1,"detail"]],template:function(n,i){n&1&&(h(0,"div",0),F("click",function(){return i.close()}),h(1,"div",1),F("click",function(r){return r.stopPropagation()}),h(2,"div",2)(3,"strong",3),u(4,"Keyboard shortcuts"),g(),h(5,"span",4),u(6,"the same keys in the browser and in the VS Code panel"),g(),h(7,"button",5),F("click",function(){return i.close()}),u(8,"\xD7"),g()(),h(9,"p",6),u(10," Every key Morse understands, whether or not it is a shortcut you can see in the interface. They apply while the Morse panel has focus \u2014 and a row marked \u201Cnot in this host\u201D is a key this host has nothing to do. "),g(),h(11,"div",7),oe(12,SV,6,1,"section",8,xV),g(),h(14,"div",9)(15,"span"),u(16,"Esc closes this list, and the panel in front of it."),g(),ce(17,"span",10),h(18,"button",11),F("click",function(){return i.close()}),u(19,"Close"),g()()()()),n&2&&(d(12),re(i.groups()))},styles:["[_nghost-%COMP%]{display:contents}.modal-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:66;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.modal-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:min(560px,100%);max-height:min(620px,90vh);border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 18px 48px #0006;overflow:hidden}.modal-head[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:8px;padding:12px 14px;border-bottom:1px solid var(--%NS%morse-border)}.modal-head[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:13px}.modal-head[_ngcontent-%COMP%] .stamp[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:11px}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{padding:2px 8px;border:0;background:transparent;color:var(--%NS%morse-fg-muted);font-size:16px;line-height:1;cursor:pointer}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]:hover{color:var(--%NS%morse-fg)}.intro[_ngcontent-%COMP%]{margin:0;padding:10px 14px 0;color:var(--%NS%morse-fg-muted);font-size:11.5px;line-height:1.55}.scroll[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;padding:4px 14px 12px}.group[_ngcontent-%COMP%]{margin-top:12px}.group[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 4px;color:var(--%NS%morse-fg-muted);font-size:11px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}ul[_ngcontent-%COMP%]{margin:0;padding:0;list-style:none}li[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:8px;padding:6px 8px;border-radius:var(--%NS%morse-radius-sm)}li[_ngcontent-%COMP%] + li[_ngcontent-%COMP%]{border-top:1px solid var(--%NS%morse-hover)}li[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}li.unavailable[_ngcontent-%COMP%] .label[_ngcontent-%COMP%], li.unavailable[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%]{opacity:.55}.what[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1px;min-width:0}.label[_ngcontent-%COMP%]{font-size:12px;font-weight:600}.why[_ngcontent-%COMP%]{margin-left:6px;padding:1px 6px;border-radius:999px;background:var(--%NS%morse-badge-bg);color:var(--%NS%morse-badge-fg);font-size:10px;font-weight:400}.detail[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted);font-size:11px;line-height:1.5}kbd[_ngcontent-%COMP%]{justify-self:end;padding:2px 7px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-bg);color:var(--%NS%morse-fg);font-family:var(--%NS%morse-font-mono);font-size:11px;white-space:nowrap}.modal-foot[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-top:1px solid var(--%NS%morse-border);color:var(--%NS%morse-fg-muted);font-size:11px}.modal-foot[_ngcontent-%COMP%] .spacer[_ngcontent-%COMP%]{flex:1;min-width:0}"]})};var TV=["cancel"];function DV(t,e){t&1&&(h(0,"p",4),u(1),g()),t&2&&(d(),k(e))}function MV(t,e){t&1&&(h(0,"p",5),u(1),g()),t&2&&(d(),k(e))}var Ru=class t{title=te.required();body=te("");note=te("");confirmLabel=te("Confirm");cancelLabel=te("Cancel");confirmed=it();cancelled=it();cancelButton=Xe("cancel");constructor(){se(()=>{let e=this.cancelButton()?.nativeElement;e&&setTimeout(()=>e.focus(),0)})}onEscape(){this.cancelled.emit()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-confirm-dialog"]],viewQuery:function(n,i){n&1&>(i.cancelButton,TV,5),n&2&&vt()},hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},inputs:{title:[1,"title"],body:[1,"body"],note:[1,"note"],confirmLabel:[1,"confirmLabel"],cancelLabel:[1,"cancelLabel"]},outputs:{confirmed:"confirmed",cancelled:"cancelled"},decls:12,vars:6,consts:[["cancel",""],[1,"modal-layer",3,"click"],["role","alertdialog","aria-modal","true","aria-labelledby","confirm-title",1,"modal-card",3,"click"],["id","confirm-title"],["id","confirm-body",1,"body"],[1,"note"],[1,"actions"],["type","button",1,"secondary",3,"click"],["type","button",3,"click"]],template:function(n,i){if(n&1&&(h(0,"div",1),F("click",function(){return i.cancelled.emit()}),h(1,"div",2),F("click",function(r){return r.stopPropagation()}),h(2,"h2",3),u(3),g(),w(4,DV,2,1,"p",4),w(5,MV,2,1,"p",5),h(6,"div",6)(7,"button",7,0),F("click",function(){return i.cancelled.emit()}),u(9),g(),h(10,"button",8),F("click",function(){return i.confirmed.emit()}),u(11),g()()()()),n&2){let o,r;d(),J("aria-describedby",i.body().length>0?"confirm-body":null),d(2),k(i.title()),d(),S((o=i.body())?4:-1,o),d(),S((r=i.note())?5:-1,r),d(4),ae(" ",i.cancelLabel()," "),d(2),k(i.confirmLabel())}},styles:["[_nghost-%COMP%]{display:contents}.modal-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:70;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.modal-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;width:min(420px,100%);padding:16px 18px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 18px 48px #0006;animation:_ngcontent-%COMP%_confirm-in .14s ease-out}h2[_ngcontent-%COMP%]{margin:0;font-size:14px;font-weight:600}.body[_ngcontent-%COMP%]{margin:0;font-size:12.5px;line-height:1.6}.note[_ngcontent-%COMP%]{margin:0;color:var(--%NS%morse-warn);font-size:11.5px;line-height:1.55}.actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:6px;margin-top:2px}@keyframes _ngcontent-%COMP%_confirm-in{0%{opacity:0;transform:translateY(6px)}}@media(prefers-reduced-motion:reduce){.modal-card[_ngcontent-%COMP%]{animation:none}}"]})};function kV(t,e){t&1&&u(0," Install it once and this panel is ready. ")}function IV(t,e){if(t&1){let n=$();h(0,"div",5)(1,"code"),u(2),g(),h(3,"button",10),F("click",function(){D(n);let o=m();return M(o.copyInstall())}),u(4),g()()}if(t&2){let n=m();d(2),k(e),d(2),ae(" ",n.copied()?"Copied":"Copy"," ")}}function NV(t,e){t&1&&(h(0,"p",6),u(1),g()),t&2&&(d(),k(e))}function OV(t,e){if(t&1){let n=$();h(0,"button",10),F("click",function(){D(n);let o=m();return M(o.openSettings())}),u(1,"Open settings"),g(),h(2,"button",10),F("click",function(){D(n);let o=m();return M(o.showLog())}),u(3,"Show log"),g()}}function PV(t,e){t&1&&(h(0,"p",9),u(1," Changed \u201Cmorse.pi.path\u201D? Reload the window \u2014 Morse picks the pi path when it starts. To use a pi that is already installed, point the setting at it instead of installing a second copy. "),g())}function AV(t,e){t&1&&(h(0,"p",9),u(1," The host reads "),h(2,"code"),u(3,"MORSE_PI_PATH"),g(),u(4," at startup, so restart it after changing that (or install pi) \u2014 "),h(5,"code"),u(6,"morse restart"),g(),u(7," for the daemon. "),g())}function RV(t,e){t&1&&(h(0,"details")(1,"summary"),u(2,"What the host reported"),g(),h(3,"pre"),u(4),g()()),t&2&&(d(4),k(e))}var Lu=class t{morse=N(Ze);message=this.morse.agentError;failure=this.morse.agentFailure;missing=E(()=>this.failure()?.code==="agent-unavailable");install=E(()=>this.failure()?.install??"");hint=E(()=>this.failure()?.hint??"");hasEditor=E(()=>this.morse.capabilities()?.hostKind==="vscode");copied=O(!1);copyInstall(){let e=this.install();e.length!==0&&(navigator.clipboard?.writeText(e),this.copied.set(!0),setTimeout(()=>this.copied.set(!1),1600))}retry(){this.morse.newSession()}openSettings(){this.morse.hostCommand("openSettings")}showLog(){this.morse.hostCommand("showOutput")}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-agent-screen"]],decls:18,vars:8,consts:[["role","alert","aria-labelledby","agent-title",1,"card"],[1,"eyebrow"],["aria-hidden","true",1,"pip"],["id","agent-title"],[1,"body"],[1,"command"],[1,"hint"],[1,"actions"],["type","button",3,"click"],[1,"foot"],["type","button",1,"secondary",3,"click"]],template:function(n,i){if(n&1&&(h(0,"section",0)(1,"p",1),ce(2,"span",2),u(3),g(),h(4,"h1",3),u(5),g(),h(6,"p",4),u(7," Morse is only the interface \u2014 every answer comes from the pi CLI on this machine, with your own models, tools and sessions. "),w(8,kV,1,0),g(),w(9,IV,5,2,"div",5),w(10,NV,2,1,"p",6),h(11,"div",7)(12,"button",8),F("click",function(){return i.retry()}),u(13,"Retry"),g(),w(14,OV,4,0),g(),w(15,PV,2,0,"p",9)(16,AV,8,0,"p",9),w(17,RV,5,1,"details"),g()),n&2){let o,r,s;d(3),ae(" ",i.missing()?"Setup":"Agent unavailable"," "),d(2),ae(" ",i.missing()?"The pi coding agent is not installed":"The pi coding agent could not start"," "),d(3),S(i.missing()?8:-1),d(),S((o=i.install())?9:-1,o),d(),S((r=i.hint())?10:-1,r),d(4),S(i.hasEditor()?14:-1),d(),S(i.hasEditor()?15:16),d(2),S((s=i.message())?17:-1,s)}},styles:["[_nghost-%COMP%]{display:flex;flex:1;min-height:0;overflow-y:auto;padding:18px}.card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px;width:100%;max-width:520px;margin:auto;padding:20px 22px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 10px 30px #0000002e;color:var(--%NS%morse-fg);animation:_ngcontent-%COMP%_agent-in .2s ease-out}.eyebrow[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin:0;color:var(--%NS%morse-fg-muted);font-size:11px;text-transform:uppercase;letter-spacing:.06em}.pip[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%;background:var(--%NS%morse-warn);box-shadow:0 0 0 3px color-mix(in srgb,var(--%NS%morse-warn) 22%,transparent)}h1[_ngcontent-%COMP%]{margin:0;font-size:17px;line-height:1.35;font-weight:600}.body[_ngcontent-%COMP%]{margin:0;color:var(--%NS%morse-fg-muted);font-size:12.5px;line-height:1.6}.command[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:8px 8px 8px 10px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-md);background:var(--%NS%morse-code-bg)}.command[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{flex:1;min-width:0;overflow-x:auto;white-space:nowrap;font-size:12px;color:var(--%NS%morse-fg)}.command[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:none;padding:3px 9px;font-size:11px}.hint[_ngcontent-%COMP%]{margin:0;color:var(--%NS%morse-fg-muted);font-size:11.5px;line-height:1.55}.actions[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}.foot[_ngcontent-%COMP%]{margin:0;color:var(--%NS%morse-fg-muted);font-size:11px;line-height:1.5}details[_ngcontent-%COMP%]{border-top:1px solid var(--%NS%morse-border);padding-top:8px}summary[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted);font-size:11px;cursor:pointer}details[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{margin:6px 0 0;padding:8px;border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-hover);color:var(--%NS%morse-fg-muted);font-family:var(--%NS%morse-font-mono);font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-word}@keyframes _ngcontent-%COMP%_agent-in{0%{opacity:0;transform:translateY(6px)}}@media(prefers-reduced-motion:reduce){.card[_ngcontent-%COMP%]{animation:none}}"]})};function LV(t,e){if(t&1){let n=$();y(0,"morse-boot-splash",11),A("dismissed",function(){D(n);let o=m();return M(o.onBootDismissed())}),b()}if(t&2){let n=m();q("ready",n.bootReady())("status",n.bootStatus())}}function FV(t,e){if(t&1){let n=$();y(0,"morse-connection-screen",12),A("retry",function(){D(n);let o=m();return M(o.retryConnection())})("explore",function(){D(n);let o=m();return M(o.onConnectionExplore())})("connect",function(o){D(n);let r=m();return M(r.onConnectionConnect(o))}),b()}if(t&2){let n=e;q("eyebrow",n.eyebrow)("title",n.title)("body",n.body)("detail",n.detail)}}function VV(t,e){t&1&&ve(0,"morse-project-picker")}function jV(t,e){t&1&&ve(0,"morse-about-dialog")}function $V(t,e){t&1&&ve(0,"morse-shortcuts-dialog")}function BV(t,e){if(t&1){let n=$();y(0,"morse-confirm-dialog",13),A("confirmed",function(){D(n);let o=m();return M(o.confirmCompact())})("cancelled",function(){D(n);let o=m();return M(o.cancelCompact())}),b()}if(t&2){let n=m();q("body",n.compactBody())}}function HV(t,e){if(t&1){let n=$();y(0,"button",14),A("click",function(){D(n);let o=m();return M(o.closeNavigation())}),b()}}function UV(t,e){t&1&&(y(0,"div",7),ve(1,"span",15),y(2,"div",16)(3,"span",17),u(4,"\u2913"),b(),y(5,"strong"),u(6,"Drop to attach"),b(),y(7,"span"),u(8,"Images ride with the prompt \xB7 other files become "),y(9,"code"),u(10,"@mentions"),b()()()()),t&2&&(d(2),q("morseEnter",0)("morseEnterY",-6))}function zV(t,e){t&1&&ve(0,"morse-tab-strip")}function GV(t,e){t&1&&ve(0,"morse-file-preview",8),t&2&&q("tab",e)}function qV(t,e){if(t&1){let n=$();y(0,"section",18)(1,"strong"),u(2,"Offline \u2014 the host wouldn't take this frontend"),b(),y(3,"p"),u(4),ve(5,"br"),u(6),b(),y(7,"div",20)(8,"button",21),A("click",function(){D(n);let o=m(2);return M(o.reload())}),u(9,"Reload"),b(),y(10,"button",22),A("click",function(){D(n);let o=m(2);return M(o.retryConnection())}),u(11,"Retry"),b(),y(12,"button",22),A("click",function(){D(n);let o=m(2);return M(o.showLog())}),u(13,"Show log"),b()()()}if(t&2){let n=e;d(4),k(n.message),d(2),k(n.detail)}}function WV(t,e){if(t&1){let n=$();y(0,"section",18)(1,"strong"),u(2,"Offline \u2014 reconnecting"),b(),y(3,"p"),u(4," Morse keeps retrying in the background; the rest of the interface stays available while it does. "),b(),y(5,"div",20)(6,"button",21),A("click",function(){D(n);let o=m(2);return M(o.retryConnection())}),u(7,"Retry now"),b(),y(8,"button",22),A("click",function(){D(n);let o=m(2);return M(o.showConnectionHelp())}),u(9," Connection help "),b()()()}}function YV(t,e){if(t&1){let n=$();y(0,"section",19)(1,"strong"),u(2,"Pi agent unavailable"),b(),y(3,"p"),u(4),b(),y(5,"div",20)(6,"button",21),A("click",function(){D(n);let o=m(2);return M(o.retryAgent())}),u(7,"Retry"),b(),y(8,"button",22),A("click",function(){D(n);let o=m(2);return M(o.openSettings())}),u(9,"Open settings"),b(),y(10,"button",22),A("click",function(){D(n);let o=m(2);return M(o.showLog())}),u(11,"Show log"),b()()()}if(t&2){let n=m(2);d(4),k(n.agentError()||"Morse could not start the pi coding agent.")}}function KV(t,e){t&1&&ve(0,"morse-agent-screen")}function ZV(t,e){t&1&&ve(0,"morse-chat-transcript")(1,"morse-interaction-panel")(2,"morse-chat-composer")}function QV(t,e){if(t&1&&(w(0,qV,14,2,"section",18)(1,WV,10,0,"section",18)(2,YV,12,1,"section",19),w(3,KV,1,0,"morse-agent-screen")(4,ZV,3,0)),t&2){let n,i=m();S((n=i.lastError())?0:i.offline()?1:i.agentBanner()?2:-1,n),d(3),S(i.agentScreen()?3:4)}}function XV(t,e){if(t&1){let n=$();y(0,"div",23)(1,"span",24),u(2),b(),y(3,"button",25),A("click",function(){D(n);let o=m();return M(o.dismissToast())}),u(4," \xD7 "),b()()}if(t&2){let n=e;Tn(n.level),d(2),k(n.text)}}function JV(t,e){if(t&1&&ve(0,"morse-git-panel",10),t&2){let n=m();q("expanded",n.gitExpanded())}}function ej(){return typeof location>"u"?!1:new URL(location.href,"http://localhost/").searchParams.get("boot")==="1"}var Fu=class t{morse=N(Ze);shell=N(Ht);tabs=N(dn);shortcuts=N(An);dropZone=N(Mu);animation=N(ln);attachments=N(Ui);destroyRef=N(pt);dismissedNoticeAt=O(null);noticeTimer;bootPreview=ej();bootPending=this.animation.isEnabled&&(this.bootPreview||this.morse.connection()==="connecting");bootForceTimer;bootVisible=O(this.bootPending);bootForced=O(!1);connectionDismissed=O(!1);offline=O(!1);navigationOpen=this.shell.navigationOpen;tabsEnabled=E(()=>this.morse.capabilities()?.filePreview===!0);gitEnabled=E(()=>this.morse.capabilities()?.gitPanel===!0);gitOpen=E(()=>this.gitEnabled()&&this.shell.gitPanelOpen());gitExpanded=E(()=>this.gitOpen()&&this.shell.gitPanelExpanded());gitWidth=E(()=>{let e=this.shell.gitPanelWidth();return e===void 0?null:`${e}px`});activeFile=E(()=>{let e=this.tabs.activeTab();return e?.kind==="file"?e:void 0});focusedSession;projectPickerOpen=this.shell.projectPickerOpen;aboutOpen=this.shell.aboutOpen;shortcutsOpen=this.shell.shortcutsOpen;navigationCollapsed=this.shell.navigationCollapsed;compactConfirmOpen=this.shell.compactConfirmOpen;compactBody=E(()=>{let e="pi replaces the conversation it is holding with a summary, so the next turn starts from less context. The transcript in this window is untouched.",n=this.shell.compactInstructions();return n?`${e} Your instructions: \u201C${n}\u201D.`:e});connection=this.morse.connection;agentReady=this.morse.agentReady;agentStarting=this.morse.agentStarting;agentError=this.morse.agentError;agentBlocked=E(()=>this.connection()==="ready"&&!this.agentReady()&&!this.agentStarting()&&this.agentError()!==void 0);agentScreen=E(()=>this.agentBlocked()&&this.morse.items().length===0);agentBanner=E(()=>this.agentBlocked()&&!this.agentScreen());lastError=this.morse.lastError;dragging=this.dropZone.active;toast=E(()=>{let e=this.morse.lastNotice(),n=this.attachments.notice(),i=n&&(!e||n.at>=e.at)?n:e;return!i||i.at===this.dismissedNoticeAt()?null:i});autoDismiss=se(()=>{let e=this.toast();if(this.clearNoticeTimer(),!e)return;let n=e.level==="warn"||e.level==="error"?6e3:3200;this.noticeTimer=setTimeout(()=>this.dismissedNoticeAt.set(e.at),n)});constructor(){let e=[this.shortcuts.bind("context.compact",()=>this.shell.requestCompact(),()=>this.morse.state().agentReady),this.shortcuts.bind("help.shortcuts",()=>this.shell.toggleShortcuts())];this.destroyRef.onDestroy(()=>{for(let n of e)n()}),this.bootPending&&(this.bootForceTimer=setTimeout(()=>this.bootForced.set(!0),7e3)),se(()=>{let n=this.morse.connection();if(n==="ready"){this.offline.set(!1),this.connectionDismissed.set(!1);return}(n==="error"||n==="closed"||this.morse.slowConnection())&&this.offline.set(!0)}),this.destroyRef.onDestroy(()=>{this.clearNoticeTimer(),this.clearBootTimer()}),se(()=>{if(!this.tabsEnabled())return;let n=this.morse.state(),i=n.sessionId;if(i===void 0){this.focusedSession=void 0,this.tabs.clearActiveSession();return}let o={id:i,title:this.sessionTitle(i,n.sessionTitle),cwd:n.workspace.cwd};if(i===this.focusedSession){this.tabs.refreshSession(o);return}this.focusedSession=i,this.tabs.showSession(o)})}onBootDismissed(){this.bootVisible.set(!1),this.clearBootTimer()}sessionTitle(e,n){return n!==void 0&&n.length>0?n:this.morse.sessions().find(o=>o.id===e)?.title??"New session"}onConnectionExplore(){this.connectionDismissed.set(!0)}showConnectionHelp(){this.connectionDismissed.set(!1)}onConnectionConnect(e){if(typeof location>"u")return;let n=new URL(location.href);n.searchParams.set("server",e),location.href=n.toString()}clearBootTimer(){this.bootForceTimer!==void 0&&(clearTimeout(this.bootForceTimer),this.bootForceTimer=void 0)}clearNoticeTimer(){this.noticeTimer!==void 0&&(clearTimeout(this.noticeTimer),this.noticeTimer=void 0)}bootReady=E(()=>{if(this.bootForced())return!0;let e=this.morse.connection();return e==="error"||e==="closed"||this.morse.slowConnection()?!0:e==="ready"});bootStatus=E(()=>this.morse.connection()!=="ready"?"Connecting to the host\u2026":this.morse.agentStarting()?"Starting the pi agent\u2026":this.morse.agentError()!==void 0?"The agent could not start":"Ready");connectionScreen=E(()=>{if(this.bootVisible()||this.connectionDismissed()||!this.offline())return null;let e=this.lastError();return e?{eyebrow:"Handshake refused",title:"The host turned this frontend away",body:"The socket is up, but the handshake was rejected. That usually means the frontend and the host disagree on the wire protocol \u2014 rebuild both together.",detail:e.detail?`${e.message} \u2014 ${e.detail}`:e.message}:this.morse.slowConnection()&&this.morse.connection()==="connecting"?{eyebrow:"No answer yet",title:"The host is not answering",body:"A socket opened but the handshake never came back. The host may still be starting, or this address is not a Morse host.",detail:this.morse.connectionDetail()??""}:{eyebrow:"Offline \xB7 reconnecting",title:"Morse is waiting for a host",body:"This window is only the frontend, and it keeps working while the host is away. Nothing is lost \u2014 your sessions live with the host and in pi\u2019s session files \u2014 so start the host again and this screen will clear itself.",detail:this.morse.connectionDetail()??""}});confirmCompact(){let e=this.shell.compactInstructions();this.shell.closeCompactPrompt(),this.morse.compactSession(e)}cancelCompact(){this.shell.closeCompactPrompt()}closeNavigation(){this.shell.closeNavigation()}retryConnection(){this.morse.ready()}reload(){typeof location<"u"&&location.reload()}retryAgent(){this.morse.newSession()}openSettings(){this.morse.hostCommand("openSettings")}showLog(){this.morse.hostCommand("showOutput")}dismissToast(){this.dismissedNoticeAt.set(this.toast()?.at??this.morse.lastNotice()?.at??null)}liveDropzone=se(()=>{let e=this.dragging();this.stopDropzoneLoops(),e&&setTimeout(()=>{if(!this.dragging())return;let n=globalThis.document?.querySelector(".dropzone")??void 0;if(!n)return;let i=n.querySelector(".dropzone-card"),o=n.querySelector(".dropzone-icon"),r=n.querySelector(".dropzone-ring");this.dropzoneStops=[this.animation.loop(r,{scale:[1,1.035],opacity:[.9,.25]},{duration:1100}),this.animation.loop(i,{scale:[1,1.03]},{duration:700}),this.animation.loop(o,{translateY:[1.5,-3]},{duration:520})]},0)});dropzoneStops=[];stopDropzoneLoops(){for(let e of this.dropzoneStops)e();this.dropzoneStops=[]}onDragEnter(e){this.dropZone.onDragEnter(e)}onDragOver(e){this.dropZone.onDragOver(e)}onDragLeave(){this.dropZone.onDragLeave()}onDrop(e){this.dropZone.onDrop(e,this.morse.state().workspace.cwd)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["app-root"]],decls:17,vars:24,consts:[[1,"shell"],[3,"ready","status"],[3,"eyebrow","title","body","detail"],[1,"nav"],["title","Compact the conversation?","note","It costs a model call, and the summary is what pi remembers from then on \u2014 this cannot be undone.","confirmLabel","Compact context",3,"body"],["type","button","aria-label","Close navigation",1,"scrim"],[1,"chat",3,"dragenter","dragover","dragleave","drop"],["aria-hidden","true",1,"dropzone"],[3,"tab"],["role","status",1,"toast",3,"class"],[1,"git-panel",3,"expanded"],[3,"dismissed","ready","status"],[3,"retry","explore","connect","eyebrow","title","body","detail"],["title","Compact the conversation?","note","It costs a model call, and the summary is what pi remembers from then on \u2014 this cannot be undone.","confirmLabel","Compact context",3,"confirmed","cancelled","body"],["type","button","aria-label","Close navigation",1,"scrim",3,"click"],[1,"dropzone-ring"],[1,"dropzone-card",3,"morseEnter","morseEnterY"],[1,"dropzone-icon"],["role","status",1,"alert","offline"],["role","alert",1,"alert"],[1,"actions"],["type","button",3,"click"],["type","button",1,"secondary",3,"click"],["role","status",1,"toast"],[1,"toast-text"],["type","button","aria-label","Dismiss",1,"toast-close",3,"click"]],template:function(n,i){if(n&1&&(y(0,"div",0),w(1,LV,1,2,"morse-boot-splash",1),w(2,FV,1,4,"morse-connection-screen",2),ve(3,"morse-session-nav",3),w(4,VV,1,0,"morse-project-picker"),w(5,jV,1,0,"morse-about-dialog"),w(6,$V,1,0,"morse-shortcuts-dialog"),w(7,BV,1,1,"morse-confirm-dialog",4),w(8,HV,1,0,"button",5),y(9,"main",6),A("dragenter",function(r){return i.onDragEnter(r)})("dragover",function(r){return i.onDragOver(r)})("dragleave",function(){return i.onDragLeave()})("drop",function(r){return i.onDrop(r)}),w(10,UV,11,2,"div",7),ve(11,"morse-chat-header"),w(12,zV,1,0,"morse-tab-strip"),w(13,GV,1,1,"morse-file-preview",8)(14,QV,5,2),w(15,XV,5,3,"div",9),b(),w(16,JV,1,1,"morse-git-panel",10),b()),n&2){let o,r,s;At("--%NS%morse-git-width",i.gitWidth()),X("collapsed",i.navigationCollapsed())("with-git",i.gitOpen())("git-expanded",i.gitExpanded()),d(),S(i.bootVisible()?1:-1),d(),S((o=i.connectionScreen())?2:-1,o),d(),X("open",i.navigationOpen()),d(),S(i.projectPickerOpen()?4:-1),d(),S(i.aboutOpen()?5:-1),d(),S(i.shortcutsOpen()?6:-1),d(),S(i.compactConfirmOpen()?7:-1),d(),S(i.navigationOpen()?8:-1),d(),X("dropping",i.dragging()),d(),S(i.dragging()?10:-1),d(2),S(i.tabsEnabled()?12:-1),d(),S((r=i.activeFile())?13:14,r),d(2),S((s=i.toast())?15:-1,s),d(),S(i.gitOpen()?16:-1)}},dependencies:[Nu,Ou,Pu,Au,Lu,Ru,su,bu,Cu,ru,wu,xu,Tu,un,Ld,Fd],styles:["[_nghost-%COMP%]{display:block;height:100%}.shell[_ngcontent-%COMP%]{position:relative;display:grid;grid-template-columns:var(--%NS%morse-nav-width) minmax(0,1fr);grid-template-rows:minmax(0,1fr);height:100%;min-height:0;overflow:hidden;background:var(--%NS%morse-bg)}.nav[_ngcontent-%COMP%]{min-width:0}.shell.with-git[_ngcontent-%COMP%]{grid-template-columns:var(--%NS%morse-nav-width) minmax(0,1fr) var(--%NS%morse-git-width)}.git-panel[_ngcontent-%COMP%]{min-width:0}.shell.git-expanded[_ngcontent-%COMP%]{grid-template-columns:var(--%NS%morse-nav-width) minmax(0,1fr)}.shell.git-expanded[_ngcontent-%COMP%] .chat[_ngcontent-%COMP%]{display:none}@media(min-width:760px){.nav[_ngcontent-%COMP%]{width:var(--%NS%morse-nav-width)}.shell[_ngcontent-%COMP%]{transition:grid-template-columns .16s ease}.shell.collapsed[_ngcontent-%COMP%]{grid-template-columns:0 minmax(0,1fr)}.shell.collapsed.with-git[_ngcontent-%COMP%]{grid-template-columns:0 minmax(0,1fr) var(--%NS%morse-git-width)}.shell.collapsed.git-expanded[_ngcontent-%COMP%]{grid-template-columns:0 minmax(0,1fr)}.shell.collapsed[_ngcontent-%COMP%] .nav[_ngcontent-%COMP%]{visibility:hidden}}@media(prefers-reduced-motion:reduce){.shell[_ngcontent-%COMP%]{transition:none}}.chat[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:0;min-height:0;position:relative}.dropzone[_ngcontent-%COMP%]{position:absolute;inset:0;z-index:15;display:flex;align-items:center;justify-content:center;padding:16px;pointer-events:none;background:color-mix(in srgb,var(--%NS%morse-accent) 12%,transparent);border:2px dashed color-mix(in srgb,var(--%NS%morse-accent) 70%,transparent);border-radius:var(--%NS%morse-radius-md);animation:_ngcontent-%COMP%_dropzone-in .14s ease-out}.dropzone-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:4px;max-width:320px;padding:14px 18px;border:1px solid var(--%NS%morse-accent);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));color:var(--%NS%morse-fg);box-shadow:0 8px 24px #0000004d;text-align:center;font-size:12px}.dropzone-card[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:13px}.dropzone-card[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--%NS%morse-font-mono);font-size:11px;padding:0 4px;border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-hover)}.dropzone-icon[_ngcontent-%COMP%]{font-size:18px;color:var(--%NS%morse-accent)}.dropzone-ring[_ngcontent-%COMP%]{position:absolute;inset:6px;border:2px dashed color-mix(in srgb,var(--%NS%morse-accent) 45%,transparent);border-radius:var(--%NS%morse-radius-md);pointer-events:none}@keyframes _ngcontent-%COMP%_dropzone-in{0%{opacity:0}}.scrim[_ngcontent-%COMP%]{display:none}.alert[_ngcontent-%COMP%]{margin:10px;padding:10px 12px;border:1px solid var(--%NS%morse-error);border-radius:var(--%NS%morse-radius-md);background:var(--%NS%morse-hover);display:flex;flex-direction:column;gap:8px}.alert[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;white-space:pre-wrap;color:var(--%NS%morse-fg-muted)}.alert.offline[_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--%NS%morse-warn) 55%,var(--%NS%morse-border))}.actions[_ngcontent-%COMP%]{display:flex;gap:6px;flex-wrap:wrap}.toast[_ngcontent-%COMP%]{position:absolute;z-index:30;top:10px;right:10px;max-width:min(420px,calc(100% - 20px));display:flex;align-items:flex-start;gap:6px;padding:8px 8px 8px 10px;border-radius:var(--%NS%morse-radius-md);border-left:3px solid var(--%NS%morse-info);background:var(--%NS%morse-panel, var(--%NS%morse-badge-bg));color:var(--%NS%morse-fg);box-shadow:0 8px 24px #0000004d;animation:_ngcontent-%COMP%_toast-in .16s ease-out}.toast-text[_ngcontent-%COMP%]{flex:1;min-width:0;white-space:pre-wrap;font-size:12px;line-height:1.45}.toast-close[_ngcontent-%COMP%]{flex:none;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:14px;line-height:1;cursor:pointer}.toast-close[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.toast.warn[_ngcontent-%COMP%]{border-color:var(--%NS%morse-warn)}.toast.error[_ngcontent-%COMP%]{border-color:var(--%NS%morse-error)}.toast.success[_ngcontent-%COMP%]{border-color:var(--%NS%morse-success)}@keyframes _ngcontent-%COMP%_toast-in{0%{opacity:0;transform:translateY(-6px)}}@media(max-width:759px){.shell[_ngcontent-%COMP%], .shell.with-git[_ngcontent-%COMP%], .shell.git-expanded[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr)}.shell.git-expanded[_ngcontent-%COMP%] .git-panel[_ngcontent-%COMP%]{position:static;width:auto;box-shadow:none}.shell[_ngcontent-%COMP%] > .git-panel[_ngcontent-%COMP%]{position:absolute;z-index:20;top:0;bottom:0;right:0;width:min(86%,340px);box-shadow:0 0 24px #00000059}.nav[_ngcontent-%COMP%]{position:absolute;z-index:20;top:0;bottom:0;left:0;width:min(86%,320px);transform:translate(-102%);transition:transform .16s ease;box-shadow:0 0 24px #00000059}.nav.open[_ngcontent-%COMP%]{transform:none}.scrim[_ngcontent-%COMP%]{display:block;position:absolute;z-index:10;inset:0;border:0;padding:0;background:#00000059}.scrim[_ngcontent-%COMP%]:hover, .scrim[_ngcontent-%COMP%]:active{background:#00000059}}"]})};Zm(Fu,Pv).catch(t=>console.error(t));
|
|
98
|
+
`).length;return Array.from({length:n},(i,o)=>o+1)});highlighted=E(()=>{let e=this.tab();return e.content===void 0||e.binary?this.sanitizer.bypassSecurityTrustHtml(""):this.sanitizer.bypassSecurityTrustHtml(Is(this.source(),e.language).html)});language=E(()=>this.tab().language??"text");size=E(()=>JL(this.tab().size??0));changed=E(()=>Ud(this.workspace.status()).get(this.tab().path));mode=E(()=>this.changed()===void 0?"file":this.display.diffView());diffText=E(()=>{let e=this.tab();return e.diff!==void 0&&e.diff.trim().length>0?e.diff:this.changed()==="U"&&e.content!==void 0&&!e.binary?TE(e.content):e.diff??""});parsed=E(()=>EE(this.diffText()));unified=E(()=>wE(this.parsed()));split=E(()=>SE(this.parsed()));unifiedView=E(()=>{let e=this.language();return this.unified().map(n=>K(V({},n),{html:n.kind==="hunk"?"":this.sanitizer.bypassSecurityTrustHtml(Is(n.text,e).html)}))});splitView=E(()=>{let e=this.language(),n=i=>i===void 0?void 0:K(V({},i),{html:this.sanitizer.bypassSecurityTrustHtml(Is(i.text,e).html)});return this.split().map(i=>({hunk:i.hunk,left:n(i.left),right:n(i.right)}))});diffStats=E(()=>{let e=this.parsed();return`+${e.additions} \u2212${e.deletions}`});lineHeight=O(XL);selected=O(void 0);editingId=O(void 0);mergedId=O(void 0);anchor=1;rangeLabel=E(()=>DE(this.selected()));highlights=E(()=>{let e=this.tab().path,n=this.editingId(),i=this.attachments.pins().filter(r=>r.path===e&&r.startLine!==void 0&&r.id!==n).map(r=>({id:r.id,start:r.startLine,end:r.endLine??r.startLine})),o=this.selected();return o===void 0?i:[...i,{id:"live",start:o.start,end:o.end}]});pinnedCount=E(()=>this.highlights().filter(e=>e.id!=="live").length);topOf(e){return(e.start-1)*this.lineHeight()}heightOf(e){return(e.end-e.start+1)*this.lineHeight()}constructor(){no(()=>this.measureLineHeight()),se(()=>{this.tab(),ii(()=>this.selected.set(void 0))}),se(()=>{if(this.mode()==="file"||this.changed()===void 0)return;let e=this.tab().id;ii(()=>this.tabs.loadDiff(e))})}setMode(e){this.display.setDiffView(e)}diffSign(e){if(e===void 0)return"";switch(e.kind){case"add":return"+";case"del":return"\u2212";case"context":return" ";default:return""}}isChangePinned(e){if(e===void 0)return!1;let n=this.tab().path;return this.attachments.pins().some(i=>i.path===n&&i.startLine!==void 0&&e>=i.startLine&&e<=(i.endLine??i.startLine))}toggleChange(e){let n=e!==void 0&&e.kind!=="hunk"?e.change:void 0;if(n===void 0)return;let i=this.tab().path,o=this.attachments.pins().find(r=>r.path===i&&r.startLine!==void 0&&r.startLine<=n.start&&(r.endLine??r.startLine)>=n.end);if(o!==void 0){this.attachments.removePin(o.id);return}this.attachments.pin({path:i,startLine:n.start,endLine:n.end>n.start?n.end:void 0}),this.attachments.say("info",`Pinned ${this.tab().title} ${DE(n)} to this message.`)}isSelected(e){return this.highlights().some(n=>e>=n.start&&e<=n.end)}startSelection(e,n){if(e.button!==0)return;e.preventDefault(),this.anchor=n,this.editingId.set(this.highlights().find(s=>s.id!=="live"&&n>=s.start&&n<=s.end)?.id),this.selected.set({start:n,end:n});let i=e.currentTarget;try{i.setPointerCapture(e.pointerId)}catch{}let o=s=>{let a=this.lineAt(s.clientY);a!==void 0&&this.selected.set({start:Math.min(this.anchor,a),end:Math.max(this.anchor,a)})},r=()=>{i.removeEventListener("pointermove",o),i.removeEventListener("pointerup",r),i.removeEventListener("pointercancel",r),this.pinSelection()};i.addEventListener("pointermove",o),i.addEventListener("pointerup",r),i.addEventListener("pointercancel",r)}clearSelection(){this.selected.set(void 0),this.editingId.set(void 0)}reload(){this.tabs.reload(this.tab().id)}startResizeEdge(e,n,i){if(e.button!==0)return;e.preventDefault(),e.stopPropagation();let o=e.currentTarget;try{o.setPointerCapture(e.pointerId)}catch{}let r=a=>{let c=this.lineAt(a.clientY);if(c===void 0)return;let l=this.attachments.pins().find(C=>C.id===n.id),p=l?.startLine??n.start,f=l?.endLine??p,_=i==="start"?Math.min(c,f):p,x=i==="end"?Math.max(c,p):f;this.attachments.setPinRange(n.id,{startLine:_,endLine:x>_?x:void 0})},s=()=>{o.removeEventListener("pointermove",r),o.removeEventListener("pointerup",s),o.removeEventListener("pointercancel",s);let a=this.attachments.pins().find(c=>c.id===n.id);if(a?.startLine!==void 0){let c=this.attachments.pins().length,l=this.attachments.pin({path:this.tab().path,startLine:a.startLine,endLine:a.endLine},n.id);this.attachments.pins().length<c&&this.celebrate(l,{start:a.startLine,end:a.endLine??a.startLine})}};o.addEventListener("pointermove",r),o.addEventListener("pointerup",s),o.addEventListener("pointercancel",s)}measureLineHeight(){let e=this.sourceElement()?.nativeElement;if(e===void 0)return;let n=Number.parseFloat(getComputedStyle(e).lineHeight);Number.isFinite(n)&&n>0&&this.lineHeight.set(n)}lineAt(e){let n=this.gutterElement()?.nativeElement;if(n===void 0)return;let i=n.getBoundingClientRect().top,o=Math.floor((e-i)/this.lineHeight())+1;return Math.min(this.lines().length,Math.max(1,o))}pinSelection(){let e=this.selected();if(e===void 0)return;let n=e.end>e.start?e.end:void 0,i=this.attachments.pins().length,o=this.attachments.pin({path:this.tab().path,startLine:e.start,endLine:n},this.editingId());this.attachments.pins().length<i&&this.celebrate(o,{start:e.start,end:e.end}),this.attachments.say("info",`Pinned ${this.tab().title} ${this.rangeLabel()} to this message.`),this.selected.set(void 0),this.editingId.set(void 0)}celebrate(e,n){if(e.length===0)return;this.mergedId.set(e),setTimeout(()=>{this.mergedId()===e&&this.mergedId.set(void 0)},720);let i=this.attachments.pins().find(l=>l.id===e),o=this.sourceElement()?.nativeElement.closest(".source-wrap");if(i?.startLine===void 0||!(o instanceof HTMLElement))return;let r=i.startLine,s=i.endLine??r,a=this.lineHeight(),c=s>n.end?n.end*a:r<n.start?(n.start-1)*a:((n.start+n.end)/2-.5)*a;this.animation.confetti(o,{x:o.clientWidth/2,y:c})}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-file-preview"]],viewQuery:function(n,i){n&1&>(i.sourceElement,SL,5)(i.gutterElement,TL,5),n&2&&vt(2)},inputs:{tab:[1,"tab"]},decls:18,vars:7,consts:[["gutter",""],["source",""],[1,"head"],[1,"path",3,"title"],[1,"meta"],[1,"range",3,"title"],[1,"badge"],[1,"stat"],["type","button","title","Reload from disk","aria-label","Reload from disk",1,"icon",3,"click"],[1,"hint"],[1,"hint","error"],["role","group","aria-label","Preview mode",1,"modes"],["type","button","title","The file's content",3,"click"],["type","button","title","Unified diff",3,"click"],["type","button","title","Side-by-side diff",3,"click"],[1,"diff","split"],[1,"diff"],[1,"drow","hunk"],[1,"srow"],[1,"dtext"],[1,"side",3,"click"],[1,"dnum"],[1,"dsign"],[1,"dtext",3,"innerHTML"],[1,"drow",3,"add","del","clickable","pinned"],[1,"drow",3,"click"],[1,"code"],["title","Drag line numbers to pin a range to your next message",1,"gutter"],[1,"num",3,"selected"],[1,"source-wrap"],[1,"source"],[1,"hljs",3,"innerHTML"],[1,"selection",3,"merged","top","height"],[1,"num",3,"pointerdown"],[1,"selection"],["title","Drag to resize","aria-hidden","true",1,"edge","top",3,"pointerdown"],["title","Drag to resize","aria-hidden","true",1,"edge","bottom",3,"pointerdown"]],template:function(n,i){if(n&1&&(h(0,"header",2)(1,"span",3),u(2),g(),h(3,"div",4),w(4,kL,8,7),w(5,IL,2,2,"span",5)(6,NL,2,2,"span",5),h(7,"span",6),u(8),g(),h(9,"span",7),u(10),g(),h(11,"button",8),F("click",function(){return i.reload()}),u(12," \u27F3 "),g()()(),w(13,zL,6,1)(14,GL,2,1,"p",9)(15,qL,2,1,"p",10)(16,WL,2,1,"p",9)(17,QL,12,2)),n&2){let o,r;d(),ie("title",i.tab().path),d(),k(i.tab().path),d(2),S(i.changed()?4:-1),d(),S((o=i.rangeLabel())?5:i.pinnedCount()>0?6:-1,o),d(3),k(i.language()),d(2),k(i.size()),d(3),S(i.mode()!=="file"?13:i.tab().loading?14:(r=i.tab().error)?15:i.tab().binary?16:17,r)}},styles:['[_nghost-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0;min-width:0}.head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;flex:none;min-height:var(--%NS%morse-head-height);padding:0 10px 0 14px;border-bottom:1px solid var(--%NS%morse-border)}.path[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--%NS%morse-font-mono);font-size:12px;color:var(--%NS%morse-fg)}.meta[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;flex:none}.badge[_ngcontent-%COMP%]{padding:1px 6px;border-radius:999px;background:var(--%NS%morse-badge-bg, var(--%NS%morse-hover));color:var(--%NS%morse-fg-muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.05em}.stat[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted);font-size:11px}.range[_ngcontent-%COMP%]{padding:1px 7px;border-radius:999px;background:color-mix(in srgb,var(--%NS%morse-accent) 22%,transparent);color:var(--%NS%morse-fg);font-size:11px;font-variant-numeric:tabular-nums}.icon[_ngcontent-%COMP%]{width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--%NS%morse-radius-sm);background:none;color:var(--%NS%morse-fg-muted);cursor:pointer}.icon[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.modes[_ngcontent-%COMP%]{display:inline-flex;flex:none;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);overflow:hidden}.modes[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{padding:2px 8px;border:0;background:transparent;color:var(--%NS%morse-fg-muted);font:inherit;font-size:11px;cursor:pointer}.modes[_ngcontent-%COMP%] button[_ngcontent-%COMP%] + button[_ngcontent-%COMP%]{border-left:1px solid var(--%NS%morse-border)}.modes[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.modes[_ngcontent-%COMP%] button.on[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--%NS%morse-accent) 24%,transparent);color:var(--%NS%morse-fg)}.diff[_ngcontent-%COMP%]{flex:1;min-height:0;overflow:auto;padding:6px 0;background:var(--%NS%morse-code-bg, var(--%NS%morse-bg));font-family:var(--%NS%morse-font-mono);font-size:12px;line-height:1.6}.drow[_ngcontent-%COMP%], .srow[_ngcontent-%COMP%]{display:flex;align-items:stretch;min-height:1.6em}.dtext[_ngcontent-%COMP%]{flex:1;min-width:0;padding:0 16px 0 6px;white-space:pre-wrap;overflow-wrap:anywhere}.dnum[_ngcontent-%COMP%]{flex:none;min-width:44px;padding:0 8px 0 10px;color:var(--%NS%morse-fg-muted);text-align:right;-webkit-user-select:none;user-select:none;font-variant-numeric:tabular-nums;opacity:.7}.dsign[_ngcontent-%COMP%]{flex:none;width:14px;text-align:center;color:var(--%NS%morse-fg-muted);-webkit-user-select:none;user-select:none}.drow.add[_ngcontent-%COMP%], .side.add[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--%NS%morse-success) 14%,transparent)}.drow.del[_ngcontent-%COMP%], .side.del[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--%NS%morse-error) 14%,transparent)}.drow.add[_ngcontent-%COMP%] .dsign[_ngcontent-%COMP%], .side.add[_ngcontent-%COMP%] .dsign[_ngcontent-%COMP%]{color:var(--%NS%morse-success)}.drow.del[_ngcontent-%COMP%] .dsign[_ngcontent-%COMP%], .side.del[_ngcontent-%COMP%] .dsign[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.drow.clickable[_ngcontent-%COMP%], .side.clickable[_ngcontent-%COMP%]{cursor:pointer}.drow.clickable[_ngcontent-%COMP%]:hover, .side.clickable[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--%NS%morse-accent) 12%,transparent)}.drow.pinned[_ngcontent-%COMP%], .side.pinned[_ngcontent-%COMP%]{background:color-mix(in srgb,var(--%NS%morse-accent) 22%,transparent);box-shadow:inset 2px 0 color-mix(in srgb,var(--%NS%morse-accent) 70%,transparent)}.drow.hunk[_ngcontent-%COMP%]{margin:6px 0 2px;padding:2px 12px;background:var(--%NS%morse-code-head, var(--%NS%morse-hover));color:var(--%NS%morse-fg-muted)}.srow[_ngcontent-%COMP%] .side[_ngcontent-%COMP%]{flex:1 1 50%;min-width:0;display:flex;align-items:stretch;border-left:1px solid var(--%NS%morse-border)}.srow[_ngcontent-%COMP%] .side[_ngcontent-%COMP%]:first-child{border-left:0}.code[_ngcontent-%COMP%]{display:flex;flex:1;min-height:0;overflow:auto;padding:8px 0;background:var(--%NS%morse-code-bg, var(--%NS%morse-bg))}pre[_ngcontent-%COMP%], .gutter[_ngcontent-%COMP%]{margin:0;font-family:var(--%NS%morse-font-mono);font-size:12px;line-height:1.6}.gutter[_ngcontent-%COMP%]{flex:none;position:sticky;left:0;z-index:2;padding:0 10px 0 14px;color:var(--%NS%morse-fg-muted);text-align:right;-webkit-user-select:none;user-select:none;background:var(--%NS%morse-code-bg, var(--%NS%morse-bg));opacity:.7}.gutter[_ngcontent-%COMP%] .num[_ngcontent-%COMP%]{display:block;height:1.6em;cursor:pointer;font-variant-numeric:tabular-nums}.gutter[_ngcontent-%COMP%] .num.selected[_ngcontent-%COMP%]{color:var(--%NS%morse-fg);background:color-mix(in srgb,var(--%NS%morse-accent) 34%,transparent);opacity:1}.source-wrap[_ngcontent-%COMP%]{position:relative;flex:1;min-width:0}.source[_ngcontent-%COMP%]{position:relative;z-index:1;padding:0 16px 0 4px;white-space:pre}.selection[_ngcontent-%COMP%]{position:absolute;left:0;right:0;z-index:2;pointer-events:none;background:color-mix(in srgb,var(--%NS%morse-accent) 16%,transparent);border-left:2px solid color-mix(in srgb,var(--%NS%morse-accent) 70%,transparent)}.selection.merged[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_selection-merged .62s ease-out}@keyframes _ngcontent-%COMP%_selection-merged{0%{background:color-mix(in srgb,var(--%NS%morse-accent) 60%,transparent);box-shadow:inset 0 0 0 2px color-mix(in srgb,var(--%NS%morse-accent) 80%,transparent)}to{background:color-mix(in srgb,var(--%NS%morse-accent) 16%,transparent);box-shadow:inset 0 0 0 0 transparent}}@property --%NS%morse-rainbow{syntax: "<angle>"; initial-value: 0deg; inherits: false;}.selection.merged[_ngcontent-%COMP%]:after{content:"";position:absolute;inset:0;border-radius:3px;padding:2px;background:conic-gradient(from var(--%NS%morse-rainbow),#f43f5e,#fb923c,#facc15,#4ade80,#38bdf8,#a78bfa,#f43f5e);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude;pointer-events:none;animation:_ngcontent-%COMP%_morse-rainbow-spin .7s linear}@keyframes _ngcontent-%COMP%_morse-rainbow-spin{0%{--%NS%morse-rainbow: 0deg}to{--%NS%morse-rainbow: 360deg}}.edge[_ngcontent-%COMP%]{position:absolute;left:0;right:0;height:6px;pointer-events:auto;cursor:ns-resize}.edge.top[_ngcontent-%COMP%]{top:-3px}.edge.bottom[_ngcontent-%COMP%]{bottom:-3px}.edge[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--%NS%morse-accent) 70%,transparent)}.hint[_ngcontent-%COMP%]{margin:0;padding:12px 16px;color:var(--%NS%morse-fg-muted);font-size:12px}.hint.error[_ngcontent-%COMP%]{color:var(--%NS%morse-warn)}']})};function JL(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(t<10*1024?1:0)} KB`:`${(t/(1024*1024)).toFixed(1)} MB`}var eF=(t,e)=>e.value;function tF(t,e){t&1&&(h(0,"p",1),u(1),g()),t&2&&(d(),k(e))}function nF(t,e){if(t&1){let n=$();h(0,"button",4),F("click",function(){let o=D(n).$implicit,r=m(3);return M(r.choose(o.value))}),u(1),g()}if(t&2){let n=e.$implicit;d(),ae(" ",n.label," ")}}function iF(t,e){if(t&1&&(w(0,tF,2,1,"p",1),h(1,"div",2),oe(2,nF,2,1,"button",3,eF),g()),t&2){let n,i=m(),o=m();S((n=o.messageOf(i))?0:-1,n),d(2),re(o.optionsOf(i))}}function oF(t,e){if(t&1){let n=$();h(0,"p"),u(1),g(),h(2,"div",2)(3,"button",5),F("click",function(){D(n);let o=m(2);return M(o.decide(!0))}),u(4,"Yes"),g(),h(5,"button",4),F("click",function(){D(n);let o=m(2);return M(o.decide(!1))}),u(6,"No"),g()()}if(t&2){let n=m(),i=m();d(),k(i.messageOf(n))}}function rF(t,e){if(t&1){let n=$();h(0,"input",6),F("input",function(o){D(n);let r=m(2);return M(r.onInput(o))}),g(),h(1,"div",2)(2,"button",5),F("click",function(){D(n);let o=m(2);return M(o.submit())}),u(3,"Submit"),g(),h(4,"button",4),F("click",function(){D(n);let o=m(2);return M(o.cancel())}),u(5,"Cancel"),g()()}if(t&2){let n=m(),i=m();ie("value",i.value()||i.prefillOf(n))("placeholder",i.placeholderOf(n))}}function sF(t,e){if(t&1){let n=$();h(0,"textarea",7),F("input",function(o){D(n);let r=m(2);return M(r.onInput(o))}),g(),h(1,"div",2)(2,"button",5),F("click",function(){D(n);let o=m(2);return M(o.submit())}),u(3,"Submit"),g(),h(4,"button",4),F("click",function(){D(n);let o=m(2);return M(o.cancel())}),u(5,"Cancel"),g()()}if(t&2){let n=m(),i=m();ie("value",i.value()||i.prefillOf(n))}}function aF(t,e){if(t&1&&(h(0,"section",0)(1,"header"),u(2),g(),w(3,iF,4,1)(4,oF,7,1)(5,rF,6,2)(6,sF,6,1),g()),t&2){let n,i=e;d(2),k(i.title),d(),S((n=i.kind)==="select"?3:n==="confirm"?4:n==="input"?5:n==="editor"?6:-1)}}var Cu=class t{morse=N(Ze);request=this.morse.pendingInteraction;value=O("");visible=E(()=>this.request()!==null&&this.morse.capabilities()?.nativeDialogs!==!0);onInput(e){this.value.set(e.target.value)}choose(e){this.respond({value:e})}decide(e){this.respond({confirmed:e})}submit(){this.respond({value:this.value()}),this.value.set("")}cancel(){this.respond({cancelled:!0}),this.value.set("")}messageOf(e){return e.kind==="select"||e.kind==="confirm"?e.message??"":""}optionsOf(e){return e.kind==="select"?e.options:[]}placeholderOf(e){return e.kind==="input"?e.placeholder??"":""}prefillOf(e){return e.kind==="editor"||e.kind==="input"?e.value??"":""}respond(e){let n=this.request();n&&this.morse.respond(V({requestId:n.requestId},e))}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-interaction-panel"]],decls:1,vars:1,consts:[["role","dialog","aria-live","polite",1,"dialog"],[1,"muted"],[1,"options"],["type","button",1,"secondary"],["type","button",1,"secondary",3,"click"],["type","button",3,"click"],["type","text",3,"input","value","placeholder"],["rows","5",3,"input","value"]],template:function(n,i){if(n&1&&w(0,aF,7,2,"section",0),n&2){let o;S((o=i.visible()&&i.request())?0:-1,o)}},styles:[".dialog[_ngcontent-%COMP%]{margin:8px;padding:8px 10px;border:1px solid var(--%NS%morse-focus);border-radius:4px;background:var(--%NS%morse-blockquote);display:flex;flex-direction:column;gap:8px}header[_ngcontent-%COMP%]{font-weight:600}p[_ngcontent-%COMP%]{margin:0;white-space:pre-wrap}.options[_ngcontent-%COMP%]{display:flex;gap:6px;flex-wrap:wrap}"]})};function ME(t){let e={name:"",path:"",kind:"dir",children:[]},n=new Map([["",e]]),i=o=>{let r=n.get(o);if(r!==void 0)return r;let s=o.lastIndexOf("/"),a=i(s===-1?"":o.slice(0,s)),c={name:o.slice(s+1),path:o,kind:"dir",children:[]};return a.children.push(c),n.set(o,c),c};for(let o of t){let r=o.endsWith("/"),s=r?o.slice(0,-1):o;if(s.length===0)continue;if(r){i(s);continue}let a=s.lastIndexOf("/"),c=i(a===-1?"":s.slice(0,a));c.children.some(l=>l.kind==="file"&&l.path===s)||c.children.push({name:s.slice(a+1),path:s,kind:"file",children:[]})}return kE(e.children),e.children}function kE(t){t.sort((e,n)=>e.kind!==n.kind?e.kind==="dir"?-1:1:e.name.localeCompare(n.name,void 0,{sensitivity:"base"}));for(let e of t)kE(e.children)}function Eu(t){let e=t.lastIndexOf("."),n=e<=0?"":t.slice(e+1).toLowerCase();return["ts","tsx","js","jsx","mjs","cjs","py","go","php","rb","rs","java"].includes(n)?"\u25C6":["md","txt","rst"].includes(n)?"\xB6":["json","yaml","yml","toml","ini"].includes(n)?"\u2699":["css","scss","less","html","xml","svg"].includes(n)?"\u25C8":["sh","bash","zsh"].includes(n)?"\u276F":"\xB7"}var cF=t=>({items:t,label:"Open tabs"}),lF=t=>({items:t,label:"Mentioned files"}),dF=(t,e)=>e.id;function uF(t,e){t&1&&ve(0,"span",6)}function pF(t,e){if(t&1&&(y(0,"span",7),u(1),b()),t&2){let n=m().$implicit,i=m(2);d(),k(i.glyph(n))}}function fF(t,e){if(t&1){let n=$();y(0,"div",5),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.select(o.id))})("keydown.enter",function(){let o=D(n).$implicit,r=m(2);return M(r.select(o.id))})("keydown.space",function(){let o=D(n).$implicit,r=m(2);return M(r.select(o.id))})("contextmenu",function(o){let r=D(n).$implicit,s=m(2);return M(s.openMenu(o,r.id))})("auxclick",function(o){let r=D(n).$implicit,s=m(2);return M(s.onAuxClick(r.id,o))}),w(1,uF,1,0,"span",6)(2,pF,2,1,"span",7),y(3,"span",8),u(4),b(),y(5,"button",9),A("click",function(o){let r=D(n).$implicit,s=m(2);return M(s.close(r.id,o))}),u(6," \xD7 "),b()()}if(t&2){let n=e.$implicit,i=m(2);X("active",n.id===i.activeId())("running",n.kind==="session"&&i.isRunning(n.id)),q("title",i.title(n)),J("aria-selected",n.id===i.activeId()),d(),S(n.kind==="session"&&i.isRunning(n.id)?1:2),d(3),k(n.title),d(),q("title","Close "+n.title)}}function mF(t,e){t&1&&(y(0,"span",4),u(1,"No open tabs"),b())}function hF(t,e){if(t&1&&(y(0,"div",2),oe(1,fF,7,9,"div",3,dF,!1,mF,2,0,"span",4),b()),t&2){let n=e.items,i=e.label;J("aria-label",i),d(),re(n)}}function gF(t,e){if(t&1&&ka(0,1),t&2){let n=m(),i=ed(1);q("ngTemplateOutlet",i)("ngTemplateOutletContext",nd(2,lF,n.mentionTabs()))}}function yF(t,e){if(t&1){let n=$();y(0,"div",10),A("click",function(){D(n);let o=m();return M(o.closeMenu())})("contextmenu",function(o){D(n);let r=m();return o.preventDefault(),M(r.closeMenu())}),b(),y(1,"div",11)(2,"button",12),A("click",function(){D(n);let o=m();return M(o.menuClose())}),u(3,"Close"),b(),y(4,"button",13),A("click",function(){D(n);let o=m();return M(o.menuCloseOthers())}),u(5," Close Others "),b(),y(6,"button",13),A("click",function(){D(n);let o=m();return M(o.menuCloseToTheRight())}),u(7," Close to the Right "),b(),y(8,"button",12),A("click",function(){D(n);let o=m();return M(o.menuCloseAll())}),u(9,"Close All"),b()()}if(t&2){let n=e,i=m();d(),At("left",n.x,"px")("top",n.y,"px"),d(3),q("disabled",!i.closableOthers()),d(2),q("disabled",!i.canCloseToTheRight(n.id))}}var wu=class t{tabs=N(dn);morse=N(Ze);items=this.tabs.tabs;activeId=this.tabs.activeId;mainTabs=this.tabs.mainTabs;mentionTabs=this.tabs.mentionTabs;menuState=O(void 0);menu=this.menuState.asReadonly();closableOthers=E(()=>this.items().length>1);glyph(e){return e.kind==="session"?"\u2726":Eu(e.title)}isRunning(e){let n=this.morse.sessionActivity().get(e);if(n!==void 0)return n.streaming;let i=this.morse.state();return i.sessionId===e&&i.streaming}title(e){return e.kind==="file"?e.path:e.title}select(e){this.tabs.select(e)}close(e,n){n.stopPropagation(),this.tabs.close(e)}onAuxClick(e,n){n.button===1&&(n.preventDefault(),this.tabs.close(e))}openMenu(e,n){e.preventDefault(),e.stopPropagation(),this.menuState.set({x:Math.max(0,Math.min(e.clientX,window.innerWidth-190)),y:Math.max(0,Math.min(e.clientY,window.innerHeight-150)),id:n})}closeMenu(){this.menuState.set(void 0)}onEscape(){this.closeMenu()}canCloseToTheRight(e){let n=this.items().findIndex(i=>i.id===e);return n!==-1&&n<this.items().length-1}withMenu(e){let n=this.menuState();this.closeMenu(),n!==void 0&&e(n.id)}menuClose(){this.withMenu(e=>this.tabs.close(e))}menuCloseOthers(){this.withMenu(e=>this.tabs.closeOthers(e))}menuCloseToTheRight(){this.withMenu(e=>this.tabs.closeToTheRight(e))}menuCloseAll(){this.closeMenu(),this.tabs.closeAll()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-tab-strip"]],hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},decls:5,vars:6,consts:[["row",""],[3,"ngTemplateOutlet","ngTemplateOutletContext"],["role","tablist",1,"strip"],["role","tab","tabindex","0",1,"tab",3,"active","running","title"],[1,"empty"],["role","tab","tabindex","0",1,"tab",3,"click","keydown.enter","keydown.space","contextmenu","auxclick","title"],["aria-hidden","true",1,"live"],["aria-hidden","true",1,"glyph"],[1,"label"],["type","button","aria-label","Close tab",1,"close",3,"click","title"],[1,"context-menu-layer",3,"click","contextmenu"],["role","menu",1,"context-menu"],["type","button",1,"context-menu-item",3,"click"],["type","button",1,"context-menu-item",3,"click","disabled"]],template:function(n,i){if(n&1&&(Jl(0,hF,4,2,"ng-template",null,0,Vm),ka(2,1),w(3,gF,1,4,"ng-container",1),w(4,yF,10,6)),n&2){let o,r=ed(1);d(2),q("ngTemplateOutlet",r)("ngTemplateOutletContext",nd(4,cF,i.mainTabs())),d(),S(i.mentionTabs().length>0?3:-1),d(),S((o=i.menu())?4:-1,o)}},dependencies:[Bm],styles:["[_nghost-%COMP%]{display:block;flex:none;min-height:30px;border-bottom:1px solid var(--%NS%morse-border);background:var(--%NS%morse-nav-bg)}.strip[_ngcontent-%COMP%]{display:flex;align-items:stretch;gap:0;height:30px;padding:0;overflow-x:auto;scrollbar-width:none}.strip[_ngcontent-%COMP%]::-webkit-scrollbar{display:none}.strip[_ngcontent-%COMP%] + .strip[_ngcontent-%COMP%]{height:auto;min-height:30px;align-items:center;gap:6px;padding:4px 8px;border-top:1px solid var(--%NS%morse-border);background:var(--%NS%morse-panel, var(--%NS%morse-bg))}.strip[_ngcontent-%COMP%] + .strip[_ngcontent-%COMP%] .tab[_ngcontent-%COMP%]{height:22px;max-width:190px;padding:0 4px 0 8px;border:1px solid var(--%NS%morse-border);border-radius:999px;background:var(--%NS%morse-bubble, var(--%NS%morse-hover));font-size:11.5px}.strip[_ngcontent-%COMP%] + .strip[_ngcontent-%COMP%] .tab[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);border-color:var(--%NS%morse-accent);color:var(--%NS%morse-fg)}.strip[_ngcontent-%COMP%] + .strip[_ngcontent-%COMP%] .tab.active[_ngcontent-%COMP%]{border-color:var(--%NS%morse-accent);background:color-mix(in srgb,var(--%NS%morse-accent) 22%,transparent);color:var(--%NS%morse-fg);box-shadow:none}.strip[_ngcontent-%COMP%] + .strip[_ngcontent-%COMP%] .tab[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{width:15px;height:15px;font-size:11px;border-radius:999px}.tab[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;flex:none;max-width:170px;padding:0 8px 0 10px;margin:0;border:0;border-right:1px solid var(--%NS%morse-border);border-radius:0;background:none;color:var(--%NS%morse-fg-muted);font:inherit;font-size:12px;cursor:pointer}.tab[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.tab.active[_ngcontent-%COMP%]{background:var(--%NS%morse-panel, var(--%NS%morse-badge-bg));color:var(--%NS%morse-fg);box-shadow:inset 0 -2px 0 var(--%NS%morse-accent)}.tab[_ngcontent-%COMP%] .live[_ngcontent-%COMP%]{flex:none;width:9px;height:9px;border-radius:50%;border:1.5px solid color-mix(in srgb,var(--%NS%morse-accent) 30%,transparent);border-top-color:var(--%NS%morse-accent);animation:_ngcontent-%COMP%_tab-spin .8s linear infinite}@keyframes _ngcontent-%COMP%_tab-spin{to{transform:rotate(360deg)}}.glyph[_ngcontent-%COMP%]{flex:none;font-size:11px;color:var(--%NS%morse-fg-muted)}.tab.active[_ngcontent-%COMP%] .glyph[_ngcontent-%COMP%]{color:var(--%NS%morse-accent)}.label[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.close[_ngcontent-%COMP%]{flex:none;width:18px;height:18px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:4px;background:none;color:var(--%NS%morse-fg-muted);font-size:13px;line-height:1;cursor:pointer;opacity:0}.tab[_ngcontent-%COMP%]:hover .close[_ngcontent-%COMP%], .tab.active[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{opacity:1}.close[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.empty[_ngcontent-%COMP%]{align-self:center;padding:0 10px;font-size:11.5px;color:var(--%NS%morse-fg-muted)}.context-menu-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:40}.context-menu[_ngcontent-%COMP%]{position:fixed;z-index:41;width:190px;max-width:min(280px,90vw);padding:4px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 8px 24px #00000059}.context-menu-item[_ngcontent-%COMP%]{display:block;width:100%;padding:5px 8px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg);font-size:12px;text-align:left;cursor:pointer}.context-menu-item[_ngcontent-%COMP%]:hover:not(:disabled), .context-menu-item[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--%NS%morse-hover)}.context-menu-item[_ngcontent-%COMP%]:disabled{color:var(--%NS%morse-fg-muted);cursor:default}.context-menu-item[_ngcontent-%COMP%]:disabled:hover{background:transparent}"]})};var OE=250,Su=class t{morse=N(Ze);items=O([]);meta=O(void 0);busy=O(!1);failure=O(void 0);generation=0;loading=this.busy.asReadonly();error=this.failure.asReadonly();isRepo=E(()=>this.meta()?.isRepo===!0);loaded=E(()=>this.meta()!==void 0);branch=E(()=>this.meta()?.branch);root=E(()=>this.meta()?.root);hasMore=E(()=>this.meta()?.hasMore===!0);commits=this.items.asReadonly();refresh(){if(!this.morse.workspace().cwd)return;let n=this.generation+=1;this.busy.set(!0),this.failure.set(void 0),this.page(0).then(i=>{if(n===this.generation){if(i===void 0){this.items.set([]),this.meta.set(void 0),this.failure.set("The host could not read git history for this project.");return}this.items.set(i.commits),this.meta.set(IE(i))}}).finally(()=>{n===this.generation&&this.busy.set(!1)})}loadMore(){if(this.busy()||!this.hasMore()||!this.isRepo())return;let e=this.generation,n=this.items().length;this.busy.set(!0),this.page(n).then(i=>{e!==this.generation||i===void 0||(this.items.update(o=>[...o,...i.commits]),this.meta.set(IE(i)))}).finally(()=>{e===this.generation&&this.busy.set(!1)})}async page(e){let n=await this.morse.requestHostCommand("gitLog",{max:OE,skip:e});return _F(n)}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function IE(t){return{isRepo:t.isRepo,root:t.root,branch:t.branch,hasMore:t.commits.length===OE}}function _F(t){if(typeof t!="object"||t===null)return;let e=t;if(e.isRepo!==!0)return typeof e.isRepo=="boolean"?{isRepo:!1,commits:[]}:void 0;let n=Array.isArray(e.commits)?e.commits.map(vF).filter(i=>i!==void 0):[];return{isRepo:!0,root:typeof e.root=="string"?e.root:void 0,branch:typeof e.branch=="string"?e.branch:void 0,commits:n}}function vF(t){if(typeof t!="object"||t===null)return;let e=t,n=e.hash,i=e.shortHash;if(!(typeof n!="string"||typeof i!="string"))return{hash:n,shortHash:i,parents:NE(e.parents),refs:NE(e.refs),author:typeof e.author=="string"?e.author:"",date:typeof e.date=="string"?e.date:"",subject:typeof e.subject=="string"?e.subject:""}}function NE(t){return Array.isArray(t)?t.filter(e=>typeof e=="string"):[]}function AE(t){let e=[],n=[],i=0;for(let o of t){let r=e.slice(),s=[];for(let l=0;l<e.length;l+=1)e[l]===o.hash&&s.push(l);let a=s.length>0?s[0]:PE(e);e[a]=void 0;for(let l=1;l<s.length;l+=1)e[s[l]]=void 0;let c=[];for(let l=0;l<r.length;l+=1)r[l]!==void 0&&e[l]===r[l]&&c.push({fromLane:l,fromY:0,toLane:l,toY:1,color:l});r[a]===o.hash&&c.push({fromLane:a,fromY:0,toLane:a,toY:.5,color:a});for(let l of s)l!==a&&c.push({fromLane:l,fromY:0,toLane:a,toY:.5,color:l});for(let l=0;l<o.parents.length;l+=1){let p=o.parents[l],f=bF(e,p,a);f===-1&&(f=l===0?a:PE(e)),e[f]=p,c.push({fromLane:a,fromY:.5,toLane:f,toY:1,color:f})}i=Math.max(i,e.length),n.push({lane:a,color:a,edges:c})}return{rows:n,laneCount:i}}function PE(t){let e=t.indexOf(void 0);return e===-1?t.length:e}function bF(t,e,n){for(let i=0;i<t.length;i+=1)if(i!==n&&t[i]===e)return i;return-1}var xF=(t,e)=>e.path,CF=(t,e)=>e.commit.hash;function EF(t,e){if(t&1&&(h(0,"span",10),u(1),g()),t&2){let n=e;ie("title",n),d(),k(n)}}function wF(t,e){if(t&1&&(h(0,"span",11),u(1),g()),t&2){let n=m();d(),ae("",n.commits().length," commits")}}function SF(t,e){t&1&&(st(),h(0,"svg",14),ce(1,"path",23)(2,"path",24)(3,"path",25)(4,"path",26),g())}function TF(t,e){t&1&&(st(),h(0,"svg",14),ce(1,"path",27)(2,"path",28)(3,"path",29)(4,"path",30),g())}function DF(t,e){if(t&1&&(h(0,"span",32),u(1),g()),t&2){let n=m(2);d(),k(n.changes().length)}}function MF(t,e){t&1&&(h(0,"div",34)(1,"span",36),st(),h(2,"svg",37),ce(3,"circle",38),g(),h(4,"svg",39),ce(5,"path",40),g()(),u(6," No uncommitted changes "),g())}function kF(t,e){if(t&1){let n=$();h(0,"li")(1,"button",41),F("click",function(){let o=D(n).$implicit,r=m(4);return M(r.openChange(o.path))}),h(2,"span"),u(3),g(),h(4,"span",42),u(5),g(),h(6,"span",43),u(7),g(),ce(8,"span",12),g()()}if(t&2){let n=e.$implicit,i=m(4);d(),ie("title",n.path),d(),Tn("badge "+n.kind),d(),k(n.kind),d(2),k(i.dirOf(n.path)),d(2),k(i.baseOf(n.path))}}function IF(t,e){if(t&1&&(h(0,"ul",35),oe(1,kF,9,6,"li",null,xF),g()),t&2){let n=m(3);d(),re(n.changes())}}function NF(t,e){if(t&1&&w(0,MF,7,0,"div",34)(1,IF,3,0,"ul",35),t&2){let n=m(2);S(n.changes().length===0?0:1)}}function OF(t,e){if(t&1){let n=$();h(0,"section",31)(1,"div",19)(2,"button",20),F("click",function(){D(n);let o=m();return M(o.toggleChanges())}),h(3,"span",21),u(4,"\u203A"),g(),h(5,"span",22),u(6,"Changes"),g(),w(7,DF,2,1,"span",32),g()(),w(8,NF,2,1),g(),h(9,"div",33),F("pointerdown",function(o){D(n);let r=m();return M(r.startResize(o))}),g()}if(t&2){let n=m();At("height",n.changesHeightPx(),"px"),d(2),J("aria-expanded",!n.changesCollapsed()),d(),X("open",!n.changesCollapsed()),d(4),S(n.changes().length>0?7:-1),d(),S(n.changesCollapsed()?-1:8),d(),X("gone",n.changesCollapsed()||n.historyCollapsed())}}function PF(t,e){t&1&&(h(0,"p",44),u(1,"Reading git history\u2026"),g())}function AF(t,e){t&1&&(h(0,"p",45),u(1),g()),t&2&&(d(),k(e))}function RF(t,e){t&1&&(h(0,"p",44),u(1,"This project is not a git repository."),g())}function LF(t,e){t&1&&(h(0,"div",34)(1,"span",47),st(),h(2,"svg",48),ce(3,"path",49)(4,"circle",50),g()(),u(5," No commits yet "),g())}function FF(t,e){if(t&1&&(st(),ce(0,"path")(1,"path",64)),t&2){let n=e.$implicit,i=m(4);At("stroke",i.color(n.color)),J("d",i.path(n)),d(),J("d",i.path(n))}}function VF(t,e){if(t&1&&(h(0,"span",66),u(1),g()),t&2){let n=e.$implicit,i=m(5);X("kind-head",i.refKind(n)==="head")("kind-local",i.refKind(n)==="local")("kind-tag",i.refKind(n)==="tag"),ie("title",i.refLabel(n)),d(),k(i.refLabel(n))}}function jF(t,e){if(t&1&&(h(0,"span",66),u(1),g()),t&2){let n=m(2).$implicit;ie("title",n.restTitle),d(),ae("+",n.moreRefs)}}function $F(t,e){if(t&1&&(h(0,"span",58),oe(1,VF,2,8,"span",65,Ei),w(3,jF,2,2,"span",66),g()),t&2){let n=m().$implicit;d(),re(n.refs),d(2),S(n.moreRefs>0?3:-1)}}function BF(t,e){if(t&1&&(h(0,"span",61),u(1,"\xB7"),g(),h(2,"span",67),u(3),g()),t&2){let n=m().$implicit;d(3),k(n.commit.author)}}function HF(t,e){if(t&1){let n=$();h(0,"li",54),st(),h(1,"svg",55),oe(2,FF,2,4,null,null,Ci),ce(4,"circle",56),g(),Jt(),h(5,"span",57),u(6),g(),w(7,$F,4,1,"span",58),ce(8,"span",12),h(9,"span",59)(10,"span",60),u(11),g(),h(12,"span",61),u(13,"\xB7"),g(),h(14,"span",62),u(15),g(),w(16,BF,4,1),g(),h(17,"button",63),F("click",function(){let o=D(n).$implicit,r=m(3);return M(r.copy(o.commit))}),u(18),g()()}if(t&2){let n=e.$implicit,i=m(3);X("expanded",i.expanded()),d(),J("width",i.graphWidth())("height",i.rowHeight)("viewBox","0 0 "+i.graphWidth()+" "+i.rowHeight),d(),re(n.row.edges),d(2),At("fill",i.rowColor(n.row)),J("cx",i.x(n.row.lane))("cy",i.rowHeight/2),d(2),k(n.commit.subject),d(),S(n.refs.length>0?7:-1),d(3),ie("title",n.commit.hash),d(),k(n.commit.shortHash),d(4),k(i.when(n.commit.date)),d(),S(i.expanded()?16:-1),d(),ie("title",i.copied()===n.commit.hash?"Copied":"Copy commit hash"),J("aria-label","Copy commit hash "+n.commit.shortHash),d(),ae(" ",i.copied()===n.commit.hash?"\u2713":"\u29C9"," ")}}function UF(t,e){if(t&1&&u(0),t&2){let n=m(3);ae(" ",n.loading()?"Loading older commits\u2026":"Scroll for older commits"," ")}}function zF(t,e){t&1&&u(0," Beginning of history ")}function GF(t,e){if(t&1){let n=$();h(0,"ul",51),F("scroll",function(o){D(n);let r=m(2);return M(r.onScroll(o))}),oe(1,HF,19,18,"li",52,CF),h(3,"li",53),w(4,UF,1,1)(5,zF,1,0),g()()}if(t&2){let n=m(2);d(),re(n.entries().rows),d(3),S(n.hasMore()?4:5)}}function qF(t,e){if(t&1&&w(0,PF,2,0,"p",44)(1,AF,2,1,"p",45)(2,RF,2,0,"p",44)(3,LF,6,0,"div",34)(4,GF,6,1,"ul",46),t&2){let n,i=m();S(i.loading()&&!i.loaded()?0:(n=i.error())?1:i.isRepo()?i.commits().length===0?3:4:2,n)}}var RE=["var(--morse-accent)","var(--morse-success)","var(--morse-number)","var(--morse-typename)","var(--morse-keyword)","var(--morse-info)","var(--morse-warn)"],tg=16,LE=32,WF=180,Tu=class t{expanded=te(!1);morse=N(Ze);shell=N(Ht);git=N(Su);workspace=N(zi);tabs=N(dn);commits=this.git.commits;branch=this.git.branch;root=this.git.root;isRepo=this.git.isRepo;loading=this.git.loading;loaded=this.git.loaded;hasMore=this.git.hasMore;error=this.git.error;changesCollapsed=this.shell.gitChangesCollapsed;historyCollapsed=this.shell.gitHistoryCollapsed;changesHeight=this.shell.gitChangesHeight;changes=E(()=>{let e=this.workspace.status();if(e===void 0||!e.isRepo)return[];let n=[];for(let i of e.files){let o=xh(i.status);o!==void 0&&n.push({path:i.path,kind:o})}return n.sort((i,o)=>i.path.localeCompare(o.path))});rowHeight=LE;copied=O(void 0);entries=E(()=>{let e=this.commits(),n=AE(e),i=this.expanded()?3:1;return{laneCount:n.laneCount,rows:n.rows.map((o,r)=>{let s=e[r],a=s.refs.slice(0,i),c=s.refs.slice(i);return{row:o,commit:s,refs:a,moreRefs:c.length,restTitle:c.map(l=>this.refLabel(l)).join(", ")}})}});graphWidth=E(()=>Math.max(1,this.entries().laneCount)*tg);constructor(){se(()=>{!this.shell.gitPanelOpen()||!this.morse.workspace().cwd||this.git.refresh()})}refresh(){this.git.refresh()}onScroll(e){let n=e.target;n.scrollHeight-n.scrollTop-n.clientHeight<600&&this.git.loadMore()}close(){this.shell.closeGitPanel()}openChange(e){this.tabs.openFile(e)}dirOf(e){let n=e.lastIndexOf("/");return n===-1?"":e.slice(0,n+1)}baseOf(e){let n=e.lastIndexOf("/");return n===-1?e:e.slice(n+1)}toggleExpanded(){this.shell.toggleGitPanelExpanded()}toggleChanges(){this.shell.toggleGitChanges()}toggleHistory(){this.shell.toggleGitHistory()}changesHeightPx(){return this.changesCollapsed()||this.historyCollapsed()?null:this.changesHeight()??null}startResize(e){e.preventDefault();let n=e.currentTarget,i=n.parentElement;if(!i)return;let o=i.getBoundingClientRect().top,r=i.getBoundingClientRect().bottom;n.setPointerCapture(e.pointerId);let s=0,a=0,c=()=>{s=0,this.shell.setGitChangesHeight(a,!1)},l=f=>{a=Math.min(r-o-80,f.clientY-o),s===0&&(s=requestAnimationFrame(c))},p=()=>{s!==0&&(cancelAnimationFrame(s),c()),this.shell.setGitChangesHeight(a),n.removeEventListener("pointermove",l),n.removeEventListener("pointerup",p),n.removeEventListener("pointercancel",p)};n.addEventListener("pointermove",l),n.addEventListener("pointerup",p),n.addEventListener("pointercancel",p)}startWidthResize(e){e.preventDefault(),this.shell.gitPanelExpanded()&&this.shell.toggleGitPanelExpanded();let n=e.currentTarget,i=n.parentElement,o=e.clientX,r=i?.getBoundingClientRect().width??340,s=n.closest(".shell"),a=s?.querySelector(".nav"),c=s?.getBoundingClientRect().width??window.innerWidth,l=this.shell.navigationCollapsed()?0:a?.getBoundingClientRect().width??240,p=Math.max(320,c-l-WF);n.setPointerCapture(e.pointerId),s?.style.setProperty("transition","none"),i?.classList.add("resizing");let f=0,_=this.shell.gitPanelWidth()??Math.round(r),x=()=>{f=0,this.shell.setGitPanelWidth(_,!1)},C=P=>{_=Math.min(p,r+(o-P.clientX)),f===0&&(f=requestAnimationFrame(x))},T=()=>{f!==0&&(cancelAnimationFrame(f),x()),s?.style.removeProperty("transition"),i?.classList.remove("resizing"),this.shell.setGitPanelWidth(_),n.removeEventListener("pointermove",C),n.removeEventListener("pointerup",T),n.removeEventListener("pointercancel",T)};n.addEventListener("pointermove",C),n.addEventListener("pointerup",T),n.addEventListener("pointercancel",T)}resetWidth(){this.shell.resetGitPanelWidth()}refLabel(e){if(e.startsWith("tag: "))return e.slice(5);let n=e.indexOf(" -> ");return n===-1?e:e.slice(n+4)}refKind(e){return e.startsWith("tag: ")?"tag":e.includes("HEAD")?"head":"local"}when(e){let n=Date.parse(e);if(!Number.isFinite(n))return"";let i=Math.max(0,Math.round((Date.now()-n)/1e3));if(i<60)return`${i}s`;let o=Math.round(i/60);if(o<60)return`${o}m`;let r=Math.round(o/60);return r<24?`${r}h`:`${Math.round(r/24)}d`}async copy(e){try{await navigator.clipboard.writeText(e.hash),this.copied.set(e.hash),setTimeout(()=>{this.copied()===e.hash&&this.copied.set(void 0)},1200)}catch{}}x(e){return e*tg+tg/2}y(e){return e*LE}color(e){return RE[e%RE.length]}path(e){let n=this.x(e.fromLane),i=this.y(e.fromY),o=this.x(e.toLane),r=this.y(e.toY);if(n===o)return`M ${n} ${i} L ${o} ${r}`;let s=(i+r)/2;return`M ${n} ${i} C ${n} ${s}, ${o} ${s}, ${o} ${r}`}rowColor(e){return this.color(e.color)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-git-panel"]],inputs:{expanded:[1,"expanded"]},decls:31,vars:19,consts:[["aria-label","Git history",1,"panel"],["role","separator","aria-orientation","vertical","aria-label","Resize the git panel","title","Drag to resize",1,"edge-resize",3,"pointerdown","dblclick"],[1,"head"],[1,"brand",3,"title"],["viewBox","0 0 16 16","aria-hidden","true"],["cx","4.5","cy","3.5","r","1.8"],["cx","4.5","cy","12.5","r","1.8"],["cx","11.5","cy","6.5","r","1.8"],["d","M4.5 5.3v5.4"],["d","M4.5 5.3c0 2.4 7 1 7 3"],[1,"branch",3,"title"],[1,"count"],[1,"grow"],["type","button",1,"icon",3,"click","title"],["viewBox","0 0 16 16","aria-hidden","true",1,"glyph"],["type","button","title","Refresh history","aria-label","Refresh history",1,"icon",3,"click","disabled"],["type","button","title","Hide the git panel","aria-label","Hide the git panel",1,"icon",3,"click"],[1,"body"],[1,"history"],[1,"section-head"],["type","button",1,"section-toggle",3,"click"],[1,"chevron"],[1,"section-title"],["d","M3.5 6.5h3v-3"],["d","M12.5 9.5h-3v3"],["d","M6.5 6.5 3 3"],["d","M9.5 9.5 13 13"],["d","M6.5 3.5h-3v3"],["d","M9.5 12.5h3v-3"],["d","M3.5 3.5 8 8"],["d","M12.5 12.5 8 8"],["aria-label","Uncommitted changes",1,"changes"],[1,"section-count"],["role","separator","aria-orientation","horizontal","aria-label","Resize the git sections","title","Drag to resize",1,"divider",3,"pointerdown"],[1,"empty"],[1,"change-list"],["aria-hidden","true",1,"mark"],["viewBox","0 0 24 24",1,"ring"],["cx","12","cy","12","r","10"],["viewBox","0 0 24 24",1,"check"],["d","M7.5 12.5 11 16l6-7"],["type","button",1,"change",3,"click","title"],[1,"change-dir"],[1,"change-name"],[1,"hint"],[1,"hint","error"],[1,"list"],["aria-hidden","true",1,"mark","node"],["viewBox","0 0 24 24"],["d","M12 3v18",1,"line"],["cx","12","cy","12","r","3.4",1,"dot"],[1,"list",3,"scroll"],[1,"commit",3,"expanded"],[1,"more"],[1,"commit"],["aria-hidden","true",1,"graph"],["r","3.4"],[1,"subject"],[1,"refs"],[1,"meta"],[1,"hash",3,"title"],["aria-hidden","true",1,"sep"],[1,"when"],["type","button",1,"copy",3,"click","title"],[1,"flow"],[1,"ref",3,"title","kind-head","kind-local","kind-tag"],[1,"ref",3,"title"],[1,"author"]],template:function(n,i){if(n&1&&(h(0,"aside",0)(1,"div",1),F("pointerdown",function(r){return i.startWidthResize(r)})("dblclick",function(){return i.resetWidth()}),g(),h(2,"header",2)(3,"span",3),st(),h(4,"svg",4),ce(5,"circle",5)(6,"circle",6)(7,"circle",7)(8,"path",8)(9,"path",9),g(),u(10," Git "),g(),w(11,EF,2,2,"span",10),w(12,wF,2,1,"span",11),Jt(),ce(13,"span",12),h(14,"button",13),F("click",function(){return i.toggleExpanded()}),w(15,SF,5,0,":svg:svg",14)(16,TF,5,0,":svg:svg",14),g(),h(17,"button",15),F("click",function(){return i.refresh()}),u(18," \u27F3 "),g(),h(19,"button",16),F("click",function(){return i.close()}),u(20," \u2715 "),g()(),h(21,"div",17),w(22,OF,10,9),h(23,"section",18)(24,"div",19)(25,"button",20),F("click",function(){return i.toggleHistory()}),h(26,"span",21),u(27,"\u203A"),g(),h(28,"span",22),u(29,"History"),g()()(),w(30,qF,5,1),g()()()),n&2){let o;X("full",i.expanded()),d(3),ie("title",i.root()??""),d(8),S((o=i.branch())?11:-1,o),d(),S(i.expanded()&&i.commits().length>0?12:-1),d(2),ie("title",i.expanded()?"Fit the git panel back into the sidebar":"Expand the git graph"),J("aria-label",i.expanded()?"Collapse the git panel":"Expand the git panel")("aria-pressed",i.expanded()),d(),S(i.expanded()?15:16),d(2),ie("disabled",i.loading()),d(4),X("changes-collapsed",i.changesCollapsed())("history-collapsed",i.historyCollapsed()),d(),S(i.isRepo()?22:-1),d(3),J("aria-expanded",!i.historyCollapsed()),d(),X("open",!i.historyCollapsed()),d(4),S(i.historyCollapsed()?-1:30)}},styles:['[_nghost-%COMP%]{position:relative;display:block;min-width:0;min-height:0;height:100%;overflow:hidden;border-left:1px solid var(--%NS%morse-border);background:var(--%NS%morse-nav-bg)}.edge-resize[_ngcontent-%COMP%]{position:absolute;top:0;bottom:0;left:0;width:6px;z-index:3;cursor:ew-resize}.edge-resize[_ngcontent-%COMP%]:hover, .edge-resize[_ngcontent-%COMP%]:active{background:color-mix(in srgb,var(--%NS%morse-accent) 45%,transparent)}.panel.resizing[_ngcontent-%COMP%] .body[_ngcontent-%COMP%]{pointer-events:none}.panel.resizing[_ngcontent-%COMP%] .graph[_ngcontent-%COMP%] path.flow[_ngcontent-%COMP%]{animation:none}.head[_ngcontent-%COMP%]{position:absolute;top:0;left:0;right:0;z-index:1;display:flex;align-items:center;gap:6px;min-height:var(--%NS%morse-head-height);padding:0 6px 0 10px;border-bottom:1px solid var(--%NS%morse-border);background:var(--%NS%morse-nav-bg)}.brand[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;font-weight:600}.brand[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}.branch[_ngcontent-%COMP%], .ref[_ngcontent-%COMP%]{flex:none;padding:0 6px;border-radius:4px;font-family:var(--%NS%morse-font-mono);font-size:10px;line-height:16px;background:color-mix(in srgb,var(--%NS%morse-fg-muted) 12%,transparent);color:var(--%NS%morse-fg-muted)}.branch[_ngcontent-%COMP%], .ref[_ngcontent-%COMP%]{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.commit.expanded[_ngcontent-%COMP%] .ref[_ngcontent-%COMP%]{max-width:240px}.branch[_ngcontent-%COMP%], .ref.kind-head[_ngcontent-%COMP%]{color:var(--%NS%morse-accent)}.ref.kind-local[_ngcontent-%COMP%]{color:var(--%NS%morse-success)}.ref.kind-tag[_ngcontent-%COMP%]{color:var(--%NS%morse-typename)}.grow[_ngcontent-%COMP%]{flex:1}.icon[_ngcontent-%COMP%]{flex:none;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid transparent;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:13px;line-height:1;cursor:pointer}.icon[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.icon[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round}.count[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted);font-size:11px}.body[_ngcontent-%COMP%]{position:absolute;top:var(--%NS%morse-head-height);right:0;bottom:0;left:0;display:flex;flex-direction:column;min-height:0}.changes[_ngcontent-%COMP%]{flex:none;height:45%;display:flex;flex-direction:column;overflow-y:auto;overflow-x:hidden}.body.changes-collapsed[_ngcontent-%COMP%] .changes[_ngcontent-%COMP%], .body.history-collapsed[_ngcontent-%COMP%] .changes[_ngcontent-%COMP%]{height:auto}.body.history-collapsed[_ngcontent-%COMP%] .changes[_ngcontent-%COMP%]{flex:1}.divider[_ngcontent-%COMP%]{flex:none;position:relative;height:5px;border-top:1px solid var(--%NS%morse-border);background:transparent;cursor:ns-resize}.divider[_ngcontent-%COMP%]:hover{border-top-color:var(--%NS%morse-accent);background:color-mix(in srgb,var(--%NS%morse-accent) 30%,transparent)}.divider[_ngcontent-%COMP%]:after{content:"";position:absolute;inset:-3px 0}.divider.gone[_ngcontent-%COMP%]{display:none}.history[_ngcontent-%COMP%]{flex:1;min-height:0;display:flex;flex-direction:column}.body.history-collapsed[_ngcontent-%COMP%] .history[_ngcontent-%COMP%]{flex:none}.section-head[_ngcontent-%COMP%]{display:flex;flex:none;align-items:center}.section-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:5px;flex:1;min-width:0;padding:5px 10px;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer}.section-toggle[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.chevron[_ngcontent-%COMP%]{flex:none;display:inline-block;color:var(--%NS%morse-fg-muted);font-size:11px;line-height:1;transition:transform .12s ease}.chevron.open[_ngcontent-%COMP%]{transform:rotate(90deg)}.section-title[_ngcontent-%COMP%]{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--%NS%morse-fg-muted)}.section-count[_ngcontent-%COMP%]{font-size:10.5px;color:var(--%NS%morse-fg-muted)}.change-list[_ngcontent-%COMP%]{margin:0;padding:0 0 6px;list-style:none}.change[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;width:100%;padding:2px 10px;border:0;background:none;color:var(--%NS%morse-fg);font:inherit;text-align:left;cursor:pointer}.change[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover)}.change-dir[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:11px}.change-name[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.empty[_ngcontent-%COMP%]{flex:1;min-height:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:16px;color:var(--%NS%morse-fg-muted);font-size:11.5px;text-align:center}.mark[_ngcontent-%COMP%]{position:relative;display:inline-grid;place-items:center;width:38px;height:38px;animation:_ngcontent-%COMP%_mark-breathe 2.8s ease-in-out infinite}.mark[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{position:absolute;inset:0;width:100%;height:100%;fill:none;stroke-linecap:round;stroke-linejoin:round}.mark[_ngcontent-%COMP%] .ring[_ngcontent-%COMP%]{stroke:color-mix(in srgb,var(--%NS%morse-fg-muted) 40%,transparent);stroke-width:1.4}.mark[_ngcontent-%COMP%] .check[_ngcontent-%COMP%]{stroke:var(--%NS%morse-success);stroke-width:2;stroke-dasharray:20;stroke-dashoffset:20;animation:_ngcontent-%COMP%_check-draw .9s ease-out .12s forwards}.mark.node[_ngcontent-%COMP%] .line[_ngcontent-%COMP%]{stroke:color-mix(in srgb,var(--%NS%morse-fg-muted) 35%,transparent);stroke-width:1.4}.mark.node[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{stroke:var(--%NS%morse-accent);stroke-width:1.6;transform-box:fill-box;transform-origin:center;animation:_ngcontent-%COMP%_node-pulse 2.8s ease-in-out infinite}.mark[_ngcontent-%COMP%]:after{content:"";position:absolute;inset:-4px;border-radius:50%;border:1px solid color-mix(in srgb,var(--%NS%morse-success) 45%,transparent);animation:_ngcontent-%COMP%_mark-ping 2.8s ease-out infinite}.mark.node[_ngcontent-%COMP%]:after{border-color:color-mix(in srgb,var(--%NS%morse-accent) 45%,transparent)}@keyframes _ngcontent-%COMP%_mark-breathe{0%,to{transform:scale(.95)}50%{transform:scale(1.05)}}@keyframes _ngcontent-%COMP%_check-draw{to{stroke-dashoffset:0}}@keyframes _ngcontent-%COMP%_node-pulse{0%,to{transform:scale(.7);opacity:.6}50%{transform:scale(1.15);opacity:1}}@keyframes _ngcontent-%COMP%_mark-ping{0%{transform:scale(.85);opacity:.7}70%,to{transform:scale(1.35);opacity:0}}@media(prefers-reduced-motion:reduce){.mark[_ngcontent-%COMP%], .mark[_ngcontent-%COMP%]:after{animation:none}.mark[_ngcontent-%COMP%] .check[_ngcontent-%COMP%]{animation:none;stroke-dashoffset:0}.mark.node[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{animation:none}}.badge[_ngcontent-%COMP%]{flex:none;padding:0 4px;border-radius:4px;font-family:var(--%NS%morse-font-mono);font-size:9.5px;line-height:15px;color:var(--%NS%morse-fg-muted)}.badge.M[_ngcontent-%COMP%]{color:var(--%NS%morse-warn)}.badge.A[_ngcontent-%COMP%], .badge.U[_ngcontent-%COMP%]{color:var(--%NS%morse-success)}.badge.D[_ngcontent-%COMP%], .badge.C[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.badge.R[_ngcontent-%COMP%]{color:var(--%NS%morse-info)}.list[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;margin:0;padding:2px 0 10px;list-style:none}.hint[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;padding:12px;color:var(--%NS%morse-fg-muted);font-size:12px;line-height:1.5}.hint.error[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.more[_ngcontent-%COMP%]{padding:10px 12px;color:var(--%NS%morse-fg-muted);font-size:11px;text-align:center}.commit[_ngcontent-%COMP%]{display:flex;flex-wrap:nowrap;align-items:center;gap:10px;height:32px;padding-right:8px}.commit[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.graph[_ngcontent-%COMP%]{flex:none;display:block;overflow:visible}.graph[_ngcontent-%COMP%] path[_ngcontent-%COMP%]{fill:none;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}.graph[_ngcontent-%COMP%] circle[_ngcontent-%COMP%]{stroke:var(--%NS%morse-nav-bg);stroke-width:1.6}.graph[_ngcontent-%COMP%] path.flow[_ngcontent-%COMP%]{stroke:var(--%NS%morse-fg);stroke-dasharray:5 15;stroke-linecap:round;opacity:.35;animation:_ngcontent-%COMP%_graph-flow 1.4s linear infinite}@keyframes _ngcontent-%COMP%_graph-flow{to{stroke-dashoffset:-20}}@media(prefers-reduced-motion:reduce){.graph[_ngcontent-%COMP%] path.flow[_ngcontent-%COMP%]{animation:none;opacity:0}}.subject[_ngcontent-%COMP%]{flex:0 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;color:var(--%NS%morse-fg)}.refs[_ngcontent-%COMP%]{flex:0 1 auto;display:flex;align-items:center;gap:4px;min-width:0}.grow[_ngcontent-%COMP%]{flex:1;min-width:8px}.meta[_ngcontent-%COMP%]{flex:none;display:flex;align-items:center;gap:6px;color:var(--%NS%morse-fg-muted);font-size:11px;white-space:nowrap}.hash[_ngcontent-%COMP%]{font-family:var(--%NS%morse-font-mono)}.author[_ngcontent-%COMP%]{display:none;max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.commit.expanded[_ngcontent-%COMP%] .author[_ngcontent-%COMP%]{display:inline}.sep[_ngcontent-%COMP%]{opacity:.5}.copy[_ngcontent-%COMP%]{flex:none;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:11px;cursor:pointer;opacity:0}.commit[_ngcontent-%COMP%]:hover .copy[_ngcontent-%COMP%]{opacity:1}.copy[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-border);color:var(--%NS%morse-fg)}']})};var Ls=520,FE=70,Du=class t{animation=N(ln);async play(e,n){let i=this.resolveTarget();if(!this.animation.isEnabled||!n||!i||e.length===0||typeof document>"u")return;let o=Ls+(e.length-1)*FE;e.forEach((r,s)=>{this.launch(r,n,i,s*FE)}),await YF(o)}resolveTarget(){let e=document.querySelector("morse-chat-composer .box");if(!e)return;let n=e.getBoundingClientRect();return{x:n.left+26,y:n.top+18}}launch(e,n,i,o){let r=this.createGhost(e,n);document.body.appendChild(r);let s=Math.min(n.y,i.y)-Math.max(60,Math.abs(n.y-i.y)*.35);rn(r,{translateX:[n.x,i.x],translateY:[{to:n.y,duration:Ls*.18},{to:s,duration:Ls*.42},{to:i.y,duration:Ls*.4}],rotate:[0,-8,6,0],scale:[1,1.04,.86,.42],opacity:[1,1,.9,0],duration:Ls,delay:o,ease:"inOut(2)",onComplete:()=>r.remove()}),setTimeout(()=>r.remove(),o+Ls+400)}createGhost(e,n){let i=document.createElement("div");if(i.className="drop-ghost",e.thumbnail){let r=document.createElement("img");r.src=e.thumbnail,r.alt="",i.appendChild(r)}else{let r=document.createElement("span");r.className="drop-ghost-glyph",r.textContent="\u25A4",i.appendChild(r)}let o=document.createElement("span");return o.className="drop-ghost-name",o.textContent=e.name,i.appendChild(o),i}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function YF(t){return new Promise(e=>setTimeout(e,t))}var Mu=class t{attachments=N(Ui);flight=N(Du);uploads=N(Ds);depth=O(0);internalDrag=!1;constructor(){if(typeof document>"u")return;let e=()=>{this.internalDrag=!0},n=()=>{this.internalDrag=!1};document.addEventListener("dragstart",e,!0),document.addEventListener("dragend",n,!0),document.addEventListener("drop",n,!0)}active=E(()=>this.depth()>0);carriesFiles(e){if(this.internalDrag)return!1;let n=e.dataTransfer?.types;return n!==void 0&&n.length>0}onDragEnter(e){this.carriesFiles(e)&&(e.preventDefault(),this.depth.update(n=>n+1))}onDragOver(e){this.carriesFiles(e)&&(e.preventDefault(),e.dataTransfer&&(e.dataTransfer.dropEffect="copy"))}onDragLeave(){this.depth.update(e=>Math.max(0,e-1))}async onDrop(e,n){if(this.depth.set(0),!this.carriesFiles(e))return;e.preventDefault();let i=e.dataTransfer;if(!i)return;let o=Array.from(i.files??[]),{images:r}=await this.attachments.read(o.filter(T=>T.type.startsWith("image/"))),s=QF(i),a=o.filter(T=>!T.type.startsWith("image/")),c=this.uploads.available()&&a.length>0?this.uploads.upload(a):Promise.resolve({added:[],failed:a.map(T=>T.name)}),l=[...s.paths.map(T=>VE(T,n)),...s.names,...a.map(T=>T.name)],p=e.clientX>0||e.clientY>0?{x:e.clientX,y:e.clientY}:KF();await this.flight.play([...r.map(T=>({name:T.name,thumbnail:`data:${T.mimeType};base64,${T.data}`})),...l.map(T=>({name:T}))],p);let f=await c,_=[...s.paths.map(T=>VE(T,n)),...s.names,...f.added.map(T=>T.path),...f.failed];this.attachments.add(r),this.attachments.addMentions(_);let x=[];if(r.length>0&&x.push(`${r.length} image${r.length===1?"":"s"} attached`),_.length>0&&x.push(`${_.length} file${_.length===1?"":"s"} added to the prompt`),x.length>0){this.attachments.say("info",x.join(" \xB7 "));return}let C=Array.from(i.types??[]).join(", ")||"none";this.attachments.say("warn",`That drop carried no file (types: ${C}).`)}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};function KF(){let t=document.querySelector("main.chat");if(!t)return{x:0,y:0};let e=t.getBoundingClientRect();return{x:e.left+e.width/2,y:e.top+e.height*.35}}var ZF=["application/vnd.code.uri-list","ResourceURLs","text/uri-list"];function QF(t){let e=[];for(let o of[...ZF,"text/plain"])for(let r of XF(t.getData(o)))e.push(r);let n=[],i=[];for(let o of e){if(o.startsWith("file://")){let s=n3(o);s&&n.push(s);continue}if(/^[a-z]+:\/\//i.test(o))continue;if(t3(o)){n.push(o);continue}let r=e3(o);r&&i.push(r)}return{paths:Array.from(new Set(n)),names:Array.from(new Set(i))}}function XF(t){let e=t.trim();if(e.length===0)return[];if(e.startsWith("["))try{let n=JSON.parse(e);if(Array.isArray(n))return n.map(i=>{if(typeof i=="string")return i;let o=i,r=o.fsPath??o.uri??o.path;return typeof r=="string"?r:""}).filter(i=>i.length>0)}catch{}return JF(e)}function JF(t){return t.split(/\r?\n/).flatMap(e=>e.split(/(?<=\S)\s+(?=[/\\]|[A-Za-z]:[\\/])/)).map(e=>e.trim()).filter(e=>e.length>0&&!e.startsWith("#"))}function e3(t){let e=t.replace(/\s*\([^)]*\)\s*$/,"").trim();if(!(e.length===0||e.length>200)&&!(/\s/.test(e)||e.includes(":")))return/[^/\\]+\.[A-Za-z0-9]{1,8}$/.test(e)?e:void 0}function t3(t){return!!(t.startsWith("/")||/^[A-Za-z]:[\\/]/.test(t))}function n3(t){try{let e=new URL(t);return decodeURIComponent(e.pathname)}catch{return}}function VE(t,e){if(!e)return t;let n=e.endsWith("/")?e:`${e}/`;return t.startsWith(n)?t.slice(n.length):t}var i3="https://registry.npmjs.org/@supanadit/morse-web/latest";function o3(t){return`https://github.com/supanadit/morse/releases/tag/v${t}`}var r3=new He("morse.update.loader",{providedIn:"root",factory:()=>{let t=globalThis.fetch;if(t===void 0)return;let e=t.bind(globalThis);return async n=>(await e(n,{headers:{accept:"application/json"}})).json()}});function s3(t){let e=t;return typeof e?.version=="string"?e.version:void 0}function a3(t,e){let n=$E(t),i=$E(e);if(n===void 0||i===void 0)return!1;for(let o=0;o<n.numbers.length;o+=1)if(n.numbers[o]!==i.numbers[o])return n.numbers[o]>i.numbers[o];return n.prerelease===i.prerelease?!1:n.prerelease===void 0?!0:i.prerelease===void 0?!1:n.prerelease>i.prerelease}function c3(t,e){return t==="vscode"?`Update the Morse extension \u2014 VS Code does that on its own for a Marketplace install \u2014 or install the ${e} VSIX and reload the window.`:`Run npm install -g @supanadit/morse-web@${e}, then start the host again.`}function jE(){if(typeof location>"u")return;let t=new URL(location.href,"http://localhost/").searchParams.get("newer");return t!==null&&t.length>0?t:void 0}function $E(t){let e=/^(\d+)\.(\d+)\.(\d+)(?:-([\w.-]+))?(?:\+[\w.-]+)?$/.exec(t.trim());if(e!==null)return{numbers:[Number(e[1]),Number(e[2]),Number(e[3])],prerelease:e[4]}}var Fs=class t{morse=N(Ze);loader=N(r3);notice=O(void 0);started=!1;available=this.notice.asReadonly();constructor(){se(()=>{let e=this.morse.capabilities();this.started||jE()===void 0&&e?.updateCheck!==!0||(this.started=!0,this.check(this.morse.version(),e?.hostKind??"server"))})}async check(e,n,i=this.loader){try{let o=jE()??(i===void 0?void 0:s3(await i(i3)));if(o===void 0||!a3(o,e))return;this.notice.set({current:e,latest:o,hint:c3(n,o),url:o3(o)})}catch{}}static \u0275fac=function(n){return new(n||t)};static \u0275prov=xe({token:t,factory:t.\u0275fac,providedIn:"root"})};var l3=(t,e)=>e.node.path;function d3(t,e){if(t&1){let n=$();h(0,"div",8),F("pointerdown",function(o){D(n);let r=m();return M(r.startResize(o))}),g()}}function u3(t,e){t&1&&(h(0,"p",9),u(1,"Loading files\u2026"),g())}function p3(t,e){t&1&&(h(0,"p",10),u(1),g()),t&2&&(d(),k(e))}function f3(t,e){t&1&&(h(0,"p",9),u(1,"No files found."),g())}function m3(t,e){if(t&1&&(h(0,"span",17),u(1),g()),t&2){let n=e,i=m(5);Tn("badge "+n),ie("title",i.badgeTitle(n)),d(),k(n)}}function h3(t,e){if(t&1&&w(0,m3,2,4,"span",16),t&2){let n,i=m().$implicit,o=m(3);S((n=o.changeOf(i.node.path))?0:-1,n)}}function g3(t,e){t&1&&ce(0,"span",15)}function y3(t,e){if(t&1){let n=$();h(0,"button",12),F("click",function(){let o=D(n).$implicit,r=m(3);return M(r.onRow(o.node))}),h(1,"span",13),u(2),g(),h(3,"span",14),u(4),g(),w(5,h3,1,1)(6,g3,1,0,"span",15),g()}if(t&2){let n=e.$implicit,i=m(3);At("padding-left",6+n.depth*12,"px"),X("dir",n.node.kind==="dir"),ie("title",n.node.path),d(2),k(i.glyph(n.node)),d(2),k(n.node.name),d(),S(n.node.kind==="file"?5:i.dirChanged(n.node.path)?6:-1)}}function _3(t,e){if(t&1&&oe(0,y3,7,8,"button",11,l3),t&2){let n=m(2);re(n.rows())}}function v3(t,e){if(t&1&&(h(0,"div",7),w(1,u3,2,0,"p",9)(2,p3,2,1,"p",10)(3,f3,2,0,"p",9)(4,_3,2,0),g()),t&2){let n,i=m();d(),S(i.isLoading()&&i.rows().length===0?1:(n=i.errorMessage())?2:i.rows().length===0?3:4,n)}}var b3=140,ku=class t{morse=N(Ze);tabs=N(dn);shell=N(Ht);workspace=N(zi);host=N(Bt);height=this.shell.explorerHeight;expanded=O(new Set);folded=O(!1);expandedFor="";tree=E(()=>ME(this.workspace.files()));rows=E(()=>x3(this.tree(),this.expanded()));fileCount=E(()=>BE(this.tree()));collapsed=this.folded.asReadonly();isLoading=this.workspace.busy;errorMessage=this.workspace.error;changes=E(()=>Ud(this.workspace.status()));changedDirs=E(()=>{let e=new Set;for(let n of this.changes().keys()){let i=n.split("/");for(let o=1;o<i.length;o+=1)e.add(i.slice(0,o).join("/"))}return e});constructor(){se(()=>{let e=this.morse.state().workspace.cwd;ii(()=>{e.length>0&&e!==this.expandedFor&&(this.expanded.set(new Set),this.expandedFor=e)})})}glyph(e){return e.kind==="dir"?this.expanded().has(e.path)?"\u25BE":"\u25B8":Eu(e.name)}isExpanded(e){return this.expanded().has(e)}changeOf(e){return this.changes().get(e)}badgeTitle(e){switch(e){case"M":return"Modified";case"A":return"Added";case"D":return"Deleted";case"R":return"Renamed";case"U":return"Untracked";case"C":return"Conflict"}}dirChanged(e){return this.changedDirs().has(e)}toggleFold(){this.folded.update(e=>!e)}refresh(){this.workspace.refresh()}onRow(e){if(e.kind==="dir"){this.expanded.update(n=>{let i=new Set(n);return i.has(e.path)?i.delete(e.path):i.add(e.path),i});return}this.tabs.openFile(e.path)}startResize(e){e.preventDefault();let n=this.host.nativeElement,i=n.getBoundingClientRect().bottom,o=n.parentElement?.getBoundingClientRect().top??0,r=Math.max(b3,i-o-120),s=e.currentTarget;s.setPointerCapture(e.pointerId);let a=l=>{this.shell.setExplorerHeight(Math.min(r,i-l.clientY))},c=()=>{s.removeEventListener("pointermove",a),s.removeEventListener("pointerup",c),s.removeEventListener("pointercancel",c)};s.addEventListener("pointermove",a),s.addEventListener("pointerup",c),s.addEventListener("pointercancel",c)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-file-explorer"]],hostVars:4,hostBindings:function(n,i){n&2&&(At("height",i.collapsed()?null:i.height(),"px"),X("sized",i.height()!==void 0&&!i.collapsed()))},decls:12,vars:6,consts:[[1,"pane-head"],["role","separator","aria-orientation","horizontal","aria-label","Resize the file explorer","title","Drag to resize",1,"resize"],["type","button",1,"pane-toggle",3,"click"],[1,"chevron"],[1,"pane-title"],[1,"pane-count"],["type","button","title","Refresh files","aria-label","Refresh files",1,"icon",3,"click"],[1,"rows"],["role","separator","aria-orientation","horizontal","aria-label","Resize the file explorer","title","Drag to resize",1,"resize",3,"pointerdown"],[1,"hint"],[1,"hint","error"],["type","button",1,"row",3,"dir","paddingLeft","title"],["type","button",1,"row",3,"click","title"],["aria-hidden","true",1,"glyph"],[1,"name"],["title","Contains changes","aria-hidden","true",1,"dot"],[3,"class","title"],[3,"title"]],template:function(n,i){n&1&&(h(0,"div",0),w(1,d3,1,0,"div",1),h(2,"button",2),F("click",function(){return i.toggleFold()}),h(3,"span",3),u(4,"\u203A"),g(),h(5,"span",4),u(6,"Explorer"),g(),h(7,"span",5),u(8),g()(),h(9,"button",6),F("click",function(){return i.refresh()}),u(10," \u27F3 "),g()(),w(11,v3,5,1,"div",7)),n&2&&(d(),S(i.collapsed()?-1:1),d(),J("aria-expanded",!i.collapsed()),d(),X("open",!i.collapsed()),d(5),k(i.fileCount()),d(3),S(i.collapsed()?-1:11))},styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;flex:none;position:relative;min-height:0;max-height:42vh;border-top:1px solid var(--%NS%morse-border)}.sized[_nghost-%COMP%]{max-height:none}.resize[_ngcontent-%COMP%]{position:absolute;top:-3px;left:0;right:0;height:7px;z-index:2;cursor:ns-resize}.resize[_ngcontent-%COMP%]:hover{background:color-mix(in srgb,var(--%NS%morse-accent) 60%,transparent)}.pane-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:4px;flex:none;padding:8px 10px 6px}.pane-toggle[_ngcontent-%COMP%]{display:flex;align-items:center;gap:5px;flex:1;min-width:0;padding:0;border:0;background:none;color:inherit;cursor:pointer}.pane-toggle[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover);border-radius:var(--%NS%morse-radius-sm)}.pane-title[_ngcontent-%COMP%]{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--%NS%morse-fg-muted)}.pane-count[_ngcontent-%COMP%]{font-size:10.5px;color:var(--%NS%morse-fg-muted)}.chevron[_ngcontent-%COMP%]{flex:none;display:inline-block;color:var(--%NS%morse-fg-muted);transition:transform .12s ease}.chevron.open[_ngcontent-%COMP%]{transform:rotate(90deg)}.icon[_ngcontent-%COMP%]{flex:none;width:22px;height:22px;padding:0;border:0;border-radius:6px;background:none;color:var(--%NS%morse-fg-muted);cursor:pointer}.icon[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.rows[_ngcontent-%COMP%]{flex:1;min-height:0;overflow:auto;padding:0 6px 8px}.row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;width:100%;padding:2px 6px;border:0;border-radius:6px;background:none;color:var(--%NS%morse-fg);font:inherit;text-align:left;cursor:pointer}.row[_ngcontent-%COMP%]:hover:not(:disabled), .row[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--%NS%morse-hover)}.glyph[_ngcontent-%COMP%]{flex:none;width:13px;text-align:center;color:var(--%NS%morse-fg-muted);font-size:11px}.name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px}.row.dir[_ngcontent-%COMP%] .name[_ngcontent-%COMP%]{font-weight:600}.badge[_ngcontent-%COMP%]{flex:none;padding:0 4px;border-radius:4px;font-family:var(--%NS%morse-font-mono);font-size:9.5px;line-height:15px;color:var(--%NS%morse-fg-muted)}.badge.M[_ngcontent-%COMP%]{color:var(--%NS%morse-warn)}.badge.A[_ngcontent-%COMP%], .badge.U[_ngcontent-%COMP%]{color:var(--%NS%morse-success)}.badge.D[_ngcontent-%COMP%], .badge.C[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.badge.R[_ngcontent-%COMP%]{color:var(--%NS%morse-info)}.dot[_ngcontent-%COMP%]{flex:none;width:6px;height:6px;border-radius:50%;background:var(--%NS%morse-warn)}.hint[_ngcontent-%COMP%]{padding:4px 12px 10px;font-size:11.5px;color:var(--%NS%morse-fg-muted)}.hint.error[_ngcontent-%COMP%]{color:var(--%NS%morse-warn)}"]})};function x3(t,e){let n=[],i=(o,r)=>{for(let s of o)n.push({node:s,depth:r}),s.kind==="dir"&&e.has(s.path)&&i(s.children,r+1)};return i(t,0),n}function BE(t){let e=0;for(let n of t)e+=n.kind==="file"?1:BE(n.children);return e}var C3=["search"],E3=["list"],w3=(t,e)=>e.path||"all";function S3(t,e){if(t&1&&(h(0,"span",17),u(1),g()),t&2){let n=m().$implicit;d(),k(n.path)}}function T3(t,e){t&1&&(h(0,"span",19),u(1,"\u2713"),g())}function D3(t,e){if(t&1){let n=$();h(0,"button",15),F("mouseenter",function(){let o=D(n).$index,r=m();return M(r.active.set(o))})("click",function(){let o=D(n).$implicit,r=m();return M(r.pick(o))}),h(1,"span",16),u(2),g(),w(3,S3,2,1,"span",17),h(4,"span",18),u(5),g(),w(6,T3,2,0,"span",19),g()}if(t&2){let n=e.$implicit,i=m();X("all",n.all)("active",n.path===i.rows()[i.active()].path)("selected",n.path===i.selected()),ie("title",n.path||"Every project pi knows about"),J("aria-selected",n.path===i.selected()),d(2),k(n.name),d(),S(n.all?-1:3),d(2),k(n.sessionCount),d(),S(n.path===i.selected()?6:-1)}}var M3="All projects";function k3(t,e,n){let i={path:"",name:M3,sessionCount:n,all:!0},o=e.trim().toLowerCase(),r=t.filter(s=>o.length===0||`${s.name} ${s.path}`.toLowerCase().includes(o)).map(s=>K(V({},s),{all:!1}));return[i,...r]}var Iu=class t{projects=te.required();selected=te("");totalSessions=te(0);select=it();close=it();search=Xe("search");list=Xe("list");query=O("");active=O(0);rows=E(()=>k3(this.projects(),this.query(),this.totalSessions()));constructor(){no(()=>this.search()?.nativeElement.focus()),se(()=>{if(this.query().trim().length>0)return;let e=this.rows().findIndex(n=>n.path===this.selected());e>=0&&this.active.set(e)}),se(()=>{this.active(),this.rows(),setTimeout(()=>this.revealActive(),0)})}revealActive(){let e=this.list()?.nativeElement,n=e?.querySelectorAll(".row")[this.active()];if(!e||!n)return;let i=e.getBoundingClientRect(),o=n.getBoundingClientRect();o.top<i.top?e.scrollTop-=i.top-o.top:o.bottom>i.bottom&&(e.scrollTop+=o.bottom-i.bottom)}onQuery(e){this.query.set(e.target.value),this.active.set(0)}pick(e){this.select.emit(e.path)}onKeydown(e){let n=this.rows();switch(e.key){case"Escape":e.preventDefault(),this.close.emit();return;case"ArrowDown":e.preventDefault(),this.active.update(i=>Math.min(i+1,Math.max(0,n.length-1)));return;case"ArrowUp":e.preventDefault(),this.active.update(i=>Math.max(0,i-1));return;case"Enter":{let i=n[this.active()];i&&(e.preventDefault(),this.pick(i));return}default:return}}onEscape(){this.close.emit()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-project-filter"]],viewQuery:function(n,i){n&1&>(i.search,C3,5)(i.list,E3,5),n&2&&vt(2)},hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},inputs:{projects:[1,"projects"],selected:[1,"selected"],totalSessions:[1,"totalSessions"]},outputs:{select:"select",close:"close"},decls:18,vars:1,consts:[["search",""],["list",""],[1,"modal-layer",3,"click"],["role","dialog","aria-modal","true","aria-labelledby","project-filter-title",1,"modal-card",3,"click"],[1,"modal-head"],["id","project-filter-title"],["type","button","aria-label","Close",1,"close",3,"click"],[1,"search"],["aria-hidden","true",1,"search-icon"],["viewBox","0 0 16 16"],["cx","7","cy","7","r","4.2"],["d","M10.2 10.2 14 14"],["type","text","placeholder","Search projects","aria-label","Search projects",3,"input","keydown","value"],["role","listbox",1,"list"],["type","button","role","option",1,"row",3,"all","active","selected","title"],["type","button","role","option",1,"row",3,"mouseenter","click","title"],[1,"name"],[1,"path"],[1,"count"],["aria-hidden","true",1,"check"]],template:function(n,i){n&1&&(h(0,"div",2),F("click",function(){return i.close.emit()}),h(1,"div",3),F("click",function(r){return r.stopPropagation()}),h(2,"div",4)(3,"strong",5),u(4,"Filter by project"),g(),h(5,"button",6),F("click",function(){return i.close.emit()}),u(6,"\xD7"),g()(),h(7,"div",7)(8,"span",8),st(),h(9,"svg",9),ce(10,"circle",10)(11,"path",11),g()(),Jt(),h(12,"input",12,0),F("input",function(r){return i.onQuery(r)})("keydown",function(r){return i.onKeydown(r)}),g()(),h(14,"div",13,1),oe(16,D3,7,12,"button",14,w3),g()()()),n&2&&(d(12),ie("value",i.query()),d(4),re(i.rows()))},styles:["[_nghost-%COMP%]{display:contents}.modal-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:65;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.modal-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:min(520px,100%);max-height:min(640px,90vh);border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 18px 48px #0006;overflow:hidden}.modal-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--%NS%morse-border)}.modal-head[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{flex:1;min-width:0;font-size:13px}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{padding:2px 8px;border:0;background:transparent;color:var(--%NS%morse-fg-muted);font-size:16px;line-height:1;cursor:pointer}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]:hover{color:var(--%NS%morse-fg)}.search[_ngcontent-%COMP%]{position:relative;display:flex;align-items:center;padding:10px 14px;border-bottom:1px solid var(--%NS%morse-border)}.search-icon[_ngcontent-%COMP%]{position:absolute;left:23px;display:inline-flex;color:var(--%NS%morse-fg-muted);pointer-events:none}.search-icon[_ngcontent-%COMP%] svg[_ngcontent-%COMP%]{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.4;stroke-linecap:round}.search[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1;min-width:0;padding-left:30px;font-size:12.5px}.list[_ngcontent-%COMP%]{flex:1;min-height:120px;overflow-y:auto;padding:4px 6px}.row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg);font:inherit;font-size:12.5px;text-align:left;cursor:pointer}.row.active[_ngcontent-%COMP%], .row[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.row.selected[_ngcontent-%COMP%]{background:var(--%NS%morse-active)}.row.all[_ngcontent-%COMP%]{margin-bottom:4px;border-bottom:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm) var(--%NS%morse-radius-sm) 0 0}.name[_ngcontent-%COMP%]{flex:0 1 auto;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.path[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:11px}.count[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-fg-muted);font-size:11px}.check[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-accent);font-size:12px}.empty[_ngcontent-%COMP%]{padding:12px 8px;color:var(--%NS%morse-fg-muted);font-size:12px}"]})};var I3=["search"],UE=(t,e)=>e.path,zE=(t,e)=>e.id;function N3(t,e){if(t&1){let n=$();y(0,"button",15),A("click",function(){D(n);let o=m();return M(o.openFilter())}),y(1,"span",16),u(2,"\u25A4"),b(),y(3,"span",17),u(4),b()()}if(t&2){let n=m();X("filtered",n.selectedProject()!==void 0),q("title",n.selectedProject()?.path??"Every project pi knows about"),J("aria-expanded",n.filterOpen()),d(4),k(n.selectedProject()?.name??"All projects")}}function O3(t,e){if(t&1){let n=$();y(0,"morse-project-filter",18),A("select",function(o){D(n);let r=m();return M(r.onProjectSelect(o))})("close",function(){D(n);let o=m();return M(o.closeFilter())}),b()}if(t&2){let n=m();q("projects",n.projectOptions())("selected",n.projectFilter())("totalSessions",n.totalSessions())}}function P3(t,e){if(t&1){let n=$();y(0,"li")(1,"button",22),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.activate(o))})("contextmenu",function(o){let r=D(n).$implicit,s=m(2);return M(s.openMenu(o,r))}),ve(2,"span",23),y(3,"span",24)(4,"span",25),u(5),b(),y(6,"span",26),u(7),b()()()()}if(t&2){let n=e.$implicit,i=m(2);d(),X("active",n.id===i.activeSessionId()),q("title",n.id),d(4),k(n.title),d(2),k(i.activityLabel(n))}}function A3(t,e){if(t&1&&(y(0,"section",9)(1,"div",19)(2,"span",20),u(3,"In progress"),b(),y(4,"span",21),u(5),b()(),y(6,"ul"),oe(7,P3,8,5,"li",null,zE),b()()),t&2){let n=m();d(5),k(n.inProgress().length),d(2),re(n.inProgress())}}function R3(t,e){if(t&1&&(y(0,"span",33),u(1,"\u203A"),b()),t&2){let n=m(2).$implicit,i=m();X("open",!i.isCollapsed(n.path))}}function L3(t,e){if(t&1){let n=$();y(0,"div",27)(1,"button",28),A("click",function(){D(n);let o=m().$implicit,r=m();return M(r.toggleGroup(o.path))}),y(2,"span",29),u(3),b(),y(4,"span",30),u(5),b(),w(6,R3,2,2,"span",31),b(),y(7,"button",32),A("click",function(o){D(n);let r=m().$implicit,s=m();return M(s.newSession(o,r.path))}),u(8," + "),b()()}if(t&2){let n=m().$implicit,i=m();d(),q("title",n.path),J("aria-expanded",!i.isCollapsed(n.path)),d(2),k(n.name),d(2),k(n.sessions.length),d(),S(i.projectFilter()!==n.path?6:-1),d(),J("aria-label","New session in "+n.name)}}function F3(t,e){if(t&1&&(y(0,"div",19)(1,"span",20),u(2,"Sessions"),b(),y(3,"span",21),u(4),b()()),t&2){let n=m().$implicit;d(4),k(n.sessions.length)}}function V3(t,e){if(t&1){let n=$();y(0,"li")(1,"button",34),A("click",function(){let o=D(n).$implicit,r=m(3);return M(r.activate(o))})("contextmenu",function(o){let r=D(n).$implicit,s=m(3);return M(s.openMenu(o,r))}),y(2,"span",24)(3,"span",25),u(4),b()(),y(5,"span",35),u(6),b()()()}if(t&2){let n=e.$implicit,i=m(3);d(),X("active",n.id===i.activeSessionId()),q("title",n.id),d(3),k(n.title),d(2),k(i.age(n.updatedAt))}}function j3(t,e){if(t&1&&u(0),t&2){let n=m(5);ae(" No session matches \u201C",n.query(),"\u201D. ")}}function $3(t,e){t&1&&u(0," No sessions yet. ")}function B3(t,e){if(t&1&&(y(0,"li",36),w(1,j3,1,1)(2,$3,1,0),b()),t&2){let n=m(4);d(),S(n.query().length>0?1:2)}}function H3(t,e){if(t&1&&w(0,B3,3,1,"li",36),t&2){let n=m(2).$implicit;S(n.hiddenRunning===0?0:-1)}}function U3(t,e){if(t&1&&(y(0,"ul"),oe(1,V3,7,5,"li",null,zE,!1,H3,1,1),b()),t&2){let n=m().$implicit;d(),re(n.sessions)}}function z3(t,e){if(t&1&&(y(0,"section",9),w(1,L3,9,6,"div",27)(2,F3,5,1,"div",19),w(3,U3,4,1,"ul"),b()),t&2){let n=e.$implicit,i=m();d(),S(i.scope()==="global"?1:n.sessions.length>0?2:-1),d(2),S(i.scope()==="workspace"||!i.isCollapsed(n.path)?3:-1)}}function G3(t,e){t&1&&u(0," Looking for a project? ")}function q3(t,e){if(t&1&&(u(0),w(1,G3,1,0)),t&2){let n=m(2);ae(" No session matches \u201C",n.query(),"\u201D. "),d(),S(n.projectMatches().length>0?1:-1)}}function W3(t,e){t&1&&u(0," Nothing found. ")}function Y3(t,e){if(t&1){let n=$();y(0,"button",38),A("click",function(){let o=D(n).$implicit,r=m(2);return M(r.filterToProject(o))}),u(1),b()}if(t&2){let n=e.$implicit;d(),wo(" Show all ",n.sessionCount," sessions in ",n.name," ")}}function K3(t,e){if(t&1&&(y(0,"p",36),w(1,q3,2,2)(2,W3,1,0),b(),oe(3,Y3,2,2,"button",37,UE)),t&2){let n=m();d(),S(n.query().length>0?1:2),d(2),re(n.projectMatches())}}function Z3(t,e){t&1&&ve(0,"morse-file-explorer")}function Q3(t,e){if(t&1&&(y(0,"a",11)(1,"span",39),u(2,"\u2191"),b(),y(3,"span"),u(4,"Update available"),b(),y(5,"span",13),u(6),b()()),t&2){let n=e;q("href",n.url,xi)("title",n.hint+" You are on v"+n.current+"."),d(6),ae("v",n.latest)}}function X3(t,e){t&1&&(y(0,"span",13),u(1),b()),t&2&&(d(),ae("v",e))}function J3(t,e){if(t&1){let n=$();y(0,"p",42),u(1,"Delete this session?"),b(),y(2,"p",43),u(3),b(),y(4,"button",44),A("click",function(){D(n);let o=m(2);return M(o.closeMenu())}),u(5,"Cancel"),b(),y(6,"button",45),A("click",function(){D(n);let o=m(),r=m();return M(r.deleteNow(o.session))}),u(7," Delete "),b()}if(t&2){let n=m();d(3),k(n.session.title)}}function eV(t,e){if(t&1){let n=$();y(0,"button",44),A("click",function(){D(n);let o=m(),r=m();return M(r.closeNow(o.session))}),u(1," Close session "),b(),y(2,"button",45),A("click",function(){D(n);let o=m(),r=m();return M(r.askDelete(o))}),u(3," Delete session\u2026 "),b()}}function tV(t,e){if(t&1){let n=$();y(0,"div",40),A("click",function(){D(n);let o=m();return M(o.closeMenu())})("contextmenu",function(o){D(n);let r=m();return o.preventDefault(),M(r.closeMenu())}),b(),y(1,"div",41),w(2,J3,8,1)(3,eV,4,0),b()}if(t&2){let n=e;d(),At("left",n.x,"px")("top",n.y,"px"),d(),S(n.confirming?2:3)}}var Nu=class t{morse=N(Ze);shell=N(Ht);shortcuts=N(An);update=N(Fs);tabs=N(dn);destroyRef=N(pt);searchInput=Xe("search");query=O("");collapsed=O({});menu=O(void 0);projectFilter=O("");filterOpen=this.shell.projectFilterOpen;nativeDialogs=E(()=>this.morse.capabilities()?.nativeDialogs===!0);activeSessionId=E(()=>this.morse.state().sessionId);version=this.morse.version;updateNotice=this.update.available;sessionActivity=this.morse.sessionActivity;scope=E(()=>this.morse.capabilities()?.scope??"global");filePreview=E(()=>this.morse.capabilities()?.filePreview===!0);directoryPicker=E(()=>this.morse.capabilities()?.directoryPicker===!0);isRunning(e){let n=this.sessionActivity().get(e.id);return n!==void 0?n.streaming:e.id===this.activeSessionId()&&this.morse.state().streaming}activityLabel(e){return e.id===this.activeSessionId()?this.activeStep()??"Working\u2026":"Working\u2026"}activeStep=E(()=>{let n=this.morse.items().at(-1);return n===void 0?void 0:nV(n)});inProgress=E(()=>{let e=this.projectFilter();return this.morse.sessions().filter(n=>(e.length===0||n.cwd===e)&&this.isRunning(n)).sort((n,i)=>i.updatedAt-n.updatedAt)});groups=E(()=>{let e=this.morse.sessions();if(this.scope()==="workspace"){let n=this.morse.workspace(),i=this.morse.projects()[0];return[{path:i?.path??n.cwd,name:n.name||i?.name||"workspace",sessions:e,hiddenRunning:0}]}return this.morse.projects().map(n=>({path:n.path,name:n.name,sessions:e.filter(i=>i.cwd===n.path),hiddenRunning:0}))});visibleGroups=E(()=>{let e=this.query().trim().toLowerCase(),n=this.projectFilter(),i=new Set(this.inProgress().map(r=>r.id));return(n.length===0?this.groups():this.groups().filter(r=>r.path===n)).map(r=>{let s=e.length===0?r.sessions:r.sessions.filter(c=>c.title.toLowerCase().includes(e)),a=s.filter(c=>!i.has(c.id));return K(V({},r),{sessions:a,hiddenRunning:s.length-a.length})}).filter(r=>n.length>0||e.length===0||r.sessions.length>0)});filterable=E(()=>this.scope()==="global");projectOptions=E(()=>this.groups().map(e=>({path:e.path,name:e.name,sessionCount:e.sessions.length})));selectedProject=E(()=>this.projectOptions().find(e=>e.path===this.projectFilter()));totalSessions=E(()=>this.morse.sessions().length);projectMatches=E(()=>{let e=this.query().trim().toLowerCase();return e.length===0||this.projectFilter().length>0?[]:this.projectOptions().filter(n=>`${n.name} ${n.path}`.toLowerCase().includes(e))});constructor(){let e=[this.shortcuts.bind("session.new",()=>this.startSession()),this.shortcuts.bind("session.search",()=>this.focusSearch()),this.shortcuts.bind("project.filter",()=>this.openFilterFromKeyboard(),()=>this.filterable())];this.destroyRef.onDestroy(()=>{for(let n of e)n()})}isCollapsed(e){return this.projectFilter()===e?!1:this.collapsed()[e]===!0}toggleGroup(e){this.projectFilter()!==e&&this.collapsed.update(n=>K(V({},n),{[e]:n[e]!==!0}))}activate(e){this.tabs.focusSession({id:e.id,title:e.title,cwd:e.cwd}),this.shell.closeNavigation()}openMenu(e,n){e.preventDefault(),e.stopPropagation(),this.menu.set({x:Math.max(0,Math.min(e.clientX,window.innerWidth-200)),y:Math.max(0,Math.min(e.clientY,window.innerHeight-104)),session:n,confirming:!1})}closeMenu(){this.menu.set(void 0)}closeNow(e){this.closeMenu(),this.tabs.forget(e.id),this.morse.closeSession(e.id)}askDelete(e){if(this.nativeDialogs()){this.confirmOnHost(e);return}this.menu.set(K(V({},e),{confirming:!0}))}async confirmOnHost(e){let n=await this.morse.requestHostCommand("confirmDeleteSession",{sessionId:e.session.id,title:e.session.title});if(n===void 0){this.menu.set(K(V({},e),{confirming:!0}));return}this.closeMenu(),n.confirmed===!0&&this.morse.deleteSession(e.session.id)}deleteNow(e){this.closeMenu(),this.tabs.forget(e.id),this.morse.deleteSession(e.id)}onEscape(){if(this.filterOpen()){this.closeFilter();return}this.menu()!==void 0&&this.closeMenu()}openFilter(){this.shell.openProjectFilter()}closeFilter(){this.shell.closeProjectFilter()}onProjectSelect(e){this.projectFilter.set(e),this.closeFilter()}filterToProject(e){this.projectFilter.set(e.path),this.query.set(""),this.closeFilter()}openAbout(){this.shell.openAbout()}openShortcuts(){this.shell.openShortcuts()}newSession(e,n){e.stopPropagation(),this.startSession(n)}startSession(e){if(e===void 0&&this.directoryPicker()){this.shell.openProjectPicker(),this.shell.closeNavigation();return}this.tabs.startDraft(e??this.morse.workspace().cwd),this.shell.closeNavigation()}revealNavigation(){this.shell.unfoldNavigation();let e=this.searchInput()?.nativeElement.getBoundingClientRect();(e===void 0||e.width===0||e.right<=0)&&this.shell.openNavigation()}focusSearch(){this.revealNavigation(),setTimeout(()=>{let e=this.searchInput()?.nativeElement;e?.focus(),e?.select()},0)}openFilterFromKeyboard(){this.revealNavigation(),this.shell.openProjectFilter()}refresh(){this.morse.requestProjects(),this.morse.requestSessions()}onQuery(e){this.query.set(e.target.value)}age(e){if(e<=0)return"";let n=Math.max(0,Math.round((Date.now()-e)/1e3));if(n<60)return`${n}s`;let i=Math.round(n/60);if(i<60)return`${i}m`;let o=Math.round(i/60);return o<24?`${o}h`:`${Math.round(o/24)}d`}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-session-nav"]],viewQuery:function(n,i){n&1&>(i.searchInput,I3,5),n&2&&vt()},hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},decls:26,vars:9,consts:[["search",""],[1,"head"],["type","button",1,"primary",3,"click"],["type","button","title","Refresh",1,"secondary","icon",3,"click"],[1,"filters"],["type","button","aria-haspopup","dialog",1,"secondary","scope",3,"filtered","title"],["type","search","placeholder","Search sessions\u2026","aria-label","Search sessions",3,"input","value"],[3,"projects","selected","totalSessions"],[1,"list"],[1,"pane"],[1,"foot"],["target","_blank","rel","noreferrer noopener",1,"notice",3,"href","title"],["type","button","title","Every key Morse understands",3,"click"],[1,"stamp"],["type","button","title","About Morse and the technologies it uses",3,"click"],["type","button","aria-haspopup","dialog",1,"secondary","scope",3,"click","title"],["aria-hidden","true",1,"scope-glyph"],[1,"scope-name"],[3,"select","close","projects","selected","totalSessions"],[1,"pane-head"],[1,"pane-title"],[1,"pane-count"],["type","button",1,"session","live",3,"click","contextmenu","title"],["aria-hidden","true",1,"mark","running"],[1,"body"],[1,"title"],[1,"subtitle"],[1,"group-head"],["type","button",1,"group-title",3,"click","title"],[1,"name"],[1,"count"],[1,"chevron",3,"open"],["type","button","title","New session in this project",1,"group-new",3,"click"],[1,"chevron"],["type","button",1,"session",3,"click","contextmenu","title"],[1,"meta"],[1,"empty"],["type","button",1,"empty-action"],["type","button",1,"empty-action",3,"click"],["aria-hidden","true",1,"notice-glyph"],[1,"context-menu-layer",3,"click","contextmenu"],["role","menu",1,"context-menu"],[1,"context-menu-question"],[1,"context-menu-title"],["type","button",1,"context-menu-item",3,"click"],["type","button",1,"context-menu-item","danger",3,"click"]],template:function(n,i){if(n&1&&(y(0,"div",1)(1,"button",2),A("click",function(r){return i.newSession(r)}),u(2," New session "),b(),y(3,"button",3),A("click",function(){return i.refresh()}),u(4,"\u27F3"),b()(),y(5,"div",4),w(6,N3,5,5,"button",5),y(7,"input",6,0),A("input",function(r){return i.onQuery(r)}),b()(),w(9,O3,1,3,"morse-project-filter",7),y(10,"div",8),w(11,A3,9,1,"section",9),oe(12,z3,4,2,"section",9,UE,!1,K3,5,1),b(),w(15,Z3,1,0,"morse-file-explorer"),y(16,"div",10),w(17,Q3,7,3,"a",11),y(18,"button",12),A("click",function(){return i.openShortcuts()}),u(19," Keyboard shortcuts "),y(20,"span",13),u(21,"?"),b()(),y(22,"button",14),A("click",function(){return i.openAbout()}),u(23," About Morse "),w(24,X3,2,1,"span",13),b()(),w(25,tV,4,5)),n&2){let o,r,s;d(6),S(i.filterable()?6:-1),d(),q("value",i.query()),d(2),S(i.filterOpen()?9:-1),d(2),S(i.inProgress().length>0?11:-1),d(),re(i.visibleGroups()),d(3),S(i.filePreview()?15:-1),d(2),S((o=i.updateNotice())?17:-1,o),d(7),S((r=i.version())?24:-1,r),d(),S((s=i.menu())?25:-1,s)}},dependencies:[Iu,ku],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;min-height:0;height:100%;background:var(--%NS%morse-nav-bg);border-right:1px solid var(--%NS%morse-border)}.head[_ngcontent-%COMP%]{flex:none;display:flex;align-items:center;gap:6px;min-height:var(--%NS%morse-head-height);padding:0 10px;border-bottom:1px solid var(--%NS%morse-border)}.head[_ngcontent-%COMP%] button.primary[_ngcontent-%COMP%]{flex:1;padding:6px 10px}.filters[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:6px;padding:10px 10px 6px}.filters[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{padding:6px 9px}.scope[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;justify-content:flex-start;width:100%}.scope.filtered[_ngcontent-%COMP%]{border-color:var(--%NS%morse-accent)}.scope-glyph[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-fg-muted);font-size:11px}.scope-name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.empty-action[_ngcontent-%COMP%]{display:block;width:calc(100% - 16px);margin:0 8px 6px;padding:4px 8px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-link);font-size:11.5px;text-align:left;cursor:pointer}.empty-action[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}input[_ngcontent-%COMP%]{width:100%}.list[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;padding:6px 8px 12px}.pane[_ngcontent-%COMP%] + .pane[_ngcontent-%COMP%]{margin-top:12px}.pane-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;padding:4px 7px 5px}.pane-title[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:10.5px;font-weight:600;letter-spacing:.07em;text-transform:uppercase}.pane-count[_ngcontent-%COMP%]{flex:none;color:var(--%NS%morse-fg-muted);font-size:10.5px;font-variant-numeric:tabular-nums}.group-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:2px}.group-title[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;flex:1;min-width:0;padding:5px 6px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:11px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;cursor:pointer}.group-title[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--%NS%morse-hover)}.group-title[_ngcontent-%COMP%] .name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:left}.group-title[_ngcontent-%COMP%] .count[_ngcontent-%COMP%]{flex:none}.group-new[_ngcontent-%COMP%]{flex:none;padding:1px 6px 2px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:15px;line-height:1.2;cursor:pointer}.group-new[_ngcontent-%COMP%]:hover:not(:disabled), .group-new[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.group-title[_ngcontent-%COMP%] .path[_ngcontent-%COMP%]{max-width:45%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl;font-weight:400;text-transform:none}.chevron[_ngcontent-%COMP%]{transition:transform .12s ease}.chevron.open[_ngcontent-%COMP%]{transform:rotate(90deg)}ul[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0}.session[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border:0;border-radius:var(--%NS%morse-radius-md);background:transparent;color:var(--%NS%morse-fg);text-align:left;cursor:pointer;transition:background .12s ease}.session[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.session.active[_ngcontent-%COMP%]{background:var(--%NS%morse-active);box-shadow:inset 2px 0 0 var(--%NS%morse-accent)}.session[_ngcontent-%COMP%] .body[_ngcontent-%COMP%]{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.session[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:500}.session.active[_ngcontent-%COMP%] .title[_ngcontent-%COMP%]{font-weight:600}.session[_ngcontent-%COMP%] .subtitle[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:11px}.session[_ngcontent-%COMP%] .meta[_ngcontent-%COMP%]{flex:none;font-size:10.5px;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-variant-numeric:tabular-nums}.session[_ngcontent-%COMP%] .mark[_ngcontent-%COMP%]{flex:none;width:10px;height:10px;border-radius:50%;background:var(--%NS%morse-fg-muted)}.session[_ngcontent-%COMP%] .mark.running[_ngcontent-%COMP%]{background:transparent;border:1.6px solid color-mix(in srgb,var(--%NS%morse-accent) 30%,transparent);border-top-color:var(--%NS%morse-accent);animation:_ngcontent-%COMP%_nav-spin .8s linear infinite}@keyframes _ngcontent-%COMP%_nav-spin{to{transform:rotate(360deg)}}.context-menu-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:40}.context-menu[_ngcontent-%COMP%]{position:fixed;z-index:41;width:220px;max-width:min(280px,90vw);padding:4px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 8px 24px #00000059}.context-menu-question[_ngcontent-%COMP%]{margin:3px 7px 0;font-size:11.5px;color:var(--%NS%morse-fg)}.context-menu-title[_ngcontent-%COMP%]{margin:2px 7px 6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:11px;color:var(--%NS%morse-fg-muted)}.context-menu-item[_ngcontent-%COMP%]{display:block;width:100%;padding:5px 8px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg);font-size:12px;text-align:left;cursor:pointer}.context-menu-item[_ngcontent-%COMP%]:hover:not(:disabled), .context-menu-item[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--%NS%morse-hover)}.context-menu-item.danger[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.empty[_ngcontent-%COMP%]{padding:8px;font-size:12px;color:var(--%NS%morse-fg-muted)}.foot[_ngcontent-%COMP%]{flex:none;padding:4px 6px 6px;border-top:1px solid var(--%NS%morse-border)}.foot[_ngcontent-%COMP%] button[_ngcontent-%COMP%], .foot[_ngcontent-%COMP%] .notice[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;width:100%;padding:5px 8px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:11px;text-align:left;cursor:pointer}.foot[_ngcontent-%COMP%] button[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.foot[_ngcontent-%COMP%] .notice[_ngcontent-%COMP%]{color:var(--%NS%morse-accent);text-decoration:none}.foot[_ngcontent-%COMP%] .notice[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-accent)}.foot[_ngcontent-%COMP%] .notice[_ngcontent-%COMP%] .notice-glyph[_ngcontent-%COMP%]{flex:none;font-size:11px}.foot[_ngcontent-%COMP%] .stamp[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;text-align:right;font-family:var(--%NS%morse-font-mono);font-size:10px}"]})};function nV(t){if(t.kind==="tool"){let e=uo(t.name),n=fE(t),i=Rs(t);return e==="shell"?`${n} ${HE(i.replace(/\s+/g," ").trim(),40)}`:e==="search"?`${n} ${HE(i,40)}`:`${n} ${gu(i)}`}if(t.kind==="assistant"){if(t.thinking.trim().length>0&&t.text.trim().length===0)return"Thinking\u2026";if(t.text.trim().length>0||t.streaming)return"Writing\u2026"}}function HE(t,e){return t.length>e?`${t.slice(0,e)}\u2026`:t}var GE=(t,e)=>e.path;function iV(t,e){if(t&1){let n=$();h(0,"button",20),F("click",function(){let o=D(n).$implicit,r=m(2);return M(r.go(o.path))}),u(1),g()}if(t&2){let n=e.$implicit;ie("title",n.path),d(),ae(" ",n.name," ")}}function oV(t,e){if(t&1&&(h(0,"div",9),oe(1,iV,2,2,"button",19,GE),g()),t&2){let n=m();d(),re(n.roots())}}function rV(t,e){t&1&&(h(0,"p",11),u(1,"Reading folder\u2026"),g())}function sV(t,e){t&1&&(h(0,"p",12),u(1),g()),t&2&&(d(),k(e))}function aV(t,e){if(t&1){let n=$();h(0,"button",22),F("click",function(){let o=D(n),r=m(2);return M(r.go(o))}),h(1,"span",23),u(2,"\u21B0"),g(),h(3,"span",24),u(4,".."),g()()}t&2&&ie("title",e)}function cV(t,e){if(t&1){let n=$();h(0,"button",22),F("click",function(){let o=D(n).$implicit,r=m(2);return M(r.go(o.path))}),h(1,"span",23),u(2,"\u25B8"),g(),h(3,"span",24),u(4),g()()}if(t&2){let n=e.$implicit;ie("title",n.path),d(4),k(n.name)}}function lV(t,e){t&1&&(h(0,"p",11),u(1,"No subfolders here."),g())}function dV(t,e){if(t&1&&w(0,lV,2,0,"p",11),t&2){let n=m(2);S(n.parent()===void 0&&n.directories().length===0?0:-1)}}function uV(t,e){if(t&1&&(w(0,aV,5,1,"button",21),oe(1,cV,5,2,"button",21,GE,!1,dV,1,1)),t&2){let n,i=m();S((n=i.parent())?0:-1,n),d(),re(i.directories())}}function pV(t,e){t&1&&(h(0,"em"),u(1," \xB7 not in MORSE_PROJECTS"),g())}function fV(t,e){t&1&&(h(0,"em",15),u(1," \xB7 git"),g())}var Ou=class t{morse=N(Ze);shell=N(Ht);tabs=N(dn);loading=O(!1);error=O(void 0);path=O("");draftPath=O("");parent=O(void 0);directories=O([]);roots=O([]);isGitRepo=O(!1);canOpen=O(!1);constructor(){this.load()}go(e){let n=e?.trim();this.load(n&&n.length>0?n:void 0)}onPathInput(e){this.draftPath.set(e.target.value)}close(){this.shell.closeProjectPicker()}confirm(){let e=this.path();e.length===0||!this.canOpen()||(this.tabs.startDraft(e),this.shell.closeNavigation(),this.close())}onEscape(){this.close()}load(e){this.loading.set(!0),this.error.set(void 0),this.morse.requestHostCommand("listDirectories",e?{path:e}:void 0).then(n=>{this.loading.set(!1);let i=n;if(!i||typeof i.path!="string"){this.error.set("That folder could not be read.");return}this.path.set(i.path),this.draftPath.set(i.path),this.parent.set(i.parent),this.directories.set(i.directories??[]),this.roots.set(i.roots??[]),this.isGitRepo.set(i.isGitRepo===!0),this.canOpen.set(i.canOpen===!0)})}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-project-picker"]],hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},decls:30,vars:10,consts:[[1,"modal-layer",3,"click"],["role","dialog","aria-modal","true","aria-label","Choose the folder for a new session",1,"modal-card",3,"click"],[1,"modal-head"],["type","button","title","Close","aria-label","Close",1,"close",3,"click"],[1,"modal-sub"],[1,"path-row"],["type","button","title","Parent folder","aria-label","Parent folder",3,"click","disabled"],["type","text","spellcheck","false","autocomplete","off","aria-label","Folder path",3,"input","keydown.enter","value"],["type","button",3,"click","disabled"],[1,"roots"],[1,"listing"],[1,"state"],[1,"state","error"],[1,"modal-foot"],[1,"selected",3,"title"],[1,"ok"],[1,"actions"],["type","button",1,"secondary",3,"click"],["type","button",1,"primary",3,"click","disabled"],["type","button",1,"chip",3,"title"],["type","button",1,"chip",3,"click","title"],["type","button",1,"row",3,"title"],["type","button",1,"row",3,"click","title"],["aria-hidden","true",1,"folder"],[1,"name"]],template:function(n,i){if(n&1&&(h(0,"div",0),F("click",function(){return i.close()}),h(1,"div",1),F("click",function(r){return r.stopPropagation()}),h(2,"header",2)(3,"strong"),u(4,"New session"),g(),h(5,"button",3),F("click",function(){return i.close()}),u(6," \xD7 "),g()(),h(7,"p",4),u(8," Choose the project folder the agent should run in. It starts only after your first prompt. "),g(),h(9,"div",5)(10,"button",6),F("click",function(){return i.go(i.parent())}),u(11," \u2191 "),g(),h(12,"input",7),F("input",function(r){return i.onPathInput(r)})("keydown.enter",function(){return i.go(i.draftPath())}),g(),h(13,"button",8),F("click",function(){return i.go(i.draftPath())}),u(14," Go "),g()(),w(15,oV,3,0,"div",9),h(16,"div",10),w(17,rV,2,0,"p",11)(18,sV,2,1,"p",12)(19,uV,4,2),g(),h(20,"footer",13)(21,"span",14),u(22),w(23,pV,2,0,"em"),w(24,fV,2,0,"em",15),g(),h(25,"div",16)(26,"button",17),F("click",function(){return i.close()}),u(27,"Cancel"),g(),h(28,"button",18),F("click",function(){return i.confirm()}),u(29," New session here "),g()()()()()),n&2){let o;d(10),ie("disabled",i.parent()===void 0),d(2),ie("value",i.draftPath()),d(),ie("disabled",i.draftPath().trim().length===0),d(2),S(i.roots().length>0?15:-1),d(2),S(i.loading()?17:(o=i.error())?18:19,o),d(4),ie("title",i.path()),d(),ae(" ",i.path()," "),d(),S(i.canOpen()?-1:23),d(),S(i.isGitRepo()?24:-1),d(4),ie("disabled",!i.canOpen()||i.loading())}},styles:["[_nghost-%COMP%]{display:contents}.modal-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:50;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.modal-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:min(560px,100%);max-height:min(640px,90vh);border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 18px 48px #0006;overflow:hidden}.modal-head[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--%NS%morse-border)}.modal-head[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{flex:1;font-size:13px}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{padding:2px 8px;border:0;background:transparent;color:var(--%NS%morse-fg-muted);font-size:16px;line-height:1;cursor:pointer}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]:hover{color:var(--%NS%morse-fg)}.modal-sub[_ngcontent-%COMP%]{margin:0;padding:8px 14px 0;color:var(--%NS%morse-fg-muted);font-size:11.5px}.path-row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;padding:10px 14px}.path-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1;min-width:0;font-family:var(--%NS%morse-font-mono);font-size:12px}.path-row[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:none;padding:4px 10px}.roots[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:6px;padding:0 14px 8px}.chip[_ngcontent-%COMP%]{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:2px 9px;border:1px solid var(--%NS%morse-border);border-radius:999px;background:transparent;color:var(--%NS%morse-fg-muted);font-size:11px;cursor:pointer}.chip[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.listing[_ngcontent-%COMP%]{flex:1;min-height:160px;overflow-y:auto;border-top:1px solid var(--%NS%morse-border);padding:4px 6px}.row[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg);text-align:left;cursor:pointer}.row[_ngcontent-%COMP%]:hover, .row[_ngcontent-%COMP%]:focus-visible{background:var(--%NS%morse-hover)}.row[_ngcontent-%COMP%] .folder[_ngcontent-%COMP%]{flex:none;width:14px;color:var(--%NS%morse-fg-muted);text-align:center}.row[_ngcontent-%COMP%] .name[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.row[_ngcontent-%COMP%] .mark[_ngcontent-%COMP%]{flex:none;padding:0 6px;border-radius:999px;background:var(--%NS%morse-badge-bg);color:var(--%NS%morse-badge-fg);font-size:10px}.state[_ngcontent-%COMP%]{margin:8px;color:var(--%NS%morse-fg-muted);font-size:12px}.state.error[_ngcontent-%COMP%]{color:var(--%NS%morse-error)}.modal-foot[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:12px 14px;border-top:1px solid var(--%NS%morse-border)}.selected[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl;text-align:left;color:var(--%NS%morse-fg-muted);font-family:var(--%NS%morse-font-mono);font-size:11px}.selected[_ngcontent-%COMP%] em[_ngcontent-%COMP%]{color:var(--%NS%morse-warn, var(--%NS%morse-error));font-style:normal}.actions[_ngcontent-%COMP%]{display:flex;flex:none;gap:6px}"]})};var qE=[{title:"The agent",blurb:"Morse never imports pi \u2014 it spawns `pi --mode rpc` and speaks its protocol.",entries:[{name:"pi coding agent",by:"Mario Zechner",license:"MIT",url:"https://github.com/earendil-works/pi",role:"Reads, runs, edits and thinks: every reply in this window is pi talking."}]},{title:"Interface",entries:[{name:"Angular",packages:["@angular/common","@angular/compiler","@angular/core","@angular/forms","@angular/platform-browser","@angular/router"],license:"MIT",url:"https://angular.dev",role:"Components, signals and the shell both hosts render.",by:"Google"},{name:"RxJS",packages:["rxjs"],license:"Apache-2.0",url:"https://rxjs.dev",role:"The streams Angular is built on."},{name:"marked",packages:["marked"],license:"MIT",url:"https://marked.js.org",role:"Turns the agent\u2019s markdown into HTML."},{name:"DOMPurify",packages:["dompurify"],license:"(MPL-2.0 OR Apache-2.0)",url:"https://github.com/cure53/DOMPurify",role:"Sanitises that HTML before it reaches the DOM.",by:"Cure53"},{name:"highlight.js",packages:["highlight.js"],license:"BSD-3-Clause",url:"https://highlightjs.org",role:"Syntax colours in code blocks."},{name:"anime.js",packages:["animejs"],license:"MIT",url:"https://animejs.com",role:"The cold-start intro and the drop-zone pulse.",by:"Julian Garnier"},{name:"tslib",packages:["tslib"],license:"0BSD",url:"https://github.com/microsoft/tslib",role:"TypeScript\u2019s own runtime helpers.",by:"Microsoft"}]},{title:"Hosts",entries:[{name:"NestJS",packages:["@nestjs/common","@nestjs/core","@nestjs/platform-express","@nestjs/platform-ws","@nestjs/websockets"],license:"MIT",url:"https://nestjs.com",role:"The browser host: static frontend plus one WebSocket gateway.",by:"Kamil My\u015Bliwiec"},{name:"ws",packages:["ws"],license:"MIT",url:"https://github.com/websockets/ws",role:"The WebSocket server NestJS sits on."},{name:"reflect-metadata",packages:["reflect-metadata"],license:"Apache-2.0",url:"https://github.com/rbuckton/reflect-metadata",role:"Decorator metadata for NestJS\u2019s dependency injection.",by:"Ron Buckton"},{name:"Node.js",by:"OpenJS Foundation",license:"MIT",url:"https://nodejs.org",role:"Runtime for the host and for pi itself."},{name:"Visual Studio Code",by:"Microsoft",license:"MIT",url:"https://code.visualstudio.com/api",role:"The editor Morse docks into, and the API it builds against."}]},{title:"Typeface",blurb:"The browser host bundles JetBrains Mono; VS Code keeps the editor\u2019s own font and downloads nothing.",entries:[{name:"JetBrains Mono",by:"JetBrains",license:"OFL-1.1",url:"https://www.jetbrains.com/lp/mono/",role:"The interface typeface, subset to latin and latin-ext. Licence text ships beside it."},{name:"Nerd Fonts",by:"Ryan L. McIntyre",license:"MIT",url:"https://www.nerdfonts.com",role:"Where the UI\u2019s icon glyphs come from \u2014 Morse bundles none, they follow the editor font."}]},{title:"Build & test",blurb:"Not shipped with the app \u2014 but nothing here would exist without them.",entries:[{name:"TypeScript",packages:["typescript"],license:"Apache-2.0",url:"https://www.typescriptlang.org",role:"Every line of Morse, typed.",by:"Microsoft"},{name:"Angular CLI & build",packages:["@angular/cli","@angular/build","@angular/compiler-cli"],license:"MIT",url:"https://angular.dev/tools/cli",role:"Builds, bundles and serves the frontend."},{name:"esbuild",packages:["esbuild"],license:"MIT",url:"https://esbuild.github.io",role:"Bundles the libraries, the server, the CLI and the extension.",by:"Evan Wallace"},{name:"Vitest",packages:["vitest"],license:"MIT",url:"https://vitest.dev",role:"The unit suites."},{name:"jsdom",packages:["jsdom"],license:"MIT",url:"https://github.com/jsdom/jsdom",role:"A DOM for those suites."},{name:"ESLint",packages:["eslint"],license:"MIT",url:"https://eslint.org",role:"Lints the extension."},{name:"typescript-eslint",packages:["typescript-eslint"],license:"MIT",url:"https://typescript-eslint.io",role:"The type-aware lint rules."},{name:"Prettier",packages:["prettier"],license:"MIT",url:"https://prettier.io",role:"Formatting, so no diff is about whitespace."},{name:"DefinitelyTyped",packages:["@types/node","@types/ws","@types/mocha","@types/vscode"],license:"MIT",url:"https://github.com/DefinitelyTyped/DefinitelyTyped",role:"Type definitions for Node, ws, mocha and the VS Code API."},{name:"VS Code test tools",packages:["@vscode/test-cli","@vscode/test-electron"],license:"MIT",url:"https://code.visualstudio.com/api/working-with-extensions/testing-extension",role:"Runs the integration suite in a real VS Code.",by:"Microsoft"},{name:"VSCE",packages:["@vscode/vsce"],license:"MIT",url:"https://github.com/microsoft/vscode-vsce",role:"Packages the extension into a .vsix.",by:"Microsoft"},{name:"npm-run-all",packages:["npm-run-all"],license:"MIT",url:"https://github.com/mysticatea/npm-run-all",role:"Runs the dev and watch scripts side by side.",by:"Toru Nagashima"}]}];var mV=(t,e)=>e.title,hV=(t,e)=>e.name;function gV(t,e){if(t&1&&(h(0,"div")(1,"dt"),u(2,"update"),g(),h(3,"dd")(4,"a",14),u(5),g()()()),t&2){let n=e;d(4),ie("href",n.url,xi)("title",n.hint),d(),ae(" v",n.latest," available ")}}function yV(t,e){t&1&&(h(0,"p",15),u(1),g()),t&2&&(d(),k(e))}function _V(t,e){t&1&&(h(0,"span",17),u(1),g()),t&2&&(d(),ae("by ",e))}function vV(t,e){if(t&1&&(h(0,"li")(1,"a",16),u(2),w(3,_V,2,1,"span",17),g(),h(4,"span",18),u(5),g(),h(6,"p",19),u(7),g()()),t&2){let n,i=e.$implicit;d(),ie("href",i.url,xi),d(),ae(" ",i.name," "),d(),S((n=i.by)?3:-1,n),d(2),k(i.license),d(2),k(i.role)}}function bV(t,e){if(t&1&&(h(0,"section",9)(1,"h3"),u(2),g(),w(3,yV,2,1,"p",15),h(4,"ul"),oe(5,vV,8,5,"li",null,hV),g()()),t&2){let n,i=e.$implicit;d(2),k(i.title),d(),S((n=i.blurb)?3:-1,n),d(2),re(i.entries)}}var Pu=class t{morse=N(Ze);shell=N(Ht);update=N(Fs);groups=qE;protocolVersion=this.morse.protocolVersion;updateNotice=this.update.available;frontend=E(()=>{let e=this.morse.frontend();return e?`${e.name} ${e.version}`:"not reported by this host"});host=E(()=>{let e=this.morse.capabilities();return e?`${e.hostKind} \xB7 ${e.scope}`:"not connected"});close(){this.shell.closeAbout()}onEscape(){this.close()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-about-dialog"]],hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},decls:42,vars:4,consts:[[1,"modal-layer",3,"click"],["role","dialog","aria-modal","true","aria-labelledby","about-title",1,"modal-card",3,"click"],[1,"modal-head"],["id","about-title"],[1,"stamp"],["type","button","aria-label","Close",1,"close",3,"click"],[1,"intro"],[1,"identity"],[1,"scroll"],[1,"group"],[1,"modal-foot"],[1,"spacer"],["href","https://github.com/supanadit/morse","target","_blank","rel","noreferrer noopener"],["type","button",1,"secondary",3,"click"],["target","_blank","rel","noreferrer noopener",3,"href","title"],[1,"blurb"],["target","_blank","rel","noreferrer noopener",1,"name",3,"href"],[1,"by"],[1,"license"],[1,"role"]],template:function(n,i){if(n&1&&(h(0,"div",0),F("click",function(){return i.close()}),h(1,"div",1),F("click",function(r){return r.stopPropagation()}),h(2,"div",2)(3,"strong",3),u(4,"About Morse"),g(),h(5,"span",4),u(6,"a comfortable Pi interface \xB7 MIT"),g(),h(7,"button",5),F("click",function(){return i.close()}),u(8,"\xD7"),g()(),h(9,"p",6),u(10," One chat frontend for the pi coding agent: a VS Code panel, or a browser served by the Morse host. Morse never imports pi \u2014 it drives "),h(11,"code"),u(12,"pi --mode rpc"),g(),u(13," \u2014 and never talks to a model provider itself. Below is what it stands on, and the licence each piece asks for. "),g(),h(14,"dl",7)(15,"div")(16,"dt"),u(17,"frontend"),g(),h(18,"dd"),u(19),g()(),h(20,"div")(21,"dt"),u(22,"protocol"),g(),h(23,"dd"),u(24),g()(),h(25,"div")(26,"dt"),u(27,"host"),g(),h(28,"dd"),u(29),g()(),w(30,gV,6,3,"div"),g(),h(31,"div",8),oe(32,bV,7,2,"section",9,mV),g(),h(34,"div",10)(35,"span"),u(36,"Licence texts ship with this build. Morse is MIT \xB7 \xA9 2026 Supan Adit Pratama."),g(),ce(37,"span",11),h(38,"a",12),u(39," Source "),g(),h(40,"button",13),F("click",function(){return i.close()}),u(41,"Close"),g()()()()),n&2){let o;d(19),k(i.frontend()),d(5),k(i.protocolVersion()),d(5),k(i.host()),d(),S((o=i.updateNotice())?30:-1,o),d(2),re(i.groups)}},styles:["[_nghost-%COMP%]{display:contents}.modal-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:60;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.modal-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:min(620px,100%);max-height:min(680px,90vh);border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 18px 48px #0006;overflow:hidden}.modal-head[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:8px;padding:12px 14px;border-bottom:1px solid var(--%NS%morse-border)}.modal-head[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:13px}.modal-head[_ngcontent-%COMP%] .stamp[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:11px}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{padding:2px 8px;border:0;background:transparent;color:var(--%NS%morse-fg-muted);font-size:16px;line-height:1;cursor:pointer}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]:hover{color:var(--%NS%morse-fg)}.intro[_ngcontent-%COMP%]{margin:0;padding:10px 14px 0;color:var(--%NS%morse-fg-muted);font-size:11.5px;line-height:1.55}.intro[_ngcontent-%COMP%] code[_ngcontent-%COMP%], .role[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--%NS%morse-font-mono);font-size:11px;padding:0 3px;border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-hover)}dl.identity[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:6px 18px;margin:10px 14px 0;padding:8px 10px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-md);background:var(--%NS%morse-hover);font-size:11px}dl.identity[_ngcontent-%COMP%] div[_ngcontent-%COMP%]{display:flex;gap:6px;min-width:0}dt[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted);text-transform:uppercase;letter-spacing:.04em}dd[_ngcontent-%COMP%]{margin:0;font-family:var(--%NS%morse-font-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}dl.identity[_ngcontent-%COMP%] dd[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{color:var(--%NS%morse-link)}dl.identity[_ngcontent-%COMP%] dd[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{text-decoration:underline}.scroll[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;padding:6px 14px 12px}.group[_ngcontent-%COMP%]{margin-top:12px}.group[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 2px;color:var(--%NS%morse-fg-muted);font-size:11px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}.blurb[_ngcontent-%COMP%]{margin:0 0 6px;color:var(--%NS%morse-fg-muted);font-size:11px}ul[_ngcontent-%COMP%]{margin:0;padding:0;list-style:none}li[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:0 8px;padding:6px 8px;border-radius:var(--%NS%morse-radius-sm)}li[_ngcontent-%COMP%] + li[_ngcontent-%COMP%]{border-top:1px solid var(--%NS%morse-hover)}li[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}.name[_ngcontent-%COMP%]{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg);font-size:12px;font-weight:600;text-decoration:none}.name[_ngcontent-%COMP%]:hover{color:var(--%NS%morse-link);text-decoration:underline}.by[_ngcontent-%COMP%]{margin-left:6px;color:var(--%NS%morse-fg-muted);font-size:11px;font-weight:400}.license[_ngcontent-%COMP%]{justify-self:end;padding:1px 7px;border-radius:999px;background:var(--%NS%morse-badge-bg);color:var(--%NS%morse-badge-fg);font-family:var(--%NS%morse-font-mono);font-size:10px}.role[_ngcontent-%COMP%]{grid-column:1 / -1;margin:2px 0 0;color:var(--%NS%morse-fg-muted);font-size:11px;line-height:1.5}.modal-foot[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-top:1px solid var(--%NS%morse-border);color:var(--%NS%morse-fg-muted);font-size:11px}.modal-foot[_ngcontent-%COMP%] .spacer[_ngcontent-%COMP%]{flex:1;min-width:0}"]})};var xV=(t,e)=>e.name,CV=(t,e)=>e.id;function EV(t,e){t&1&&(h(0,"span",15),u(1,"not in this host"),g())}function wV(t,e){if(t&1&&(h(0,"li")(1,"div",13)(2,"span",14),u(3),w(4,EV,2,0,"span",15),g(),h(5,"span",16),u(6),g()(),h(7,"kbd"),u(8),g()()),t&2){let n=e.$implicit;X("unavailable",n.available===!1),d(3),ae(" ",n.label," "),d(),S(n.available===!1?4:-1),d(2),k(n.detail),d(2),k(n.keys)}}function SV(t,e){if(t&1&&(h(0,"section",8)(1,"h3"),u(2),g(),h(3,"ul"),oe(4,wV,9,6,"li",12,CV),g()()),t&2){let n=e.$implicit;d(2),k(n.name),d(2),re(n.rows)}}var Au=class t{shell=N(Ht);shortcuts=N(An);groups=E(()=>{let e=this.shortcuts.available(),n=new Map;for(let i of Ja){let o=n.get(i.group)??[];o.push({id:i.id,label:i.label,detail:i.detail,keys:ec(i)?hx(i.binding):i.keys,available:ec(i)?e.get(i.id)===!0:void 0}),n.set(i.group,o)}return[...n].map(([i,o])=>({name:i,rows:o}))});close(){this.shell.closeShortcuts()}onEscape(){this.close()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-shortcuts-dialog"]],hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},decls:20,vars:0,consts:[[1,"modal-layer",3,"click"],["role","dialog","aria-modal","true","aria-labelledby","shortcuts-title",1,"modal-card",3,"click"],[1,"modal-head"],["id","shortcuts-title"],[1,"stamp"],["type","button","aria-label","Close",1,"close",3,"click"],[1,"intro"],[1,"scroll"],[1,"group"],[1,"modal-foot"],[1,"spacer"],["type","button",1,"secondary",3,"click"],[3,"unavailable"],[1,"what"],[1,"label"],[1,"why"],[1,"detail"]],template:function(n,i){n&1&&(h(0,"div",0),F("click",function(){return i.close()}),h(1,"div",1),F("click",function(r){return r.stopPropagation()}),h(2,"div",2)(3,"strong",3),u(4,"Keyboard shortcuts"),g(),h(5,"span",4),u(6,"the same keys in the browser and in the VS Code panel"),g(),h(7,"button",5),F("click",function(){return i.close()}),u(8,"\xD7"),g()(),h(9,"p",6),u(10," Every key Morse understands, whether or not it is a shortcut you can see in the interface. They apply while the Morse panel has focus \u2014 and a row marked \u201Cnot in this host\u201D is a key this host has nothing to do. "),g(),h(11,"div",7),oe(12,SV,6,1,"section",8,xV),g(),h(14,"div",9)(15,"span"),u(16,"Esc closes this list, and the panel in front of it."),g(),ce(17,"span",10),h(18,"button",11),F("click",function(){return i.close()}),u(19,"Close"),g()()()()),n&2&&(d(12),re(i.groups()))},styles:["[_nghost-%COMP%]{display:contents}.modal-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:66;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.modal-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;width:min(560px,100%);max-height:min(620px,90vh);border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 18px 48px #0006;overflow:hidden}.modal-head[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:8px;padding:12px 14px;border-bottom:1px solid var(--%NS%morse-border)}.modal-head[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:13px}.modal-head[_ngcontent-%COMP%] .stamp[_ngcontent-%COMP%]{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--%NS%morse-fg-muted);font-size:11px}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]{padding:2px 8px;border:0;background:transparent;color:var(--%NS%morse-fg-muted);font-size:16px;line-height:1;cursor:pointer}.modal-head[_ngcontent-%COMP%] .close[_ngcontent-%COMP%]:hover{color:var(--%NS%morse-fg)}.intro[_ngcontent-%COMP%]{margin:0;padding:10px 14px 0;color:var(--%NS%morse-fg-muted);font-size:11.5px;line-height:1.55}.scroll[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;padding:4px 14px 12px}.group[_ngcontent-%COMP%]{margin-top:12px}.group[_ngcontent-%COMP%] h3[_ngcontent-%COMP%]{margin:0 0 4px;color:var(--%NS%morse-fg-muted);font-size:11px;font-weight:600;letter-spacing:.03em;text-transform:uppercase}ul[_ngcontent-%COMP%]{margin:0;padding:0;list-style:none}li[_ngcontent-%COMP%]{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:start;gap:8px;padding:6px 8px;border-radius:var(--%NS%morse-radius-sm)}li[_ngcontent-%COMP%] + li[_ngcontent-%COMP%]{border-top:1px solid var(--%NS%morse-hover)}li[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover)}li.unavailable[_ngcontent-%COMP%] .label[_ngcontent-%COMP%], li.unavailable[_ngcontent-%COMP%] kbd[_ngcontent-%COMP%]{opacity:.55}.what[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1px;min-width:0}.label[_ngcontent-%COMP%]{font-size:12px;font-weight:600}.why[_ngcontent-%COMP%]{margin-left:6px;padding:1px 6px;border-radius:999px;background:var(--%NS%morse-badge-bg);color:var(--%NS%morse-badge-fg);font-size:10px;font-weight:400}.detail[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted);font-size:11px;line-height:1.5}kbd[_ngcontent-%COMP%]{justify-self:end;padding:2px 7px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-bg);color:var(--%NS%morse-fg);font-family:var(--%NS%morse-font-mono);font-size:11px;white-space:nowrap}.modal-foot[_ngcontent-%COMP%]{display:flex;align-items:center;gap:10px;padding:10px 14px;border-top:1px solid var(--%NS%morse-border);color:var(--%NS%morse-fg-muted);font-size:11px}.modal-foot[_ngcontent-%COMP%] .spacer[_ngcontent-%COMP%]{flex:1;min-width:0}"]})};var TV=["cancel"];function DV(t,e){t&1&&(h(0,"p",4),u(1),g()),t&2&&(d(),k(e))}function MV(t,e){t&1&&(h(0,"p",5),u(1),g()),t&2&&(d(),k(e))}var Ru=class t{title=te.required();body=te("");note=te("");confirmLabel=te("Confirm");cancelLabel=te("Cancel");confirmed=it();cancelled=it();cancelButton=Xe("cancel");constructor(){se(()=>{let e=this.cancelButton()?.nativeElement;e&&setTimeout(()=>e.focus(),0)})}onEscape(){this.cancelled.emit()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-confirm-dialog"]],viewQuery:function(n,i){n&1&>(i.cancelButton,TV,5),n&2&&vt()},hostBindings:function(n,i){n&1&&A("keydown.escape",function(){return i.onEscape()},Mt)},inputs:{title:[1,"title"],body:[1,"body"],note:[1,"note"],confirmLabel:[1,"confirmLabel"],cancelLabel:[1,"cancelLabel"]},outputs:{confirmed:"confirmed",cancelled:"cancelled"},decls:12,vars:6,consts:[["cancel",""],[1,"modal-layer",3,"click"],["role","alertdialog","aria-modal","true","aria-labelledby","confirm-title",1,"modal-card",3,"click"],["id","confirm-title"],["id","confirm-body",1,"body"],[1,"note"],[1,"actions"],["type","button",1,"secondary",3,"click"],["type","button",3,"click"]],template:function(n,i){if(n&1&&(h(0,"div",1),F("click",function(){return i.cancelled.emit()}),h(1,"div",2),F("click",function(r){return r.stopPropagation()}),h(2,"h2",3),u(3),g(),w(4,DV,2,1,"p",4),w(5,MV,2,1,"p",5),h(6,"div",6)(7,"button",7,0),F("click",function(){return i.cancelled.emit()}),u(9),g(),h(10,"button",8),F("click",function(){return i.confirmed.emit()}),u(11),g()()()()),n&2){let o,r;d(),J("aria-describedby",i.body().length>0?"confirm-body":null),d(2),k(i.title()),d(),S((o=i.body())?4:-1,o),d(),S((r=i.note())?5:-1,r),d(4),ae(" ",i.cancelLabel()," "),d(2),k(i.confirmLabel())}},styles:["[_nghost-%COMP%]{display:contents}.modal-layer[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:70;display:flex;align-items:center;justify-content:center;padding:24px;background:#00000073}.modal-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:8px;width:min(420px,100%);padding:16px 18px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 18px 48px #0006;animation:_ngcontent-%COMP%_confirm-in .14s ease-out}h2[_ngcontent-%COMP%]{margin:0;font-size:14px;font-weight:600}.body[_ngcontent-%COMP%]{margin:0;font-size:12.5px;line-height:1.6}.note[_ngcontent-%COMP%]{margin:0;color:var(--%NS%morse-warn);font-size:11.5px;line-height:1.55}.actions[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;gap:6px;margin-top:2px}@keyframes _ngcontent-%COMP%_confirm-in{0%{opacity:0;transform:translateY(6px)}}@media(prefers-reduced-motion:reduce){.modal-card[_ngcontent-%COMP%]{animation:none}}"]})};function kV(t,e){t&1&&u(0," Install it once and this panel is ready. ")}function IV(t,e){if(t&1){let n=$();h(0,"div",5)(1,"code"),u(2),g(),h(3,"button",10),F("click",function(){D(n);let o=m();return M(o.copyInstall())}),u(4),g()()}if(t&2){let n=m();d(2),k(e),d(2),ae(" ",n.copied()?"Copied":"Copy"," ")}}function NV(t,e){t&1&&(h(0,"p",6),u(1),g()),t&2&&(d(),k(e))}function OV(t,e){if(t&1){let n=$();h(0,"button",10),F("click",function(){D(n);let o=m();return M(o.openSettings())}),u(1,"Open settings"),g(),h(2,"button",10),F("click",function(){D(n);let o=m();return M(o.showLog())}),u(3,"Show log"),g()}}function PV(t,e){t&1&&(h(0,"p",9),u(1," Changed \u201Cmorse.pi.path\u201D? Reload the window \u2014 Morse picks the pi path when it starts. To use a pi that is already installed, point the setting at it instead of installing a second copy. "),g())}function AV(t,e){t&1&&(h(0,"p",9),u(1," The host reads "),h(2,"code"),u(3,"MORSE_PI_PATH"),g(),u(4," at startup, so restart it after changing that (or install pi) \u2014 "),h(5,"code"),u(6,"morse restart"),g(),u(7," for the daemon. "),g())}function RV(t,e){t&1&&(h(0,"details")(1,"summary"),u(2,"What the host reported"),g(),h(3,"pre"),u(4),g()()),t&2&&(d(4),k(e))}var Lu=class t{morse=N(Ze);message=this.morse.agentError;failure=this.morse.agentFailure;missing=E(()=>this.failure()?.code==="agent-unavailable");install=E(()=>this.failure()?.install??"");hint=E(()=>this.failure()?.hint??"");hasEditor=E(()=>this.morse.capabilities()?.hostKind==="vscode");copied=O(!1);copyInstall(){let e=this.install();e.length!==0&&(navigator.clipboard?.writeText(e),this.copied.set(!0),setTimeout(()=>this.copied.set(!1),1600))}retry(){this.morse.newSession()}openSettings(){this.morse.hostCommand("openSettings")}showLog(){this.morse.hostCommand("showOutput")}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["morse-agent-screen"]],decls:18,vars:8,consts:[["role","alert","aria-labelledby","agent-title",1,"card"],[1,"eyebrow"],["aria-hidden","true",1,"pip"],["id","agent-title"],[1,"body"],[1,"command"],[1,"hint"],[1,"actions"],["type","button",3,"click"],[1,"foot"],["type","button",1,"secondary",3,"click"]],template:function(n,i){if(n&1&&(h(0,"section",0)(1,"p",1),ce(2,"span",2),u(3),g(),h(4,"h1",3),u(5),g(),h(6,"p",4),u(7," Morse is only the interface \u2014 every answer comes from the pi CLI on this machine, with your own models, tools and sessions. "),w(8,kV,1,0),g(),w(9,IV,5,2,"div",5),w(10,NV,2,1,"p",6),h(11,"div",7)(12,"button",8),F("click",function(){return i.retry()}),u(13,"Retry"),g(),w(14,OV,4,0),g(),w(15,PV,2,0,"p",9)(16,AV,8,0,"p",9),w(17,RV,5,1,"details"),g()),n&2){let o,r,s;d(3),ae(" ",i.missing()?"Setup":"Agent unavailable"," "),d(2),ae(" ",i.missing()?"The pi coding agent is not installed":"The pi coding agent could not start"," "),d(3),S(i.missing()?8:-1),d(),S((o=i.install())?9:-1,o),d(),S((r=i.hint())?10:-1,r),d(4),S(i.hasEditor()?14:-1),d(),S(i.hasEditor()?15:16),d(2),S((s=i.message())?17:-1,s)}},styles:["[_nghost-%COMP%]{display:flex;flex:1;min-height:0;overflow-y:auto;padding:18px}.card[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:10px;width:100%;max-width:520px;margin:auto;padding:20px 22px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));box-shadow:0 10px 30px #0000002e;color:var(--%NS%morse-fg);animation:_ngcontent-%COMP%_agent-in .2s ease-out}.eyebrow[_ngcontent-%COMP%]{display:flex;align-items:center;gap:6px;margin:0;color:var(--%NS%morse-fg-muted);font-size:11px;text-transform:uppercase;letter-spacing:.06em}.pip[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%;background:var(--%NS%morse-warn);box-shadow:0 0 0 3px color-mix(in srgb,var(--%NS%morse-warn) 22%,transparent)}h1[_ngcontent-%COMP%]{margin:0;font-size:17px;line-height:1.35;font-weight:600}.body[_ngcontent-%COMP%]{margin:0;color:var(--%NS%morse-fg-muted);font-size:12.5px;line-height:1.6}.command[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px;padding:8px 8px 8px 10px;border:1px solid var(--%NS%morse-border);border-radius:var(--%NS%morse-radius-md);background:var(--%NS%morse-code-bg)}.command[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{flex:1;min-width:0;overflow-x:auto;white-space:nowrap;font-size:12px;color:var(--%NS%morse-fg)}.command[_ngcontent-%COMP%] button[_ngcontent-%COMP%]{flex:none;padding:3px 9px;font-size:11px}.hint[_ngcontent-%COMP%]{margin:0;color:var(--%NS%morse-fg-muted);font-size:11.5px;line-height:1.55}.actions[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}.foot[_ngcontent-%COMP%]{margin:0;color:var(--%NS%morse-fg-muted);font-size:11px;line-height:1.5}details[_ngcontent-%COMP%]{border-top:1px solid var(--%NS%morse-border);padding-top:8px}summary[_ngcontent-%COMP%]{color:var(--%NS%morse-fg-muted);font-size:11px;cursor:pointer}details[_ngcontent-%COMP%] pre[_ngcontent-%COMP%]{margin:6px 0 0;padding:8px;border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-hover);color:var(--%NS%morse-fg-muted);font-family:var(--%NS%morse-font-mono);font-size:11px;line-height:1.5;white-space:pre-wrap;word-break:break-word}@keyframes _ngcontent-%COMP%_agent-in{0%{opacity:0;transform:translateY(6px)}}@media(prefers-reduced-motion:reduce){.card[_ngcontent-%COMP%]{animation:none}}"]})};function LV(t,e){if(t&1){let n=$();y(0,"morse-boot-splash",11),A("dismissed",function(){D(n);let o=m();return M(o.onBootDismissed())}),b()}if(t&2){let n=m();q("ready",n.bootReady())("status",n.bootStatus())}}function FV(t,e){if(t&1){let n=$();y(0,"morse-connection-screen",12),A("retry",function(){D(n);let o=m();return M(o.retryConnection())})("explore",function(){D(n);let o=m();return M(o.onConnectionExplore())})("connect",function(o){D(n);let r=m();return M(r.onConnectionConnect(o))}),b()}if(t&2){let n=e;q("eyebrow",n.eyebrow)("title",n.title)("body",n.body)("detail",n.detail)}}function VV(t,e){t&1&&ve(0,"morse-project-picker")}function jV(t,e){t&1&&ve(0,"morse-about-dialog")}function $V(t,e){t&1&&ve(0,"morse-shortcuts-dialog")}function BV(t,e){if(t&1){let n=$();y(0,"morse-confirm-dialog",13),A("confirmed",function(){D(n);let o=m();return M(o.confirmCompact())})("cancelled",function(){D(n);let o=m();return M(o.cancelCompact())}),b()}if(t&2){let n=m();q("body",n.compactBody())}}function HV(t,e){if(t&1){let n=$();y(0,"button",14),A("click",function(){D(n);let o=m();return M(o.closeNavigation())}),b()}}function UV(t,e){t&1&&(y(0,"div",7),ve(1,"span",15),y(2,"div",16)(3,"span",17),u(4,"\u2913"),b(),y(5,"strong"),u(6,"Drop to attach"),b(),y(7,"span"),u(8,"Images ride with the prompt \xB7 other files become "),y(9,"code"),u(10,"@mentions"),b()()()()),t&2&&(d(2),q("morseEnter",0)("morseEnterY",-6))}function zV(t,e){t&1&&ve(0,"morse-tab-strip")}function GV(t,e){t&1&&ve(0,"morse-file-preview",8),t&2&&q("tab",e)}function qV(t,e){if(t&1){let n=$();y(0,"section",18)(1,"strong"),u(2,"Offline \u2014 the host wouldn't take this frontend"),b(),y(3,"p"),u(4),ve(5,"br"),u(6),b(),y(7,"div",20)(8,"button",21),A("click",function(){D(n);let o=m(2);return M(o.reload())}),u(9,"Reload"),b(),y(10,"button",22),A("click",function(){D(n);let o=m(2);return M(o.retryConnection())}),u(11,"Retry"),b(),y(12,"button",22),A("click",function(){D(n);let o=m(2);return M(o.showLog())}),u(13,"Show log"),b()()()}if(t&2){let n=e;d(4),k(n.message),d(2),k(n.detail)}}function WV(t,e){if(t&1){let n=$();y(0,"section",18)(1,"strong"),u(2,"Offline \u2014 reconnecting"),b(),y(3,"p"),u(4," Morse keeps retrying in the background; the rest of the interface stays available while it does. "),b(),y(5,"div",20)(6,"button",21),A("click",function(){D(n);let o=m(2);return M(o.retryConnection())}),u(7,"Retry now"),b(),y(8,"button",22),A("click",function(){D(n);let o=m(2);return M(o.showConnectionHelp())}),u(9," Connection help "),b()()()}}function YV(t,e){if(t&1){let n=$();y(0,"section",19)(1,"strong"),u(2,"Pi agent unavailable"),b(),y(3,"p"),u(4),b(),y(5,"div",20)(6,"button",21),A("click",function(){D(n);let o=m(2);return M(o.retryAgent())}),u(7,"Retry"),b(),y(8,"button",22),A("click",function(){D(n);let o=m(2);return M(o.openSettings())}),u(9,"Open settings"),b(),y(10,"button",22),A("click",function(){D(n);let o=m(2);return M(o.showLog())}),u(11,"Show log"),b()()()}if(t&2){let n=m(2);d(4),k(n.agentError()||"Morse could not start the pi coding agent.")}}function KV(t,e){t&1&&ve(0,"morse-agent-screen")}function ZV(t,e){t&1&&ve(0,"morse-chat-transcript")(1,"morse-interaction-panel")(2,"morse-chat-composer")}function QV(t,e){if(t&1&&(w(0,qV,14,2,"section",18)(1,WV,10,0,"section",18)(2,YV,12,1,"section",19),w(3,KV,1,0,"morse-agent-screen")(4,ZV,3,0)),t&2){let n,i=m();S((n=i.lastError())?0:i.offline()?1:i.agentBanner()?2:-1,n),d(3),S(i.agentScreen()?3:4)}}function XV(t,e){if(t&1){let n=$();y(0,"div",23)(1,"span",24),u(2),b(),y(3,"button",25),A("click",function(){D(n);let o=m();return M(o.dismissToast())}),u(4," \xD7 "),b()()}if(t&2){let n=e;Tn(n.level),d(2),k(n.text)}}function JV(t,e){if(t&1&&ve(0,"morse-git-panel",10),t&2){let n=m();q("expanded",n.gitExpanded())}}function ej(){return typeof location>"u"?!1:new URL(location.href,"http://localhost/").searchParams.get("boot")==="1"}var Fu=class t{morse=N(Ze);shell=N(Ht);tabs=N(dn);shortcuts=N(An);dropZone=N(Mu);animation=N(ln);attachments=N(Ui);destroyRef=N(pt);dismissedNoticeAt=O(null);noticeTimer;bootPreview=ej();bootPending=this.animation.isEnabled&&(this.bootPreview||this.morse.connection()==="connecting");bootForceTimer;bootVisible=O(this.bootPending);bootForced=O(!1);connectionDismissed=O(!1);offline=O(!1);navigationOpen=this.shell.navigationOpen;tabsEnabled=E(()=>this.morse.capabilities()?.filePreview===!0);gitEnabled=E(()=>this.morse.capabilities()?.gitPanel===!0);gitOpen=E(()=>this.gitEnabled()&&this.shell.gitPanelOpen());gitExpanded=E(()=>this.gitOpen()&&this.shell.gitPanelExpanded());gitWidth=E(()=>{let e=this.shell.gitPanelWidth();return e===void 0?null:`${e}px`});activeFile=E(()=>{let e=this.tabs.activeTab();return e?.kind==="file"?e:void 0});focusedSession;projectPickerOpen=this.shell.projectPickerOpen;aboutOpen=this.shell.aboutOpen;shortcutsOpen=this.shell.shortcutsOpen;navigationCollapsed=this.shell.navigationCollapsed;compactConfirmOpen=this.shell.compactConfirmOpen;compactBody=E(()=>{let e="pi replaces the conversation it is holding with a summary, so the next turn starts from less context. The transcript in this window is untouched.",n=this.shell.compactInstructions();return n?`${e} Your instructions: \u201C${n}\u201D.`:e});connection=this.morse.connection;agentReady=this.morse.agentReady;agentStarting=this.morse.agentStarting;agentError=this.morse.agentError;agentBlocked=E(()=>this.connection()==="ready"&&!this.agentReady()&&!this.agentStarting()&&this.agentError()!==void 0);agentScreen=E(()=>this.agentBlocked()&&this.morse.items().length===0);agentBanner=E(()=>this.agentBlocked()&&!this.agentScreen());lastError=this.morse.lastError;dragging=this.dropZone.active;toast=E(()=>{let e=this.morse.lastNotice(),n=this.attachments.notice(),i=n&&(!e||n.at>=e.at)?n:e;return!i||i.at===this.dismissedNoticeAt()?null:i});autoDismiss=se(()=>{let e=this.toast();if(this.clearNoticeTimer(),!e)return;let n=e.level==="warn"||e.level==="error"?6e3:3200;this.noticeTimer=setTimeout(()=>this.dismissedNoticeAt.set(e.at),n)});constructor(){let e=[this.shortcuts.bind("context.compact",()=>this.shell.requestCompact(),()=>this.morse.state().agentReady),this.shortcuts.bind("help.shortcuts",()=>this.shell.toggleShortcuts())];this.destroyRef.onDestroy(()=>{for(let n of e)n()}),this.bootPending&&(this.bootForceTimer=setTimeout(()=>this.bootForced.set(!0),7e3)),se(()=>{let n=this.morse.connection();if(n==="ready"){this.offline.set(!1),this.connectionDismissed.set(!1);return}(n==="error"||n==="closed"||this.morse.slowConnection())&&this.offline.set(!0)}),this.destroyRef.onDestroy(()=>{this.clearNoticeTimer(),this.clearBootTimer()}),se(()=>{if(!this.tabsEnabled())return;let n=this.morse.state(),i=n.sessionId;if(i===void 0){this.focusedSession=void 0,this.tabs.clearActiveSession();return}let o={id:i,title:this.sessionTitle(i,n.sessionTitle),cwd:n.workspace.cwd};if(i===this.focusedSession){this.tabs.refreshSession(o);return}this.focusedSession=i,this.tabs.showSession(o)})}onBootDismissed(){this.bootVisible.set(!1),this.clearBootTimer()}sessionTitle(e,n){return n!==void 0&&n.length>0?n:this.morse.sessions().find(o=>o.id===e)?.title??"New session"}onConnectionExplore(){this.connectionDismissed.set(!0)}showConnectionHelp(){this.connectionDismissed.set(!1)}onConnectionConnect(e){if(typeof location>"u")return;let n=new URL(location.href);n.searchParams.set("server",e),location.href=n.toString()}clearBootTimer(){this.bootForceTimer!==void 0&&(clearTimeout(this.bootForceTimer),this.bootForceTimer=void 0)}clearNoticeTimer(){this.noticeTimer!==void 0&&(clearTimeout(this.noticeTimer),this.noticeTimer=void 0)}bootReady=E(()=>{if(this.bootForced())return!0;let e=this.morse.connection();return e==="error"||e==="closed"||this.morse.slowConnection()?!0:e==="ready"});bootStatus=E(()=>this.morse.connection()!=="ready"?"Connecting to the host\u2026":this.morse.agentStarting()?"Starting the pi agent\u2026":this.morse.agentError()!==void 0?"The agent could not start":"Ready");connectionScreen=E(()=>{if(this.bootVisible()||this.connectionDismissed()||!this.offline())return null;let e=this.lastError();return e?{eyebrow:"Handshake refused",title:"The host turned this frontend away",body:"The socket is up, but the handshake was rejected. That usually means the frontend and the host disagree on the wire protocol \u2014 rebuild both together.",detail:e.detail?`${e.message} \u2014 ${e.detail}`:e.message}:this.morse.slowConnection()&&this.morse.connection()==="connecting"?{eyebrow:"No answer yet",title:"The host is not answering",body:"A socket opened but the handshake never came back. The host may still be starting, or this address is not a Morse host.",detail:this.morse.connectionDetail()??""}:{eyebrow:"Offline \xB7 reconnecting",title:"Morse is waiting for a host",body:"This window is only the frontend, and it keeps working while the host is away. Nothing is lost \u2014 your sessions live with the host and in pi\u2019s session files \u2014 so start the host again and this screen will clear itself.",detail:this.morse.connectionDetail()??""}});confirmCompact(){let e=this.shell.compactInstructions();this.shell.closeCompactPrompt(),this.morse.compactSession(e)}cancelCompact(){this.shell.closeCompactPrompt()}closeNavigation(){this.shell.closeNavigation()}retryConnection(){this.morse.ready()}reload(){typeof location<"u"&&location.reload()}retryAgent(){this.morse.newSession()}openSettings(){this.morse.hostCommand("openSettings")}showLog(){this.morse.hostCommand("showOutput")}dismissToast(){this.dismissedNoticeAt.set(this.toast()?.at??this.morse.lastNotice()?.at??null)}liveDropzone=se(()=>{let e=this.dragging();this.stopDropzoneLoops(),e&&setTimeout(()=>{if(!this.dragging())return;let n=globalThis.document?.querySelector(".dropzone")??void 0;if(!n)return;let i=n.querySelector(".dropzone-card"),o=n.querySelector(".dropzone-icon"),r=n.querySelector(".dropzone-ring");this.dropzoneStops=[this.animation.loop(r,{scale:[1,1.035],opacity:[.9,.25]},{duration:1100}),this.animation.loop(i,{scale:[1,1.03]},{duration:700}),this.animation.loop(o,{translateY:[1.5,-3]},{duration:520})]},0)});dropzoneStops=[];stopDropzoneLoops(){for(let e of this.dropzoneStops)e();this.dropzoneStops=[]}onDragEnter(e){this.dropZone.onDragEnter(e)}onDragOver(e){this.dropZone.onDragOver(e)}onDragLeave(){this.dropZone.onDragLeave()}onDrop(e){this.dropZone.onDrop(e,this.morse.state().workspace.cwd)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=ue({type:t,selectors:[["app-root"]],decls:17,vars:24,consts:[[1,"shell"],[3,"ready","status"],[3,"eyebrow","title","body","detail"],[1,"nav"],["title","Compact the conversation?","note","It costs a model call, and the summary is what pi remembers from then on \u2014 this cannot be undone.","confirmLabel","Compact context",3,"body"],["type","button","aria-label","Close navigation",1,"scrim"],[1,"chat",3,"dragenter","dragover","dragleave","drop"],["aria-hidden","true",1,"dropzone"],[3,"tab"],["role","status",1,"toast",3,"class"],[1,"git-panel",3,"expanded"],[3,"dismissed","ready","status"],[3,"retry","explore","connect","eyebrow","title","body","detail"],["title","Compact the conversation?","note","It costs a model call, and the summary is what pi remembers from then on \u2014 this cannot be undone.","confirmLabel","Compact context",3,"confirmed","cancelled","body"],["type","button","aria-label","Close navigation",1,"scrim",3,"click"],[1,"dropzone-ring"],[1,"dropzone-card",3,"morseEnter","morseEnterY"],[1,"dropzone-icon"],["role","status",1,"alert","offline"],["role","alert",1,"alert"],[1,"actions"],["type","button",3,"click"],["type","button",1,"secondary",3,"click"],["role","status",1,"toast"],[1,"toast-text"],["type","button","aria-label","Dismiss",1,"toast-close",3,"click"]],template:function(n,i){if(n&1&&(y(0,"div",0),w(1,LV,1,2,"morse-boot-splash",1),w(2,FV,1,4,"morse-connection-screen",2),ve(3,"morse-session-nav",3),w(4,VV,1,0,"morse-project-picker"),w(5,jV,1,0,"morse-about-dialog"),w(6,$V,1,0,"morse-shortcuts-dialog"),w(7,BV,1,1,"morse-confirm-dialog",4),w(8,HV,1,0,"button",5),y(9,"main",6),A("dragenter",function(r){return i.onDragEnter(r)})("dragover",function(r){return i.onDragOver(r)})("dragleave",function(){return i.onDragLeave()})("drop",function(r){return i.onDrop(r)}),w(10,UV,11,2,"div",7),ve(11,"morse-chat-header"),w(12,zV,1,0,"morse-tab-strip"),w(13,GV,1,1,"morse-file-preview",8)(14,QV,5,2),w(15,XV,5,3,"div",9),b(),w(16,JV,1,1,"morse-git-panel",10),b()),n&2){let o,r,s;At("--%NS%morse-git-width",i.gitWidth()),X("collapsed",i.navigationCollapsed())("with-git",i.gitOpen())("git-expanded",i.gitExpanded()),d(),S(i.bootVisible()?1:-1),d(),S((o=i.connectionScreen())?2:-1,o),d(),X("open",i.navigationOpen()),d(),S(i.projectPickerOpen()?4:-1),d(),S(i.aboutOpen()?5:-1),d(),S(i.shortcutsOpen()?6:-1),d(),S(i.compactConfirmOpen()?7:-1),d(),S(i.navigationOpen()?8:-1),d(),X("dropping",i.dragging()),d(),S(i.dragging()?10:-1),d(2),S(i.tabsEnabled()?12:-1),d(),S((r=i.activeFile())?13:14,r),d(2),S((s=i.toast())?15:-1,s),d(),S(i.gitOpen()?16:-1)}},dependencies:[Nu,Ou,Pu,Au,Lu,Ru,su,bu,Cu,ru,wu,xu,Tu,un,Ld,Fd],styles:["[_nghost-%COMP%]{display:block;height:100%}.shell[_ngcontent-%COMP%]{position:relative;display:grid;grid-template-columns:var(--%NS%morse-nav-width) minmax(0,1fr);grid-template-rows:minmax(0,1fr);height:100%;min-height:0;overflow:hidden;background:var(--%NS%morse-bg)}.nav[_ngcontent-%COMP%]{min-width:0}.shell.with-git[_ngcontent-%COMP%]{grid-template-columns:var(--%NS%morse-nav-width) minmax(0,1fr) var(--%NS%morse-git-width)}.git-panel[_ngcontent-%COMP%]{min-width:0}.shell.git-expanded[_ngcontent-%COMP%]{grid-template-columns:var(--%NS%morse-nav-width) minmax(0,1fr)}.shell.git-expanded[_ngcontent-%COMP%] .chat[_ngcontent-%COMP%]{display:none}@media(min-width:760px){.nav[_ngcontent-%COMP%]{width:var(--%NS%morse-nav-width)}.shell[_ngcontent-%COMP%]{transition:grid-template-columns .16s ease}.shell.collapsed[_ngcontent-%COMP%]{grid-template-columns:0 minmax(0,1fr)}.shell.collapsed.with-git[_ngcontent-%COMP%]{grid-template-columns:0 minmax(0,1fr) var(--%NS%morse-git-width)}.shell.collapsed.git-expanded[_ngcontent-%COMP%]{grid-template-columns:0 minmax(0,1fr)}.shell.collapsed[_ngcontent-%COMP%] .nav[_ngcontent-%COMP%]{visibility:hidden}}@media(prefers-reduced-motion:reduce){.shell[_ngcontent-%COMP%]{transition:none}}.chat[_ngcontent-%COMP%]{display:flex;flex-direction:column;min-width:0;min-height:0;position:relative}.dropzone[_ngcontent-%COMP%]{position:absolute;inset:0;z-index:15;display:flex;align-items:center;justify-content:center;padding:16px;pointer-events:none;background:color-mix(in srgb,var(--%NS%morse-accent) 12%,transparent);border:2px dashed color-mix(in srgb,var(--%NS%morse-accent) 70%,transparent);border-radius:var(--%NS%morse-radius-md);animation:_ngcontent-%COMP%_dropzone-in .14s ease-out}.dropzone-card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;gap:4px;max-width:320px;padding:14px 18px;border:1px solid var(--%NS%morse-accent);border-radius:var(--%NS%morse-radius-lg);background:var(--%NS%morse-panel, var(--%NS%morse-bg));color:var(--%NS%morse-fg);box-shadow:0 8px 24px #0000004d;text-align:center;font-size:12px}.dropzone-card[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{font-size:13px}.dropzone-card[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-family:var(--%NS%morse-font-mono);font-size:11px;padding:0 4px;border-radius:var(--%NS%morse-radius-sm);background:var(--%NS%morse-hover)}.dropzone-icon[_ngcontent-%COMP%]{font-size:18px;color:var(--%NS%morse-accent)}.dropzone-ring[_ngcontent-%COMP%]{position:absolute;inset:6px;border:2px dashed color-mix(in srgb,var(--%NS%morse-accent) 45%,transparent);border-radius:var(--%NS%morse-radius-md);pointer-events:none}@keyframes _ngcontent-%COMP%_dropzone-in{0%{opacity:0}}.scrim[_ngcontent-%COMP%]{display:none}.alert[_ngcontent-%COMP%]{margin:10px;padding:10px 12px;border:1px solid var(--%NS%morse-error);border-radius:var(--%NS%morse-radius-md);background:var(--%NS%morse-hover);display:flex;flex-direction:column;gap:8px}.alert[_ngcontent-%COMP%] p[_ngcontent-%COMP%]{margin:0;white-space:pre-wrap;color:var(--%NS%morse-fg-muted)}.alert.offline[_ngcontent-%COMP%]{border-color:color-mix(in srgb,var(--%NS%morse-warn) 55%,var(--%NS%morse-border))}.actions[_ngcontent-%COMP%]{display:flex;gap:6px;flex-wrap:wrap}.toast[_ngcontent-%COMP%]{position:absolute;z-index:30;top:10px;right:10px;max-width:min(420px,calc(100% - 20px));display:flex;align-items:flex-start;gap:6px;padding:8px 8px 8px 10px;border-radius:var(--%NS%morse-radius-md);border-left:3px solid var(--%NS%morse-info);background:var(--%NS%morse-panel, var(--%NS%morse-badge-bg));color:var(--%NS%morse-fg);box-shadow:0 8px 24px #0000004d;animation:_ngcontent-%COMP%_toast-in .16s ease-out}.toast-text[_ngcontent-%COMP%]{flex:1;min-width:0;white-space:pre-wrap;font-size:12px;line-height:1.45}.toast-close[_ngcontent-%COMP%]{flex:none;width:20px;height:20px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:0;border-radius:var(--%NS%morse-radius-sm);background:transparent;color:var(--%NS%morse-fg-muted);font-size:14px;line-height:1;cursor:pointer}.toast-close[_ngcontent-%COMP%]:hover{background:var(--%NS%morse-hover);color:var(--%NS%morse-fg)}.toast.warn[_ngcontent-%COMP%]{border-color:var(--%NS%morse-warn)}.toast.error[_ngcontent-%COMP%]{border-color:var(--%NS%morse-error)}.toast.success[_ngcontent-%COMP%]{border-color:var(--%NS%morse-success)}@keyframes _ngcontent-%COMP%_toast-in{0%{opacity:0;transform:translateY(-6px)}}@media(max-width:759px){.shell[_ngcontent-%COMP%], .shell.with-git[_ngcontent-%COMP%], .shell.git-expanded[_ngcontent-%COMP%]{grid-template-columns:minmax(0,1fr)}.shell.git-expanded[_ngcontent-%COMP%] .git-panel[_ngcontent-%COMP%]{position:static;width:auto;box-shadow:none}.shell[_ngcontent-%COMP%] > .git-panel[_ngcontent-%COMP%]{position:absolute;z-index:20;top:0;bottom:0;right:0;width:min(86%,340px);box-shadow:0 0 24px #00000059}.nav[_ngcontent-%COMP%]{position:absolute;z-index:20;top:0;bottom:0;left:0;width:min(86%,320px);transform:translate(-102%);transition:transform .16s ease;box-shadow:0 0 24px #00000059}.nav.open[_ngcontent-%COMP%]{transform:none}.scrim[_ngcontent-%COMP%]{display:block;position:absolute;z-index:10;inset:0;border:0;padding:0;background:#00000059}.scrim[_ngcontent-%COMP%]:hover, .scrim[_ngcontent-%COMP%]:active{background:#00000059}}"]})};Zm(Fu,Pv).catch(t=>console.error(t));
|