@skill-map/cli 0.62.0 → 0.62.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/tutorial/sm-tutorial/references/_core.md +8 -1
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +1 -11
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +1 -3
- package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +43 -76
- package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +14 -9
- package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +10 -58
- package/dist/cli.js +3 -3
- package/dist/index.js +3 -3
- package/dist/kernel/index.js +3 -3
- package/dist/ui/chunk-HLHEDNSJ.js +3 -0
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-RW5YGD6H.js → main-CBZBFVUW.js} +1 -1
- package/package.json +1 -1
- package/dist/ui/chunk-C42H2UHU.js +0 -3
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import{D as ht,E as fe,F as ft,G as vt,H as bt,I as ie,J as yt,f as pt,j as mt,k as gt,u as J,v as ut,w as Z}from"./chunk-CM4YB7L4.js";import{b as qe,f as et,g as tt,h as le,i as nt,j as it,k as rt}from"./chunk-CZSLV6YD.js";import{a as K,b as M,c as ge,d as Ct,e as kt}from"./chunk-NC3HOVDG.js";import{a as ct,c as ne,d as h,f as N,g as dt,h as F,i as V,k as _t}from"./chunk-IYC5ZW4L.js";import{a as He,b as We,c as Qe,d as G,e as Ye,f as Ge,g as Ze}from"./chunk-DLYJHLJX.js";import{b as pe,c as me}from"./chunk-FC22ZJQZ.js";import{C as lt,K as ce,L as de,n as ot,o as st,u as at}from"./chunk-LPDD2DHE.js";import{r as Xe}from"./chunk-34ZZDYNQ.js";import"./chunk-4SG4352Z.js";import{$ as Ee,$b as g,Ab as U,Bb as Y,Cb as te,Dc as Ke,H as Pe,Ha as oe,Ib as A,Ja as l,K as R,Kb as T,Lb as se,Mb as f,N as Se,Na as Fe,O as Q,P as s,Q as Me,Qa as $e,Ta as Le,V as O,W as I,Xb as Ue,Yb as Ve,Z as Re,Za as D,_ as Te,_b as Je,ac as _,bc as S,ca as Oe,da as Ie,db as je,f as we,fa as Ae,ga as B,gb as ee,ha as De,ja as re,jb as ze,kb as Be,m as W,nb as y,qb as x,ra as Ne,rb as w,wb as b,wc as d,xb as c,xc as ae,yb as p,zb as P}from"./chunk-BJ6X6WBO.js";import{a as ke,b as xe}from"./chunk-WCABR6TI.js";var Zt="@",qt=(()=>{class t{doc;delegate;zone;animationType;moduleImpl;_rendererFactoryPromise=null;scheduler=null;injector=s(Re);loadingSchedulerFn=s(en,{optional:!0});_engine;constructor(e,r,i,o,a){this.doc=e,this.delegate=r,this.zone=i,this.animationType=o,this.moduleImpl=a}ngOnDestroy(){this._engine?.flush()}loadImpl(){let e=()=>this.moduleImpl??import("./chunk-56CBK7LB.js").then(i=>i),r;return this.loadingSchedulerFn?r=this.loadingSchedulerFn(e):r=e(),r.catch(i=>{throw new Pe(5300,!1)}).then(({\u0275createEngine:i,\u0275AnimationRendererFactory:o})=>{this._engine=i(this.animationType,this.doc);let a=new o(this.delegate,this._engine,this.zone);return this.delegate=a,a})}createRenderer(e,r){let i=this.delegate.createRenderer(e,r);if(i.\u0275type===0)return i;typeof i.throwOnSyntheticProps=="boolean"&&(i.throwOnSyntheticProps=!1);let o=new ve(i);return r?.data?.animation&&!this._rendererFactoryPromise&&(this._rendererFactoryPromise=this.loadImpl()),this._rendererFactoryPromise?.then(a=>{let u=a.createRenderer(e,r);o.use(u),this.scheduler??=this.injector.get(De,null,{optional:!0}),this.scheduler?.notify(10)}).catch(a=>{o.use(i)}),o}begin(){this.delegate.begin?.()}end(){this.delegate.end?.()}whenRenderingDone(){return this.delegate.whenRenderingDone?.()??Promise.resolve()}componentReplaced(e){this._engine?.flush(),this.delegate.componentReplaced?.(e)}static \u0275fac=function(r){Le()};static \u0275prov=R({token:t,factory:t.\u0275fac})}return t})(),ve=class{delegate;replay=[];\u0275type=1;constructor(n){this.delegate=n}use(n){if(this.delegate=n,this.replay!==null){for(let e of this.replay)e(n);this.replay=null}}get data(){return this.delegate.data}destroy(){this.replay=null,this.delegate.destroy()}createElement(n,e){return this.delegate.createElement(n,e)}createComment(n){return this.delegate.createComment(n)}createText(n){return this.delegate.createText(n)}get destroyNode(){return this.delegate.destroyNode}appendChild(n,e){this.delegate.appendChild(n,e)}insertBefore(n,e,r,i){this.delegate.insertBefore(n,e,r,i)}removeChild(n,e,r,i){this.delegate.removeChild(n,e,r,i)}selectRootElement(n,e){return this.delegate.selectRootElement(n,e)}parentNode(n){return this.delegate.parentNode(n)}nextSibling(n){return this.delegate.nextSibling(n)}setAttribute(n,e,r,i){this.delegate.setAttribute(n,e,r,i)}removeAttribute(n,e,r){this.delegate.removeAttribute(n,e,r)}addClass(n,e){this.delegate.addClass(n,e)}removeClass(n,e){this.delegate.removeClass(n,e)}setStyle(n,e,r,i){this.delegate.setStyle(n,e,r,i)}removeStyle(n,e,r){this.delegate.removeStyle(n,e,r)}setProperty(n,e,r){this.shouldReplay(e)&&this.replay.push(i=>i.setProperty(n,e,r)),this.delegate.setProperty(n,e,r)}setValue(n,e){this.delegate.setValue(n,e)}listen(n,e,r,i){return this.shouldReplay(e)&&this.replay.push(o=>o.listen(n,e,r,i)),this.delegate.listen(n,e,r,i)}shouldReplay(n){return this.replay!==null&&n.startsWith(Zt)}},en=new Se("");function xt(t="animations"){return Fe("NgAsyncAnimations"),Me([{provide:$e,useFactory:()=>new qt(s(Te),s(He),s(Oe),t)},{provide:Ne,useValue:t==="noop"?"NoopAnimations":"BrowserAnimations"}])}var be="skill-map",j={brand:be,beta:"BETA - do not use in production",betaDemo:"BETA",devChip:"dev",devChipTooltip:"BFF launched from a local checkout (not the npm install).",devChipA11y:"Development build: BFF is running from a local checkout.",lensChipTooltip:t=>`Active lens: ${t}. The map reflects how ${t} interprets your files.`,lensChipA11y:t=>`Active provider lens: ${t}.`,nav:{searchLabel:"Search nodes by name or tag",searchTooltip:"Search",searchPlaceholder:"Search by name or tag...",searchAriaLabel:"Search nodes by name or tag",searchClearLabel:"Clear search"},actions:{},badge:{nodes:"nodes",mapInfo:(t,n)=>{let e=`Run scan
|
|
2
2
|
${t.toLocaleString()} nodes \xB7 ${n.raw.toLocaleString()} links`;if(n.raw===n.drawn)return e;let r=[],i=n.brokenSource+n.brokenTarget;return i>0&&r.push(`${i} broken`),n.selfLoops>0&&r.push(`${n.selfLoops} self-loop${n.selfLoops===1?"":"s"}`),n.duplicates>0&&r.push(`${n.duplicates} duplicate${n.duplicates===1?"":"s"}`),`${e}
|
|
3
3
|
${n.drawn.toLocaleString()} drawn (${r.join(", ")})`},mapInfoA11y:(t,n)=>`Map contains ${t} nodes and ${n.raw} links; ${n.drawn} drawn on the canvas`},a11y:{viewSwitcher:"View switcher"},viewportWarning:{title:"Looks like you're on a small screen",subtitle:"skill-map is built for desktop",body:"The map and inspector need room to breathe. Pop this open on a screen at least 768px wide. See you there."},documentTitle:(t,n)=>{let e=t?`${t} - ${be}`:be;return n?`${e} v${n}`:e}};var wt=[{path:"",pathMatch:"full",loadComponent:()=>import("./chunk-ECKRC6XD.js").then(t=>t.WorkspaceView),title:j.brand},{path:"intentional-fail",loadComponent:()=>import("./chunk-CJURGJTN.js").then(t=>t.IntentionalFail)},{path:"**",redirectTo:""}];var z={errors:{unknownMode:t=>`SKILL_MAP_MODE: unknown value "${t}"`,restPrefix:t=>`BFF error [${t}]: `,malformedResponse:"BFF returned a malformed response",demoFetchFailed:(t,n)=>`Demo bundle fetch failed for "${t}": ${n}`,demoParseFailed:(t,n)=>`Demo bundle parse failed for "${t}": ${n}`,graphFormatNotInDemo:t=>`Graph format "${t}" is not bundled in demo mode (only "ascii").`}};function ue(t){let n=new TextEncoder().encode(t),e="";for(let r=0;r<n.length;r++)e+=String.fromCharCode(n[r]);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}var m="/api",Pt=(()=>{class t{http;ws;kindRegistry;providerRegistry;contributionsRegistry;constructor(e,r,i,o,a){this.http=e??s(G),this.ws=r??s(F),this.kindRegistry=i??s(J),this.contributionsRegistry=o??s(Z),this.providerRegistry=a??s(K)}async health(){return this.getJson(`${m}/health`)}async loadScan(){let[e]=await Promise.all([this.getJson(`${m}/scan`),this.listNodes({limit:0}).catch(()=>null)]);return e}async loadScanMeta(){return this.getJson(`${m}/scan?meta=1`)}async loadFolders(){let e=await this.getJson(`${m}/folders`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),this.ingestProviderRegistry(e.providerRegistry),e.items}async loadBranch(e=[],r){let i=new URLSearchParams;for(let a of e)a&&i.append("path",a);r!==void 0&&i.set("limit",String(r));let o=i.toString();return this.getJson(`${m}/branch${o?`?${o}`:""}`)}async runScan(){return this.patchJson(`${m}/scan`,{},"POST")}async listNodes(e={}){let r=tn(e),i=await this.getJson(`${m}/nodes${r}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async getNode(e,r={}){let i=ue(e),o=r.includeBody?"?include=body":"";try{let a=await this.getJson(`${m}/nodes/${i}${o}`);return this.ingestRegistry(a.kindRegistry),this.ingestContributionsRegistry(a.contributionsRegistry),this.ingestProviderRegistry(a.providerRegistry),a}catch(a){if(a instanceof h&&a.code==="not-found")return null;throw a}}async listLinks(e={}){let r=nn(e),i=await this.getJson(`${m}/links${r}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async listIssues(e={}){let r=rn(e),i=await this.getJson(`${m}/issues${r}`);return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async loadGraph(e="ascii"){let r=`${m}/graph?format=${encodeURIComponent(e)}`;try{return await W(this.http.get(r,{responseType:"text"}))}catch(i){throw this.translateError(i)}}async loadConfig(){let e=await this.getJson(`${m}/config`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),this.ingestProviderRegistry(e.providerRegistry),e.value}async listPlugins(){let e=await this.getJson(`${m}/plugins`);return this.ingestRegistry(e.kindRegistry),this.ingestContributionsRegistry(e.contributionsRegistry),this.ingestProviderRegistry(e.providerRegistry),e}async setPluginEnabled(e,r){let i=await this.patchJson(`${m}/plugins/${encodeURIComponent(e)}`,{enabled:r});return this.ingestRegistry(i.kindRegistry),this.ingestContributionsRegistry(i.contributionsRegistry),this.ingestProviderRegistry(i.providerRegistry),i}async setPluginExtensionEnabled(e,r,i){let o=await this.patchJson(`${m}/plugins/${encodeURIComponent(e)}/extensions/${encodeURIComponent(r)}`,{enabled:i});return this.ingestRegistry(o.kindRegistry),this.ingestContributionsRegistry(o.contributionsRegistry),this.ingestProviderRegistry(o.providerRegistry),o}async applyPluginChanges(e){let r=await this.patchJson(`${m}/plugins`,{changes:e});return this.ingestRegistry(r.kindRegistry),this.ingestContributionsRegistry(r.contributionsRegistry),this.ingestProviderRegistry(r.providerRegistry),r}async getPreferences(){return await this.getJson(`${m}/preferences`)}async setPreferences(e){return await this.patchJson(`${m}/preferences`,e)}async getProjectPreferences(){return await this.getJson(`${m}/project-preferences`)}async setProjectPreferences(e){return await this.patchJson(`${m}/project-preferences`,e)}async getProjectIgnore(){return await this.getJson(`${m}/project-ignore`)}async setProjectIgnore(e){return await this.patchJson(`${m}/project-ignore`,e)}async getActiveProvider(){return await this.getJson(`${m}/active-provider`)}async setActiveProvider(e){return await this.patchJson(`${m}/active-provider`,{activeProvider:e})}async setFavorite(e){let r=ue(e);try{await W(this.http.put(`${m}/favorites/${r}`,null))}catch(i){throw this.translateError(i)}}async unsetFavorite(e){let r=ue(e);try{await W(this.http.delete(`${m}/favorites/${r}`))}catch(i){throw this.translateError(i)}}async bumpSidecar(e,r={}){let i={nodePath:e};return r.force!==void 0&&(i.force=r.force),r.confirm!==void 0&&(i.confirm=r.confirm),this.patchJson(`${m}/sidecar/bump`,i,"POST")}async dispatchAction(e,r,i={}){let o=e.split("/").map(encodeURIComponent).join("/"),a={nodePath:r};return i.input!==void 0&&(a.input=i.input),i.confirm!==void 0&&(a.confirm=i.confirm),i.always!==void 0&&(a.always=i.always),this.patchJson(`${m}/actions/${o}`,a,"POST")}async getUpdateStatus(){return this.getJson(`${m}/update-status`)}async getRegisteredAnnotations(){return(await this.getJson(`${m}/annotations/registered`)).items}ingestRegistry(e){e&&this.kindRegistry.ingest(e)}ingestProviderRegistry(e){e&&this.providerRegistry.ingest(e)}ingestContributionsRegistry(e){this.contributionsRegistry.setRegistry(e)}async lookupContribution(e,r,i){let o=new URLSearchParams({path:i});try{return(await this.getJson(`${m}/contributions/${encodeURIComponent(e)}/${encodeURIComponent(r)}?${o.toString()}`)).items[0]??null}catch{return null}}events(){return this.ws.events$}async getJson(e){try{return await W(this.http.get(e))}catch(r){throw this.translateError(r)}}async patchJson(e,r,i="PATCH"){try{let o=i==="POST"?this.http.post(e,r):this.http.patch(e,r);return await W(o)}catch(o){throw this.translateError(o)}}translateError(e){if(e instanceof h)return e;if(e instanceof Qe){let i=on(e.error);return i?new h(i.error.code,i.error.message,i.error.details):new h("internal",e.message||z.errors.malformedResponse)}let r=e instanceof Error?e.message:String(e);return new h("internal",r)}static \u0275fac=function(r){return new(r||t)(Q(G),Q(F),Q(J),Q(Z),Q(K))};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function tn(t){let n=new URLSearchParams;t.kind&&t.kind.length>0&&n.set("kind",t.kind.join(",")),t.hasIssues!==void 0&&n.set("hasIssues",String(t.hasIssues)),t.path&&n.set("path",t.path),t.limit!==void 0&&n.set("limit",String(t.limit)),t.offset!==void 0&&n.set("offset",String(t.offset));let e=n.toString();return e?`?${e}`:""}function nn(t){let n=new URLSearchParams;t.kind&&t.kind.length>0&&n.set("kind",t.kind.join(",")),t.from&&n.set("from",t.from),t.to&&n.set("to",t.to);let e=n.toString();return e?`?${e}`:""}function rn(t){let n=new URLSearchParams;t.severity&&n.set("severity",t.severity),t.analyzerId&&n.set("analyzerId",t.analyzerId),t.node&&n.set("node",t.node),t.nodes&&t.nodes.length>0&&n.set("nodes",t.nodes.join(","));let e=n.toString();return e?`?${e}`:""}function on(t){if(typeof t!="object"||t===null)return null;let n=t;if(n.ok!==!1)return null;let e=n.error;if(typeof e!="object"||e===null)return null;let r=e;return typeof r.code!="string"||typeof r.message!="string"?null:{ok:!1,error:{code:r.code,message:r.message,details:r.details}}}var sn="data.json",an="data.meta.json",he=class{fetchImpl;metaPromise=null;dataPromise=null;kindRegistry;providerRegistry;contributionsRegistry;constructor(n=globalThis.fetch.bind(globalThis),e,r,i){this.fetchImpl=n,this.kindRegistry=e??s(J),this.providerRegistry=r??s(K),this.contributionsRegistry=i??s(Z)}async health(){return(await this.loadMeta()).health}async loadScan(){let[n,e]=await Promise.all([this.loadData(),this.loadMeta()]);return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),this.primeContributionsRegistry(e),n}async loadScanMeta(){let n=await this.loadScan();return xe(ke({},n),{nodes:[],links:[],issues:[]})}async loadFolders(){let n=await this.loadScan(),e=new Map,r=new Map;for(let i of n.issues){let o=i.severity==="error"?e:i.severity==="warn"?r:null;if(o)for(let a of i.nodeIds)o.set(a,(o.get(a)??0)+1)}return n.nodes.map(i=>({path:i.path,kind:i.kind,linksInCount:i.linksInCount,linksOutCount:i.linksOutCount,tokensTotal:i.tokens?.total??null,modifiedAtMs:i.modifiedAtMs??null,errorCount:e.get(i.path)??0,warnCount:r.get(i.path)??0,sidecarStatus:i.sidecar?.status??null}))}async loadBranch(n=[],e){let r=await this.loadScan(),i=n.filter(k=>k!==""),o=k=>i.length===0||i.some(H=>k===H||k.startsWith(`${H}/`)),a=r.nodes.filter(k=>o(k.path)).sort((k,H)=>k.path.localeCompare(H.path)),u=a.length,C=e!==void 0&&e>0?e:u,v=a.slice(0,C),E=new Set(v.map(k=>k.path)),L=r.links.filter(k=>E.has(k.source)&&E.has(k.target)),Gt=r.issues.filter(k=>k.nodeIds.some(H=>E.has(H)));return{schemaVersion:"1",kind:"branch",branch:{paths:[...i],total:u,rendered:v.length,truncated:u>C,cap:C},nodes:v,links:L,issues:Gt}}primeContributionsRegistry(n){this.contributionsRegistry.setRegistry(n.contributionsRegistry)}async listNodes(n={}){let e=await this.loadMeta();if(ln(n))return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),this.primeContributionsRegistry(e),e.nodes;let r=await this.loadData(),i=r.issues,o=r.nodes;if(n.kind&&n.kind.length>0){let E=new Set(n.kind);o=o.filter(L=>E.has(L.kind))}if(n.path){let E=pn(n.path);o=o.filter(L=>E.test(L.path))}if(n.hasIssues===!0){let E=St(i);o=o.filter(L=>E.has(L.path))}else if(n.hasIssues===!1){let E=St(i);o=o.filter(L=>!E.has(L.path))}let a=o.length,u=n.offset??0,C=n.limit??1e3,v=o.slice(u,u+C);return this.kindRegistry.ingest(e.nodes.kindRegistry),this.providerRegistry.ingest(e.nodes.providerRegistry),this.primeContributionsRegistry(e),{schemaVersion:"1",kind:"nodes",items:v,filters:{kind:n.kind??null,hasIssues:n.hasIssues??null,path:n.path?[n.path]:null},counts:{total:a,returned:v.length,page:{offset:u,limit:C}},kindRegistry:e.nodes.kindRegistry,providerRegistry:e.nodes.providerRegistry}}async getNode(n,e={}){let[r,i]=await Promise.all([this.loadData(),this.loadMeta()]),o=r.nodes.find(v=>v.path===n);if(!o)return null;let a=r.links.filter(v=>v.target===n),u=r.links.filter(v=>v.source===n),C=r.issues.filter(v=>v.nodeIds.includes(n));return this.kindRegistry.ingest(i.nodes.kindRegistry),this.providerRegistry.ingest(i.nodes.providerRegistry),this.primeContributionsRegistry(i),{schemaVersion:"1",kind:"node",item:o,links:{incoming:a,outgoing:u},issues:C,kindRegistry:i.nodes.kindRegistry,providerRegistry:i.nodes.providerRegistry}}async listLinks(n={}){let e=await this.loadMeta();if(cn(n))return this.kindRegistry.ingest(e.links.kindRegistry),this.providerRegistry.ingest(e.links.providerRegistry),this.primeContributionsRegistry(e),e.links;let i=(await this.loadData()).links;if(n.kind&&n.kind.length>0){let o=new Set(n.kind);i=i.filter(a=>o.has(a.kind))}return n.from&&(i=i.filter(o=>o.source===n.from)),n.to&&(i=i.filter(o=>o.target===n.to)),this.kindRegistry.ingest(e.links.kindRegistry),this.providerRegistry.ingest(e.links.providerRegistry),this.primeContributionsRegistry(e),{schemaVersion:"1",kind:"links",items:i,filters:{kind:n.kind??null,from:n.from??null,to:n.to??null},counts:{total:i.length,returned:i.length},kindRegistry:e.links.kindRegistry,providerRegistry:e.links.providerRegistry}}async listIssues(n={}){let e=await this.loadMeta();if(dn(n))return this.kindRegistry.ingest(e.issues.kindRegistry),this.providerRegistry.ingest(e.issues.providerRegistry),this.primeContributionsRegistry(e),e.issues;let i=(await this.loadData()).issues;if(n.severity&&(i=i.filter(o=>o.severity===n.severity)),n.analyzerId&&(i=i.filter(o=>o.analyzerId===n.analyzerId)),n.node&&(i=i.filter(o=>o.nodeIds.includes(n.node))),n.nodes&&n.nodes.length>0){let o=new Set(n.nodes);i=i.filter(a=>a.nodeIds.some(u=>o.has(u)))}return this.kindRegistry.ingest(e.issues.kindRegistry),this.providerRegistry.ingest(e.issues.providerRegistry),this.primeContributionsRegistry(e),{schemaVersion:"1",kind:"issues",items:i,filters:{severity:n.severity??null,analyzerId:n.analyzerId??null,node:n.node??null,nodes:n.nodes&&n.nodes.length>0?[...n.nodes]:null},counts:{total:i.length,returned:i.length},kindRegistry:e.issues.kindRegistry,providerRegistry:e.issues.providerRegistry}}async loadGraph(n="ascii"){if(n!=="ascii")throw new h("bad-query",z.errors.graphFormatNotInDemo(n));return(await this.loadMeta()).graph.ascii}async loadConfig(){let n=await this.loadMeta();return this.kindRegistry.ingest(n.config.kindRegistry),this.providerRegistry.ingest(n.config.providerRegistry),this.primeContributionsRegistry(n),n.config.value}async listPlugins(){let n=await this.loadMeta();return this.kindRegistry.ingest(n.plugins.kindRegistry),this.providerRegistry.ingest(n.plugins.providerRegistry),this.primeContributionsRegistry(n),n.plugins}async setFavorite(n){throw new h("demo-readonly","Favorites are not available in demo mode (static bundle is immutable).")}async unsetFavorite(n){throw new h("demo-readonly","Favorites are not available in demo mode (static bundle is immutable).")}async setPluginEnabled(n,e){throw new h("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async setPluginExtensionEnabled(n,e,r){throw new h("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async applyPluginChanges(n){throw new h("demo-readonly","Plugin toggles are not available in demo mode (static bundle is immutable).")}async runScan(){throw new h("demo-readonly","Manual scan is not available in demo mode (static bundle is immutable).")}async getPreferences(){return{updateCheck:{enabled:!0},telemetry:{errorsEnabled:!1,usageCliEnabled:!1,usageUiEnabled:!1,anonymousId:null,environment:"prod"}}}async setPreferences(n){throw new h("demo-readonly","Preference toggles are not available in demo mode (static bundle is immutable).")}async getProjectPreferences(){return{allowSidecarWriters:!0,scan:{referencePaths:[]}}}async setProjectPreferences(n){throw new h("demo-readonly","Project preferences are not available in demo mode (static bundle is immutable).")}async getProjectIgnore(){return{patterns:[]}}async setProjectIgnore(n){throw new h("demo-readonly","Ignore patterns are not available in demo mode (static bundle is immutable).")}async getActiveProvider(){return{activeProvider:null,detected:[],source:"none",selectable:[]}}async setActiveProvider(n){throw new h("demo-readonly","Active provider lens is not available in demo mode (static bundle is immutable).")}async lookupContribution(){return null}async bumpSidecar(n,e={}){throw new h("demo-readonly","Sidecar bump is not available in demo mode (static bundle is immutable).")}async dispatchAction(n,e,r={}){throw new h("demo-readonly","Actions are not available in demo mode (static bundle is immutable).")}async getUpdateStatus(){return{current:(await this.loadMeta()).health.implVersion,latest:null,isOutdated:!1,checkedAt:null,shownAt:null}}async getRegisteredAnnotations(){return[]}events(){return we}loadMeta(){return this.metaPromise||(this.metaPromise=this.fetchJson(an)),this.metaPromise}loadData(){return this.dataPromise||(this.dataPromise=this.fetchJson(sn)),this.dataPromise}async fetchJson(n){let e;try{e=await this.fetchImpl(n)}catch(r){let i=r instanceof Error?r.message:String(r);throw new h("internal",z.errors.demoFetchFailed(n,i))}if(!e.ok)throw new h("internal",z.errors.demoFetchFailed(n,`HTTP ${e.status}`));try{return await e.json()}catch(r){let i=r instanceof Error?r.message:String(r);throw new h("internal",z.errors.demoParseFailed(n,i))}}};function ln(t){return!(t.kind&&t.kind.length>0||t.hasIssues!==void 0||t.path||t.offset!==void 0&&t.offset!==0||t.limit!==void 0)}function cn(t){return!(t.kind&&t.kind.length>0||t.from||t.to)}function dn(t){return!(t.severity||t.analyzerId||t.node||t.nodes&&t.nodes.length>0)}function St(t){let n=new Set;for(let e of t)for(let r of e.nodeIds)n.add(r);return n}function pn(t){let e=t.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*/g,".*").replace(/\?/g,".");return new RegExp(`^${e}$`)}function Mt(){let t=s(N);if(t==="live")return new Pt(s(G),s(F));if(t==="demo")return new he;let n=t;throw new Error(z.errors.unknownMode(String(n)))}var Rt="search",Tt="kinds",Et="linkKinds",Ot="favoritesOnly",It="severities",mn=["error","warn"],At=(()=>{class t{filters=s(gt);router=s(nt);activatedRoute=s(et);kindRegistry=s(J);destroyRef=s(Ee);suppressUrlReadback=!1;constructor(){this.applyUrlToFilters(this.currentParams()),this.router.events.pipe(ct(this.destroyRef)).subscribe(e=>{if(e instanceof qe){if(this.suppressUrlReadback)return;this.applyUrlToFilters(this.currentParams())}}),re(()=>{let e=this.computeQueryParams();this.writeQueryParams(e)})}currentParams(){let e=this.router.parseUrl(this.router.url),r=new URLSearchParams;for(let[i,o]of Object.entries(e.queryParams))Array.isArray(o)?r.set(i,o.join(",")):o!=null&&r.set(i,String(o));return this.activatedRoute,r}applyUrlToFilters(e){let r=e.get(Rt)??"";r!==this.filters.searchText()&&this.filters.setSearchText(r);let i=gn(e.get(Tt),this.kindRegistry.kinds().map(v=>v.name));_e(i,this.filters.selectedKinds())||this.filters.setKinds(i);let o=e.get(Ot)==="true";o!==this.filters.favoritesOnly()&&this.filters.setFavoritesOnly(o);let a=un(e.get(Et));_e(a,this.filters.selectedLinkKinds())||this.filters.setLinkKinds(a);let u=hn(e.get(It)),C=[];this.filters.severityErrorActive()&&C.push("error"),this.filters.severityWarnActive()&&C.push("warn"),_e(u,C)||this.filters.setSeverityFilters(u)}computeQueryParams(){let e=this.filters.searchText().trim(),r=this.filters.selectedKinds(),i=this.filters.selectedLinkKinds(),o=this.filters.favoritesOnly(),a=[];return this.filters.severityErrorActive()&&a.push("error"),this.filters.severityWarnActive()&&a.push("warn"),{[Rt]:e.length>0?e:null,[Tt]:r.length>0?r.join(","):null,[Et]:i.length>0?i.join(","):null,[Ot]:o?"true":null,[It]:a.length>0?a.join(","):null}}writeQueryParams(e){let r=this.currentParams(),i=new Map(Object.entries(e)),o=!1;for(let[a,u]of i)if((r.get(a)??null)!==u){o=!0;break}o&&(this.suppressUrlReadback=!0,this.router.navigate([],{relativeTo:this.activatedRoute,queryParams:e,queryParamsHandling:"merge",replaceUrl:!0}).finally(()=>{setTimeout(()=>{this.suppressUrlReadback=!1},0)}))}static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function gn(t,n){if(!t)return[];let e=new Set(n);return t.split(",").map(r=>r.trim()).filter(r=>e.has(r))}function un(t){if(!t)return[];let n=new Set(mt);return t.split(",").map(e=>e.trim()).filter(e=>n.has(e))}function hn(t){if(!t)return[];let n=new Set(mn);return t.split(",").map(e=>e.trim()).filter(e=>n.has(e))}function _e(t,n){if(t.length!==n.length)return!1;for(let e=0;e<t.length;e++)if(t[e]!==n[e])return!1;return!0}var Dt={healthFailed:t=>`ProjectInfoService: /api/health probe failed (${t})`};var q=(()=>{class t{dataSource=s(ne);status=B(null);cwd=d(()=>this.status()?.cwd??null);implVersion=d(()=>this.status()?.implVersion??null);dev=d(()=>this.status()?.dev===!0);activeProviderState=B(null);activeProvider=d(()=>this.activeProviderState());async load(){try{let e=await this.dataSource.health();this.status.set(e)}catch(e){let r=e instanceof Error?e.message:String(e);console.warn(Dt.healthFailed(r))}await this.reloadActiveProvider()}async reloadActiveProvider(){try{let e=await this.dataSource.getActiveProvider();this.activeProviderState.set(e.activeProvider)}catch{}}static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var Ft=(()=>{class t extends le{title=s(Ze);projectInfo=s(q);constructor(){super(),re(()=>{let e=Nt(this.projectInfo.cwd()),r=this.projectInfo.implVersion();this.title.setTitle(j.documentTitle(e,r))})}updateTitle(e){let r=Nt(this.projectInfo.cwd()),i=this.projectInfo.implVersion();this.title.setTitle(j.documentTitle(r,i))}static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function Nt(t){if(!t)return null;let n=t.replace(/[\\/]+$/,"");if(!n||n===".")return null;let e=Math.max(n.lastIndexOf("/"),n.lastIndexOf("\\"));return(e>=0?n.slice(e+1):n)||null}var ye=!1,Ce=null;async function $t(t){if(ye||fe===""||!t.consentEnabled)return;let n=await import("./chunk-7ANZW2OI.js");n.init({dsn:fe,release:t.release??void 0,environment:t.environment,integrations:e=>e.filter(r=>r.name!=="BrowserSession"),tracesSampleRate:0,sendDefaultPii:!1,allowUrls:[/^https?:\/\/(localhost|127\.0\.0\.1)(:\d+)?\//],beforeSend:e=>ft(e)}),Ce=n,ye=!0}function Lt(t){!ye||Ce===null||Ce.captureException(t)}var jt=(()=>{class t{handleError(e){console.error(e),Lt(e)}static \u0275fac=function(r){return new(r||t)};static \u0275prov=R({token:t,factory:t.\u0275fac})}return t})();function fn(...t){for(let n of t)Promise.resolve(n.load())}var zt={providers:[Ae(),{provide:Ie,useClass:jt},it(wt,rt()),{provide:le,useClass:Ft},Ye(Ge()),xt(),st({}),ee(async()=>{let t=s(ot),[{default:n},{definePreset:e}]=await Promise.all([import("./chunk-43S72FTV.js"),import("./chunk-5ITZXW3A.js")]),r=e(n,{semantic:{primary:{50:"#F5F3FF",100:"#EDE9FE",200:"#DDD6FE",300:"#C4B5FD",400:"#A78BFA",500:"#8B5CF6",600:"#7C3AED",700:"#6D28D9",800:"#4C1D95",900:"#2E1065",950:"#1E0A4D"}}});t.setThemeConfig({theme:{preset:r,options:{darkModeSelector:".app-dark"}}})}),{provide:N,useFactory:dt},{provide:ne,useFactory:Mt},ee(async()=>{let t=s(ne),n=s(ie);try{let[e,r]=await Promise.all([t.getPreferences(),t.health()]);await Promise.all([$t({consentEnabled:e.telemetry.errorsEnabled,release:r.implVersion?`skill-map-cli@${r.implVersion}`:null,environment:e.telemetry.environment}),vt({consentEnabled:e.telemetry.usageUiEnabled,distinctId:e.telemetry.anonymousId})]),bt({environment:e.telemetry.environment}),n.syncTheme()}catch{}}),ee(()=>{fn(s(V),s(ge),s(q))}),ee(()=>{s(At),s(ut),s(ie)})]};var X={toggleToAuto:"Switch to auto theme (follow system)",toggleToLight:"Switch to light theme",toggleToDark:"Switch to dark theme",currentAuto:"Auto theme (follows system)",currentLight:"Light theme",currentDark:"Dark theme"};var Bt={body:"You are viewing a static demo of skill-map's UI. Install it:",installCommand:"npm i -g @skill-map/cli",homeCta:"\u2190 Back to skill-map.ai",homeHref:"/",dismissAria:"Dismiss demo banner"};function bn(t,n){if(t&1){let e=A();c(0,"div",0),P(1,"span",1),c(2,"p",2),g(3),c(4,"code",3),g(5),p()(),c(6,"a",4),g(7),p(),c(8,"p-button",5),T("onClick",function(){O(e);let i=f();return I(i.dismiss())}),p()()}if(t&2){let e=f();l(3),S(" ",e.texts.body," "),l(2),_(e.texts.installCommand),l(),b("href",e.texts.homeHref,oe),l(),_(e.texts.homeCta),l(),b("ariaLabel",e.texts.dismissAria)("text",!0)("rounded",!0)}}var Ut="sm.demoBannerDismissed",Vt=(()=>{class t{mode=s(N);texts=Bt;dismissed=B(this.readDismissed());visible=d(()=>this.mode==="demo"&&!this.dismissed());dismiss(){this.dismissed.set(!0);try{globalThis.localStorage?.setItem(Ut,"1")}catch{}}readDismissed(){if(this.mode!=="demo")return!0;try{return globalThis.localStorage?.getItem(Ut)==="1"}catch{return!1}}static \u0275fac=function(r){return new(r||t)};static \u0275cmp=D({type:t,selectors:[["sm-demo-banner"]],decls:1,vars:1,consts:[["role","status","data-testid","demo-banner",1,"demo-banner"],["aria-hidden","true",1,"demo-banner__icon","fa-solid","fa-circle-info"],[1,"demo-banner__body"],["data-testid","demo-banner-install",1,"demo-banner__cmd"],["data-testid","demo-banner-home",1,"demo-banner__home",3,"href"],["icon","fa-solid fa-xmark","severity","secondary","size","small","data-testid","demo-banner-dismiss",3,"onClick","ariaLabel","text","rounded"]],template:function(r,i){r&1&&x(0,bn,9,7,"div",0),r&2&&w(i.visible()?0:-1)},dependencies:[me,pe],styles:["[_nghost-%COMP%]{display:block}.demo-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);background:var(--p-highlight-background);color:var(--p-text-color);font-size:.875rem}.demo-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--p-primary-color)}.demo-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.demo-banner__cmd[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);background:var(--p-content-background);border:1px solid var(--p-content-border-color);border-radius:var(--sm-radius-md);padding:.05rem .4rem;font-size:.85em;margin-left:.25rem}.demo-banner__home[_ngcontent-%COMP%]{color:var(--p-primary-color);font-weight:500;text-decoration:none;white-space:nowrap}.demo-banner__home[_ngcontent-%COMP%]:hover, .demo-banner__home[_ngcontent-%COMP%]:focus-visible{text-decoration:underline}"],changeDetection:0})}return t})();var Jt={body:t=>`The scan hit its ceiling of ${t} ${t===1?"file":"files"}; some files were dropped from the corpus. Trim .skillmapignore or raise --max-scan.`,cta:"Edit .skillmapignore",ctaAria:"Open Settings to edit ignored patterns"};function _n(t,n){if(t&1){let e=A();U(0,"div",0),te(1,"span",1),U(2,"p",2),g(3),Y(),U(4,"button",3),se("click",function(){O(e);let i=f();return I(i.onCta())}),g(5),Y()()}if(t&2){let e=f();l(3),S(" ",e.state().body," "),l(),y("aria-label",e.texts.ctaAria),l(),S(" ",e.texts.cta," ")}}var Kt=(()=>{class t{loader=s(V);texts=Jt;openSettings=ae();state=d(()=>{let e=this.loader.scanMeta();if(!e||e.scanTruncated!==!0)return{visible:!1,body:""};let r=e.scanCeiling;return r===void 0?{visible:!1,body:""}:{visible:!0,body:this.texts.body(r)}});visible=d(()=>this.state().visible);onCta(){this.openSettings.emit()}static \u0275fac=function(r){return new(r||t)};static \u0275cmp=D({type:t,selectors:[["sm-oversized-banner"]],outputs:{openSettings:"openSettings"},decls:1,vars:1,consts:[["role","status","data-testid","oversized-banner",1,"oversized-banner"],["aria-hidden","true",1,"oversized-banner__icon","fa-solid","fa-triangle-exclamation"],["data-testid","oversized-banner-body",1,"oversized-banner__body"],["type","button","data-testid","oversized-banner-cta",1,"oversized-banner__cta",3,"click"]],template:function(r,i){r&1&&x(0,_n,6,3,"div",0),r&2&&w(i.visible()?0:-1)},styles:["[_nghost-%COMP%]{display:block}.oversized-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);font-size:.875rem;background:var(--sm-severity-warn-bg);color:var(--sm-severity-warn)}.oversized-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-warn)}.oversized-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.oversized-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.oversized-banner__cta[_ngcontent-%COMP%]:hover, .oversized-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.oversized-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return t})();var Xt={headline:t=>`${t} ${t===1?"file":"files"} skipped, ${t===1?"it exceeds":"they exceed"} the max file size.`,more:"...",seeConsole:"See the full list in the console.",cta:"Open Project settings",ctaAria:"Open Settings to adjust the max file size or ignore patterns"};function Cn(t,n){if(t&1&&(c(0,"span",4),g(1),p()),t&2){let e=f(2);b("pTooltip",e.state().tooltip),l(),_(e.texts.more)}}function kn(t,n){if(t&1){let e=A();c(0,"div",0),P(1,"span",1),c(2,"p",2),g(3),c(4,"span",3),g(5),p(),x(6,Cn,2,2,"span",4),p(),c(7,"button",5),T("click",function(){O(e);let i=f();return I(i.onCta())}),g(8),p()()}if(t&2){let e=f();l(3),S(" ",e.texts.headline(e.state().count)," "),l(2),S(" ",e.state().first," "),l(),w(e.state().hasMore?6:-1),l(),y("aria-label",e.texts.ctaAria),l(),S(" ",e.texts.cta," ")}}var xn=5,Ht=(()=>{class t{loader=s(V);texts=Xt;openSettings=ae();state=d(()=>{let e=this.loader.scanMeta(),r=e?.oversizedFiles??[],i=e?.stats?.filesOversized??r.length;if(i<=0)return{visible:!1,count:0,first:"",hasMore:!1,tooltip:""};let o=r[0]?this.describe(r[0]):"",a=i>1,u="";if(a){let C=r.slice(1);i-1>xn?u=this.texts.seeConsole:u=C.map(v=>this.describe(v)).join(`
|
|
4
|
-
`)}return{visible:!0,count:i,first:o,hasMore:a,tooltip:u}});visible=d(()=>this.state().visible);describe(e){return`${e.path.split("/").pop()??e.path} (${pt(e.bytes)})`}onCta(){this.openSettings.emit()}static \u0275fac=function(r){return new(r||t)};static \u0275cmp=D({type:t,selectors:[["sm-skipped-files-banner"]],outputs:{openSettings:"openSettings"},decls:1,vars:1,consts:[["role","status","data-testid","skipped-files-banner",1,"skipped-files-banner"],["aria-hidden","true",1,"skipped-files-banner__icon","fa-solid","fa-triangle-exclamation"],["data-testid","skipped-files-banner-body",1,"skipped-files-banner__body"],["data-testid","skipped-files-banner-first",1,"skipped-files-banner__first"],["data-testid","skipped-files-banner-more",1,"skipped-files-banner__more",3,"pTooltip"],["type","button","data-testid","skipped-files-banner-cta",1,"skipped-files-banner__cta",3,"click"]],template:function(r,i){r&1&&x(0,kn,9,5,"div",0),r&2&&w(i.visible()?0:-1)},dependencies:[de,ce],styles:["[_nghost-%COMP%]{display:block}.skipped-files-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);font-size:.875rem;background:var(--sm-severity-warn-bg);color:var(--sm-severity-warn)}.skipped-files-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-warn)}.skipped-files-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.skipped-files-banner__first[_ngcontent-%COMP%]{font-weight:600}.skipped-files-banner__more[_ngcontent-%COMP%]{font-weight:600;cursor:help}.skipped-files-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.skipped-files-banner__cta[_ngcontent-%COMP%]:hover, .skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return t})();var Wt={body:"Connection to the server was lost. Live updates are paused.",reconnectCta:"Reconnect",reconnectAria:"Retry the connection to the server"};function wn(t,n){if(t&1){let e=A();U(0,"div",0),te(1,"span",1),U(2,"p",2),g(3),Y(),U(4,"button",3),se("click",function(){O(e);let i=f();return I(i.reconnect())}),te(5,"span",4),g(6),Y()()}if(t&2){let e=f();l(3),_(e.texts.body),l(),y("aria-label",e.texts.reconnectAria),l(2),S(" ",e.texts.reconnectCta," ")}}var Qt=(()=>{class t{mode=s(N);ws=s(F);texts=Wt;visible=d(()=>this.mode==="live"&&this.ws.connectionState()==="lost");reconnect(){this.ws.reconnect()}static \u0275fac=function(r){return new(r||t)};static \u0275cmp=D({type:t,selectors:[["sm-connection-banner"]],decls:1,vars:1,consts:[["role","alert","data-testid","connection-banner",1,"connection-banner"],["aria-hidden","true",1,"connection-banner__icon","fa-solid","fa-plug-circle-xmark"],[1,"connection-banner__body"],["type","button","data-testid","connection-banner-reconnect",1,"connection-banner__cta",3,"click"],["aria-hidden","true",1,"fa-solid","fa-rotate-right"]],template:function(r,i){r&1&&x(0,wn,7,3,"div",0),r&2&&w(i.visible()?0:-1)},styles:["[_nghost-%COMP%]{display:block}.connection-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);background:var(--sm-severity-error-bg);color:var(--sm-severity-error);font-size:.875rem}.connection-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-error)}.connection-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.connection-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;display:inline-flex;align-items:center;gap:.4rem;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.connection-banner__cta[_ngcontent-%COMP%]:hover, .connection-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.connection-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return t})();var Pn=()=>[import("./chunk-C42H2UHU.js").then(t=>t.SettingsModal)];function Sn(t,n){if(t&1&&(c(0,"span",11),g(1),p()),t&2){let e=f();b("pTooltip",e.versionTooltip()),y("aria-label",e.texts.devChipA11y),l(),_(e.texts.devChip)}}function Mn(t,n){if(t&1&&(c(0,"span",12),g(1),p()),t&2){let e=f();b("pTooltip",e.versionTooltip()),y("aria-label",e.versionA11y()),l(),_(e.versionLabel())}}function Rn(t,n){if(t&1&&(c(0,"span",24),g(1),p()),t&2){let e=n,r=f();Ue("--provider-color",e.color)("--provider-color-dark",e.colorDark??e.color),b("pTooltip",r.texts.lensChipTooltip(e.label)),y("aria-label",r.texts.lensChipA11y(e.label)),l(),_(e.label)}}function Tn(t,n){if(t&1){let e=A();c(0,"button",25),T("click",function(){O(e);let i=f();return I(i.copyUpdateCommand())}),P(1,"i",26),c(2,"span"),g(3),p()(),c(4,"a",27),P(5,"i",28),p()}if(t&2){let e=f();b("pTooltip",e.updateChipTooltip()),y("aria-label",e.updateChipA11y()),l(),Je(e.updateChipIcon()),l(2),_(e.updateChipText()),l(),b("href",e.npmLinkUrl,oe)("pTooltip",e.npmLinkTooltip),y("aria-label",e.npmLinkA11y)}}function En(t,n){if(t&1&&(c(0,"p",15)(1,"bdi",29),g(2),p()()),t&2){let e=n;y("title",e),l(2),_(e)}}function On(t,n){if(t&1){let e=A();c(0,"sm-settings-modal",30),T("visibleChange",function(i){O(e);let o=f();return I(o.onSettingsVisibleChange(i))}),p()}if(t&2){let e=f();b("visible",e.settingsOpen())}}var Yt=(()=>{class t{loader=s(V);theme=s(_t);projectInfo=s(q);providerRegistry=s(K);scanTrigger=s(kt);wsEvents=s(F);usageTracker=s(ie);updateCheck=s(ge);texts=j;isDemo=s(N)==="demo";settingsTexts=Ct;settingsOpen=B(!1);openSettings(){this.settingsOpen.set(!0),this.usageTracker.trackFeature("settings")}onSettingsVisibleChange(e){this.settingsOpen.set(e),e||this.projectInfo.reloadActiveProvider()}scanning=d(()=>this.scanTrigger.scanning()||this.wsEvents.scanActive());scanError=this.scanTrigger.scanError;triggerScan(){return this.scanTrigger.run()}updateChipCopied=B(!1);updateChipText=d(()=>this.updateChipCopied()?M.copiedLabel:M.available);updateChipIcon=d(()=>this.updateChipCopied()?"pi pi-check":"pi pi-download");updateChipTooltip=d(()=>this.updateChipCopied()?M.copiedTooltip:M.tooltip(this.updateCheck.latest()??""));updateChipA11y=d(()=>M.a11yLabel(this.updateCheck.latest()??""));npmLinkUrl=M.npmLinkUrl;npmLinkTooltip=M.npmLinkTooltip;npmLinkA11y=M.npmLinkA11y;async copyUpdateCommand(){try{await navigator.clipboard.writeText(M.copyCommand),this.updateChipCopied.set(!0),setTimeout(()=>this.updateChipCopied.set(!1),2e3)}catch{}}versionLabel=d(()=>M.versionLabel(this.updateCheck.current()??""));versionTooltip=d(()=>M.versionTooltip(this.updateCheck.current()??""));versionA11y=d(()=>M.versionA11yLabel(this.updateCheck.current()??""));isDevBuild=this.projectInfo.dev;lensChip=d(()=>this.providerRegistry.lensChip(this.projectInfo.activeProvider()));count=this.loader.count;linkAnalysis=d(()=>yt(this.loader.nodes(),this.loader.scan()));linkCount=d(()=>this.linkAnalysis().raw);mapInfoTooltip=d(()=>j.badge.mapInfo(this.count(),this.linkAnalysis()));mapInfoA11y=d(()=>j.badge.mapInfoA11y(this.count(),this.linkAnalysis()));rootLabel=d(()=>{let e=this.projectInfo.cwd();if(e&&e!==".")return e;let r=this.loader.scan()?.roots??[];if(r.length===0)return"";let i=r[0].replace(/[\\/]+$/,"");return!i||i==="."?"":i});isDevMode=Ke();themeMode=this.theme.mode;markSrc=d(()=>this.theme.extraTheme()==="matrix"?"skill-map-mark-matrix.svg":this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");themeIcon=d(()=>{switch(this.themeMode()){case"auto":return"pi pi-desktop";case"light":return"pi pi-sun";case"dark":return"fa-regular fa-moon"}});themeLabel=d(()=>{switch(this.themeMode()){case"auto":return X.toggleToLight;case"light":return X.toggleToDark;case"dark":return X.toggleToAuto}});themeTooltip=d(()=>{switch(this.themeMode()){case"auto":return X.currentAuto;case"light":return X.currentLight;case"dark":return X.currentDark}});toggleTheme(){this.theme.toggle()}static \u0275fac=function(r){return new(r||t)};static \u0275cmp=D({type:t,selectors:[["sm-root"]],decls:39,vars:28,consts:[["role","alert","data-testid","viewport-warning",1,"viewport-warning"],[1,"viewport-warning__card"],["aria-hidden","true",1,"fa-solid","fa-desktop","viewport-warning__icon"],[1,"viewport-warning__title"],[1,"viewport-warning__subtitle"],[1,"viewport-warning__body"],["data-testid","shell",1,"shell"],[3,"openSettings"],["data-testid","shell-topbar",1,"shell__topbar"],[1,"shell__brand"],["width","32","height","32","priority","","alt","","aria-hidden","true",1,"shell__brand-mark",3,"ngSrc"],["tooltipPosition","bottom","data-testid","shell-dev",1,"shell__dev",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-version",1,"shell__version",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"--provider-color","--provider-color-dark","pTooltip"],[1,"shell__beta"],["data-testid","shell-root-label",1,"shell__tag"],["data-testid","shell-nav",1,"shell__nav"],["slot","topbar.nav.start",3,"node"],[1,"shell__actions"],["type","button","tooltipPosition","bottom","data-testid","shell-refresh",1,"shell__refresh",3,"click","pTooltip","disabled"],["aria-hidden","true",1,"pi","pi-sync"],["tooltipPosition","left","severity","secondary","size","small","data-testid","action-theme-toggle",3,"onClick","icon","ariaLabel","pTooltip","text","rounded"],["icon","pi pi-sliders-h","tooltipPosition","left","severity","secondary","size","small","data-testid","action-settings",3,"onClick","ariaLabel","pTooltip","text","rounded"],[1,"shell__main"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"pTooltip"],["type","button","tooltipPosition","bottom","data-testid","shell-update-chip",1,"shell__update-chip",3,"click","pTooltip"],["aria-hidden","true"],["target","_blank","rel","noopener noreferrer","tooltipPosition","bottom","data-testid","shell-update-npm-link",1,"shell__update-npm-link",3,"href","pTooltip"],["aria-hidden","true",1,"pi","pi-external-link"],["dir","ltr"],[3,"visibleChange","visible"]],template:function(r,i){if(r&1&&(c(0,"div",0)(1,"div",1),P(2,"i",2),c(3,"h2",3),g(4),p(),c(5,"p",4),g(6),p(),c(7,"p",5),g(8),p()()(),c(9,"div",6),P(10,"sm-demo-banner"),c(11,"sm-oversized-banner",7),T("openSettings",function(){return i.openSettings()}),p(),c(12,"sm-skipped-files-banner",7),T("openSettings",function(){return i.openSettings()}),p(),P(13,"sm-connection-banner"),c(14,"header",8)(15,"div",9),P(16,"img",10),c(17,"div")(18,"h1"),g(19),x(20,Sn,2,3,"span",11)(21,Mn,2,3,"span",12),x(22,Rn,2,7,"span",13),c(23,"span",14),g(24),p(),x(25,Tn,6,8),p(),x(26,En,3,2,"p",15),p()(),c(27,"nav",16),P(28,"sm-view-contributions-host",17),p(),c(29,"div",18)(30,"button",19),T("click",function(){return i.triggerScan()}),P(31,"i",20),p(),c(32,"p-button",21),T("onClick",function(){return i.toggleTheme()}),p(),c(33,"p-button",22),T("onClick",function(){return i.openSettings()}),p()()(),c(34,"main",23),P(35,"router-outlet"),p(),je(36,On,1,1),ze(37,36,Pn),p()),r&2){let o,a,u;l(4),_(i.texts.viewportWarning.title),l(2),_(i.texts.viewportWarning.subtitle),l(2),_(i.texts.viewportWarning.body),l(8),b("ngSrc",i.markSrc()),l(3),S(" ",i.texts.brand," "),l(),w(i.isDevBuild()?20:(o=i.updateCheck.current())?21:-1,o),l(2),w((a=i.lensChip())?22:-1,a),l(),y("aria-label",i.isDemo?i.texts.betaDemo:i.texts.beta),l(),_(i.isDemo?i.texts.betaDemo:i.texts.beta),l(),w(i.updateCheck.isOutdated()&&!i.isDevMode?25:-1),l(),w((u=i.rootLabel())?26:-1,u),l(),y("aria-label",i.texts.a11y.viewSwitcher),l(),b("node",null),l(2),Ve("is-spinning",i.scanning()),b("pTooltip",i.mapInfoTooltip())("disabled",i.scanning()),y("aria-label",i.mapInfoA11y()),l(2),b("icon",i.themeIcon())("ariaLabel",i.themeLabel())("pTooltip",i.themeTooltip())("text",!0)("rounded",!0),l(),b("ariaLabel",i.settingsTexts.a11y.triggerLabel)("pTooltip",i.settingsTexts.triggerTooltip)("text",!0)("rounded",!0),l(4),Be(i.settingsOpen())}},dependencies:[tt,me,pe,lt,de,ce,at,Xe,Vt,Kt,Ht,Qt,ht],styles:['[_nghost-%COMP%]{display:block;height:100dvh;--shell-topbar-bg: #FFFFFF;--shell-topbar-border: var(--sm-violet-100);--shell-topbar-text: var(--sm-violet-800);--shell-topbar-text-strong: var(--sm-violet-900);--shell-topbar-text-muted: var(--sm-violet-600);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-500) 10%, transparent);--shell-topbar-active-bg: var(--sm-violet-100);--shell-topbar-active-text: var(--sm-violet-800);--shell-topbar-badge-bg: var(--sm-violet-100)}.app-dark[_nghost-%COMP%], .app-dark [_nghost-%COMP%]{--shell-topbar-bg: #1A1B22;--shell-topbar-border: color-mix(in srgb, var(--sm-violet-300) 8%, transparent);--shell-topbar-text: var(--sm-violet-100);--shell-topbar-text-strong: var(--sm-violet-100);--shell-topbar-text-muted: var(--sm-violet-300);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-400) 12%, transparent);--shell-topbar-active-bg: color-mix(in srgb, var(--sm-violet-500) 22%, transparent);--shell-topbar-active-text: var(--sm-violet-100);--shell-topbar-badge-bg: color-mix(in srgb, var(--sm-violet-500) 14%, transparent)}.shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100dvh}.shell__topbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;padding:.75rem 1.5rem;background:color-mix(in srgb,var(--shell-topbar-bg) 85%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--shell-topbar-border);color:var(--shell-topbar-text)}.shell__brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__brand-mark[_ngcontent-%COMP%]{width:2rem;height:2rem;display:block}.shell__brand[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:600;letter-spacing:-.01em;color:var(--shell-topbar-text-strong)}.shell__beta[_ngcontent-%COMP%]{font-family:var(--sm-font-display-brand);font-weight:600;font-size:10px;line-height:1;letter-spacing:.06em;text-transform:uppercase;color:#ad322b;background:#ad322b14;border-radius:var(--sm-radius-sm);padding:4px 8px;margin-left:8px;-webkit-user-select:none;user-select:none;display:inline-block;vertical-align:middle;white-space:nowrap}.app-dark[_nghost-%COMP%] .shell__beta[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__beta[_ngcontent-%COMP%]{color:#e07570;background:#cf464024}.shell__version[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 6px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-mono);font-size:11px;line-height:1;font-weight:500;letter-spacing:.02em;color:var(--p-text-muted-color);background:var(--p-content-hover-background);vertical-align:middle;-webkit-user-select:text;user-select:text}.shell__dev[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-display-brand);font-size:10px;line-height:1;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8a5a00;background:#d69e2e29;vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%]{color:#fbd38d;background:#d69e2e38}.shell__lens[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-size:11px;line-height:1;font-weight:600;letter-spacing:.02em;color:var(--provider-color);background:color-mix(in srgb,var(--provider-color) 14%,transparent);vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%]{color:var(--provider-color-dark);background:color-mix(in srgb,var(--provider-color-dark) 24%,transparent)}.shell__update-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--p-primary-color);background:var(--p-primary-50);border:1px solid var(--p-primary-200);border-radius:var(--sm-radius-pill);text-decoration:none;cursor:pointer;transition:background-color .12s ease,color .12s ease;vertical-align:middle}.shell__update-chip[_ngcontent-%COMP%]:hover, .shell__update-chip[_ngcontent-%COMP%]:focus-visible{background:var(--p-primary-100);color:var(--p-primary-700)}.shell__update-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%]{color:var(--p-primary-300);background:#ffffff0a;border-color:var(--p-primary-700)}.shell__update-npm-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;margin-left:4px;padding:3px 4px;color:var(--p-primary-color);text-decoration:none;border-radius:var(--sm-radius-pill);transition:color .12s ease,background-color .12s ease;vertical-align:middle}.shell__update-npm-link[_ngcontent-%COMP%]:hover, .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-700);background:var(--p-primary-50)}.shell__update-npm-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]{color:var(--p-primary-300)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-200);background:#ffffff0a}.shell__tag[_ngcontent-%COMP%]{margin:.35rem 0 0;font-size:.72rem;color:var(--shell-topbar-text-muted);letter-spacing:.02em;text-transform:uppercase;max-width:40rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl}.shell__nav[_ngcontent-%COMP%]{display:flex;gap:.25rem;margin-left:auto}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.5rem .9rem;border-radius:.5rem;font-size:.9rem;font-weight:500;color:var(--shell-topbar-text-muted);transition:background .15s ease,color .15s ease}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__nav[_ngcontent-%COMP%] a.is-active[_ngcontent-%COMP%]{background:var(--shell-topbar-active-bg);color:var(--shell-topbar-active-text)}.shell__search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;position:relative}.shell__nav-search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;border:none;border-radius:.5rem;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease,opacity .15s ease}.shell__nav-search[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search.is-open[_ngcontent-%COMP%] .shell__nav-search[_ngcontent-%COMP%]{color:var(--shell-topbar-text-strong)}.shell__nav-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.95rem}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]{position:relative;color:var(--shell-topbar-text-strong)}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]:after{content:"";position:absolute;top:.45rem;right:.45rem;width:6px;height:6px;border-radius:50%;background:var(--p-primary-color)}.shell__search-input[_ngcontent-%COMP%]{width:240px;height:2.25rem}.shell__search-clear[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;padding:0;border:none;border-radius:50%;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;line-height:1}.shell__search-clear[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search-clear[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.7rem}.shell__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;--p-button-text-secondary-color: var(--shell-topbar-text-muted);--p-button-text-secondary-hover-color: var(--shell-topbar-text-strong);--p-button-text-secondary-hover-background: var(--shell-topbar-hover-bg);--p-button-text-secondary-active-color: var(--shell-topbar-text-strong);--p-button-text-secondary-active-background: var(--shell-topbar-hover-bg)}.shell__refresh[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:var(--sm-radius-pill);background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease}.shell__refresh[_ngcontent-%COMP%]:hover:not(:disabled), .shell__refresh[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong);outline:none}.shell__refresh[_ngcontent-%COMP%]:disabled{cursor:progress;opacity:.7}.shell__refresh[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem}.shell__refresh.is-spinning[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_shell-refresh-spin 1s linear infinite}@keyframes _ngcontent-%COMP%_shell-refresh-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.shell__main[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;width:100%}@media(max-width:1280px){.shell__topbar[_ngcontent-%COMP%]{gap:1rem;padding:.5rem 1rem}.shell__tag[_ngcontent-%COMP%]{max-width:26rem}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.4rem .7rem;font-size:.85rem}}.viewport-warning[_ngcontent-%COMP%]{display:none}@media(max-width:767px){.viewport-warning[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:var(--sm-bg-content)}.viewport-warning__card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.85rem;max-width:22rem}.viewport-warning__icon[_ngcontent-%COMP%]{font-size:3rem;color:var(--p-primary-color);margin-bottom:.25rem}.viewport-warning__title[_ngcontent-%COMP%]{margin:0;font-size:1.35rem;font-weight:700;color:var(--p-text-color);line-height:1.25}.viewport-warning__subtitle[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:500;color:var(--p-primary-color);line-height:1.35}.viewport-warning__body[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);line-height:1.5;font-size:.9rem}.shell[_ngcontent-%COMP%]{display:none}}'],changeDetection:0})}return t})();We(Yt,zt).catch(t=>console.error(t));
|
|
4
|
+
`)}return{visible:!0,count:i,first:o,hasMore:a,tooltip:u}});visible=d(()=>this.state().visible);describe(e){return`${e.path.split("/").pop()??e.path} (${pt(e.bytes)})`}onCta(){this.openSettings.emit()}static \u0275fac=function(r){return new(r||t)};static \u0275cmp=D({type:t,selectors:[["sm-skipped-files-banner"]],outputs:{openSettings:"openSettings"},decls:1,vars:1,consts:[["role","status","data-testid","skipped-files-banner",1,"skipped-files-banner"],["aria-hidden","true",1,"skipped-files-banner__icon","fa-solid","fa-triangle-exclamation"],["data-testid","skipped-files-banner-body",1,"skipped-files-banner__body"],["data-testid","skipped-files-banner-first",1,"skipped-files-banner__first"],["data-testid","skipped-files-banner-more",1,"skipped-files-banner__more",3,"pTooltip"],["type","button","data-testid","skipped-files-banner-cta",1,"skipped-files-banner__cta",3,"click"]],template:function(r,i){r&1&&x(0,kn,9,5,"div",0),r&2&&w(i.visible()?0:-1)},dependencies:[de,ce],styles:["[_nghost-%COMP%]{display:block}.skipped-files-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);font-size:.875rem;background:var(--sm-severity-warn-bg);color:var(--sm-severity-warn)}.skipped-files-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-warn)}.skipped-files-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.skipped-files-banner__first[_ngcontent-%COMP%]{font-weight:600}.skipped-files-banner__more[_ngcontent-%COMP%]{font-weight:600;cursor:help}.skipped-files-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.skipped-files-banner__cta[_ngcontent-%COMP%]:hover, .skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.skipped-files-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return t})();var Wt={body:"Connection to the server was lost. Live updates are paused.",reconnectCta:"Reconnect",reconnectAria:"Retry the connection to the server"};function wn(t,n){if(t&1){let e=A();U(0,"div",0),te(1,"span",1),U(2,"p",2),g(3),Y(),U(4,"button",3),se("click",function(){O(e);let i=f();return I(i.reconnect())}),te(5,"span",4),g(6),Y()()}if(t&2){let e=f();l(3),_(e.texts.body),l(),y("aria-label",e.texts.reconnectAria),l(2),S(" ",e.texts.reconnectCta," ")}}var Qt=(()=>{class t{mode=s(N);ws=s(F);texts=Wt;visible=d(()=>this.mode==="live"&&this.ws.connectionState()==="lost");reconnect(){this.ws.reconnect()}static \u0275fac=function(r){return new(r||t)};static \u0275cmp=D({type:t,selectors:[["sm-connection-banner"]],decls:1,vars:1,consts:[["role","alert","data-testid","connection-banner",1,"connection-banner"],["aria-hidden","true",1,"connection-banner__icon","fa-solid","fa-plug-circle-xmark"],[1,"connection-banner__body"],["type","button","data-testid","connection-banner-reconnect",1,"connection-banner__cta",3,"click"],["aria-hidden","true",1,"fa-solid","fa-rotate-right"]],template:function(r,i){r&1&&x(0,wn,7,3,"div",0),r&2&&w(i.visible()?0:-1)},styles:["[_nghost-%COMP%]{display:block}.connection-banner[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;padding:.5rem 1rem;border-bottom:1px solid var(--p-content-border-color);background:var(--sm-severity-error-bg);color:var(--sm-severity-error);font-size:.875rem}.connection-banner__icon[_ngcontent-%COMP%]{font-size:1.1rem;color:var(--sm-severity-error)}.connection-banner__body[_ngcontent-%COMP%]{flex:1 1 auto;margin:0;line-height:1.4}.connection-banner__cta[_ngcontent-%COMP%]{flex:0 0 auto;display:inline-flex;align-items:center;gap:.4rem;background:transparent;color:inherit;border:1px solid currentColor;padding:.25rem .75rem;border-radius:var(--p-border-radius);font:inherit;font-size:.8125rem;font-weight:500;cursor:pointer;transition:background .15s ease}.connection-banner__cta[_ngcontent-%COMP%]:hover, .connection-banner__cta[_ngcontent-%COMP%]:focus-visible{background:color-mix(in srgb,currentColor 12%,transparent)}.connection-banner__cta[_ngcontent-%COMP%]:focus-visible{outline:2px solid currentColor;outline-offset:2px}"],changeDetection:0})}return t})();var Pn=()=>[import("./chunk-HLHEDNSJ.js").then(t=>t.SettingsModal)];function Sn(t,n){if(t&1&&(c(0,"span",11),g(1),p()),t&2){let e=f();b("pTooltip",e.versionTooltip()),y("aria-label",e.texts.devChipA11y),l(),_(e.texts.devChip)}}function Mn(t,n){if(t&1&&(c(0,"span",12),g(1),p()),t&2){let e=f();b("pTooltip",e.versionTooltip()),y("aria-label",e.versionA11y()),l(),_(e.versionLabel())}}function Rn(t,n){if(t&1&&(c(0,"span",24),g(1),p()),t&2){let e=n,r=f();Ue("--provider-color",e.color)("--provider-color-dark",e.colorDark??e.color),b("pTooltip",r.texts.lensChipTooltip(e.label)),y("aria-label",r.texts.lensChipA11y(e.label)),l(),_(e.label)}}function Tn(t,n){if(t&1){let e=A();c(0,"button",25),T("click",function(){O(e);let i=f();return I(i.copyUpdateCommand())}),P(1,"i",26),c(2,"span"),g(3),p()(),c(4,"a",27),P(5,"i",28),p()}if(t&2){let e=f();b("pTooltip",e.updateChipTooltip()),y("aria-label",e.updateChipA11y()),l(),Je(e.updateChipIcon()),l(2),_(e.updateChipText()),l(),b("href",e.npmLinkUrl,oe)("pTooltip",e.npmLinkTooltip),y("aria-label",e.npmLinkA11y)}}function En(t,n){if(t&1&&(c(0,"p",15)(1,"bdi",29),g(2),p()()),t&2){let e=n;y("title",e),l(2),_(e)}}function On(t,n){if(t&1){let e=A();c(0,"sm-settings-modal",30),T("visibleChange",function(i){O(e);let o=f();return I(o.onSettingsVisibleChange(i))}),p()}if(t&2){let e=f();b("visible",e.settingsOpen())}}var Yt=(()=>{class t{loader=s(V);theme=s(_t);projectInfo=s(q);providerRegistry=s(K);scanTrigger=s(kt);wsEvents=s(F);usageTracker=s(ie);updateCheck=s(ge);texts=j;isDemo=s(N)==="demo";settingsTexts=Ct;settingsOpen=B(!1);openSettings(){this.settingsOpen.set(!0),this.usageTracker.trackFeature("settings")}onSettingsVisibleChange(e){this.settingsOpen.set(e),e||this.projectInfo.reloadActiveProvider()}scanning=d(()=>this.scanTrigger.scanning()||this.wsEvents.scanActive());scanError=this.scanTrigger.scanError;triggerScan(){return this.scanTrigger.run()}updateChipCopied=B(!1);updateChipText=d(()=>this.updateChipCopied()?M.copiedLabel:M.available);updateChipIcon=d(()=>this.updateChipCopied()?"pi pi-check":"pi pi-download");updateChipTooltip=d(()=>this.updateChipCopied()?M.copiedTooltip:M.tooltip(this.updateCheck.latest()??""));updateChipA11y=d(()=>M.a11yLabel(this.updateCheck.latest()??""));npmLinkUrl=M.npmLinkUrl;npmLinkTooltip=M.npmLinkTooltip;npmLinkA11y=M.npmLinkA11y;async copyUpdateCommand(){try{await navigator.clipboard.writeText(M.copyCommand),this.updateChipCopied.set(!0),setTimeout(()=>this.updateChipCopied.set(!1),2e3)}catch{}}versionLabel=d(()=>M.versionLabel(this.updateCheck.current()??""));versionTooltip=d(()=>M.versionTooltip(this.updateCheck.current()??""));versionA11y=d(()=>M.versionA11yLabel(this.updateCheck.current()??""));isDevBuild=this.projectInfo.dev;lensChip=d(()=>this.providerRegistry.lensChip(this.projectInfo.activeProvider()));count=this.loader.count;linkAnalysis=d(()=>yt(this.loader.nodes(),this.loader.scan()));linkCount=d(()=>this.linkAnalysis().raw);mapInfoTooltip=d(()=>j.badge.mapInfo(this.count(),this.linkAnalysis()));mapInfoA11y=d(()=>j.badge.mapInfoA11y(this.count(),this.linkAnalysis()));rootLabel=d(()=>{let e=this.projectInfo.cwd();if(e&&e!==".")return e;let r=this.loader.scan()?.roots??[];if(r.length===0)return"";let i=r[0].replace(/[\\/]+$/,"");return!i||i==="."?"":i});isDevMode=Ke();themeMode=this.theme.mode;markSrc=d(()=>this.theme.extraTheme()==="matrix"?"skill-map-mark-matrix.svg":this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");themeIcon=d(()=>{switch(this.themeMode()){case"auto":return"pi pi-desktop";case"light":return"pi pi-sun";case"dark":return"fa-regular fa-moon"}});themeLabel=d(()=>{switch(this.themeMode()){case"auto":return X.toggleToLight;case"light":return X.toggleToDark;case"dark":return X.toggleToAuto}});themeTooltip=d(()=>{switch(this.themeMode()){case"auto":return X.currentAuto;case"light":return X.currentLight;case"dark":return X.currentDark}});toggleTheme(){this.theme.toggle()}static \u0275fac=function(r){return new(r||t)};static \u0275cmp=D({type:t,selectors:[["sm-root"]],decls:39,vars:28,consts:[["role","alert","data-testid","viewport-warning",1,"viewport-warning"],[1,"viewport-warning__card"],["aria-hidden","true",1,"fa-solid","fa-desktop","viewport-warning__icon"],[1,"viewport-warning__title"],[1,"viewport-warning__subtitle"],[1,"viewport-warning__body"],["data-testid","shell",1,"shell"],[3,"openSettings"],["data-testid","shell-topbar",1,"shell__topbar"],[1,"shell__brand"],["width","32","height","32","priority","","alt","","aria-hidden","true",1,"shell__brand-mark",3,"ngSrc"],["tooltipPosition","bottom","data-testid","shell-dev",1,"shell__dev",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-version",1,"shell__version",3,"pTooltip"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"--provider-color","--provider-color-dark","pTooltip"],[1,"shell__beta"],["data-testid","shell-root-label",1,"shell__tag"],["data-testid","shell-nav",1,"shell__nav"],["slot","topbar.nav.start",3,"node"],[1,"shell__actions"],["type","button","tooltipPosition","bottom","data-testid","shell-refresh",1,"shell__refresh",3,"click","pTooltip","disabled"],["aria-hidden","true",1,"pi","pi-sync"],["tooltipPosition","left","severity","secondary","size","small","data-testid","action-theme-toggle",3,"onClick","icon","ariaLabel","pTooltip","text","rounded"],["icon","pi pi-sliders-h","tooltipPosition","left","severity","secondary","size","small","data-testid","action-settings",3,"onClick","ariaLabel","pTooltip","text","rounded"],[1,"shell__main"],["tooltipPosition","bottom","data-testid","shell-lens",1,"shell__lens",3,"pTooltip"],["type","button","tooltipPosition","bottom","data-testid","shell-update-chip",1,"shell__update-chip",3,"click","pTooltip"],["aria-hidden","true"],["target","_blank","rel","noopener noreferrer","tooltipPosition","bottom","data-testid","shell-update-npm-link",1,"shell__update-npm-link",3,"href","pTooltip"],["aria-hidden","true",1,"pi","pi-external-link"],["dir","ltr"],[3,"visibleChange","visible"]],template:function(r,i){if(r&1&&(c(0,"div",0)(1,"div",1),P(2,"i",2),c(3,"h2",3),g(4),p(),c(5,"p",4),g(6),p(),c(7,"p",5),g(8),p()()(),c(9,"div",6),P(10,"sm-demo-banner"),c(11,"sm-oversized-banner",7),T("openSettings",function(){return i.openSettings()}),p(),c(12,"sm-skipped-files-banner",7),T("openSettings",function(){return i.openSettings()}),p(),P(13,"sm-connection-banner"),c(14,"header",8)(15,"div",9),P(16,"img",10),c(17,"div")(18,"h1"),g(19),x(20,Sn,2,3,"span",11)(21,Mn,2,3,"span",12),x(22,Rn,2,7,"span",13),c(23,"span",14),g(24),p(),x(25,Tn,6,8),p(),x(26,En,3,2,"p",15),p()(),c(27,"nav",16),P(28,"sm-view-contributions-host",17),p(),c(29,"div",18)(30,"button",19),T("click",function(){return i.triggerScan()}),P(31,"i",20),p(),c(32,"p-button",21),T("onClick",function(){return i.toggleTheme()}),p(),c(33,"p-button",22),T("onClick",function(){return i.openSettings()}),p()()(),c(34,"main",23),P(35,"router-outlet"),p(),je(36,On,1,1),ze(37,36,Pn),p()),r&2){let o,a,u;l(4),_(i.texts.viewportWarning.title),l(2),_(i.texts.viewportWarning.subtitle),l(2),_(i.texts.viewportWarning.body),l(8),b("ngSrc",i.markSrc()),l(3),S(" ",i.texts.brand," "),l(),w(i.isDevBuild()?20:(o=i.updateCheck.current())?21:-1,o),l(2),w((a=i.lensChip())?22:-1,a),l(),y("aria-label",i.isDemo?i.texts.betaDemo:i.texts.beta),l(),_(i.isDemo?i.texts.betaDemo:i.texts.beta),l(),w(i.updateCheck.isOutdated()&&!i.isDevMode?25:-1),l(),w((u=i.rootLabel())?26:-1,u),l(),y("aria-label",i.texts.a11y.viewSwitcher),l(),b("node",null),l(2),Ve("is-spinning",i.scanning()),b("pTooltip",i.mapInfoTooltip())("disabled",i.scanning()),y("aria-label",i.mapInfoA11y()),l(2),b("icon",i.themeIcon())("ariaLabel",i.themeLabel())("pTooltip",i.themeTooltip())("text",!0)("rounded",!0),l(),b("ariaLabel",i.settingsTexts.a11y.triggerLabel)("pTooltip",i.settingsTexts.triggerTooltip)("text",!0)("rounded",!0),l(4),Be(i.settingsOpen())}},dependencies:[tt,me,pe,lt,de,ce,at,Xe,Vt,Kt,Ht,Qt,ht],styles:['[_nghost-%COMP%]{display:block;height:100dvh;--shell-topbar-bg: #FFFFFF;--shell-topbar-border: var(--sm-violet-100);--shell-topbar-text: var(--sm-violet-800);--shell-topbar-text-strong: var(--sm-violet-900);--shell-topbar-text-muted: var(--sm-violet-600);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-500) 10%, transparent);--shell-topbar-active-bg: var(--sm-violet-100);--shell-topbar-active-text: var(--sm-violet-800);--shell-topbar-badge-bg: var(--sm-violet-100)}.app-dark[_nghost-%COMP%], .app-dark [_nghost-%COMP%]{--shell-topbar-bg: #1A1B22;--shell-topbar-border: color-mix(in srgb, var(--sm-violet-300) 8%, transparent);--shell-topbar-text: var(--sm-violet-100);--shell-topbar-text-strong: var(--sm-violet-100);--shell-topbar-text-muted: var(--sm-violet-300);--shell-topbar-hover-bg: color-mix(in srgb, var(--sm-violet-400) 12%, transparent);--shell-topbar-active-bg: color-mix(in srgb, var(--sm-violet-500) 22%, transparent);--shell-topbar-active-text: var(--sm-violet-100);--shell-topbar-badge-bg: color-mix(in srgb, var(--sm-violet-500) 14%, transparent)}.shell[_ngcontent-%COMP%]{display:flex;flex-direction:column;height:100dvh}.shell__topbar[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem;padding:.75rem 1.5rem;background:color-mix(in srgb,var(--shell-topbar-bg) 85%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--shell-topbar-border);color:var(--shell-topbar-text)}.shell__brand[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.shell__brand-mark[_ngcontent-%COMP%]{width:2rem;height:2rem;display:block}.shell__brand[_ngcontent-%COMP%] h1[_ngcontent-%COMP%]{margin:0;font-size:1.05rem;font-weight:600;letter-spacing:-.01em;color:var(--shell-topbar-text-strong)}.shell__beta[_ngcontent-%COMP%]{font-family:var(--sm-font-display-brand);font-weight:600;font-size:10px;line-height:1;letter-spacing:.06em;text-transform:uppercase;color:#ad322b;background:#ad322b14;border-radius:var(--sm-radius-sm);padding:4px 8px;margin-left:8px;-webkit-user-select:none;user-select:none;display:inline-block;vertical-align:middle;white-space:nowrap}.app-dark[_nghost-%COMP%] .shell__beta[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__beta[_ngcontent-%COMP%]{color:#e07570;background:#cf464024}.shell__version[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 6px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-mono);font-size:11px;line-height:1;font-weight:500;letter-spacing:.02em;color:var(--p-text-muted-color);background:var(--p-content-hover-background);vertical-align:middle;-webkit-user-select:text;user-select:text}.shell__dev[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-family:var(--sm-font-display-brand);font-size:10px;line-height:1;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:#8a5a00;background:#d69e2e29;vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__dev[_ngcontent-%COMP%]{color:#fbd38d;background:#d69e2e38}.shell__lens[_ngcontent-%COMP%]{display:inline-block;margin-left:6px;padding:2px 8px;border-radius:var(--sm-radius-sm);font-size:11px;line-height:1;font-weight:600;letter-spacing:.02em;color:var(--provider-color);background:color-mix(in srgb,var(--provider-color) 14%,transparent);vertical-align:middle;-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__lens[_ngcontent-%COMP%]{color:var(--provider-color-dark);background:color-mix(in srgb,var(--provider-color-dark) 24%,transparent)}.shell__update-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;margin-left:8px;padding:3px 8px;font-family:inherit;font-size:11px;line-height:1;font-weight:600;letter-spacing:.04em;text-transform:uppercase;color:var(--p-primary-color);background:var(--p-primary-50);border:1px solid var(--p-primary-200);border-radius:var(--sm-radius-pill);text-decoration:none;cursor:pointer;transition:background-color .12s ease,color .12s ease;vertical-align:middle}.shell__update-chip[_ngcontent-%COMP%]:hover, .shell__update-chip[_ngcontent-%COMP%]:focus-visible{background:var(--p-primary-100);color:var(--p-primary-700)}.shell__update-chip[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-chip[_ngcontent-%COMP%]{color:var(--p-primary-300);background:#ffffff0a;border-color:var(--p-primary-700)}.shell__update-npm-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;margin-left:4px;padding:3px 4px;color:var(--p-primary-color);text-decoration:none;border-radius:var(--sm-radius-pill);transition:color .12s ease,background-color .12s ease;vertical-align:middle}.shell__update-npm-link[_ngcontent-%COMP%]:hover, .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-700);background:var(--p-primary-50)}.shell__update-npm-link[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:12px;transform:translateY(1px)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]{color:var(--p-primary-300)}.app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:hover, .app-dark[_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible, .app-dark [_nghost-%COMP%] .shell__update-npm-link[_ngcontent-%COMP%]:focus-visible{color:var(--p-primary-200);background:#ffffff0a}.shell__tag[_ngcontent-%COMP%]{margin:.35rem 0 0;font-size:.72rem;color:var(--shell-topbar-text-muted);letter-spacing:.02em;text-transform:uppercase;max-width:40rem;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;direction:rtl}.shell__nav[_ngcontent-%COMP%]{display:flex;gap:.25rem;margin-left:auto}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.5rem .9rem;border-radius:.5rem;font-size:.9rem;font-weight:500;color:var(--shell-topbar-text-muted);transition:background .15s ease,color .15s ease}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__nav[_ngcontent-%COMP%] a.is-active[_ngcontent-%COMP%]{background:var(--shell-topbar-active-bg);color:var(--shell-topbar-active-text)}.shell__search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;position:relative}.shell__nav-search[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;padding:0;border:none;border-radius:.5rem;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease,opacity .15s ease}.shell__nav-search[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search.is-open[_ngcontent-%COMP%] .shell__nav-search[_ngcontent-%COMP%]{color:var(--shell-topbar-text-strong)}.shell__nav-search[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.95rem}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]{position:relative;color:var(--shell-topbar-text-strong)}.shell__search.has-query[_ngcontent-%COMP%]:not(.is-open) .shell__nav-search[_ngcontent-%COMP%]:after{content:"";position:absolute;top:.45rem;right:.45rem;width:6px;height:6px;border-radius:50%;background:var(--p-primary-color)}.shell__search-input[_ngcontent-%COMP%]{width:240px;height:2.25rem}.shell__search-clear[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:1.6rem;height:1.6rem;padding:0;border:none;border-radius:50%;background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;line-height:1}.shell__search-clear[_ngcontent-%COMP%]:hover{background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong)}.shell__search-clear[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.7rem}.shell__actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem;--p-button-text-secondary-color: var(--shell-topbar-text-muted);--p-button-text-secondary-hover-color: var(--shell-topbar-text-strong);--p-button-text-secondary-hover-background: var(--shell-topbar-hover-bg);--p-button-text-secondary-active-color: var(--shell-topbar-text-strong);--p-button-text-secondary-active-background: var(--shell-topbar-hover-bg)}.shell__refresh[_ngcontent-%COMP%]{display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border:none;border-radius:var(--sm-radius-pill);background:transparent;color:var(--shell-topbar-text-muted);cursor:pointer;transition:background .15s ease,color .15s ease}.shell__refresh[_ngcontent-%COMP%]:hover:not(:disabled), .shell__refresh[_ngcontent-%COMP%]:focus-visible:not(:disabled){background:var(--shell-topbar-hover-bg);color:var(--shell-topbar-text-strong);outline:none}.shell__refresh[_ngcontent-%COMP%]:disabled{cursor:progress;opacity:.7}.shell__refresh[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:1rem}.shell__refresh.is-spinning[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_shell-refresh-spin 1s linear infinite}@keyframes _ngcontent-%COMP%_shell-refresh-spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.shell__main[_ngcontent-%COMP%]{flex:1;min-height:0;overflow-y:auto;width:100%}@media(max-width:1280px){.shell__topbar[_ngcontent-%COMP%]{gap:1rem;padding:.5rem 1rem}.shell__tag[_ngcontent-%COMP%]{max-width:26rem}.shell__nav[_ngcontent-%COMP%] a[_ngcontent-%COMP%]{padding:.4rem .7rem;font-size:.85rem}}.viewport-warning[_ngcontent-%COMP%]{display:none}@media(max-width:767px){.viewport-warning[_ngcontent-%COMP%]{position:fixed;inset:0;z-index:100000;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:var(--sm-bg-content)}.viewport-warning__card[_ngcontent-%COMP%]{display:flex;flex-direction:column;align-items:center;text-align:center;gap:.85rem;max-width:22rem}.viewport-warning__icon[_ngcontent-%COMP%]{font-size:3rem;color:var(--p-primary-color);margin-bottom:.25rem}.viewport-warning__title[_ngcontent-%COMP%]{margin:0;font-size:1.35rem;font-weight:700;color:var(--p-text-color);line-height:1.25}.viewport-warning__subtitle[_ngcontent-%COMP%]{margin:0;font-size:1rem;font-weight:500;color:var(--p-primary-color);line-height:1.35}.viewport-warning__body[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);line-height:1.5;font-size:.9rem}.shell[_ngcontent-%COMP%]{display:none}}'],changeDetection:0})}return t})();We(Yt,zt).catch(t=>console.error(t));
|
package/package.json
CHANGED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{a as tt,b as nt,c as it,d as ot,e as pe,f as me,g as Te,h as Oe,i as at}from"./chunk-FYATUDAH.js";import{a as dt,c as gt,d as k,e as pt}from"./chunk-NC3HOVDG.js";import{c as H,d as W,j as ct,k as Ie}from"./chunk-IYC5ZW4L.js";import"./chunk-DLYJHLJX.js";import{a as rt,b as st}from"./chunk-UTRZTB6V.js";import{b as Ee,c as Me}from"./chunk-FC22ZJQZ.js";import{a as ue,b as he,c as lt}from"./chunk-JZ2YF7EL.js";import{a as Xe,b as Ye,c as Je,d as Ze,u as Qe,v as et}from"./chunk-276RLZR4.js";import{B as Se,C as Pe,c as le,j as qe,q as Ce,s as ce,t as de,u as ge}from"./chunk-LPDD2DHE.js";import"./chunk-34ZZDYNQ.js";import"./chunk-4SG4352Z.js";import{$ as xe,$b as c,Ab as x,Bb as y,Cb as se,Ga as He,Ha as ie,Ib as A,Ja as r,Jb as te,K as Ke,Kb as w,Mb as d,P as S,U as Ue,V as M,W as T,Xb as ke,Yb as X,Za as G,ac as p,bc as m,cb as Q,cc as N,ga as _,ja as V,kc as we,nb as b,qb as u,rb as h,sb as ye,tb as ee,tc as ae,ub as I,vb as j,wb as v,wc as f,xb as l,xc as We,yb as a,yc as U,zb as E}from"./chunk-BJ6X6WBO.js";import{a as B,b as J}from"./chunk-WCABR6TI.js";function nn(t,o){if(t&1&&(x(0,"p",6),c(1),y()),t&2){let e=d();r(),N(" ",e.texts.aboutErrorPrefix," ",e.loadError()," ")}}var mt=(()=>{class t{dataSource=S(H);updateCheck=S(gt);theme=S(Ie);visible=U.required();texts=k;health=_(null);loadError=_(null);markSrc=f(()=>this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");cliVersion=f(()=>this.updateCheck.current()??this.health()?.implVersion??this.texts.aboutUnknown);specVersion=f(()=>this.health()?.specVersion??this.texts.aboutLoading);schemaVersion=f(()=>this.health()?.schemaVersion??this.texts.aboutLoading);cwd=f(()=>this.health()?.cwd??this.texts.aboutLoading);dbDisplay=f(()=>{let e=this.health();return e?this.texts.aboutDbValue(e.db,on(e.dbPath,e.cwd)):this.texts.aboutLoading});constructor(){V(()=>{this.visible()&&this.health()===null&&this.load()})}async load(){this.loadError.set(null);try{let e=await this.dataSource.health();this.health.set(e)}catch(e){let n=e instanceof W||e instanceof Error?e.message:String(e);this.loadError.set(n)}}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=G({type:t,selectors:[["sm-settings-about"]],inputs:{visible:[1,"visible"]},decls:57,vars:25,consts:[["aria-labelledby","settings-about-heading","data-testid","settings-about",1,"settings-about"],[1,"settings-about__header"],["alt","","aria-hidden","true","data-testid","settings-about-logo",1,"settings-about__logo",3,"src"],[1,"settings-about__heading-text"],["id","settings-about-heading",1,"settings-about__title"],[1,"settings-about__intro"],["data-testid","settings-about-error",1,"settings-about__error"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-star",1,"settings-about__star",3,"href"],["aria-hidden","true",1,"fa-solid","fa-star","settings-about__star-icon"],[1,"settings-about__star-text"],[1,"settings-about__star-heading"],[1,"settings-about__star-body"],[1,"settings-about__star-cta"],["aria-hidden","true",1,"fa-solid","fa-star"],[1,"settings-about__list"],[1,"settings-about__row"],[1,"settings-about__label"],[1,"settings-about__value"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-website",1,"settings-about__link",3,"href"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-github",1,"settings-about__link",3,"href"],["data-testid","settings-about-cli",1,"settings-about__value"],["data-testid","settings-about-spec",1,"settings-about__value"],["data-testid","settings-about-schema",1,"settings-about__value"],["data-testid","settings-about-cwd",1,"settings-about__value"],["data-testid","settings-about-db",1,"settings-about__value"]],template:function(n,i){n&1&&(x(0,"section",0)(1,"header",1),se(2,"img",2),x(3,"div",3)(4,"h2",4),c(5),y(),x(6,"p",5),c(7),y()()(),u(8,nn,2,2,"p",6),x(9,"a",7),se(10,"i",8),x(11,"span",9)(12,"span",10),c(13),y(),x(14,"span",11),c(15),y()(),x(16,"span",12),se(17,"i",13),c(18),y()(),x(19,"dl",14)(20,"div",15)(21,"dt",16),c(22),y(),x(23,"dd",17)(24,"a",18),c(25),y()()(),x(26,"div",15)(27,"dt",16),c(28),y(),x(29,"dd",17)(30,"a",19),c(31),y()()(),x(32,"div",15)(33,"dt",16),c(34),y(),x(35,"dd",20),c(36),y()(),x(37,"div",15)(38,"dt",16),c(39),y(),x(40,"dd",21),c(41),y()(),x(42,"div",15)(43,"dt",16),c(44),y(),x(45,"dd",22),c(46),y()(),x(47,"div",15)(48,"dt",16),c(49),y(),x(50,"dd",23),c(51),y()(),x(52,"div",15)(53,"dt",16),c(54),y(),x(55,"dd",24),c(56),y()()()()),n&2&&(r(2),te("src",i.markSrc(),ie),r(3),m(" ",i.texts.aboutHeading," "),r(2),p(i.texts.aboutIntro),r(),h(i.loadError()?8:-1),r(),te("href",i.texts.aboutGithubUrl,ie),b("aria-label",i.texts.aboutStarA11y),r(4),p(i.texts.aboutStarHeading),r(2),p(i.texts.aboutStarBody),r(3),m(" ",i.texts.aboutStarCta," "),r(4),p(i.texts.aboutWebsiteLabel),r(2),te("href",i.texts.aboutWebsiteUrl,ie),r(),p(i.texts.aboutWebsiteUrl),r(3),p(i.texts.aboutGithubLabel),r(2),te("href",i.texts.aboutGithubUrl,ie),r(),p(i.texts.aboutGithubUrl),r(3),p(i.texts.aboutCliLabel),r(2),m(" ",i.cliVersion()," "),r(3),p(i.texts.aboutSpecLabel),r(2),m(" ",i.specVersion()," "),r(3),p(i.texts.aboutSchemaLabel),r(2),m(" ",i.schemaVersion()," "),r(3),p(i.texts.aboutFolderLabel),r(2),m(" ",i.cwd()," "),r(3),p(i.texts.aboutDbLabel),r(2),m(" ",i.dbDisplay()," "))},styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-about[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem}.settings-about__header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem}.settings-about__logo[_ngcontent-%COMP%]{width:64px;height:64px;flex-shrink:0}.settings-about__heading-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;min-width:0}.settings-about__title[_ngcontent-%COMP%]{font-size:1.15rem;font-weight:600;margin:0}.settings-about__intro[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);font-size:.875rem}.settings-about__error[_ngcontent-%COMP%]{margin:0;padding:.5rem .75rem;border-radius:var(--p-border-radius);background:var(--p-message-error-background);color:var(--p-message-error-color);font-size:.875rem}.settings-about__list[_ngcontent-%COMP%]{margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.settings-about__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:180px 1fr;align-items:baseline;gap:.75rem;padding:.5rem .75rem;border-radius:var(--p-border-radius)}.settings-about__row[_ngcontent-%COMP%]:nth-child(odd){background:var(--p-content-hover-background)}.settings-about__label[_ngcontent-%COMP%]{margin:0;font-size:.875rem;color:var(--p-text-muted-color)}.settings-about__value[_ngcontent-%COMP%]{margin:0;font-family:var(--sm-font-mono);font-size:.875rem;word-break:break-all}.settings-about__link[_ngcontent-%COMP%]{color:var(--p-primary-color);text-decoration:none}.settings-about__link[_ngcontent-%COMP%]:hover, .settings-about__link[_ngcontent-%COMP%]:focus-visible{text-decoration:underline}.settings-about__star[_ngcontent-%COMP%]{--star-accent: #f4b400;display:flex;align-items:center;gap:.875rem;padding:.875rem 1rem;border-radius:var(--p-border-radius);border:1px solid color-mix(in oklab,var(--star-accent) 45%,transparent);background:color-mix(in oklab,var(--star-accent) 12%,transparent);color:var(--p-text-color);text-decoration:none;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .15s ease}.settings-about__star[_ngcontent-%COMP%]:hover, .settings-about__star[_ngcontent-%COMP%]:focus-visible{background:color-mix(in oklab,var(--star-accent) 22%,transparent);border-color:color-mix(in oklab,var(--star-accent) 70%,transparent);transform:translateY(-1px);outline:none}.app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--star-accent) 18%,transparent);border-color:color-mix(in oklab,var(--star-accent) 55%,transparent)}.app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:hover, .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:hover, .app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:focus-visible, .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:focus-visible{background:color-mix(in oklab,var(--star-accent) 30%,transparent);border-color:var(--star-accent)}.settings-about__star-icon[_ngcontent-%COMP%]{font-size:1.5rem;color:var(--star-accent);flex-shrink:0}.settings-about__star-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.125rem;flex:1;min-width:0}.settings-about__star-heading[_ngcontent-%COMP%]{font-weight:600;font-size:.95rem}.settings-about__star-body[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--p-text-muted-color);line-height:1.4}.settings-about__star-cta[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .75rem;border-radius:var(--sm-radius-pill);background:var(--star-accent);color:#1a1a1a;font-weight:600;font-size:.8125rem;white-space:nowrap;flex-shrink:0}.settings-about__star[_ngcontent-%COMP%]:hover .settings-about__star-cta[_ngcontent-%COMP%], .settings-about__star[_ngcontent-%COMP%]:focus-visible .settings-about__star-cta[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--star-accent) 88%,white)}"],changeDetection:0})}return t})();function on(t,o){if(!t||!o)return t;let e=o.replace(/[/\\]+$/,"");return t.startsWith(e)?t.slice(e.length).replace(/^[/\\]+/,""):t}var _e=(()=>{class t{dataSource=S(H);scanTrigger=S(pt);owners=_(new Set);applyingSig=_(!1);applying=this.applyingSig.asReadonly();applyErrorSig=_(null);applyError=this.applyErrorSig.asReadonly();dirtyCount=f(()=>{let e=0;for(let n of this.owners())e+=n.dirtyIds().size;return e});restartRecommended=f(()=>{for(let e of this.owners())if(e.restartRecommended?.()===!0)return!0;return!1});register(e){if(this.owners().has(e))return;let n=new Set(this.owners());n.add(e),this.owners.set(n)}deregister(e){if(!this.owners().has(e))return;let n=new Set(this.owners());n.delete(e),this.owners.set(n)}async applyChanges(){if(this.applyingSig())return{ok:!1};let e=this.collectAllChanges();if(e.length===0)return{ok:!1};this.applyingSig.set(!0),this.applyErrorSig.set(null);let n=null;try{n=await this.dataSource.applyPluginChanges(e)}catch(i){return this.applyErrorSig.set(rn(i)),this.applyingSig.set(!1),{ok:!1}}this.applyingSig.set(!1);for(let i of this.owners())i.reseed(n.items);return this.scanTrigger.run(),{ok:!0}}discardChanges(){for(let e of this.owners())e.discardChanges();this.applyErrorSig.set(null)}collectAllChanges(){let e=[];for(let n of this.owners())e.push(...n.collectChanges());return e}static \u0275fac=function(n){return new(n||t)};static \u0275prov=Ke({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();function rn(t){return t instanceof W||t instanceof Error?t.message:String(t)}var ut={schemaVersion:1,entries:[{version:"0.62.0",date:"2026-06-23",kind:"user-facing",highlights:[{body:"The files rail again flags out-of-date nodes with the clock icon, so you can see at a glance which files have drifted since their last review.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Faster live updates.** Saving a file while `sm serve` or `sm watch` is running now refreshes the map almost instantly, because only the file you changed is re-read instead of the whole project being re-scanned on every save.",packages:["@skill-map/cli"]},{body:"Large repos now scan and validate references across the whole tree; check folders (with per-folder issue counts) to choose what the map shows. Map palettes count what is shown; a Reset filters button clears it all; the refresh button spins while any scan runs.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Scanning `.md` files that contain HTML no longer creates phantom links or false broken-reference warnings from links that were commented out or tucked inside HTML attributes.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.61.5",date:"2026-06-21",kind:"user-facing",highlights:[{body:`The inspector now shows a "TAGS:" label on the tag row, so nodes with no tags read clearly instead of showing a lone edit pencil. The interactive tutorial's daily-loop part also got several narration and flow improvements.`,packages:["@skill-map/cli"]}]},{version:"0.61.4",date:"2026-06-21",kind:"user-facing",highlights:[{body:'Running `sm tutorial` now sets up the tutorial for Claude. Other assistants (Codex, Antigravity, Open Skills) show as "coming soon" in the prompt and cannot be selected yet.',packages:["@skill-map/cli"]}]},{version:"0.61.3",date:"2026-06-21",kind:"user-facing",highlights:[{body:'Only the Claude provider is selectable for now. Codex, Antigravity and Open Skills appear greyed out as "coming soon" in the provider lens, and projects auto-detect Claude without a lens prompt.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.61.2",date:"2026-06-21",kind:"user-facing",highlights:[{body:'The interactive tutorial now focuses on Claude only. Other assistants (Codex, Antigravity, agent-skills) show as "coming soon" instead of being offered as setup options.',packages:["@skill-map/cli"]}]},{version:"0.61.1",date:"2026-06-19",kind:"internal",highlights:[]},{version:"0.61.0",date:"2026-06-18",kind:"user-facing",highlights:[{body:"`sm version` no longer shows a separate `kernel` line, it always matched `sm` exactly. The matrix now lists sm, spec, runtime, and db-schema.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.60.4",date:"2026-06-18",kind:"internal",highlights:[]},{version:"0.60.3",date:"2026-06-18",kind:"user-facing",highlights:[{body:"Typing in the workspace search now filters the map too, not just the files list, so a query focuses the whole workspace. Want the map to keep its full layout? Turn off the search-to-map toggle next to the search box.",packages:["@skill-map/cli"]}]},{version:"0.60.2",date:"2026-06-17",kind:"internal",highlights:[]},{version:"0.60.1",date:"2026-06-17",kind:"user-facing",highlights:[{body:"Clicking a tag on a card now filters the map without jumping the view around, it stays where you are. And the Re-arrange and Fit buttons glide the map into place instead of snapping, so it is easier to follow where things moved.",packages:["@skill-map/cli"]}]},{version:"0.60.0",date:"2026-06-17",kind:"user-facing",highlights:[{body:"Shared projects can now turn off sidecar writers: a new Project setting stops actions from creating or editing the `.sm` files next to your notes. It is saved in the committed settings.json so it applies to the whole team and cannot be overridden locally.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm check --analyzers core/<id>` now matches issues, not only the bare `<id>` form.",packages:["@skill-map/cli"]},{body:"Edit a node's tags right where they are shown: click the pencil in the inspector's tag row to add or remove them inline, with one-click chips for tags already used in your graph (you can still type new ones). The separate Edit tags button is gone.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Editing a node's tags now drops blank and duplicate entries and trims whitespace, instead of saving them as-is.",packages:["@skill-map/cli"]},{body:"The experimental / deprecated badge on a node's card now shows again.",packages:["@skill-map/cli"]}]},{version:"0.59.0",date:"2026-06-16",kind:"user-facing",highlights:[{body:'The Bump button and the sidecar drift ("stale") finding are off by default now. Staleness still shows on the node\'s status; re-enable with `sm plugins enable core/node-bump core/annotation-stale` or the Settings toggles.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.58.0",date:"2026-06-16",kind:"user-facing",highlights:[{body:"The Set stability button no longer shows when its action is turned off (it used to leave a dead button), and experimental files no longer add an info row to Findings; the experimental badge still shows on the card.",packages:["@skill-map/cli"]},{body:'The Supersede inspector button, the "superseded by" banner, and supersede links on the map are gone. The `supersedes` and `supersededBy` keys in `.sm` sidecars are no longer recognized, remove them from any sidecar that still declares them.',packages:["@skill-map/cli","@skill-map/spec","@skill-map/web"]},{body:"You can now set stability, edit tags, or bump any node straight from the inspector, even ones without a `.sm` yet. The action creates the sidecar for you, with the usual write consent.",packages:["@skill-map/cli"]}]},{version:"0.57.0",date:"2026-06-15",kind:"user-facing",highlights:[{body:"**Finding messages now read the same way everywhere.** Each one shows the offending subject on its own line, then `L<line>: what; why`, with the fix hint shown separately instead of appended. Output in `sm check` and the Inspector is more consistent and easier to scan.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'**Finding messages read more consistently.** Reserved-name findings no longer say "Name collision" (now "Reserved name"), and orphan-job-file findings name the file they point at, like the other findings.',packages:["@skill-map/cli"]},{body:"**Link confidence now starts at 1.0 and each rule subtracts a fixed amount.** A clean link reads 1.0, a reserved one 0.1, a broken one 0.5. Turning a rule off leaves its links at full confidence. The internal score-resolution scorer was retired.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Broken-reference findings now suggest how to fix them.** Each one points at correcting the path or name, removing the link, or adding the file's folder under Folders for link validation in Settings, so links to files outside the project still validate.",packages:["@skill-map/cli"]},{body:'**Redundant-link findings read clearer.** The message no longer assumes the links are "references" (they may be a mix of kinds), and the fix hint now reads as optional: consolidate the links, or keep the overlap on purpose.',packages:["@skill-map/cli"]},{body:"The orphan-job-file check is gone from scans for now; it will come back with a smarter, probabilistic model. You can still remove leftover job files with `sm job prune --orphan-files`.",packages:["@skill-map/cli"]},{body:"**The `link-conflict` rule is now `link-kind-conflict`.** If you enabled or disabled it via `sm plugins`, re-apply the toggle under the new id; the old id is no longer recognized. The warning it raises is unchanged.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**`signal-collision` is now `extractor-collision`** and reads clearer: it points at the body line, names the two extractors that overlapped, and suggests how to resolve it (rephrase one token, accept the winner, or flip the tiebreak).",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**`trigger-collision` is now `name-collision`** and fires only when two files declare the same resolvable name (a command and an agent both named `deploy`, say), across any name-resolvable kind. Plain notes, addressed by path, never collide.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"A file with invalid frontmatter now shows one warning instead of two. The schema check stops repeating what the per-kind validator already reported, so the issue list and the per-node warning count read cleaner.",packages:["@skill-map/cli"]},{body:"**Plugin authors can ship a `score`-phase analyzer that adds or subtracts link confidence.** Declare `phase: 'score'` and call `ctx.adjustConfidence(link, op)` to compose on top of the kernel's own scoring; every adjustment is recorded in `scan_link_scores` for auditing.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**The live view stops hammering the server on a dropped connection.** Idle tabs stay connected instead of silently dropping, and a connection that cannot recover now shows a clear 'connection lost' notice instead of retrying scans forever in the background.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**No more request storm when the dev server restarts.** The UI waits for the connection to stabilise before re-fetching, instead of hammering the API every time a restarting server flaps the socket.",packages:["@skill-map/cli"]}]},{version:"0.56.0",date:"2026-06-14",kind:"user-facing",highlights:[{body:"**Skills that shadow a built-in slash command are now flagged.** A skill named like a built-in (e.g. `/help`) is reported as a name collision, the same as a command was, and the collision warnings are reworded to read more plainly.",packages:["@skill-map/cli"]},{body:"Plugin extensions can expose options: edit them per plugin in Settings (one global Apply) or via `sm plugins config <plugin>/<ext>` (saved in `.skill-map/settings.json`; secrets stay local, never committed). Run `sm scan` to apply. New decimal `number` option type.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Fewer false broken-reference errors.** A `@name` or `/name` that points at a same-named file no longer reports as broken, even when that file has no `name:` in its frontmatter; the reference resolves like the runtime follows it.",packages:["@skill-map/cli"]}]},{version:"0.55.0",date:"2026-06-13",kind:"user-facing",highlights:[{body:"No change to how the inspector behaves: the Supersede, Edit tags, and Bump buttons look and work exactly as before, they are just now produced by the action they trigger rather than a separate analyzer.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Backticked filenames now become links even without a folder: writing `` `algo4.md` `` inside code formatting (not just `` `docs/algo4.md` ``) draws an arrow to that file in the graph, matching how an agent actually follows the reference.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Broken links in the graph now appear fainter than working ones: a markdown link, `@file`, or `/command` pointing at something that does not exist renders at low opacity, so dangling references stand out at a glance instead of looking like solid edges.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Deprecated plugin extensions now start **disabled**, like experimental ones: they show an off toggle (with the deprecated badge) in Settings and `sm plugins list`, and don't run until you enable them. Enabling one keeps it working while you migrate off it.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Experimental plugin extensions now start **disabled**: an off toggle (with the experimental badge) in Settings and `sm plugins list`, not running until you enable them. The MCP tools extractor and the Supersede button are experimental, so both are off until you turn them on.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Extractor descriptions in `sm plugins list` and Settings now include a usage example.",packages:["@skill-map/cli"]},{body:"The files table has a new **Modified** column showing when each file was last edited (for example `2026-06-13`). Click the header to sort newest or oldest first, and hover a cell to see the exact date and time.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'The supersession info finding ("this node is superseded by X") no longer shows by default: `core/node-superseded` is now experimental, so the whole supersession family (declare button + this finding) is off until you enable it in Settings or with `sm plugins enable`.',packages:["@skill-map/cli"]},{body:"**Plugin commands split by altitude.** `sm plugins list <id>` now shows a whole plugin's extensions (kinds, versions, status); `sm plugins show` is for a single `<plugin>/<ext>` extension. The plain `sm plugins list` stays a clean index, one row per plugin.",packages:["@skill-map/cli","@skill-map/spec"]},{body:`The interactive tutorial's second half is now a single "daily loop": you add a page with your agent, improve it, and publish, running the harness for real. The portfolio it builds ships with a clean, personalized site you can serve and deploy.`,packages:["@skill-map/cli"]}]},{version:"0.54.0",date:"2026-06-12",kind:"user-facing",highlights:[{body:"Findings are shorter and clearer: the file or trigger involved leads on its own line, duplicates collapse to `Duplicate reference (2): \\`refs/x.md\\` (124, 145)`, broken references name the line they sit on, and messages no longer repeat the node's own path.",packages:["@skill-map/cli"]},{body:"**Plugin maturity at a glance.** Extensions can now carry an experimental, beta, or deprecated badge next to their name in the Settings plugins panel and in `sm plugins list`, so you can tell which parts of a plugin are still settling before relying on them.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"The map's palette adds a toggle (marked with a backtick glyph) that shows or hides a separate kind of reference arrow, each with its own colour per theme, so those links no longer mix in with your regular link arrows.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Linking to the same file twice from one node is now an info note instead of a warning, so the warning count on a card reflects only issues worth fixing.",packages:["@skill-map/cli"]},{body:"Searching no longer rips nodes out of the map: by default the query narrows only the files list while the map keeps its layout. A new toggle next to the search box brings back the old filter-everything behavior, and your choice is remembered.",packages:["@skill-map/cli"]}]},{version:"0.53.6",date:"2026-06-09",kind:"user-facing",highlights:[{body:"`sm --help` now opens with a pointer to `sm tutorial`, the guided hands-on walkthrough. The tutorial reads cleaner too: the maintain part is renamed, chapters are numbered (5.1, 5.2\u2026), and the annotations lesson no longer repeats across parts.",packages:["@skill-map/cli"]}]},{version:"0.53.5",date:"2026-06-09",kind:"internal",highlights:[]},{version:"0.53.4",date:"2026-06-08",kind:"user-facing",highlights:[{body:"The built-in tutorial's CLI deep-dive now rebuilds its own demo fixture when you enter it, so it works correctly even after you have run the project campaign, and it always appears in the menu instead of staying hidden until the prologue is done.",packages:["@skill-map/cli"]},{body:"The files panel's collapse button is now a chevron instead of an `\u2715`, so it clearly hides the panel rather than clearing the search. The built-in tutorial fixes a stray self-link in its command examples and reminds you to open a third terminal during the maintenance part.",packages:["@skill-map/cli"]}]},{version:"0.53.3",date:"2026-06-08",kind:"user-facing",highlights:[{body:`Three new Neon graph themes (red/green/blue) with a glow effect in the map's theme picker. Toolbar tooltips are shorter and "edge style" is now "connector style". The built-in tutorial adds a third part and a reworked ending.`,packages:["@skill-map/cli"]}]},{version:"0.53.2",date:"2026-06-08",kind:"user-facing",highlights:[{body:'Opening a project with one node no longer zooms in too far: the map fits content at natural size (you can still wheel-zoom in). The "Re-arrange layout" tooltip is shorter.',packages:["@skill-map/cli"]}]},{version:"0.53.1",date:"2026-06-08",kind:"user-facing",highlights:[{body:'When you upgrade and re-scan, the cache-rebuild prompt is short and reassuring, and once you confirm it no longer prints a redundant "rebuilt" notice. Automatic rebuilds (for example with `--yes`) still show a one-line confirmation.',packages:["@skill-map/cli"]},{body:"New maps now lay out left-to-right by default (with the Balanced algorithm), so the skill dependency chain reads along the natural left-to-right axis. You can switch back to top-to-bottom from the graph toolbar or Settings.",packages:["@skill-map/cli"]},{body:"The interactive tutorial now opens on a numbered menu to pick where to start, and walks each step with a single confirmation instead of several. Its references to the live UI match what is on screen.",packages:["@skill-map/cli"]}]},{version:"0.53.0",date:"2026-06-07",kind:"user-facing",highlights:[{body:"The inspector now offers Supersede, Set stability and Edit tags buttons; each opens a small form pre-filled with the node's current value.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'Writing a `.sm` sidecar now asks for consent every time, with an "always allow" checkbox that remembers your choice for the project.',packages:["@skill-map/cli","@skill-map/spec"]},{body:"In the inspector, the extra panels and buttons a plugin adds now group into one collapsed section per plugin, and every action button a plugin contributes is shown.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm plugins doctor` now reports plugin display errors from your last scan (and exits non-zero if any), and the Settings plugins panel shows a per-plugin warning badge, so when a plugin's chips fail to appear you can see why.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Clearer plugin errors: a misconfigured plugin now gives a short message that spells out the plugin and all its extensions were skipped, and the warning no longer appears twice when the server starts.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"The interactive tutorial (`sm tutorial`) now walks a full campaign: you build a real static portfolio site and the `.claude/` harness that maintains it, from `sm init` to the live site, picking parts from the in-skill menu.",packages:["@skill-map/cli"]},{body:"In the interactive tutorial you can now jump straight into any part of the portfolio campaign from the menu (say the maintenance or MCP part). If you skipped the earlier parts, the tutorial sets the project up for you so you can start right there.",packages:["@skill-map/cli"]},{body:"`sm tutorial master` is gone. Run `sm tutorial`: the advanced parts (plugins, settings, view-slots) and the CLI in depth are now chapters you pick from a menu inside the tutorial, after the live-UI prologue.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.52.0",date:"2026-06-05",kind:"user-facing",highlights:[{body:"Disabling a provider plugin now removes it as a choice in **Settings \u2192 Project \u2192 Active provider**. The provider stays listed but greyed out and labelled `(disabled)`, so you can no longer switch the lens to a provider whose extractors would not run.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Bumping a node now records **who** bumped it: the audit `by` fields show your Git author name (`git config user.name`) instead of `cli` / `ui`, when the project is a Git repo. It falls back to `cli` / `ui` outside a Git repo or when no `user.name` is configured.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'**Inspector polish.** The body now renders rich markdown with code syntax highlighting and updates live after a re-scan. Node tags moved to a clickable row in the header, and "isolate" on the map now shows a node plus its direct neighbors.',packages:["@skill-map/cli"]},{body:"`sm check` now **fails** (non-zero exit) when a `.sm` sidecar is malformed or breaks schema validation. These were previously reported as warnings and did not affect the exit code. Fix or remove the offending sidecar to make the check pass.",packages:["@skill-map/cli"]}]},{version:"0.51.0",date:"2026-06-04",kind:"user-facing",highlights:[{body:"`sm serve` now refuses a non-loopback `--host` (for example `0.0.0.0`): the local server has no auth and is loopback-only, so bind it to `127.0.0.1` or `::1`. Multi-host serve reopens after v0.6.0.",packages:["@skill-map/cli"]}]},{version:"0.50.1",date:"2026-06-04",kind:"user-facing",highlights:[{body:"The redundant-reference finding now reads with shorter, more direct wording so the duplicated target and where it appears are easier to scan at a glance.",packages:["@skill-map/cli"]},{body:`The map palettes now count only the nodes you've curated visible. Selecting a hidden file no longer jumps the camera to empty space, and "Re-arrange layout" only asks to confirm when you have moved nodes yourself.`,packages:["@skill-map/cli"]}]},{version:"0.50.0",date:"2026-06-02",kind:"user-facing",highlights:[{body:`The Files and Map tabs are gone: skill-map opens on one screen, file tree left, graph right. Tick files or folders (or the 0/1/2 depth buttons) to pick what the map shows; the tree's map icon isolates a node's whole chain. "Re-arrange layout" tidies just what's visible.`,packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.49.0",date:"2026-06-02",kind:"user-facing",highlights:[{body:"**New workspace view**: the file list, graph, and inspector now share one screen. Drag the divider to resize the file rail, click a file to focus its node on the map, and use the tree checkboxes to choose which nodes the map shows (`Show all` clears the selection).",packages:["@skill-map/cli"]}]},{version:"0.48.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"**Card footer icon order restored.** The status icons in the bottom-right of each card are back to their previous order: lifecycle/stability first, then the stale indicator, then warnings and errors on the far right.",packages:["@skill-map/cli"]},{body:"`sm plugins create` now takes the extension kind as a required first argument: `sm plugins create <kind> <plugin-id>` (kinds: provider, extractor, analyzer, action, formatter, hook). Previously it only scaffolded extractors.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"After `sm tutorial`, start the tutorial by typing `run the tutorial` (or `ejecuta el tutorial`), matching the website.",packages:["@skill-map/cli"]}]},{version:"0.47.1",date:"2026-05-31",kind:"internal",highlights:[]},{version:"0.47.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"skill-map now notices when your local DB schema is out of date (not just an older version): `sm scan` and `sm serve` offer to rebuild the cache, and read commands warn instead of failing with a confusing database error.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Settings \u2192 Plugins now has a unified filter bar (All, then Built-in / Project, then the kinds), so you can quickly isolate your project's own plugins and extensions from the built-ins.",packages:["@skill-map/cli"]},{body:"**Pick your tokenizer.** `tokenizer` in settings.json now selects the encoder for token counts: `cl100k_base` (default, GPT-4) or `o200k_base` (GPT-4o). Any other value is ignored with a warning. Changing it recomputes counts on the next scan.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'When the dev server stops, the UI now shows a "connection lost" banner with a Reconnect button instead of failing silently, and it refreshes automatically once the connection is back.',packages:["@skill-map/cli"]}]},{version:"0.46.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"`sm scan` no longer glues the `Auto-detected activeProvider` notice onto the results line. The auto-detect message now prints on its own line, right above the scan summary.",packages:["@skill-map/cli"]},{body:"`sm plugins --help` (and `db`, `config`, `job`, and the other command groups) now print a tidy overview with a one-line description and a list of their subcommands, matching the look of `sm scan --help`, instead of a terse internal list.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Config cleanup.** Several settings.json keys that never did anything (`i18n`, `providers`, `history`, `autoMigrate`, `scan.followSymlinks`, per-plugin `config` / `extensions`) were removed. If still present they are now ignored and reported with a warning on load.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'`sm plugins list` / `show` and the Settings \u2192 Plugins UI now consistently say "plugin" instead of "bundle". The only place "bundle" remains is the name for toggling a whole plugin (all its extensions) at once.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.45.1",date:"2026-05-30",kind:"internal",highlights:[]},{version:"0.45.0",date:"2026-05-30",kind:"user-facing",highlights:[{body:"`sm tutorial` can now target other agents: `--for agent-skills` (open-standard layout, used by Antigravity and OpenAI Codex) or `--for claude` (default). It now requires an empty directory: run it in a fresh folder, or pass `--force` to seed into the current one.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.44.0",date:"2026-05-30",kind:"user-facing",highlights:[{body:"Under the Antigravity lens, `sm scan` now warns when a `.agents/skills` skill shadows a built-in `agy` slash command (e.g. a skill named `goal` collides with `/goal`), so you can rename it before the runtime silently ignores the file.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"skill-map can now report crashes anonymously to help fix bugs, and it is OFF by default. Turn it on or off in Settings, or set `SKILL_MAP_TELEMETRY=0` to force it off. File contents, paths, and your settings are never sent.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"skill-map can now share anonymous usage (which commands and views you use) to guide development, OFF by default. Toggle CLI usage, UI usage, and error reports independently in Settings, or set `SKILL_MAP_TELEMETRY=0` to force all off. Files and paths are never sent.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.43.0",date:"2026-05-29",kind:"user-facing",highlights:[{body:"The skill-map website and in-app links (Settings, About and the demo banner) now point to **skill-map.ai** (previously skill-map.dev). Spec schema URLs are now `https://skill-map.ai/spec/v0/...`.",packages:["@skill-map/cli","@skill-map/spec","@skill-map/web"]},{body:"Claude skills and commands now show their `disallowed-tools` in the inspector. Tags come only from `.sm` sidecars now: the `sm list --tag-source` flag is removed and cards show a single tag style. Agent Skills `license` / `compatibility` / `metadata` fields are recognized.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"After updating skill-map, the next `sm scan` rebuilds the local database when it was created by an older version (your `.sm` sidecar files are never touched). On a terminal it asks first; pass `--yes` to skip the prompt.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.42.0",date:"2026-05-28",kind:"user-facing",highlights:[{body:"The lens picker in **Settings \u2192 Project** now lists exactly the providers installed in your project. The phantom **Gemini** and **Cursor** options are gone, and **OpenAI Codex** / **Antigravity** now show their correct name and colour on node cards.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.41.0",date:"2026-05-27",kind:"user-facing",highlights:[{body:"New `--max-nodes <N>` on `sm scan` / `sm watch` / `sm serve` caps how many files the walker accepts (default 256, bidirectional). Past the limit, a persistent banner links to **Settings \u2192 Project** to trim `.skillmapignore`.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm -version` and `sm -help` now suggest `--version` / `--help` consistently, even from a directory with no skill-map project.",packages:["@skill-map/cli"]}]},{version:"0.40.1",date:"2026-05-26",kind:"user-facing",highlights:[{body:"Update chip copies the install command on click. Settings copy polished across General + Project. Path is now the second column in the list view. Filtered-empty views unified across List + Graph with a Reset button. Matrix theme retints dropdowns and toggle buttons.",packages:["@skill-map/cli"]}]},{version:"0.40.0",date:"2026-05-26",kind:"user-facing",highlights:[{body:"**Changelog tab is now bounded.** The Settings \u2192 Changelog tab shows the most recent 10 releases and links out to the full changelog on GitHub for older entries.",packages:["@skill-map/cli"]},{body:"Plugins no longer have a bundle-level switch; each extension toggles on its own. `sm plugins disable <bundle>` cascades across the bundle's extensions (multi-extension bundles need `--yes`). The kind filter narrows extensions inside matched bundles instead of leaking siblings.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Cleaner Plugins view.** Built-in plugins no longer show a separate version chip on each of their parts in Settings \u2192 Plugins and `sm plugins show` (they all share the CLI version), so the panel reads cleaner. Your own plugins still show their version.",packages:["@skill-map/cli"]},{body:'`sm scan` summary now splits findings per severity (`N errors \xB7 M warnings \xB7 K info`), colored and collapsed when zero. The graph view gains a third palette to filter cards with errors / warnings; the perf-HUD says "links" instead of "edges".',packages:["@skill-map/cli"]},{body:"**List view** is live. Click **List** in the topbar for a sortable, filterable table of every node (Kind, Name, Tags, Path, Tokens, Stability, Stale, Issues). Click a row to inspect on the graph. Graph card chips now share the same icons as the list.",packages:["@skill-map/cli"]},{body:'Graph cards drop the corner badge for routine warnings; count + tooltip stay on the footer chip. Broken refs now escalate `sm scan` to exit 1 (were exit 0). `sm init` prints the "no provider markers" advisory as a two-line yellow `\u26A0` block.',packages:["@skill-map/cli","@skill-map/spec"]},{body:'`sm check --analyzers <id>` now errors with the valid id list when mistyped, instead of silently saying "No issues." `/invoke` and `@mention` links from any markdown body now contribute to the target\'s `IN`. `sm plugins doctor` summary spells out its bundle + extension split.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.39.0",date:"2026-05-25",kind:"user-facing",highlights:[{body:"The check rule `core/field-unknown` is renamed to `core/annotation-field-unknown`. If you reference it by id in `settings.json` or `sm check --analyzers <id>`, update it to the new name.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Several built-in rules were renamed for consistency (for example `core/broken-ref` is now `core/reference-broken`). If you reference them by id in `settings.json` or `sm check --analyzers <id>`, update to the new names.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"When a scan adds or removes nodes, the graph view animates the camera to frame the new layout, refreshes auto positions so nodes never land on top of each other, and keeps your manually-dragged pins where you put them.",packages:["@skill-map/cli"]},{body:"`sm` log lines now lead with a coloured glyph per level (`\u26A0 WARN`, `\u2715 ERROR`, `\u2139 INFO`) so advisories stand out from the rest of the output.",packages:["@skill-map/cli"]},{body:"In Settings, expanding a bundle plugin (claude, antigravity, openai, agent-skills) now shows the correct per-extension state and the toggles persist, the next scan honours them. `sm plugins list` reflects effective state too.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Plugins always list `core` first in the CLI and Settings; the project path stays visible in the topbar (truncated with `\u2026` on the left so the project name is what you see); and the UI reconnects on its own when `sm serve` restarts.",packages:["@skill-map/cli"]},{body:'`sm list` IN counts and the inspector\'s "Linked nodes \u2192 INCOMING" now include every `@mention` and `/invoke`, not just markdown links. `sm plugins doctor` no longer raises a spurious `claude/agent` warning on a clean install.',packages:["@skill-map/cli"]}]},{version:"0.38.0",date:"2026-05-24",kind:"user-facing",highlights:[{body:"`sm <verb> --json` now also suppresses info banners on stderr, keeping both streams clean for piping into `jq`.",packages:["@skill-map/cli"]}]},{version:"0.37.0",date:"2026-05-23",kind:"user-facing",highlights:[{body:"`sm scan` now warns once when provider markers on disk drifted since `activeProvider` was set (e.g. you added `.codex/` after picking the `claude` lens). Run `sm config set activeProvider <id>` to switch the lens, or ignore the warn and keep going, it never blocks the scan.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Clearer CLI errors.** Errors from `sm serve`, `bump`, `db`, `plugins`, `refresh`, `list`, `watch`, `graph`, `hooks`, and `sidecar` now print a `\u2715` headline plus a dim hint on the next line. Fixes a `sm refresh` persist-failure that rendered `{{glyph}}` literally.",packages:["@skill-map/cli"]},{body:"`sm` now detects when the local `.skill-map/` DB was written by an incompatible CLI version: newer minor or different major refuses to open with a clear hint; older same-major prints a one-shot warning and continues. Defensive parse errors include the same hint.",packages:["@skill-map/cli"]},{body:'`sm init --force` now also resets the DB (was overwriting only the config files). Solves the "Failed to read scan rows" crash on the first auto-scan when re-initialising a project that already had a DB from an older CLI version.',packages:["@skill-map/cli"]},{body:"**Two scan bugs fixed.** Resolved `/slash` and `@mention` links now count as fully resolved instead of weaker than they should be, and a `[label](path)` shown inside backticks or a code block is no longer wrongly flagged as a broken reference.",packages:["@skill-map/cli"]},{body:"Cross-provider files (e.g. a `.codex/agents/*.toml` while the lens is `claude`) are no longer claimed by the foreign provider. They surface as plain markdown / unclassified instead, matching how the agent itself would see them at runtime.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Card chips for incoming / outgoing links no longer count self-loops, so a node that links back to itself stops showing inflated 1 in / 1 out. The `core/self-loop` analyzer still surfaces the self-reference as a warning, only the misleading count goes away.",packages:["@skill-map/cli"]},{body:"**CLI + inspector polish.** `sm init` now prompts for the active lens when markers compete; `sm config set activeProvider` rejects unknown ids upfront; error blocks across the CLI gain a `\u2715` glyph + hint; the inspector hides self-loops and paints kinds in their canonical colour.",packages:["@skill-map/cli"]},{body:'**Inspector overhaul.** Links show numeric confidence, a Findings list, per-row issue chips, and per-site "Occurs at" lines. New "External references" section. Self-loops hidden by default. Two new analyzers flag redundant multi-form references and self-loops.',packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm scan` now warns when two kinds of link are detected on the same piece of text. The map keeps one, and the issue panel explains which detection was dropped and why, so an overlapping link no longer disappears silently.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.36.0",date:"2026-05-22",kind:"user-facing",highlights:[{body:"**Gemini CLI support retired.** Antigravity CLI projects (Google's May 2026 replacement) scan via the open-standard `.agents/skills/` paths under the existing `agent-skills` lens. Run `sm config set activeProvider antigravity` to flag a project as Antigravity-flavoured.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Files whose name shadows a built-in are flagged.** A file like `.claude/commands/help.md` now emits a `warn` (Claude's runtime ignores it for its own `/help`), and incoming `/help` edges resolve to it at confidence `0.1` instead of `1.0`.",packages:["@skill-map/cli","@skill-map/spec"]}]}]};var ht=ut;var an=(t,o)=>o.version;function ln(t,o){if(t&1&&(x(0,"p",3),c(1),y()),t&2){let e=d();r(),m(" ",e.texts.changelogEmpty," ")}}function cn(t,o){if(t&1&&(x(0,"p",12),c(1),y()),t&2){let e=d(3);r(),m(" ",e.texts.changelogInternalRelease," ")}}function dn(t,o){if(t&1&&(x(0,"li",17),c(1),y()),t&2){let e=o.$implicit;r(),p(e)}}function gn(t,o){if(t&1&&(x(0,"ul",16),I(1,dn,2,1,"li",17,ee),y()),t&2){let e=d().$implicit,n=d(4);b("aria-label",n.texts.changelogAffectedPackages),r(),j(e.packages)}}function pn(t,o){if(t&1&&(x(0,"li",14),se(1,"div",15),u(2,gn,3,1,"ul",16),y()),t&2){let e=o.$implicit;r(),te("innerHTML",e.bodyHtml,He),r(),h(e.packages.length?2:-1)}}function mn(t,o){if(t&1&&(x(0,"ul",13),I(1,pn,3,2,"li",14,ye),y()),t&2){let e=d().$implicit;r(),j(e.highlights)}}function un(t,o){if(t&1&&(x(0,"li",8)(1,"header",9)(2,"span",10),c(3),y(),x(4,"span",11),c(5),y()(),u(6,cn,2,1,"p",12)(7,mn,3,0,"ul",13),y()),t&2){let e=o.$implicit;X("settings-changelog__entry--internal",e.kind==="internal"),b("data-testid","settings-changelog-entry-"+e.version),r(3),m("v",e.version),r(2),p(e.date),r(),h(e.kind==="internal"?6:7)}}function hn(t,o){if(t&1&&(x(0,"ol",4),I(1,un,8,6,"li",7,an),y()),t&2){let e=d();r(),j(e.entries())}}var _n=10,_t=(()=>{class t{markdown=S(at);texts=k;entries=_([]);hasEntries=f(()=>this.entries().length>0);ngOnInit(){this.renderAll()}async renderAll(){let e=[],n=ht.entries.slice(0,_n);for(let i of n){let s=[];for(let g of i.highlights)s.push({bodyHtml:await this.markdown.render(g.body),packages:g.packages});e.push({version:i.version,date:this.formatDate(i.date),kind:i.kind,highlights:s})}this.entries.set(e)}formatDate(e){let n=new Date(e+"T00:00:00Z");return Number.isNaN(n.getTime())?e:new Intl.DateTimeFormat("en-GB",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}).format(n)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=G({type:t,selectors:[["sm-settings-changelog"]],decls:11,vars:7,consts:[["data-testid","settings-changelog",1,"settings-changelog"],["id","settings-changelog-heading",1,"settings-changelog__title"],[1,"settings-changelog__intro"],["data-testid","settings-changelog-empty",1,"settings-changelog__empty"],["role","list",1,"settings-changelog__list"],["data-testid","settings-changelog-footer",1,"settings-changelog__footer"],["target","_blank","rel","noopener noreferrer",1,"settings-changelog__footer-link",3,"href"],[1,"settings-changelog__entry",3,"settings-changelog__entry--internal"],[1,"settings-changelog__entry"],[1,"settings-changelog__entry-header"],[1,"settings-changelog__version"],[1,"settings-changelog__date"],[1,"settings-changelog__internal-body"],["role","list",1,"settings-changelog__highlights"],[1,"settings-changelog__highlight"],[1,"settings-changelog__highlight-body",3,"innerHTML"],["role","list",1,"settings-changelog__packages"],[1,"settings-changelog__package"]],template:function(n,i){n&1&&(x(0,"section",0)(1,"h2",1),c(2),y(),x(3,"p",2),c(4),y(),u(5,ln,2,1,"p",3)(6,hn,3,0,"ol",4),x(7,"p",5),c(8),x(9,"a",6),c(10),y()()()),n&2&&(b("aria-labelledby","settings-changelog-heading"),r(2),m(" ",i.texts.changelogHeading," "),r(2),p(i.texts.changelogIntro),r(),h(i.hasEntries()?6:5),r(3),m(" ",i.texts.changelogFooterText," "),r(),te("href",i.texts.changelogFooterUrl,ie),r(),m(" ",i.texts.changelogFooterLinkLabel," "))},styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-changelog__title[_ngcontent-%COMP%]{margin:0 0 .25rem;font-size:1.05rem;font-weight:600;color:var(--p-text-color)}.settings-changelog__intro[_ngcontent-%COMP%]{margin:0 0 1.25rem;font-size:.85rem;color:var(--sm-text-muted);line-height:1.5}.settings-changelog__empty[_ngcontent-%COMP%]{margin:1.5rem 0 0;font-size:.9rem;color:var(--sm-text-muted);font-style:italic}.settings-changelog__list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.25rem}.settings-changelog__entry[_ngcontent-%COMP%]{border-left:2px solid var(--p-primary-color);padding:.25rem 0 .25rem .85rem}.settings-changelog__entry--internal[_ngcontent-%COMP%]{border-left-color:var(--sm-border)}.settings-changelog__entry-header[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:.6rem;margin-bottom:.45rem}.settings-changelog__version[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.95rem;font-weight:600;color:var(--p-text-color)}.settings-changelog__date[_ngcontent-%COMP%]{font-size:.78rem;color:var(--sm-text-muted)}.settings-changelog__internal-body[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--sm-text-muted);font-style:italic}.settings-changelog__highlights[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.7rem}.settings-changelog__highlight[_ngcontent-%COMP%]{font-size:.88rem;line-height:1.5;color:var(--p-text-color)}.settings-changelog__highlight-body[_ngcontent-%COMP%]{margin:0}[_nghost-%COMP%] .settings-changelog__highlight-body p{margin:0}[_nghost-%COMP%] .settings-changelog__highlight-body p+p{margin-top:.45rem}[_nghost-%COMP%] .settings-changelog__highlight-body code{font-family:var(--sm-font-mono);font-size:.82rem;padding:.05rem .3rem;border-radius:var(--sm-radius-sm);background:var(--sm-bg-hover);color:var(--p-text-color)}[_nghost-%COMP%] .settings-changelog__highlight-body a{color:var(--p-primary-color);text-decoration:underline}[_nghost-%COMP%] .settings-changelog__highlight-body strong{font-weight:600}.settings-changelog__packages[_ngcontent-%COMP%]{list-style:none;margin:.4rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.3rem}.settings-changelog__package[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.7rem;padding:.1rem .4rem;border-radius:var(--sm-radius-sm);background:var(--sm-bg-hover);color:var(--sm-text-muted);border:1px solid var(--sm-border);line-height:1.4}.settings-changelog__footer[_ngcontent-%COMP%]{margin:1.75rem 0 0;padding-top:1rem;border-top:1px solid var(--sm-border);font-size:.82rem;color:var(--sm-text-muted);text-align:center}.settings-changelog__footer-link[_ngcontent-%COMP%]{margin-left:.3rem;color:var(--p-primary-color);text-decoration:none;font-weight:500}.settings-changelog__footer-link[_ngcontent-%COMP%]:hover{text-decoration:underline}"],changeDetection:0})}return t})();var fn=(t,o)=>o.key;function bn(t,o){if(t&1&&(l(0,"p-message",3),c(1),a()),t&2){let e=d();v("closable",!1),r(),N(" ",e.texts.general.loadErrorPrefix," ",o," ")}}function vn(t,o){if(t&1&&(l(0,"p-message",4),c(1),a()),t&2){let e=d();v("closable",!1),r(),N(" ",e.texts.general.saveErrorPrefix," ",o," ")}}function xn(t,o){t&1&&(l(0,"div",15),c(1),a()),t&2&&(r(),p(o))}function yn(t,o){if(t&1){let e=A();l(0,"li",6)(1,"div",8)(2,"div",9),c(3),a(),l(4,"div",10),c(5),a(),u(6,xn,2,1,"div",15),a(),l(7,"p-toggleswitch",16),w("ngModelChange",function(i){let s=M(e).$implicit,g=d();return T(g.onToggle(s,i))}),a()()}if(t&2){let e,n=o.$implicit,i=d();b("data-testid","settings-general-row-"+n.key),r(3),p(i.toggleLabel(n.key)),r(2),m(" ",i.toggleDescription(n.key)," "),r(),h((e=i.toggleHint(n.key))?6:-1,e),r(),v("ngModel",i.valueOf(n))("disabled",i.loading()||i.isPending(n.key)||i.preferences()===null),b("data-testid","settings-general-toggle-"+n.key)}}function kn(t,o){if(t&1&&(l(0,"span",17),c(1),a()),t&2){let e=o.$implicit;r(),m(" ",e.label," ")}}var wn=[{key:"updateCheck.enabled",read:t=>t.updateCheck.enabled,patch:t=>({updateCheck:{enabled:t}})},{key:"telemetry",read:t=>t.telemetry.errorsEnabled&&t.telemetry.usageCliEnabled&&t.telemetry.usageUiEnabled,patch:t=>({telemetry:{errorsEnabled:t,usageCliEnabled:t,usageUiEnabled:t}})}],je="none";function Cn(t){return t===null?je:t}function Sn(t){return t===je?null:t}var yt=(()=>{class t{dataSource=S(H);themeService=S(Ie);visible=U.required();texts=k;toggles=wn;extraThemeOptions=[{value:je,label:k.general.extraTheme.options.none.label,description:k.general.extraTheme.options.none.description},...ct.map(e=>({value:e.id,label:e.label,description:e.description}))];extraThemeWire=f(()=>Cn(this.themeService.extraTheme()));loading=_(!1);loadError=_(null);saveError=_(null);preferences=_(null);pending=_(new Set);constructor(){V(()=>{this.visible()&&this.refresh()})}toggleLabel(e){return k.general.toggles[e].label}toggleDescription(e){return k.general.toggles[e].description}toggleHint(e){let n=k.general.toggles[e];return"hint"in n?n.hint:null}valueOf(e){let n=this.preferences();return n?e.read(n):!1}isPending(e){return this.pending().has(e)}onToggle(e,n){this.runToggle(e,n)}onExtraThemeChange(e){this.themeService.setExtraTheme(Sn(e??je))}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let e=await this.dataSource.getPreferences();this.preferences.set(e)}catch(e){this.loadError.set(ft(e)),this.preferences.set(null)}finally{this.loading.set(!1)}}async runToggle(e,n){if(this.pending().has(e.key))return;let i=new Set(this.pending());i.add(e.key),this.pending.set(i),this.saveError.set(null);try{let s=await this.dataSource.setPreferences(e.patch(n));this.preferences.set(s)}catch(s){this.saveError.set(ft(s))}finally{let s=new Set(this.pending());s.delete(e.key),this.pending.set(s)}}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=G({type:t,selectors:[["sm-settings-general"]],inputs:{visible:[1,"visible"]},decls:22,vars:12,consts:[["data-testid","settings-general",1,"settings-general"],["id","settings-general-heading",1,"settings-general__title"],[1,"settings-general__intro"],["severity","error","data-testid","settings-general-load-error",3,"closable"],["severity","error","data-testid","settings-general-save-error",3,"closable"],["role","list",1,"settings-general__list"],[1,"settings-general__row"],["data-testid","settings-general-row-extra-theme",1,"settings-general__row"],[1,"settings-general__row-text"],[1,"settings-general__row-label"],[1,"settings-general__row-description"],["optionLabel","label","optionValue","value","data-testid","settings-general-extra-theme",3,"ngModelChange","options","ngModel","allowEmpty"],["pTemplate","item"],["data-testid","settings-general-storage-hint",1,"settings-general__storage-hint"],[1,"settings-general__storage-hint-path"],[1,"settings-general__row-hint"],[3,"ngModelChange","ngModel","disabled"],["data-testid","settings-general-extra-theme-option"]],template:function(n,i){if(n&1&&(l(0,"section",0)(1,"h2",1),c(2),a(),l(3,"p",2),c(4),a(),u(5,bn,2,3,"p-message",3),u(6,vn,2,3,"p-message",4),l(7,"ul",5),I(8,yn,8,7,"li",6,fn),l(10,"li",7)(11,"div",8)(12,"div",9),c(13),a(),l(14,"div",10),c(15),a()(),l(16,"p-selectbutton",11),w("ngModelChange",function(g){return i.onExtraThemeChange(g)}),Q(17,kn,2,1,"ng-template",12),a()()(),l(18,"p",13),c(19),l(20,"code",14),c(21),a()()()),n&2){let s,g;b("aria-labelledby","settings-general-heading"),r(2),m(" ",i.texts.general.heading," "),r(2),p(i.texts.general.intro),r(),h((s=i.loadError())?5:-1,s),r(),h((g=i.saveError())?6:-1,g),r(2),j(i.toggles),r(5),m(" ",i.texts.general.extraTheme.label," "),r(2),m(" ",i.texts.general.extraTheme.description," "),r(),v("options",i.extraThemeOptions)("ngModel",i.extraThemeWire())("allowEmpty",!1),r(3),m(" ",i.texts.general.storageHintLabel," "),r(2),p(i.texts.general.storageHintPath)}},dependencies:[ge,ce,de,me,pe,qe,ot,it,he,ue],styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-general__title[_ngcontent-%COMP%]{margin:0 0 .25rem;font-size:1.05rem;font-weight:600;color:var(--p-text-color)}.settings-general__intro[_ngcontent-%COMP%]{margin:0 0 1.25rem;font-size:.85rem;color:var(--sm-text-muted);line-height:1.5}.settings-general__list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1rem}.settings-general__row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:.85rem 1rem;border:1px solid var(--p-content-border-color);border-radius:var(--sm-radius-lg);background:var(--p-content-background)}.settings-general__row-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;flex:1 1 auto;min-width:0}.settings-general__row[_ngcontent-%COMP%] p-toggleswitch[_ngcontent-%COMP%]{flex-shrink:0}.settings-general__row-label[_ngcontent-%COMP%]{font-size:.9rem;font-weight:600;color:var(--p-text-color)}.settings-general__row-description[_ngcontent-%COMP%]{font-size:.8rem;color:var(--sm-text-muted);line-height:1.45}.settings-general__row-hint[_ngcontent-%COMP%]{margin-top:.2rem;font-size:.75rem;font-style:italic;color:var(--sm-text-muted)}.settings-general__storage-hint[_ngcontent-%COMP%]{margin:2rem 0 0;font-size:.75rem;line-height:1.5;color:var(--sm-text-muted);opacity:.65}.settings-general__storage-hint-path[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.72rem;padding:.05rem .3rem;border-radius:var(--sm-radius-md);background:var(--p-content-background);border:1px solid var(--p-content-border-color)}"],changeDetection:0})}return t})();function ft(t){return t instanceof W||t instanceof Error?t.message:String(t)}var Fe={provider:"#7C3AED",extractor:"#A78BFA",analyzer:"#5FD17C",action:"#00C853",formatter:"#5BC0EB",hook:"#FFB627"};function kt(t){let o=t.toLowerCase();return Fe[o]??"currentColor"}var Ct=["all",...Object.keys(Fe)],St=Object.keys(Fe),Pt=["all","built-in","project"],Et=["built-in","project"],De=["core","claude","antigravity","openai","agent-skills"];function q(t,o){return`${t}/${o}`}function Mt(t){let o=new Map;for(let e of t)if(!fe(e.status)&&e.extensions)for(let n of e.extensions)o.set(q(e.id,n.id),n.enabled);return o}function Tt(t){let o={};for(let e of t.settings??[])o[e.id]=Pn(e,t.settingValues?.[e.id]);return o}function Pn(t,o){return t.type==="secret"?"":o!==void 0?wt(t,o):t.default!==void 0?wt(t,t.default):En(t)}function En(t){switch(t.type){case"boolean-flag":return!1;case"string-list":case"enum-multipick":return[];case"key-value-list":return[];case"path-glob":return t.multiple?[]:"";case"integer":case"number":return"";default:return""}}function wt(t,o){switch(t.type){case"boolean-flag":return o===!0;case"integer":case"number":return typeof o=="number"&&Number.isFinite(o)?o:"";case"string-list":case"enum-multipick":return Array.isArray(o)?o.filter(e=>typeof e=="string"):[];case"path-glob":return t.multiple?Array.isArray(o)?o.filter(e=>typeof e=="string"):[]:typeof o=="string"?o:"";case"key-value-list":return Array.isArray(o)?o.filter(e=>typeof e=="object"&&e!==null&&"key"in e&&"value"in e).map(e=>({key:String(e.key??""),value:String(e.value??"")})):[];default:return typeof o=="string"?o:""}}function Re(t,o,e){if(!t||t.length===0||!e)return null;let n={};for(let i of t){let s=i.id,g=e[s];if(i.type==="secret"){typeof g=="string"&&g.length>0&&(n[s]=g);continue}if((i.type==="integer"||i.type==="number")&&g==="")continue;let C=o?.[s];It(C,g)||(n[s]=g)}return Object.keys(n).length>0?n:null}function Ot(t,o,e){return Re(t,o,e)!==null}function It(t,o){if(t===o)return!0;if(Array.isArray(t)&&Array.isArray(o))return t.length!==o.length?!1:t.every((e,n)=>It(e,o[n]));if(typeof t=="object"&&t!==null&&typeof o=="object"&&o!==null&&"key"in t&&"value"in t&&"key"in o&&"value"in o){let e=t,n=o;return e.key===n.key&&e.value===n.value}return!1}function ze(t){let o=t.target;return!o||typeof o.closest!="function"?!1:o.closest('label, button, input, [role="switch"], p-toggleswitch')!==null}function jt(t,o){if(Mn(t,o))return[t];if(!t.extensions)return[];let e=t.extensions.filter(n=>Tn(n,o));return e.length===0?[]:[J(B({},t),{extensions:e})]}function Ft(t,o){if(!t.extensions)return[];let e=t.extensions.filter(n=>n.kind.toLowerCase()===o);return e.length===0?[]:[J(B({},t),{extensions:e})]}function Dt(t,o){return o==="all"?[t]:t.source===o?[t]:[]}function At(t){if(t.locked)return[];if(!t.extensions)return[t];let o=t.extensions.filter(e=>!e.locked);return o.length===0?[]:[J(B({},t),{extensions:o})]}function Ae(t){return t.slice().sort((e,n)=>{let i=De.indexOf(e.id),s=De.indexOf(n.id),g=i>=0?i:De.length,C=s>=0?s:De.length;return g!==C?g-C:e.id.localeCompare(n.id)}).map(e=>{if(!e.extensions)return e;let n=e.extensions.slice().sort((i,s)=>i.id.localeCompare(s.id));return J(B({},e),{extensions:n})})}function Mn(t,o){return!!(t.id.toLowerCase().includes(o)||t.description&&t.description.toLowerCase().includes(o))}function Tn(t,o){return!!(t.id.toLowerCase().includes(o)||t.description&&t.description.toLowerCase().includes(o))}function fe(t){return t==="incompatible-spec"||t==="invalid-manifest"||t==="load-error"||t==="id-collision"}function Nt(t){return t instanceof W||t instanceof Error?t.message:String(t)}function Lt(t,o){return fe(t.status)?o.statusFailure[t.status]??t.status:t.status==="enabled"?o.enabledLabel:o.disabledLabel}function Rt(t,o){switch(t){case"built-in":return o.sourceBuiltIn;case"project":return o.sourceProject}}var Ve="sm.settings.plugins.collapsed",$e="sm.settings.plugins.kind-filter",Be="sm.settings.plugins.source-filter";function zt(){let t=null;try{t=localStorage.getItem(Ve)}catch{return new Set}if(!t)return new Set;let o;try{o=JSON.parse(t)}catch{return new Set}if(!Array.isArray(o))return new Set;let e=new Set;for(let n of o)typeof n=="string"&&n.length>0&&e.add(n);return e}function Vt(t){try{if(t.size===0){localStorage.removeItem(Ve);return}localStorage.setItem(Ve,JSON.stringify([...t]))}catch{}}function $t(){let t=null;try{t=localStorage.getItem($e)}catch{return"all"}return t&&Ct.includes(t)?t:"all"}function Bt(t){try{if(t==="all"){localStorage.removeItem($e);return}localStorage.setItem($e,t)}catch{}}function Gt(){let t=null;try{t=localStorage.getItem(Be)}catch{return"all"}return t&&Pt.includes(t)?t:"all"}function Kt(t){try{if(t==="all"){localStorage.removeItem(Be);return}localStorage.setItem(Be,t)}catch{}}function Ge(){Ue(Ge);let t=_(zt());V(()=>Vt(t()));let o=n=>{let i=new Set(t());i.has(n)?i.delete(n):i.add(n),t.set(i)},e=n=>!t().has(n);return{collapsed:t.asReadonly(),toggleExpanded:o,isExpanded:e}}function Ut(t){let o=_(""),e=f(()=>o().trim().length>0),n=_($t()),i=f(()=>n()!=="all"),s=_(Gt()),g=f(()=>s()!=="all"),C=f(()=>n()==="all"&&s()==="all");V(()=>Bt(n())),V(()=>Kt(s()));let $=f(()=>Ae(t.plugins().flatMap(At))),ne=f(()=>{let L=o().trim().toLowerCase(),Le=s(),P=n(),O=$();return Le!=="all"&&(O=O.flatMap(z=>Dt(z,Le))),P!=="all"&&(O=O.flatMap(z=>Ft(z,P))),L.length>0&&(O=O.flatMap(z=>jt(z,L))),O});return{searchText:o,searchActive:e,kindFilter:n,setKindFilter:L=>{n.set(L)},toggleKindFilter:L=>{n.set(n()===L?"all":L)},isKindFilterActive:L=>n()===L,kindFilterActive:i,kindFilterChips:St,sourceFilter:s,setSourceFilter:L=>{s.set(L)},toggleSourceFilter:L=>{s.set(s()===L?"all":L)},isSourceFilterActive:L=>s()===L,sourceFilterActive:g,sourceFilterChips:Et,allFilterActive:C,resetFilters:()=>{n.set("all"),s.set("all")},visiblePlugins:$,filteredPlugins:ne}}function Ht(t){let o=_(!1),e=_(null),n=_(null),i=_([]),s=_(new Map),g=_(new Map),C=f(()=>{let P=s(),O=g(),z=new Set;for(let[Y,ve]of O)P.get(Y)!==ve&&z.add(Y);return z}),$=f(()=>C().size>0),ne=f(()=>i().some(P=>fe(P.status))),F=f(()=>{let P=g();for(let O of i()){if(O.startsAsDisabled!==!0)continue;let z=O.extensions??[];for(let Y of z)if(P.get(q(O.id,Y.id))===!0)return!0}return!1}),R=P=>g().get(P)??!1,K=P=>C().has(P),D=P=>{i.set([...P]);let O=Mt(P);s.set(O),g.set(new Map(O))};return{plugins:i,loading:o,loadError:e,toggleError:n,hasFailureRows:ne,originalState:s,pendingState:g,dirtyIds:C,hasPendingChanges:$,restartRecommended:F,pendingEnabled:R,isDirty:K,refresh:async()=>{o.set(!0),e.set(null),n.set(null);try{let P=await t.dataSource.listPlugins();D(P.items)}catch(P){e.set(Nt(P)),i.set([]),s.set(new Map),g.set(new Map)}finally{o.set(!1)}},onExtensionToggle:(P,O,z)=>{let Y=q(P,O.id),ve=new Map(g());ve.set(Y,z),g.set(ve)},collectChanges:()=>{let P=C();if(P.size===0)return[];let O=g(),z=[];for(let Y of P)z.push({id:Y,enabled:O.get(Y)??!1});return z},reseed:P=>{D(P),n.set(null)},discardChanges:()=>{g.set(new Map(s())),n.set(null)}}}var Wt=(t,o)=>o.id;function In(t,o){if(t&1&&c(0),t&2){let e=d();m(" ",e.texts.pluginsKindFilterAll," ")}}function jn(t,o){if(t&1&&c(0),t&2){let e=d().$implicit,n=d(2);m(" ",n.sourceLabel(e)," ")}}function Fn(t,o){if(t&1){let e=A();l(0,"p-togglebutton",18),w("ngModelChange",function(){let i=M(e).$implicit,s=d(2);return T(s.toggleSourceFilter(i))}),Q(1,jn,1,1,"ng-template",null,0,ae),a()}if(t&2){let e=o.$implicit,n=d(2);v("ngModel",n.isSourceFilterActive(e))("ariaLabel",n.texts.pluginsSourceFilterOptionA11y(e,!n.isSourceFilterActive(e))),b("data-testid","settings-plugins-source-chip-"+e)}}function Dn(t,o){if(t&1&&(l(0,"span",16),c(1,"|"),a(),I(2,Fn,3,3,"p-togglebutton",17,ee),l(4,"span",16),c(5,"|"),a()),t&2){let e=d();r(2),j(e.sourceFilterChips)}}function An(t,o){if(t&1&&c(0),t&2){let e=d().$implicit;m(" ",e," ")}}function Nn(t,o){if(t&1){let e=A();l(0,"p-togglebutton",19),w("ngModelChange",function(){let i=M(e).$implicit,s=d();return T(s.toggleKindFilter(i))}),Q(1,An,1,1,"ng-template",null,0,ae),a()}if(t&2){let e=o.$implicit,n=d();ke("--kind-color",n.kindTint(e)),v("ngModel",n.isKindFilterActive(e))("ariaLabel",n.texts.pluginsKindFilterOptionA11y(e,!n.isKindFilterActive(e))),b("data-testid","settings-plugins-kind-chip-"+e)}}function Ln(t,o){if(t&1&&(l(0,"p",13),E(1,"i",20),c(2),a()),t&2){let e=d();r(2),m(" ",e.texts.loading," ")}}function Rn(t,o){if(t&1&&(l(0,"p-message",14),c(1),a()),t&2){let e=d();v("closable",!1),r(),N(" ",e.texts.errorPrefix," ",e.loadError()," ")}}function zn(t,o){if(t&1&&(l(0,"p",15),c(1),a()),t&2){let e=d();r(),m(" ",e.texts.empty," ")}}function Vn(t,o){if(t&1){let e=A();l(0,"p-message",24),w("onClose",function(){M(e);let i=d(2);return T(i.toggleError.set(null))}),c(1),a()}if(t&2){let e=d(2);v("closable",!0),r(),N(" ",e.texts.toggleErrorPrefix," ",e.toggleError()," ")}}function $n(t,o){if(t&1&&(l(0,"p",25),E(1,"i",27),c(2),a()),t&2){let e=d(3);r(2),m(" ",e.texts.pluginsSearchEmpty(e.searchText())," ")}}function Bn(t,o){if(t&1&&(l(0,"p",26),E(1,"i",28),c(2),a()),t&2){let e=d(3);r(2),m(" ",e.texts.pluginsProjectEmpty," ")}}function Gn(t,o){if(t&1&&u(0,$n,3,1,"p",25)(1,Bn,3,1,"p",26),t&2){let e=d(2);h(e.searchActive()?0:e.sourceFilter()==="project"&&!e.kindFilterActive()?1:-1)}}function Kn(t,o){if(t&1){let e=A();l(0,"button",46),w("click",function(i){M(e);let s=d().$implicit;return d(2).toggleExpanded(s.id),T(i.stopPropagation())}),E(1,"i",47),a()}if(t&2){let e=d().$implicit,n=d(2);b("aria-expanded",n.isExpanded(e.id))("aria-label",n.isExpanded(e.id)?n.texts.collapseLabel:n.texts.expandLabel)("data-testid","settings-plugin-expand-"+e.id),r(),X("fa-chevron-down",n.isExpanded(e.id))("fa-chevron-right",!n.isExpanded(e.id))}}function Un(t,o){t&1&&E(0,"span",32)}function Hn(t,o){if(t&1&&(l(0,"span",37),c(1),a()),t&2){let e=d().$implicit;r(),m("v",e.version)}}function Wn(t,o){if(t&1&&(l(0,"span",38),E(1,"i",48),c(2),a()),t&2){let e=d().$implicit,n=d(2);v("title",e.reason??""),b("data-testid","settings-row-status-"+e.id),r(2),m(" ",n.statusLabel(e)," ")}}function qn(t,o){if(t&1&&(l(0,"span",39),E(1,"i",49),c(2),a()),t&2){let e=d().$implicit,n=d(2);v("title",n.texts.lockedTooltip),b("data-testid","settings-row-locked-"+e.id),r(2),m(" ",n.texts.lockedLabel," ")}}function Xn(t,o){if(t&1&&(l(0,"span",40),E(1,"i",50),c(2),a()),t&2){let e=d().$implicit,n=d(2);v("title",n.texts.runtimeErrors.badgeTooltip),b("data-testid","settings-row-runtime-errors-"+e.id),r(2),m(" ",n.texts.runtimeErrors.badge(n.runtimeErrorCount(e))," ")}}function Yn(t,o){if(t&1&&(l(0,"p",41),c(1),a()),t&2){let e=d().$implicit;r(),p(e.description)}}function Jn(t,o){if(t&1&&(l(0,"span",42),c(1),a()),t&2){let e=d().$implicit;r(),p(e.reason)}}function Zn(t,o){if(t&1&&(l(0,"p",43),E(1,"i",50),c(2),a()),t&2){let e=d().$implicit,n=d(2);b("data-testid","settings-row-starts-disabled-"+e.id),r(2),m(" ",n.texts.startsAsDisabledRowHint," ")}}function Qn(t,o){if(t&1&&(l(0,"span",56)(1,"span",57),c(2),a(),l(3,"span",58),c(4),a()()),t&2){let e=d().$implicit,n=d(5);r(2),p(n.texts.runtimeErrors.slotPrefix),r(2),p(e.slot)}}function ei(t,o){if(t&1&&(l(0,"span",56)(1,"span",57),c(2),a(),l(3,"span",58),c(4),a()()),t&2){let e=d().$implicit,n=d(5);r(2),p(n.texts.runtimeErrors.contributionPrefix),r(2),p(e.contributionId)}}function ti(t,o){if(t&1&&(l(0,"li",53)(1,"p",54),c(2),a(),l(3,"div",55)(4,"span",56)(5,"span",57),c(6),a(),l(7,"span",58),c(8),a()(),u(9,Qn,5,2,"span",56),u(10,ei,5,2,"span",56),a()()),t&2){let e=o.$implicit,n=d(5);r(2),p(e.message),r(4),p(n.texts.runtimeErrors.extensionPrefix),r(2),p(e.extensionId),r(),h(e.slot?9:-1),r(),h(e.contributionId?10:-1)}}function ni(t,o){if(t&1&&(l(0,"ul",52),I(1,ti,11,5,"li",53,ye),a()),t&2){let e=d(2).$implicit;b("data-testid","settings-runtime-errors-"+e.id),r(),j(e.runtimeContributionErrors)}}function ii(t,o){if(t&1){let e=A();l(0,"div",44)(1,"button",51),w("click",function(i){M(e);let s=d().$implicit;return d(2).toggleRuntimeErrors(s.id),T(i.stopPropagation())}),E(2,"i",47),c(3),a(),u(4,ni,3,1,"ul",52),a()}if(t&2){let e=d().$implicit,n=d(2);r(),b("aria-expanded",n.isRuntimeErrorsExpanded(e.id))("aria-label",n.texts.runtimeErrors.a11y.toggle(e.id,n.runtimeErrorCount(e)))("data-testid","settings-runtime-errors-toggle-"+e.id),r(),X("fa-chevron-down",n.isRuntimeErrorsExpanded(e.id))("fa-chevron-right",!n.isRuntimeErrorsExpanded(e.id)),r(),m(" ",n.isRuntimeErrorsExpanded(e.id)?n.texts.runtimeErrors.collapseLabel:n.texts.runtimeErrors.expandLabel," "),r(),h(n.isRuntimeErrorsExpanded(e.id)?4:-1)}}function oi(t,o){if(t&1&&(l(0,"span",72),c(1),a()),t&2){let e=d().$implicit,n=d(2).$implicit,i=d(2);ke("--stability-color",i.stabilityTint(e.stability)),v("title",i.texts.stability.tooltip),b("data-testid","settings-extrow-stability-"+n.id+"-"+e.id),r(),p(o)}}function ri(t,o){if(t&1&&(l(0,"span",68),c(1),a()),t&2){let e=d().$implicit;r(),m("v",e.version)}}function si(t,o){if(t&1&&(l(0,"span",39),E(1,"i",49),c(2),a()),t&2){let e=d().$implicit,n=d(2).$implicit,i=d(2);v("title",i.texts.lockedTooltip),b("data-testid","settings-extrow-locked-"+n.id+"-"+e.id),r(2),m(" ",i.texts.lockedLabel," ")}}function ai(t,o){if(t&1&&(l(0,"p",69),c(1),a()),t&2){let e=d().$implicit;r(),p(e.description)}}function li(t,o){if(t&1){let e=A();l(0,"li",60)(1,"div",61),w("click",function(i){let s=M(e).$implicit,g=d(2).$implicit,C=d(2);return T(C.onSubrowClick(g.id,s,i))})("keydown.enter",function(i){let s=M(e).$implicit,g=d(2).$implicit,C=d(2);return T(C.onSubrowClick(g.id,s,i))})("keydown.space",function(i){let s=M(e).$implicit,g=d(2).$implicit,C=d(2);return i.preventDefault(),T(C.onSubrowClick(g.id,s,i))}),l(2,"div",62)(3,"div",63),E(4,"span",64),l(5,"span",65),c(6),a(),l(7,"span",66),c(8),a(),u(9,oi,2,5,"span",67),u(10,ri,2,1,"span",68),u(11,si,3,3,"span",39),a(),u(12,ai,2,1,"p",69),a(),l(13,"div",70)(14,"p-toggleswitch",71),w("ngModelChange",function(i){let s=M(e).$implicit,g=d(2).$implicit,C=d(2);return T(C.onExtensionToggle(g.id,s,i))}),a()()()()}if(t&2){let e,n=o.$implicit,i=d(2).$implicit,s=d(2);X("is-clickable",s.extensionToggleInteractive(n))("is-dirty",s.isDirty(s.qualifiedExt(i.id,n.id))),b("data-testid","settings-extrow-"+i.id+"-"+n.id),r(),b("aria-label",s.texts.a11y.extensionRow(s.qualifiedExt(i.id,n.id))),r(3),X("settings-plugins__dirty-dot--visible",s.isDirty(s.qualifiedExt(i.id,n.id))),b("data-testid","settings-extrow-dirty-"+i.id+"-"+n.id),r(2),p(n.id),r(),ke("--kind-color",s.kindTint(n.kind)),r(),p(n.kind),r(),h((e=s.stabilityLabel(n.stability))?9:-1,e),r(),h(i.source==="project"?10:-1),r(),h(n.locked?11:-1),r(),h(n.description?12:-1),r(2),v("ngModel",s.pendingEnabled(s.qualifiedExt(i.id,n.id)))("disabled",!!n.locked)("ariaLabel",s.texts.a11y.extensionToggle(s.qualifiedExt(i.id,n.id),!s.pendingEnabled(s.qualifiedExt(i.id,n.id)))),b("data-testid","settings-ext-toggle-"+i.id+"-"+n.id)}}function ci(t,o){if(t&1&&(l(0,"ul",45),I(1,li,15,21,"li",59,Wt),a()),t&2){let e=d().$implicit;b("data-testid","settings-extensions-"+e.id),r(),j(e.extensions)}}function di(t,o){if(t&1){let e=A();l(0,"li",29)(1,"div",30),w("click",function(i){let s=M(e).$implicit,g=d(2);return T(g.onRowClick(s,i))})("keydown.enter",function(i){let s=M(e).$implicit,g=d(2);return T(g.onRowClick(s,i))})("keydown.space",function(i){let s=M(e).$implicit,g=d(2);return i.preventDefault(),T(g.onRowClick(s,i))}),u(2,Kn,2,7,"button",31)(3,Un,1,0,"span",32),l(4,"div",33)(5,"div",34)(6,"span",35),c(7),a(),l(8,"span",36),c(9),a(),u(10,Hn,2,1,"span",37),u(11,Wn,3,3,"span",38),u(12,qn,3,3,"span",39),u(13,Xn,3,3,"span",40),a(),u(14,Yn,2,1,"p",41),u(15,Jn,2,1,"span",42),u(16,Zn,3,2,"p",43),u(17,ii,5,9,"div",44),a()(),u(18,ci,3,1,"ul",45),a()}if(t&2){let e=o.$implicit,n=d(2);X("is-clickable",n.rowIsClickable(e))("is-failed",n.isFailed(e)),b("data-testid","settings-row-"+e.id),r(),b("aria-label",n.texts.a11y.pluginRow(e.id)),r(),h(n.canExpandExtensions(e)?2:3),r(5),p(e.id),r(2),p(n.sourceLabel(e.source)),r(),h(e.source==="project"&&e.version?10:-1),r(),h(n.isFailed(e)?11:-1),r(),h(e.locked?12:-1),r(),h(n.hasRuntimeErrors(e)?13:-1),r(),h(e.description?14:-1),r(),h(e.reason?15:-1),r(),h(n.showStartsAsDisabledHint(e)?16:-1),r(),h(n.hasRuntimeErrors(e)?17:-1),r(),h(n.canExpandExtensions(e)&&n.isExpanded(e.id)?18:-1)}}function gi(t,o){if(t&1&&(u(0,Vn,2,3,"p-message",21),u(1,Gn,2,1),l(2,"ul",22),I(3,di,19,18,"li",23,Wt),a()),t&2){let e=d();h(e.toggleError()?0:-1),r(),h(e.filteredPlugins().length===0?1:-1),r(2),j(e.filteredPlugins())}}var qt=(()=>{class t{dataSource=S(H);buffer=S(_e);destroyRef=S(xe);visible=U.required();texts=k;pluginState=Ht({dataSource:this.dataSource});plugins=this.pluginState.plugins;loading=this.pluginState.loading;loadError=this.pluginState.loadError;toggleError=this.pluginState.toggleError;hasFailureRows=this.pluginState.hasFailureRows;originalState=this.pluginState.originalState;pendingState=this.pluginState.pendingState;dirtyIds=this.pluginState.dirtyIds;hasPendingChanges=this.pluginState.hasPendingChanges;restartRecommended=this.pluginState.restartRecommended;pluginCollapse=Ge();collapsed=this.pluginCollapse.collapsed;runtimeErrorsExpanded=_(new Set);pluginFilter=Ut({plugins:this.plugins});searchText=this.pluginFilter.searchText;searchActive=this.pluginFilter.searchActive;kindFilter=this.pluginFilter.kindFilter;kindFilterActive=this.pluginFilter.kindFilterActive;kindFilterChips=this.pluginFilter.kindFilterChips;sourceFilter=this.pluginFilter.sourceFilter;sourceFilterActive=this.pluginFilter.sourceFilterActive;sourceFilterChips=this.pluginFilter.sourceFilterChips;allFilterActive=this.pluginFilter.allFilterActive;visiblePlugins=this.pluginFilter.visiblePlugins;filteredPlugins=this.pluginFilter.filteredPlugins;hasProjectPlugins=f(()=>this.plugins().some(e=>e.source==="project"));constructor(){V(()=>{this.visible()&&this.pluginState.refresh()});let e={dirtyIds:this.pluginState.dirtyIds,collectChanges:()=>this.pluginState.collectChanges(),reseed:n=>this.pluginState.reseed(n),discardChanges:()=>this.pluginState.discardChanges(),restartRecommended:this.pluginState.restartRecommended};this.buffer.register(e),this.destroyRef.onDestroy(()=>this.buffer.deregister(e))}toggleKindFilter(e){this.pluginFilter.toggleKindFilter(e)}isKindFilterActive(e){return this.pluginFilter.isKindFilterActive(e)}toggleSourceFilter(e){this.pluginFilter.toggleSourceFilter(e)}isSourceFilterActive(e){return this.pluginFilter.isSourceFilterActive(e)}resetFilters(){this.pluginFilter.resetFilters()}toggleExpanded(e){this.pluginCollapse.toggleExpanded(e)}isExpanded(e){return this.pluginCollapse.isExpanded(e)}pendingEnabled(e){return this.pluginState.pendingEnabled(e)}isDirty(e){return this.pluginState.isDirty(e)}showStartsAsDisabledHint(e){return!e.startsAsDisabled||!e.extensions?!1:e.extensions.some(n=>this.pendingEnabled(q(e.id,n.id)))}onExtensionToggle(e,n,i){this.pluginState.onExtensionToggle(e,n,i)}canExpandExtensions(e){return(e.extensions?.length??0)>0}extensionToggleInteractive(e){return!e.locked}rowIsClickable(e){return this.canExpandExtensions(e)}onRowClick(e,n){ze(n)||this.canExpandExtensions(e)&&this.toggleExpanded(e.id)}onSubrowClick(e,n,i){if(ze(i)||!this.extensionToggleInteractive(n))return;let s=q(e,n.id);this.onExtensionToggle(e,n,!this.pendingEnabled(s))}statusLabel(e){return Lt(e,this.texts)}isFailed(e){return fe(e.status)}runtimeErrorCount(e){return e.runtimeContributionErrors?.length??0}hasRuntimeErrors(e){return this.runtimeErrorCount(e)>0}isRuntimeErrorsExpanded(e){return this.runtimeErrorsExpanded().has(e)}toggleRuntimeErrors(e){let n=new Set(this.runtimeErrorsExpanded());n.has(e)?n.delete(e):n.add(e),this.runtimeErrorsExpanded.set(n)}sourceLabel(e){return Rt(e,this.texts)}qualifiedExt(e,n){return q(e,n)}kindTint(e){return kt(e)}stabilityLabel(e){return!e||e==="stable"?null:this.texts.stability[e]??null}stabilityTint(e){return e==="deprecated"?"var(--sm-severity-error)":e==="experimental"?"var(--sm-severity-warn)":"var(--sm-severity-info)"}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=G({type:t,selectors:[["sm-settings-plugins"]],inputs:{visible:[1,"visible"]},decls:22,vars:10,consts:[["content",""],["aria-labelledby","settings-plugins-heading",1,"settings-plugins"],[1,"settings-plugins__top"],[1,"settings-plugins__header"],["id","settings-plugins-heading",1,"settings-plugins__title"],[1,"settings-plugins__intro"],["iconPosition","left",1,"settings-plugins__search"],["styleClass","fa-solid fa-magnifying-glass"],["pInputText","","type","text","data-testid","settings-plugins-search",3,"ngModelChange","placeholder","ngModel"],["role","group","data-testid","settings-plugins-filter",1,"settings-plugins__filter"],["styleClass","settings-plugins__source-chip is-all","data-testid","settings-plugins-filter-all",3,"ngModelChange","ngModel","ariaLabel"],["styleClass","settings-plugins__kind-chip",3,"ngModel","--kind-color","ariaLabel"],[1,"settings-plugins__scroll"],["data-testid","settings-loading",1,"settings-plugins__hint"],["severity","error","data-testid","settings-error",3,"closable"],["data-testid","settings-empty",1,"settings-plugins__hint"],["aria-hidden","true",1,"settings-plugins__filter-divider"],["styleClass","settings-plugins__source-chip",3,"ngModel","ariaLabel"],["styleClass","settings-plugins__source-chip",3,"ngModelChange","ngModel","ariaLabel"],["styleClass","settings-plugins__kind-chip",3,"ngModelChange","ngModel","ariaLabel"],["aria-hidden","true",1,"fa-solid","fa-spinner","fa-spin"],["severity","error","data-testid","settings-toggle-error",3,"closable"],["role","list",1,"settings-plugins__list"],[1,"settings-plugins__row",3,"is-clickable","is-failed"],["severity","error","data-testid","settings-toggle-error",3,"onClose","closable"],["data-testid","settings-search-empty",1,"settings-plugins__hint"],["data-testid","settings-project-empty",1,"settings-plugins__hint"],["aria-hidden","true",1,"fa-solid","fa-magnifying-glass"],["aria-hidden","true",1,"fa-solid","fa-folder-open"],[1,"settings-plugins__row"],["role","button","tabindex","0",1,"settings-plugins__row-main",3,"click","keydown.enter","keydown.space"],["type","button",1,"settings-plugins__expand"],["aria-hidden","true",1,"settings-plugins__expand-spacer"],[1,"settings-plugins__row-text"],[1,"settings-plugins__row-headline"],[1,"settings-plugins__row-id"],[1,"settings-plugins__row-source"],[1,"settings-plugins__row-version"],[1,"settings-plugins__row-status","settings-plugins__row-status--failed",3,"title"],[1,"settings-plugins__row-locked",3,"title"],[1,"settings-plugins__row-runtime-errors",3,"title"],[1,"settings-plugins__row-description"],[1,"settings-plugins__row-reason"],[1,"settings-plugins__row-hint"],[1,"settings-plugins__runtime"],["role","list",1,"settings-plugins__sublist"],["type","button",1,"settings-plugins__expand",3,"click"],["aria-hidden","true",1,"fa-solid"],["aria-hidden","true",1,"fa-solid","fa-circle-xmark"],["aria-hidden","true",1,"fa-solid","fa-lock"],["aria-hidden","true",1,"fa-solid","fa-triangle-exclamation"],["type","button",1,"settings-plugins__runtime-toggle",3,"click"],["role","list",1,"settings-plugins__runtime-list"],[1,"settings-plugins__runtime-item"],[1,"settings-plugins__runtime-message"],[1,"settings-plugins__runtime-meta"],[1,"settings-plugins__runtime-meta-item"],[1,"settings-plugins__runtime-meta-label"],[1,"settings-plugins__runtime-meta-value"],[1,"settings-plugins__subrow",3,"is-clickable","is-dirty"],[1,"settings-plugins__subrow"],["role","button","tabindex","0",1,"settings-plugins__subrow-main",3,"click","keydown.enter","keydown.space"],[1,"settings-plugins__subrow-text"],[1,"settings-plugins__subrow-headline"],["aria-hidden","true",1,"settings-plugins__dirty-dot"],[1,"settings-plugins__subrow-id"],[1,"settings-plugins__subrow-kind"],[1,"settings-plugins__subrow-stability",3,"--stability-color","title"],[1,"settings-plugins__subrow-version"],[1,"settings-plugins__subrow-description"],[1,"settings-plugins__subrow-controls"],[3,"ngModelChange","ngModel","disabled","ariaLabel"],[1,"settings-plugins__subrow-stability",3,"title"]],template:function(n,i){n&1&&(l(0,"section",1)(1,"div",2)(2,"header",3)(3,"h2",4),c(4),a(),l(5,"p",5),c(6),a()(),l(7,"p-iconfield",6),E(8,"p-inputicon",7),l(9,"input",8),w("ngModelChange",function(g){return i.searchText.set(g)}),a()(),l(10,"div",9)(11,"p-togglebutton",10),w("ngModelChange",function(){return i.resetFilters()}),Q(12,In,1,1,"ng-template",null,0,ae),a(),u(14,Dn,6,0),I(15,Nn,3,5,"p-togglebutton",11,ee),a()(),l(17,"div",12),u(18,Ln,3,1,"p",13)(19,Rn,2,3,"p-message",14)(20,zn,2,1,"p",15)(21,gi,5,2),a()()),n&2&&(r(4),m(" ",i.texts.pluginsHeading," "),r(2),p(i.texts.pluginsIntro),r(3),v("placeholder",i.texts.pluginsSearchPlaceholder)("ngModel",i.searchText()),b("aria-label",i.texts.pluginsSearchA11y),r(),b("aria-label",i.texts.pluginsFilterA11y),r(),v("ngModel",i.allFilterActive())("ariaLabel",i.texts.pluginsFilterAllA11y),r(3),h(i.hasProjectPlugins()?14:-1),r(),j(i.kindFilterChips),r(3),h(i.loading()?18:i.loadError()?19:i.plugins().length===0?20:21))},dependencies:[ge,Ce,ce,de,Ye,Xe,Ze,Je,Pe,Se,me,pe,nt,tt,he,ue],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden;--kind-color: var(--p-text-color)}.settings-plugins[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0}.settings-plugins__top[_ngcontent-%COMP%]{flex:0 0 auto;display:flex;flex-direction:column;gap:.75rem;padding:1.25rem 1.5rem .75rem;border-bottom:1px solid var(--sm-border)}.settings-plugins__scroll[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:.75rem 1.5rem 1.25rem;display:flex;flex-direction:column;gap:.75rem;min-height:0}.settings-plugins__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem}.settings-plugins__title[_ngcontent-%COMP%]{font-size:1.15rem;font-weight:600;margin:0}.settings-plugins__intro[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);font-size:.875rem}.settings-plugins__search[_ngcontent-%COMP%]{display:block;width:100%}.settings-plugins__search[_ngcontent-%COMP%] :where(input[_ngcontent-%COMP%]){width:100%}.settings-plugins__filter[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.375rem}.settings-plugins__kind-chip[_ngcontent-%COMP%], .settings-plugins__source-chip[_ngcontent-%COMP%]{--p-togglebutton-padding: .25rem .625rem;--p-togglebutton-content-padding: 0;--p-togglebutton-content-checked-background: transparent;--p-togglebutton-content-checked-shadow: none;--p-togglebutton-border-radius: var(--sm-radius-pill);--p-togglebutton-background: color-mix(in oklab, var(--chip-accent) 8%, transparent);--p-togglebutton-hover-background: color-mix(in oklab, var(--chip-accent) 18%, transparent);--p-togglebutton-checked-background: color-mix(in oklab, var(--chip-accent) 80%, transparent);--p-togglebutton-border-color: color-mix(in oklab, var(--chip-accent) 35%, transparent);--p-togglebutton-hover-border-color: color-mix(in oklab, var(--chip-accent) 55%, transparent);--p-togglebutton-checked-border-color: var(--chip-accent);--p-togglebutton-color: color-mix(in oklab, var(--chip-accent) 70%, var(--p-text-color));--p-togglebutton-hover-color: color-mix(in oklab, var(--chip-accent) 70%, var(--p-text-color));--p-togglebutton-checked-color: var(--p-surface-50);font-size:.75rem;font-weight:500;letter-spacing:.02em;text-transform:lowercase}.settings-plugins__kind-chip[_ngcontent-%COMP%]{--chip-accent: var(--kind-color)}.settings-plugins__source-chip[_ngcontent-%COMP%]{--chip-accent: var(--p-primary-color)}.settings-plugins__source-chip.is-all[_ngcontent-%COMP%]{--chip-accent: var(--p-text-muted-color)}.settings-plugins__filter-divider[_ngcontent-%COMP%]{align-self:center;color:var(--p-text-muted-color);-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .settings-plugins__kind-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__kind-chip[_ngcontent-%COMP%], .app-dark[_nghost-%COMP%] .settings-plugins__source-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__source-chip[_ngcontent-%COMP%]{--p-togglebutton-background: color-mix(in oklab, var(--chip-accent) 14%, transparent);--p-togglebutton-hover-background: color-mix(in oklab, var(--chip-accent) 26%, transparent);--p-togglebutton-checked-background: color-mix(in oklab, var(--chip-accent) 70%, transparent);--p-togglebutton-border-color: color-mix(in oklab, var(--chip-accent) 50%, transparent);--p-togglebutton-hover-border-color: color-mix(in oklab, var(--chip-accent) 70%, transparent);--p-togglebutton-color: color-mix(in oklab, var(--chip-accent) 80%, var(--p-text-color));--p-togglebutton-hover-color: color-mix(in oklab, var(--chip-accent) 80%, var(--p-text-color));--p-togglebutton-checked-color: var(--p-surface-900)}.settings-plugins__hint[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.5rem;margin:0;padding:1rem 0;color:var(--p-text-muted-color);font-size:.875rem}.settings-plugins__list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.settings-plugins__row[_ngcontent-%COMP%]{border:1px solid var(--p-content-border-color);border-radius:var(--p-border-radius);background:var(--p-content-background);padding:.75rem .875rem;display:flex;flex-direction:column;gap:.5rem}.settings-plugins__row.is-clickable[_ngcontent-%COMP%]{cursor:pointer;transition:background .12s ease}.settings-plugins__row.is-clickable[_ngcontent-%COMP%]:hover{background:var(--p-content-hover-background)}.settings-plugins__row.is-failed[_ngcontent-%COMP%]{border-color:var(--p-message-error-border-color);background:var(--p-message-error-background)}.settings-plugins__row.is-extension-plugin[_ngcontent-%COMP%]{background:var(--p-content-background)}.settings-plugins__row-main[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.settings-plugins__expand[_ngcontent-%COMP%], .settings-plugins__expand-spacer[_ngcontent-%COMP%]{width:1.75rem;height:1.75rem;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.settings-plugins__expand[_ngcontent-%COMP%]{border:none;background:transparent;cursor:pointer;color:var(--p-text-muted-color);border-radius:var(--p-border-radius)}.settings-plugins__expand[_ngcontent-%COMP%]:hover{color:var(--p-text-color);background:var(--p-content-hover-background)}.settings-plugins__row-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.125rem;flex:1;min-width:0}.settings-plugins__row-headline[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem .75rem;position:relative}.settings-plugins__row-id[_ngcontent-%COMP%]{font-weight:600;font-family:var(--sm-font-mono)}.settings-plugins__row-source[_ngcontent-%COMP%], .settings-plugins__row-version[_ngcontent-%COMP%], .settings-plugins__subrow-kind[_ngcontent-%COMP%], .settings-plugins__subrow-version[_ngcontent-%COMP%]{display:inline-flex;align-items:center;font-size:.7rem;font-weight:500;letter-spacing:.02em;padding:.125rem .5rem;border-radius:var(--sm-radius-pill);white-space:nowrap}.settings-plugins__row-version[_ngcontent-%COMP%], .settings-plugins__subrow-version[_ngcontent-%COMP%]{font-family:var(--sm-font-mono)}.settings-plugins__row-source[_ngcontent-%COMP%], .settings-plugins__row-version[_ngcontent-%COMP%], .settings-plugins__subrow-version[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--p-text-color) 8%,transparent);border:1px solid color-mix(in oklab,var(--p-text-color) 18%,transparent);color:var(--p-text-color)}.app-dark[_nghost-%COMP%] .settings-plugins__row-source[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__row-source[_ngcontent-%COMP%], .app-dark[_nghost-%COMP%] .settings-plugins__row-version[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__row-version[_ngcontent-%COMP%], .app-dark[_nghost-%COMP%] .settings-plugins__subrow-version[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__subrow-version[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--p-text-color) 14%,transparent);border-color:color-mix(in oklab,var(--p-text-color) 28%,transparent)}.settings-plugins__subrow-kind[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--kind-color) 14%,transparent);border:1px solid color-mix(in oklab,var(--kind-color) 38%,transparent);color:color-mix(in oklab,var(--kind-color) 70%,var(--p-surface-900))}.app-dark[_nghost-%COMP%] .settings-plugins__subrow-kind[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__subrow-kind[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--kind-color) 22%,transparent);border-color:color-mix(in oklab,var(--kind-color) 55%,transparent);color:color-mix(in oklab,var(--kind-color) 80%,var(--p-surface-50))}.settings-plugins__subrow-stability[_ngcontent-%COMP%]{display:inline-flex;align-items:center;font-size:.7rem;font-weight:500;letter-spacing:.02em;padding:.125rem .5rem;border-radius:var(--sm-radius-pill);white-space:nowrap;background:color-mix(in oklab,var(--stability-color) 14%,transparent);border:1px solid color-mix(in oklab,var(--stability-color) 38%,transparent);color:color-mix(in oklab,var(--stability-color) 70%,var(--p-surface-900))}.app-dark[_nghost-%COMP%] .settings-plugins__subrow-stability[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__subrow-stability[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--stability-color) 22%,transparent);border-color:color-mix(in oklab,var(--stability-color) 55%,transparent);color:color-mix(in oklab,var(--stability-color) 80%,var(--p-surface-50))}.settings-plugins__row-status[_ngcontent-%COMP%]{font-weight:500}.settings-plugins__row-status--failed[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;font-size:.7rem;letter-spacing:.02em;padding:.125rem .5rem;border-radius:var(--sm-radius-pill);white-space:nowrap;color:var(--p-message-error-color);background:color-mix(in oklab,var(--p-message-error-color) 14%,transparent)}.settings-plugins__row.is-failed[_ngcontent-%COMP%] .settings-plugins__row-id[_ngcontent-%COMP%], .settings-plugins__row.is-failed[_ngcontent-%COMP%] .settings-plugins__row-description[_ngcontent-%COMP%]{opacity:.6}.settings-plugins__row-locked[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;font-size:.7rem;font-weight:500;letter-spacing:.02em;padding:.125rem .5rem;border-radius:var(--sm-radius-pill);white-space:nowrap;background:color-mix(in oklab,var(--p-message-warn-color) 14%,transparent);border:1px solid color-mix(in oklab,var(--p-message-warn-color) 35%,transparent);color:color-mix(in oklab,var(--p-message-warn-color) 70%,var(--p-surface-900))}.settings-plugins__row-locked[_ngcontent-%COMP%] > .pi[_ngcontent-%COMP%]{font-size:.7rem}.app-dark[_nghost-%COMP%] .settings-plugins__row-locked[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__row-locked[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--p-message-warn-color) 22%,transparent);border-color:color-mix(in oklab,var(--p-message-warn-color) 55%,transparent);color:color-mix(in oklab,var(--p-message-warn-color) 85%,var(--p-surface-50))}.settings-plugins__row-runtime-errors[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;font-size:.7rem;font-weight:500;letter-spacing:.02em;padding:.125rem .5rem;border-radius:var(--sm-radius-pill);white-space:nowrap;color:color-mix(in oklab,var(--p-message-warn-color) 70%,var(--p-surface-900));background:color-mix(in oklab,var(--p-message-warn-color) 14%,transparent);border:1px solid color-mix(in oklab,var(--p-message-warn-color) 35%,transparent)}.app-dark[_nghost-%COMP%] .settings-plugins__row-runtime-errors[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__row-runtime-errors[_ngcontent-%COMP%]{color:color-mix(in oklab,var(--p-message-warn-color) 85%,var(--p-surface-50));background:color-mix(in oklab,var(--p-message-warn-color) 22%,transparent);border-color:color-mix(in oklab,var(--p-message-warn-color) 55%,transparent)}.settings-plugins__row-description[_ngcontent-%COMP%]{margin:.25rem 0 0;font-size:.8125rem;line-height:1.4;color:var(--p-text-muted-color)}.settings-plugins__row-reason[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--p-message-error-color);font-family:var(--sm-font-mono);margin-top:.25rem}.settings-plugins__sublist[_ngcontent-%COMP%]{list-style:none;margin:0;padding:.5rem 0 0 1.75rem;display:flex;flex-direction:column;gap:.25rem;border-top:1px dashed var(--p-content-border-color)}.settings-plugins__subrow[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.5rem;padding:.375rem .5rem;border-radius:var(--p-border-radius)}.settings-plugins__subrow-main[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.settings-plugins__subrow.is-clickable[_ngcontent-%COMP%] .settings-plugins__subrow-main[_ngcontent-%COMP%]{cursor:pointer;transition:background .12s ease;border-radius:var(--p-border-radius)}.settings-plugins__subrow.is-clickable[_ngcontent-%COMP%]:hover .settings-plugins__subrow-main[_ngcontent-%COMP%]{background:var(--p-content-hover-background)}.settings-plugins__subrow-controls[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.625rem;flex-shrink:0}.settings-plugins__subrow-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.125rem;flex:1;min-width:0}.settings-plugins__subrow-headline[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem .75rem;position:relative}.settings-plugins__subrow-id[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.875rem}.settings-plugins__subrow-description[_ngcontent-%COMP%]{margin:.25rem 0 0;font-size:.75rem;line-height:1.4;color:var(--p-text-muted-color)}.settings-plugins__dirty-dot[_ngcontent-%COMP%]{position:absolute;left:-.75rem;top:50%;transform:translateY(-50%);width:.5rem;height:.5rem;border-radius:50%;background:var(--p-warn-color);visibility:hidden}.settings-plugins__dirty-dot--visible[_ngcontent-%COMP%]{visibility:visible}.settings-plugins__row-hint[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem;margin:.25rem 0 0;font-size:.75rem;line-height:1.4;color:var(--p-warn-color)}.settings-plugins__row-hint[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-top:.125rem}.settings-plugins__runtime[_ngcontent-%COMP%]{margin-top:.375rem;display:flex;flex-direction:column;gap:.375rem}.settings-plugins__runtime-toggle[_ngcontent-%COMP%]{align-self:flex-start;display:inline-flex;align-items:center;gap:.375rem;border:none;background:transparent;padding:0;cursor:pointer;font-size:.75rem;font-weight:500;letter-spacing:.02em;color:color-mix(in oklab,var(--p-message-warn-color) 70%,var(--p-text-color))}.settings-plugins__runtime-toggle[_ngcontent-%COMP%]:hover{color:var(--p-message-warn-color)}.settings-plugins__runtime-toggle[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.7rem}.settings-plugins__runtime-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem;border-left:2px solid color-mix(in oklab,var(--p-message-warn-color) 35%,transparent);padding-left:.625rem}.settings-plugins__runtime-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem}.settings-plugins__runtime-message[_ngcontent-%COMP%]{margin:0;font-size:.8125rem;line-height:1.4;color:var(--p-text-color)}.settings-plugins__runtime-meta[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.25rem .75rem}.settings-plugins__runtime-meta-item[_ngcontent-%COMP%]{display:inline-flex;align-items:baseline;gap:.25rem;font-size:.7rem}.settings-plugins__runtime-meta-label[_ngcontent-%COMP%]{color:var(--p-text-muted-color);text-transform:uppercase;letter-spacing:.04em}.settings-plugins__runtime-meta-value[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);color:var(--p-text-muted-color)}"],changeDetection:0})}return t})();function Jt(t){let o=_(Xt(t)),e=_(Yt(t)),n=_(Ne(e())),i=f(()=>{let F=new Set,R=e(),K=n();for(let{key:D,declarations:Z}of o())Ot(Z,R.get(D),K.get(D))&&F.add(D);return F});return{settingsExtensions:o,dirtyIds:i,settingValue:(F,R)=>n().get(F)?.[R]??"",onSettingChange:(F,R,K)=>{let D=Ne(n()),Z=B({},D.get(F)??{});Z[R]=K,D.set(F,Z),n.set(D)},collectChanges:()=>{let F=e(),R=n(),K=[];for(let{key:D,declarations:Z}of o()){let be=Re(Z,F.get(D),R.get(D));be!==null&&K.push({id:D,settings:be})}return K},reseedFrom:F=>{o.set(Xt(F));let R=Yt(F);e.set(R),n.set(Ne(R))},discardChanges:()=>{n.set(Ne(e()))}}}function Xt(t){let o=[];for(let e of t.extensions??[])e.enabled&&e.settings&&e.settings.length>0&&o.push({key:q(t.id,e.id),ext:e,declarations:e.settings});return o}function Yt(t){let o=new Map;for(let e of t.extensions??[])!e.enabled||!e.settings||e.settings.length===0||o.set(q(t.id,e.id),Tt(e));return o}function Ne(t){let o=new Map;for(let[e,n]of t)o.set(e,B({},n));return o}function Zt(t){return t.status!=="enabled"?!1:(t.extensions??[]).some(o=>o.enabled&&(o.settings?.length??0)>0)}var pi=(t,o)=>o.key,mi=(t,o)=>o.id;function ui(t,o){t&1&&(l(0,"p",10),c(1),a()),t&2&&(r(),p(o))}function hi(t,o){if(t&1){let e=A();l(0,"div",8)(1,"sm-input-type-control",9),w("valueChange",function(i){let s=M(e).$implicit,g=d().$implicit,C=d();return T(C.onSettingChange(g.key,s.id,i))}),a(),u(2,ui,2,1,"p",10),a()}if(t&2){let e,n=o.$implicit,i=d().$implicit,s=d();b("data-testid","settings-plugin-section-setting-"+i.key+"-"+n.id),r(),v("descriptor",s.settingDescriptor(i.ext,n))("value",s.settingValue(i.key,n.id)),r(),h((e=s.settingDescription(n))?2:-1,e)}}function _i(t,o){if(t&1&&(l(0,"div",5)(1,"h3",6),c(2),a(),l(3,"div",7),I(4,hi,3,4,"div",8,mi),a()()),t&2){let e=o.$implicit,n=d();b("data-testid","settings-plugin-section-ext-"+e.key),r(2),p(e.ext.id),r(),b("aria-label",n.texts.pluginSection.formA11y(e.key)),r(),j(e.declarations)}}var Qt=(()=>{class t{buffer=S(_e);destroyRef=S(xe);plugin=U.required();texts=k;handleRef=null;ngOnInit(){let e=Jt(this.plugin());this.handleRef=e;let n={dirtyIds:e.dirtyIds,collectChanges:()=>e.collectChanges(),reseed:i=>this.reseed(i),discardChanges:()=>e.discardChanges()};this.buffer.register(n),this.destroyRef.onDestroy(()=>this.buffer.deregister(n))}get handle(){return this.handleRef}settingsExtensions=f(()=>this.handle.settingsExtensions());pluginId(){return this.plugin().id}settingValue(e,n){return this.handle.settingValue(e,n)}onSettingChange(e,n,i){this.handle.onSettingChange(e,n,i)}settingDescription(e){return e.description}settingDescriptor(e,n){let i={inputType:n.type,label:n.label};return"options"in n&&(i.options=n.options),"min"in n&&n.min!==void 0&&(i.min=n.min),"max"in n&&n.max!==void 0&&(i.max=n.max),"step"in n&&n.step!==void 0&&(i.step=n.step),"multiple"in n&&n.multiple!==void 0&&(i.multiple=n.multiple),"flags"in n&&n.flags!==void 0&&(i.flags=n.flags),"keyLabel"in n&&n.keyLabel!==void 0&&(i.keyLabel=n.keyLabel),"valueLabel"in n&&n.valueLabel!==void 0&&(i.valueLabel=n.valueLabel),n.type==="secret"&&(i.secretIsSet=e.secretSettingsSet?.includes(n.id)??!1),i}reseed(e){let n=e.find(i=>i.id===this.plugin().id);n&&this.handle.reseedFrom(n)}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=G({type:t,selectors:[["sm-settings-plugin-section"]],inputs:{plugin:[1,"plugin"]},decls:9,vars:4,consts:[[1,"settings-plugin-section"],[1,"settings-plugin-section__header"],["data-testid","settings-plugin-section-title",1,"settings-plugin-section__title"],[1,"settings-plugin-section__intro"],[1,"settings-plugin-section__extensions"],[1,"settings-plugin-section__extension"],[1,"settings-plugin-section__subtitle"],["role","group",1,"settings-plugin-section__form"],[1,"settings-plugin-section__setting"],["size","small",3,"valueChange","descriptor","value"],[1,"settings-plugin-section__setting-description"]],template:function(n,i){n&1&&(l(0,"section",0)(1,"header",1)(2,"h2",2),c(3),a(),l(4,"p",3),c(5),a()(),l(6,"div",4),I(7,_i,6,3,"div",5,pi),a()()),n&2&&(b("aria-label",i.texts.pluginSection.sectionA11y(i.pluginId()))("data-testid","settings-plugin-section-"+i.pluginId()),r(3),m(" ",i.pluginId()," "),r(2),p(i.texts.pluginSection.intro),r(2),j(i.settingsExtensions()))},dependencies:[lt],styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-plugin-section[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.25rem}.settings-plugin-section__header[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem}.settings-plugin-section__title[_ngcontent-%COMP%]{margin:0;font-size:1.15rem;font-weight:600;font-family:var(--sm-font-mono);word-break:break-all}.settings-plugin-section__intro[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);font-size:.875rem}.settings-plugin-section__extensions[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:1.5rem}.settings-plugin-section__extension[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem}.settings-plugin-section__subtitle[_ngcontent-%COMP%]{margin:0;font-size:.95rem;font-weight:600;font-family:var(--sm-font-mono);color:var(--p-text-color);padding-bottom:.375rem;border-bottom:1px solid var(--p-content-border-color);word-break:break-all}.settings-plugin-section__form[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.875rem;border-left:2px solid var(--p-content-border-color);padding-left:.875rem;margin-left:.125rem}.settings-plugin-section__setting[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem}.settings-plugin-section__setting-description[_ngcontent-%COMP%]{margin:0;font-size:.75rem;line-height:1.4;color:var(--p-text-muted-color)}"],changeDetection:0})}return t})();function vi(t,o){if(t&1&&(l(0,"p-message",4),c(1),a()),t&2){let e=d();v("closable",!1),r(),N(" ",e.texts.project.loadErrorPrefix," ",o," ")}}function xi(t,o){if(t&1&&(l(0,"p-message",5),c(1),a()),t&2){let e=d();v("closable",!1),r(),N(" ",e.texts.project.saveErrorPrefix," ",o," ")}}function yi(t,o){t&1&&(l(0,"p-message",6),c(1),a()),t&2&&(v("closable",!1),r(),m(" ",o," "))}function ki(t,o){if(t&1&&(l(0,"span",12),c(1),a()),t&2){let e=d();r(),p(e.texts.project.activeProviderSourceAutodetect)}}function wi(t,o){if(t&1&&(l(0,"span",12),c(1),a()),t&2){let e=d();r(),p(e.texts.project.activeProviderSourceNone)}}function Ci(t,o){if(t&1&&(l(0,"span",12),c(1),a()),t&2){let e=d(),n=d();r(),N(" ",n.texts.project.activeProviderDetectedPrefix," ",e," ")}}function Si(t,o){t&1&&u(0,Ci,2,2,"span",12),t&2&&h(o.length>0?0:-1)}function Pi(t,o){if(t&1&&(l(0,"p-message",17),c(1),a()),t&2){let e=d();v("closable",!1),r(),N(" ",e.texts.project.loadErrorPrefix," ",o," ")}}function Ei(t,o){if(t&1&&(l(0,"p-message",18),c(1),a()),t&2){let e=d();v("closable",!1),r(),N(" ",e.texts.project.saveErrorPrefix," ",o," ")}}function Mi(t,o){if(t&1){let e=A();l(0,"li",21)(1,"span",29),c(2),a(),l(3,"p-button",30),w("onClick",function(){let i=M(e).$implicit,s=d();return T(s.onReferencePathRemove(i))}),a()()}if(t&2){let e=o.$implicit,n=d();r(2),p(e),r(),v("label",n.texts.project.removePathLabel)("outlined",!0)("disabled",n.isPending("scan.referencePaths")),b("data-testid","settings-project-reference-paths-remove")}}function Ti(t,o){if(t&1&&(l(0,"p-message",24),c(1),a()),t&2){let e=d();v("closable",!1),r(),N(" ",e.texts.project.loadErrorPrefix," ",o," ")}}function Oi(t,o){if(t&1&&(l(0,"p-message",25),c(1),a()),t&2){let e=d();v("closable",!1),r(),N(" ",e.texts.project.saveErrorPrefix," ",o," ")}}function Ii(t,o){if(t&1){let e=A();l(0,"li",21)(1,"span",29),c(2),a(),l(3,"p-button",30),w("onClick",function(){let i=M(e).$implicit,s=d();return T(s.onIgnorePatternRemove(i))}),a()()}if(t&2){let e=o.$implicit,n=d();r(2),p(e),r(),v("label",n.texts.project.removeIgnorePatternLabel)("outlined",!0)("disabled",n.isPending("ignore.patterns")),b("data-testid","settings-project-ignore-patterns-remove")}}var ji=/[\n\r\x00-\x1F\x7F]/,en=(()=>{class t{dataSource=S(H);confirmation=S(le);providerRegistry=S(dt);visible=U.required();texts=k;loading=_(!1);loadError=_(null);saveError=_(null);preferences=_(null);pending=_(new Set);newReferencePath=_("");referencePaths=f(()=>this.preferences()?.scan.referencePaths??[]);allowSidecarWriters=f(()=>this.preferences()?.allowSidecarWriters??!0);ignoreLoadError=_(null);ignoreSaveError=_(null);ignoreEnvelope=_(null);newIgnorePattern=_("");ignorePatterns=f(()=>this.ignoreEnvelope()?.patterns??[]);activeProviderEnvelope=_(null);activeProviderLoadError=_(null);activeProviderSaveError=_(null);activeProviderSwitchAnnouncement=_(null);providerOptions=f(()=>{let e=this.activeProviderEnvelope(),n=e?new Set(e.selectable):null,i=this.providerRegistry.providers().map(s=>{let g=n!==null&&!n.has(s.id),C=s.comingSoon?k.project.activeProviderComingSoonSuffix:k.project.activeProviderDisabledSuffix,$=g?`${s.label} ${C}`:s.label;return{id:s.id,label:$,disabled:g}}).sort((s,g)=>Number(s.disabled)-Number(g.disabled));return[{id:"",label:k.project.activeProviderEmptyOption,disabled:!1},...i]});activeProviderValue=f(()=>this.activeProviderEnvelope()?.activeProvider??"");activeProviderDetectedLabel=f(()=>(this.activeProviderEnvelope()?.detected??[]).join(", "));activeProviderSource=f(()=>this.activeProviderEnvelope()?.source??"none");constructor(){V(()=>{this.visible()&&(this.refresh(),this.refreshIgnore(),this.refreshActiveProvider())})}isPending(e){return this.pending().has(e)}onReferencePathAdd(){let e=this.newReferencePath().trim();if(e.length===0)return;if(e.includes(",")){this.saveError.set(this.texts.project.commaForbidden);return}let n=[...this.referencePaths(),e];this.runPatch("scan.referencePaths",{scan:{referencePaths:n}}).then(i=>{i&&this.newReferencePath.set("")})}onReferencePathRemove(e){let n=this.referencePaths().filter(i=>i!==e);this.runPatch("scan.referencePaths",{scan:{referencePaths:[...n]}})}onSidecarWritersToggle(e){this.runPatch("allowSidecarWriters",{allowSidecarWriters:e})}onIgnorePatternAdd(){let e=this.newIgnorePattern().trim();if(e.length===0){this.ignoreSaveError.set(this.texts.project.ignorePatternEmpty);return}if(ji.test(e)){this.ignoreSaveError.set(this.texts.project.ignorePatternHasControlChar);return}let n=this.ignorePatterns();if(n.includes(e)){this.ignoreSaveError.set(this.texts.project.ignorePatternDuplicate);return}let i=[...n,e];this.runIgnorePatch({patterns:i}).then(s=>{s&&this.newIgnorePattern.set("")})}onIgnorePatternRemove(e){let n=this.ignorePatterns().filter(i=>i!==e);this.runIgnorePatch({patterns:[...n]})}onActiveProviderChange(e){e===""||e===this.activeProviderValue()||this.confirmActiveProviderSwitch(e,async()=>{await this.runActiveProviderSwitch(e)})}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let e=await this.dataSource.getProjectPreferences();this.preferences.set(e)}catch(e){this.loadError.set(re(e)),this.preferences.set(null)}finally{this.loading.set(!1)}}async refreshIgnore(){this.ignoreLoadError.set(null),this.ignoreSaveError.set(null);try{let e=await this.dataSource.getProjectIgnore();this.ignoreEnvelope.set(e)}catch(e){this.ignoreLoadError.set(re(e)),this.ignoreEnvelope.set(null)}}async refreshActiveProvider(){this.activeProviderLoadError.set(null),this.activeProviderSaveError.set(null);try{let e=await this.dataSource.getActiveProvider();this.activeProviderEnvelope.set(e)}catch(e){this.activeProviderLoadError.set(re(e)),this.activeProviderEnvelope.set(null)}}async runActiveProviderSwitch(e){this.activeProviderSaveError.set(null),this.activeProviderSwitchAnnouncement.set(null);try{let n=await this.dataSource.setActiveProvider(e);this.activeProviderEnvelope.set({activeProvider:n.activeProvider,detected:n.detected,source:n.source,selectable:n.selectable});let i=n.switch.dropped;if(i===null)this.activeProviderSwitchAnnouncement.set(this.texts.project.activeProviderSwitchedNoDb);else{let s=this.texts.project;this.activeProviderSwitchAnnouncement.set(`${s.activeProviderSwitchedPrefix} ${i.tableCount} ${s.activeProviderSwitchedSuffix}`)}}catch(n){this.activeProviderSaveError.set(re(n))}}confirmActiveProviderSwitch(e,n){this.confirmation.confirm({header:this.texts.project.activeProviderConfirmHeader,message:this.texts.project.activeProviderConfirmIntro,acceptLabel:this.texts.project.activeProviderConfirmAccept,rejectLabel:this.texts.project.activeProviderConfirmReject,acceptButtonProps:{severity:"primary"},rejectButtonProps:{severity:"secondary"},accept:()=>{n()},reject:()=>{let i=this.activeProviderEnvelope();i&&this.activeProviderEnvelope.set(B({},i))}})}async runPatch(e,n){if(this.pending().has(e))return!1;let i=new Set(this.pending());i.add(e),this.pending.set(i),this.saveError.set(null);let s=!1;try{let g=await this.dataSource.setProjectPreferences(n);this.preferences.set(g),s=!0}catch(g){if(g instanceof W&&g.code==="confirm-required"){let C=g.paths??[];this.confirmDialog(C,async()=>{try{let $=await this.dataSource.setProjectPreferences(J(B({},n),{confirm:!0}));this.preferences.set($),this.newReferencePath.set("")}catch($){this.saveError.set(re($))}})}else this.saveError.set(re(g))}finally{let g=new Set(this.pending());g.delete(e),this.pending.set(g)}return s}async runIgnorePatch(e){let n="ignore.patterns";if(this.pending().has(n))return!1;let i=new Set(this.pending());i.add(n),this.pending.set(i),this.ignoreSaveError.set(null);let s=!1;try{let g=await this.dataSource.setProjectIgnore(e);this.ignoreEnvelope.set(g),s=!0}catch(g){this.ignoreSaveError.set(re(g))}finally{let g=new Set(this.pending());g.delete(n),this.pending.set(g)}return s}confirmDialog(e,n){this.confirmation.confirm({header:k.project.confirmDialogHeader,message:k.project.confirmDialogIntro+`
|
|
2
|
-
`+e.map(i=>`\u2022 ${i}`).join(`
|
|
3
|
-
`),acceptLabel:k.project.confirmDialogAccept,rejectLabel:k.project.confirmDialogReject,acceptButtonProps:{severity:"primary"},rejectButtonProps:{severity:"secondary"},accept:()=>{n()}})}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=G({type:t,selectors:[["sm-settings-project"]],inputs:{visible:[1,"visible"]},features:[we([le])],decls:65,vars:42,consts:[["data-testid","settings-project",1,"settings-project"],["id","settings-project-heading",1,"settings-project__title"],[1,"settings-project__intro"],[1,"settings-project__intro-path"],["severity","error","data-testid","settings-project-active-provider-load-error",3,"closable"],["severity","error","data-testid","settings-project-active-provider-save-error",3,"closable"],["severity","info","data-testid","settings-project-active-provider-switch-announce",3,"closable"],["data-testid","settings-project-active-provider-row",1,"settings-project__list-row"],[1,"settings-project__row-text"],[1,"settings-project__row-label"],[1,"settings-project__row-description"],[1,"settings-project__row-meta"],[1,"settings-project__meta-line"],[1,"settings-project__add-row"],["optionLabel","label","optionValue","id","optionDisabled","disabled","appendTo","body","data-testid","settings-project-active-provider-select",1,"settings-project__provider-select",3,"ngModelChange","options","ngModel"],["data-testid","settings-project-sidecar-writers-row",1,"settings-project__row"],["data-testid","settings-project-sidecar-writers-toggle",3,"ngModelChange","ngModel","disabled"],["severity","error","data-testid","settings-project-load-error",3,"closable"],["severity","error","data-testid","settings-project-save-error",3,"closable"],["data-testid","settings-project-reference-paths-row",1,"settings-project__list-row"],["role","list",1,"settings-project__path-list"],[1,"settings-project__path-item"],["type","text","pInputText","","data-testid","settings-project-reference-paths-input",3,"ngModelChange","keydown.enter","ngModel","placeholder","disabled"],["severity","primary","size","small","data-testid","settings-project-reference-paths-add",3,"onClick","label","disabled"],["severity","error","data-testid","settings-project-ignore-load-error",3,"closable"],["severity","error","data-testid","settings-project-ignore-save-error",3,"closable"],["data-testid","settings-project-ignore-patterns-row",1,"settings-project__list-row"],["type","text","pInputText","","data-testid","settings-project-ignore-patterns-input",3,"ngModelChange","keydown.enter","ngModel","placeholder","disabled"],["severity","primary","size","small","data-testid","settings-project-ignore-patterns-add",3,"onClick","label","disabled"],[1,"settings-project__path-text"],["severity","secondary","size","small",3,"onClick","label","outlined","disabled"]],template:function(n,i){if(n&1&&(l(0,"section",0)(1,"h2",1),c(2),a(),l(3,"p",2),c(4),l(5,"code",3),c(6),a(),c(7),a(),u(8,vi,2,3,"p-message",4),u(9,xi,2,3,"p-message",5),u(10,yi,2,2,"p-message",6),l(11,"div",7)(12,"div",8)(13,"div",9),c(14),a(),l(15,"div",10),c(16),a(),l(17,"div",11),u(18,ki,2,1,"span",12)(19,wi,2,1,"span",12),u(20,Si,1,1),a()(),l(21,"div",13)(22,"p-select",14),w("ngModelChange",function(g){return i.onActiveProviderChange(g)}),a()()(),l(23,"div",15)(24,"div",8)(25,"div",9),c(26),a(),l(27,"div",10),c(28),a()(),l(29,"p-toggleswitch",16),w("ngModelChange",function(g){return i.onSidecarWritersToggle(g)}),a()(),u(30,Pi,2,3,"p-message",17),u(31,Ei,2,3,"p-message",18),l(32,"div",19)(33,"div",8)(34,"div",9),c(35),a(),l(36,"div",10),c(37),a()(),l(38,"ul",20),I(39,Mi,4,5,"li",21,ee),a(),l(41,"div",13)(42,"input",22),w("ngModelChange",function(g){return i.newReferencePath.set(g)})("keydown.enter",function(){return i.onReferencePathAdd()}),a(),l(43,"p-button",23),w("onClick",function(){return i.onReferencePathAdd()}),a()()(),u(44,Ti,2,3,"p-message",24),u(45,Oi,2,3,"p-message",25),l(46,"div",26)(47,"div",8)(48,"div",9),c(49),a(),l(50,"div",10),c(51),l(52,"code",3),c(53),a(),c(54),l(55,"code",3),c(56),a(),c(57),a()(),l(58,"ul",20),I(59,Ii,4,5,"li",21,ee),a(),l(61,"div",13)(62,"input",27),w("ngModelChange",function(g){return i.newIgnorePattern.set(g)})("keydown.enter",function(){return i.onIgnorePatternAdd()}),a(),l(63,"p-button",28),w("onClick",function(){return i.onIgnorePatternAdd()}),a()()(),E(64,"p-confirmdialog"),a()),n&2){let s,g,C,$,ne,F,R,K,D;b("aria-labelledby","settings-project-heading"),r(2),m(" ",i.texts.project.heading," "),r(2),m(" ",i.texts.project.introPrefix," "),r(2),p(i.texts.project.introPath),r(),m("",i.texts.project.introSuffix," "),r(),h((s=i.activeProviderLoadError())?8:-1,s),r(),h((g=i.activeProviderSaveError())?9:-1,g),r(),h((C=i.activeProviderSwitchAnnouncement())?10:-1,C),r(4),p(i.texts.project.activeProviderLabel),r(2),m(" ",i.texts.project.activeProviderDescription," "),r(2),h(($=i.activeProviderSource())==="autodetect"?18:$==="none"?19:-1),r(2),h((ne=i.activeProviderDetectedLabel())?20:-1,ne),r(2),v("options",i.providerOptions())("ngModel",i.activeProviderValue()),r(4),p(i.texts.project.sidecarWritersLabel),r(2),m(" ",i.texts.project.sidecarWritersDescription," "),r(),v("ngModel",i.allowSidecarWriters())("disabled",i.loading()||i.isPending("allowSidecarWriters")||i.preferences()===null),r(),h((F=i.loadError())?30:-1,F),r(),h((R=i.saveError())?31:-1,R),r(4),p(i.texts.project.referencePathsLabel),r(2),m(" ",i.texts.project.referencePathsDescription," "),r(2),j(i.referencePaths()),r(3),v("ngModel",i.newReferencePath())("placeholder",i.texts.project.referencePathsPlaceholder)("disabled",i.isPending("scan.referencePaths")),b("aria-label",i.texts.project.referencePathsInputAriaLabel),r(),v("label",i.texts.project.addPathLabel)("disabled",i.isPending("scan.referencePaths")||i.newReferencePath().trim().length===0),r(),h((K=i.ignoreLoadError())?44:-1,K),r(),h((D=i.ignoreSaveError())?45:-1,D),r(4),p(i.texts.project.ignorePatternsLabel),r(2),m(" ",i.texts.project.ignorePatternsDescriptionPrefix," "),r(2),p(i.texts.project.ignorePatternsDescriptionFile),r(),m(" ",i.texts.project.ignorePatternsDescriptionMiddle," "),r(2),p(i.texts.project.ignorePatternsDescriptionGitignore),r(),m(" ",i.texts.project.ignorePatternsDescriptionSuffix," "),r(2),j(i.ignorePatterns()),r(3),v("ngModel",i.newIgnorePattern())("placeholder",i.texts.project.ignorePatternsPlaceholder)("disabled",i.isPending("ignore.patterns")),b("aria-label",i.texts.project.ignorePatternsInputAriaLabel),r(),v("label",i.texts.project.addIgnorePatternLabel)("disabled",i.isPending("ignore.patterns")||i.newIgnorePattern().trim().length===0)}},dependencies:[ge,Ce,ce,de,Me,Ee,Oe,Te,Pe,Se,me,pe,et,Qe,he,ue],styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-project__title[_ngcontent-%COMP%]{margin:0 0 .25rem;font-size:1.05rem;font-weight:600;color:var(--p-text-color)}.settings-project__intro[_ngcontent-%COMP%]{margin:0 0 1.25rem;font-size:.85rem;color:var(--sm-text-muted);line-height:1.5}.settings-project__intro-path[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.8rem;padding:.05rem .3rem;border-radius:var(--sm-radius-md);background:var(--p-content-background);border:1px solid var(--p-content-border-color)}[_nghost-%COMP%] p-message[_ngcontent-%COMP%]{display:block;margin-bottom:1rem}.settings-project__row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.85rem 1rem;border:1px solid var(--p-content-border-color);border-radius:var(--sm-radius-lg);background:var(--p-content-background);margin-bottom:1rem}.settings-project__row[_ngcontent-%COMP%] > p-toggleswitch[_ngcontent-%COMP%]{flex:0 0 auto;align-self:center}.settings-project__list-row[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem;padding:.85rem 1rem;border:1px solid var(--p-content-border-color);border-radius:var(--sm-radius-lg);background:var(--p-content-background);margin-bottom:1rem}.settings-project__row-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;flex:1 1 auto;min-width:0}.settings-project__row-label[_ngcontent-%COMP%]{font-size:.9rem;font-weight:600;color:var(--p-text-color)}.settings-project__row-description[_ngcontent-%COMP%]{font-size:.8rem;color:var(--sm-text-muted);line-height:1.45}.settings-project__path-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem}.settings-project__path-item[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.4rem .6rem;border-radius:var(--sm-radius-md);background:var(--p-content-hover-background)}.settings-project__path-text[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.8rem;word-break:break-all;flex:1 1 auto}.settings-project__add-row[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:center}.settings-project__add-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1 1 auto;font-family:var(--sm-font-mono);font-size:.8rem}.settings-project__row-meta[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.15rem;font-size:.75rem;color:var(--p-text-muted-color)}.settings-project__meta-line[_ngcontent-%COMP%]{line-height:1.3}.settings-project__provider-select[_ngcontent-%COMP%]{flex:1 1 auto}.settings-project__provider-select[_ngcontent-%COMP%] .p-select[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return t})();function re(t){return t instanceof W||t instanceof Error?t.message:String(t)}var Fi=(t,o)=>o.id;function Di(t,o){t&1&&E(0,"li",7)}function Ai(t,o){if(t&1){let e=A();u(0,Di,1,0,"li",7),l(1,"li")(2,"button",8),w("click",function(){let i=M(e).$implicit,s=d();return T(s.selectSection(i.id))}),l(3,"span",9),c(4),a()()()}if(t&2){let e=o.$implicit,n=d();h(e.dividerBefore?0:-1),r(2),X("is-active",n.activeSection()===e.id),b("aria-current",n.activeSection()===e.id?"page":null)("data-testid","settings-nav-"+e.id),r(2),p(e.label)}}function Ni(t,o){if(t&1&&E(0,"sm-settings-plugins",6),t&2){let e=d();v("visible",e.pluginsVisible())}}function Li(t,o){if(t&1&&E(0,"sm-settings-general",6),t&2){let e=d();v("visible",e.generalVisible())}}function Ri(t,o){if(t&1&&E(0,"sm-settings-project",6),t&2){let e=d();v("visible",e.projectVisible())}}function zi(t,o){if(t&1&&E(0,"sm-settings-about",6),t&2){let e=d();v("visible",e.aboutVisible())}}function Vi(t,o){t&1&&E(0,"sm-settings-changelog")}function $i(t,o){t&1&&E(0,"sm-settings-plugin-section",10),t&2&&v("plugin",o)}function Bi(t,o){if(t&1&&u(0,$i,1,1,"sm-settings-plugin-section",10),t&2){let e,n=d();h((e=n.activePluginItem())?0:-1,e)}}function Gi(t,o){if(t&1&&(l(0,"em",14),c(1),a()),t&2){let e=d(3);r(),m(" ",e.texts.startsAsDisabledFooterHint," ")}}function Ki(t,o){if(t&1&&(l(0,"span",15),c(1),a()),t&2){let e=d(3);r(),N(" ",e.texts.applyErrorPrefix," ",o," ")}}function Ui(t,o){if(t&1){let e=A();l(0,"div",11)(1,"div",12)(2,"span",13),c(3),a(),u(4,Gi,2,1,"em",14),u(5,Ki,2,2,"span",15),a(),l(6,"p-button",16),w("onClick",function(){M(e);let i=d(2);return T(i.discardChanges())}),a(),l(7,"p-button",17),w("onClick",function(){M(e);let i=d(2);return T(i.applyAndClose())}),a()()}if(t&2){let e,n=d(2);r(3),m(" ",n.texts.unsavedChangesMessage(n.buffer.dirtyCount())," "),r(),h(n.buffer.restartRecommended()?4:-1),r(),h((e=n.buffer.applyError())?5:-1,e),r(),v("text",!0)("label",n.texts.discardChanges)("ariaLabel",n.texts.discardA11y)("disabled",n.buffer.applying()),r(),v("label",n.texts.applyAndClose)("ariaLabel",n.texts.applyA11y)("disabled",n.buffer.applying())("loading",n.buffer.applying())}}function Hi(t,o){if(t&1&&u(0,Ui,8,11,"div",11),t&2){let e=d();h(e.buffer.dirtyCount()>0?0:-1)}}var Wi=[{id:"general",label:k.sections.general},{id:"project",label:k.sections.project},{id:"plugins",label:k.sections.plugins},{id:"changelog",label:k.sections.changelog},{id:"about",label:k.sections.about}];function qi(t){return`plugin:${t}`}var ps=(()=>{class t{visible=U.required();visibleChange=We();confirmation=S(le);dataSource=S(H);buffer=S(_e);texts=k;activeSection=_("plugins");settingsPlugins=_([]);sections=f(()=>{let e=this.settingsPlugins().map((i,s)=>({id:qi(i.id),label:this.texts.pluginSection.navLabel(i.id),dividerBefore:s===0})),n=[];for(let i of Wi)i.id==="changelog"&&e.length>0?n.push(J(B({},i),{dividerBefore:!0})):n.push(B({},i)),i.id==="plugins"&&n.push(...e);return n});activePluginItem=f(()=>{let e=this.activeSection();if(!e.startsWith("plugin:"))return null;let n=e.slice(7);return this.settingsPlugins().find(i=>i.id===n)??null});pluginsVisible=f(()=>this.visible()&&this.activeSection()==="plugins");generalVisible=f(()=>this.visible()&&this.activeSection()==="general");projectVisible=f(()=>this.visible()&&this.activeSection()==="project");aboutVisible=f(()=>this.visible()&&this.activeSection()==="about");constructor(){V(()=>{this.visible()&&this.loadSettingsPlugins()})}async loadSettingsPlugins(){try{let n=(await this.dataSource.listPlugins()).items.filter(Zt);this.settingsPlugins.set(Ae(n))}catch{this.settingsPlugins.set([])}}onVisibleChange(e){if(e){this.visibleChange.emit(!0);return}let n=this.buffer.dirtyCount();if(n===0){this.visibleChange.emit(!1);return}this.confirmation.confirm({header:this.texts.confirmCloseTitle,message:this.texts.confirmCloseBody(n),acceptLabel:this.texts.applyAndClose,rejectLabel:this.texts.discardChanges,acceptButtonProps:{severity:"primary"},rejectButtonProps:{severity:"secondary"},accept:()=>{this.applyAndClose()},reject:()=>{this.buffer.discardChanges(),this.visibleChange.emit(!1)}})}selectSection(e){this.activeSection.set(e)}async applyAndClose(){(await this.buffer.applyChanges()).ok&&this.visibleChange.emit(!1)}discardChanges(){this.buffer.discardChanges()}static \u0275fac=function(n){return new(n||t)};static \u0275cmp=G({type:t,selectors:[["sm-settings-modal"]],inputs:{visible:[1,"visible"]},outputs:{visibleChange:"visibleChange"},features:[we([le])],decls:16,vars:10,consts:[["footer",""],["styleClass","settings-modal__dialog","contentStyleClass","settings-modal__content","data-testid","settings-modal",3,"visibleChange","visible","modal","draggable","resizable","closable","closeOnEscape","dismissableMask","header"],[1,"settings-modal__layout"],["data-testid","settings-modal-sidebar",1,"settings-modal__sidebar"],["role","list",1,"settings-modal__sidebar-list"],["data-testid","settings-modal-main",1,"settings-modal__main"],[3,"visible"],["aria-hidden","true",1,"settings-modal__divider"],["type","button",1,"settings-modal__sidebar-item",3,"click"],[1,"settings-modal__sidebar-label"],[3,"plugin"],["data-testid","settings-modal-footer",1,"settings-modal__footer"],[1,"settings-modal__footer-status"],["data-testid","settings-modal-unsaved",1,"settings-modal__footer-message"],["data-testid","settings-modal-restart-hint",1,"settings-modal__footer-hint"],["data-testid","settings-modal-apply-error",1,"settings-modal__footer-error"],["severity","secondary","size","small","data-testid","settings-modal-discard",3,"onClick","text","label","ariaLabel","disabled"],["size","small","data-testid","settings-modal-apply",3,"onClick","label","ariaLabel","disabled","loading"]],template:function(n,i){if(n&1&&(l(0,"p-dialog",1),w("visibleChange",function(g){return i.onVisibleChange(g)}),l(1,"div",2)(2,"nav",3)(3,"ul",4),I(4,Ai,5,6,null,null,Fi),a()(),l(6,"div",5),u(7,Ni,1,1,"sm-settings-plugins",6)(8,Li,1,1,"sm-settings-general",6)(9,Ri,1,1,"sm-settings-project",6)(10,zi,1,1,"sm-settings-about",6)(11,Vi,1,0,"sm-settings-changelog")(12,Bi,1,1),a()(),E(13,"p-confirmdialog"),Q(14,Hi,1,1,"ng-template",null,0,ae),a()),n&2){let s;v("visible",i.visible())("modal",!0)("draggable",!1)("resizable",!1)("closable",!0)("closeOnEscape",!0)("dismissableMask",!0)("header",i.texts.modalTitle),r(2),b("aria-label",i.texts.modalTitle),r(2),j(i.sections()),r(3),h((s=i.activeSection())==="plugins"?7:s==="general"?8:s==="project"?9:s==="about"?10:s==="changelog"?11:12)}},dependencies:[Me,Ee,Oe,Te,st,rt,mt,_t,yt,qt,Qt,en],styles:["[_nghost-%COMP%]{display:contents;--p-message-error-color: #fca5a5;--p-message-error-background: color-mix(in srgb, #ef4444 14%, transparent);--p-message-error-border-color: color-mix(in srgb, #ef4444 45%, transparent)}[_nghost-%COMP%] .settings-modal__dialog{width:1024px;height:720px;max-width:92vw;max-height:90vh}[_nghost-%COMP%] .settings-modal__content{padding:0;height:100%;display:flex;flex-direction:column;overflow:hidden}.settings-modal__layout[_ngcontent-%COMP%]{flex:1;display:grid;grid-template-columns:200px 1fr;min-height:0}.settings-modal__sidebar[_ngcontent-%COMP%]{border-right:1px solid var(--p-content-border-color);background:var(--p-content-background);padding:.5rem;overflow-y:auto;min-height:0}.settings-modal__sidebar-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.125rem}.settings-modal__divider[_ngcontent-%COMP%]{height:1px;margin:.375rem .25rem;background:var(--p-content-border-color)}.settings-modal__sidebar-item[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.5rem;width:100%;padding:.5rem .75rem;border:none;border-radius:var(--p-border-radius);background:transparent;color:var(--p-text-color);font:inherit;text-align:left;cursor:pointer;transition:background .15s ease,color .15s ease}.settings-modal__sidebar-item[_ngcontent-%COMP%]:hover{background:var(--p-content-hover-background)}.settings-modal__sidebar-item.is-active[_ngcontent-%COMP%]{background:var(--p-highlight-background);color:var(--p-highlight-color)}.settings-modal__sidebar-label[_ngcontent-%COMP%]{flex:1;font-size:.9rem;font-weight:500;text-transform:capitalize;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.settings-modal__main[_ngcontent-%COMP%]{min-width:0;min-height:0;overflow:hidden;display:flex;flex-direction:column}.settings-modal__main[_ngcontent-%COMP%] > *[_ngcontent-%COMP%]{flex:1;min-height:0}.settings-modal__footer[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;gap:.5rem;width:100%}.settings-modal__footer-status[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.125rem;margin-right:auto;min-width:0}.settings-modal__footer-message[_ngcontent-%COMP%]{font-size:.8125rem;line-height:1.3;color:color-mix(in oklab,var(--p-message-warn-color) 80%,var(--p-text-color));overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings-modal__footer-hint[_ngcontent-%COMP%]{font-style:italic;font-size:.75rem;line-height:1.4;color:var(--p-warn-color)}.settings-modal__footer-error[_ngcontent-%COMP%]{font-size:.75rem;line-height:1.4;color:var(--p-message-error-color)}[_nghost-%COMP%] .settings-modal__dialog .p-inputtext, [_nghost-%COMP%] .settings-modal__dialog .p-button, [_nghost-%COMP%] .settings-modal__dialog .p-togglebutton, [_nghost-%COMP%] .settings-modal__dialog .p-select, [_nghost-%COMP%] .settings-modal__dialog .p-select-label, [_nghost-%COMP%] .settings-modal__dialog .p-multiselect, [_nghost-%COMP%] .settings-modal__dialog .p-multiselect-label, [_nghost-%COMP%] .settings-modal__dialog .p-autocomplete, [_nghost-%COMP%] .settings-modal__dialog .p-password input{font-size:.8rem}[_nghost-%COMP%] .settings-modal__dialog .p-dialog-footer{display:flex!important;align-items:center!important;padding-block:.625rem!important}"],changeDetection:0})}return t})();export{ps as SettingsModal};
|