@skill-map/cli 0.24.5 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- import{b as Vt,c as w,d as Lt,e as Rt}from"./chunk-UVILXZ5L.js";import{a as Ct,b as wt,c as Se,d as Pe,e as kt,f as St,g as It}from"./chunk-AD7RBRD3.js";import{a as Me,b as Te,c as Ot,d as Ft,e as Dt,f as At,g as jt,h as Nt,i as re,j as ae}from"./chunk-UXCAEDR6.js";import{e as Pt,f as Ee,h as ne,i as ie,j as oe,l as Et,m as Mt,n as Tt}from"./chunk-VO6NF24F.js";import{$ as tt,Aa as rt,Ba as Y,Bc as ee,Hb as Z,I as Xe,Ic as Ce,J as Ye,Jb as pt,Jc as we,K as Je,Ka as _,Lc as ft,M as Ze,Na as f,O as M,Oa as x,Oc as xt,Pa as at,Qa as Q,Qb as ut,Ra as O,S as et,Sa as F,T as k,Ta as b,Tb as y,U as S,Ua as l,Uc as vt,Va as s,Vc as me,Wa as T,Wb as ye,Wc as yt,Xa as m,Xb as V,Ya as h,Yb as mt,Za as J,ab as st,bd as ke,cc as ze,cd as te,da as v,db as I,dc as ht,ea as N,eb as X,fb as C,ga as Le,hb as a,id as G,jd as B,ka as nt,kb as lt,la as pe,lb as dt,mb as fe,nb as xe,oa as r,oc as _t,pb as ct,pc as bt,qb as gt,sb as Re,tb as $,ub as ve,vb as ue,wa as A,wb as d,xa as it,xb as p,yb as u,za as ot,zb as R}from"./chunk-J3YWUNFO.js";import"./chunk-H2J55DNK.js";import{a as q,b as W}from"./chunk-Q7L6LLAK.js";function gn(t,i){if(t&1&&(m(0,"p",6),d(1),h()),t&2){let e=a();r(),R(" ",e.texts.aboutErrorPrefix," ",e.loadError()," ")}}var Ie=class t{dataSource=M(G);updateCheck=M(Vt);theme=M(Rt);visible=V.required();texts=w;health=v(null);loadError=v(null);markSrc=y(()=>this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");cliVersion=y(()=>this.updateCheck.current()??this.health()?.implVersion??this.texts.aboutUnknown);specVersion=y(()=>this.health()?.specVersion??this.texts.aboutLoading);schemaVersion=y(()=>this.health()?.schemaVersion??this.texts.aboutLoading);scope=y(()=>this.health()?.scope??this.texts.aboutLoading);cwd=y(()=>this.health()?.cwd??this.texts.aboutLoading);dbDisplay=y(()=>{let i=this.health();return i?this.texts.aboutDbValue(i.db,pn(i.dbPath,i.cwd)):this.texts.aboutLoading});homeDir=y(()=>this.health()?.homeDir??this.texts.aboutLoading);constructor(){N(()=>{this.visible()&&this.health()===null&&this.load()})}async load(){this.loadError.set(null);try{let i=await this.dataSource.health();this.health.set(i)}catch(i){let e=i instanceof B||i instanceof Error?i.message:String(i);this.loadError.set(e)}}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-about"]],inputs:{visible:[1,"visible"]},decls:67,vars:29,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-scope",1,"settings-about__value"],["data-testid","settings-about-cwd",1,"settings-about__value"],["data-testid","settings-about-db",1,"settings-about__value"],["data-testid","settings-about-home",1,"settings-about__value"]],template:function(e,n){e&1&&(m(0,"section",0)(1,"header",1),J(2,"img",2),m(3,"div",3)(4,"h2",4),d(5),h(),m(6,"p",5),d(7),h()()(),f(8,gn,2,2,"p",6),m(9,"a",7),J(10,"i",8),m(11,"span",9)(12,"span",10),d(13),h(),m(14,"span",11),d(15),h()(),m(16,"span",12),J(17,"i",13),d(18),h()(),m(19,"dl",14)(20,"div",15)(21,"dt",16),d(22),h(),m(23,"dd",17)(24,"a",18),d(25),h()()(),m(26,"div",15)(27,"dt",16),d(28),h(),m(29,"dd",17)(30,"a",19),d(31),h()()(),m(32,"div",15)(33,"dt",16),d(34),h(),m(35,"dd",20),d(36),h()(),m(37,"div",15)(38,"dt",16),d(39),h(),m(40,"dd",21),d(41),h()(),m(42,"div",15)(43,"dt",16),d(44),h(),m(45,"dd",22),d(46),h()(),m(47,"div",15)(48,"dt",16),d(49),h(),m(50,"dd",23),d(51),h()(),m(52,"div",15)(53,"dt",16),d(54),h(),m(55,"dd",24),d(56),h()(),m(57,"div",15)(58,"dt",16),d(59),h(),m(60,"dd",25),d(61),h()(),m(62,"div",15)(63,"dt",16),d(64),h(),m(65,"dd",26),d(66),h()()()()),e&2&&(r(2),X("src",n.markSrc(),pe),r(3),u(" ",n.texts.aboutHeading," "),r(2),p(n.texts.aboutIntro),r(),x(n.loadError()?8:-1),r(),X("href",n.texts.aboutGithubUrl,pe),_("aria-label",n.texts.aboutStarA11y),r(4),p(n.texts.aboutStarHeading),r(2),p(n.texts.aboutStarBody),r(3),u(" ",n.texts.aboutStarCta," "),r(4),p(n.texts.aboutWebsiteLabel),r(2),X("href",n.texts.aboutWebsiteUrl,pe),r(),p(n.texts.aboutWebsiteUrl),r(3),p(n.texts.aboutGithubLabel),r(2),X("href",n.texts.aboutGithubUrl,pe),r(),p(n.texts.aboutGithubUrl),r(3),p(n.texts.aboutCliLabel),r(2),u(" ",n.cliVersion()," "),r(3),p(n.texts.aboutSpecLabel),r(2),u(" ",n.specVersion()," "),r(3),p(n.texts.aboutSchemaLabel),r(2),u(" ",n.schemaVersion()," "),r(3),p(n.texts.aboutScopeLabel),r(2),u(" ",n.scope()," "),r(3),p(n.texts.aboutFolderLabel),r(2),u(" ",n.cwd()," "),r(3),p(n.texts.aboutDbLabel),r(2),u(" ",n.dbDisplay()," "),r(3),p(n.texts.aboutHomeLabel),r(2),u(" ",n.homeDir()," "))},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(--p-monospace-font-family);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})};function pn(t,i){if(!t||!i)return t;let e=i.replace(/[/\\]+$/,"");return t.startsWith(e)?t.slice(e.length).replace(/^[/\\]+/,""):t}var zt={schemaVersion:1,entries:[{version:"0.24.5",date:"2026-05-14",kind:"internal",highlights:[]},{version:"0.24.4",date:"2026-05-13",kind:"internal",highlights:[]},{version:"0.24.3",date:"2026-05-13",kind:"internal",highlights:[]},{version:"0.24.2",date:"2026-05-13",kind:"user-facing",highlights:[{body:'**Graph edge style picker** \u2014 Settings \u2192 General now has an "Edge style" control. Pick **Orthogonal**, **Straight**, **Bezier**, or **Adaptive curve** (new default) and the graph re-renders immediately. The choice is remembered in this browser only.',packages:["@skill-map/cli"]},{body:"**Edge look refresh** \u2014 graph edges now show a small **dot at the start** and arrow at the end, with thinner strokes and softer colors. Kind colors (invokes / references / mentions / supersedes) are still distinct but no longer compete with the node cards for attention.",packages:["@skill-map/cli"]},{body:"**Click an edge to highlight it** \u2014 clicking a connection in the graph now selects it: the line grows a touch thicker and saturates to its full colour (same hue as the base, just louder). Click elsewhere on the canvas to clear the selection.",packages:["@skill-map/cli"]},{body:"**Footer link icons refresh** \u2014 the incoming / outgoing link counters on each node card now use the classic **download / upload** glyphs instead of plain up / down arrows. The arrow shape stays exclusive to the graph's edges, which keeps the visual vocabulary clearer.",packages:["@skill-map/cli"]}]},{version:"0.24.1",date:"2026-05-13",kind:"user-facing",highlights:[{body:'**Graph edge style picker** \u2014 Settings \u2192 General now has an "Edge style" control. Pick **Orthogonal** (default), **Straight**, **Bezier**, or **Adaptive curve** and the graph re-renders immediately. The choice is remembered in this browser only.',packages:["@skill-map/cli"]}]},{version:"0.24.0",date:"2026-05-13",kind:"user-facing",highlights:[{body:"**CLI flags fixed.** `sm refresh`, `sm watch`, `sm jobs prune` now honor `--db` / `-g`. `sm watch` and `sm scan --watch` honor `--no-color`. `sm scan --watch` names the conflicting flag on combo errors. `sm conformance run` progress moved to stderr; `--quiet` silences it.",packages:["@skill-map/cli"]}]},{version:"0.23.1",date:"2026-05-12",kind:"user-facing",highlights:[{body:"Inspector chips and the hero card now render their variant styling (link, warn, broken, danger, hero accent border). They had silently been rendering as bare defaults since PrimeNG 21 changed how `[styleClass]` is applied to chip and card hosts.",packages:["@skill-map/cli"]}]},{version:"0.23.0",date:"2026-05-12",kind:"user-facing",highlights:[{body:'Node inspector will split actions into "Applicable" (always available) and "Recommended" (per finding). First pairing: stale sidecar recommends running `bump`. UI hookup lands in the next iteration; the spec field ships first.',packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm plugins create <id> -g` now scaffolds under `~/.skill-map/plugins/<id>` instead of the project dir. The flag was advertised in `--help` but previously ignored.",packages:["@skill-map/cli"]},{body:"`sm refresh`, `sm plugins doctor`, and `sm conformance run` now respect `--json` for machine-readable output. `sm graph --format json` is a new format that emits the full ScanResult. CI / scripts can parse these instead of the human text.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm serve` now rejects browser requests whose `Host` or `Origin` is not a loopback name. Closes a DNS-rebinding lane where a malicious page could trigger scans or settings writes. `--dev-cors` still works for Vite-style dev UIs on a different loopback port.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm` now refuses to grant the `.sm` write consent (or apply `scan.extraFolders` / `scan.referencePaths`) from user-level config. The first prompt re-appears per project. Move stray values into `<project>/.skill-map/settings.local.json` (gitignored).",packages:["@skill-map/cli"]}]},{version:"0.22.0",date:"2026-05-12",kind:"user-facing",highlights:[{body:'The "include HOME" toggle is gone. To scan paths outside the project, list them in **Extra folders to scan** (renamed from *Extra roots*). If you had `scan.includeHome: true`, add the paths you actually need (e.g. `~/.claude/agents`), not one click anymore.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.21.0",date:"2026-05-10",kind:"user-facing",highlights:[{body:"Expanded node cards now show the file path above the description and a provider chip (Claude, Gemini, Open Skills). Favorite toggle uses a star instead of a heart.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Disabling a plugin now removes its card chips from the UI immediately. Previously the chips lingered until the next `sm scan`, making the toggle look broken.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"The card footer is cleaner: the three outgoing counters (`@`-mentions, markdown links, `/`-commands) share a single `\u2193` arrow glyph on the left, and the URL counter keeps its link glyph on the right. Three legacy hardcoded chips (in / out links, external URLs) were removed.",packages:["@skill-map/cli"]},{body:"`sm plugins show core/<ext>` now resolves like `enable`/`disable` do, and `sm plugins list` marks individually-disabled extensions with `\u2715`. The `sm tutorial` content is realigned with the v0.20.0 verbs (no more `sm graph --root` / `sm export --kind` / `kind: hook` claims).",packages:["@skill-map/cli"]},{body:"The view slot `card.footer.left.counter` was renamed to `card.footer.left`, symmetrical with `card.footer.right`. Plugin authors using the old literal in `plugin.json` need to update it; the scaffolder emits the new name automatically.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"The topbar now shows the full project path under the **skill-map** wordmark, so a screenshot or a quick glance at the UI is always self-identifying. Previously only the last folder segment was shown, and projects scanned from their own root saw no path at all.",packages:["@skill-map/cli"]}]},{version:"0.20.0",date:"2026-05-10",kind:"user-facing",highlights:[{body:'**Update-check is now a user preference.** Whether you see "Update available" notifications no longer depends on the project you are scanning. The toggle moved to **Settings \u2192 General**; the CLI equivalent is `sm config set -g updateCheck.enabled <bool>`.',packages:["@skill-map/cli"]},{body:"**`sm scan` now flags orphan job files.** A new check scans `.skill-map/jobs/` for MD files that no DB row references and reports each as a `warn` issue. To delete the files, run `sm bump prune --orphan-files` (unchanged).",packages:["@skill-map/cli"]},{body:"**`sm scan -g` now scans your HOME directory.** Run `sm scan -g` (without positional roots) to walk every active provider's HOME dir, typically `~/.claude`, `~/.gemini`, `~/.agents`, using the global config + DB.",packages:["@skill-map/cli"]},{body:"**Three new privacy-sensitive project settings** in Settings \u2192 Project: *include HOME provider directories*, *extra scan roots*, and *reference paths for link validation*. Every change that expands disk access beyond your project root requires explicit confirmation.",packages:["@skill-map/cli"]},{body:'**Reset Layout uses a proper dialog.** The "Reset all node positions" action used to fire a browser-native `confirm()` popup; it now uses the in-app dialog style with a destructive-styled "Reset" button and a "Cancel" escape.',packages:["@skill-map/cli"]},{body:'**Plugins can be locked by the host.** Settings \u2192 Plugins shows a "Locked" pill on plugins marked as mandatory (today only `core/markdown`, the universal `.md` fallback). The toggle stays visible but disabled, with a tooltip explaining why.',packages:["@skill-map/cli"]}]},{version:"0.19.0",date:"2026-05-09",kind:"user-facing",highlights:[{body:"**Settings \u2192 Changelog.** The Changelog tab in Settings now lists what's new in skill-map: one entry per release, newest first, bullet points for the user-facing changes. Bundled with the demo so it's available offline too.",packages:["@skill-map/cli"]},{body:"**Tags zoom-to-matching.** Clicking a tag chip in the inspector now pans + zooms the graph to fit every node that carries the tag. Click the same chip again to clear the selection and return to the previous view.",packages:["@skill-map/cli"]}]},{version:"0.18.0",date:"2026-05-07",kind:"user-facing",highlights:[{body:"**Bump sidecars in batch.** New `sm bump --pending` walks every node whose `.sm` sidecar reports drift and refreshes them in one pass. Single-node `sm bump <path>` also lands.",packages:["@skill-map/cli"]},{body:'**Annotation field dropped: `released`.** Redundant with `audit.lastBumpedAt`. The inspector and node card now read the activity timestamp from the `audit:` block, no more confusion between "officially released" and "last bumped".',packages:["@skill-map/cli"]}]},{version:"0.17.0",date:"2026-04-29",kind:"user-facing",highlights:[{body:"**Per-node chips in the graph card and inspector.** Plugins can now decorate nodes with counters, alerts, and key-value rows. Two come built-in: external-URL count per node, and in/out link counts.",packages:["@skill-map/cli"]},{body:"**Multi-provider graphs.** Claude, Gemini, and the open-standard `agent-skills` flavour now coexist in the same graph. Cards paint with each Provider's accent; the kind palette in the graph view filters on the actual node kind names.",packages:["@skill-map/cli"]}]}]};var Bt=zt;var mn=(t,i)=>i.version;function hn(t,i){if(t&1&&(m(0,"p",3),d(1),h()),t&2){let e=a();r(),u(" ",e.texts.changelogEmpty," ")}}function _n(t,i){if(t&1&&(m(0,"p",10),d(1),h()),t&2){let e=a(3);r(),u(" ",e.texts.changelogInternalRelease," ")}}function bn(t,i){if(t&1&&(m(0,"li",15),d(1),h()),t&2){let e=i.$implicit;r(),p(e)}}function fn(t,i){if(t&1&&(m(0,"ul",14),O(1,bn,2,1,"li",15,Q),h()),t&2){let e=a().$implicit,n=a(4);_("aria-label",n.texts.changelogAffectedPackages),r(),F(e.packages)}}function xn(t,i){if(t&1&&(m(0,"li",12),J(1,"div",13),f(2,fn,3,1,"ul",14),h()),t&2){let e=i.$implicit;r(),X("innerHTML",e.bodyHtml,nt),r(),x(e.packages.length?2:-1)}}function vn(t,i){if(t&1&&(m(0,"ul",11),O(1,xn,3,2,"li",12,at),h()),t&2){let e=a().$implicit;r(),F(e.highlights)}}function yn(t,i){if(t&1&&(m(0,"li",6)(1,"header",7)(2,"span",8),d(3),h(),m(4,"span",9),d(5),h()(),f(6,_n,2,1,"p",10)(7,vn,3,0,"ul",11),h()),t&2){let e=i.$implicit;$("settings-changelog__entry--internal",e.kind==="internal"),_("data-testid","settings-changelog-entry-"+e.version),r(3),u("v",e.version),r(2),p(e.date),r(),x(e.kind==="internal"?6:7)}}function Cn(t,i){if(t&1&&(m(0,"ol",4),O(1,yn,8,6,"li",5,mn),h()),t&2){let e=a();r(),F(e.entries())}}var Oe=class t{markdown=M(It);texts=w;entries=v([]);hasEntries=y(()=>this.entries().length>0);ngOnInit(){this.renderAll()}async renderAll(){let i=[];for(let e of Bt.entries){let n=[];for(let o of e.highlights)n.push({bodyHtml:await this.markdown.render(o.body),packages:o.packages});i.push({version:e.version,date:this.formatDate(e.date),kind:e.kind,highlights:n})}this.entries.set(i)}formatDate(i){let e=new Date(i+"T00:00:00Z");return Number.isNaN(e.getTime())?i:new Intl.DateTimeFormat("en-GB",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}).format(e)}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-changelog"]],decls:7,vars:4,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"],[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(e,n){e&1&&(m(0,"section",0)(1,"h2",1),d(2),h(),m(3,"p",2),d(4),h(),f(5,hn,2,1,"p",3)(6,Cn,3,0,"ol",4),h()),e&2&&(_("aria-labelledby","settings-changelog-heading"),r(2),u(" ",n.texts.changelogHeading," "),r(2),p(n.texts.changelogIntro),r(),x(n.hasEntries()?6:5))},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}"],changeDetection:0})};var Kt=`
1
+ import{b as Vt,c as w,d as Lt,e as Rt}from"./chunk-UVILXZ5L.js";import{a as Ct,b as wt,c as Se,d as Pe,e as kt,f as St,g as It}from"./chunk-AD7RBRD3.js";import{a as Me,b as Te,c as Ot,d as Ft,e as Dt,f as At,g as jt,h as Nt,i as re,j as ae}from"./chunk-UXCAEDR6.js";import{e as Pt,f as Ee,h as ne,i as ie,j as oe,l as Et,m as Mt,n as Tt}from"./chunk-VO6NF24F.js";import{$ as tt,Aa as rt,Ba as Y,Bc as ee,Hb as Z,I as Xe,Ic as Ce,J as Ye,Jb as pt,Jc as we,K as Je,Ka as _,Lc as ft,M as Ze,Na as f,O as M,Oa as x,Oc as xt,Pa as at,Qa as Q,Qb as ut,Ra as O,S as et,Sa as F,T as k,Ta as b,Tb as y,U as S,Ua as l,Uc as vt,Va as s,Vc as me,Wa as T,Wb as ye,Wc as yt,Xa as m,Xb as V,Ya as h,Yb as mt,Za as J,ab as st,bd as ke,cc as Be,cd as te,da as v,db as I,dc as ht,ea as N,eb as X,fb as C,ga as Le,hb as a,id as G,jd as z,ka as nt,kb as lt,la as pe,lb as dt,mb as fe,nb as xe,oa as r,oc as _t,pb as ct,pc as bt,qb as gt,sb as Re,tb as $,ub as ve,vb as ue,wa as A,wb as d,xa as it,xb as p,yb as u,za as ot,zb as R}from"./chunk-J3YWUNFO.js";import"./chunk-H2J55DNK.js";import{a as q,b as W}from"./chunk-Q7L6LLAK.js";function gn(t,i){if(t&1&&(m(0,"p",6),d(1),h()),t&2){let e=a();r(),R(" ",e.texts.aboutErrorPrefix," ",e.loadError()," ")}}var Ie=class t{dataSource=M(G);updateCheck=M(Vt);theme=M(Rt);visible=V.required();texts=w;health=v(null);loadError=v(null);markSrc=y(()=>this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");cliVersion=y(()=>this.updateCheck.current()??this.health()?.implVersion??this.texts.aboutUnknown);specVersion=y(()=>this.health()?.specVersion??this.texts.aboutLoading);schemaVersion=y(()=>this.health()?.schemaVersion??this.texts.aboutLoading);scope=y(()=>this.health()?.scope??this.texts.aboutLoading);cwd=y(()=>this.health()?.cwd??this.texts.aboutLoading);dbDisplay=y(()=>{let i=this.health();return i?this.texts.aboutDbValue(i.db,pn(i.dbPath,i.cwd)):this.texts.aboutLoading});homeDir=y(()=>this.health()?.homeDir??this.texts.aboutLoading);constructor(){N(()=>{this.visible()&&this.health()===null&&this.load()})}async load(){this.loadError.set(null);try{let i=await this.dataSource.health();this.health.set(i)}catch(i){let e=i instanceof z||i instanceof Error?i.message:String(i);this.loadError.set(e)}}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-about"]],inputs:{visible:[1,"visible"]},decls:67,vars:29,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-scope",1,"settings-about__value"],["data-testid","settings-about-cwd",1,"settings-about__value"],["data-testid","settings-about-db",1,"settings-about__value"],["data-testid","settings-about-home",1,"settings-about__value"]],template:function(e,n){e&1&&(m(0,"section",0)(1,"header",1),J(2,"img",2),m(3,"div",3)(4,"h2",4),d(5),h(),m(6,"p",5),d(7),h()()(),f(8,gn,2,2,"p",6),m(9,"a",7),J(10,"i",8),m(11,"span",9)(12,"span",10),d(13),h(),m(14,"span",11),d(15),h()(),m(16,"span",12),J(17,"i",13),d(18),h()(),m(19,"dl",14)(20,"div",15)(21,"dt",16),d(22),h(),m(23,"dd",17)(24,"a",18),d(25),h()()(),m(26,"div",15)(27,"dt",16),d(28),h(),m(29,"dd",17)(30,"a",19),d(31),h()()(),m(32,"div",15)(33,"dt",16),d(34),h(),m(35,"dd",20),d(36),h()(),m(37,"div",15)(38,"dt",16),d(39),h(),m(40,"dd",21),d(41),h()(),m(42,"div",15)(43,"dt",16),d(44),h(),m(45,"dd",22),d(46),h()(),m(47,"div",15)(48,"dt",16),d(49),h(),m(50,"dd",23),d(51),h()(),m(52,"div",15)(53,"dt",16),d(54),h(),m(55,"dd",24),d(56),h()(),m(57,"div",15)(58,"dt",16),d(59),h(),m(60,"dd",25),d(61),h()(),m(62,"div",15)(63,"dt",16),d(64),h(),m(65,"dd",26),d(66),h()()()()),e&2&&(r(2),X("src",n.markSrc(),pe),r(3),u(" ",n.texts.aboutHeading," "),r(2),p(n.texts.aboutIntro),r(),x(n.loadError()?8:-1),r(),X("href",n.texts.aboutGithubUrl,pe),_("aria-label",n.texts.aboutStarA11y),r(4),p(n.texts.aboutStarHeading),r(2),p(n.texts.aboutStarBody),r(3),u(" ",n.texts.aboutStarCta," "),r(4),p(n.texts.aboutWebsiteLabel),r(2),X("href",n.texts.aboutWebsiteUrl,pe),r(),p(n.texts.aboutWebsiteUrl),r(3),p(n.texts.aboutGithubLabel),r(2),X("href",n.texts.aboutGithubUrl,pe),r(),p(n.texts.aboutGithubUrl),r(3),p(n.texts.aboutCliLabel),r(2),u(" ",n.cliVersion()," "),r(3),p(n.texts.aboutSpecLabel),r(2),u(" ",n.specVersion()," "),r(3),p(n.texts.aboutSchemaLabel),r(2),u(" ",n.schemaVersion()," "),r(3),p(n.texts.aboutScopeLabel),r(2),u(" ",n.scope()," "),r(3),p(n.texts.aboutFolderLabel),r(2),u(" ",n.cwd()," "),r(3),p(n.texts.aboutDbLabel),r(2),u(" ",n.dbDisplay()," "),r(3),p(n.texts.aboutHomeLabel),r(2),u(" ",n.homeDir()," "))},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(--p-monospace-font-family);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})};function pn(t,i){if(!t||!i)return t;let e=i.replace(/[/\\]+$/,"");return t.startsWith(e)?t.slice(e.length).replace(/^[/\\]+/,""):t}var Bt={schemaVersion:1,entries:[{version:"0.25.0",date:"2026-05-14",kind:"user-facing",highlights:[{body:"**`sm list` and `sm show` now report tokens, not bytes.** The `BYTES` column on `sm list` is now `TOKENS` (cl100k_base, frontmatter + body), and `sm show` lists `Tokens:` instead of `Bytes:`. Sort with `--sort-by tokens_total`. `--json` is unchanged.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**`sm tutorial master`** materializes the advanced tester walkthrough (`sm-master.md`) in your cwd. Trigger it from Claude Code with `ejecut\xE1 @sm-master.md`. Bare `sm tutorial` keeps its previous behaviour and writes `sm-tutorial.md`.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.24.5",date:"2026-05-14",kind:"internal",highlights:[]},{version:"0.24.4",date:"2026-05-13",kind:"internal",highlights:[]},{version:"0.24.3",date:"2026-05-13",kind:"internal",highlights:[]},{version:"0.24.2",date:"2026-05-13",kind:"user-facing",highlights:[{body:'**Graph edge style picker** \u2014 Settings \u2192 General now has an "Edge style" control. Pick **Orthogonal**, **Straight**, **Bezier**, or **Adaptive curve** (new default) and the graph re-renders immediately. The choice is remembered in this browser only.',packages:["@skill-map/cli"]},{body:"**Edge look refresh** \u2014 graph edges now show a small **dot at the start** and arrow at the end, with thinner strokes and softer colors. Kind colors (invokes / references / mentions / supersedes) are still distinct but no longer compete with the node cards for attention.",packages:["@skill-map/cli"]},{body:"**Click an edge to highlight it** \u2014 clicking a connection in the graph now selects it: the line grows a touch thicker and saturates to its full colour (same hue as the base, just louder). Click elsewhere on the canvas to clear the selection.",packages:["@skill-map/cli"]},{body:"**Footer link icons refresh** \u2014 the incoming / outgoing link counters on each node card now use the classic **download / upload** glyphs instead of plain up / down arrows. The arrow shape stays exclusive to the graph's edges, which keeps the visual vocabulary clearer.",packages:["@skill-map/cli"]}]},{version:"0.24.1",date:"2026-05-13",kind:"user-facing",highlights:[{body:'**Graph edge style picker** \u2014 Settings \u2192 General now has an "Edge style" control. Pick **Orthogonal** (default), **Straight**, **Bezier**, or **Adaptive curve** and the graph re-renders immediately. The choice is remembered in this browser only.',packages:["@skill-map/cli"]}]},{version:"0.24.0",date:"2026-05-13",kind:"user-facing",highlights:[{body:"**CLI flags fixed.** `sm refresh`, `sm watch`, `sm jobs prune` now honor `--db` / `-g`. `sm watch` and `sm scan --watch` honor `--no-color`. `sm scan --watch` names the conflicting flag on combo errors. `sm conformance run` progress moved to stderr; `--quiet` silences it.",packages:["@skill-map/cli"]}]},{version:"0.23.1",date:"2026-05-12",kind:"user-facing",highlights:[{body:"Inspector chips and the hero card now render their variant styling (link, warn, broken, danger, hero accent border). They had silently been rendering as bare defaults since PrimeNG 21 changed how `[styleClass]` is applied to chip and card hosts.",packages:["@skill-map/cli"]}]},{version:"0.23.0",date:"2026-05-12",kind:"user-facing",highlights:[{body:'Node inspector will split actions into "Applicable" (always available) and "Recommended" (per finding). First pairing: stale sidecar recommends running `bump`. UI hookup lands in the next iteration; the spec field ships first.',packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm plugins create <id> -g` now scaffolds under `~/.skill-map/plugins/<id>` instead of the project dir. The flag was advertised in `--help` but previously ignored.",packages:["@skill-map/cli"]},{body:"`sm refresh`, `sm plugins doctor`, and `sm conformance run` now respect `--json` for machine-readable output. `sm graph --format json` is a new format that emits the full ScanResult. CI / scripts can parse these instead of the human text.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm serve` now rejects browser requests whose `Host` or `Origin` is not a loopback name. Closes a DNS-rebinding lane where a malicious page could trigger scans or settings writes. `--dev-cors` still works for Vite-style dev UIs on a different loopback port.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm` now refuses to grant the `.sm` write consent (or apply `scan.extraFolders` / `scan.referencePaths`) from user-level config. The first prompt re-appears per project. Move stray values into `<project>/.skill-map/settings.local.json` (gitignored).",packages:["@skill-map/cli"]}]},{version:"0.22.0",date:"2026-05-12",kind:"user-facing",highlights:[{body:'The "include HOME" toggle is gone. To scan paths outside the project, list them in **Extra folders to scan** (renamed from *Extra roots*). If you had `scan.includeHome: true`, add the paths you actually need (e.g. `~/.claude/agents`), not one click anymore.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.21.0",date:"2026-05-10",kind:"user-facing",highlights:[{body:"Expanded node cards now show the file path above the description and a provider chip (Claude, Gemini, Open Skills). Favorite toggle uses a star instead of a heart.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Disabling a plugin now removes its card chips from the UI immediately. Previously the chips lingered until the next `sm scan`, making the toggle look broken.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"The card footer is cleaner: the three outgoing counters (`@`-mentions, markdown links, `/`-commands) share a single `\u2193` arrow glyph on the left, and the URL counter keeps its link glyph on the right. Three legacy hardcoded chips (in / out links, external URLs) were removed.",packages:["@skill-map/cli"]},{body:"`sm plugins show core/<ext>` now resolves like `enable`/`disable` do, and `sm plugins list` marks individually-disabled extensions with `\u2715`. The `sm tutorial` content is realigned with the v0.20.0 verbs (no more `sm graph --root` / `sm export --kind` / `kind: hook` claims).",packages:["@skill-map/cli"]},{body:"The view slot `card.footer.left.counter` was renamed to `card.footer.left`, symmetrical with `card.footer.right`. Plugin authors using the old literal in `plugin.json` need to update it; the scaffolder emits the new name automatically.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"The topbar now shows the full project path under the **skill-map** wordmark, so a screenshot or a quick glance at the UI is always self-identifying. Previously only the last folder segment was shown, and projects scanned from their own root saw no path at all.",packages:["@skill-map/cli"]}]},{version:"0.20.0",date:"2026-05-10",kind:"user-facing",highlights:[{body:'**Update-check is now a user preference.** Whether you see "Update available" notifications no longer depends on the project you are scanning. The toggle moved to **Settings \u2192 General**; the CLI equivalent is `sm config set -g updateCheck.enabled <bool>`.',packages:["@skill-map/cli"]},{body:"**`sm scan` now flags orphan job files.** A new check scans `.skill-map/jobs/` for MD files that no DB row references and reports each as a `warn` issue. To delete the files, run `sm bump prune --orphan-files` (unchanged).",packages:["@skill-map/cli"]},{body:"**`sm scan -g` now scans your HOME directory.** Run `sm scan -g` (without positional roots) to walk every active provider's HOME dir, typically `~/.claude`, `~/.gemini`, `~/.agents`, using the global config + DB.",packages:["@skill-map/cli"]},{body:"**Three new privacy-sensitive project settings** in Settings \u2192 Project: *include HOME provider directories*, *extra scan roots*, and *reference paths for link validation*. Every change that expands disk access beyond your project root requires explicit confirmation.",packages:["@skill-map/cli"]},{body:'**Reset Layout uses a proper dialog.** The "Reset all node positions" action used to fire a browser-native `confirm()` popup; it now uses the in-app dialog style with a destructive-styled "Reset" button and a "Cancel" escape.',packages:["@skill-map/cli"]},{body:'**Plugins can be locked by the host.** Settings \u2192 Plugins shows a "Locked" pill on plugins marked as mandatory (today only `core/markdown`, the universal `.md` fallback). The toggle stays visible but disabled, with a tooltip explaining why.',packages:["@skill-map/cli"]}]},{version:"0.19.0",date:"2026-05-09",kind:"user-facing",highlights:[{body:"**Settings \u2192 Changelog.** The Changelog tab in Settings now lists what's new in skill-map: one entry per release, newest first, bullet points for the user-facing changes. Bundled with the demo so it's available offline too.",packages:["@skill-map/cli"]},{body:"**Tags zoom-to-matching.** Clicking a tag chip in the inspector now pans + zooms the graph to fit every node that carries the tag. Click the same chip again to clear the selection and return to the previous view.",packages:["@skill-map/cli"]}]},{version:"0.18.0",date:"2026-05-07",kind:"user-facing",highlights:[{body:"**Bump sidecars in batch.** New `sm bump --pending` walks every node whose `.sm` sidecar reports drift and refreshes them in one pass. Single-node `sm bump <path>` also lands.",packages:["@skill-map/cli"]},{body:'**Annotation field dropped: `released`.** Redundant with `audit.lastBumpedAt`. The inspector and node card now read the activity timestamp from the `audit:` block, no more confusion between "officially released" and "last bumped".',packages:["@skill-map/cli"]}]},{version:"0.17.0",date:"2026-04-29",kind:"user-facing",highlights:[{body:"**Per-node chips in the graph card and inspector.** Plugins can now decorate nodes with counters, alerts, and key-value rows. Two come built-in: external-URL count per node, and in/out link counts.",packages:["@skill-map/cli"]},{body:"**Multi-provider graphs.** Claude, Gemini, and the open-standard `agent-skills` flavour now coexist in the same graph. Cards paint with each Provider's accent; the kind palette in the graph view filters on the actual node kind names.",packages:["@skill-map/cli"]}]}]};var zt=Bt;var mn=(t,i)=>i.version;function hn(t,i){if(t&1&&(m(0,"p",3),d(1),h()),t&2){let e=a();r(),u(" ",e.texts.changelogEmpty," ")}}function _n(t,i){if(t&1&&(m(0,"p",10),d(1),h()),t&2){let e=a(3);r(),u(" ",e.texts.changelogInternalRelease," ")}}function bn(t,i){if(t&1&&(m(0,"li",15),d(1),h()),t&2){let e=i.$implicit;r(),p(e)}}function fn(t,i){if(t&1&&(m(0,"ul",14),O(1,bn,2,1,"li",15,Q),h()),t&2){let e=a().$implicit,n=a(4);_("aria-label",n.texts.changelogAffectedPackages),r(),F(e.packages)}}function xn(t,i){if(t&1&&(m(0,"li",12),J(1,"div",13),f(2,fn,3,1,"ul",14),h()),t&2){let e=i.$implicit;r(),X("innerHTML",e.bodyHtml,nt),r(),x(e.packages.length?2:-1)}}function vn(t,i){if(t&1&&(m(0,"ul",11),O(1,xn,3,2,"li",12,at),h()),t&2){let e=a().$implicit;r(),F(e.highlights)}}function yn(t,i){if(t&1&&(m(0,"li",6)(1,"header",7)(2,"span",8),d(3),h(),m(4,"span",9),d(5),h()(),f(6,_n,2,1,"p",10)(7,vn,3,0,"ul",11),h()),t&2){let e=i.$implicit;$("settings-changelog__entry--internal",e.kind==="internal"),_("data-testid","settings-changelog-entry-"+e.version),r(3),u("v",e.version),r(2),p(e.date),r(),x(e.kind==="internal"?6:7)}}function Cn(t,i){if(t&1&&(m(0,"ol",4),O(1,yn,8,6,"li",5,mn),h()),t&2){let e=a();r(),F(e.entries())}}var Oe=class t{markdown=M(It);texts=w;entries=v([]);hasEntries=y(()=>this.entries().length>0);ngOnInit(){this.renderAll()}async renderAll(){let i=[];for(let e of zt.entries){let n=[];for(let o of e.highlights)n.push({bodyHtml:await this.markdown.render(o.body),packages:o.packages});i.push({version:e.version,date:this.formatDate(e.date),kind:e.kind,highlights:n})}this.entries.set(i)}formatDate(i){let e=new Date(i+"T00:00:00Z");return Number.isNaN(e.getTime())?i:new Intl.DateTimeFormat("en-GB",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}).format(e)}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-changelog"]],decls:7,vars:4,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"],[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(e,n){e&1&&(m(0,"section",0)(1,"h2",1),d(2),h(),m(3,"p",2),d(4),h(),f(5,hn,2,1,"p",3)(6,Cn,3,0,"ol",4),h()),e&2&&(_("aria-labelledby","settings-changelog-heading"),r(2),u(" ",n.texts.changelogHeading," "),r(2),p(n.texts.changelogIntro),r(),x(n.hasEntries()?6:5))},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}"],changeDetection:0})};var Kt=`
2
2
  .p-toggleswitch {
3
3
  display: inline-block;
4
4
  width: dt('toggleswitch.width');
@@ -118,6 +118,6 @@ import{b as Vt,c as w,d as Lt,e as Rt}from"./chunk-UVILXZ5L.js";import{a as Ct,b
118
118
  p-toggleswitch.ng-invalid.ng-dirty > .p-toggleswitch-slider {
119
119
  border-color: dt('toggleswitch.invalid.border.color');
120
120
  }
121
- `,Tn={root:{position:"relative"}},In={root:({instance:t})=>["p-toggleswitch p-component",{"p-toggleswitch p-component":!0,"p-toggleswitch-checked":t.checked(),"p-disabled":t.$disabled(),"p-invalid":t.invalid()}],input:"p-toggleswitch-input",slider:"p-toggleswitch-slider",handle:"p-toggleswitch-handle"},$t=(()=>{class t extends ft{name="toggleswitch";style=Mn;classes=In;inlineStyles=Tn;static \u0275fac=(()=>{let e;return function(o){return(e||(e=Le(t)))(o||t)}})();static \u0275prov=Ye({token:t,factory:t.\u0275fac})}return t})();var Gt=new Ze("TOGGLESWITCH_INSTANCE"),On={provide:Pt,useExisting:Xe(()=>le),multi:!0},le=(()=>{class t extends Et{componentName="ToggleSwitch";$pcToggleSwitch=M(Gt,{optional:!0,skipSelf:!0})??void 0;bindDirectiveInstance=M(me,{self:!0});onAfterViewChecked(){this.bindDirectiveInstance.setAttrs(this.ptms(["host","root"]))}styleClass;tabindex;inputId;readonly;trueValue=!0;falseValue=!1;ariaLabel;size=V();ariaLabelledBy;autofocus;onChange=new tt;input;handleTemplate;_handleTemplate;focused=!1;_componentStyle=M($t);templates;onHostClick(e){this.onClick(e)}onAfterContentInit(){this.templates.forEach(e=>{e.getType()==="handle"?this._handleTemplate=e.template:this._handleTemplate=e.template})}onClick(e){!this.$disabled()&&!this.readonly&&(this.writeModelValue(this.checked()?this.falseValue:this.trueValue),this.onModelChange(this.modelValue()),this.onChange.emit({originalEvent:e,checked:this.modelValue()}),this.input.nativeElement.focus())}onFocus(){this.focused=!0}onBlur(){this.focused=!1,this.onModelTouched()}checked(){return this.modelValue()===this.trueValue}writeControlValue(e,n){n(e),this.cd.markForCheck()}get dataP(){return this.cn({checked:this.checked(),disabled:this.$disabled(),invalid:this.invalid()})}static \u0275fac=(()=>{let e;return function(o){return(e||(e=Le(t)))(o||t)}})();static \u0275cmp=A({type:t,selectors:[["p-toggleswitch"],["p-toggleSwitch"],["p-toggle-switch"]],contentQueries:function(n,o,c){if(n&1&&lt(c,wn,4)(c,Ce,4),n&2){let g;fe(g=xe())&&(o.handleTemplate=g.first),fe(g=xe())&&(o.templates=g)}},viewQuery:function(n,o){if(n&1&&dt(kn,5),n&2){let c;fe(c=xe())&&(o.input=c.first)}},hostVars:7,hostBindings:function(n,o){n&1&&C("click",function(g){return o.onHostClick(g)}),n&2&&(_("data-p-checked",o.checked())("data-p-disabled",o.$disabled())("data-p",o.dataP),ve(o.sx("root")),ue(o.cn(o.cx("root"),o.styleClass)))},inputs:{styleClass:"styleClass",tabindex:[2,"tabindex","tabindex",ht],inputId:"inputId",readonly:[2,"readonly","readonly",ze],trueValue:"trueValue",falseValue:"falseValue",ariaLabel:"ariaLabel",size:[1,"size"],ariaLabelledBy:"ariaLabelledBy",autofocus:[2,"autofocus","autofocus",ze]},outputs:{onChange:"onChange"},features:[Z([On,$t,{provide:Gt,useExisting:t},{provide:xt,useExisting:t}]),ot([me]),rt],decls:5,vars:22,consts:[["input",""],["type","checkbox","role","switch",3,"focus","blur","checked","pAutoFocus","pBind"],[3,"pBind"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(n,o){n&1&&(l(0,"input",1,0),C("focus",function(){return o.onFocus()})("blur",function(){return o.onBlur()}),s(),l(2,"div",2)(3,"div",2),f(4,En,1,4,"ng-container"),s()()),n&2&&(ue(o.cx("input")),b("checked",o.checked())("pAutoFocus",o.autofocus)("pBind",o.ptm("input")),_("id",o.inputId)("required",o.required()?"":void 0)("disabled",o.$disabled()?"":void 0)("aria-checked",o.checked())("aria-labelledby",o.ariaLabelledBy)("aria-label",o.ariaLabel)("name",o.name())("tabindex",o.tabindex),r(2),ue(o.cx("slider")),b("pBind",o.ptm("slider")),_("data-p",o.dataP),r(),ue(o.cx("handle")),b("pBind",o.ptm("handle")),_("data-p",o.dataP),r(),x(o.handleTemplate||o._handleTemplate?4:-1))},dependencies:[bt,_t,vt,we,yt,me],encapsulation:2,changeDetection:0})}return t})(),Fe=(()=>{class t{static \u0275fac=function(n){return new(n||t)};static \u0275mod=it({type:t});static \u0275inj=Je({imports:[le,we,we]})}return t})();var Fn=(t,i)=>i.key;function Dn(t,i){if(t&1&&(l(0,"p-message",3),d(1),s()),t&2){let e=a();b("closable",!1),r(),R(" ",e.texts.general.loadErrorPrefix," ",i," ")}}function An(t,i){if(t&1&&(l(0,"p-message",4),d(1),s()),t&2){let e=a();b("closable",!1),r(),R(" ",e.texts.general.saveErrorPrefix," ",i," ")}}function jn(t,i){if(t&1){let e=I();l(0,"li",6)(1,"div",9)(2,"div",10),d(3),s(),l(4,"div",11),d(5),s()(),l(6,"p-toggleswitch",14),C("ngModelChange",function(o){let c=k(e).$implicit,g=a();return S(g.onToggle(c,o))}),s()()}if(t&2){let e=i.$implicit,n=a();_("data-testid","settings-general-row-"+e.key),r(3),p(n.toggleLabel(e.key)),r(2),u(" ",n.toggleDescription(e.key)," "),r(),b("ngModel",n.valueOf(e))("disabled",n.loading()||n.isPending(e.key)||n.preferences()===null),_("data-testid","settings-general-toggle-"+e.key)}}function Nn(t,i){if(t&1&&(l(0,"span",15),d(1),s()),t&2){let e=i.$implicit,n=a();r(),u(" ",n.connectionTypeLabel(e.labelKey)," ")}}var Vn=[{key:"updateCheck.enabled",read:t=>t.updateCheck.enabled,patch:t=>({updateCheck:{enabled:t}})}],Ln=kt.map(t=>({value:t,labelKey:t})),De=class t{dataSource=M(G);graphPreferences=M(St);visible=V.required();texts=w;toggles=Vn;connectionTypeOptions=Ln;connectionType=this.graphPreferences.connectionType;loading=v(!1);loadError=v(null);saveError=v(null);preferences=v(null);pending=v(new Set);constructor(){N(()=>{this.visible()&&this.refresh()})}toggleLabel(i){return w.general.toggles[i].label}toggleDescription(i){return w.general.toggles[i].description}valueOf(i){let e=this.preferences();return e?i.read(e):!1}isPending(i){return this.pending().has(i)}onToggle(i,e){this.runToggle(i,e)}onConnectionTypeChange(i){i!==null&&this.graphPreferences.setConnectionType(i)}connectionTypeLabel(i){return w.general.connectionType.options[i].label}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let i=await this.dataSource.getPreferences();this.preferences.set(i)}catch(i){this.loadError.set(Ut(i)),this.preferences.set(null)}finally{this.loading.set(!1)}}async runToggle(i,e){if(this.pending().has(i.key))return;let n=new Set(this.pending());n.add(i.key),this.pending.set(n),this.saveError.set(null);try{let o=await this.dataSource.setPreferences(i.patch(e));this.preferences.set(o)}catch(o){this.saveError.set(Ut(o))}finally{let o=new Set(this.pending());o.delete(i.key),this.pending.set(o)}}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-general"]],inputs:{visible:[1,"visible"]},decls:23,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"],[1,"settings-general__subheading"],["data-testid","settings-general-row-connection-type",1,"settings-general__row","settings-general__row--stacked"],[1,"settings-general__row-text"],[1,"settings-general__row-label"],[1,"settings-general__row-description"],["optionLabel","labelKey","optionValue","value","data-testid","settings-general-connection-type",3,"ngModelChange","options","ngModel","allowEmpty"],["pTemplate","item"],[3,"ngModelChange","ngModel","disabled"],["data-testid","settings-general-connection-type-option"]],template:function(e,n){if(e&1&&(l(0,"section",0)(1,"h2",1),d(2),s(),l(3,"p",2),d(4),s(),f(5,Dn,2,3,"p-message",3),f(6,An,2,3,"p-message",4),l(7,"ul",5),O(8,jn,7,6,"li",6,Fn),s(),l(10,"h3",7),d(11),s(),l(12,"p",2),d(13),s(),l(14,"ul",5)(15,"li",8)(16,"div",9)(17,"div",10),d(18),s(),l(19,"div",11),d(20),s()(),l(21,"p-selectbutton",12),C("ngModelChange",function(c){return n.onConnectionTypeChange(c)}),Y(22,Nn,2,1,"ng-template",13),s()()()()),e&2){let o,c;_("aria-labelledby","settings-general-heading"),r(2),u(" ",n.texts.general.heading," "),r(2),p(n.texts.general.intro),r(),x((o=n.loadError())?5:-1,o),r(),x((c=n.saveError())?6:-1,c),r(2),F(n.toggles),r(3),u(" ",n.texts.general.localPreferences.heading," "),r(2),u(" ",n.texts.general.localPreferences.intro," "),r(5),u(" ",n.texts.general.connectionType.label," "),r(2),u(" ",n.texts.general.connectionType.description," "),r(),b("options",n.connectionTypeOptions)("ngModel",n.connectionType())("allowEmpty",!1)}},dependencies:[oe,ne,ie,ae,re,Ce,Nt,jt,Fe,le],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:.5rem;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-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__subheading[_ngcontent-%COMP%]{margin:1.75rem 0 .25rem;font-size:.95rem;font-weight:600;color:var(--p-text-color)}.settings-general__row--stacked[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch;gap:.65rem}"],changeDetection:0})};function Ut(t){return t instanceof B||t instanceof Error?t.message:String(t)}var Be={provider:"#7C3AED",extractor:"#A78BFA",analyzer:"#5FD17C",action:"#00C853",formatter:"#5BC0EB",hook:"#FFB627"};function Qt(t){let i=t.toLowerCase();return Be[i]??"currentColor"}var Ne=["all",...Object.keys(Be)],Ae=["claude","gemini","agent-skills","core"],je=["provider","extractor","analyzer","action","formatter","hook"];function de(t,i){return`${t}/${i}`}function Ke(t){let i=new Map;for(let e of t)if(!ce(e.status)){if(e.granularity==="bundle"){i.set(e.id,e.status==="enabled");continue}if(e.granularity==="extension"&&e.extensions)for(let n of e.extensions)i.set(de(e.id,n.id),n.enabled)}return i}function $e(t){let i=t.target;return!i||typeof i.closest!="function"?!1:i.closest('label, button, input, [role="switch"], p-toggleswitch')!==null}function Xt(t,i){if(Rn(t,i))return[t];if(t.granularity!=="extension"||!t.extensions)return[];let e=t.extensions.filter(n=>zn(n,i));return e.length===0?[]:[W(q({},t),{extensions:e})]}function Yt(t,i){if(t.granularity==="bundle")return t.kinds.some(n=>n.toLowerCase()===i)?[t]:[];if(!t.extensions)return[];let e=t.extensions.filter(n=>n.kind.toLowerCase()===i);return e.length===0?[]:[W(q({},t),{extensions:e})]}function Jt(t){if(t.locked)return[];if(t.granularity!=="extension"||!t.extensions)return[t];let i=t.extensions.filter(e=>!e.locked);return i.length===0?[]:[W(q({},t),{extensions:i})]}function Zt(t){return t.slice().sort((e,n)=>{let o=Ae.indexOf(e.id),c=Ae.indexOf(n.id),g=o>=0?o:Ae.length,P=c>=0?c:Ae.length;return g!==P?g-P:e.id.localeCompare(n.id)}).map(e=>{if(e.granularity!=="extension"||!e.extensions)return e;let n=e.extensions.slice().sort((o,c)=>{let g=je.indexOf(o.kind.toLowerCase()),P=je.indexOf(c.kind.toLowerCase()),K=g>=0?g:je.length,L=P>=0?P:je.length;return K!==L?K-L:o.id.localeCompare(c.id)});return W(q({},e),{extensions:n})})}function Rn(t,i){return!!(t.id.toLowerCase().includes(i)||t.description&&t.description.toLowerCase().includes(i))}function zn(t,i){return!!(t.id.toLowerCase().includes(i)||t.description&&t.description.toLowerCase().includes(i))}function ce(t){return t==="incompatible-spec"||t==="invalid-manifest"||t==="load-error"||t==="id-collision"}function Ge(t){return t instanceof B||t instanceof Error?t.message:String(t)}function en(t,i){return ce(t.status)?i.statusFailure[t.status]??t.status:t.status==="enabled"?i.enabledLabel:i.disabledLabel}function tn(t,i){switch(t){case"built-in":return i.sourceBuiltIn;case"project":return i.sourceProject;case"global":return i.sourceGlobal}}var He="sm.settings.plugins.collapsed",Ue="sm.settings.plugins.kind-filter";function nn(){let t=null;try{t=localStorage.getItem(He)}catch{return new Set}if(!t)return new Set;let i;try{i=JSON.parse(t)}catch{return new Set}if(!Array.isArray(i))return new Set;let e=new Set;for(let n of i)typeof n=="string"&&n.length>0&&e.add(n);return e}function on(t){try{if(t.size===0){localStorage.removeItem(He);return}localStorage.setItem(He,JSON.stringify([...t]))}catch{}}function rn(){let t=null;try{t=localStorage.getItem(Ue)}catch{return"all"}return t&&Ne.includes(t)?t:"all"}function an(t){try{if(t==="all"){localStorage.removeItem(Ue);return}localStorage.setItem(Ue,t)}catch{}}function qe(){et(qe);let t=v(nn());N(()=>on(t()));let i=n=>{let o=new Set(t());o.has(n)?o.delete(n):o.add(n),t.set(o)},e=n=>!t().has(n);return{collapsed:t.asReadonly(),toggleExpanded:i,isExpanded:e}}function sn(t){let i=v(""),e=y(()=>i().trim().length>0),n=v(rn()),o=y(()=>n()!=="all");N(()=>an(n()));let c=y(()=>Zt(t.plugins().flatMap(Jt))),g=y(()=>{let L=i().trim().toLowerCase(),_e=n(),H=c();return _e!=="all"&&(H=H.flatMap(be=>Yt(be,_e))),L.length>0&&(H=H.flatMap(be=>Xt(be,L))),H});return{searchText:i,searchActive:e,kindFilter:n,setKindFilter:L=>{n.set(L)},isKindFilterActive:L=>n()===L,kindFilterActive:o,kindFilterOptions:Ne,visiblePlugins:c,filteredPlugins:g}}function ln(t){let i=v(!1),e=v(null),n=v(null),o=v([]),c=v(new Map),g=v(new Map),P=v(!1),K=y(()=>{let E=c(),D=g(),z=new Set;for(let[U,j]of D)E.get(U)!==j&&z.add(U);return z}),L=y(()=>K().size>0),_e=y(()=>o().some(E=>ce(E.status))),H=y(()=>{let E=g();for(let D of o())if(D.startsAsDisabled===!0&&E.get(D.id)===!0)return!0;return!1});return{plugins:o,loading:i,loadError:e,toggleError:n,applying:P,hasFailureRows:_e,originalState:c,pendingState:g,dirtyIds:K,hasPendingChanges:L,restartRecommended:H,pendingEnabled:E=>g().get(E)??!1,isDirty:E=>K().has(E),refresh:async()=>{i.set(!0),e.set(null),n.set(null);try{let E=await t.dataSource.listPlugins();o.set([...E.items]);let D=Ke(E.items);c.set(D),g.set(new Map(D))}catch(E){e.set(Ge(E)),o.set([]),c.set(new Map),g.set(new Map)}finally{i.set(!1)}},onBundleToggle:(E,D)=>{if(P())return;let z=new Map(g());z.set(E.id,D),g.set(z)},onExtensionToggle:(E,D,z)=>{if(P())return;let U=de(E,D.id),j=new Map(g());j.set(U,z),g.set(j)},applyChanges:async()=>{if(P())return{ok:!1};let E=K();if(E.size===0)return{ok:!1};let D=[],z=g();for(let j of E)D.push({id:j,enabled:z.get(j)??!1});P.set(!0),n.set(null);let U=!1;try{let j=await t.dataSource.applyPluginChanges(D);o.set([...j.items]);let Qe=Ke(j.items);c.set(Qe),g.set(new Map(Qe)),t.scanTrigger.run(),U=!0}catch(j){n.set(Ge(j))}finally{P.set(!1)}return{ok:U}},discardChanges:()=>{g.set(new Map(c())),n.set(null)}}}var dn=(t,i)=>i.id;function $n(t,i){if(t&1&&d(0),t&2){let e=a().$implicit,n=a();u(" ",e==="all"?n.texts.pluginsKindFilterAll:e," ")}}function Gn(t,i){if(t&1){let e=I();l(0,"p-togglebutton",16),C("ngModelChange",function(){let o=k(e).$implicit,c=a();return S(c.setKindFilter(o))}),Y(1,$n,1,1,"ng-template",null,0,ut),s()}if(t&2){let e=i.$implicit,n=a();Re("--kind-color",e==="all"?null:n.kindTint(e)),b("ngModel",n.isKindFilterActive(e))("styleClass","settings-plugins__kind-chip"+(e==="all"?" is-all":""))("ariaLabel",n.texts.pluginsKindFilterOptionA11y(e,!n.isKindFilterActive(e))),_("data-testid","settings-plugins-kind-chip-"+e)}}function Hn(t,i){if(t&1&&(l(0,"p-message",11),d(1),s()),t&2){let e=a();b("closable",!1),r(),u(" ",e.texts.unsavedChangesMessage(e.dirtyIds().size)," ")}}function Un(t,i){if(t&1&&(l(0,"p",12),T(1,"i",17),d(2),s()),t&2){let e=a();r(2),u(" ",e.texts.loading," ")}}function qn(t,i){if(t&1&&(l(0,"p-message",13),d(1),s()),t&2){let e=a();b("closable",!1),r(),R(" ",e.texts.errorPrefix," ",e.loadError()," ")}}function Wn(t,i){if(t&1&&(l(0,"p",14),d(1),s()),t&2){let e=a();r(),u(" ",e.texts.empty," ")}}function Qn(t,i){if(t&1){let e=I();l(0,"p-message",22),C("onClose",function(){k(e);let o=a(2);return S(o.toggleError.set(null))}),d(1),s()}if(t&2){let e=a(2);b("closable",!0),r(),R(" ",e.texts.toggleErrorPrefix," ",e.toggleError()," ")}}function Xn(t,i){if(t&1&&(l(0,"p",19),T(1,"i",23),d(2),s()),t&2){let e=a(2);r(2),u(" ",e.texts.pluginsSearchEmpty(e.searchText())," ")}}function Yn(t,i){if(t&1){let e=I();l(0,"button",41),C("click",function(o){k(e);let c=a().$implicit;return a(2).toggleExpanded(c.id),S(o.stopPropagation())}),T(1,"i",42),s()}if(t&2){let e=a().$implicit,n=a(2);_("aria-expanded",n.isExpanded(e.id))("aria-label",n.isExpanded(e.id)?n.texts.collapseLabel:n.texts.expandLabel)("data-testid","settings-bundle-expand-"+e.id),r(),$("fa-chevron-down",n.isExpanded(e.id))("fa-chevron-right",!n.isExpanded(e.id))}}function Jn(t,i){t&1&&T(0,"span",27)}function Zn(t,i){if(t&1&&T(0,"span",30),t&2){let e=a().$implicit;_("data-testid","settings-row-dirty-"+e.id)}}function ei(t,i){if(t&1&&(l(0,"span",33),d(1),s()),t&2){let e=a().$implicit;r(),u("v",e.version)}}function ti(t,i){if(t&1&&(l(0,"span",34),T(1,"i",43),d(2),s()),t&2){let e=a().$implicit,n=a(2);b("title",n.texts.lockedTooltip),_("data-testid","settings-row-locked-"+e.id),r(2),u(" ",n.texts.lockedLabel," ")}}function ni(t,i){if(t&1&&(l(0,"span",35),d(1),s()),t&2){let e=a().$implicit,n=a(2);r(),p(n.statusLabel(e))}}function ii(t,i){if(t&1&&(l(0,"p",36),d(1),s()),t&2){let e=a().$implicit;r(),p(e.description)}}function oi(t,i){if(t&1&&(l(0,"span",37),d(1),s()),t&2){let e=a().$implicit;r(),p(e.reason)}}function ri(t,i){if(t&1&&(l(0,"p",38),T(1,"i",44),d(2),s()),t&2){let e=a().$implicit,n=a(2);_("data-testid","settings-row-starts-disabled-"+e.id),r(2),u(" ",n.texts.startsAsDisabledRowHint," ")}}function ai(t,i){if(t&1){let e=I();l(0,"p-toggleswitch",45),C("ngModelChange",function(o){k(e);let c=a().$implicit,g=a(2);return S(g.onBundleToggle(c,o))}),s()}if(t&2){let e=a().$implicit,n=a(2);b("ngModel",n.pendingEnabled(e.id))("disabled",n.applying()||!!e.locked)("ariaLabel",n.texts.a11y.pluginToggle(e.id,!n.pendingEnabled(e.id))),_("data-testid","settings-toggle-"+e.id)}}function si(t,i){if(t&1&&T(0,"span",30),t&2){let e=a().$implicit,n=a(2).$implicit;_("data-testid","settings-extrow-dirty-"+n.id+"-"+e.id)}}function li(t,i){if(t&1&&(l(0,"span",34),T(1,"i",43),d(2),s()),t&2){let e=a().$implicit,n=a(2).$implicit,o=a(2);b("title",o.texts.lockedTooltip),_("data-testid","settings-extrow-locked-"+n.id+"-"+e.id),r(2),u(" ",o.texts.lockedLabel," ")}}function di(t,i){if(t&1&&(l(0,"p",53),d(1),s()),t&2){let e=a().$implicit;r(),p(e.description)}}function ci(t,i){if(t&1){let e=I();l(0,"li",47),C("click",function(o){let c=k(e).$implicit,g=a(2).$implicit,P=a(2);return S(P.onSubrowClick(g.id,c,o))})("keydown.enter",function(o){let c=k(e).$implicit,g=a(2).$implicit,P=a(2);return S(P.onSubrowClick(g.id,c,o))})("keydown.space",function(o){let c=k(e).$implicit,g=a(2).$implicit,P=a(2);return o.preventDefault(),S(P.onSubrowClick(g.id,c,o))}),l(1,"div",48)(2,"div",49),f(3,si,1,1,"span",30),l(4,"span",50),d(5),s(),l(6,"span",51),d(7),s(),l(8,"span",52),d(9),s(),f(10,li,3,3,"span",34),s(),f(11,di,2,1,"p",53),s(),l(12,"p-toggleswitch",45),C("ngModelChange",function(o){let c=k(e).$implicit,g=a(2).$implicit,P=a(2);return S(P.onExtensionToggle(g.id,c,o))}),s()()}if(t&2){let e=i.$implicit,n=a(2).$implicit,o=a(2);$("is-clickable",o.extensionToggleInteractive(e))("is-dirty",o.isDirty(o.qualifiedExt(n.id,e.id))),_("aria-label",o.texts.a11y.extensionRow(o.qualifiedExt(n.id,e.id)))("data-testid","settings-extrow-"+n.id+"-"+e.id),r(3),x(o.isDirty(o.qualifiedExt(n.id,e.id))?3:-1),r(2),p(e.id),r(),Re("--kind-color",o.kindTint(e.kind)),r(),p(e.kind),r(2),u("v",e.version),r(),x(e.locked?10:-1),r(),x(e.description?11:-1),r(),b("ngModel",o.pendingEnabled(o.qualifiedExt(n.id,e.id)))("disabled",o.applying()||!!e.locked)("ariaLabel",o.texts.a11y.extensionToggle(o.qualifiedExt(n.id,e.id),!o.pendingEnabled(o.qualifiedExt(n.id,e.id)))),_("data-testid","settings-ext-toggle-"+n.id+"-"+e.id)}}function gi(t,i){if(t&1&&(l(0,"ul",40),O(1,ci,13,18,"li",46,dn),s()),t&2){let e=a().$implicit;_("data-testid","settings-extensions-"+e.id),r(),F(e.extensions)}}function pi(t,i){if(t&1){let e=I();l(0,"li",24)(1,"div",25),C("click",function(o){let c=k(e).$implicit,g=a(2);return S(g.onRowClick(c,o))})("keydown.enter",function(o){let c=k(e).$implicit,g=a(2);return S(g.onRowClick(c,o))})("keydown.space",function(o){let c=k(e).$implicit,g=a(2);return o.preventDefault(),S(g.onRowClick(c,o))}),f(2,Yn,2,7,"button",26)(3,Jn,1,0,"span",27),l(4,"div",28)(5,"div",29),f(6,Zn,1,1,"span",30),l(7,"span",31),d(8),s(),l(9,"span",32),d(10),s(),f(11,ei,2,1,"span",33),f(12,ti,3,3,"span",34),f(13,ni,2,1,"span",35),s(),f(14,ii,2,1,"p",36),f(15,oi,2,1,"span",37),f(16,ri,3,2,"p",38),s(),f(17,ai,1,4,"p-toggleswitch",39),s(),f(18,gi,3,1,"ul",40),s()}if(t&2){let e=i.$implicit,n=a(2);$("is-extension-bundle",e.granularity==="extension")("is-failed",!n.canToggleBundle(e)&&e.granularity==="bundle")("is-clickable",n.rowIsClickable(e))("is-dirty",e.granularity==="bundle"&&n.isDirty(e.id)),_("data-testid","settings-row-"+e.id),r(),_("aria-label",n.texts.a11y.pluginRow(e.id)),r(),x(e.granularity==="extension"&&(e.extensions!=null&&e.extensions.length)?2:3),r(4),x(e.granularity==="bundle"&&n.isDirty(e.id)?6:-1),r(2),p(e.id),r(2),p(n.sourceLabel(e.source)),r(),x(e.version?11:-1),r(),x(e.locked?12:-1),r(),x(!n.canToggleBundle(e)&&e.granularity==="bundle"?13:-1),r(),x(e.description?14:-1),r(),x(e.reason?15:-1),r(),x(n.showStartsAsDisabledHint(e)?16:-1),r(),x(n.canToggleBundle(e)?17:-1),r(),x(e.granularity==="extension"&&(e.extensions!=null&&e.extensions.length)&&n.isExpanded(e.id)?18:-1)}}function ui(t,i){if(t&1&&(f(0,Qn,2,3,"p-message",18),f(1,Xn,3,1,"p",19),l(2,"ul",20),O(3,pi,19,22,"li",21,dn),s()),t&2){let e=a();x(e.toggleError()?0:-1),r(),x(e.searchActive()&&e.filteredPlugins().length===0?1:-1),r(2),F(e.filteredPlugins())}}function mi(t,i){if(t&1&&(l(0,"em",54),d(1),s()),t&2){let e=a(2);r(),u(" ",e.texts.startsAsDisabledFooterHint," ")}}function hi(t,i){if(t&1){let e=I();l(0,"footer",15),f(1,mi,2,1,"em",54),l(2,"p-button",55),C("onClick",function(){k(e);let o=a();return S(o.discardChanges())}),s(),l(3,"p-button",56),C("onClick",function(){k(e);let o=a();return S(o.applyChanges())}),s()()}if(t&2){let e=a();r(),x(e.restartRecommended()?1:-1),r(),b("text",!0)("label",e.texts.discardChanges)("ariaLabel",e.texts.discardA11y)("disabled",e.applying()),r(),b("label",e.texts.applyAndClose)("ariaLabel",e.texts.applyA11y)("disabled",e.applying())("loading",e.applying())}}var ge=class t{dataSource=M(G);scanTrigger=M(Lt);visible=V.required();applied=ye();texts=w;pluginState=ln({dataSource:this.dataSource,scanTrigger:this.scanTrigger});plugins=this.pluginState.plugins;loading=this.pluginState.loading;loadError=this.pluginState.loadError;toggleError=this.pluginState.toggleError;applying=this.pluginState.applying;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=qe();collapsed=this.pluginCollapse.collapsed;pluginFilter=sn({plugins:this.plugins});searchText=this.pluginFilter.searchText;searchActive=this.pluginFilter.searchActive;kindFilter=this.pluginFilter.kindFilter;kindFilterActive=this.pluginFilter.kindFilterActive;kindFilterOptions=this.pluginFilter.kindFilterOptions;visiblePlugins=this.pluginFilter.visiblePlugins;filteredPlugins=this.pluginFilter.filteredPlugins;constructor(){N(()=>{this.visible()&&this.pluginState.refresh()})}setKindFilter(i){this.pluginFilter.setKindFilter(i)}isKindFilterActive(i){return this.pluginFilter.isKindFilterActive(i)}toggleExpanded(i){this.pluginCollapse.toggleExpanded(i)}isExpanded(i){return this.pluginCollapse.isExpanded(i)}pendingEnabled(i){return this.pluginState.pendingEnabled(i)}isDirty(i){return this.pluginState.isDirty(i)}showStartsAsDisabledHint(i){return i.startsAsDisabled?this.pendingEnabled(i.id):!1}onBundleToggle(i,e){this.pluginState.onBundleToggle(i,e)}onExtensionToggle(i,e,n){this.pluginState.onExtensionToggle(i,e,n)}async applyChanges(){(await this.pluginState.applyChanges()).ok&&this.applied.emit()}discardChanges(){this.pluginState.discardChanges()}canToggleBundle(i){return i.granularity==="extension"?!1:!ce(i.status)}bundleToggleInteractive(i){return this.canToggleBundle(i)&&!i.locked}extensionToggleInteractive(i){return!i.locked}rowIsClickable(i){return!!(this.bundleToggleInteractive(i)||i.granularity==="extension"&&(i.extensions?.length??0)>0)}onRowClick(i,e){if(!$e(e)){if(this.bundleToggleInteractive(i)){this.onBundleToggle(i,!this.pendingEnabled(i.id));return}i.granularity==="extension"&&(i.extensions?.length??0)>0&&this.toggleExpanded(i.id)}}onSubrowClick(i,e,n){if($e(n)||!this.extensionToggleInteractive(e))return;let o=de(i,e.id);this.onExtensionToggle(i,e,!this.pendingEnabled(o))}statusLabel(i){return en(i,this.texts)}sourceLabel(i){return tn(i,this.texts)}qualifiedExt(i,e){return de(i,e)}kindTint(i){return Qt(i)}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-plugins"]],inputs:{visible:[1,"visible"]},outputs:{applied:"applied"},decls:19,vars:9,consts:[["content",""],["aria-labelledby","settings-plugins-heading",1,"settings-plugins"],[1,"settings-plugins__scroll"],[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-kind-filter",1,"settings-plugins__kind-filter"],[3,"ngModel","styleClass","--kind-color","ariaLabel"],["severity","warn","styleClass","settings-plugins__banner","data-testid","settings-banner-unsaved",3,"closable"],["data-testid","settings-loading",1,"settings-plugins__hint"],["severity","error","data-testid","settings-error",3,"closable"],["data-testid","settings-empty",1,"settings-plugins__hint"],["data-testid","settings-plugins-footer",1,"settings-plugins__footer"],[3,"ngModelChange","ngModel","styleClass","ariaLabel"],["aria-hidden","true",1,"fa-solid","fa-spinner","fa-spin"],["severity","error","data-testid","settings-toggle-error",3,"closable"],["data-testid","settings-search-empty",1,"settings-plugins__hint"],["role","list",1,"settings-plugins__list"],[1,"settings-plugins__row",3,"is-extension-bundle","is-failed","is-clickable","is-dirty"],["severity","error","data-testid","settings-toggle-error",3,"onClose","closable"],["aria-hidden","true",1,"fa-solid","fa-magnifying-glass"],[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"],["aria-hidden","true",1,"settings-plugins__dirty-dot"],[1,"settings-plugins__row-id"],[1,"settings-plugins__row-source"],[1,"settings-plugins__row-version"],[1,"settings-plugins__row-locked",3,"title"],[1,"settings-plugins__row-status"],[1,"settings-plugins__row-description"],[1,"settings-plugins__row-reason"],[1,"settings-plugins__row-hint"],[3,"ngModel","disabled","ariaLabel"],["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-lock"],["aria-hidden","true",1,"fa-solid","fa-triangle-exclamation"],[3,"ngModelChange","ngModel","disabled","ariaLabel"],["role","button","tabindex","0",1,"settings-plugins__subrow",3,"is-clickable","is-dirty"],["role","button","tabindex","0",1,"settings-plugins__subrow",3,"click","keydown.enter","keydown.space"],[1,"settings-plugins__subrow-text"],[1,"settings-plugins__subrow-headline"],[1,"settings-plugins__subrow-id"],[1,"settings-plugins__subrow-kind"],[1,"settings-plugins__subrow-version"],[1,"settings-plugins__subrow-description"],["data-testid","settings-plugins-restart-hint",1,"settings-plugins__footer-hint"],["severity","secondary","data-testid","settings-plugins-discard",3,"onClick","text","label","ariaLabel","disabled"],["data-testid","settings-plugins-apply",3,"onClick","label","ariaLabel","disabled","loading"]],template:function(e,n){e&1&&(l(0,"section",1)(1,"div",2)(2,"header",3)(3,"h2",4),d(4),s(),l(5,"p",5),d(6),s()(),l(7,"p-iconfield",6),T(8,"p-inputicon",7),l(9,"input",8),C("ngModelChange",function(c){return n.searchText.set(c)}),s()(),l(10,"div",9),O(11,Gn,3,6,"p-togglebutton",10,Q),s(),f(13,Hn,2,2,"p-message",11),f(14,Un,3,1,"p",12)(15,qn,2,3,"p-message",13)(16,Wn,2,1,"p",14)(17,ui,5,2),s(),f(18,hi,4,9,"footer",15),s()),e&2&&(r(4),u(" ",n.texts.pluginsHeading," "),r(2),p(n.texts.pluginsIntro),r(3),b("placeholder",n.texts.pluginsSearchPlaceholder)("ngModel",n.searchText()),_("aria-label",n.texts.pluginsSearchA11y),r(),_("aria-label",n.texts.pluginsKindFilterA11y),r(),F(n.kindFilterOptions),r(2),x(n.hasPendingChanges()?13:-1),r(),x(n.loading()?14:n.loadError()?15:n.plugins().length===0?16:17),r(4),x(n.hasPendingChanges()?18:-1))},dependencies:[oe,Ee,ne,ie,te,ke,Ft,Ot,At,Dt,Te,Me,ae,re,Tt,Mt,Fe,le],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden}.settings-plugins[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0}.settings-plugins__scroll[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:1.25rem 1.5rem;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__kind-filter[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.375rem}.settings-plugins__kind-chip[_ngcontent-%COMP%]{--chip-accent: var(--kind-color, var(--p-text-color));--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}.app-dark[_nghost-%COMP%] .settings-plugins__kind-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__kind-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__banner[_ngcontent-%COMP%]{display:block}.settings-plugins__banner-body[_ngcontent-%COMP%]{font-weight:400}.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-bundle[_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}.settings-plugins__row-id[_ngcontent-%COMP%]{font-weight:600;font-family:var(--p-monospace-font-family)}.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(--p-monospace-font-family)}.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, var(--p-text-color)) 14%,transparent);border:1px solid color-mix(in oklab,var(--kind-color, var(--p-text-color)) 38%,transparent);color:color-mix(in oklab,var(--kind-color, var(--p-text-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, var(--p-text-color)) 22%,transparent);border-color:color-mix(in oklab,var(--kind-color, var(--p-text-color)) 55%,transparent);color:color-mix(in oklab,var(--kind-color, var(--p-text-color)) 80%,var(--p-surface-50))}.settings-plugins__row-status[_ngcontent-%COMP%]{font-weight:500}.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-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(--p-monospace-font-family);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;align-items:center;justify-content:space-between;gap:.75rem;padding:.375rem .5rem;border-radius:var(--p-border-radius)}.settings-plugins__subrow.is-clickable[_ngcontent-%COMP%]{cursor:pointer;transition:background .12s ease}.settings-plugins__subrow.is-clickable[_ngcontent-%COMP%]:hover{background:var(--p-content-hover-background)}.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}.settings-plugins__subrow-id[_ngcontent-%COMP%]{font-family:var(--p-monospace-font-family);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%]{display:inline-block;width:.5rem;height:.5rem;border-radius:50%;background:var(--p-warn-color);flex-shrink:0}.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__footer[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;gap:.5rem;padding:.75rem 1.5rem;border-top:1px solid var(--p-content-border-color);background:var(--p-content-background)}.settings-plugins__footer-hint[_ngcontent-%COMP%]{font-style:italic;font-size:.75rem;line-height:1.4;color:var(--p-warn-color);margin-right:auto}"],changeDetection:0})};function bi(t,i){if(t&1&&(l(0,"p-message",3),d(1),s()),t&2){let e=a();b("closable",!1),r(),R(" ",e.texts.project.loadErrorPrefix," ",i," ")}}function fi(t,i){if(t&1&&(l(0,"p-message",4),d(1),s()),t&2){let e=a();b("closable",!1),r(),R(" ",e.texts.project.saveErrorPrefix," ",i," ")}}function xi(t,i){if(t&1){let e=I();l(0,"li",10)(1,"span",17),d(2),s(),l(3,"p-button",18),C("onClick",function(){let o=k(e).$implicit,c=a();return S(c.onExtraFolderRemove(o))}),s()()}if(t&2){let e=i.$implicit,n=a();r(2),p(e),r(),b("label",n.texts.project.removePathLabel)("outlined",!0)("disabled",n.isPending("scan.extraFolders")),_("data-testid","settings-project-extra-folders-remove")}}function vi(t,i){if(t&1){let e=I();l(0,"li",10)(1,"span",17),d(2),s(),l(3,"p-button",18),C("onClick",function(){let o=k(e).$implicit,c=a();return S(c.onReferencePathRemove(o))}),s()()}if(t&2){let e=i.$implicit,n=a();r(2),p(e),r(),b("label",n.texts.project.removePathLabel)("outlined",!0)("disabled",n.isPending("scan.referencePaths")),_("data-testid","settings-project-reference-paths-remove")}}var Ve=class t{dataSource=M(G);confirmation=M(ee);visible=V.required();texts=w;loading=v(!1);loadError=v(null);saveError=v(null);preferences=v(null);pending=v(new Set);newExtraFolder=v("");newReferencePath=v("");extraFolders=y(()=>this.preferences()?.scan.extraFolders??[]);referencePaths=y(()=>this.preferences()?.scan.referencePaths??[]);constructor(){N(()=>{this.visible()&&this.refresh()})}isPending(i){return this.pending().has(i)}onExtraFolderAdd(){let i=this.newExtraFolder().trim();if(i.length===0)return;let e=[...this.extraFolders(),i];this.runPatch("scan.extraFolders",{scan:{extraFolders:e}}).then(()=>{this.newExtraFolder.set("")})}onExtraFolderRemove(i){let e=this.extraFolders().filter(n=>n!==i);this.runPatch("scan.extraFolders",{scan:{extraFolders:[...e]}})}onReferencePathAdd(){let i=this.newReferencePath().trim();if(i.length===0)return;let e=[...this.referencePaths(),i];this.runPatch("scan.referencePaths",{scan:{referencePaths:e}}).then(()=>{this.newReferencePath.set("")})}onReferencePathRemove(i){let e=this.referencePaths().filter(n=>n!==i);this.runPatch("scan.referencePaths",{scan:{referencePaths:[...e]}})}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let i=await this.dataSource.getProjectPreferences();this.preferences.set(i)}catch(i){this.loadError.set(We(i)),this.preferences.set(null)}finally{this.loading.set(!1)}}async runPatch(i,e){if(this.pending().has(i))return;let n=new Set(this.pending());n.add(i),this.pending.set(n),this.saveError.set(null);try{let o=await this.dataSource.setProjectPreferences(e);this.preferences.set(o)}catch(o){if(o instanceof B&&o.code==="confirm-required"){let c=o.paths??[];this.confirmDialog(c,async()=>{try{let g=await this.dataSource.setProjectPreferences(W(q({},e),{confirm:!0}));this.preferences.set(g)}catch(g){this.saveError.set(We(g))}})}else this.saveError.set(We(o))}finally{let o=new Set(this.pending());o.delete(i),this.pending.set(o)}}confirmDialog(i,e){this.confirmation.confirm({header:w.project.confirmDialogHeader,message:w.project.confirmDialogIntro+`
121
+ `,Tn={root:{position:"relative"}},In={root:({instance:t})=>["p-toggleswitch p-component",{"p-toggleswitch p-component":!0,"p-toggleswitch-checked":t.checked(),"p-disabled":t.$disabled(),"p-invalid":t.invalid()}],input:"p-toggleswitch-input",slider:"p-toggleswitch-slider",handle:"p-toggleswitch-handle"},$t=(()=>{class t extends ft{name="toggleswitch";style=Mn;classes=In;inlineStyles=Tn;static \u0275fac=(()=>{let e;return function(o){return(e||(e=Le(t)))(o||t)}})();static \u0275prov=Ye({token:t,factory:t.\u0275fac})}return t})();var Gt=new Ze("TOGGLESWITCH_INSTANCE"),On={provide:Pt,useExisting:Xe(()=>le),multi:!0},le=(()=>{class t extends Et{componentName="ToggleSwitch";$pcToggleSwitch=M(Gt,{optional:!0,skipSelf:!0})??void 0;bindDirectiveInstance=M(me,{self:!0});onAfterViewChecked(){this.bindDirectiveInstance.setAttrs(this.ptms(["host","root"]))}styleClass;tabindex;inputId;readonly;trueValue=!0;falseValue=!1;ariaLabel;size=V();ariaLabelledBy;autofocus;onChange=new tt;input;handleTemplate;_handleTemplate;focused=!1;_componentStyle=M($t);templates;onHostClick(e){this.onClick(e)}onAfterContentInit(){this.templates.forEach(e=>{e.getType()==="handle"?this._handleTemplate=e.template:this._handleTemplate=e.template})}onClick(e){!this.$disabled()&&!this.readonly&&(this.writeModelValue(this.checked()?this.falseValue:this.trueValue),this.onModelChange(this.modelValue()),this.onChange.emit({originalEvent:e,checked:this.modelValue()}),this.input.nativeElement.focus())}onFocus(){this.focused=!0}onBlur(){this.focused=!1,this.onModelTouched()}checked(){return this.modelValue()===this.trueValue}writeControlValue(e,n){n(e),this.cd.markForCheck()}get dataP(){return this.cn({checked:this.checked(),disabled:this.$disabled(),invalid:this.invalid()})}static \u0275fac=(()=>{let e;return function(o){return(e||(e=Le(t)))(o||t)}})();static \u0275cmp=A({type:t,selectors:[["p-toggleswitch"],["p-toggleSwitch"],["p-toggle-switch"]],contentQueries:function(n,o,c){if(n&1&&lt(c,wn,4)(c,Ce,4),n&2){let g;fe(g=xe())&&(o.handleTemplate=g.first),fe(g=xe())&&(o.templates=g)}},viewQuery:function(n,o){if(n&1&&dt(kn,5),n&2){let c;fe(c=xe())&&(o.input=c.first)}},hostVars:7,hostBindings:function(n,o){n&1&&C("click",function(g){return o.onHostClick(g)}),n&2&&(_("data-p-checked",o.checked())("data-p-disabled",o.$disabled())("data-p",o.dataP),ve(o.sx("root")),ue(o.cn(o.cx("root"),o.styleClass)))},inputs:{styleClass:"styleClass",tabindex:[2,"tabindex","tabindex",ht],inputId:"inputId",readonly:[2,"readonly","readonly",Be],trueValue:"trueValue",falseValue:"falseValue",ariaLabel:"ariaLabel",size:[1,"size"],ariaLabelledBy:"ariaLabelledBy",autofocus:[2,"autofocus","autofocus",Be]},outputs:{onChange:"onChange"},features:[Z([On,$t,{provide:Gt,useExisting:t},{provide:xt,useExisting:t}]),ot([me]),rt],decls:5,vars:22,consts:[["input",""],["type","checkbox","role","switch",3,"focus","blur","checked","pAutoFocus","pBind"],[3,"pBind"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(n,o){n&1&&(l(0,"input",1,0),C("focus",function(){return o.onFocus()})("blur",function(){return o.onBlur()}),s(),l(2,"div",2)(3,"div",2),f(4,En,1,4,"ng-container"),s()()),n&2&&(ue(o.cx("input")),b("checked",o.checked())("pAutoFocus",o.autofocus)("pBind",o.ptm("input")),_("id",o.inputId)("required",o.required()?"":void 0)("disabled",o.$disabled()?"":void 0)("aria-checked",o.checked())("aria-labelledby",o.ariaLabelledBy)("aria-label",o.ariaLabel)("name",o.name())("tabindex",o.tabindex),r(2),ue(o.cx("slider")),b("pBind",o.ptm("slider")),_("data-p",o.dataP),r(),ue(o.cx("handle")),b("pBind",o.ptm("handle")),_("data-p",o.dataP),r(),x(o.handleTemplate||o._handleTemplate?4:-1))},dependencies:[bt,_t,vt,we,yt,me],encapsulation:2,changeDetection:0})}return t})(),Fe=(()=>{class t{static \u0275fac=function(n){return new(n||t)};static \u0275mod=it({type:t});static \u0275inj=Je({imports:[le,we,we]})}return t})();var Fn=(t,i)=>i.key;function Dn(t,i){if(t&1&&(l(0,"p-message",3),d(1),s()),t&2){let e=a();b("closable",!1),r(),R(" ",e.texts.general.loadErrorPrefix," ",i," ")}}function An(t,i){if(t&1&&(l(0,"p-message",4),d(1),s()),t&2){let e=a();b("closable",!1),r(),R(" ",e.texts.general.saveErrorPrefix," ",i," ")}}function jn(t,i){if(t&1){let e=I();l(0,"li",6)(1,"div",9)(2,"div",10),d(3),s(),l(4,"div",11),d(5),s()(),l(6,"p-toggleswitch",14),C("ngModelChange",function(o){let c=k(e).$implicit,g=a();return S(g.onToggle(c,o))}),s()()}if(t&2){let e=i.$implicit,n=a();_("data-testid","settings-general-row-"+e.key),r(3),p(n.toggleLabel(e.key)),r(2),u(" ",n.toggleDescription(e.key)," "),r(),b("ngModel",n.valueOf(e))("disabled",n.loading()||n.isPending(e.key)||n.preferences()===null),_("data-testid","settings-general-toggle-"+e.key)}}function Nn(t,i){if(t&1&&(l(0,"span",15),d(1),s()),t&2){let e=i.$implicit,n=a();r(),u(" ",n.connectionTypeLabel(e.labelKey)," ")}}var Vn=[{key:"updateCheck.enabled",read:t=>t.updateCheck.enabled,patch:t=>({updateCheck:{enabled:t}})}],Ln=kt.map(t=>({value:t,labelKey:t})),De=class t{dataSource=M(G);graphPreferences=M(St);visible=V.required();texts=w;toggles=Vn;connectionTypeOptions=Ln;connectionType=this.graphPreferences.connectionType;loading=v(!1);loadError=v(null);saveError=v(null);preferences=v(null);pending=v(new Set);constructor(){N(()=>{this.visible()&&this.refresh()})}toggleLabel(i){return w.general.toggles[i].label}toggleDescription(i){return w.general.toggles[i].description}valueOf(i){let e=this.preferences();return e?i.read(e):!1}isPending(i){return this.pending().has(i)}onToggle(i,e){this.runToggle(i,e)}onConnectionTypeChange(i){i!==null&&this.graphPreferences.setConnectionType(i)}connectionTypeLabel(i){return w.general.connectionType.options[i].label}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let i=await this.dataSource.getPreferences();this.preferences.set(i)}catch(i){this.loadError.set(Ut(i)),this.preferences.set(null)}finally{this.loading.set(!1)}}async runToggle(i,e){if(this.pending().has(i.key))return;let n=new Set(this.pending());n.add(i.key),this.pending.set(n),this.saveError.set(null);try{let o=await this.dataSource.setPreferences(i.patch(e));this.preferences.set(o)}catch(o){this.saveError.set(Ut(o))}finally{let o=new Set(this.pending());o.delete(i.key),this.pending.set(o)}}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-general"]],inputs:{visible:[1,"visible"]},decls:23,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"],[1,"settings-general__subheading"],["data-testid","settings-general-row-connection-type",1,"settings-general__row","settings-general__row--stacked"],[1,"settings-general__row-text"],[1,"settings-general__row-label"],[1,"settings-general__row-description"],["optionLabel","labelKey","optionValue","value","data-testid","settings-general-connection-type",3,"ngModelChange","options","ngModel","allowEmpty"],["pTemplate","item"],[3,"ngModelChange","ngModel","disabled"],["data-testid","settings-general-connection-type-option"]],template:function(e,n){if(e&1&&(l(0,"section",0)(1,"h2",1),d(2),s(),l(3,"p",2),d(4),s(),f(5,Dn,2,3,"p-message",3),f(6,An,2,3,"p-message",4),l(7,"ul",5),O(8,jn,7,6,"li",6,Fn),s(),l(10,"h3",7),d(11),s(),l(12,"p",2),d(13),s(),l(14,"ul",5)(15,"li",8)(16,"div",9)(17,"div",10),d(18),s(),l(19,"div",11),d(20),s()(),l(21,"p-selectbutton",12),C("ngModelChange",function(c){return n.onConnectionTypeChange(c)}),Y(22,Nn,2,1,"ng-template",13),s()()()()),e&2){let o,c;_("aria-labelledby","settings-general-heading"),r(2),u(" ",n.texts.general.heading," "),r(2),p(n.texts.general.intro),r(),x((o=n.loadError())?5:-1,o),r(),x((c=n.saveError())?6:-1,c),r(2),F(n.toggles),r(3),u(" ",n.texts.general.localPreferences.heading," "),r(2),u(" ",n.texts.general.localPreferences.intro," "),r(5),u(" ",n.texts.general.connectionType.label," "),r(2),u(" ",n.texts.general.connectionType.description," "),r(),b("options",n.connectionTypeOptions)("ngModel",n.connectionType())("allowEmpty",!1)}},dependencies:[oe,ne,ie,ae,re,Ce,Nt,jt,Fe,le],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:.5rem;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-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__subheading[_ngcontent-%COMP%]{margin:1.75rem 0 .25rem;font-size:.95rem;font-weight:600;color:var(--p-text-color)}.settings-general__row--stacked[_ngcontent-%COMP%]{flex-direction:column;align-items:stretch;gap:.65rem}"],changeDetection:0})};function Ut(t){return t instanceof z||t instanceof Error?t.message:String(t)}var ze={provider:"#7C3AED",extractor:"#A78BFA",analyzer:"#5FD17C",action:"#00C853",formatter:"#5BC0EB",hook:"#FFB627"};function Qt(t){let i=t.toLowerCase();return ze[i]??"currentColor"}var Ne=["all",...Object.keys(ze)],Ae=["claude","gemini","agent-skills","core"],je=["provider","extractor","analyzer","action","formatter","hook"];function de(t,i){return`${t}/${i}`}function Ke(t){let i=new Map;for(let e of t)if(!ce(e.status)){if(e.granularity==="bundle"){i.set(e.id,e.status==="enabled");continue}if(e.granularity==="extension"&&e.extensions)for(let n of e.extensions)i.set(de(e.id,n.id),n.enabled)}return i}function $e(t){let i=t.target;return!i||typeof i.closest!="function"?!1:i.closest('label, button, input, [role="switch"], p-toggleswitch')!==null}function Xt(t,i){if(Rn(t,i))return[t];if(t.granularity!=="extension"||!t.extensions)return[];let e=t.extensions.filter(n=>Bn(n,i));return e.length===0?[]:[W(q({},t),{extensions:e})]}function Yt(t,i){if(t.granularity==="bundle")return t.kinds.some(n=>n.toLowerCase()===i)?[t]:[];if(!t.extensions)return[];let e=t.extensions.filter(n=>n.kind.toLowerCase()===i);return e.length===0?[]:[W(q({},t),{extensions:e})]}function Jt(t){if(t.locked)return[];if(t.granularity!=="extension"||!t.extensions)return[t];let i=t.extensions.filter(e=>!e.locked);return i.length===0?[]:[W(q({},t),{extensions:i})]}function Zt(t){return t.slice().sort((e,n)=>{let o=Ae.indexOf(e.id),c=Ae.indexOf(n.id),g=o>=0?o:Ae.length,P=c>=0?c:Ae.length;return g!==P?g-P:e.id.localeCompare(n.id)}).map(e=>{if(e.granularity!=="extension"||!e.extensions)return e;let n=e.extensions.slice().sort((o,c)=>{let g=je.indexOf(o.kind.toLowerCase()),P=je.indexOf(c.kind.toLowerCase()),K=g>=0?g:je.length,L=P>=0?P:je.length;return K!==L?K-L:o.id.localeCompare(c.id)});return W(q({},e),{extensions:n})})}function Rn(t,i){return!!(t.id.toLowerCase().includes(i)||t.description&&t.description.toLowerCase().includes(i))}function Bn(t,i){return!!(t.id.toLowerCase().includes(i)||t.description&&t.description.toLowerCase().includes(i))}function ce(t){return t==="incompatible-spec"||t==="invalid-manifest"||t==="load-error"||t==="id-collision"}function Ge(t){return t instanceof z||t instanceof Error?t.message:String(t)}function en(t,i){return ce(t.status)?i.statusFailure[t.status]??t.status:t.status==="enabled"?i.enabledLabel:i.disabledLabel}function tn(t,i){switch(t){case"built-in":return i.sourceBuiltIn;case"project":return i.sourceProject;case"global":return i.sourceGlobal}}var He="sm.settings.plugins.collapsed",Ue="sm.settings.plugins.kind-filter";function nn(){let t=null;try{t=localStorage.getItem(He)}catch{return new Set}if(!t)return new Set;let i;try{i=JSON.parse(t)}catch{return new Set}if(!Array.isArray(i))return new Set;let e=new Set;for(let n of i)typeof n=="string"&&n.length>0&&e.add(n);return e}function on(t){try{if(t.size===0){localStorage.removeItem(He);return}localStorage.setItem(He,JSON.stringify([...t]))}catch{}}function rn(){let t=null;try{t=localStorage.getItem(Ue)}catch{return"all"}return t&&Ne.includes(t)?t:"all"}function an(t){try{if(t==="all"){localStorage.removeItem(Ue);return}localStorage.setItem(Ue,t)}catch{}}function qe(){et(qe);let t=v(nn());N(()=>on(t()));let i=n=>{let o=new Set(t());o.has(n)?o.delete(n):o.add(n),t.set(o)},e=n=>!t().has(n);return{collapsed:t.asReadonly(),toggleExpanded:i,isExpanded:e}}function sn(t){let i=v(""),e=y(()=>i().trim().length>0),n=v(rn()),o=y(()=>n()!=="all");N(()=>an(n()));let c=y(()=>Zt(t.plugins().flatMap(Jt))),g=y(()=>{let L=i().trim().toLowerCase(),_e=n(),H=c();return _e!=="all"&&(H=H.flatMap(be=>Yt(be,_e))),L.length>0&&(H=H.flatMap(be=>Xt(be,L))),H});return{searchText:i,searchActive:e,kindFilter:n,setKindFilter:L=>{n.set(L)},isKindFilterActive:L=>n()===L,kindFilterActive:o,kindFilterOptions:Ne,visiblePlugins:c,filteredPlugins:g}}function ln(t){let i=v(!1),e=v(null),n=v(null),o=v([]),c=v(new Map),g=v(new Map),P=v(!1),K=y(()=>{let E=c(),D=g(),B=new Set;for(let[U,j]of D)E.get(U)!==j&&B.add(U);return B}),L=y(()=>K().size>0),_e=y(()=>o().some(E=>ce(E.status))),H=y(()=>{let E=g();for(let D of o())if(D.startsAsDisabled===!0&&E.get(D.id)===!0)return!0;return!1});return{plugins:o,loading:i,loadError:e,toggleError:n,applying:P,hasFailureRows:_e,originalState:c,pendingState:g,dirtyIds:K,hasPendingChanges:L,restartRecommended:H,pendingEnabled:E=>g().get(E)??!1,isDirty:E=>K().has(E),refresh:async()=>{i.set(!0),e.set(null),n.set(null);try{let E=await t.dataSource.listPlugins();o.set([...E.items]);let D=Ke(E.items);c.set(D),g.set(new Map(D))}catch(E){e.set(Ge(E)),o.set([]),c.set(new Map),g.set(new Map)}finally{i.set(!1)}},onBundleToggle:(E,D)=>{if(P())return;let B=new Map(g());B.set(E.id,D),g.set(B)},onExtensionToggle:(E,D,B)=>{if(P())return;let U=de(E,D.id),j=new Map(g());j.set(U,B),g.set(j)},applyChanges:async()=>{if(P())return{ok:!1};let E=K();if(E.size===0)return{ok:!1};let D=[],B=g();for(let j of E)D.push({id:j,enabled:B.get(j)??!1});P.set(!0),n.set(null);let U=!1;try{let j=await t.dataSource.applyPluginChanges(D);o.set([...j.items]);let Qe=Ke(j.items);c.set(Qe),g.set(new Map(Qe)),t.scanTrigger.run(),U=!0}catch(j){n.set(Ge(j))}finally{P.set(!1)}return{ok:U}},discardChanges:()=>{g.set(new Map(c())),n.set(null)}}}var dn=(t,i)=>i.id;function $n(t,i){if(t&1&&d(0),t&2){let e=a().$implicit,n=a();u(" ",e==="all"?n.texts.pluginsKindFilterAll:e," ")}}function Gn(t,i){if(t&1){let e=I();l(0,"p-togglebutton",16),C("ngModelChange",function(){let o=k(e).$implicit,c=a();return S(c.setKindFilter(o))}),Y(1,$n,1,1,"ng-template",null,0,ut),s()}if(t&2){let e=i.$implicit,n=a();Re("--kind-color",e==="all"?null:n.kindTint(e)),b("ngModel",n.isKindFilterActive(e))("styleClass","settings-plugins__kind-chip"+(e==="all"?" is-all":""))("ariaLabel",n.texts.pluginsKindFilterOptionA11y(e,!n.isKindFilterActive(e))),_("data-testid","settings-plugins-kind-chip-"+e)}}function Hn(t,i){if(t&1&&(l(0,"p-message",11),d(1),s()),t&2){let e=a();b("closable",!1),r(),u(" ",e.texts.unsavedChangesMessage(e.dirtyIds().size)," ")}}function Un(t,i){if(t&1&&(l(0,"p",12),T(1,"i",17),d(2),s()),t&2){let e=a();r(2),u(" ",e.texts.loading," ")}}function qn(t,i){if(t&1&&(l(0,"p-message",13),d(1),s()),t&2){let e=a();b("closable",!1),r(),R(" ",e.texts.errorPrefix," ",e.loadError()," ")}}function Wn(t,i){if(t&1&&(l(0,"p",14),d(1),s()),t&2){let e=a();r(),u(" ",e.texts.empty," ")}}function Qn(t,i){if(t&1){let e=I();l(0,"p-message",22),C("onClose",function(){k(e);let o=a(2);return S(o.toggleError.set(null))}),d(1),s()}if(t&2){let e=a(2);b("closable",!0),r(),R(" ",e.texts.toggleErrorPrefix," ",e.toggleError()," ")}}function Xn(t,i){if(t&1&&(l(0,"p",19),T(1,"i",23),d(2),s()),t&2){let e=a(2);r(2),u(" ",e.texts.pluginsSearchEmpty(e.searchText())," ")}}function Yn(t,i){if(t&1){let e=I();l(0,"button",41),C("click",function(o){k(e);let c=a().$implicit;return a(2).toggleExpanded(c.id),S(o.stopPropagation())}),T(1,"i",42),s()}if(t&2){let e=a().$implicit,n=a(2);_("aria-expanded",n.isExpanded(e.id))("aria-label",n.isExpanded(e.id)?n.texts.collapseLabel:n.texts.expandLabel)("data-testid","settings-bundle-expand-"+e.id),r(),$("fa-chevron-down",n.isExpanded(e.id))("fa-chevron-right",!n.isExpanded(e.id))}}function Jn(t,i){t&1&&T(0,"span",27)}function Zn(t,i){if(t&1&&T(0,"span",30),t&2){let e=a().$implicit;_("data-testid","settings-row-dirty-"+e.id)}}function ei(t,i){if(t&1&&(l(0,"span",33),d(1),s()),t&2){let e=a().$implicit;r(),u("v",e.version)}}function ti(t,i){if(t&1&&(l(0,"span",34),T(1,"i",43),d(2),s()),t&2){let e=a().$implicit,n=a(2);b("title",n.texts.lockedTooltip),_("data-testid","settings-row-locked-"+e.id),r(2),u(" ",n.texts.lockedLabel," ")}}function ni(t,i){if(t&1&&(l(0,"span",35),d(1),s()),t&2){let e=a().$implicit,n=a(2);r(),p(n.statusLabel(e))}}function ii(t,i){if(t&1&&(l(0,"p",36),d(1),s()),t&2){let e=a().$implicit;r(),p(e.description)}}function oi(t,i){if(t&1&&(l(0,"span",37),d(1),s()),t&2){let e=a().$implicit;r(),p(e.reason)}}function ri(t,i){if(t&1&&(l(0,"p",38),T(1,"i",44),d(2),s()),t&2){let e=a().$implicit,n=a(2);_("data-testid","settings-row-starts-disabled-"+e.id),r(2),u(" ",n.texts.startsAsDisabledRowHint," ")}}function ai(t,i){if(t&1){let e=I();l(0,"p-toggleswitch",45),C("ngModelChange",function(o){k(e);let c=a().$implicit,g=a(2);return S(g.onBundleToggle(c,o))}),s()}if(t&2){let e=a().$implicit,n=a(2);b("ngModel",n.pendingEnabled(e.id))("disabled",n.applying()||!!e.locked)("ariaLabel",n.texts.a11y.pluginToggle(e.id,!n.pendingEnabled(e.id))),_("data-testid","settings-toggle-"+e.id)}}function si(t,i){if(t&1&&T(0,"span",30),t&2){let e=a().$implicit,n=a(2).$implicit;_("data-testid","settings-extrow-dirty-"+n.id+"-"+e.id)}}function li(t,i){if(t&1&&(l(0,"span",34),T(1,"i",43),d(2),s()),t&2){let e=a().$implicit,n=a(2).$implicit,o=a(2);b("title",o.texts.lockedTooltip),_("data-testid","settings-extrow-locked-"+n.id+"-"+e.id),r(2),u(" ",o.texts.lockedLabel," ")}}function di(t,i){if(t&1&&(l(0,"p",53),d(1),s()),t&2){let e=a().$implicit;r(),p(e.description)}}function ci(t,i){if(t&1){let e=I();l(0,"li",47),C("click",function(o){let c=k(e).$implicit,g=a(2).$implicit,P=a(2);return S(P.onSubrowClick(g.id,c,o))})("keydown.enter",function(o){let c=k(e).$implicit,g=a(2).$implicit,P=a(2);return S(P.onSubrowClick(g.id,c,o))})("keydown.space",function(o){let c=k(e).$implicit,g=a(2).$implicit,P=a(2);return o.preventDefault(),S(P.onSubrowClick(g.id,c,o))}),l(1,"div",48)(2,"div",49),f(3,si,1,1,"span",30),l(4,"span",50),d(5),s(),l(6,"span",51),d(7),s(),l(8,"span",52),d(9),s(),f(10,li,3,3,"span",34),s(),f(11,di,2,1,"p",53),s(),l(12,"p-toggleswitch",45),C("ngModelChange",function(o){let c=k(e).$implicit,g=a(2).$implicit,P=a(2);return S(P.onExtensionToggle(g.id,c,o))}),s()()}if(t&2){let e=i.$implicit,n=a(2).$implicit,o=a(2);$("is-clickable",o.extensionToggleInteractive(e))("is-dirty",o.isDirty(o.qualifiedExt(n.id,e.id))),_("aria-label",o.texts.a11y.extensionRow(o.qualifiedExt(n.id,e.id)))("data-testid","settings-extrow-"+n.id+"-"+e.id),r(3),x(o.isDirty(o.qualifiedExt(n.id,e.id))?3:-1),r(2),p(e.id),r(),Re("--kind-color",o.kindTint(e.kind)),r(),p(e.kind),r(2),u("v",e.version),r(),x(e.locked?10:-1),r(),x(e.description?11:-1),r(),b("ngModel",o.pendingEnabled(o.qualifiedExt(n.id,e.id)))("disabled",o.applying()||!!e.locked)("ariaLabel",o.texts.a11y.extensionToggle(o.qualifiedExt(n.id,e.id),!o.pendingEnabled(o.qualifiedExt(n.id,e.id)))),_("data-testid","settings-ext-toggle-"+n.id+"-"+e.id)}}function gi(t,i){if(t&1&&(l(0,"ul",40),O(1,ci,13,18,"li",46,dn),s()),t&2){let e=a().$implicit;_("data-testid","settings-extensions-"+e.id),r(),F(e.extensions)}}function pi(t,i){if(t&1){let e=I();l(0,"li",24)(1,"div",25),C("click",function(o){let c=k(e).$implicit,g=a(2);return S(g.onRowClick(c,o))})("keydown.enter",function(o){let c=k(e).$implicit,g=a(2);return S(g.onRowClick(c,o))})("keydown.space",function(o){let c=k(e).$implicit,g=a(2);return o.preventDefault(),S(g.onRowClick(c,o))}),f(2,Yn,2,7,"button",26)(3,Jn,1,0,"span",27),l(4,"div",28)(5,"div",29),f(6,Zn,1,1,"span",30),l(7,"span",31),d(8),s(),l(9,"span",32),d(10),s(),f(11,ei,2,1,"span",33),f(12,ti,3,3,"span",34),f(13,ni,2,1,"span",35),s(),f(14,ii,2,1,"p",36),f(15,oi,2,1,"span",37),f(16,ri,3,2,"p",38),s(),f(17,ai,1,4,"p-toggleswitch",39),s(),f(18,gi,3,1,"ul",40),s()}if(t&2){let e=i.$implicit,n=a(2);$("is-extension-bundle",e.granularity==="extension")("is-failed",!n.canToggleBundle(e)&&e.granularity==="bundle")("is-clickable",n.rowIsClickable(e))("is-dirty",e.granularity==="bundle"&&n.isDirty(e.id)),_("data-testid","settings-row-"+e.id),r(),_("aria-label",n.texts.a11y.pluginRow(e.id)),r(),x(e.granularity==="extension"&&(e.extensions!=null&&e.extensions.length)?2:3),r(4),x(e.granularity==="bundle"&&n.isDirty(e.id)?6:-1),r(2),p(e.id),r(2),p(n.sourceLabel(e.source)),r(),x(e.version?11:-1),r(),x(e.locked?12:-1),r(),x(!n.canToggleBundle(e)&&e.granularity==="bundle"?13:-1),r(),x(e.description?14:-1),r(),x(e.reason?15:-1),r(),x(n.showStartsAsDisabledHint(e)?16:-1),r(),x(n.canToggleBundle(e)?17:-1),r(),x(e.granularity==="extension"&&(e.extensions!=null&&e.extensions.length)&&n.isExpanded(e.id)?18:-1)}}function ui(t,i){if(t&1&&(f(0,Qn,2,3,"p-message",18),f(1,Xn,3,1,"p",19),l(2,"ul",20),O(3,pi,19,22,"li",21,dn),s()),t&2){let e=a();x(e.toggleError()?0:-1),r(),x(e.searchActive()&&e.filteredPlugins().length===0?1:-1),r(2),F(e.filteredPlugins())}}function mi(t,i){if(t&1&&(l(0,"em",54),d(1),s()),t&2){let e=a(2);r(),u(" ",e.texts.startsAsDisabledFooterHint," ")}}function hi(t,i){if(t&1){let e=I();l(0,"footer",15),f(1,mi,2,1,"em",54),l(2,"p-button",55),C("onClick",function(){k(e);let o=a();return S(o.discardChanges())}),s(),l(3,"p-button",56),C("onClick",function(){k(e);let o=a();return S(o.applyChanges())}),s()()}if(t&2){let e=a();r(),x(e.restartRecommended()?1:-1),r(),b("text",!0)("label",e.texts.discardChanges)("ariaLabel",e.texts.discardA11y)("disabled",e.applying()),r(),b("label",e.texts.applyAndClose)("ariaLabel",e.texts.applyA11y)("disabled",e.applying())("loading",e.applying())}}var ge=class t{dataSource=M(G);scanTrigger=M(Lt);visible=V.required();applied=ye();texts=w;pluginState=ln({dataSource:this.dataSource,scanTrigger:this.scanTrigger});plugins=this.pluginState.plugins;loading=this.pluginState.loading;loadError=this.pluginState.loadError;toggleError=this.pluginState.toggleError;applying=this.pluginState.applying;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=qe();collapsed=this.pluginCollapse.collapsed;pluginFilter=sn({plugins:this.plugins});searchText=this.pluginFilter.searchText;searchActive=this.pluginFilter.searchActive;kindFilter=this.pluginFilter.kindFilter;kindFilterActive=this.pluginFilter.kindFilterActive;kindFilterOptions=this.pluginFilter.kindFilterOptions;visiblePlugins=this.pluginFilter.visiblePlugins;filteredPlugins=this.pluginFilter.filteredPlugins;constructor(){N(()=>{this.visible()&&this.pluginState.refresh()})}setKindFilter(i){this.pluginFilter.setKindFilter(i)}isKindFilterActive(i){return this.pluginFilter.isKindFilterActive(i)}toggleExpanded(i){this.pluginCollapse.toggleExpanded(i)}isExpanded(i){return this.pluginCollapse.isExpanded(i)}pendingEnabled(i){return this.pluginState.pendingEnabled(i)}isDirty(i){return this.pluginState.isDirty(i)}showStartsAsDisabledHint(i){return i.startsAsDisabled?this.pendingEnabled(i.id):!1}onBundleToggle(i,e){this.pluginState.onBundleToggle(i,e)}onExtensionToggle(i,e,n){this.pluginState.onExtensionToggle(i,e,n)}async applyChanges(){(await this.pluginState.applyChanges()).ok&&this.applied.emit()}discardChanges(){this.pluginState.discardChanges()}canToggleBundle(i){return i.granularity==="extension"?!1:!ce(i.status)}bundleToggleInteractive(i){return this.canToggleBundle(i)&&!i.locked}extensionToggleInteractive(i){return!i.locked}rowIsClickable(i){return!!(this.bundleToggleInteractive(i)||i.granularity==="extension"&&(i.extensions?.length??0)>0)}onRowClick(i,e){if(!$e(e)){if(this.bundleToggleInteractive(i)){this.onBundleToggle(i,!this.pendingEnabled(i.id));return}i.granularity==="extension"&&(i.extensions?.length??0)>0&&this.toggleExpanded(i.id)}}onSubrowClick(i,e,n){if($e(n)||!this.extensionToggleInteractive(e))return;let o=de(i,e.id);this.onExtensionToggle(i,e,!this.pendingEnabled(o))}statusLabel(i){return en(i,this.texts)}sourceLabel(i){return tn(i,this.texts)}qualifiedExt(i,e){return de(i,e)}kindTint(i){return Qt(i)}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-plugins"]],inputs:{visible:[1,"visible"]},outputs:{applied:"applied"},decls:19,vars:9,consts:[["content",""],["aria-labelledby","settings-plugins-heading",1,"settings-plugins"],[1,"settings-plugins__scroll"],[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-kind-filter",1,"settings-plugins__kind-filter"],[3,"ngModel","styleClass","--kind-color","ariaLabel"],["severity","warn","styleClass","settings-plugins__banner","data-testid","settings-banner-unsaved",3,"closable"],["data-testid","settings-loading",1,"settings-plugins__hint"],["severity","error","data-testid","settings-error",3,"closable"],["data-testid","settings-empty",1,"settings-plugins__hint"],["data-testid","settings-plugins-footer",1,"settings-plugins__footer"],[3,"ngModelChange","ngModel","styleClass","ariaLabel"],["aria-hidden","true",1,"fa-solid","fa-spinner","fa-spin"],["severity","error","data-testid","settings-toggle-error",3,"closable"],["data-testid","settings-search-empty",1,"settings-plugins__hint"],["role","list",1,"settings-plugins__list"],[1,"settings-plugins__row",3,"is-extension-bundle","is-failed","is-clickable","is-dirty"],["severity","error","data-testid","settings-toggle-error",3,"onClose","closable"],["aria-hidden","true",1,"fa-solid","fa-magnifying-glass"],[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"],["aria-hidden","true",1,"settings-plugins__dirty-dot"],[1,"settings-plugins__row-id"],[1,"settings-plugins__row-source"],[1,"settings-plugins__row-version"],[1,"settings-plugins__row-locked",3,"title"],[1,"settings-plugins__row-status"],[1,"settings-plugins__row-description"],[1,"settings-plugins__row-reason"],[1,"settings-plugins__row-hint"],[3,"ngModel","disabled","ariaLabel"],["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-lock"],["aria-hidden","true",1,"fa-solid","fa-triangle-exclamation"],[3,"ngModelChange","ngModel","disabled","ariaLabel"],["role","button","tabindex","0",1,"settings-plugins__subrow",3,"is-clickable","is-dirty"],["role","button","tabindex","0",1,"settings-plugins__subrow",3,"click","keydown.enter","keydown.space"],[1,"settings-plugins__subrow-text"],[1,"settings-plugins__subrow-headline"],[1,"settings-plugins__subrow-id"],[1,"settings-plugins__subrow-kind"],[1,"settings-plugins__subrow-version"],[1,"settings-plugins__subrow-description"],["data-testid","settings-plugins-restart-hint",1,"settings-plugins__footer-hint"],["severity","secondary","data-testid","settings-plugins-discard",3,"onClick","text","label","ariaLabel","disabled"],["data-testid","settings-plugins-apply",3,"onClick","label","ariaLabel","disabled","loading"]],template:function(e,n){e&1&&(l(0,"section",1)(1,"div",2)(2,"header",3)(3,"h2",4),d(4),s(),l(5,"p",5),d(6),s()(),l(7,"p-iconfield",6),T(8,"p-inputicon",7),l(9,"input",8),C("ngModelChange",function(c){return n.searchText.set(c)}),s()(),l(10,"div",9),O(11,Gn,3,6,"p-togglebutton",10,Q),s(),f(13,Hn,2,2,"p-message",11),f(14,Un,3,1,"p",12)(15,qn,2,3,"p-message",13)(16,Wn,2,1,"p",14)(17,ui,5,2),s(),f(18,hi,4,9,"footer",15),s()),e&2&&(r(4),u(" ",n.texts.pluginsHeading," "),r(2),p(n.texts.pluginsIntro),r(3),b("placeholder",n.texts.pluginsSearchPlaceholder)("ngModel",n.searchText()),_("aria-label",n.texts.pluginsSearchA11y),r(),_("aria-label",n.texts.pluginsKindFilterA11y),r(),F(n.kindFilterOptions),r(2),x(n.hasPendingChanges()?13:-1),r(),x(n.loading()?14:n.loadError()?15:n.plugins().length===0?16:17),r(4),x(n.hasPendingChanges()?18:-1))},dependencies:[oe,Ee,ne,ie,te,ke,Ft,Ot,At,Dt,Te,Me,ae,re,Tt,Mt,Fe,le],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden}.settings-plugins[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0}.settings-plugins__scroll[_ngcontent-%COMP%]{flex:1;overflow-y:auto;padding:1.25rem 1.5rem;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__kind-filter[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.375rem}.settings-plugins__kind-chip[_ngcontent-%COMP%]{--chip-accent: var(--kind-color, var(--p-text-color));--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}.app-dark[_nghost-%COMP%] .settings-plugins__kind-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__kind-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__banner[_ngcontent-%COMP%]{display:block}.settings-plugins__banner-body[_ngcontent-%COMP%]{font-weight:400}.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-bundle[_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}.settings-plugins__row-id[_ngcontent-%COMP%]{font-weight:600;font-family:var(--p-monospace-font-family)}.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(--p-monospace-font-family)}.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, var(--p-text-color)) 14%,transparent);border:1px solid color-mix(in oklab,var(--kind-color, var(--p-text-color)) 38%,transparent);color:color-mix(in oklab,var(--kind-color, var(--p-text-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, var(--p-text-color)) 22%,transparent);border-color:color-mix(in oklab,var(--kind-color, var(--p-text-color)) 55%,transparent);color:color-mix(in oklab,var(--kind-color, var(--p-text-color)) 80%,var(--p-surface-50))}.settings-plugins__row-status[_ngcontent-%COMP%]{font-weight:500}.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-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(--p-monospace-font-family);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;align-items:center;justify-content:space-between;gap:.75rem;padding:.375rem .5rem;border-radius:var(--p-border-radius)}.settings-plugins__subrow.is-clickable[_ngcontent-%COMP%]{cursor:pointer;transition:background .12s ease}.settings-plugins__subrow.is-clickable[_ngcontent-%COMP%]:hover{background:var(--p-content-hover-background)}.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}.settings-plugins__subrow-id[_ngcontent-%COMP%]{font-family:var(--p-monospace-font-family);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%]{display:inline-block;width:.5rem;height:.5rem;border-radius:50%;background:var(--p-warn-color);flex-shrink:0}.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__footer[_ngcontent-%COMP%]{display:flex;justify-content:flex-end;align-items:center;gap:.5rem;padding:.75rem 1.5rem;border-top:1px solid var(--p-content-border-color);background:var(--p-content-background)}.settings-plugins__footer-hint[_ngcontent-%COMP%]{font-style:italic;font-size:.75rem;line-height:1.4;color:var(--p-warn-color);margin-right:auto}"],changeDetection:0})};function bi(t,i){if(t&1&&(l(0,"p-message",3),d(1),s()),t&2){let e=a();b("closable",!1),r(),R(" ",e.texts.project.loadErrorPrefix," ",i," ")}}function fi(t,i){if(t&1&&(l(0,"p-message",4),d(1),s()),t&2){let e=a();b("closable",!1),r(),R(" ",e.texts.project.saveErrorPrefix," ",i," ")}}function xi(t,i){if(t&1){let e=I();l(0,"li",10)(1,"span",17),d(2),s(),l(3,"p-button",18),C("onClick",function(){let o=k(e).$implicit,c=a();return S(c.onExtraFolderRemove(o))}),s()()}if(t&2){let e=i.$implicit,n=a();r(2),p(e),r(),b("label",n.texts.project.removePathLabel)("outlined",!0)("disabled",n.isPending("scan.extraFolders")),_("data-testid","settings-project-extra-folders-remove")}}function vi(t,i){if(t&1){let e=I();l(0,"li",10)(1,"span",17),d(2),s(),l(3,"p-button",18),C("onClick",function(){let o=k(e).$implicit,c=a();return S(c.onReferencePathRemove(o))}),s()()}if(t&2){let e=i.$implicit,n=a();r(2),p(e),r(),b("label",n.texts.project.removePathLabel)("outlined",!0)("disabled",n.isPending("scan.referencePaths")),_("data-testid","settings-project-reference-paths-remove")}}var Ve=class t{dataSource=M(G);confirmation=M(ee);visible=V.required();texts=w;loading=v(!1);loadError=v(null);saveError=v(null);preferences=v(null);pending=v(new Set);newExtraFolder=v("");newReferencePath=v("");extraFolders=y(()=>this.preferences()?.scan.extraFolders??[]);referencePaths=y(()=>this.preferences()?.scan.referencePaths??[]);constructor(){N(()=>{this.visible()&&this.refresh()})}isPending(i){return this.pending().has(i)}onExtraFolderAdd(){let i=this.newExtraFolder().trim();if(i.length===0)return;let e=[...this.extraFolders(),i];this.runPatch("scan.extraFolders",{scan:{extraFolders:e}}).then(()=>{this.newExtraFolder.set("")})}onExtraFolderRemove(i){let e=this.extraFolders().filter(n=>n!==i);this.runPatch("scan.extraFolders",{scan:{extraFolders:[...e]}})}onReferencePathAdd(){let i=this.newReferencePath().trim();if(i.length===0)return;let e=[...this.referencePaths(),i];this.runPatch("scan.referencePaths",{scan:{referencePaths:e}}).then(()=>{this.newReferencePath.set("")})}onReferencePathRemove(i){let e=this.referencePaths().filter(n=>n!==i);this.runPatch("scan.referencePaths",{scan:{referencePaths:[...e]}})}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let i=await this.dataSource.getProjectPreferences();this.preferences.set(i)}catch(i){this.loadError.set(We(i)),this.preferences.set(null)}finally{this.loading.set(!1)}}async runPatch(i,e){if(this.pending().has(i))return;let n=new Set(this.pending());n.add(i),this.pending.set(n),this.saveError.set(null);try{let o=await this.dataSource.setProjectPreferences(e);this.preferences.set(o)}catch(o){if(o instanceof z&&o.code==="confirm-required"){let c=o.paths??[];this.confirmDialog(c,async()=>{try{let g=await this.dataSource.setProjectPreferences(W(q({},e),{confirm:!0}));this.preferences.set(g)}catch(g){this.saveError.set(We(g))}})}else this.saveError.set(We(o))}finally{let o=new Set(this.pending());o.delete(i),this.pending.set(o)}}confirmDialog(i,e){this.confirmation.confirm({header:w.project.confirmDialogHeader,message:w.project.confirmDialogIntro+`
122
122
  `+i.map(n=>`\u2022 ${n}`).join(`
123
- `),acceptLabel:w.project.confirmDialogAccept,rejectLabel:w.project.confirmDialogReject,acceptButtonProps:{severity:"primary"},rejectButtonProps:{severity:"secondary"},accept:()=>{e()}})}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-project"]],inputs:{visible:[1,"visible"]},features:[Z([ee])],decls:32,vars:19,consts:[["data-testid","settings-project",1,"settings-project"],["id","settings-project-heading",1,"settings-project__title"],[1,"settings-project__intro"],["severity","error","data-testid","settings-project-load-error",3,"closable"],["severity","error","data-testid","settings-project-save-error",3,"closable"],["data-testid","settings-project-extra-folders-row",1,"settings-project__list-row"],[1,"settings-project__row-text"],[1,"settings-project__row-label"],[1,"settings-project__row-description"],["role","list",1,"settings-project__path-list"],[1,"settings-project__path-item"],[1,"settings-project__add-row"],["type","text","pInputText","","data-testid","settings-project-extra-folders-input",3,"ngModelChange","ngModel","placeholder","disabled"],["severity","primary","size","small","data-testid","settings-project-extra-folders-add",3,"onClick","label","disabled"],["data-testid","settings-project-reference-paths-row",1,"settings-project__list-row"],["type","text","pInputText","","data-testid","settings-project-reference-paths-input",3,"ngModelChange","ngModel","placeholder","disabled"],["severity","primary","size","small","data-testid","settings-project-reference-paths-add",3,"onClick","label","disabled"],[1,"settings-project__path-text"],["severity","secondary","size","small",3,"onClick","label","outlined","disabled"]],template:function(e,n){if(e&1&&(l(0,"section",0)(1,"h2",1),d(2),s(),l(3,"p",2),d(4),s(),f(5,bi,2,3,"p-message",3),f(6,fi,2,3,"p-message",4),l(7,"div",5)(8,"div",6)(9,"div",7),d(10),s(),l(11,"div",8),d(12),s()(),l(13,"ul",9),O(14,xi,4,5,"li",10,Q),s(),l(16,"div",11)(17,"input",12),C("ngModelChange",function(c){return n.newExtraFolder.set(c)}),s(),l(18,"p-button",13),C("onClick",function(){return n.onExtraFolderAdd()}),s()()(),l(19,"div",14)(20,"div",6)(21,"div",7),d(22),s(),l(23,"div",8),d(24),s()(),l(25,"ul",9),O(26,vi,4,5,"li",10,Q),s(),l(28,"div",11)(29,"input",15),C("ngModelChange",function(c){return n.newReferencePath.set(c)}),s(),l(30,"p-button",16),C("onClick",function(){return n.onReferencePathAdd()}),s()()(),T(31,"p-confirmdialog"),s()),e&2){let o,c;_("aria-labelledby","settings-project-heading"),r(2),u(" ",n.texts.project.heading," "),r(2),p(n.texts.project.intro),r(),x((o=n.loadError())?5:-1,o),r(),x((c=n.saveError())?6:-1,c),r(4),p(n.texts.project.extraFoldersLabel),r(2),u(" ",n.texts.project.extraFoldersDescription," "),r(2),F(n.extraFolders()),r(3),b("ngModel",n.newExtraFolder())("placeholder",n.texts.project.extraFoldersPlaceholder)("disabled",n.isPending("scan.extraFolders")),r(),b("label",n.texts.project.addPathLabel)("disabled",n.isPending("scan.extraFolders")||n.newExtraFolder().trim().length===0),r(4),p(n.texts.project.referencePathsLabel),r(2),u(" ",n.texts.project.referencePathsDescription," "),r(2),F(n.referencePaths()),r(3),b("ngModel",n.newReferencePath())("placeholder",n.texts.project.referencePathsPlaceholder)("disabled",n.isPending("scan.referencePaths")),r(),b("label",n.texts.project.addPathLabel)("disabled",n.isPending("scan.referencePaths")||n.newReferencePath().trim().length===0)}},dependencies:[oe,Ee,ne,ie,te,ke,Pe,Se,Te,Me,ae,re],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__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:.5rem;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:.5rem;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:.35rem;background:var(--p-content-hover-background)}.settings-project__path-text[_ngcontent-%COMP%]{font-family:var(--p-font-family-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(--p-font-family-mono);font-size:.8rem}"],changeDetection:0})};function We(t){return t instanceof B||t instanceof Error?t.message:String(t)}var yi=(t,i)=>i.id;function Ci(t,i){if(t&1){let e=I();l(0,"li")(1,"button",6),C("click",function(){let o=k(e).$implicit,c=a();return S(c.selectSection(o.id))}),l(2,"span",7),d(3),s()()()}if(t&2){let e=i.$implicit,n=a();r(),$("is-active",n.activeSection()===e.id),_("aria-current",n.activeSection()===e.id?"page":null)("data-testid","settings-nav-"+e.id),r(2),p(e.label)}}function wi(t,i){if(t&1){let e=I();l(0,"sm-settings-plugins",8),C("applied",function(){k(e);let o=a();return S(o.onPluginsApplied())}),s()}if(t&2){let e=a();b("visible",e.pluginsVisible())}}function ki(t,i){if(t&1&&T(0,"sm-settings-general",5),t&2){let e=a();b("visible",e.generalVisible())}}function Si(t,i){if(t&1&&T(0,"sm-settings-project",5),t&2){let e=a();b("visible",e.projectVisible())}}function Pi(t,i){if(t&1&&T(0,"sm-settings-about",5),t&2){let e=a();b("visible",e.aboutVisible())}}function Ei(t,i){t&1&&T(0,"sm-settings-changelog")}var Mi=[{id:"general",label:w.sections.general},{id:"project",label:w.sections.project},{id:"plugins",label:w.sections.plugins},{id:"changelog",label:w.sections.changelog},{id:"about",label:w.sections.about}],cn=class t{visible=V.required();visibleChange=ye();confirmation=M(ee);pluginsPanel=mt(ge);texts=w;sections=Mi;activeSection=v("plugins");dialogStyle={width:"1024px",height:"720px",maxWidth:"92vw",maxHeight:"90vh"};pluginsVisible=y(()=>this.visible()&&this.activeSection()==="plugins");generalVisible=y(()=>this.visible()&&this.activeSection()==="general");projectVisible=y(()=>this.visible()&&this.activeSection()==="project");aboutVisible=y(()=>this.visible()&&this.activeSection()==="about");onVisibleChange(i){if(i){this.visibleChange.emit(!0);return}let e=this.pluginsPanel(),n=e?.dirtyIds().size??0;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:()=>{e?.applyChanges()},reject:()=>{e?.discardChanges(),this.visibleChange.emit(!1)}})}selectSection(i){this.activeSection.set(i)}onPluginsApplied(){this.visibleChange.emit(!1)}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-modal"]],viewQuery:function(e,n){e&1&&ct(n.pluginsPanel,ge,5),e&2&&gt()},inputs:{visible:[1,"visible"]},outputs:{visibleChange:"visibleChange"},features:[Z([ee])],decls:13,vars:12,consts:[["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"],["type","button",1,"settings-modal__sidebar-item",3,"click"],[1,"settings-modal__sidebar-label"],[3,"applied","visible"]],template:function(e,n){if(e&1&&(l(0,"p-dialog",0),C("visibleChange",function(c){return n.onVisibleChange(c)}),l(1,"div",1)(2,"nav",2)(3,"ul",3),O(4,Ci,4,5,"li",null,yi),s()(),l(6,"div",4),f(7,wi,1,1,"sm-settings-plugins",5)(8,ki,1,1,"sm-settings-general",5)(9,Si,1,1,"sm-settings-project",5)(10,Pi,1,1,"sm-settings-about",5)(11,Ei,1,0,"sm-settings-changelog"),s()(),T(12,"p-confirmdialog"),s()),e&2){let o;ve(n.dialogStyle),b("visible",n.visible())("modal",!0)("draggable",!1)("resizable",!1)("closable",!0)("closeOnEscape",!0)("dismissableMask",!0)("header",n.texts.modalTitle),r(2),_("aria-label",n.texts.modalTitle),r(2),F(n.sections),r(3),x((o=n.activeSection())==="plugins"?7:o==="general"?8:o==="project"?9:o==="about"?10:o==="changelog"?11:-1)}},dependencies:[te,Pe,Se,wt,Ct,Ie,Oe,De,ge,Ve],styles:["[_nghost-%COMP%]{display:contents}[_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}.settings-modal__sidebar-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.125rem}.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;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}"],changeDetection:0})};export{cn as SettingsModal};
123
+ `),acceptLabel:w.project.confirmDialogAccept,rejectLabel:w.project.confirmDialogReject,acceptButtonProps:{severity:"primary"},rejectButtonProps:{severity:"secondary"},accept:()=>{e()}})}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-project"]],inputs:{visible:[1,"visible"]},features:[Z([ee])],decls:32,vars:19,consts:[["data-testid","settings-project",1,"settings-project"],["id","settings-project-heading",1,"settings-project__title"],[1,"settings-project__intro"],["severity","error","data-testid","settings-project-load-error",3,"closable"],["severity","error","data-testid","settings-project-save-error",3,"closable"],["data-testid","settings-project-extra-folders-row",1,"settings-project__list-row"],[1,"settings-project__row-text"],[1,"settings-project__row-label"],[1,"settings-project__row-description"],["role","list",1,"settings-project__path-list"],[1,"settings-project__path-item"],[1,"settings-project__add-row"],["type","text","pInputText","","data-testid","settings-project-extra-folders-input",3,"ngModelChange","ngModel","placeholder","disabled"],["severity","primary","size","small","data-testid","settings-project-extra-folders-add",3,"onClick","label","disabled"],["data-testid","settings-project-reference-paths-row",1,"settings-project__list-row"],["type","text","pInputText","","data-testid","settings-project-reference-paths-input",3,"ngModelChange","ngModel","placeholder","disabled"],["severity","primary","size","small","data-testid","settings-project-reference-paths-add",3,"onClick","label","disabled"],[1,"settings-project__path-text"],["severity","secondary","size","small",3,"onClick","label","outlined","disabled"]],template:function(e,n){if(e&1&&(l(0,"section",0)(1,"h2",1),d(2),s(),l(3,"p",2),d(4),s(),f(5,bi,2,3,"p-message",3),f(6,fi,2,3,"p-message",4),l(7,"div",5)(8,"div",6)(9,"div",7),d(10),s(),l(11,"div",8),d(12),s()(),l(13,"ul",9),O(14,xi,4,5,"li",10,Q),s(),l(16,"div",11)(17,"input",12),C("ngModelChange",function(c){return n.newExtraFolder.set(c)}),s(),l(18,"p-button",13),C("onClick",function(){return n.onExtraFolderAdd()}),s()()(),l(19,"div",14)(20,"div",6)(21,"div",7),d(22),s(),l(23,"div",8),d(24),s()(),l(25,"ul",9),O(26,vi,4,5,"li",10,Q),s(),l(28,"div",11)(29,"input",15),C("ngModelChange",function(c){return n.newReferencePath.set(c)}),s(),l(30,"p-button",16),C("onClick",function(){return n.onReferencePathAdd()}),s()()(),T(31,"p-confirmdialog"),s()),e&2){let o,c;_("aria-labelledby","settings-project-heading"),r(2),u(" ",n.texts.project.heading," "),r(2),p(n.texts.project.intro),r(),x((o=n.loadError())?5:-1,o),r(),x((c=n.saveError())?6:-1,c),r(4),p(n.texts.project.extraFoldersLabel),r(2),u(" ",n.texts.project.extraFoldersDescription," "),r(2),F(n.extraFolders()),r(3),b("ngModel",n.newExtraFolder())("placeholder",n.texts.project.extraFoldersPlaceholder)("disabled",n.isPending("scan.extraFolders")),r(),b("label",n.texts.project.addPathLabel)("disabled",n.isPending("scan.extraFolders")||n.newExtraFolder().trim().length===0),r(4),p(n.texts.project.referencePathsLabel),r(2),u(" ",n.texts.project.referencePathsDescription," "),r(2),F(n.referencePaths()),r(3),b("ngModel",n.newReferencePath())("placeholder",n.texts.project.referencePathsPlaceholder)("disabled",n.isPending("scan.referencePaths")),r(),b("label",n.texts.project.addPathLabel)("disabled",n.isPending("scan.referencePaths")||n.newReferencePath().trim().length===0)}},dependencies:[oe,Ee,ne,ie,te,ke,Pe,Se,Te,Me,ae,re],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__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:.5rem;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:.5rem;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:.35rem;background:var(--p-content-hover-background)}.settings-project__path-text[_ngcontent-%COMP%]{font-family:var(--p-font-family-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(--p-font-family-mono);font-size:.8rem}"],changeDetection:0})};function We(t){return t instanceof z||t instanceof Error?t.message:String(t)}var yi=(t,i)=>i.id;function Ci(t,i){if(t&1){let e=I();l(0,"li")(1,"button",6),C("click",function(){let o=k(e).$implicit,c=a();return S(c.selectSection(o.id))}),l(2,"span",7),d(3),s()()()}if(t&2){let e=i.$implicit,n=a();r(),$("is-active",n.activeSection()===e.id),_("aria-current",n.activeSection()===e.id?"page":null)("data-testid","settings-nav-"+e.id),r(2),p(e.label)}}function wi(t,i){if(t&1){let e=I();l(0,"sm-settings-plugins",8),C("applied",function(){k(e);let o=a();return S(o.onPluginsApplied())}),s()}if(t&2){let e=a();b("visible",e.pluginsVisible())}}function ki(t,i){if(t&1&&T(0,"sm-settings-general",5),t&2){let e=a();b("visible",e.generalVisible())}}function Si(t,i){if(t&1&&T(0,"sm-settings-project",5),t&2){let e=a();b("visible",e.projectVisible())}}function Pi(t,i){if(t&1&&T(0,"sm-settings-about",5),t&2){let e=a();b("visible",e.aboutVisible())}}function Ei(t,i){t&1&&T(0,"sm-settings-changelog")}var Mi=[{id:"general",label:w.sections.general},{id:"project",label:w.sections.project},{id:"plugins",label:w.sections.plugins},{id:"changelog",label:w.sections.changelog},{id:"about",label:w.sections.about}],cn=class t{visible=V.required();visibleChange=ye();confirmation=M(ee);pluginsPanel=mt(ge);texts=w;sections=Mi;activeSection=v("plugins");dialogStyle={width:"1024px",height:"720px",maxWidth:"92vw",maxHeight:"90vh"};pluginsVisible=y(()=>this.visible()&&this.activeSection()==="plugins");generalVisible=y(()=>this.visible()&&this.activeSection()==="general");projectVisible=y(()=>this.visible()&&this.activeSection()==="project");aboutVisible=y(()=>this.visible()&&this.activeSection()==="about");onVisibleChange(i){if(i){this.visibleChange.emit(!0);return}let e=this.pluginsPanel(),n=e?.dirtyIds().size??0;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:()=>{e?.applyChanges()},reject:()=>{e?.discardChanges(),this.visibleChange.emit(!1)}})}selectSection(i){this.activeSection.set(i)}onPluginsApplied(){this.visibleChange.emit(!1)}static \u0275fac=function(e){return new(e||t)};static \u0275cmp=A({type:t,selectors:[["sm-settings-modal"]],viewQuery:function(e,n){e&1&&ct(n.pluginsPanel,ge,5),e&2&&gt()},inputs:{visible:[1,"visible"]},outputs:{visibleChange:"visibleChange"},features:[Z([ee])],decls:13,vars:12,consts:[["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"],["type","button",1,"settings-modal__sidebar-item",3,"click"],[1,"settings-modal__sidebar-label"],[3,"applied","visible"]],template:function(e,n){if(e&1&&(l(0,"p-dialog",0),C("visibleChange",function(c){return n.onVisibleChange(c)}),l(1,"div",1)(2,"nav",2)(3,"ul",3),O(4,Ci,4,5,"li",null,yi),s()(),l(6,"div",4),f(7,wi,1,1,"sm-settings-plugins",5)(8,ki,1,1,"sm-settings-general",5)(9,Si,1,1,"sm-settings-project",5)(10,Pi,1,1,"sm-settings-about",5)(11,Ei,1,0,"sm-settings-changelog"),s()(),T(12,"p-confirmdialog"),s()),e&2){let o;ve(n.dialogStyle),b("visible",n.visible())("modal",!0)("draggable",!1)("resizable",!1)("closable",!0)("closeOnEscape",!0)("dismissableMask",!0)("header",n.texts.modalTitle),r(2),_("aria-label",n.texts.modalTitle),r(2),F(n.sections),r(3),x((o=n.activeSection())==="plugins"?7:o==="general"?8:o==="project"?9:o==="about"?10:o==="changelog"?11:-1)}},dependencies:[te,Pe,Se,wt,Ct,Ie,Oe,De,ge,Ve],styles:["[_nghost-%COMP%]{display:contents}[_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}.settings-modal__sidebar-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.125rem}.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;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}"],changeDetection:0})};export{cn as SettingsModal};
@@ -23,5 +23,5 @@
23
23
  <style>:root{--ff-white:#ffffff;--ff-black:#000000;--ff-gray-0:#ffffff;--ff-gray-25:#fcfcfc;--ff-gray-50:#f8f8f7;--ff-gray-75:#f2f2f0;--ff-gray-100:#e9e9e6;--ff-gray-150:#dcdcd7;--ff-gray-200:#c9c9c1;--ff-gray-300:#afafa5;--ff-gray-400:#8d8d81;--ff-gray-500:#69695f;--ff-gray-600:#505048;--ff-gray-700:#3c3c36;--ff-gray-800:#272722;--ff-gray-900:#1b1b18;--ff-gray-950:#141412;--ff-gray-1000:#0f0f0d;--ff-alpha-black-04:rgba(15, 15, 13, .04);--ff-alpha-black-06:rgba(15, 15, 13, .06);--ff-alpha-black-08:rgba(15, 15, 13, .08);--ff-alpha-black-10:rgba(15, 15, 13, .1);--ff-alpha-black-12:rgba(15, 15, 13, .12);--ff-alpha-black-15:rgba(15, 15, 13, .15);--ff-alpha-black-20:rgba(15, 15, 13, .2);--ff-alpha-black-30:rgba(15, 15, 13, .3);--ff-alpha-black-40:rgba(15, 15, 13, .4);--ff-alpha-black-60:rgba(15, 15, 13, .6);--ff-alpha-white-04:rgba(255, 255, 255, .04);--ff-alpha-white-06:rgba(255, 255, 255, .06);--ff-alpha-white-08:rgba(255, 255, 255, .08);--ff-alpha-white-10:rgba(255, 255, 255, .1);--ff-alpha-white-12:rgba(255, 255, 255, .12);--ff-alpha-white-15:rgba(255, 255, 255, .15);--ff-alpha-white-20:rgba(255, 255, 255, .2);--ff-alpha-white-30:rgba(255, 255, 255, .3);--ff-alpha-white-40:rgba(255, 255, 255, .4);--ff-alpha-white-60:rgba(255, 255, 255, .6);--ff-blue-100:#e8f2ff;--ff-blue-200:#bad8ff;--ff-blue-300:#7db7ff;--ff-blue-400:#4176ff;--ff-blue-500:#2759db;--ff-blue-600:#1b3f9e;--ff-green-100:#e7f7ef;--ff-green-300:#71c795;--ff-green-400:#2b9b5f;--ff-green-500:#1e7748;--ff-yellow-100:#fff5de;--ff-yellow-300:#e1b354;--ff-yellow-400:#bb8121;--ff-yellow-500:#916112;--ff-red-100:#feeceb;--ff-red-300:#e48d85;--ff-red-400:#c55245;--ff-red-500:#9e3a2f;--ff-radius-4:4px;--ff-radius-6:6px;--ff-radius-pill:999px;--ff-font-family-sans:"Inter", ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--ff-font-family-mono:ui-monospace, "SFMono-Regular", "Menlo", "Monaco", "Consolas", "Liberation Mono", "Courier New", monospace;--ff-font-size-xs:12px;--ff-font-size-sm:14px;--ff-font-size-md:16px;--ff-font-size-lg:18px;--ff-shadow-1:0 1px 2px rgba(15, 15, 13, .05), 0 8px 20px rgba(15, 15, 13, .04);--ff-shadow-2:0 10px 28px rgba(15, 15, 13, .08), 0 3px 10px rgba(15, 15, 13, .05);--ff-shadow-3:0 18px 48px rgba(15, 15, 13, .12), 0 6px 16px rgba(15, 15, 13, .08)}:root{--ff-color-surface-page:var(--ff-gray-25);--ff-color-surface-canvas:var(--ff-gray-25);--ff-color-surface-card:var(--ff-white);--ff-color-surface-group:rgba(65, 118, 255, .14);--ff-color-surface-group-active:rgba(65, 118, 255, .2);--ff-color-surface-muted:var(--ff-gray-50);--ff-color-surface-soft:var(--ff-gray-75);--ff-color-surface-accent-soft:rgba(65, 118, 255, .1);--ff-color-border-default:var(--ff-alpha-black-12);--ff-color-border-subtle:var(--ff-alpha-black-08);--ff-color-border-strong:var(--ff-alpha-black-20);--ff-color-border-accent:var(--ff-blue-500);--ff-color-text-primary:var(--ff-gray-800);--ff-color-text-secondary:var(--ff-gray-500);--ff-color-text-tertiary:var(--ff-gray-400);--ff-color-text-inverse:var(--ff-white);--ff-color-accent:var(--ff-blue-500);--ff-color-accent-strong:var(--ff-blue-600);--ff-color-success:var(--ff-green-400);--ff-color-warning:var(--ff-yellow-400);--ff-color-danger:var(--ff-red-400);--ff-color-disabled-surface:var(--ff-gray-100);--ff-color-disabled-border:var(--ff-alpha-black-10);--ff-color-disabled-text:var(--ff-gray-300);--ff-color-selection-fill:rgba(65, 118, 255, .12);--ff-color-selection-stroke:rgba(65, 118, 255, .28);--ff-color-grid:var(--ff-alpha-black-08);--ff-color-grid-strong:var(--ff-alpha-black-15);--ff-color-connector-connected:var(--ff-blue-500);--ff-color-connection:var(--ff-gray-600);--ff-color-connection-muted:var(--ff-gray-300);--ff-color-connection-hover:var(--ff-alpha-black-12);--ff-color-grouping-drop-target-border:var(--ff-gray-800);--ff-color-grouping-drop-target-border-active:var(--ff-gray-800);--ff-color-waypoint-fill:var(--ff-white);--ff-color-waypoint-stroke:var(--ff-blue-500);--ff-color-waypoint-candidate-fill:var(--ff-white);--ff-color-waypoint-candidate-stroke:var(--ff-green-400);--ff-color-minimap-surface:var(--ff-white);--ff-color-minimap-node:var(--ff-gray-700);--ff-color-minimap-view:rgba(65, 118, 255, .14);--ff-color-magnetic-line:var(--ff-blue-500);--ff-color-magnetic-rect-fill:rgba(65, 118, 255, .08);--ff-color-magnetic-rect-border:rgba(65, 118, 255, .24);--ff-radius-node:var(--ff-radius-4);--ff-radius-group:var(--ff-radius-4);--ff-radius-control:var(--ff-radius-4);--ff-radius-socket-square:var(--ff-radius-6);--ff-radius-pill:var(--ff-radius-pill);--ff-font-sans:var(--ff-font-family-sans);--ff-font-mono:var(--ff-font-family-mono);--ff-font-size-body:var(--ff-font-size-sm);--ff-font-size-label:var(--ff-font-size-xs);--ff-shadow-surface:var(--ff-shadow-1);--ff-shadow-floating:var(--ff-shadow-2)}:root{--ff-flow-background-color:var(--ff-color-surface-page);--ff-flow-text-color:var(--ff-color-text-primary);--ff-flow-font-family:var(--ff-font-sans);--ff-flow-font-size:var(--ff-font-size-body);--ff-canvas-background-color:var(--ff-color-surface-canvas);--ff-node-background-color:var(--ff-color-surface-card);--ff-node-background-color-inverse:var(--ff-color-text-primary);--ff-node-border-color:var(--ff-color-border-default);--ff-node-border-color-selected:var(--ff-color-border-accent);--ff-node-color:var(--ff-color-text-primary);--ff-node-border-radius:var(--ff-radius-node);--ff-node-shadow:var(--ff-shadow-surface);--ff-node-shadow-selected:var(--ff-shadow-floating);--ff-node-width:120px;--ff-node-min-height:56px;--ff-node-padding:24px;--ff-group-background-color:var(--ff-color-surface-group);--ff-group-background-color-active:var(--ff-color-surface-group-active);--ff-group-border-color:var(--ff-color-border-subtle);--ff-group-border-color-selected:var(--ff-color-border-accent);--ff-group-border-color-active:var(--ff-color-border-accent);--ff-group-color:var(--ff-color-text-secondary);--ff-group-border-radius:var(--ff-radius-group);--ff-group-min-width:180px;--ff-group-min-height:120px;--ff-group-padding:24px;--ff-grouping-drop-target-border-color:var(--ff-color-grouping-drop-target-border);--ff-grouping-drop-target-border-style:dashed;--ff-grouping-drop-target-border-width:1px;--ff-grouping-drop-target-border-color-active:var(--ff-color-grouping-drop-target-border-active);--ff-grouping-drop-target-border-style-active:dashed;--ff-grouping-drop-target-border-width-active:2px;--ff-handle-background-color:var(--ff-color-surface-card);--ff-handle-border-color:var(--ff-color-border-strong);--ff-handle-color:var(--ff-color-text-secondary);--ff-handle-size:12px;--ff-handle-radius:var(--ff-radius-control);--ff-rotate-handle-size:16px;--ff-connector-background-color:var(--ff-color-surface-card);--ff-connector-border-color:var(--ff-color-border-default);--ff-connector-connected-color:var(--ff-color-connector-connected);--ff-connector-accent-color:var(--ff-color-accent);--ff-connector-disabled-color:var(--ff-color-disabled-surface);--ff-connector-disabled-border-color:var(--ff-color-disabled-border);--ff-connector-size:16px;--ff-connector-node-ring-color:var(--ff-canvas-background-color);--ff-outlet-background-color:var(--ff-color-surface-muted);--ff-outlet-border-color:var(--ff-color-border-default);--ff-outlet-color:var(--ff-color-accent);--ff-outlet-disabled-background-color:var(--ff-color-disabled-surface);--ff-outlet-disabled-border-color:var(--ff-color-disabled-border);--ff-outlet-disabled-color:var(--ff-color-disabled-text);--ff-outlet-border-radius:var(--ff-radius-pill);--ff-outlet-padding-y:6px;--ff-outlet-padding-x:12px;--ff-connection-color:var(--ff-color-connection);--ff-snap-connection-color:var(--ff-color-connection-muted);--ff-connection-hover-color:var(--ff-color-connection-hover);--ff-connection-selected-color:var(--ff-color-accent);--ff-connection-label-color:var(--ff-color-text-secondary);--ff-connection-content-color:var(--ff-node-color);--ff-connection-content-background-color:var(--ff-node-background-color);--ff-connection-content-border-color:var(--ff-node-border-color);--ff-connection-content-border-color-selected:var(--ff-connection-selected-color);--ff-connection-content-border-radius:var(--ff-node-border-radius);--ff-connection-content-font-size:13px;--ff-connection-content-padding-y:2px;--ff-connection-content-padding-x:8px;--ff-connection-width:2px;--ff-connection-hit-width:14px;--ff-connection-drag-handle-fill:var(--ff-color-surface-card);--ff-connection-drag-handle-stroke:var(--ff-color-accent);--ff-marker-color:var(--ff-connection-color);--ff-waypoint-fill:var(--ff-color-waypoint-fill);--ff-waypoint-stroke:var(--ff-color-waypoint-stroke);--ff-waypoint-candidate-fill:var(--ff-color-waypoint-candidate-fill);--ff-waypoint-candidate-stroke:var(--ff-color-waypoint-candidate-stroke);--ff-background-line-color:var(--ff-color-grid);--ff-background-dot-color:var(--ff-color-grid-strong);--ff-selection-area-color:var(--ff-color-selection-fill);--ff-selection-area-border-color:var(--ff-color-selection-stroke);--ff-minimap-background-color:var(--ff-color-minimap-surface);--ff-minimap-border-color:var(--ff-color-border-default);--ff-minimap-node-color:var(--ff-color-minimap-node);--ff-minimap-node-selected-color:var(--ff-color-accent);--ff-minimap-view-color:var(--ff-color-minimap-view);--ff-minimap-view-border-color:var(--ff-color-selection-stroke);--ff-minimap-border-radius:var(--ff-radius-node);--ff-minimap-shadow:var(--ff-shadow-floating);--ff-magnetic-line-color:var(--ff-color-magnetic-line);--ff-magnetic-rect-fill:var(--ff-color-magnetic-rect-fill);--ff-magnetic-rect-border-color:var(--ff-color-magnetic-rect-border);--ff-external-item-background-color:var(--ff-color-surface-card);--ff-external-item-border-color:var(--ff-color-border-default);--ff-external-item-color:var(--ff-color-text-primary);--ff-external-item-disabled-color:var(--ff-color-disabled-text);--ff-external-item-disabled-background-color:var(--ff-color-disabled-surface);--ff-external-item-border-radius:var(--ff-radius-node);--ff-external-item-shadow:var(--ff-shadow-surface);--ff-external-item-preview-shadow:var(--ff-shadow-floating);--ff-external-item-placeholder-background-color:var(--ff-color-surface-soft);--ff-external-item-placeholder-border-color:var(--ff-color-border-subtle)}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0)}to{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}:root{--fa-family-brands:"Font Awesome 7 Brands";--fa-font-brands:normal 400 1em/1 var(--fa-family-brands)}:root{--fa-font-regular:normal 400 1em/1 var(--fa-family-classic)}:root{--fa-family-classic:"Font Awesome 7 Free";--fa-font-solid:normal 900 1em/1 var(--fa-family-classic);--fa-style-family-classic:var(--fa-family-classic)}:root{--sm-font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace;--sm-font-display-brand:"Geist", system-ui, sans-serif;--sm-radius-sm:3px;--sm-radius-md:4px;--sm-radius-lg:.5rem;--sm-radius-pill:999px;--sm-bg-page:#f8fafc;--sm-bg-content:#ffffff;--sm-bg-hover:#f1f5f9;--sm-border:#e2e8f0;--sm-nav-active-bg:#eff6ff;--sm-violet-50:#F5F3FF;--sm-violet-100:#EDE9FE;--sm-violet-200:#DDD6FE;--sm-violet-300:#C4B5FD;--sm-violet-400:#A78BFA;--sm-violet-500:#8B5CF6;--sm-violet-600:#7C3AED;--sm-violet-700:#6D28D9;--sm-violet-800:#4C1D95;--sm-violet-900:#2E1065;--sm-edge-invokes:#b8843a;--sm-edge-invokes-active:#f59e0b;--sm-edge-references:#6b8ab8;--sm-edge-references-active:#3b82f6;--sm-edge-mentions:#9ca3af;--sm-edge-mentions-active:#475569;--sm-edge-supersedes:#8a7eb3;--sm-edge-supersedes-active:#8b5cf6;--sm-link-in-bg:#e0e7ff;--sm-link-in-fg:#3730a3;--sm-link-out-bg:#fef3c7;--sm-link-out-fg:#92400e;--sm-severity-info:#1e3a8a;--sm-severity-success:#065f46;--sm-severity-warn:#ca8a04;--sm-severity-error:#991b1b;--sm-severity-info-bg:rgba(219, 234, 254, .35);--sm-severity-success-bg:rgba(209, 250, 229, .35);--sm-severity-warn-bg:rgba(254, 243, 199, .35);--sm-severity-error-bg:rgba(254, 226, 226, .35);--sm-stat-tokens-bg:rgba(59, 130, 246, .14);--sm-stat-bytes-bg:rgba(245, 158, 11, .16);--sm-shadow-topbar:0 1px 2px rgba(0, 0, 0, .03);--sm-shadow-eventlog:0 -4px 16px rgba(0, 0, 0, .08);--sm-shadow-floating:0 4px 14px rgba(0, 0, 0, .08);--sm-shadow-card:0 1px 2px rgba(0, 0, 0, .05);--sm-shadow-card-hover:0 3px 12px rgba(0, 0, 0, .12)}html,body{margin:0;padding:0;height:100dvh;overflow:hidden;font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:var(--sm-bg-page);color:var(--p-text-color)}*,*:before,*:after{box-sizing:border-box}*{scrollbar-width:thin;scrollbar-color:color-mix(in srgb,var(--p-text-color) 30%,transparent) transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background-color:color-mix(in srgb,var(--p-text-color) 25%,transparent);border-radius:var(--sm-radius-pill);border:2px solid transparent;background-clip:padding-box}*::-webkit-scrollbar-thumb:hover{background-color:color-mix(in srgb,var(--p-text-color) 45%,transparent)}</style><link rel="stylesheet" href="styles-DLFC3F2G.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-DLFC3F2G.css"></noscript></head>
24
24
  <body>
25
25
  <sm-root></sm-root>
26
- <link rel="modulepreload" href="chunk-RR36XBDS.js"><link rel="modulepreload" href="chunk-533YMAY3.js"><link rel="modulepreload" href="chunk-UVILXZ5L.js"><link rel="modulepreload" href="chunk-J3YWUNFO.js"><link rel="modulepreload" href="chunk-H2J55DNK.js"><link rel="modulepreload" href="chunk-Q7L6LLAK.js"><script src="main-PNXPQAO6.js" type="module"></script></body>
26
+ <link rel="modulepreload" href="chunk-RR36XBDS.js"><link rel="modulepreload" href="chunk-533YMAY3.js"><link rel="modulepreload" href="chunk-UVILXZ5L.js"><link rel="modulepreload" href="chunk-J3YWUNFO.js"><link rel="modulepreload" href="chunk-H2J55DNK.js"><link rel="modulepreload" href="chunk-Q7L6LLAK.js"><script src="main-QPX4WBVF.js" type="module"></script></body>
27
27
  </html>