@skill-map/cli 0.30.0 → 0.31.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/tutorial/sm-master/references/fixture-templates.md +206 -0
- package/dist/cli/tutorial/sm-master/references/tour-authoring.md +296 -0
- package/dist/cli/tutorial/sm-master/references/tour-plugins.md +209 -0
- package/dist/cli/tutorial/sm-master/references/tour-settings.md +170 -0
- package/dist/cli.js +71 -69
- package/dist/cli.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/kernel/index.js +1 -1
- package/dist/kernel/index.js.map +1 -1
- package/dist/ui/{chunk-HOJFYUH4.js → chunk-PVKIT7DW.js} +4 -4
- package/dist/ui/index.html +1 -1
- package/dist/ui/{main-X5YGJFU6.js → main-N23S66NJ.js} +1 -1
- package/package.json +1 -1
- /package/dist/cli/tutorial/{sm-master.md → sm-master/SKILL.md} +0 -0
- /package/dist/cli/tutorial/{sm-tutorial.md → sm-tutorial/SKILL.md} +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{b as Nt,c as w,d as Vt,e as Ie}from"./chunk-LNRQ7VKE.js";import{a as wt,b as kt,c as Se,d as Pe,e as Mt}from"./chunk-WJLIYGWJ.js";import{a as Te,b as Me,c as It,d as Ot,e as Ft,f as Dt,g as At,h as jt,i as re,j as ae}from"./chunk-VDQLDTTR.js";import{e as St,f as Ee,h as ne,i as ie,j as oe,l as Pt,m as Et,n as Tt}from"./chunk-LS2NXZQZ.js";import{$ as nt,Aa as at,Ba as Y,Bc as ee,Hb as Z,I as Ye,Ic as Ce,J as Je,Jb as ut,Jc as we,K as Ze,Ka as p,Lc as xt,M as et,Na as _,O as T,Oa as f,Oc as vt,Pa as st,Qa as Q,Qb as mt,Ra as O,S as tt,Sa as F,T as k,Ta as h,Tb as y,U as S,Ua as l,Uc as yt,Va as s,Vc as me,Wa as M,Wb as ye,Wc as Ct,Xa as b,Xb as V,Ya as x,Yb as ht,Za as J,ab as lt,bd as ke,cc as ze,cd as te,da as v,db as I,dc as _t,ea as N,eb as X,fb as C,ga as Re,hb as a,id as G,jd as z,ka as it,kb as dt,la as pe,lb as ct,mb as be,nb as xe,oa as r,oc as ft,pb as gt,pc as bt,qb as pt,sb as Be,tb as $,ub as ve,vb as ue,wa as A,wb as d,xa as ot,xb as u,yb as m,za as rt,zb as R}from"./chunk-LTQTJU54.js";import"./chunk-3SI3TVER.js";import{a as q,b as W}from"./chunk-VB56BUGO.js";function dn(t,n){if(t&1&&(b(0,"p",6),d(1),x()),t&2){let e=a();r(),R(" ",e.texts.aboutErrorPrefix," ",e.loadError()," ")}}var Oe=class t{dataSource=T(G);updateCheck=T(Nt);theme=T(Ie);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);cwd=y(()=>this.health()?.cwd??this.texts.aboutLoading);dbDisplay=y(()=>{let n=this.health();return n?this.texts.aboutDbValue(n.db,cn(n.dbPath,n.cwd)):this.texts.aboutLoading});constructor(){N(()=>{this.visible()&&this.health()===null&&this.load()})}async load(){this.loadError.set(null);try{let n=await this.dataSource.health();this.health.set(n)}catch(n){let e=n instanceof z||n instanceof Error?n.message:String(n);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:57,vars:25,consts:[["aria-labelledby","settings-about-heading","data-testid","settings-about",1,"settings-about"],[1,"settings-about__header"],["alt","","aria-hidden","true","data-testid","settings-about-logo",1,"settings-about__logo",3,"src"],[1,"settings-about__heading-text"],["id","settings-about-heading",1,"settings-about__title"],[1,"settings-about__intro"],["data-testid","settings-about-error",1,"settings-about__error"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-star",1,"settings-about__star",3,"href"],["aria-hidden","true",1,"fa-solid","fa-star","settings-about__star-icon"],[1,"settings-about__star-text"],[1,"settings-about__star-heading"],[1,"settings-about__star-body"],[1,"settings-about__star-cta"],["aria-hidden","true",1,"fa-solid","fa-star"],[1,"settings-about__list"],[1,"settings-about__row"],[1,"settings-about__label"],[1,"settings-about__value"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-website",1,"settings-about__link",3,"href"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-github",1,"settings-about__link",3,"href"],["data-testid","settings-about-cli",1,"settings-about__value"],["data-testid","settings-about-spec",1,"settings-about__value"],["data-testid","settings-about-schema",1,"settings-about__value"],["data-testid","settings-about-cwd",1,"settings-about__value"],["data-testid","settings-about-db",1,"settings-about__value"]],template:function(e,i){e&1&&(b(0,"section",0)(1,"header",1),J(2,"img",2),b(3,"div",3)(4,"h2",4),d(5),x(),b(6,"p",5),d(7),x()()(),_(8,dn,2,2,"p",6),b(9,"a",7),J(10,"i",8),b(11,"span",9)(12,"span",10),d(13),x(),b(14,"span",11),d(15),x()(),b(16,"span",12),J(17,"i",13),d(18),x()(),b(19,"dl",14)(20,"div",15)(21,"dt",16),d(22),x(),b(23,"dd",17)(24,"a",18),d(25),x()()(),b(26,"div",15)(27,"dt",16),d(28),x(),b(29,"dd",17)(30,"a",19),d(31),x()()(),b(32,"div",15)(33,"dt",16),d(34),x(),b(35,"dd",20),d(36),x()(),b(37,"div",15)(38,"dt",16),d(39),x(),b(40,"dd",21),d(41),x()(),b(42,"div",15)(43,"dt",16),d(44),x(),b(45,"dd",22),d(46),x()(),b(47,"div",15)(48,"dt",16),d(49),x(),b(50,"dd",23),d(51),x()(),b(52,"div",15)(53,"dt",16),d(54),x(),b(55,"dd",24),d(56),x()()()()),e&2&&(r(2),X("src",i.markSrc(),pe),r(3),m(" ",i.texts.aboutHeading," "),r(2),u(i.texts.aboutIntro),r(),f(i.loadError()?8:-1),r(),X("href",i.texts.aboutGithubUrl,pe),p("aria-label",i.texts.aboutStarA11y),r(4),u(i.texts.aboutStarHeading),r(2),u(i.texts.aboutStarBody),r(3),m(" ",i.texts.aboutStarCta," "),r(4),u(i.texts.aboutWebsiteLabel),r(2),X("href",i.texts.aboutWebsiteUrl,pe),r(),u(i.texts.aboutWebsiteUrl),r(3),u(i.texts.aboutGithubLabel),r(2),X("href",i.texts.aboutGithubUrl,pe),r(),u(i.texts.aboutGithubUrl),r(3),u(i.texts.aboutCliLabel),r(2),m(" ",i.cliVersion()," "),r(3),u(i.texts.aboutSpecLabel),r(2),m(" ",i.specVersion()," "),r(3),u(i.texts.aboutSchemaLabel),r(2),m(" ",i.schemaVersion()," "),r(3),u(i.texts.aboutFolderLabel),r(2),m(" ",i.cwd()," "),r(3),u(i.texts.aboutDbLabel),r(2),m(" ",i.dbDisplay()," "))},styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-about[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem}.settings-about__header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem}.settings-about__logo[_ngcontent-%COMP%]{width:64px;height:64px;flex-shrink:0}.settings-about__heading-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;min-width:0}.settings-about__title[_ngcontent-%COMP%]{font-size:1.15rem;font-weight:600;margin:0}.settings-about__intro[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);font-size:.875rem}.settings-about__error[_ngcontent-%COMP%]{margin:0;padding:.5rem .75rem;border-radius:var(--p-border-radius);background:var(--p-message-error-background);color:var(--p-message-error-color);font-size:.875rem}.settings-about__list[_ngcontent-%COMP%]{margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.settings-about__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:180px 1fr;align-items:baseline;gap:.75rem;padding:.5rem .75rem;border-radius:var(--p-border-radius)}.settings-about__row[_ngcontent-%COMP%]:nth-child(odd){background:var(--p-content-hover-background)}.settings-about__label[_ngcontent-%COMP%]{margin:0;font-size:.875rem;color:var(--p-text-muted-color)}.settings-about__value[_ngcontent-%COMP%]{margin:0;font-family:var(--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 cn(t,n){if(!t||!n)return t;let e=n.replace(/[/\\]+$/,"");return t.startsWith(e)?t.slice(e.length).replace(/^[/\\]+/,""):t}var Lt={schemaVersion:1,entries:[{version:"0.30.0",date:"2026-05-16",kind:"user-facing",highlights:[{body:"When `@foo` or `/foo` fails to resolve and a file `foo.md` exists nearby without `name:` in its frontmatter, broken-ref now suggests adding `name: foo` to that file. The hint appears in `sm check`, `sm show`, and the inspector panel.",packages:["@skill-map/cli"]},{body:"**Cleaner scans on prose with file paths and `@file` refs.** `/Volumes/foo` no longer emits a broken-ref, `@file.md` lands as a `references` link (was `mentions`), and tokens inside code blocks are skipped. Re-run `sm scan` to refresh counts.",packages:["@skill-map/cli"]}]},{version:"0.29.0",date:"2026-05-16",kind:"user-facing",highlights:[{body:"The graph view now lets you pick the layout algorithm (**Balanced**, **Stretched** or **Organic**), direction (top/bottom/left/right) and spacing (compact / normal / spacious) from new buttons in the bottom toolbar. The matching section in Settings \u2192 General was removed.",packages:["@skill-map/cli"]},{body:"**Plugin manifests are smaller.** `plugin.json` drops `id`; every extension declares only `version` + `description` plus kind-specific fields. View contributions move to `ui:`. Provider kinds live under `kinds/<kindName>/`. Run `sm plugins doctor` after upgrading.",packages:["@skill-map/cli","@skill-map/spec","@skill-map/testkit"]},{body:"`.skillmapignore` is now created with mode `0o644` (was `0o600`), so other users on multi-user hosts can read it without `chmod`. Existing files keep their current mode; re-run `sm init --force` if you want the new default.",packages:["@skill-map/cli"]},{body:"**Plugin layout changed.** Extensions now live at `<kind>s/<name>/index.js` (e.g. `extractors/keyword-counter/index.js`); `plugin.json` no longer lists `extensions[]` and requires `granularity`. Run `sm plugins doctor` after migrating, or use `sm plugins create` for new plugins.",packages:["@skill-map/cli","@skill-map/spec","@skill-map/testkit"]}]},{version:"0.28.0",date:"2026-05-15",kind:"user-facing",highlights:[{body:"A new **Matrix** theme is now available in Settings \u2192 General \u2192 Theme. Once enabled it overrides the topbar dark/light toggle; click that toggle to exit Matrix and return to your previous dark/light mode in one step.",packages:["@skill-map/cli"]},{body:"`sm plugins show core` (and the same verb against any user plugin) now groups extensions by kind in pipeline order, **provider, extractor, analyzer, action, formatter, hook**, with each group sorted by id. The JSON output is unchanged.",packages:["@skill-map/cli"]},{body:'The `Update available` banner now leads with a **down arrow** (`\u2B07`) instead of the previous up arrow, reading as "an update is coming in" rather than "upgrade outward".',packages:["@skill-map/cli"]}]},{version:"0.26.2",date:"2026-05-15",kind:"user-facing",highlights:[{body:"`sm plugins show <bundle>/<ext>` now shows the requested extension's own detail (Kind, Version, Stability, Description, Preconditions, Entry) instead of dumping the parent bundle. `--json` returns just that extension. Bare bundle ids (`sm plugins show core`) are unchanged.",packages:["@skill-map/cli"]}]},{version:"0.26.0",date:"2026-05-15",kind:"user-facing",highlights:[{body:"**Bidirectional `.sm` relations no longer double-count.** A relation declared from both sides (e.g. `supersedes` + `supersededBy`) now tallies as `1` in the `linksIn` / `linksOut` chips and the graph. Before, the count was inflated on cold start and dropped on the next save.",packages:["@skill-map/cli"]},{body:"The `.sm` annotation catalog shrinks from 13 to 10 fields. `requires`, `related`, and `conflictsWith` were dropped, their edges all rendered as plain `references` and added no extra meaning. Existing sidecars keep working; the three keys are now flagged by `unknown-field`.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Broken frontmatter now lights up on the graph.** Vendor agent/skill nodes missing `name` or `description` show a red alert badge and a matching footer chip, same chassis as broken references. Trigger-style links (`/cmd`, `@handle`) now also tally into the target's `linksIn`.",packages:["@skill-map/cli"]}]},{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 Rt=Lt;var pn=(t,n)=>n.version;function un(t,n){if(t&1&&(b(0,"p",3),d(1),x()),t&2){let e=a();r(),m(" ",e.texts.changelogEmpty," ")}}function mn(t,n){if(t&1&&(b(0,"p",10),d(1),x()),t&2){let e=a(3);r(),m(" ",e.texts.changelogInternalRelease," ")}}function hn(t,n){if(t&1&&(b(0,"li",15),d(1),x()),t&2){let e=n.$implicit;r(),u(e)}}function _n(t,n){if(t&1&&(b(0,"ul",14),O(1,hn,2,1,"li",15,Q),x()),t&2){let e=a().$implicit,i=a(4);p("aria-label",i.texts.changelogAffectedPackages),r(),F(e.packages)}}function fn(t,n){if(t&1&&(b(0,"li",12),J(1,"div",13),_(2,_n,3,1,"ul",14),x()),t&2){let e=n.$implicit;r(),X("innerHTML",e.bodyHtml,it),r(),f(e.packages.length?2:-1)}}function bn(t,n){if(t&1&&(b(0,"ul",11),O(1,fn,3,2,"li",12,st),x()),t&2){let e=a().$implicit;r(),F(e.highlights)}}function xn(t,n){if(t&1&&(b(0,"li",6)(1,"header",7)(2,"span",8),d(3),x(),b(4,"span",9),d(5),x()(),_(6,mn,2,1,"p",10)(7,bn,3,0,"ul",11),x()),t&2){let e=n.$implicit;$("settings-changelog__entry--internal",e.kind==="internal"),p("data-testid","settings-changelog-entry-"+e.version),r(3),m("v",e.version),r(2),u(e.date),r(),f(e.kind==="internal"?6:7)}}function vn(t,n){if(t&1&&(b(0,"ol",4),O(1,xn,8,6,"li",5,pn),x()),t&2){let e=a();r(),F(e.entries())}}var Fe=class t{markdown=T(Mt);texts=w;entries=v([]);hasEntries=y(()=>this.entries().length>0);ngOnInit(){this.renderAll()}async renderAll(){let n=[];for(let e of Rt.entries){let i=[];for(let o of e.highlights)i.push({bodyHtml:await this.markdown.render(o.body),packages:o.packages});n.push({version:e.version,date:this.formatDate(e.date),kind:e.kind,highlights:i})}this.entries.set(n)}formatDate(n){let e=new Date(n+"T00:00:00Z");return Number.isNaN(e.getTime())?n: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,i){e&1&&(b(0,"section",0)(1,"h2",1),d(2),x(),b(3,"p",2),d(4),x(),_(5,un,2,1,"p",3)(6,vn,3,0,"ol",4),x()),e&2&&(p("aria-labelledby","settings-changelog-heading"),r(2),m(" ",i.texts.changelogHeading," "),r(2),u(i.texts.changelogIntro),r(),f(i.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 Bt=`
|
|
1
|
+
import{b as Nt,c as k,d as Vt,e as Ie}from"./chunk-LNRQ7VKE.js";import{a as kt,b as wt,c as Se,d as Pe,e as Mt}from"./chunk-WJLIYGWJ.js";import{a as Te,b as Me,c as It,d as Ot,e as Ft,f as Dt,g as At,h as jt,i as re,j as ae}from"./chunk-VDQLDTTR.js";import{e as St,f as Ee,h as ne,i as ie,j as oe,l as Pt,m as Et,n as Tt}from"./chunk-LS2NXZQZ.js";import{$ as nt,Aa as at,Ba as Y,Bc as ee,Hb as Z,I as Ye,Ic as Ce,J as Je,Jb as ut,Jc as ke,K as Ze,Ka as p,Lc as xt,M as et,Na as _,O as T,Oa as f,Oc as vt,Pa as st,Qa as Q,Qb as mt,Ra as O,S as tt,Sa as F,T as w,Ta as h,Tb as y,U as S,Ua as l,Uc as yt,Va as s,Vc as me,Wa as M,Wb as ye,Wc as Ct,Xa as b,Xb as V,Ya as x,Yb as ht,Za as J,ab as lt,bd as we,cc as ze,cd as te,da as v,db as I,dc as _t,ea as N,eb as X,fb as C,ga as Re,hb as a,id as G,jd as z,ka as it,kb as dt,la as pe,lb as ct,mb as be,nb as xe,oa as r,oc as ft,pb as gt,pc as bt,qb as pt,sb as Be,tb as $,ub as ve,vb as ue,wa as A,wb as d,xa as ot,xb as u,yb as m,za as rt,zb as R}from"./chunk-LTQTJU54.js";import"./chunk-3SI3TVER.js";import{a as q,b as W}from"./chunk-VB56BUGO.js";function dn(t,n){if(t&1&&(b(0,"p",6),d(1),x()),t&2){let e=a();r(),R(" ",e.texts.aboutErrorPrefix," ",e.loadError()," ")}}var Oe=class t{dataSource=T(G);updateCheck=T(Nt);theme=T(Ie);visible=V.required();texts=k;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);cwd=y(()=>this.health()?.cwd??this.texts.aboutLoading);dbDisplay=y(()=>{let n=this.health();return n?this.texts.aboutDbValue(n.db,cn(n.dbPath,n.cwd)):this.texts.aboutLoading});constructor(){N(()=>{this.visible()&&this.health()===null&&this.load()})}async load(){this.loadError.set(null);try{let n=await this.dataSource.health();this.health.set(n)}catch(n){let e=n instanceof z||n instanceof Error?n.message:String(n);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:57,vars:25,consts:[["aria-labelledby","settings-about-heading","data-testid","settings-about",1,"settings-about"],[1,"settings-about__header"],["alt","","aria-hidden","true","data-testid","settings-about-logo",1,"settings-about__logo",3,"src"],[1,"settings-about__heading-text"],["id","settings-about-heading",1,"settings-about__title"],[1,"settings-about__intro"],["data-testid","settings-about-error",1,"settings-about__error"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-star",1,"settings-about__star",3,"href"],["aria-hidden","true",1,"fa-solid","fa-star","settings-about__star-icon"],[1,"settings-about__star-text"],[1,"settings-about__star-heading"],[1,"settings-about__star-body"],[1,"settings-about__star-cta"],["aria-hidden","true",1,"fa-solid","fa-star"],[1,"settings-about__list"],[1,"settings-about__row"],[1,"settings-about__label"],[1,"settings-about__value"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-website",1,"settings-about__link",3,"href"],["target","_blank","rel","noopener noreferrer","data-testid","settings-about-github",1,"settings-about__link",3,"href"],["data-testid","settings-about-cli",1,"settings-about__value"],["data-testid","settings-about-spec",1,"settings-about__value"],["data-testid","settings-about-schema",1,"settings-about__value"],["data-testid","settings-about-cwd",1,"settings-about__value"],["data-testid","settings-about-db",1,"settings-about__value"]],template:function(e,i){e&1&&(b(0,"section",0)(1,"header",1),J(2,"img",2),b(3,"div",3)(4,"h2",4),d(5),x(),b(6,"p",5),d(7),x()()(),_(8,dn,2,2,"p",6),b(9,"a",7),J(10,"i",8),b(11,"span",9)(12,"span",10),d(13),x(),b(14,"span",11),d(15),x()(),b(16,"span",12),J(17,"i",13),d(18),x()(),b(19,"dl",14)(20,"div",15)(21,"dt",16),d(22),x(),b(23,"dd",17)(24,"a",18),d(25),x()()(),b(26,"div",15)(27,"dt",16),d(28),x(),b(29,"dd",17)(30,"a",19),d(31),x()()(),b(32,"div",15)(33,"dt",16),d(34),x(),b(35,"dd",20),d(36),x()(),b(37,"div",15)(38,"dt",16),d(39),x(),b(40,"dd",21),d(41),x()(),b(42,"div",15)(43,"dt",16),d(44),x(),b(45,"dd",22),d(46),x()(),b(47,"div",15)(48,"dt",16),d(49),x(),b(50,"dd",23),d(51),x()(),b(52,"div",15)(53,"dt",16),d(54),x(),b(55,"dd",24),d(56),x()()()()),e&2&&(r(2),X("src",i.markSrc(),pe),r(3),m(" ",i.texts.aboutHeading," "),r(2),u(i.texts.aboutIntro),r(),f(i.loadError()?8:-1),r(),X("href",i.texts.aboutGithubUrl,pe),p("aria-label",i.texts.aboutStarA11y),r(4),u(i.texts.aboutStarHeading),r(2),u(i.texts.aboutStarBody),r(3),m(" ",i.texts.aboutStarCta," "),r(4),u(i.texts.aboutWebsiteLabel),r(2),X("href",i.texts.aboutWebsiteUrl,pe),r(),u(i.texts.aboutWebsiteUrl),r(3),u(i.texts.aboutGithubLabel),r(2),X("href",i.texts.aboutGithubUrl,pe),r(),u(i.texts.aboutGithubUrl),r(3),u(i.texts.aboutCliLabel),r(2),m(" ",i.cliVersion()," "),r(3),u(i.texts.aboutSpecLabel),r(2),m(" ",i.specVersion()," "),r(3),u(i.texts.aboutSchemaLabel),r(2),m(" ",i.schemaVersion()," "),r(3),u(i.texts.aboutFolderLabel),r(2),m(" ",i.cwd()," "),r(3),u(i.texts.aboutDbLabel),r(2),m(" ",i.dbDisplay()," "))},styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-about[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem}.settings-about__header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem}.settings-about__logo[_ngcontent-%COMP%]{width:64px;height:64px;flex-shrink:0}.settings-about__heading-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;min-width:0}.settings-about__title[_ngcontent-%COMP%]{font-size:1.15rem;font-weight:600;margin:0}.settings-about__intro[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);font-size:.875rem}.settings-about__error[_ngcontent-%COMP%]{margin:0;padding:.5rem .75rem;border-radius:var(--p-border-radius);background:var(--p-message-error-background);color:var(--p-message-error-color);font-size:.875rem}.settings-about__list[_ngcontent-%COMP%]{margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.settings-about__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:180px 1fr;align-items:baseline;gap:.75rem;padding:.5rem .75rem;border-radius:var(--p-border-radius)}.settings-about__row[_ngcontent-%COMP%]:nth-child(odd){background:var(--p-content-hover-background)}.settings-about__label[_ngcontent-%COMP%]{margin:0;font-size:.875rem;color:var(--p-text-muted-color)}.settings-about__value[_ngcontent-%COMP%]{margin:0;font-family:var(--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 cn(t,n){if(!t||!n)return t;let e=n.replace(/[/\\]+$/,"");return t.startsWith(e)?t.slice(e.length).replace(/^[/\\]+/,""):t}var Lt={schemaVersion:1,entries:[{version:"0.31.0",date:"2026-05-16",kind:"user-facing",highlights:[{body:'`sm tutorial` now lays the skill at `.claude/skills/<slug>/` (was a single `.md`) so multi-file skills like `sm-master` ship their `references/`. Claude Code auto-discovers it; invoke with its trigger phrase (e.g. "tutorial maestro"), no more `@sm-master.md`.',packages:["@skill-map/cli"]}]},{version:"0.30.0",date:"2026-05-16",kind:"user-facing",highlights:[{body:"When `@foo` or `/foo` fails to resolve and a file `foo.md` exists nearby without `name:` in its frontmatter, broken-ref now suggests adding `name: foo` to that file. The hint appears in `sm check`, `sm show`, and the inspector panel.",packages:["@skill-map/cli"]},{body:"**Cleaner scans on prose with file paths and `@file` refs.** `/Volumes/foo` no longer emits a broken-ref, `@file.md` lands as a `references` link (was `mentions`), and tokens inside code blocks are skipped. Re-run `sm scan` to refresh counts.",packages:["@skill-map/cli"]}]},{version:"0.29.0",date:"2026-05-16",kind:"user-facing",highlights:[{body:"The graph view now lets you pick the layout algorithm (**Balanced**, **Stretched** or **Organic**), direction (top/bottom/left/right) and spacing (compact / normal / spacious) from new buttons in the bottom toolbar. The matching section in Settings \u2192 General was removed.",packages:["@skill-map/cli"]},{body:"**Plugin manifests are smaller.** `plugin.json` drops `id`; every extension declares only `version` + `description` plus kind-specific fields. View contributions move to `ui:`. Provider kinds live under `kinds/<kindName>/`. Run `sm plugins doctor` after upgrading.",packages:["@skill-map/cli","@skill-map/spec","@skill-map/testkit"]},{body:"`.skillmapignore` is now created with mode `0o644` (was `0o600`), so other users on multi-user hosts can read it without `chmod`. Existing files keep their current mode; re-run `sm init --force` if you want the new default.",packages:["@skill-map/cli"]},{body:"**Plugin layout changed.** Extensions now live at `<kind>s/<name>/index.js` (e.g. `extractors/keyword-counter/index.js`); `plugin.json` no longer lists `extensions[]` and requires `granularity`. Run `sm plugins doctor` after migrating, or use `sm plugins create` for new plugins.",packages:["@skill-map/cli","@skill-map/spec","@skill-map/testkit"]}]},{version:"0.28.0",date:"2026-05-15",kind:"user-facing",highlights:[{body:"A new **Matrix** theme is now available in Settings \u2192 General \u2192 Theme. Once enabled it overrides the topbar dark/light toggle; click that toggle to exit Matrix and return to your previous dark/light mode in one step.",packages:["@skill-map/cli"]},{body:"`sm plugins show core` (and the same verb against any user plugin) now groups extensions by kind in pipeline order, **provider, extractor, analyzer, action, formatter, hook**, with each group sorted by id. The JSON output is unchanged.",packages:["@skill-map/cli"]},{body:'The `Update available` banner now leads with a **down arrow** (`\u2B07`) instead of the previous up arrow, reading as "an update is coming in" rather than "upgrade outward".',packages:["@skill-map/cli"]}]},{version:"0.26.2",date:"2026-05-15",kind:"user-facing",highlights:[{body:"`sm plugins show <bundle>/<ext>` now shows the requested extension's own detail (Kind, Version, Stability, Description, Preconditions, Entry) instead of dumping the parent bundle. `--json` returns just that extension. Bare bundle ids (`sm plugins show core`) are unchanged.",packages:["@skill-map/cli"]}]},{version:"0.26.0",date:"2026-05-15",kind:"user-facing",highlights:[{body:"**Bidirectional `.sm` relations no longer double-count.** A relation declared from both sides (e.g. `supersedes` + `supersededBy`) now tallies as `1` in the `linksIn` / `linksOut` chips and the graph. Before, the count was inflated on cold start and dropped on the next save.",packages:["@skill-map/cli"]},{body:"The `.sm` annotation catalog shrinks from 13 to 10 fields. `requires`, `related`, and `conflictsWith` were dropped, their edges all rendered as plain `references` and added no extra meaning. Existing sidecars keep working; the three keys are now flagged by `unknown-field`.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Broken frontmatter now lights up on the graph.** Vendor agent/skill nodes missing `name` or `description` show a red alert badge and a matching footer chip, same chassis as broken references. Trigger-style links (`/cmd`, `@handle`) now also tally into the target's `linksIn`.",packages:["@skill-map/cli"]}]},{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 Rt=Lt;var pn=(t,n)=>n.version;function un(t,n){if(t&1&&(b(0,"p",3),d(1),x()),t&2){let e=a();r(),m(" ",e.texts.changelogEmpty," ")}}function mn(t,n){if(t&1&&(b(0,"p",10),d(1),x()),t&2){let e=a(3);r(),m(" ",e.texts.changelogInternalRelease," ")}}function hn(t,n){if(t&1&&(b(0,"li",15),d(1),x()),t&2){let e=n.$implicit;r(),u(e)}}function _n(t,n){if(t&1&&(b(0,"ul",14),O(1,hn,2,1,"li",15,Q),x()),t&2){let e=a().$implicit,i=a(4);p("aria-label",i.texts.changelogAffectedPackages),r(),F(e.packages)}}function fn(t,n){if(t&1&&(b(0,"li",12),J(1,"div",13),_(2,_n,3,1,"ul",14),x()),t&2){let e=n.$implicit;r(),X("innerHTML",e.bodyHtml,it),r(),f(e.packages.length?2:-1)}}function bn(t,n){if(t&1&&(b(0,"ul",11),O(1,fn,3,2,"li",12,st),x()),t&2){let e=a().$implicit;r(),F(e.highlights)}}function xn(t,n){if(t&1&&(b(0,"li",6)(1,"header",7)(2,"span",8),d(3),x(),b(4,"span",9),d(5),x()(),_(6,mn,2,1,"p",10)(7,bn,3,0,"ul",11),x()),t&2){let e=n.$implicit;$("settings-changelog__entry--internal",e.kind==="internal"),p("data-testid","settings-changelog-entry-"+e.version),r(3),m("v",e.version),r(2),u(e.date),r(),f(e.kind==="internal"?6:7)}}function vn(t,n){if(t&1&&(b(0,"ol",4),O(1,xn,8,6,"li",5,pn),x()),t&2){let e=a();r(),F(e.entries())}}var Fe=class t{markdown=T(Mt);texts=k;entries=v([]);hasEntries=y(()=>this.entries().length>0);ngOnInit(){this.renderAll()}async renderAll(){let n=[];for(let e of Rt.entries){let i=[];for(let o of e.highlights)i.push({bodyHtml:await this.markdown.render(o.body),packages:o.packages});n.push({version:e.version,date:this.formatDate(e.date),kind:e.kind,highlights:i})}this.entries.set(n)}formatDate(n){let e=new Date(n+"T00:00:00Z");return Number.isNaN(e.getTime())?n: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,i){e&1&&(b(0,"section",0)(1,"h2",1),d(2),x(),b(3,"p",2),d(4),x(),_(5,un,2,1,"p",3)(6,vn,3,0,"ol",4),x()),e&2&&(p("aria-labelledby","settings-changelog-heading"),r(2),m(" ",i.texts.changelogHeading," "),r(2),u(i.texts.changelogIntro),r(),f(i.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 Bt=`
|
|
2
2
|
.p-toggleswitch {
|
|
3
3
|
display: inline-block;
|
|
4
4
|
width: dt('toggleswitch.width');
|
|
@@ -112,12 +112,12 @@ import{b as Nt,c as w,d as Vt,e as Ie}from"./chunk-LNRQ7VKE.js";import{a as wt,b
|
|
|
112
112
|
.p-toggleswitch.p-disabled .p-toggleswitch-handle {
|
|
113
113
|
background: dt('toggleswitch.handle.disabled.background');
|
|
114
114
|
}
|
|
115
|
-
`;var yn=["handle"],Cn=["input"],
|
|
115
|
+
`;var yn=["handle"],Cn=["input"],kn=t=>({checked:t});function wn(t,n){t&1&<(0)}function Sn(t,n){if(t&1&&Y(0,wn,1,0,"ng-container",3),t&2){let e=a();h("ngTemplateOutlet",e.handleTemplate||e._handleTemplate)("ngTemplateOutletContext",ut(2,kn,e.checked()))}}var Pn=`
|
|
116
116
|
${Bt}
|
|
117
117
|
|
|
118
118
|
p-toggleswitch.ng-invalid.ng-dirty > .p-toggleswitch-slider {
|
|
119
119
|
border-color: dt('toggleswitch.invalid.border.color');
|
|
120
120
|
}
|
|
121
|
-
`,En={root:{position:"relative"}},Tn={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"},zt=(()=>{class t extends xt{name="toggleswitch";style=Pn;classes=Tn;inlineStyles=En;static \u0275fac=(()=>{let e;return function(o){return(e||(e=Re(t)))(o||t)}})();static \u0275prov=Je({token:t,factory:t.\u0275fac})}return t})();var Kt=new et("TOGGLESWITCH_INSTANCE"),Mn={provide:St,useExisting:Ye(()=>le),multi:!0},le=(()=>{class t extends Pt{componentName="ToggleSwitch";$pcToggleSwitch=T(Kt,{optional:!0,skipSelf:!0})??void 0;bindDirectiveInstance=T(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 nt;input;handleTemplate;_handleTemplate;focused=!1;_componentStyle=T(zt);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,i){i(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=Re(t)))(o||t)}})();static \u0275cmp=A({type:t,selectors:[["p-toggleswitch"],["p-toggleSwitch"],["p-toggle-switch"]],contentQueries:function(i,o,c){if(i&1&&dt(c,yn,4)(c,Ce,4),i&2){let g;be(g=xe())&&(o.handleTemplate=g.first),be(g=xe())&&(o.templates=g)}},viewQuery:function(i,o){if(i&1&&ct(Cn,5),i&2){let c;be(c=xe())&&(o.input=c.first)}},hostVars:7,hostBindings:function(i,o){i&1&&C("click",function(g){return o.onHostClick(g)}),i&2&&(p("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",_t],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([Mn,zt,{provide:Kt,useExisting:t},{provide:vt,useExisting:t}]),rt([me]),at],decls:5,vars:22,consts:[["input",""],["type","checkbox","role","switch",3,"focus","blur","checked","pAutoFocus","pBind"],[3,"pBind"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(i,o){i&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),_(4,Sn,1,4,"ng-container"),s()()),i&2&&(ue(o.cx("input")),h("checked",o.checked())("pAutoFocus",o.autofocus)("pBind",o.ptm("input")),p("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")),h("pBind",o.ptm("slider")),p("data-p",o.dataP),r(),ue(o.cx("handle")),h("pBind",o.ptm("handle")),p("data-p",o.dataP),r(),f(o.handleTemplate||o._handleTemplate?4:-1))},dependencies:[bt,ft,yt,we,Ct,me],encapsulation:2,changeDetection:0})}return t})(),De=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=ot({type:t});static \u0275inj=Ze({imports:[le,we,we]})}return t})();var In=(t,n)=>n.key;function On(t,n){if(t&1&&(l(0,"p-message",3),d(1),s()),t&2){let e=a();h("closable",!1),r(),R(" ",e.texts.general.loadErrorPrefix," ",n," ")}}function Fn(t,n){if(t&1&&(l(0,"p-message",4),d(1),s()),t&2){let e=a();h("closable",!1),r(),R(" ",e.texts.general.saveErrorPrefix," ",n," ")}}function Dn(t,n){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=n.$implicit,i=a();p("data-testid","settings-general-row-"+e.key),r(3),u(i.toggleLabel(e.key)),r(2),m(" ",i.toggleDescription(e.key)," "),r(),h("ngModel",i.valueOf(e))("disabled",i.loading()||i.isPending(e.key)||i.preferences()===null),p("data-testid","settings-general-toggle-"+e.key)}}function An(t,n){if(t&1&&(l(0,"span",15),d(1),s()),t&2){let e=n.$implicit,i=a();r(),m(" ",i.extraThemeLabel(e.labelKey)," ")}}var jn=[{key:"updateCheck.enabled",read:t=>t.updateCheck.enabled,patch:t=>({updateCheck:{enabled:t}})}],Nn=[{value:"none",labelKey:"none"},{value:"matrix",labelKey:"matrix"}];function Vn(t){return t==="matrix"?"matrix":"none"}function Ln(t){return t==="matrix"?"matrix":null}var Ae=class t{dataSource=T(G);themeService=T(Ie);visible=V.required();texts=w;toggles=jn;extraThemeOptions=Nn;extraThemeWire=y(()=>Vn(this.themeService.extraTheme()));loading=v(!1);loadError=v(null);saveError=v(null);preferences=v(null);pending=v(new Set);constructor(){N(()=>{this.visible()&&this.refresh()})}toggleLabel(n){return w.general.toggles[n].label}toggleDescription(n){return w.general.toggles[n].description}valueOf(n){let e=this.preferences();return e?n.read(e):!1}isPending(n){return this.pending().has(n)}onToggle(n,e){this.runToggle(n,e)}onExtraThemeChange(n){this.themeService.setExtraTheme(Ln(n??"none"))}extraThemeLabel(n){return w.general.extraTheme.options[n].label}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let n=await this.dataSource.getPreferences();this.preferences.set(n)}catch(n){this.loadError.set(Gt(n)),this.preferences.set(null)}finally{this.loading.set(!1)}}async runToggle(n,e){if(this.pending().has(n.key))return;let i=new Set(this.pending());i.add(n.key),this.pending.set(i),this.saveError.set(null);try{let o=await this.dataSource.setPreferences(n.patch(e));this.preferences.set(o)}catch(o){this.saveError.set(Gt(o))}finally{let o=new Set(this.pending());o.delete(n.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-extra-theme",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-extra-theme",3,"ngModelChange","options","ngModel","allowEmpty"],["pTemplate","item"],[3,"ngModelChange","ngModel","disabled"],["data-testid","settings-general-extra-theme-option"]],template:function(e,i){if(e&1&&(l(0,"section",0)(1,"h2",1),d(2),s(),l(3,"p",2),d(4),s(),_(5,On,2,3,"p-message",3),_(6,Fn,2,3,"p-message",4),l(7,"ul",5),O(8,Dn,7,6,"li",6,In),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 i.onExtraThemeChange(c)}),Y(22,An,2,1,"ng-template",13),s()()()()),e&2){let o,c;p("aria-labelledby","settings-general-heading"),r(2),m(" ",i.texts.general.heading," "),r(2),u(i.texts.general.intro),r(),f((o=i.loadError())?5:-1,o),r(),f((c=i.saveError())?6:-1,c),r(2),F(i.toggles),r(3),m(" ",i.texts.general.localPreferences.heading," "),r(2),m(" ",i.texts.general.localPreferences.intro," "),r(5),m(" ",i.texts.general.extraTheme.label," "),r(2),m(" ",i.texts.general.extraTheme.description," "),r(),h("options",i.extraThemeOptions)("ngModel",i.extraThemeWire())("allowEmpty",!1)}},dependencies:[oe,ne,ie,ae,re,Ce,jt,At,De,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 Gt(t){return t instanceof z||t instanceof Error?t.message:String(t)}var Ke={provider:"#7C3AED",extractor:"#A78BFA",analyzer:"#5FD17C",action:"#00C853",formatter:"#5BC0EB",hook:"#FFB627"};function qt(t){let n=t.toLowerCase();return Ke[n]??"currentColor"}var Ve=["all",...Object.keys(Ke)],je=["claude","gemini","agent-skills","core"],Ne=["provider","extractor","analyzer","action","formatter","hook"];function de(t,n){return`${t}/${n}`}function $e(t){let n=new Map;for(let e of t)if(!ce(e.status)){if(e.granularity==="bundle"){n.set(e.id,e.status==="enabled");continue}if(e.granularity==="extension"&&e.extensions)for(let i of e.extensions)n.set(de(e.id,i.id),i.enabled)}return n}function Ge(t){let n=t.target;return!n||typeof n.closest!="function"?!1:n.closest('label, button, input, [role="switch"], p-toggleswitch')!==null}function Wt(t,n){if(Rn(t,n))return[t];if(t.granularity!=="extension"||!t.extensions)return[];let e=t.extensions.filter(i=>Bn(i,n));return e.length===0?[]:[W(q({},t),{extensions:e})]}function Qt(t,n){if(t.granularity==="bundle")return t.kinds.some(i=>i.toLowerCase()===n)?[t]:[];if(!t.extensions)return[];let e=t.extensions.filter(i=>i.kind.toLowerCase()===n);return e.length===0?[]:[W(q({},t),{extensions:e})]}function Xt(t){if(t.locked)return[];if(t.granularity!=="extension"||!t.extensions)return[t];let n=t.extensions.filter(e=>!e.locked);return n.length===0?[]:[W(q({},t),{extensions:n})]}function Yt(t){return t.slice().sort((e,i)=>{let o=je.indexOf(e.id),c=je.indexOf(i.id),g=o>=0?o:je.length,P=c>=0?c:je.length;return g!==P?g-P:e.id.localeCompare(i.id)}).map(e=>{if(e.granularity!=="extension"||!e.extensions)return e;let i=e.extensions.slice().sort((o,c)=>{let g=Ne.indexOf(o.kind.toLowerCase()),P=Ne.indexOf(c.kind.toLowerCase()),K=g>=0?g:Ne.length,L=P>=0?P:Ne.length;return K!==L?K-L:o.id.localeCompare(c.id)});return W(q({},e),{extensions:i})})}function Rn(t,n){return!!(t.id.toLowerCase().includes(n)||t.description&&t.description.toLowerCase().includes(n))}function Bn(t,n){return!!(t.id.toLowerCase().includes(n)||t.description&&t.description.toLowerCase().includes(n))}function ce(t){return t==="incompatible-spec"||t==="invalid-manifest"||t==="load-error"||t==="id-collision"}function He(t){return t instanceof z||t instanceof Error?t.message:String(t)}function Jt(t,n){return ce(t.status)?n.statusFailure[t.status]??t.status:t.status==="enabled"?n.enabledLabel:n.disabledLabel}function Zt(t,n){switch(t){case"built-in":return n.sourceBuiltIn;case"project":return n.sourceProject}}var Ue="sm.settings.plugins.collapsed",qe="sm.settings.plugins.kind-filter";function en(){let t=null;try{t=localStorage.getItem(Ue)}catch{return new Set}if(!t)return new Set;let n;try{n=JSON.parse(t)}catch{return new Set}if(!Array.isArray(n))return new Set;let e=new Set;for(let i of n)typeof i=="string"&&i.length>0&&e.add(i);return e}function tn(t){try{if(t.size===0){localStorage.removeItem(Ue);return}localStorage.setItem(Ue,JSON.stringify([...t]))}catch{}}function nn(){let t=null;try{t=localStorage.getItem(qe)}catch{return"all"}return t&&Ve.includes(t)?t:"all"}function on(t){try{if(t==="all"){localStorage.removeItem(qe);return}localStorage.setItem(qe,t)}catch{}}function We(){tt(We);let t=v(en());N(()=>tn(t()));let n=i=>{let o=new Set(t());o.has(i)?o.delete(i):o.add(i),t.set(o)},e=i=>!t().has(i);return{collapsed:t.asReadonly(),toggleExpanded:n,isExpanded:e}}function rn(t){let n=v(""),e=y(()=>n().trim().length>0),i=v(nn()),o=y(()=>i()!=="all");N(()=>on(i()));let c=y(()=>Yt(t.plugins().flatMap(Xt))),g=y(()=>{let L=n().trim().toLowerCase(),_e=i(),H=c();return _e!=="all"&&(H=H.flatMap(fe=>Qt(fe,_e))),L.length>0&&(H=H.flatMap(fe=>Wt(fe,L))),H});return{searchText:n,searchActive:e,kindFilter:i,setKindFilter:L=>{i.set(L)},isKindFilterActive:L=>i()===L,kindFilterActive:o,kindFilterOptions:Ve,visiblePlugins:c,filteredPlugins:g}}function an(t){let n=v(!1),e=v(null),i=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:n,loadError:e,toggleError:i,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()=>{n.set(!0),e.set(null),i.set(null);try{let E=await t.dataSource.listPlugins();o.set([...E.items]);let D=$e(E.items);c.set(D),g.set(new Map(D))}catch(E){e.set(He(E)),o.set([]),c.set(new Map),g.set(new Map)}finally{n.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),i.set(null);let U=!1;try{let j=await t.dataSource.applyPluginChanges(D);o.set([...j.items]);let Xe=$e(j.items);c.set(Xe),g.set(new Map(Xe)),t.scanTrigger.run(),U=!0}catch(j){i.set(He(j))}finally{P.set(!1)}return{ok:U}},discardChanges:()=>{g.set(new Map(c())),i.set(null)}}}var sn=(t,n)=>n.id;function $n(t,n){if(t&1&&d(0),t&2){let e=a().$implicit,i=a();m(" ",e==="all"?i.texts.pluginsKindFilterAll:e," ")}}function Gn(t,n){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,mt),s()}if(t&2){let e=n.$implicit,i=a();Be("--kind-color",e==="all"?null:i.kindTint(e)),h("ngModel",i.isKindFilterActive(e))("styleClass","settings-plugins__kind-chip"+(e==="all"?" is-all":""))("ariaLabel",i.texts.pluginsKindFilterOptionA11y(e,!i.isKindFilterActive(e))),p("data-testid","settings-plugins-kind-chip-"+e)}}function Hn(t,n){if(t&1&&(l(0,"p-message",11),d(1),s()),t&2){let e=a();h("closable",!1),r(),m(" ",e.texts.unsavedChangesMessage(e.dirtyIds().size)," ")}}function Un(t,n){if(t&1&&(l(0,"p",12),M(1,"i",17),d(2),s()),t&2){let e=a();r(2),m(" ",e.texts.loading," ")}}function qn(t,n){if(t&1&&(l(0,"p-message",13),d(1),s()),t&2){let e=a();h("closable",!1),r(),R(" ",e.texts.errorPrefix," ",e.loadError()," ")}}function Wn(t,n){if(t&1&&(l(0,"p",14),d(1),s()),t&2){let e=a();r(),m(" ",e.texts.empty," ")}}function Qn(t,n){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);h("closable",!0),r(),R(" ",e.texts.toggleErrorPrefix," ",e.toggleError()," ")}}function Xn(t,n){if(t&1&&(l(0,"p",19),M(1,"i",23),d(2),s()),t&2){let e=a(2);r(2),m(" ",e.texts.pluginsSearchEmpty(e.searchText())," ")}}function Yn(t,n){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())}),M(1,"i",42),s()}if(t&2){let e=a().$implicit,i=a(2);p("aria-expanded",i.isExpanded(e.id))("aria-label",i.isExpanded(e.id)?i.texts.collapseLabel:i.texts.expandLabel)("data-testid","settings-bundle-expand-"+e.id),r(),$("fa-chevron-down",i.isExpanded(e.id))("fa-chevron-right",!i.isExpanded(e.id))}}function Jn(t,n){t&1&&M(0,"span",27)}function Zn(t,n){if(t&1&&M(0,"span",30),t&2){let e=a().$implicit;p("data-testid","settings-row-dirty-"+e.id)}}function ei(t,n){if(t&1&&(l(0,"span",33),d(1),s()),t&2){let e=a().$implicit;r(),m("v",e.version)}}function ti(t,n){if(t&1&&(l(0,"span",34),M(1,"i",43),d(2),s()),t&2){let e=a().$implicit,i=a(2);h("title",i.texts.lockedTooltip),p("data-testid","settings-row-locked-"+e.id),r(2),m(" ",i.texts.lockedLabel," ")}}function ni(t,n){if(t&1&&(l(0,"span",35),d(1),s()),t&2){let e=a().$implicit,i=a(2);r(),u(i.statusLabel(e))}}function ii(t,n){if(t&1&&(l(0,"p",36),d(1),s()),t&2){let e=a().$implicit;r(),u(e.description)}}function oi(t,n){if(t&1&&(l(0,"span",37),d(1),s()),t&2){let e=a().$implicit;r(),u(e.reason)}}function ri(t,n){if(t&1&&(l(0,"p",38),M(1,"i",44),d(2),s()),t&2){let e=a().$implicit,i=a(2);p("data-testid","settings-row-starts-disabled-"+e.id),r(2),m(" ",i.texts.startsAsDisabledRowHint," ")}}function ai(t,n){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,i=a(2);h("ngModel",i.pendingEnabled(e.id))("disabled",i.applying()||!!e.locked)("ariaLabel",i.texts.a11y.pluginToggle(e.id,!i.pendingEnabled(e.id))),p("data-testid","settings-toggle-"+e.id)}}function si(t,n){if(t&1&&M(0,"span",30),t&2){let e=a().$implicit,i=a(2).$implicit;p("data-testid","settings-extrow-dirty-"+i.id+"-"+e.id)}}function li(t,n){if(t&1&&(l(0,"span",34),M(1,"i",43),d(2),s()),t&2){let e=a().$implicit,i=a(2).$implicit,o=a(2);h("title",o.texts.lockedTooltip),p("data-testid","settings-extrow-locked-"+i.id+"-"+e.id),r(2),m(" ",o.texts.lockedLabel," ")}}function di(t,n){if(t&1&&(l(0,"p",53),d(1),s()),t&2){let e=a().$implicit;r(),u(e.description)}}function ci(t,n){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),_(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(),_(10,li,3,3,"span",34),s(),_(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=n.$implicit,i=a(2).$implicit,o=a(2);$("is-clickable",o.extensionToggleInteractive(e))("is-dirty",o.isDirty(o.qualifiedExt(i.id,e.id))),p("aria-label",o.texts.a11y.extensionRow(o.qualifiedExt(i.id,e.id)))("data-testid","settings-extrow-"+i.id+"-"+e.id),r(3),f(o.isDirty(o.qualifiedExt(i.id,e.id))?3:-1),r(2),u(e.id),r(),Be("--kind-color",o.kindTint(e.kind)),r(),u(e.kind),r(2),m("v",e.version),r(),f(e.locked?10:-1),r(),f(e.description?11:-1),r(),h("ngModel",o.pendingEnabled(o.qualifiedExt(i.id,e.id)))("disabled",o.applying()||!!e.locked)("ariaLabel",o.texts.a11y.extensionToggle(o.qualifiedExt(i.id,e.id),!o.pendingEnabled(o.qualifiedExt(i.id,e.id)))),p("data-testid","settings-ext-toggle-"+i.id+"-"+e.id)}}function gi(t,n){if(t&1&&(l(0,"ul",40),O(1,ci,13,18,"li",46,sn),s()),t&2){let e=a().$implicit;p("data-testid","settings-extensions-"+e.id),r(),F(e.extensions)}}function pi(t,n){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))}),_(2,Yn,2,7,"button",26)(3,Jn,1,0,"span",27),l(4,"div",28)(5,"div",29),_(6,Zn,1,1,"span",30),l(7,"span",31),d(8),s(),l(9,"span",32),d(10),s(),_(11,ei,2,1,"span",33),_(12,ti,3,3,"span",34),_(13,ni,2,1,"span",35),s(),_(14,ii,2,1,"p",36),_(15,oi,2,1,"span",37),_(16,ri,3,2,"p",38),s(),_(17,ai,1,4,"p-toggleswitch",39),s(),_(18,gi,3,1,"ul",40),s()}if(t&2){let e=n.$implicit,i=a(2);$("is-extension-bundle",e.granularity==="extension")("is-failed",!i.canToggleBundle(e)&&e.granularity==="bundle")("is-clickable",i.rowIsClickable(e))("is-dirty",e.granularity==="bundle"&&i.isDirty(e.id)),p("data-testid","settings-row-"+e.id),r(),p("aria-label",i.texts.a11y.pluginRow(e.id)),r(),f(e.granularity==="extension"&&(e.extensions!=null&&e.extensions.length)?2:3),r(4),f(e.granularity==="bundle"&&i.isDirty(e.id)?6:-1),r(2),u(e.id),r(2),u(i.sourceLabel(e.source)),r(),f(e.version?11:-1),r(),f(e.locked?12:-1),r(),f(!i.canToggleBundle(e)&&e.granularity==="bundle"?13:-1),r(),f(e.description?14:-1),r(),f(e.reason?15:-1),r(),f(i.showStartsAsDisabledHint(e)?16:-1),r(),f(i.canToggleBundle(e)?17:-1),r(),f(e.granularity==="extension"&&(e.extensions!=null&&e.extensions.length)&&i.isExpanded(e.id)?18:-1)}}function ui(t,n){if(t&1&&(_(0,Qn,2,3,"p-message",18),_(1,Xn,3,1,"p",19),l(2,"ul",20),O(3,pi,19,22,"li",21,sn),s()),t&2){let e=a();f(e.toggleError()?0:-1),r(),f(e.searchActive()&&e.filteredPlugins().length===0?1:-1),r(2),F(e.filteredPlugins())}}function mi(t,n){if(t&1&&(l(0,"em",54),d(1),s()),t&2){let e=a(2);r(),m(" ",e.texts.startsAsDisabledFooterHint," ")}}function hi(t,n){if(t&1){let e=I();l(0,"footer",15),_(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(),f(e.restartRecommended()?1:-1),r(),h("text",!0)("label",e.texts.discardChanges)("ariaLabel",e.texts.discardA11y)("disabled",e.applying()),r(),h("label",e.texts.applyAndClose)("ariaLabel",e.texts.applyA11y)("disabled",e.applying())("loading",e.applying())}}var ge=class t{dataSource=T(G);scanTrigger=T(Vt);visible=V.required();applied=ye();texts=w;pluginState=an({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=We();collapsed=this.pluginCollapse.collapsed;pluginFilter=rn({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(n){this.pluginFilter.setKindFilter(n)}isKindFilterActive(n){return this.pluginFilter.isKindFilterActive(n)}toggleExpanded(n){this.pluginCollapse.toggleExpanded(n)}isExpanded(n){return this.pluginCollapse.isExpanded(n)}pendingEnabled(n){return this.pluginState.pendingEnabled(n)}isDirty(n){return this.pluginState.isDirty(n)}showStartsAsDisabledHint(n){return n.startsAsDisabled?this.pendingEnabled(n.id):!1}onBundleToggle(n,e){this.pluginState.onBundleToggle(n,e)}onExtensionToggle(n,e,i){this.pluginState.onExtensionToggle(n,e,i)}async applyChanges(){(await this.pluginState.applyChanges()).ok&&this.applied.emit()}discardChanges(){this.pluginState.discardChanges()}canToggleBundle(n){return n.granularity==="extension"?!1:!ce(n.status)}bundleToggleInteractive(n){return this.canToggleBundle(n)&&!n.locked}extensionToggleInteractive(n){return!n.locked}rowIsClickable(n){return!!(this.bundleToggleInteractive(n)||n.granularity==="extension"&&(n.extensions?.length??0)>0)}onRowClick(n,e){if(!Ge(e)){if(this.bundleToggleInteractive(n)){this.onBundleToggle(n,!this.pendingEnabled(n.id));return}n.granularity==="extension"&&(n.extensions?.length??0)>0&&this.toggleExpanded(n.id)}}onSubrowClick(n,e,i){if(Ge(i)||!this.extensionToggleInteractive(e))return;let o=de(n,e.id);this.onExtensionToggle(n,e,!this.pendingEnabled(o))}statusLabel(n){return Jt(n,this.texts)}sourceLabel(n){return Zt(n,this.texts)}qualifiedExt(n,e){return de(n,e)}kindTint(n){return qt(n)}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,i){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),M(8,"p-inputicon",7),l(9,"input",8),C("ngModelChange",function(c){return i.searchText.set(c)}),s()(),l(10,"div",9),O(11,Gn,3,6,"p-togglebutton",10,Q),s(),_(13,Hn,2,2,"p-message",11),_(14,Un,3,1,"p",12)(15,qn,2,3,"p-message",13)(16,Wn,2,1,"p",14)(17,ui,5,2),s(),_(18,hi,4,9,"footer",15),s()),e&2&&(r(4),m(" ",i.texts.pluginsHeading," "),r(2),u(i.texts.pluginsIntro),r(3),h("placeholder",i.texts.pluginsSearchPlaceholder)("ngModel",i.searchText()),p("aria-label",i.texts.pluginsSearchA11y),r(),p("aria-label",i.texts.pluginsKindFilterA11y),r(),F(i.kindFilterOptions),r(2),f(i.hasPendingChanges()?13:-1),r(),f(i.loading()?14:i.loadError()?15:i.plugins().length===0?16:17),r(4),f(i.hasPendingChanges()?18:-1))},dependencies:[oe,Ee,ne,ie,te,ke,Ot,It,Dt,Ft,Me,Te,ae,re,Tt,Et,De,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 fi(t,n){if(t&1&&(l(0,"p-message",3),d(1),s()),t&2){let e=a();h("closable",!1),r(),R(" ",e.texts.project.loadErrorPrefix," ",n," ")}}function bi(t,n){if(t&1&&(l(0,"p-message",4),d(1),s()),t&2){let e=a();h("closable",!1),r(),R(" ",e.texts.project.saveErrorPrefix," ",n," ")}}function xi(t,n){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=n.$implicit,i=a();r(2),u(e),r(),h("label",i.texts.project.removePathLabel)("outlined",!0)("disabled",i.isPending("scan.extraFolders")),p("data-testid","settings-project-extra-folders-remove")}}function vi(t,n){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=n.$implicit,i=a();r(2),u(e),r(),h("label",i.texts.project.removePathLabel)("outlined",!0)("disabled",i.isPending("scan.referencePaths")),p("data-testid","settings-project-reference-paths-remove")}}var Le=class t{dataSource=T(G);confirmation=T(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(n){return this.pending().has(n)}onExtraFolderAdd(){let n=this.newExtraFolder().trim();if(n.length===0)return;let e=[...this.extraFolders(),n];this.runPatch("scan.extraFolders",{scan:{extraFolders:e}}).then(()=>{this.newExtraFolder.set("")})}onExtraFolderRemove(n){let e=this.extraFolders().filter(i=>i!==n);this.runPatch("scan.extraFolders",{scan:{extraFolders:[...e]}})}onReferencePathAdd(){let n=this.newReferencePath().trim();if(n.length===0)return;let e=[...this.referencePaths(),n];this.runPatch("scan.referencePaths",{scan:{referencePaths:e}}).then(()=>{this.newReferencePath.set("")})}onReferencePathRemove(n){let e=this.referencePaths().filter(i=>i!==n);this.runPatch("scan.referencePaths",{scan:{referencePaths:[...e]}})}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let n=await this.dataSource.getProjectPreferences();this.preferences.set(n)}catch(n){this.loadError.set(Qe(n)),this.preferences.set(null)}finally{this.loading.set(!1)}}async runPatch(n,e){if(this.pending().has(n))return;let i=new Set(this.pending());i.add(n),this.pending.set(i),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(Qe(g))}})}else this.saveError.set(Qe(o))}finally{let o=new Set(this.pending());o.delete(n),this.pending.set(o)}}confirmDialog(n,e){this.confirmation.confirm({header:w.project.confirmDialogHeader,message:w.project.confirmDialogIntro+`
|
|
121
|
+
`,En={root:{position:"relative"}},Tn={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"},zt=(()=>{class t extends xt{name="toggleswitch";style=Pn;classes=Tn;inlineStyles=En;static \u0275fac=(()=>{let e;return function(o){return(e||(e=Re(t)))(o||t)}})();static \u0275prov=Je({token:t,factory:t.\u0275fac})}return t})();var Kt=new et("TOGGLESWITCH_INSTANCE"),Mn={provide:St,useExisting:Ye(()=>le),multi:!0},le=(()=>{class t extends Pt{componentName="ToggleSwitch";$pcToggleSwitch=T(Kt,{optional:!0,skipSelf:!0})??void 0;bindDirectiveInstance=T(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 nt;input;handleTemplate;_handleTemplate;focused=!1;_componentStyle=T(zt);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,i){i(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=Re(t)))(o||t)}})();static \u0275cmp=A({type:t,selectors:[["p-toggleswitch"],["p-toggleSwitch"],["p-toggle-switch"]],contentQueries:function(i,o,c){if(i&1&&dt(c,yn,4)(c,Ce,4),i&2){let g;be(g=xe())&&(o.handleTemplate=g.first),be(g=xe())&&(o.templates=g)}},viewQuery:function(i,o){if(i&1&&ct(Cn,5),i&2){let c;be(c=xe())&&(o.input=c.first)}},hostVars:7,hostBindings:function(i,o){i&1&&C("click",function(g){return o.onHostClick(g)}),i&2&&(p("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",_t],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([Mn,zt,{provide:Kt,useExisting:t},{provide:vt,useExisting:t}]),rt([me]),at],decls:5,vars:22,consts:[["input",""],["type","checkbox","role","switch",3,"focus","blur","checked","pAutoFocus","pBind"],[3,"pBind"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(i,o){i&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),_(4,Sn,1,4,"ng-container"),s()()),i&2&&(ue(o.cx("input")),h("checked",o.checked())("pAutoFocus",o.autofocus)("pBind",o.ptm("input")),p("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")),h("pBind",o.ptm("slider")),p("data-p",o.dataP),r(),ue(o.cx("handle")),h("pBind",o.ptm("handle")),p("data-p",o.dataP),r(),f(o.handleTemplate||o._handleTemplate?4:-1))},dependencies:[bt,ft,yt,ke,Ct,me],encapsulation:2,changeDetection:0})}return t})(),De=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=ot({type:t});static \u0275inj=Ze({imports:[le,ke,ke]})}return t})();var In=(t,n)=>n.key;function On(t,n){if(t&1&&(l(0,"p-message",3),d(1),s()),t&2){let e=a();h("closable",!1),r(),R(" ",e.texts.general.loadErrorPrefix," ",n," ")}}function Fn(t,n){if(t&1&&(l(0,"p-message",4),d(1),s()),t&2){let e=a();h("closable",!1),r(),R(" ",e.texts.general.saveErrorPrefix," ",n," ")}}function Dn(t,n){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=w(e).$implicit,g=a();return S(g.onToggle(c,o))}),s()()}if(t&2){let e=n.$implicit,i=a();p("data-testid","settings-general-row-"+e.key),r(3),u(i.toggleLabel(e.key)),r(2),m(" ",i.toggleDescription(e.key)," "),r(),h("ngModel",i.valueOf(e))("disabled",i.loading()||i.isPending(e.key)||i.preferences()===null),p("data-testid","settings-general-toggle-"+e.key)}}function An(t,n){if(t&1&&(l(0,"span",15),d(1),s()),t&2){let e=n.$implicit,i=a();r(),m(" ",i.extraThemeLabel(e.labelKey)," ")}}var jn=[{key:"updateCheck.enabled",read:t=>t.updateCheck.enabled,patch:t=>({updateCheck:{enabled:t}})}],Nn=[{value:"none",labelKey:"none"},{value:"matrix",labelKey:"matrix"}];function Vn(t){return t==="matrix"?"matrix":"none"}function Ln(t){return t==="matrix"?"matrix":null}var Ae=class t{dataSource=T(G);themeService=T(Ie);visible=V.required();texts=k;toggles=jn;extraThemeOptions=Nn;extraThemeWire=y(()=>Vn(this.themeService.extraTheme()));loading=v(!1);loadError=v(null);saveError=v(null);preferences=v(null);pending=v(new Set);constructor(){N(()=>{this.visible()&&this.refresh()})}toggleLabel(n){return k.general.toggles[n].label}toggleDescription(n){return k.general.toggles[n].description}valueOf(n){let e=this.preferences();return e?n.read(e):!1}isPending(n){return this.pending().has(n)}onToggle(n,e){this.runToggle(n,e)}onExtraThemeChange(n){this.themeService.setExtraTheme(Ln(n??"none"))}extraThemeLabel(n){return k.general.extraTheme.options[n].label}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let n=await this.dataSource.getPreferences();this.preferences.set(n)}catch(n){this.loadError.set(Gt(n)),this.preferences.set(null)}finally{this.loading.set(!1)}}async runToggle(n,e){if(this.pending().has(n.key))return;let i=new Set(this.pending());i.add(n.key),this.pending.set(i),this.saveError.set(null);try{let o=await this.dataSource.setPreferences(n.patch(e));this.preferences.set(o)}catch(o){this.saveError.set(Gt(o))}finally{let o=new Set(this.pending());o.delete(n.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-extra-theme",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-extra-theme",3,"ngModelChange","options","ngModel","allowEmpty"],["pTemplate","item"],[3,"ngModelChange","ngModel","disabled"],["data-testid","settings-general-extra-theme-option"]],template:function(e,i){if(e&1&&(l(0,"section",0)(1,"h2",1),d(2),s(),l(3,"p",2),d(4),s(),_(5,On,2,3,"p-message",3),_(6,Fn,2,3,"p-message",4),l(7,"ul",5),O(8,Dn,7,6,"li",6,In),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 i.onExtraThemeChange(c)}),Y(22,An,2,1,"ng-template",13),s()()()()),e&2){let o,c;p("aria-labelledby","settings-general-heading"),r(2),m(" ",i.texts.general.heading," "),r(2),u(i.texts.general.intro),r(),f((o=i.loadError())?5:-1,o),r(),f((c=i.saveError())?6:-1,c),r(2),F(i.toggles),r(3),m(" ",i.texts.general.localPreferences.heading," "),r(2),m(" ",i.texts.general.localPreferences.intro," "),r(5),m(" ",i.texts.general.extraTheme.label," "),r(2),m(" ",i.texts.general.extraTheme.description," "),r(),h("options",i.extraThemeOptions)("ngModel",i.extraThemeWire())("allowEmpty",!1)}},dependencies:[oe,ne,ie,ae,re,Ce,jt,At,De,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 Gt(t){return t instanceof z||t instanceof Error?t.message:String(t)}var Ke={provider:"#7C3AED",extractor:"#A78BFA",analyzer:"#5FD17C",action:"#00C853",formatter:"#5BC0EB",hook:"#FFB627"};function qt(t){let n=t.toLowerCase();return Ke[n]??"currentColor"}var Ve=["all",...Object.keys(Ke)],je=["claude","gemini","agent-skills","core"],Ne=["provider","extractor","analyzer","action","formatter","hook"];function de(t,n){return`${t}/${n}`}function $e(t){let n=new Map;for(let e of t)if(!ce(e.status)){if(e.granularity==="bundle"){n.set(e.id,e.status==="enabled");continue}if(e.granularity==="extension"&&e.extensions)for(let i of e.extensions)n.set(de(e.id,i.id),i.enabled)}return n}function Ge(t){let n=t.target;return!n||typeof n.closest!="function"?!1:n.closest('label, button, input, [role="switch"], p-toggleswitch')!==null}function Wt(t,n){if(Rn(t,n))return[t];if(t.granularity!=="extension"||!t.extensions)return[];let e=t.extensions.filter(i=>Bn(i,n));return e.length===0?[]:[W(q({},t),{extensions:e})]}function Qt(t,n){if(t.granularity==="bundle")return t.kinds.some(i=>i.toLowerCase()===n)?[t]:[];if(!t.extensions)return[];let e=t.extensions.filter(i=>i.kind.toLowerCase()===n);return e.length===0?[]:[W(q({},t),{extensions:e})]}function Xt(t){if(t.locked)return[];if(t.granularity!=="extension"||!t.extensions)return[t];let n=t.extensions.filter(e=>!e.locked);return n.length===0?[]:[W(q({},t),{extensions:n})]}function Yt(t){return t.slice().sort((e,i)=>{let o=je.indexOf(e.id),c=je.indexOf(i.id),g=o>=0?o:je.length,P=c>=0?c:je.length;return g!==P?g-P:e.id.localeCompare(i.id)}).map(e=>{if(e.granularity!=="extension"||!e.extensions)return e;let i=e.extensions.slice().sort((o,c)=>{let g=Ne.indexOf(o.kind.toLowerCase()),P=Ne.indexOf(c.kind.toLowerCase()),K=g>=0?g:Ne.length,L=P>=0?P:Ne.length;return K!==L?K-L:o.id.localeCompare(c.id)});return W(q({},e),{extensions:i})})}function Rn(t,n){return!!(t.id.toLowerCase().includes(n)||t.description&&t.description.toLowerCase().includes(n))}function Bn(t,n){return!!(t.id.toLowerCase().includes(n)||t.description&&t.description.toLowerCase().includes(n))}function ce(t){return t==="incompatible-spec"||t==="invalid-manifest"||t==="load-error"||t==="id-collision"}function He(t){return t instanceof z||t instanceof Error?t.message:String(t)}function Jt(t,n){return ce(t.status)?n.statusFailure[t.status]??t.status:t.status==="enabled"?n.enabledLabel:n.disabledLabel}function Zt(t,n){switch(t){case"built-in":return n.sourceBuiltIn;case"project":return n.sourceProject}}var Ue="sm.settings.plugins.collapsed",qe="sm.settings.plugins.kind-filter";function en(){let t=null;try{t=localStorage.getItem(Ue)}catch{return new Set}if(!t)return new Set;let n;try{n=JSON.parse(t)}catch{return new Set}if(!Array.isArray(n))return new Set;let e=new Set;for(let i of n)typeof i=="string"&&i.length>0&&e.add(i);return e}function tn(t){try{if(t.size===0){localStorage.removeItem(Ue);return}localStorage.setItem(Ue,JSON.stringify([...t]))}catch{}}function nn(){let t=null;try{t=localStorage.getItem(qe)}catch{return"all"}return t&&Ve.includes(t)?t:"all"}function on(t){try{if(t==="all"){localStorage.removeItem(qe);return}localStorage.setItem(qe,t)}catch{}}function We(){tt(We);let t=v(en());N(()=>tn(t()));let n=i=>{let o=new Set(t());o.has(i)?o.delete(i):o.add(i),t.set(o)},e=i=>!t().has(i);return{collapsed:t.asReadonly(),toggleExpanded:n,isExpanded:e}}function rn(t){let n=v(""),e=y(()=>n().trim().length>0),i=v(nn()),o=y(()=>i()!=="all");N(()=>on(i()));let c=y(()=>Yt(t.plugins().flatMap(Xt))),g=y(()=>{let L=n().trim().toLowerCase(),_e=i(),H=c();return _e!=="all"&&(H=H.flatMap(fe=>Qt(fe,_e))),L.length>0&&(H=H.flatMap(fe=>Wt(fe,L))),H});return{searchText:n,searchActive:e,kindFilter:i,setKindFilter:L=>{i.set(L)},isKindFilterActive:L=>i()===L,kindFilterActive:o,kindFilterOptions:Ve,visiblePlugins:c,filteredPlugins:g}}function an(t){let n=v(!1),e=v(null),i=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:n,loadError:e,toggleError:i,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()=>{n.set(!0),e.set(null),i.set(null);try{let E=await t.dataSource.listPlugins();o.set([...E.items]);let D=$e(E.items);c.set(D),g.set(new Map(D))}catch(E){e.set(He(E)),o.set([]),c.set(new Map),g.set(new Map)}finally{n.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),i.set(null);let U=!1;try{let j=await t.dataSource.applyPluginChanges(D);o.set([...j.items]);let Xe=$e(j.items);c.set(Xe),g.set(new Map(Xe)),t.scanTrigger.run(),U=!0}catch(j){i.set(He(j))}finally{P.set(!1)}return{ok:U}},discardChanges:()=>{g.set(new Map(c())),i.set(null)}}}var sn=(t,n)=>n.id;function $n(t,n){if(t&1&&d(0),t&2){let e=a().$implicit,i=a();m(" ",e==="all"?i.texts.pluginsKindFilterAll:e," ")}}function Gn(t,n){if(t&1){let e=I();l(0,"p-togglebutton",16),C("ngModelChange",function(){let o=w(e).$implicit,c=a();return S(c.setKindFilter(o))}),Y(1,$n,1,1,"ng-template",null,0,mt),s()}if(t&2){let e=n.$implicit,i=a();Be("--kind-color",e==="all"?null:i.kindTint(e)),h("ngModel",i.isKindFilterActive(e))("styleClass","settings-plugins__kind-chip"+(e==="all"?" is-all":""))("ariaLabel",i.texts.pluginsKindFilterOptionA11y(e,!i.isKindFilterActive(e))),p("data-testid","settings-plugins-kind-chip-"+e)}}function Hn(t,n){if(t&1&&(l(0,"p-message",11),d(1),s()),t&2){let e=a();h("closable",!1),r(),m(" ",e.texts.unsavedChangesMessage(e.dirtyIds().size)," ")}}function Un(t,n){if(t&1&&(l(0,"p",12),M(1,"i",17),d(2),s()),t&2){let e=a();r(2),m(" ",e.texts.loading," ")}}function qn(t,n){if(t&1&&(l(0,"p-message",13),d(1),s()),t&2){let e=a();h("closable",!1),r(),R(" ",e.texts.errorPrefix," ",e.loadError()," ")}}function Wn(t,n){if(t&1&&(l(0,"p",14),d(1),s()),t&2){let e=a();r(),m(" ",e.texts.empty," ")}}function Qn(t,n){if(t&1){let e=I();l(0,"p-message",22),C("onClose",function(){w(e);let o=a(2);return S(o.toggleError.set(null))}),d(1),s()}if(t&2){let e=a(2);h("closable",!0),r(),R(" ",e.texts.toggleErrorPrefix," ",e.toggleError()," ")}}function Xn(t,n){if(t&1&&(l(0,"p",19),M(1,"i",23),d(2),s()),t&2){let e=a(2);r(2),m(" ",e.texts.pluginsSearchEmpty(e.searchText())," ")}}function Yn(t,n){if(t&1){let e=I();l(0,"button",41),C("click",function(o){w(e);let c=a().$implicit;return a(2).toggleExpanded(c.id),S(o.stopPropagation())}),M(1,"i",42),s()}if(t&2){let e=a().$implicit,i=a(2);p("aria-expanded",i.isExpanded(e.id))("aria-label",i.isExpanded(e.id)?i.texts.collapseLabel:i.texts.expandLabel)("data-testid","settings-bundle-expand-"+e.id),r(),$("fa-chevron-down",i.isExpanded(e.id))("fa-chevron-right",!i.isExpanded(e.id))}}function Jn(t,n){t&1&&M(0,"span",27)}function Zn(t,n){if(t&1&&M(0,"span",30),t&2){let e=a().$implicit;p("data-testid","settings-row-dirty-"+e.id)}}function ei(t,n){if(t&1&&(l(0,"span",33),d(1),s()),t&2){let e=a().$implicit;r(),m("v",e.version)}}function ti(t,n){if(t&1&&(l(0,"span",34),M(1,"i",43),d(2),s()),t&2){let e=a().$implicit,i=a(2);h("title",i.texts.lockedTooltip),p("data-testid","settings-row-locked-"+e.id),r(2),m(" ",i.texts.lockedLabel," ")}}function ni(t,n){if(t&1&&(l(0,"span",35),d(1),s()),t&2){let e=a().$implicit,i=a(2);r(),u(i.statusLabel(e))}}function ii(t,n){if(t&1&&(l(0,"p",36),d(1),s()),t&2){let e=a().$implicit;r(),u(e.description)}}function oi(t,n){if(t&1&&(l(0,"span",37),d(1),s()),t&2){let e=a().$implicit;r(),u(e.reason)}}function ri(t,n){if(t&1&&(l(0,"p",38),M(1,"i",44),d(2),s()),t&2){let e=a().$implicit,i=a(2);p("data-testid","settings-row-starts-disabled-"+e.id),r(2),m(" ",i.texts.startsAsDisabledRowHint," ")}}function ai(t,n){if(t&1){let e=I();l(0,"p-toggleswitch",45),C("ngModelChange",function(o){w(e);let c=a().$implicit,g=a(2);return S(g.onBundleToggle(c,o))}),s()}if(t&2){let e=a().$implicit,i=a(2);h("ngModel",i.pendingEnabled(e.id))("disabled",i.applying()||!!e.locked)("ariaLabel",i.texts.a11y.pluginToggle(e.id,!i.pendingEnabled(e.id))),p("data-testid","settings-toggle-"+e.id)}}function si(t,n){if(t&1&&M(0,"span",30),t&2){let e=a().$implicit,i=a(2).$implicit;p("data-testid","settings-extrow-dirty-"+i.id+"-"+e.id)}}function li(t,n){if(t&1&&(l(0,"span",34),M(1,"i",43),d(2),s()),t&2){let e=a().$implicit,i=a(2).$implicit,o=a(2);h("title",o.texts.lockedTooltip),p("data-testid","settings-extrow-locked-"+i.id+"-"+e.id),r(2),m(" ",o.texts.lockedLabel," ")}}function di(t,n){if(t&1&&(l(0,"p",53),d(1),s()),t&2){let e=a().$implicit;r(),u(e.description)}}function ci(t,n){if(t&1){let e=I();l(0,"li",47),C("click",function(o){let c=w(e).$implicit,g=a(2).$implicit,P=a(2);return S(P.onSubrowClick(g.id,c,o))})("keydown.enter",function(o){let c=w(e).$implicit,g=a(2).$implicit,P=a(2);return S(P.onSubrowClick(g.id,c,o))})("keydown.space",function(o){let c=w(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),_(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(),_(10,li,3,3,"span",34),s(),_(11,di,2,1,"p",53),s(),l(12,"p-toggleswitch",45),C("ngModelChange",function(o){let c=w(e).$implicit,g=a(2).$implicit,P=a(2);return S(P.onExtensionToggle(g.id,c,o))}),s()()}if(t&2){let e=n.$implicit,i=a(2).$implicit,o=a(2);$("is-clickable",o.extensionToggleInteractive(e))("is-dirty",o.isDirty(o.qualifiedExt(i.id,e.id))),p("aria-label",o.texts.a11y.extensionRow(o.qualifiedExt(i.id,e.id)))("data-testid","settings-extrow-"+i.id+"-"+e.id),r(3),f(o.isDirty(o.qualifiedExt(i.id,e.id))?3:-1),r(2),u(e.id),r(),Be("--kind-color",o.kindTint(e.kind)),r(),u(e.kind),r(2),m("v",e.version),r(),f(e.locked?10:-1),r(),f(e.description?11:-1),r(),h("ngModel",o.pendingEnabled(o.qualifiedExt(i.id,e.id)))("disabled",o.applying()||!!e.locked)("ariaLabel",o.texts.a11y.extensionToggle(o.qualifiedExt(i.id,e.id),!o.pendingEnabled(o.qualifiedExt(i.id,e.id)))),p("data-testid","settings-ext-toggle-"+i.id+"-"+e.id)}}function gi(t,n){if(t&1&&(l(0,"ul",40),O(1,ci,13,18,"li",46,sn),s()),t&2){let e=a().$implicit;p("data-testid","settings-extensions-"+e.id),r(),F(e.extensions)}}function pi(t,n){if(t&1){let e=I();l(0,"li",24)(1,"div",25),C("click",function(o){let c=w(e).$implicit,g=a(2);return S(g.onRowClick(c,o))})("keydown.enter",function(o){let c=w(e).$implicit,g=a(2);return S(g.onRowClick(c,o))})("keydown.space",function(o){let c=w(e).$implicit,g=a(2);return o.preventDefault(),S(g.onRowClick(c,o))}),_(2,Yn,2,7,"button",26)(3,Jn,1,0,"span",27),l(4,"div",28)(5,"div",29),_(6,Zn,1,1,"span",30),l(7,"span",31),d(8),s(),l(9,"span",32),d(10),s(),_(11,ei,2,1,"span",33),_(12,ti,3,3,"span",34),_(13,ni,2,1,"span",35),s(),_(14,ii,2,1,"p",36),_(15,oi,2,1,"span",37),_(16,ri,3,2,"p",38),s(),_(17,ai,1,4,"p-toggleswitch",39),s(),_(18,gi,3,1,"ul",40),s()}if(t&2){let e=n.$implicit,i=a(2);$("is-extension-bundle",e.granularity==="extension")("is-failed",!i.canToggleBundle(e)&&e.granularity==="bundle")("is-clickable",i.rowIsClickable(e))("is-dirty",e.granularity==="bundle"&&i.isDirty(e.id)),p("data-testid","settings-row-"+e.id),r(),p("aria-label",i.texts.a11y.pluginRow(e.id)),r(),f(e.granularity==="extension"&&(e.extensions!=null&&e.extensions.length)?2:3),r(4),f(e.granularity==="bundle"&&i.isDirty(e.id)?6:-1),r(2),u(e.id),r(2),u(i.sourceLabel(e.source)),r(),f(e.version?11:-1),r(),f(e.locked?12:-1),r(),f(!i.canToggleBundle(e)&&e.granularity==="bundle"?13:-1),r(),f(e.description?14:-1),r(),f(e.reason?15:-1),r(),f(i.showStartsAsDisabledHint(e)?16:-1),r(),f(i.canToggleBundle(e)?17:-1),r(),f(e.granularity==="extension"&&(e.extensions!=null&&e.extensions.length)&&i.isExpanded(e.id)?18:-1)}}function ui(t,n){if(t&1&&(_(0,Qn,2,3,"p-message",18),_(1,Xn,3,1,"p",19),l(2,"ul",20),O(3,pi,19,22,"li",21,sn),s()),t&2){let e=a();f(e.toggleError()?0:-1),r(),f(e.searchActive()&&e.filteredPlugins().length===0?1:-1),r(2),F(e.filteredPlugins())}}function mi(t,n){if(t&1&&(l(0,"em",54),d(1),s()),t&2){let e=a(2);r(),m(" ",e.texts.startsAsDisabledFooterHint," ")}}function hi(t,n){if(t&1){let e=I();l(0,"footer",15),_(1,mi,2,1,"em",54),l(2,"p-button",55),C("onClick",function(){w(e);let o=a();return S(o.discardChanges())}),s(),l(3,"p-button",56),C("onClick",function(){w(e);let o=a();return S(o.applyChanges())}),s()()}if(t&2){let e=a();r(),f(e.restartRecommended()?1:-1),r(),h("text",!0)("label",e.texts.discardChanges)("ariaLabel",e.texts.discardA11y)("disabled",e.applying()),r(),h("label",e.texts.applyAndClose)("ariaLabel",e.texts.applyA11y)("disabled",e.applying())("loading",e.applying())}}var ge=class t{dataSource=T(G);scanTrigger=T(Vt);visible=V.required();applied=ye();texts=k;pluginState=an({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=We();collapsed=this.pluginCollapse.collapsed;pluginFilter=rn({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(n){this.pluginFilter.setKindFilter(n)}isKindFilterActive(n){return this.pluginFilter.isKindFilterActive(n)}toggleExpanded(n){this.pluginCollapse.toggleExpanded(n)}isExpanded(n){return this.pluginCollapse.isExpanded(n)}pendingEnabled(n){return this.pluginState.pendingEnabled(n)}isDirty(n){return this.pluginState.isDirty(n)}showStartsAsDisabledHint(n){return n.startsAsDisabled?this.pendingEnabled(n.id):!1}onBundleToggle(n,e){this.pluginState.onBundleToggle(n,e)}onExtensionToggle(n,e,i){this.pluginState.onExtensionToggle(n,e,i)}async applyChanges(){(await this.pluginState.applyChanges()).ok&&this.applied.emit()}discardChanges(){this.pluginState.discardChanges()}canToggleBundle(n){return n.granularity==="extension"?!1:!ce(n.status)}bundleToggleInteractive(n){return this.canToggleBundle(n)&&!n.locked}extensionToggleInteractive(n){return!n.locked}rowIsClickable(n){return!!(this.bundleToggleInteractive(n)||n.granularity==="extension"&&(n.extensions?.length??0)>0)}onRowClick(n,e){if(!Ge(e)){if(this.bundleToggleInteractive(n)){this.onBundleToggle(n,!this.pendingEnabled(n.id));return}n.granularity==="extension"&&(n.extensions?.length??0)>0&&this.toggleExpanded(n.id)}}onSubrowClick(n,e,i){if(Ge(i)||!this.extensionToggleInteractive(e))return;let o=de(n,e.id);this.onExtensionToggle(n,e,!this.pendingEnabled(o))}statusLabel(n){return Jt(n,this.texts)}sourceLabel(n){return Zt(n,this.texts)}qualifiedExt(n,e){return de(n,e)}kindTint(n){return qt(n)}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,i){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),M(8,"p-inputicon",7),l(9,"input",8),C("ngModelChange",function(c){return i.searchText.set(c)}),s()(),l(10,"div",9),O(11,Gn,3,6,"p-togglebutton",10,Q),s(),_(13,Hn,2,2,"p-message",11),_(14,Un,3,1,"p",12)(15,qn,2,3,"p-message",13)(16,Wn,2,1,"p",14)(17,ui,5,2),s(),_(18,hi,4,9,"footer",15),s()),e&2&&(r(4),m(" ",i.texts.pluginsHeading," "),r(2),u(i.texts.pluginsIntro),r(3),h("placeholder",i.texts.pluginsSearchPlaceholder)("ngModel",i.searchText()),p("aria-label",i.texts.pluginsSearchA11y),r(),p("aria-label",i.texts.pluginsKindFilterA11y),r(),F(i.kindFilterOptions),r(2),f(i.hasPendingChanges()?13:-1),r(),f(i.loading()?14:i.loadError()?15:i.plugins().length===0?16:17),r(4),f(i.hasPendingChanges()?18:-1))},dependencies:[oe,Ee,ne,ie,te,we,Ot,It,Dt,Ft,Me,Te,ae,re,Tt,Et,De,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 fi(t,n){if(t&1&&(l(0,"p-message",3),d(1),s()),t&2){let e=a();h("closable",!1),r(),R(" ",e.texts.project.loadErrorPrefix," ",n," ")}}function bi(t,n){if(t&1&&(l(0,"p-message",4),d(1),s()),t&2){let e=a();h("closable",!1),r(),R(" ",e.texts.project.saveErrorPrefix," ",n," ")}}function xi(t,n){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=w(e).$implicit,c=a();return S(c.onExtraFolderRemove(o))}),s()()}if(t&2){let e=n.$implicit,i=a();r(2),u(e),r(),h("label",i.texts.project.removePathLabel)("outlined",!0)("disabled",i.isPending("scan.extraFolders")),p("data-testid","settings-project-extra-folders-remove")}}function vi(t,n){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=w(e).$implicit,c=a();return S(c.onReferencePathRemove(o))}),s()()}if(t&2){let e=n.$implicit,i=a();r(2),u(e),r(),h("label",i.texts.project.removePathLabel)("outlined",!0)("disabled",i.isPending("scan.referencePaths")),p("data-testid","settings-project-reference-paths-remove")}}var Le=class t{dataSource=T(G);confirmation=T(ee);visible=V.required();texts=k;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(n){return this.pending().has(n)}onExtraFolderAdd(){let n=this.newExtraFolder().trim();if(n.length===0)return;let e=[...this.extraFolders(),n];this.runPatch("scan.extraFolders",{scan:{extraFolders:e}}).then(()=>{this.newExtraFolder.set("")})}onExtraFolderRemove(n){let e=this.extraFolders().filter(i=>i!==n);this.runPatch("scan.extraFolders",{scan:{extraFolders:[...e]}})}onReferencePathAdd(){let n=this.newReferencePath().trim();if(n.length===0)return;let e=[...this.referencePaths(),n];this.runPatch("scan.referencePaths",{scan:{referencePaths:e}}).then(()=>{this.newReferencePath.set("")})}onReferencePathRemove(n){let e=this.referencePaths().filter(i=>i!==n);this.runPatch("scan.referencePaths",{scan:{referencePaths:[...e]}})}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let n=await this.dataSource.getProjectPreferences();this.preferences.set(n)}catch(n){this.loadError.set(Qe(n)),this.preferences.set(null)}finally{this.loading.set(!1)}}async runPatch(n,e){if(this.pending().has(n))return;let i=new Set(this.pending());i.add(n),this.pending.set(i),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(Qe(g))}})}else this.saveError.set(Qe(o))}finally{let o=new Set(this.pending());o.delete(n),this.pending.set(o)}}confirmDialog(n,e){this.confirmation.confirm({header:k.project.confirmDialogHeader,message:k.project.confirmDialogIntro+`
|
|
122
122
|
`+n.map(i=>`\u2022 ${i}`).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,i){if(e&1&&(l(0,"section",0)(1,"h2",1),d(2),s(),l(3,"p",2),d(4),s(),_(5,fi,2,3,"p-message",3),_(6,bi,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 i.newExtraFolder.set(c)}),s(),l(18,"p-button",13),C("onClick",function(){return i.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 i.newReferencePath.set(c)}),s(),l(30,"p-button",16),C("onClick",function(){return i.onReferencePathAdd()}),s()()(),M(31,"p-confirmdialog"),s()),e&2){let o,c;p("aria-labelledby","settings-project-heading"),r(2),m(" ",i.texts.project.heading," "),r(2),u(i.texts.project.intro),r(),f((o=i.loadError())?5:-1,o),r(),f((c=i.saveError())?6:-1,c),r(4),u(i.texts.project.extraFoldersLabel),r(2),m(" ",i.texts.project.extraFoldersDescription," "),r(2),F(i.extraFolders()),r(3),h("ngModel",i.newExtraFolder())("placeholder",i.texts.project.extraFoldersPlaceholder)("disabled",i.isPending("scan.extraFolders")),r(),h("label",i.texts.project.addPathLabel)("disabled",i.isPending("scan.extraFolders")||i.newExtraFolder().trim().length===0),r(4),u(i.texts.project.referencePathsLabel),r(2),m(" ",i.texts.project.referencePathsDescription," "),r(2),F(i.referencePaths()),r(3),h("ngModel",i.newReferencePath())("placeholder",i.texts.project.referencePathsPlaceholder)("disabled",i.isPending("scan.referencePaths")),r(),h("label",i.texts.project.addPathLabel)("disabled",i.isPending("scan.referencePaths")||i.newReferencePath().trim().length===0)}},dependencies:[oe,Ee,ne,ie,te,ke,Pe,Se,Me,Te,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 Qe(t){return t instanceof z||t instanceof Error?t.message:String(t)}var yi=(t,n)=>n.id;function Ci(t,n){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=n.$implicit,i=a();r(),$("is-active",i.activeSection()===e.id),p("aria-current",i.activeSection()===e.id?"page":null)("data-testid","settings-nav-"+e.id),r(2),u(e.label)}}function wi(t,n){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();h("visible",e.pluginsVisible())}}function ki(t,n){if(t&1&&M(0,"sm-settings-general",5),t&2){let e=a();h("visible",e.generalVisible())}}function Si(t,n){if(t&1&&M(0,"sm-settings-project",5),t&2){let e=a();h("visible",e.projectVisible())}}function Pi(t,n){if(t&1&&M(0,"sm-settings-about",5),t&2){let e=a();h("visible",e.aboutVisible())}}function Ei(t,n){t&1&&M(0,"sm-settings-changelog")}var Ti=[{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}],ln=class t{visible=V.required();visibleChange=ye();confirmation=T(ee);pluginsPanel=ht(ge);texts=w;sections=Ti;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(n){if(n){this.visibleChange.emit(!0);return}let e=this.pluginsPanel(),i=e?.dirtyIds().size??0;if(i===0){this.visibleChange.emit(!1);return}this.confirmation.confirm({header:this.texts.confirmCloseTitle,message:this.texts.confirmCloseBody(i),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(n){this.activeSection.set(n)}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,i){e&1&>(i.pluginsPanel,ge,5),e&2&&pt()},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,i){if(e&1&&(l(0,"p-dialog",0),C("visibleChange",function(c){return i.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),_(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()(),M(12,"p-confirmdialog"),s()),e&2){let o;ve(i.dialogStyle),h("visible",i.visible())("modal",!0)("draggable",!1)("resizable",!1)("closable",!0)("closeOnEscape",!0)("dismissableMask",!0)("header",i.texts.modalTitle),r(2),p("aria-label",i.texts.modalTitle),r(2),F(i.sections),r(3),f((o=i.activeSection())==="plugins"?7:o==="general"?8:o==="project"?9:o==="about"?10:o==="changelog"?11:-1)}},dependencies:[te,Pe,Se,kt,wt,Oe,Fe,Ae,ge,Le],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{ln as SettingsModal};
|
|
123
|
+
`),acceptLabel:k.project.confirmDialogAccept,rejectLabel:k.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,i){if(e&1&&(l(0,"section",0)(1,"h2",1),d(2),s(),l(3,"p",2),d(4),s(),_(5,fi,2,3,"p-message",3),_(6,bi,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 i.newExtraFolder.set(c)}),s(),l(18,"p-button",13),C("onClick",function(){return i.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 i.newReferencePath.set(c)}),s(),l(30,"p-button",16),C("onClick",function(){return i.onReferencePathAdd()}),s()()(),M(31,"p-confirmdialog"),s()),e&2){let o,c;p("aria-labelledby","settings-project-heading"),r(2),m(" ",i.texts.project.heading," "),r(2),u(i.texts.project.intro),r(),f((o=i.loadError())?5:-1,o),r(),f((c=i.saveError())?6:-1,c),r(4),u(i.texts.project.extraFoldersLabel),r(2),m(" ",i.texts.project.extraFoldersDescription," "),r(2),F(i.extraFolders()),r(3),h("ngModel",i.newExtraFolder())("placeholder",i.texts.project.extraFoldersPlaceholder)("disabled",i.isPending("scan.extraFolders")),r(),h("label",i.texts.project.addPathLabel)("disabled",i.isPending("scan.extraFolders")||i.newExtraFolder().trim().length===0),r(4),u(i.texts.project.referencePathsLabel),r(2),m(" ",i.texts.project.referencePathsDescription," "),r(2),F(i.referencePaths()),r(3),h("ngModel",i.newReferencePath())("placeholder",i.texts.project.referencePathsPlaceholder)("disabled",i.isPending("scan.referencePaths")),r(),h("label",i.texts.project.addPathLabel)("disabled",i.isPending("scan.referencePaths")||i.newReferencePath().trim().length===0)}},dependencies:[oe,Ee,ne,ie,te,we,Pe,Se,Me,Te,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 Qe(t){return t instanceof z||t instanceof Error?t.message:String(t)}var yi=(t,n)=>n.id;function Ci(t,n){if(t&1){let e=I();l(0,"li")(1,"button",6),C("click",function(){let o=w(e).$implicit,c=a();return S(c.selectSection(o.id))}),l(2,"span",7),d(3),s()()()}if(t&2){let e=n.$implicit,i=a();r(),$("is-active",i.activeSection()===e.id),p("aria-current",i.activeSection()===e.id?"page":null)("data-testid","settings-nav-"+e.id),r(2),u(e.label)}}function ki(t,n){if(t&1){let e=I();l(0,"sm-settings-plugins",8),C("applied",function(){w(e);let o=a();return S(o.onPluginsApplied())}),s()}if(t&2){let e=a();h("visible",e.pluginsVisible())}}function wi(t,n){if(t&1&&M(0,"sm-settings-general",5),t&2){let e=a();h("visible",e.generalVisible())}}function Si(t,n){if(t&1&&M(0,"sm-settings-project",5),t&2){let e=a();h("visible",e.projectVisible())}}function Pi(t,n){if(t&1&&M(0,"sm-settings-about",5),t&2){let e=a();h("visible",e.aboutVisible())}}function Ei(t,n){t&1&&M(0,"sm-settings-changelog")}var Ti=[{id:"general",label:k.sections.general},{id:"project",label:k.sections.project},{id:"plugins",label:k.sections.plugins},{id:"changelog",label:k.sections.changelog},{id:"about",label:k.sections.about}],ln=class t{visible=V.required();visibleChange=ye();confirmation=T(ee);pluginsPanel=ht(ge);texts=k;sections=Ti;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(n){if(n){this.visibleChange.emit(!0);return}let e=this.pluginsPanel(),i=e?.dirtyIds().size??0;if(i===0){this.visibleChange.emit(!1);return}this.confirmation.confirm({header:this.texts.confirmCloseTitle,message:this.texts.confirmCloseBody(i),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(n){this.activeSection.set(n)}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,i){e&1&>(i.pluginsPanel,ge,5),e&2&&pt()},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,i){if(e&1&&(l(0,"p-dialog",0),C("visibleChange",function(c){return i.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),_(7,ki,1,1,"sm-settings-plugins",5)(8,wi,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()(),M(12,"p-confirmdialog"),s()),e&2){let o;ve(i.dialogStyle),h("visible",i.visible())("modal",!0)("draggable",!1)("resizable",!1)("closable",!0)("closeOnEscape",!0)("dismissableMask",!0)("header",i.texts.modalTitle),r(2),p("aria-label",i.texts.modalTitle),r(2),F(i.sections),r(3),f((o=i.activeSection())==="plugins"?7:o==="general"?8:o==="project"?9:o==="about"?10:o==="changelog"?11:-1)}},dependencies:[te,Pe,Se,wt,kt,Oe,Fe,Ae,ge,Le],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{ln as SettingsModal};
|
package/dist/ui/index.html
CHANGED
|
@@ -33,5 +33,5 @@
|
|
|
33
33
|
<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:#7daa90;--sm-edge-references-active:#10b981;--sm-edge-mentions:#6fa2c0;--sm-edge-mentions-active:#0ea5e9;--sm-edge-supersedes:#9ca3af;--sm-edge-supersedes-active:#4b5563;--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-2WO3KNOY.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-2WO3KNOY.css"></noscript></head>
|
|
34
34
|
<body>
|
|
35
35
|
<sm-root></sm-root>
|
|
36
|
-
<link rel="modulepreload" href="chunk-KJQEO6P3.js"><link rel="modulepreload" href="chunk-FQOZBFJ5.js"><link rel="modulepreload" href="chunk-LNRQ7VKE.js"><link rel="modulepreload" href="chunk-LTQTJU54.js"><link rel="modulepreload" href="chunk-3SI3TVER.js"><link rel="modulepreload" href="chunk-VB56BUGO.js"><script src="main-
|
|
36
|
+
<link rel="modulepreload" href="chunk-KJQEO6P3.js"><link rel="modulepreload" href="chunk-FQOZBFJ5.js"><link rel="modulepreload" href="chunk-LNRQ7VKE.js"><link rel="modulepreload" href="chunk-LTQTJU54.js"><link rel="modulepreload" href="chunk-3SI3TVER.js"><link rel="modulepreload" href="chunk-VB56BUGO.js"><script src="main-N23S66NJ.js" type="module"></script></body>
|
|
37
37
|
</html>
|