@skill-map/cli 0.52.0 → 0.53.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.
Files changed (50) hide show
  1. package/dist/cli/tutorial/sm-tutorial/SKILL.md +239 -1659
  2. package/dist/cli/tutorial/sm-tutorial/references/_core.md +332 -0
  3. package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +175 -0
  4. package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +251 -0
  5. package/dist/cli/tutorial/{sm-master/references/tour-authoring.md → sm-tutorial/references/part-authoring.md} +14 -15
  6. package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +267 -0
  7. package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +180 -0
  8. package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +424 -0
  9. package/dist/cli/tutorial/sm-tutorial/references/part-live-site.md +156 -0
  10. package/dist/cli/tutorial/sm-tutorial/references/part-maintain.md +286 -0
  11. package/dist/cli/tutorial/sm-tutorial/references/part-mcp.md +78 -0
  12. package/dist/cli/tutorial/{sm-master/references/tour-plugins.md → sm-tutorial/references/part-plugins.md} +11 -11
  13. package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +186 -0
  14. package/dist/cli/tutorial/{sm-master/references/tour-settings.md → sm-tutorial/references/part-settings.md} +22 -24
  15. package/dist/cli.js +1213 -550
  16. package/dist/index.d.ts +1 -1
  17. package/dist/index.js +334 -207
  18. package/dist/kernel/index.d.ts +320 -15
  19. package/dist/kernel/index.js +334 -207
  20. package/dist/migrations/001_initial.sql +36 -0
  21. package/dist/ui/chunk-EQ72PEHT.js +1 -0
  22. package/dist/ui/chunk-GBKHMJ4B.js +1110 -0
  23. package/dist/ui/chunk-GEI6INVH.js +515 -0
  24. package/dist/ui/chunk-JXRIGHET.js +552 -0
  25. package/dist/ui/{chunk-WQMZOINB.js → chunk-K2MAVAHG.js} +1 -1
  26. package/dist/ui/{chunk-BV323KTK.js → chunk-KHARMPTZ.js} +1 -1
  27. package/dist/ui/chunk-L4NIF75A.js +2 -0
  28. package/dist/ui/chunk-LCOYSPKE.js +1 -0
  29. package/dist/ui/chunk-OFDQMBSJ.js +1 -0
  30. package/dist/ui/chunk-P2DAPRK7.js +2 -0
  31. package/dist/ui/chunk-Q2A6FWC7.js +4 -0
  32. package/dist/ui/{chunk-ZNDMBION.js → chunk-TXTY24G4.js} +28 -30
  33. package/dist/ui/chunk-UBQUCSQ4.js +1 -0
  34. package/dist/ui/chunk-WFLPMCK4.js +392 -0
  35. package/dist/ui/chunk-YQFIXHKM.js +123 -0
  36. package/dist/ui/index.html +2 -2
  37. package/dist/ui/{main-2DWVSRRX.js → main-OYITFJ7B.js} +3 -3
  38. package/dist/ui/{styles-QBTVKEVX.css → styles-Q4NCOJQY.css} +1 -1
  39. package/migrations/001_initial.sql +36 -0
  40. package/package.json +10 -8
  41. package/dist/cli/tutorial/sm-master/SKILL.md +0 -688
  42. package/dist/cli/tutorial/sm-master/references/fixture-templates.md +0 -212
  43. package/dist/ui/chunk-5MCXQKRN.js +0 -1066
  44. package/dist/ui/chunk-6B5EAHIM.js +0 -1110
  45. package/dist/ui/chunk-AEA5GIA7.js +0 -1
  46. package/dist/ui/chunk-AQN27TN2.js +0 -123
  47. package/dist/ui/chunk-CAJ7ZI44.js +0 -1
  48. package/dist/ui/chunk-E2XO4JVD.js +0 -1
  49. package/dist/ui/chunk-VJ57LHDR.js +0 -4
  50. package/dist/ui/chunk-WMGW2UAL.js +0 -2
@@ -0,0 +1,123 @@
1
+ import{a as At,c as Nt,d as k,e as Rt}from"./chunk-EQ72PEHT.js";import{a as Et,b as Mt,c as Tt,d as Ot,e as ce,f as de,g as Ie,h as Fe,i as jt}from"./chunk-GEI6INVH.js";import{c as X,d as U,l as Dt,n as Lt,o as je}from"./chunk-OFDQMBSJ.js";import"./chunk-P2DAPRK7.js";import{a as vt,b as xt,c as Ct,d as wt,h as yt,p as St,q as Pt,r as It,s as Ft}from"./chunk-JXRIGHET.js";import{A as Me,B as Te,M as kt,Q as Oe,R as le,c as oe,i as Se,j as Pe,l as ht,o as _t,p as Ee,r as re,s as se,t as ae,u as ft,w as _e,x as bt}from"./chunk-GBKHMJ4B.js";import{k as ut,l as mt}from"./chunk-LCOYSPKE.js";import"./chunk-4SG4352Z.js";import{$ as tt,$a as K,Bb as at,Ea as it,Eb as L,Ec as Be,Fa as J,Fb as W,Fc as pt,Gb as w,Ha as o,Ib as d,J as Ye,K as ve,L as Je,Lb as lt,Mb as ct,N as Ze,Nb as Ce,Ob as we,P as y,Tb as ze,U as et,Ub as G,V as P,Vb as dt,W as E,Wa as z,Wb as he,Xa as ot,Xb as l,Yb as p,Za as rt,Zb as u,_a as st,_b as R,ba as nt,ga as _,gc as ie,ia as B,ic as gt,jb as b,ka as Ve,mb as m,nb as h,ob as xe,pb as q,pc as ke,qb as j,rb as D,sb as f,sc as v,tb as a,tc as ye,ub as s,uc as $,vb as T,wb as x,xb as C,yb as ne}from"./chunk-Q2A6FWC7.js";import{a as H,b as Y}from"./chunk-WCABR6TI.js";function yn(t,r){if(t&1&&(x(0,"p",6),l(1),C()),t&2){let e=d();o(),R(" ",e.texts.aboutErrorPrefix," ",e.loadError()," ")}}var Vt=(()=>{class t{dataSource=y(X);updateCheck=y(Nt);theme=y(je);visible=$.required();texts=k;health=_(null);loadError=_(null);markSrc=v(()=>this.theme.resolved()==="dark"?"skill-map-mark-light.svg":"skill-map-mark-dark.svg");cliVersion=v(()=>this.updateCheck.current()??this.health()?.implVersion??this.texts.aboutUnknown);specVersion=v(()=>this.health()?.specVersion??this.texts.aboutLoading);schemaVersion=v(()=>this.health()?.schemaVersion??this.texts.aboutLoading);cwd=v(()=>this.health()?.cwd??this.texts.aboutLoading);dbDisplay=v(()=>{let e=this.health();return e?this.texts.aboutDbValue(e.db,Sn(e.dbPath,e.cwd)):this.texts.aboutLoading});constructor(){B(()=>{this.visible()&&this.health()===null&&this.load()})}async load(){this.loadError.set(null);try{let e=await this.dataSource.health();this.health.set(e)}catch(e){let i=e instanceof U||e instanceof Error?e.message:String(e);this.loadError.set(i)}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=z({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(i,n){i&1&&(x(0,"section",0)(1,"header",1),ne(2,"img",2),x(3,"div",3)(4,"h2",4),l(5),C(),x(6,"p",5),l(7),C()()(),m(8,yn,2,2,"p",6),x(9,"a",7),ne(10,"i",8),x(11,"span",9)(12,"span",10),l(13),C(),x(14,"span",11),l(15),C()(),x(16,"span",12),ne(17,"i",13),l(18),C()(),x(19,"dl",14)(20,"div",15)(21,"dt",16),l(22),C(),x(23,"dd",17)(24,"a",18),l(25),C()()(),x(26,"div",15)(27,"dt",16),l(28),C(),x(29,"dd",17)(30,"a",19),l(31),C()()(),x(32,"div",15)(33,"dt",16),l(34),C(),x(35,"dd",20),l(36),C()(),x(37,"div",15)(38,"dt",16),l(39),C(),x(40,"dd",21),l(41),C()(),x(42,"div",15)(43,"dt",16),l(44),C(),x(45,"dd",22),l(46),C()(),x(47,"div",15)(48,"dt",16),l(49),C(),x(50,"dd",23),l(51),C()(),x(52,"div",15)(53,"dt",16),l(54),C(),x(55,"dd",24),l(56),C()()()()),i&2&&(o(2),W("src",n.markSrc(),J),o(3),u(" ",n.texts.aboutHeading," "),o(2),p(n.texts.aboutIntro),o(),h(n.loadError()?8:-1),o(),W("href",n.texts.aboutGithubUrl,J),b("aria-label",n.texts.aboutStarA11y),o(4),p(n.texts.aboutStarHeading),o(2),p(n.texts.aboutStarBody),o(3),u(" ",n.texts.aboutStarCta," "),o(4),p(n.texts.aboutWebsiteLabel),o(2),W("href",n.texts.aboutWebsiteUrl,J),o(),p(n.texts.aboutWebsiteUrl),o(3),p(n.texts.aboutGithubLabel),o(2),W("href",n.texts.aboutGithubUrl,J),o(),p(n.texts.aboutGithubUrl),o(3),p(n.texts.aboutCliLabel),o(2),u(" ",n.cliVersion()," "),o(3),p(n.texts.aboutSpecLabel),o(2),u(" ",n.specVersion()," "),o(3),p(n.texts.aboutSchemaLabel),o(2),u(" ",n.schemaVersion()," "),o(3),p(n.texts.aboutFolderLabel),o(2),u(" ",n.cwd()," "),o(3),p(n.texts.aboutDbLabel),o(2),u(" ",n.dbDisplay()," "))},styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-about[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem}.settings-about__header[_ngcontent-%COMP%]{display:flex;align-items:center;gap:1rem}.settings-about__logo[_ngcontent-%COMP%]{width:64px;height:64px;flex-shrink:0}.settings-about__heading-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;min-width:0}.settings-about__title[_ngcontent-%COMP%]{font-size:1.15rem;font-weight:600;margin:0}.settings-about__intro[_ngcontent-%COMP%]{margin:0;color:var(--p-text-muted-color);font-size:.875rem}.settings-about__error[_ngcontent-%COMP%]{margin:0;padding:.5rem .75rem;border-radius:var(--p-border-radius);background:var(--p-message-error-background);color:var(--p-message-error-color);font-size:.875rem}.settings-about__list[_ngcontent-%COMP%]{margin:0;padding:0;display:flex;flex-direction:column;gap:.25rem}.settings-about__row[_ngcontent-%COMP%]{display:grid;grid-template-columns:180px 1fr;align-items:baseline;gap:.75rem;padding:.5rem .75rem;border-radius:var(--p-border-radius)}.settings-about__row[_ngcontent-%COMP%]:nth-child(odd){background:var(--p-content-hover-background)}.settings-about__label[_ngcontent-%COMP%]{margin:0;font-size:.875rem;color:var(--p-text-muted-color)}.settings-about__value[_ngcontent-%COMP%]{margin:0;font-family:var(--sm-font-mono);font-size:.875rem;word-break:break-all}.settings-about__link[_ngcontent-%COMP%]{color:var(--p-primary-color);text-decoration:none}.settings-about__link[_ngcontent-%COMP%]:hover, .settings-about__link[_ngcontent-%COMP%]:focus-visible{text-decoration:underline}.settings-about__star[_ngcontent-%COMP%]{--star-accent: #f4b400;display:flex;align-items:center;gap:.875rem;padding:.875rem 1rem;border-radius:var(--p-border-radius);border:1px solid color-mix(in oklab,var(--star-accent) 45%,transparent);background:color-mix(in oklab,var(--star-accent) 12%,transparent);color:var(--p-text-color);text-decoration:none;cursor:pointer;transition:background .15s ease,border-color .15s ease,transform .15s ease}.settings-about__star[_ngcontent-%COMP%]:hover, .settings-about__star[_ngcontent-%COMP%]:focus-visible{background:color-mix(in oklab,var(--star-accent) 22%,transparent);border-color:color-mix(in oklab,var(--star-accent) 70%,transparent);transform:translateY(-1px);outline:none}.app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--star-accent) 18%,transparent);border-color:color-mix(in oklab,var(--star-accent) 55%,transparent)}.app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:hover, .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:hover, .app-dark[_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:focus-visible, .app-dark [_nghost-%COMP%] .settings-about__star[_ngcontent-%COMP%]:focus-visible{background:color-mix(in oklab,var(--star-accent) 30%,transparent);border-color:var(--star-accent)}.settings-about__star-icon[_ngcontent-%COMP%]{font-size:1.5rem;color:var(--star-accent);flex-shrink:0}.settings-about__star-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.125rem;flex:1;min-width:0}.settings-about__star-heading[_ngcontent-%COMP%]{font-weight:600;font-size:.95rem}.settings-about__star-body[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--p-text-muted-color);line-height:1.4}.settings-about__star-cta[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.375rem;padding:.375rem .75rem;border-radius:var(--sm-radius-pill);background:var(--star-accent);color:#1a1a1a;font-weight:600;font-size:.8125rem;white-space:nowrap;flex-shrink:0}.settings-about__star[_ngcontent-%COMP%]:hover .settings-about__star-cta[_ngcontent-%COMP%], .settings-about__star[_ngcontent-%COMP%]:focus-visible .settings-about__star-cta[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--star-accent) 88%,white)}"],changeDetection:0})}return t})();function Sn(t,r){if(!t||!r)return t;let e=r.replace(/[/\\]+$/,"");return t.startsWith(e)?t.slice(e.length).replace(/^[/\\]+/,""):t}var De=(()=>{class t{ownerSig=_(null);dirtyCount=v(()=>{let e=this.ownerSig();return e?e.dirtyIds().size:0});register(e){this.ownerSig.set(e)}deregister(e){this.ownerSig()===e&&this.ownerSig.set(null)}async applyChanges(){let e=this.ownerSig();return e?e.applyChanges():{ok:!1}}discardChanges(){this.ownerSig()?.discardChanges()}static \u0275fac=function(i){return new(i||t)};static \u0275prov=ve({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var zt={schemaVersion:1,entries:[{version:"0.53.0",date:"2026-06-07",kind:"user-facing",highlights:[{body:"The inspector now offers Supersede, Set stability and Edit tags buttons; each opens a small form pre-filled with the node's current value.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'The inspector now renders the Bump button and the stale indicator from a plugin instead of hardcoded UI. Writing a `.sm` sidecar now asks for consent every time, with an "always allow" checkbox that persists the permission for the project.',packages:["@skill-map/cli","@skill-map/spec"]},{body:"Plugin contributions in the inspector now appear as one collapsed section per plugin, ordered by the new `order` fields you can set in `plugin.json` and your extension manifest. The inspector also shows every action button a plugin contributes.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm plugins doctor` now reports view-contribution errors from your last scan (and exits non-zero if any), and the Settings plugin panel shows a per-plugin warning badge with the failed emissions, so a plugin whose chips silently vanished now tells you why.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Clearer plugin errors: a wrong view-slot name now gives a short message linking to the slot catalog, and the warning spells out that the plugin and all its extensions were skipped. It also no longer appears twice when the server starts.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"The interactive tutorial (`sm tutorial`) now walks a full campaign: you build a real static portfolio site and the `.claude/` harness that maintains it, from `sm init` to the live site, picking parts from the in-skill menu.",packages:["@skill-map/cli"]},{body:"In the interactive tutorial you can now jump straight into any part of the portfolio campaign from the menu (say the maintenance or MCP part). If you skipped the earlier parts, the tutorial sets the project up for you so you can start right there.",packages:["@skill-map/cli"]},{body:"`sm tutorial master` is gone. Run `sm tutorial`: the advanced parts (plugins, settings, view-slots) and the CLI in depth are now chapters you pick from a menu inside the tutorial, after the live-UI prologue.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.52.0",date:"2026-06-05",kind:"user-facing",highlights:[{body:"Disabling a provider plugin now removes it as a choice in **Settings \u2192 Project \u2192 Active provider**. The provider stays listed but greyed out and labelled `(disabled)`, so you can no longer switch the lens to a provider whose extractors would not run.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Bumping a node now records **who** bumped it: the audit `by` fields show your Git author name (`git config user.name`) instead of `cli` / `ui`, when the project is a Git repo. It falls back to `cli` / `ui` outside a Git repo or when no `user.name` is configured.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'**Inspector polish.** The body now renders rich markdown with code syntax highlighting and updates live after a re-scan. Node tags moved to a clickable row in the header, and "isolate" on the map now shows a node plus its direct neighbors.',packages:["@skill-map/cli"]},{body:"`sm check` now **fails** (non-zero exit) when a `.sm` sidecar is malformed or breaks schema validation. These were previously reported as warnings and did not affect the exit code. Fix or remove the offending sidecar to make the check pass.",packages:["@skill-map/cli"]}]},{version:"0.51.0",date:"2026-06-04",kind:"user-facing",highlights:[{body:"`sm serve` now refuses a non-loopback `--host` (for example `0.0.0.0`): the local server has no auth and is loopback-only, so bind it to `127.0.0.1` or `::1`. Multi-host serve reopens after v0.6.0.",packages:["@skill-map/cli"]}]},{version:"0.50.1",date:"2026-06-04",kind:"user-facing",highlights:[{body:"The redundant-reference finding now reads with shorter, more direct wording so the duplicated target and where it appears are easier to scan at a glance.",packages:["@skill-map/cli"]},{body:`The map palettes now count only the nodes you've curated visible. Selecting a hidden file no longer jumps the camera to empty space, and "Re-arrange layout" only asks to confirm when you have moved nodes yourself.`,packages:["@skill-map/cli"]}]},{version:"0.50.0",date:"2026-06-02",kind:"user-facing",highlights:[{body:`The Files and Map tabs are gone: skill-map opens on one screen, file tree left, graph right. Tick files or folders (or the 0/1/2 depth buttons) to pick what the map shows; the tree's map icon isolates a node's whole chain. "Re-arrange layout" tidies just what's visible.`,packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.49.0",date:"2026-06-02",kind:"user-facing",highlights:[{body:"**New workspace view**: the file list, graph, and inspector now share one screen. Drag the divider to resize the file rail, click a file to focus its node on the map, and use the tree checkboxes to choose which nodes the map shows (`Show all` clears the selection).",packages:["@skill-map/cli"]}]},{version:"0.48.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"**Card footer icon order restored.** The status icons in the bottom-right of each card are back to their previous order: lifecycle/stability first, then the stale indicator, then warnings and errors on the far right.",packages:["@skill-map/cli"]},{body:"`sm plugins create` now takes the extension kind as a required first argument: `sm plugins create <kind> <plugin-id>` (kinds: provider, extractor, analyzer, action, formatter, hook). Previously it only scaffolded extractors.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"After `sm tutorial`, start the tutorial by typing `run the tutorial` (or `ejecuta el tutorial`), matching the website.",packages:["@skill-map/cli"]}]},{version:"0.47.1",date:"2026-05-31",kind:"internal",highlights:[]},{version:"0.47.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"skill-map now notices when your local DB schema is out of date (not just an older version): `sm scan` and `sm serve` offer to rebuild the cache, and read commands warn instead of failing with a confusing database error.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Settings \u2192 Plugins now has a unified filter bar (All, then Built-in / Project, then the kinds), so you can quickly isolate your project's own plugins and extensions from the built-ins.",packages:["@skill-map/cli"]},{body:"**Pick your tokenizer.** `tokenizer` in settings.json now selects the encoder for token counts: `cl100k_base` (default, GPT-4) or `o200k_base` (GPT-4o). Any other value is ignored with a warning. Changing it recomputes counts on the next scan.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'When the dev server stops, the UI now shows a "connection lost" banner with a Reconnect button instead of failing silently, and it refreshes automatically once the connection is back.',packages:["@skill-map/cli"]}]},{version:"0.46.0",date:"2026-05-31",kind:"user-facing",highlights:[{body:"`sm scan` no longer glues the `Auto-detected activeProvider` notice onto the results line. The auto-detect message now prints on its own line, right above the scan summary.",packages:["@skill-map/cli"]},{body:"`sm plugins --help` (and `db`, `config`, `job`, and the other command groups) now print a tidy overview with a one-line description and a list of their subcommands, matching the look of `sm scan --help`, instead of a terse internal list.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Config cleanup.** Several settings.json keys that never did anything (`i18n`, `providers`, `history`, `autoMigrate`, `scan.followSymlinks`, per-plugin `config` / `extensions`) were removed. If still present they are now ignored and reported with a warning on load.",packages:["@skill-map/cli","@skill-map/spec"]},{body:'`sm plugins list` / `show` and the Settings \u2192 Plugins UI now consistently say "plugin" instead of "bundle". The only place "bundle" remains is the name for toggling a whole plugin (all its extensions) at once.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.45.1",date:"2026-05-30",kind:"internal",highlights:[]},{version:"0.45.0",date:"2026-05-30",kind:"user-facing",highlights:[{body:"`sm tutorial` can now target other agents: `--for agent-skills` (open-standard layout, used by Antigravity and OpenAI Codex) or `--for claude` (default). It now requires an empty directory: run it in a fresh folder, or pass `--force` to seed into the current one.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.44.0",date:"2026-05-30",kind:"user-facing",highlights:[{body:"Under the Antigravity lens, `sm scan` now warns when a `.agents/skills` skill shadows a built-in `agy` slash command (e.g. a skill named `goal` collides with `/goal`), so you can rename it before the runtime silently ignores the file.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"skill-map can now report crashes anonymously to help fix bugs, and it is OFF by default. Turn it on or off in Settings, or set `SKILL_MAP_TELEMETRY=0` to force it off. File contents, paths, and your settings are never sent.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"skill-map can now share anonymous usage (which commands and views you use) to guide development, OFF by default. Toggle CLI usage, UI usage, and error reports independently in Settings, or set `SKILL_MAP_TELEMETRY=0` to force all off. Files and paths are never sent.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.43.0",date:"2026-05-29",kind:"user-facing",highlights:[{body:"The skill-map website and in-app links (Settings, About and the demo banner) now point to **skill-map.ai** (previously skill-map.dev). Spec schema URLs are now `https://skill-map.ai/spec/v0/...`.",packages:["@skill-map/cli","@skill-map/spec","@skill-map/web"]},{body:"Claude skills and commands now show their `disallowed-tools` in the inspector. Tags come only from `.sm` sidecars now: the `sm list --tag-source` flag is removed and cards show a single tag style. Agent Skills `license` / `compatibility` / `metadata` fields are recognized.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"After updating skill-map, the next `sm scan` rebuilds the local database when it was created by an older version (your `.sm` sidecar files are never touched). On a terminal it asks first; pass `--yes` to skip the prompt.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.42.0",date:"2026-05-28",kind:"user-facing",highlights:[{body:"The lens picker in **Settings \u2192 Project** now lists exactly the providers installed in your project. The phantom **Gemini** and **Cursor** options are gone, and **OpenAI Codex** / **Antigravity** now show their correct name and colour on node cards.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.41.0",date:"2026-05-27",kind:"user-facing",highlights:[{body:"New `--max-nodes <N>` on `sm scan` / `sm watch` / `sm serve` caps how many files the walker accepts (default 256, bidirectional). Past the limit, a persistent banner links to **Settings \u2192 Project** to trim `.skillmapignore`.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm -version` and `sm -help` now suggest `--version` / `--help` consistently, even from a directory with no skill-map project.",packages:["@skill-map/cli"]}]},{version:"0.40.1",date:"2026-05-26",kind:"user-facing",highlights:[{body:"Update chip copies the install command on click. Settings copy polished across General + Project. Path is now the second column in the list view. Filtered-empty views unified across List + Graph with a Reset button. Matrix theme retints dropdowns and toggle buttons.",packages:["@skill-map/cli"]}]},{version:"0.40.0",date:"2026-05-26",kind:"user-facing",highlights:[{body:"**Changelog tab is now bounded.** The Settings \u2192 Changelog tab shows the most recent 10 releases and links out to the full changelog on GitHub for older entries.",packages:["@skill-map/cli"]},{body:"Plugins no longer have a bundle-level switch; each extension toggles on its own. `sm plugins disable <bundle>` cascades across the bundle's extensions (multi-extension bundles need `--yes`). The kind filter narrows extensions inside matched bundles instead of leaking siblings.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Cleaner Plugins view.** Settings \u2192 Plugins and `sm plugins show <bundle>` no longer print a per-extension version chip for built-in plugins (they all share the CLI version). External (user-authored) plugins are unchanged and still show per-extension semver.",packages:["@skill-map/cli"]},{body:'`sm scan` summary now splits findings per severity (`N errors \xB7 M warnings \xB7 K info`), colored and collapsed when zero. The graph view gains a third palette to filter cards with errors / warnings; the perf-HUD says "links" instead of "edges".',packages:["@skill-map/cli"]},{body:"**List view** is live. Click **List** in the topbar for a sortable, filterable table of every node (Kind, Name, Tags, Path, Tokens, Stability, Stale, Issues). Click a row to inspect on the graph. Graph card chips now share the same icons as the list.",packages:["@skill-map/cli"]},{body:'Graph cards drop the corner badge for routine warnings; count + tooltip stay on the footer chip. Broken refs now escalate `sm scan` to exit 1 (were exit 0). `sm init` prints the "no provider markers" advisory as a two-line yellow `\u26A0` block.',packages:["@skill-map/cli","@skill-map/spec"]},{body:'`sm check --analyzers <id>` now errors with the valid id list when mistyped, instead of silently saying "No issues." `/invoke` and `@mention` links from any markdown body now contribute to the target\'s `IN`. `sm plugins doctor` summary spells out its bundle + extension split.',packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.39.0",date:"2026-05-25",kind:"user-facing",highlights:[{body:"Renamed `core/field-unknown` to `core/annotation-field-unknown` so the sidecar typo-guard rule groups with the other `core/annotation-*` rules. Update references in `settings.json` or `sm check --analyzers <id>` to the new name.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Renamed 14 built-in extension ids to a `<area>-<detail>` shape (e.g. `core/broken-ref` is now `core/reference-broken`). If you reference these by qualified id in `settings.json` or via `sm check --analyzers <id>`, update to the new names.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"In dev builds the topbar and the `sm serve` banner now show only the `dev` marker instead of pairing it with the published version number.",packages:["@skill-map/cli"]},{body:"When a scan adds or removes nodes, the graph view animates the camera to frame the new layout, refreshes auto positions so nodes never land on top of each other, and keeps your manually-dragged pins where you put them.",packages:["@skill-map/cli"]},{body:"`sm` log lines now lead with a coloured glyph per level (`\u26A0 WARN`, `\u2715 ERROR`, `\u2139 INFO`) so advisories stand out from the rest of the output.",packages:["@skill-map/cli"]},{body:"In Settings, expanding a bundle plugin (claude, antigravity, openai, agent-skills) now shows the correct per-extension state and the toggles persist, the next scan honours them. `sm plugins list` reflects effective state too.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Plugins always list `core` first across CLI, BFF, and Settings; the project path stays visible in the topbar (truncated with `\u2026` on the LEFT so the project name reaches the eye); and the SPA reconnects on its own when `sm serve` restarts.",packages:["@skill-map/cli"]},{body:'`sm list` IN counts and the inspector\'s "Linked nodes \u2192 INCOMING" now include every `@mention` and `/invoke`, not just markdown links. `sm plugins doctor` no longer raises a spurious `claude/agent` warning on a clean install.',packages:["@skill-map/cli"]}]},{version:"0.38.0",date:"2026-05-24",kind:"user-facing",highlights:[{body:"`sm <verb> --json` now also suppresses info banners on stderr, keeping both streams clean for piping into `jq`.",packages:["@skill-map/cli"]}]},{version:"0.37.0",date:"2026-05-23",kind:"user-facing",highlights:[{body:"`sm scan` now warns once when provider markers on disk drifted since `activeProvider` was set (e.g. you added `.codex/` after picking the `claude` lens). Run `sm config set activeProvider <id>` to switch the lens, or ignore the warn and keep going, it never blocks the scan.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Clearer CLI errors.** Errors from `sm serve`, `bump`, `db`, `plugins`, `refresh`, `list`, `watch`, `graph`, `hooks`, and `sidecar` now print a `\u2715` headline plus a dim hint on the next line. Fixes a `sm refresh` persist-failure that rendered `{{glyph}}` literally.",packages:["@skill-map/cli"]},{body:"`sm` now detects when the local `.skill-map/` DB was written by an incompatible CLI version: newer minor or different major refuses to open with a clear hint; older same-major prints a one-shot warning and continues. Defensive parse errors include the same hint.",packages:["@skill-map/cli"]},{body:'`sm init --force` now also resets the DB (was overwriting only the config files). Solves the "Failed to read scan rows" crash on the first auto-scan when re-initialising a project that already had a DB from an older CLI version.',packages:["@skill-map/cli"]},{body:"**Two scan-time bugs fixed.** Resolved `/slash` and `@mention` links now correctly land at confidence `1.0` (were stuck at the emit floor), and the markdown-link extractor no longer flags `[label](path)` shown inside backticks or fenced code blocks as broken references.",packages:["@skill-map/cli"]},{body:"Cross-provider files (e.g. a `.codex/agents/*.toml` while the lens is `claude`) are no longer claimed by the foreign provider. They surface as plain markdown / unclassified instead, matching how the agent itself would see them at runtime.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"Card chips for incoming / outgoing links no longer count self-loops, so a node that links back to itself stops showing inflated 1 in / 1 out. The `core/self-loop` analyzer still surfaces the self-reference as a warning, only the misleading count goes away.",packages:["@skill-map/cli"]},{body:"**CLI + inspector polish.** `sm init` now prompts for the active lens when markers compete; `sm config set activeProvider` rejects unknown ids upfront; error blocks across the CLI gain a `\u2715` glyph + hint; the inspector hides self-loops and paints kinds in their canonical colour.",packages:["@skill-map/cli"]},{body:'**Inspector overhaul.** Links show numeric confidence, a Findings list, per-row issue chips, and per-site "Occurs at" lines. New "External references" section. Self-loops hidden by default. Two new analyzers flag redundant multi-form references and self-loops.',packages:["@skill-map/cli","@skill-map/spec"]},{body:"`sm scan` now warns when two extractors detect overlapping byte ranges. The graph keeps the winner; the issue panel explains which detection lost and why, so a markdown link wrapping an `@`-directive no longer looks like silent disappearing intent.",packages:["@skill-map/cli","@skill-map/spec"]}]},{version:"0.36.0",date:"2026-05-22",kind:"user-facing",highlights:[{body:"**Gemini CLI support retired.** Antigravity CLI projects (Google's May 2026 replacement) scan via the open-standard `.agents/skills/` paths under the existing `agent-skills` lens. Run `sm config set activeProvider antigravity` to flag a project as Antigravity-flavoured.",packages:["@skill-map/cli","@skill-map/spec"]},{body:"**Files whose name shadows a built-in are flagged.** A file like `.claude/commands/help.md` now emits a `warn` (Claude's runtime ignores it for its own `/help`), and incoming `/help` edges resolve to it at confidence `0.1` instead of `1.0`.",packages:["@skill-map/cli","@skill-map/spec"]}]}]};var Bt=zt;var En=(t,r)=>r.version;function Mn(t,r){if(t&1&&(x(0,"p",3),l(1),C()),t&2){let e=d();o(),u(" ",e.texts.changelogEmpty," ")}}function Tn(t,r){if(t&1&&(x(0,"p",12),l(1),C()),t&2){let e=d(3);o(),u(" ",e.texts.changelogInternalRelease," ")}}function On(t,r){if(t&1&&(x(0,"li",17),l(1),C()),t&2){let e=r.$implicit;o(),p(e)}}function In(t,r){if(t&1&&(x(0,"ul",16),j(1,On,2,1,"li",17,q),C()),t&2){let e=d().$implicit,i=d(4);b("aria-label",i.texts.changelogAffectedPackages),o(),D(e.packages)}}function Fn(t,r){if(t&1&&(x(0,"li",14),ne(1,"div",15),m(2,In,3,1,"ul",16),C()),t&2){let e=r.$implicit;o(),W("innerHTML",e.bodyHtml,it),o(),h(e.packages.length?2:-1)}}function jn(t,r){if(t&1&&(x(0,"ul",13),j(1,Fn,3,2,"li",14,xe),C()),t&2){let e=d().$implicit;o(),D(e.highlights)}}function Dn(t,r){if(t&1&&(x(0,"li",8)(1,"header",9)(2,"span",10),l(3),C(),x(4,"span",11),l(5),C()(),m(6,Tn,2,1,"p",12)(7,jn,3,0,"ul",13),C()),t&2){let e=r.$implicit;G("settings-changelog__entry--internal",e.kind==="internal"),b("data-testid","settings-changelog-entry-"+e.version),o(3),u("v",e.version),o(2),p(e.date),o(),h(e.kind==="internal"?6:7)}}function Ln(t,r){if(t&1&&(x(0,"ol",4),j(1,Dn,8,6,"li",7,En),C()),t&2){let e=d();o(),D(e.entries())}}var An=10,$t=(()=>{class t{markdown=y(jt);texts=k;entries=_([]);hasEntries=v(()=>this.entries().length>0);ngOnInit(){this.renderAll()}async renderAll(){let e=[],i=Bt.entries.slice(0,An);for(let n of i){let c=[];for(let g of n.highlights)c.push({bodyHtml:await this.markdown.render(g.body),packages:g.packages});e.push({version:n.version,date:this.formatDate(n.date),kind:n.kind,highlights:c})}this.entries.set(e)}formatDate(e){let i=new Date(e+"T00:00:00Z");return Number.isNaN(i.getTime())?e:new Intl.DateTimeFormat("en-GB",{day:"numeric",month:"long",year:"numeric",timeZone:"UTC"}).format(i)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=z({type:t,selectors:[["sm-settings-changelog"]],decls:11,vars:7,consts:[["data-testid","settings-changelog",1,"settings-changelog"],["id","settings-changelog-heading",1,"settings-changelog__title"],[1,"settings-changelog__intro"],["data-testid","settings-changelog-empty",1,"settings-changelog__empty"],["role","list",1,"settings-changelog__list"],["data-testid","settings-changelog-footer",1,"settings-changelog__footer"],["target","_blank","rel","noopener noreferrer",1,"settings-changelog__footer-link",3,"href"],[1,"settings-changelog__entry",3,"settings-changelog__entry--internal"],[1,"settings-changelog__entry"],[1,"settings-changelog__entry-header"],[1,"settings-changelog__version"],[1,"settings-changelog__date"],[1,"settings-changelog__internal-body"],["role","list",1,"settings-changelog__highlights"],[1,"settings-changelog__highlight"],[1,"settings-changelog__highlight-body",3,"innerHTML"],["role","list",1,"settings-changelog__packages"],[1,"settings-changelog__package"]],template:function(i,n){i&1&&(x(0,"section",0)(1,"h2",1),l(2),C(),x(3,"p",2),l(4),C(),m(5,Mn,2,1,"p",3)(6,Ln,3,0,"ol",4),x(7,"p",5),l(8),x(9,"a",6),l(10),C()()()),i&2&&(b("aria-labelledby","settings-changelog-heading"),o(2),u(" ",n.texts.changelogHeading," "),o(2),p(n.texts.changelogIntro),o(),h(n.hasEntries()?6:5),o(3),u(" ",n.texts.changelogFooterText," "),o(),W("href",n.texts.changelogFooterUrl,J),o(),u(" ",n.texts.changelogFooterLinkLabel," "))},styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-changelog__title[_ngcontent-%COMP%]{margin:0 0 .25rem;font-size:1.05rem;font-weight:600;color:var(--p-text-color)}.settings-changelog__intro[_ngcontent-%COMP%]{margin:0 0 1.25rem;font-size:.85rem;color:var(--sm-text-muted);line-height:1.5}.settings-changelog__empty[_ngcontent-%COMP%]{margin:1.5rem 0 0;font-size:.9rem;color:var(--sm-text-muted);font-style:italic}.settings-changelog__list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1.25rem}.settings-changelog__entry[_ngcontent-%COMP%]{border-left:2px solid var(--p-primary-color);padding:.25rem 0 .25rem .85rem}.settings-changelog__entry--internal[_ngcontent-%COMP%]{border-left-color:var(--sm-border)}.settings-changelog__entry-header[_ngcontent-%COMP%]{display:flex;align-items:baseline;gap:.6rem;margin-bottom:.45rem}.settings-changelog__version[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.95rem;font-weight:600;color:var(--p-text-color)}.settings-changelog__date[_ngcontent-%COMP%]{font-size:.78rem;color:var(--sm-text-muted)}.settings-changelog__internal-body[_ngcontent-%COMP%]{margin:0;font-size:.85rem;color:var(--sm-text-muted);font-style:italic}.settings-changelog__highlights[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.7rem}.settings-changelog__highlight[_ngcontent-%COMP%]{font-size:.88rem;line-height:1.5;color:var(--p-text-color)}.settings-changelog__highlight-body[_ngcontent-%COMP%]{margin:0}[_nghost-%COMP%] .settings-changelog__highlight-body p{margin:0}[_nghost-%COMP%] .settings-changelog__highlight-body p+p{margin-top:.45rem}[_nghost-%COMP%] .settings-changelog__highlight-body code{font-family:var(--sm-font-mono);font-size:.82rem;padding:.05rem .3rem;border-radius:var(--sm-radius-sm);background:var(--sm-bg-hover);color:var(--p-text-color)}[_nghost-%COMP%] .settings-changelog__highlight-body a{color:var(--p-primary-color);text-decoration:underline}[_nghost-%COMP%] .settings-changelog__highlight-body strong{font-weight:600}.settings-changelog__packages[_ngcontent-%COMP%]{list-style:none;margin:.4rem 0 0;padding:0;display:flex;flex-wrap:wrap;gap:.3rem}.settings-changelog__package[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.7rem;padding:.1rem .4rem;border-radius:var(--sm-radius-sm);background:var(--sm-bg-hover);color:var(--sm-text-muted);border:1px solid var(--sm-border);line-height:1.4}.settings-changelog__footer[_ngcontent-%COMP%]{margin:1.75rem 0 0;padding-top:1rem;border-top:1px solid var(--sm-border);font-size:.82rem;color:var(--sm-text-muted);text-align:center}.settings-changelog__footer-link[_ngcontent-%COMP%]{margin-left:.3rem;color:var(--p-primary-color);text-decoration:none;font-weight:500}.settings-changelog__footer-link[_ngcontent-%COMP%]:hover{text-decoration:underline}"],changeDetection:0})}return t})();var Gt=`
2
+ .p-toggleswitch {
3
+ display: inline-block;
4
+ width: dt('toggleswitch.width');
5
+ height: dt('toggleswitch.height');
6
+ }
7
+
8
+ .p-toggleswitch-input {
9
+ cursor: pointer;
10
+ appearance: none;
11
+ position: absolute;
12
+ top: 0;
13
+ inset-inline-start: 0;
14
+ width: 100%;
15
+ height: 100%;
16
+ padding: 0;
17
+ margin: 0;
18
+ opacity: 0;
19
+ z-index: 1;
20
+ outline: 0 none;
21
+ border-radius: dt('toggleswitch.border.radius');
22
+ }
23
+
24
+ .p-toggleswitch-slider {
25
+ cursor: pointer;
26
+ width: 100%;
27
+ height: 100%;
28
+ border-width: dt('toggleswitch.border.width');
29
+ border-style: solid;
30
+ border-color: dt('toggleswitch.border.color');
31
+ background: dt('toggleswitch.background');
32
+ transition:
33
+ background dt('toggleswitch.transition.duration'),
34
+ color dt('toggleswitch.transition.duration'),
35
+ border-color dt('toggleswitch.transition.duration'),
36
+ outline-color dt('toggleswitch.transition.duration'),
37
+ box-shadow dt('toggleswitch.transition.duration');
38
+ border-radius: dt('toggleswitch.border.radius');
39
+ outline-color: transparent;
40
+ box-shadow: dt('toggleswitch.shadow');
41
+ }
42
+
43
+ .p-toggleswitch-handle {
44
+ position: absolute;
45
+ top: 50%;
46
+ display: flex;
47
+ justify-content: center;
48
+ align-items: center;
49
+ background: dt('toggleswitch.handle.background');
50
+ color: dt('toggleswitch.handle.color');
51
+ width: dt('toggleswitch.handle.size');
52
+ height: dt('toggleswitch.handle.size');
53
+ inset-inline-start: dt('toggleswitch.gap');
54
+ margin-block-start: calc(-1 * calc(dt('toggleswitch.handle.size') / 2));
55
+ border-radius: dt('toggleswitch.handle.border.radius');
56
+ transition:
57
+ background dt('toggleswitch.transition.duration'),
58
+ color dt('toggleswitch.transition.duration'),
59
+ inset-inline-start dt('toggleswitch.slide.duration'),
60
+ box-shadow dt('toggleswitch.slide.duration');
61
+ }
62
+
63
+ .p-toggleswitch.p-toggleswitch-checked .p-toggleswitch-slider {
64
+ background: dt('toggleswitch.checked.background');
65
+ border-color: dt('toggleswitch.checked.border.color');
66
+ }
67
+
68
+ .p-toggleswitch.p-toggleswitch-checked .p-toggleswitch-handle {
69
+ background: dt('toggleswitch.handle.checked.background');
70
+ color: dt('toggleswitch.handle.checked.color');
71
+ inset-inline-start: calc(dt('toggleswitch.width') - calc(dt('toggleswitch.handle.size') + dt('toggleswitch.gap')));
72
+ }
73
+
74
+ .p-toggleswitch:not(.p-disabled):has(.p-toggleswitch-input:hover) .p-toggleswitch-slider {
75
+ background: dt('toggleswitch.hover.background');
76
+ border-color: dt('toggleswitch.hover.border.color');
77
+ }
78
+
79
+ .p-toggleswitch:not(.p-disabled):has(.p-toggleswitch-input:hover) .p-toggleswitch-handle {
80
+ background: dt('toggleswitch.handle.hover.background');
81
+ color: dt('toggleswitch.handle.hover.color');
82
+ }
83
+
84
+ .p-toggleswitch:not(.p-disabled):has(.p-toggleswitch-input:hover).p-toggleswitch-checked .p-toggleswitch-slider {
85
+ background: dt('toggleswitch.checked.hover.background');
86
+ border-color: dt('toggleswitch.checked.hover.border.color');
87
+ }
88
+
89
+ .p-toggleswitch:not(.p-disabled):has(.p-toggleswitch-input:hover).p-toggleswitch-checked .p-toggleswitch-handle {
90
+ background: dt('toggleswitch.handle.checked.hover.background');
91
+ color: dt('toggleswitch.handle.checked.hover.color');
92
+ }
93
+
94
+ .p-toggleswitch:not(.p-disabled):has(.p-toggleswitch-input:focus-visible) .p-toggleswitch-slider {
95
+ box-shadow: dt('toggleswitch.focus.ring.shadow');
96
+ outline: dt('toggleswitch.focus.ring.width') dt('toggleswitch.focus.ring.style') dt('toggleswitch.focus.ring.color');
97
+ outline-offset: dt('toggleswitch.focus.ring.offset');
98
+ }
99
+
100
+ .p-toggleswitch.p-invalid > .p-toggleswitch-slider {
101
+ border-color: dt('toggleswitch.invalid.border.color');
102
+ }
103
+
104
+ .p-toggleswitch.p-disabled {
105
+ opacity: 1;
106
+ }
107
+
108
+ .p-toggleswitch.p-disabled .p-toggleswitch-slider {
109
+ background: dt('toggleswitch.disabled.background');
110
+ }
111
+
112
+ .p-toggleswitch.p-disabled .p-toggleswitch-handle {
113
+ background: dt('toggleswitch.handle.disabled.background');
114
+ }
115
+ `;var Nn=["handle"],Rn=["input"],Vn=t=>({checked:t});function zn(t,r){t&1&&at(0)}function Bn(t,r){if(t&1&&K(0,zn,1,0,"ng-container",3),t&2){let e=d();f("ngTemplateOutlet",e.handleTemplate||e._handleTemplate)("ngTemplateOutletContext",gt(2,Vn,e.checked()))}}var $n=`
116
+ ${Gt}
117
+
118
+ p-toggleswitch.ng-invalid.ng-dirty > .p-toggleswitch-slider {
119
+ border-color: dt('toggleswitch.invalid.border.color');
120
+ }
121
+ `,Gn={root:{position:"relative"}},Un={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"},Ut=(()=>{class t extends ht{name="toggleswitch";style=$n;classes=Un;inlineStyles=Gn;static \u0275fac=(()=>{let e;return function(n){return(e||(e=Ve(t)))(n||t)}})();static \u0275prov=ve({token:t,factory:t.\u0275fac})}return t})();var Ht=new Ze("TOGGLESWITCH_INSTANCE"),Hn={provide:_t,useExisting:Ye(()=>ge),multi:!0},ge=(()=>{class t extends yt{componentName="ToggleSwitch";$pcToggleSwitch=y(Ht,{optional:!0,skipSelf:!0})??void 0;bindDirectiveInstance=y(_e,{self:!0});onAfterViewChecked(){this.bindDirectiveInstance.setAttrs(this.ptms(["host","root"]))}styleClass;tabindex;inputId;readonly;trueValue=!0;falseValue=!1;ariaLabel;size=$();ariaLabelledBy;autofocus;onChange=new nt;input;handleTemplate;_handleTemplate;focused=!1;_componentStyle=y(Ut);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(n){return(e||(e=Ve(t)))(n||t)}})();static \u0275cmp=z({type:t,selectors:[["p-toggleswitch"],["p-toggleSwitch"],["p-toggle-switch"]],contentQueries:function(i,n,c){if(i&1&&lt(c,Nn,4)(c,Se,4),i&2){let g;Ce(g=we())&&(n.handleTemplate=g.first),Ce(g=we())&&(n.templates=g)}},viewQuery:function(i,n){if(i&1&&ct(Rn,5),i&2){let c;Ce(c=we())&&(n.input=c.first)}},hostVars:7,hostBindings:function(i,n){i&1&&w("click",function(g){return n.onHostClick(g)}),i&2&&(b("data-p-checked",n.checked())("data-p-disabled",n.$disabled())("data-p",n.dataP),dt(n.sx("root")),he(n.cn(n.cx("root"),n.styleClass)))},inputs:{styleClass:"styleClass",tabindex:[2,"tabindex","tabindex",pt],inputId:"inputId",readonly:[2,"readonly","readonly",Be],trueValue:"trueValue",falseValue:"falseValue",ariaLabel:"ariaLabel",size:[1,"size"],ariaLabelledBy:"ariaLabelledBy",autofocus:[2,"autofocus","autofocus",Be]},outputs:{onChange:"onChange"},features:[ie([Hn,Ut,{provide:Ht,useExisting:t},{provide:ft,useExisting:t}]),rt([_e]),st],decls:5,vars:22,consts:[["input",""],["type","checkbox","role","switch",3,"focus","blur","checked","pAutoFocus","pBind"],[3,"pBind"],[4,"ngTemplateOutlet","ngTemplateOutletContext"]],template:function(i,n){i&1&&(a(0,"input",1,0),w("focus",function(){return n.onFocus()})("blur",function(){return n.onBlur()}),s(),a(2,"div",2)(3,"div",2),m(4,Bn,1,4,"ng-container"),s()()),i&2&&(he(n.cx("input")),f("checked",n.checked())("pAutoFocus",n.autofocus)("pBind",n.ptm("input")),b("id",n.inputId)("required",n.required()?"":void 0)("disabled",n.$disabled()?"":void 0)("aria-checked",n.checked())("aria-labelledby",n.ariaLabelledBy)("aria-label",n.ariaLabel)("name",n.name())("tabindex",n.tabindex),o(2),he(n.cx("slider")),f("pBind",n.ptm("slider")),b("data-p",n.dataP),o(),he(n.cx("handle")),f("pBind",n.ptm("handle")),b("data-p",n.dataP),o(),h(n.handleTemplate||n._handleTemplate?4:-1))},dependencies:[mt,ut,kt,Pe,bt,_e],encapsulation:2,changeDetection:0})}return t})(),Le=(()=>{class t{static \u0275fac=function(i){return new(i||t)};static \u0275mod=ot({type:t});static \u0275inj=Je({imports:[ge,Pe,Pe]})}return t})();var Kn=(t,r)=>r.key;function qn(t,r){if(t&1&&(a(0,"p-message",3),l(1),s()),t&2){let e=d();f("closable",!1),o(),R(" ",e.texts.general.loadErrorPrefix," ",r," ")}}function Wn(t,r){if(t&1&&(a(0,"p-message",4),l(1),s()),t&2){let e=d();f("closable",!1),o(),R(" ",e.texts.general.saveErrorPrefix," ",r," ")}}function Xn(t,r){t&1&&(a(0,"div",15),l(1),s()),t&2&&(o(),p(r))}function Qn(t,r){if(t&1){let e=L();a(0,"li",6)(1,"div",8)(2,"div",9),l(3),s(),a(4,"div",10),l(5),s(),m(6,Xn,2,1,"div",15),s(),a(7,"p-toggleswitch",16),w("ngModelChange",function(n){let c=P(e).$implicit,g=d();return E(g.onToggle(c,n))}),s()()}if(t&2){let e,i=r.$implicit,n=d();b("data-testid","settings-general-row-"+i.key),o(3),p(n.toggleLabel(i.key)),o(2),u(" ",n.toggleDescription(i.key)," "),o(),h((e=n.toggleHint(i.key))?6:-1,e),o(),f("ngModel",n.valueOf(i))("disabled",n.loading()||n.isPending(i.key)||n.preferences()===null),b("data-testid","settings-general-toggle-"+i.key)}}function Yn(t,r){if(t&1&&(a(0,"span",17),l(1),s()),t&2){let e=r.$implicit;o(),u(" ",e.label," ")}}var Jn=[{key:"updateCheck.enabled",read:t=>t.updateCheck.enabled,patch:t=>({updateCheck:{enabled:t}})},{key:"telemetry",read:t=>t.telemetry.errorsEnabled&&t.telemetry.usageCliEnabled&&t.telemetry.usageUiEnabled,patch:t=>({telemetry:{errorsEnabled:t,usageCliEnabled:t,usageUiEnabled:t}})}],Ae="none";function Zn(t){return t===null?Ae:t}function ei(t){return t===Ae?null:t}var Qt=(()=>{class t{dataSource=y(X);themeService=y(je);visible=$.required();texts=k;toggles=Jn;extraThemeOptions=[{value:Ae,label:k.general.extraTheme.options.none.label,description:k.general.extraTheme.options.none.description},...Lt.map(e=>({value:e.id,label:e.label,description:e.description}))];extraThemeWire=v(()=>Zn(this.themeService.extraTheme()));loading=_(!1);loadError=_(null);saveError=_(null);preferences=_(null);pending=_(new Set);constructor(){B(()=>{this.visible()&&this.refresh()})}toggleLabel(e){return k.general.toggles[e].label}toggleDescription(e){return k.general.toggles[e].description}toggleHint(e){let i=k.general.toggles[e];return"hint"in i?i.hint:null}valueOf(e){let i=this.preferences();return i?e.read(i):!1}isPending(e){return this.pending().has(e)}onToggle(e,i){this.runToggle(e,i)}onExtraThemeChange(e){this.themeService.setExtraTheme(ei(e??Ae))}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let e=await this.dataSource.getPreferences();this.preferences.set(e)}catch(e){this.loadError.set(qt(e)),this.preferences.set(null)}finally{this.loading.set(!1)}}async runToggle(e,i){if(this.pending().has(e.key))return;let n=new Set(this.pending());n.add(e.key),this.pending.set(n),this.saveError.set(null);try{let c=await this.dataSource.setPreferences(e.patch(i));this.preferences.set(c)}catch(c){this.saveError.set(qt(c))}finally{let c=new Set(this.pending());c.delete(e.key),this.pending.set(c)}}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=z({type:t,selectors:[["sm-settings-general"]],inputs:{visible:[1,"visible"]},decls:22,vars:12,consts:[["data-testid","settings-general",1,"settings-general"],["id","settings-general-heading",1,"settings-general__title"],[1,"settings-general__intro"],["severity","error","data-testid","settings-general-load-error",3,"closable"],["severity","error","data-testid","settings-general-save-error",3,"closable"],["role","list",1,"settings-general__list"],[1,"settings-general__row"],["data-testid","settings-general-row-extra-theme",1,"settings-general__row"],[1,"settings-general__row-text"],[1,"settings-general__row-label"],[1,"settings-general__row-description"],["optionLabel","label","optionValue","value","data-testid","settings-general-extra-theme",3,"ngModelChange","options","ngModel","allowEmpty"],["pTemplate","item"],["data-testid","settings-general-storage-hint",1,"settings-general__storage-hint"],[1,"settings-general__storage-hint-path"],[1,"settings-general__row-hint"],[3,"ngModelChange","ngModel","disabled"],["data-testid","settings-general-extra-theme-option"]],template:function(i,n){if(i&1&&(a(0,"section",0)(1,"h2",1),l(2),s(),a(3,"p",2),l(4),s(),m(5,qn,2,3,"p-message",3),m(6,Wn,2,3,"p-message",4),a(7,"ul",5),j(8,Qn,8,7,"li",6,Kn),a(10,"li",7)(11,"div",8)(12,"div",9),l(13),s(),a(14,"div",10),l(15),s()(),a(16,"p-selectbutton",11),w("ngModelChange",function(g){return n.onExtraThemeChange(g)}),K(17,Yn,2,1,"ng-template",12),s()()(),a(18,"p",13),l(19),a(20,"code",14),l(21),s()()()),i&2){let c,g;b("aria-labelledby","settings-general-heading"),o(2),u(" ",n.texts.general.heading," "),o(2),p(n.texts.general.intro),o(),h((c=n.loadError())?5:-1,c),o(),h((g=n.saveError())?6:-1,g),o(2),D(n.toggles),o(5),u(" ",n.texts.general.extraTheme.label," "),o(2),u(" ",n.texts.general.extraTheme.description," "),o(),f("options",n.extraThemeOptions)("ngModel",n.extraThemeWire())("allowEmpty",!1),o(3),u(" ",n.texts.general.storageHintLabel," "),o(2),p(n.texts.general.storageHintPath)}},dependencies:[ae,re,se,de,ce,Se,Ot,Tt,Le,ge],styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-general__title[_ngcontent-%COMP%]{margin:0 0 .25rem;font-size:1.05rem;font-weight:600;color:var(--p-text-color)}.settings-general__intro[_ngcontent-%COMP%]{margin:0 0 1.25rem;font-size:.85rem;color:var(--sm-text-muted);line-height:1.5}.settings-general__list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:1rem}.settings-general__row[_ngcontent-%COMP%]{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem;padding:.85rem 1rem;border:1px solid var(--p-content-border-color);border-radius:var(--sm-radius-lg);background:var(--p-content-background)}.settings-general__row-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;flex:1 1 auto;min-width:0}.settings-general__row[_ngcontent-%COMP%] p-toggleswitch[_ngcontent-%COMP%]{flex-shrink:0}.settings-general__row-label[_ngcontent-%COMP%]{font-size:.9rem;font-weight:600;color:var(--p-text-color)}.settings-general__row-description[_ngcontent-%COMP%]{font-size:.8rem;color:var(--sm-text-muted);line-height:1.45}.settings-general__row-hint[_ngcontent-%COMP%]{margin-top:.2rem;font-size:.75rem;font-style:italic;color:var(--sm-text-muted)}.settings-general__storage-hint[_ngcontent-%COMP%]{margin:2rem 0 0;font-size:.75rem;line-height:1.5;color:var(--sm-text-muted);opacity:.65}.settings-general__storage-hint-path[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.72rem;padding:.05rem .3rem;border-radius:var(--sm-radius-md);background:var(--p-content-background);border:1px solid var(--p-content-border-color)}"],changeDetection:0})}return t})();function qt(t){return t instanceof U||t instanceof Error?t.message:String(t)}var Ne={provider:"#7C3AED",extractor:"#A78BFA",analyzer:"#5FD17C",action:"#00C853",formatter:"#5BC0EB",hook:"#FFB627"};function Yt(t){let r=t.toLowerCase();return Ne[r]??"currentColor"}var Jt=["all",...Object.keys(Ne)],Zt=Object.keys(Ne),en=["all","built-in","project"],tn=["built-in","project"],Re=["core","claude","antigravity","openai","agent-skills"];function Q(t,r){return`${t}/${r}`}function $e(t){let r=new Map;for(let e of t)if(!pe(e.status)&&e.extensions)for(let i of e.extensions)r.set(Q(e.id,i.id),i.enabled);return r}function Ge(t){let r=t.target;return!r||typeof r.closest!="function"?!1:r.closest('label, button, input, [role="switch"], p-toggleswitch')!==null}function nn(t,r){if(ti(t,r))return[t];if(!t.extensions)return[];let e=t.extensions.filter(i=>ni(i,r));return e.length===0?[]:[Y(H({},t),{extensions:e})]}function on(t,r){if(!t.extensions)return[];let e=t.extensions.filter(i=>i.kind.toLowerCase()===r);return e.length===0?[]:[Y(H({},t),{extensions:e})]}function rn(t,r){return r==="all"?[t]:t.source===r?[t]:[]}function sn(t){if(t.locked)return[];if(!t.extensions)return[t];let r=t.extensions.filter(e=>!e.locked);return r.length===0?[]:[Y(H({},t),{extensions:r})]}function an(t){return t.slice().sort((e,i)=>{let n=Re.indexOf(e.id),c=Re.indexOf(i.id),g=n>=0?n:Re.length,S=c>=0?c:Re.length;return g!==S?g-S:e.id.localeCompare(i.id)}).map(e=>{if(!e.extensions)return e;let i=e.extensions.slice().sort((n,c)=>n.id.localeCompare(c.id));return Y(H({},e),{extensions:i})})}function ti(t,r){return!!(t.id.toLowerCase().includes(r)||t.description&&t.description.toLowerCase().includes(r))}function ni(t,r){return!!(t.id.toLowerCase().includes(r)||t.description&&t.description.toLowerCase().includes(r))}function pe(t){return t==="incompatible-spec"||t==="invalid-manifest"||t==="load-error"||t==="id-collision"}function Ue(t){return t instanceof U||t instanceof Error?t.message:String(t)}function ln(t,r){return pe(t.status)?r.statusFailure[t.status]??t.status:t.status==="enabled"?r.enabledLabel:r.disabledLabel}function cn(t,r){switch(t){case"built-in":return r.sourceBuiltIn;case"project":return r.sourceProject}}var He="sm.settings.plugins.collapsed",Ke="sm.settings.plugins.kind-filter",qe="sm.settings.plugins.source-filter";function dn(){let t=null;try{t=localStorage.getItem(He)}catch{return new Set}if(!t)return new Set;let r;try{r=JSON.parse(t)}catch{return new Set}if(!Array.isArray(r))return new Set;let e=new Set;for(let i of r)typeof i=="string"&&i.length>0&&e.add(i);return e}function gn(t){try{if(t.size===0){localStorage.removeItem(He);return}localStorage.setItem(He,JSON.stringify([...t]))}catch{}}function pn(){let t=null;try{t=localStorage.getItem(Ke)}catch{return"all"}return t&&Jt.includes(t)?t:"all"}function un(t){try{if(t==="all"){localStorage.removeItem(Ke);return}localStorage.setItem(Ke,t)}catch{}}function mn(){let t=null;try{t=localStorage.getItem(qe)}catch{return"all"}return t&&en.includes(t)?t:"all"}function hn(t){try{if(t==="all"){localStorage.removeItem(qe);return}localStorage.setItem(qe,t)}catch{}}function We(){et(We);let t=_(dn());B(()=>gn(t()));let r=i=>{let n=new Set(t());n.has(i)?n.delete(i):n.add(i),t.set(n)},e=i=>!t().has(i);return{collapsed:t.asReadonly(),toggleExpanded:r,isExpanded:e}}function _n(t){let r=_(""),e=v(()=>r().trim().length>0),i=_(pn()),n=v(()=>i()!=="all"),c=_(mn()),g=v(()=>c()!=="all"),S=v(()=>i()==="all"&&c()==="all");B(()=>un(i())),B(()=>hn(c()));let V=v(()=>an(t.plugins().flatMap(sn))),te=v(()=>{let F=r().trim().toLowerCase(),M=c(),I=i(),A=V();return M!=="all"&&(A=A.flatMap(N=>rn(N,M))),I!=="all"&&(A=A.flatMap(N=>on(N,I))),F.length>0&&(A=A.flatMap(N=>nn(N,F))),A});return{searchText:r,searchActive:e,kindFilter:i,setKindFilter:F=>{i.set(F)},toggleKindFilter:F=>{i.set(i()===F?"all":F)},isKindFilterActive:F=>i()===F,kindFilterActive:n,kindFilterChips:Zt,sourceFilter:c,setSourceFilter:F=>{c.set(F)},toggleSourceFilter:F=>{c.set(c()===F?"all":F)},isSourceFilterActive:F=>c()===F,sourceFilterActive:g,sourceFilterChips:tn,allFilterActive:S,resetFilters:()=>{i.set("all"),c.set("all")},visiblePlugins:V,filteredPlugins:te}}var ii=new Set(["claude","antigravity","openai","agent-skills","core"]),oi="external_plugin";function ri(t){let r=t.indexOf("/"),e=r>0?t.slice(0,r):t;return ii.has(e)?t:oi}function Xe(t){let r=new Set;for(let e of t)r.add(ri(e));return[...r].sort()}function fn(t){let r=_(!1),e=_(null),i=_(null),n=_([]),c=_(new Map),g=_(new Map),S=_(!1),V=v(()=>{let M=c(),I=g(),A=new Set;for(let[N,O]of I)M.get(N)!==O&&A.add(N);return A}),te=v(()=>V().size>0),ue=v(()=>n().some(M=>pe(M.status))),me=v(()=>{let M=g();for(let I of n()){if(I.startsAsDisabled!==!0)continue;let A=I.extensions??[];for(let N of A)if(M.get(Q(I.id,N.id))===!0)return!0}return!1});return{plugins:n,loading:r,loadError:e,toggleError:i,applying:S,hasFailureRows:ue,originalState:c,pendingState:g,dirtyIds:V,hasPendingChanges:te,restartRecommended:me,pendingEnabled:M=>g().get(M)??!1,isDirty:M=>V().has(M),refresh:async()=>{r.set(!0),e.set(null),i.set(null);try{let M=await t.dataSource.listPlugins();n.set([...M.items]);let I=$e(M.items);c.set(I),g.set(new Map(I))}catch(M){e.set(Ue(M)),n.set([]),c.set(new Map),g.set(new Map)}finally{r.set(!1)}},onExtensionToggle:(M,I,A)=>{if(S())return;let N=Q(M,I.id),O=new Map(g());O.set(N,A),g.set(O)},applyChanges:async()=>{if(S())return{ok:!1};let M=V();if(M.size===0)return{ok:!1};let I=[],A=g();for(let O of M)I.push({id:O,enabled:A.get(O)??!1});S.set(!0),i.set(null);let N=!1;try{let O=await t.dataSource.applyPluginChanges(I);n.set([...O.items]);let Qe=$e(O.items);c.set(Qe),g.set(new Map(Qe)),t.scanTrigger.run(),N=!0}catch(O){i.set(Ue(O))}finally{S.set(!1)}return N&&Dt("plugin.apply",{enabled:Xe(I.filter(O=>O.enabled).map(O=>O.id)),disabled:Xe(I.filter(O=>!O.enabled).map(O=>O.id))}),{ok:N}},discardChanges:()=>{g.set(new Map(c())),i.set(null)}}}var bn=(t,r)=>r.id;function li(t,r){if(t&1&&l(0),t&2){let e=d();u(" ",e.texts.pluginsKindFilterAll," ")}}function ci(t,r){if(t&1&&l(0),t&2){let e=d().$implicit,i=d(2);u(" ",i.sourceLabel(e)," ")}}function di(t,r){if(t&1){let e=L();a(0,"p-togglebutton",19),w("ngModelChange",function(){let n=P(e).$implicit,c=d(2);return E(c.toggleSourceFilter(n))}),K(1,ci,1,1,"ng-template",null,0,ke),s()}if(t&2){let e=r.$implicit,i=d(2);f("ngModel",i.isSourceFilterActive(e))("ariaLabel",i.texts.pluginsSourceFilterOptionA11y(e,!i.isSourceFilterActive(e))),b("data-testid","settings-plugins-source-chip-"+e)}}function gi(t,r){if(t&1&&(a(0,"span",17),l(1,"|"),s(),j(2,di,3,3,"p-togglebutton",18,q),a(4,"span",17),l(5,"|"),s()),t&2){let e=d();o(2),D(e.sourceFilterChips)}}function pi(t,r){if(t&1&&l(0),t&2){let e=d().$implicit;u(" ",e," ")}}function ui(t,r){if(t&1){let e=L();a(0,"p-togglebutton",20),w("ngModelChange",function(){let n=P(e).$implicit,c=d();return E(c.toggleKindFilter(n))}),K(1,pi,1,1,"ng-template",null,0,ke),s()}if(t&2){let e=r.$implicit,i=d();ze("--kind-color",i.kindTint(e)),f("ngModel",i.isKindFilterActive(e))("ariaLabel",i.texts.pluginsKindFilterOptionA11y(e,!i.isKindFilterActive(e))),b("data-testid","settings-plugins-kind-chip-"+e)}}function mi(t,r){if(t&1&&(a(0,"p-message",12),l(1),s()),t&2){let e=d();f("closable",!1),o(),u(" ",e.texts.unsavedChangesMessage(e.dirtyIds().size)," ")}}function hi(t,r){if(t&1&&(a(0,"p",13),T(1,"i",21),l(2),s()),t&2){let e=d();o(2),u(" ",e.texts.loading," ")}}function _i(t,r){if(t&1&&(a(0,"p-message",14),l(1),s()),t&2){let e=d();f("closable",!1),o(),R(" ",e.texts.errorPrefix," ",e.loadError()," ")}}function fi(t,r){if(t&1&&(a(0,"p",15),l(1),s()),t&2){let e=d();o(),u(" ",e.texts.empty," ")}}function bi(t,r){if(t&1){let e=L();a(0,"p-message",25),w("onClose",function(){P(e);let n=d(2);return E(n.toggleError.set(null))}),l(1),s()}if(t&2){let e=d(2);f("closable",!0),o(),R(" ",e.texts.toggleErrorPrefix," ",e.toggleError()," ")}}function vi(t,r){if(t&1&&(a(0,"p",26),T(1,"i",28),l(2),s()),t&2){let e=d(3);o(2),u(" ",e.texts.pluginsSearchEmpty(e.searchText())," ")}}function xi(t,r){if(t&1&&(a(0,"p",27),T(1,"i",29),l(2),s()),t&2){let e=d(3);o(2),u(" ",e.texts.pluginsProjectEmpty," ")}}function Ci(t,r){if(t&1&&m(0,vi,3,1,"p",26)(1,xi,3,1,"p",27),t&2){let e=d(2);h(e.searchActive()?0:e.sourceFilter()==="project"&&!e.kindFilterActive()?1:-1)}}function wi(t,r){if(t&1){let e=L();a(0,"button",47),w("click",function(n){P(e);let c=d().$implicit;return d(2).toggleExpanded(c.id),E(n.stopPropagation())}),T(1,"i",48),s()}if(t&2){let e=d().$implicit,i=d(2);b("aria-expanded",i.isExpanded(e.id))("aria-label",i.isExpanded(e.id)?i.texts.collapseLabel:i.texts.expandLabel)("data-testid","settings-plugin-expand-"+e.id),o(),G("fa-chevron-down",i.isExpanded(e.id))("fa-chevron-right",!i.isExpanded(e.id))}}function ki(t,r){t&1&&T(0,"span",33)}function yi(t,r){if(t&1&&(a(0,"span",38),l(1),s()),t&2){let e=d().$implicit;o(),u("v",e.version)}}function Si(t,r){if(t&1&&(a(0,"span",39),T(1,"i",49),l(2),s()),t&2){let e=d().$implicit,i=d(2);f("title",e.reason??""),b("data-testid","settings-row-status-"+e.id),o(2),u(" ",i.statusLabel(e)," ")}}function Pi(t,r){if(t&1&&(a(0,"span",40),T(1,"i",50),l(2),s()),t&2){let e=d().$implicit,i=d(2);f("title",i.texts.lockedTooltip),b("data-testid","settings-row-locked-"+e.id),o(2),u(" ",i.texts.lockedLabel," ")}}function Ei(t,r){if(t&1&&(a(0,"span",41),T(1,"i",51),l(2),s()),t&2){let e=d().$implicit,i=d(2);f("title",i.texts.runtimeErrors.badgeTooltip),b("data-testid","settings-row-runtime-errors-"+e.id),o(2),u(" ",i.texts.runtimeErrors.badge(i.runtimeErrorCount(e))," ")}}function Mi(t,r){if(t&1&&(a(0,"p",42),l(1),s()),t&2){let e=d().$implicit;o(),p(e.description)}}function Ti(t,r){if(t&1&&(a(0,"span",43),l(1),s()),t&2){let e=d().$implicit;o(),p(e.reason)}}function Oi(t,r){if(t&1&&(a(0,"p",44),T(1,"i",51),l(2),s()),t&2){let e=d().$implicit,i=d(2);b("data-testid","settings-row-starts-disabled-"+e.id),o(2),u(" ",i.texts.startsAsDisabledRowHint," ")}}function Ii(t,r){if(t&1&&(a(0,"span",57)(1,"span",58),l(2),s(),a(3,"span",59),l(4),s()()),t&2){let e=d().$implicit,i=d(5);o(2),p(i.texts.runtimeErrors.slotPrefix),o(2),p(e.slot)}}function Fi(t,r){if(t&1&&(a(0,"span",57)(1,"span",58),l(2),s(),a(3,"span",59),l(4),s()()),t&2){let e=d().$implicit,i=d(5);o(2),p(i.texts.runtimeErrors.contributionPrefix),o(2),p(e.contributionId)}}function ji(t,r){if(t&1&&(a(0,"li",54)(1,"p",55),l(2),s(),a(3,"div",56)(4,"span",57)(5,"span",58),l(6),s(),a(7,"span",59),l(8),s()(),m(9,Ii,5,2,"span",57),m(10,Fi,5,2,"span",57),s()()),t&2){let e=r.$implicit,i=d(5);o(2),p(e.message),o(4),p(i.texts.runtimeErrors.extensionPrefix),o(2),p(e.extensionId),o(),h(e.slot?9:-1),o(),h(e.contributionId?10:-1)}}function Di(t,r){if(t&1&&(a(0,"ul",53),j(1,ji,11,5,"li",54,xe),s()),t&2){let e=d(2).$implicit;b("data-testid","settings-runtime-errors-"+e.id),o(),D(e.runtimeContributionErrors)}}function Li(t,r){if(t&1){let e=L();a(0,"div",45)(1,"button",52),w("click",function(n){P(e);let c=d().$implicit;return d(2).toggleRuntimeErrors(c.id),E(n.stopPropagation())}),T(2,"i",48),l(3),s(),m(4,Di,3,1,"ul",53),s()}if(t&2){let e=d().$implicit,i=d(2);o(),b("aria-expanded",i.isRuntimeErrorsExpanded(e.id))("aria-label",i.texts.runtimeErrors.a11y.toggle(e.id,i.runtimeErrorCount(e)))("data-testid","settings-runtime-errors-toggle-"+e.id),o(),G("fa-chevron-down",i.isRuntimeErrorsExpanded(e.id))("fa-chevron-right",!i.isRuntimeErrorsExpanded(e.id)),o(),u(" ",i.isRuntimeErrorsExpanded(e.id)?i.texts.runtimeErrors.collapseLabel:i.texts.runtimeErrors.expandLabel," "),o(),h(i.isRuntimeErrorsExpanded(e.id)?4:-1)}}function Ai(t,r){if(t&1&&(a(0,"span",67),l(1),s()),t&2){let e=d().$implicit;o(),u("v",e.version)}}function Ni(t,r){if(t&1&&(a(0,"span",40),T(1,"i",50),l(2),s()),t&2){let e=d().$implicit,i=d(2).$implicit,n=d(2);f("title",n.texts.lockedTooltip),b("data-testid","settings-extrow-locked-"+i.id+"-"+e.id),o(2),u(" ",n.texts.lockedLabel," ")}}function Ri(t,r){if(t&1&&(a(0,"p",68),l(1),s()),t&2){let e=d().$implicit;o(),p(e.description)}}function Vi(t,r){if(t&1){let e=L();a(0,"li",61),w("click",function(n){let c=P(e).$implicit,g=d(2).$implicit,S=d(2);return E(S.onSubrowClick(g.id,c,n))})("keydown.enter",function(n){let c=P(e).$implicit,g=d(2).$implicit,S=d(2);return E(S.onSubrowClick(g.id,c,n))})("keydown.space",function(n){let c=P(e).$implicit,g=d(2).$implicit,S=d(2);return n.preventDefault(),E(S.onSubrowClick(g.id,c,n))}),a(1,"div",62)(2,"div",63),T(3,"span",64),a(4,"span",65),l(5),s(),a(6,"span",66),l(7),s(),m(8,Ai,2,1,"span",67),m(9,Ni,3,3,"span",40),s(),m(10,Ri,2,1,"p",68),s(),a(11,"p-toggleswitch",69),w("ngModelChange",function(n){let c=P(e).$implicit,g=d(2).$implicit,S=d(2);return E(S.onExtensionToggle(g.id,c,n))}),s()()}if(t&2){let e=r.$implicit,i=d(2).$implicit,n=d(2);G("is-clickable",n.extensionToggleInteractive(e))("is-dirty",n.isDirty(n.qualifiedExt(i.id,e.id))),b("aria-label",n.texts.a11y.extensionRow(n.qualifiedExt(i.id,e.id)))("data-testid","settings-extrow-"+i.id+"-"+e.id),o(3),G("settings-plugins__dirty-dot--visible",n.isDirty(n.qualifiedExt(i.id,e.id))),b("data-testid","settings-extrow-dirty-"+i.id+"-"+e.id),o(2),p(e.id),o(),ze("--kind-color",n.kindTint(e.kind)),o(),p(e.kind),o(),h(i.source==="project"?8:-1),o(),h(e.locked?9:-1),o(),h(e.description?10:-1),o(),f("ngModel",n.pendingEnabled(n.qualifiedExt(i.id,e.id)))("disabled",n.applying()||!!e.locked)("ariaLabel",n.texts.a11y.extensionToggle(n.qualifiedExt(i.id,e.id),!n.pendingEnabled(n.qualifiedExt(i.id,e.id)))),b("data-testid","settings-ext-toggle-"+i.id+"-"+e.id)}}function zi(t,r){if(t&1&&(a(0,"ul",46),j(1,Vi,12,20,"li",60,bn),s()),t&2){let e=d().$implicit;b("data-testid","settings-extensions-"+e.id),o(),D(e.extensions)}}function Bi(t,r){if(t&1){let e=L();a(0,"li",30)(1,"div",31),w("click",function(n){let c=P(e).$implicit,g=d(2);return E(g.onRowClick(c,n))})("keydown.enter",function(n){let c=P(e).$implicit,g=d(2);return E(g.onRowClick(c,n))})("keydown.space",function(n){let c=P(e).$implicit,g=d(2);return n.preventDefault(),E(g.onRowClick(c,n))}),m(2,wi,2,7,"button",32)(3,ki,1,0,"span",33),a(4,"div",34)(5,"div",35)(6,"span",36),l(7),s(),a(8,"span",37),l(9),s(),m(10,yi,2,1,"span",38),m(11,Si,3,3,"span",39),m(12,Pi,3,3,"span",40),m(13,Ei,3,3,"span",41),s(),m(14,Mi,2,1,"p",42),m(15,Ti,2,1,"span",43),m(16,Oi,3,2,"p",44),m(17,Li,5,9,"div",45),s()(),m(18,zi,3,1,"ul",46),s()}if(t&2){let e=r.$implicit,i=d(2);G("is-clickable",i.rowIsClickable(e))("is-failed",i.isFailed(e)),b("data-testid","settings-row-"+e.id),o(),b("aria-label",i.texts.a11y.pluginRow(e.id)),o(),h(i.canExpandExtensions(e)?2:3),o(5),p(e.id),o(2),p(i.sourceLabel(e.source)),o(),h(e.source==="project"&&e.version?10:-1),o(),h(i.isFailed(e)?11:-1),o(),h(e.locked?12:-1),o(),h(i.hasRuntimeErrors(e)?13:-1),o(),h(e.description?14:-1),o(),h(e.reason?15:-1),o(),h(i.showStartsAsDisabledHint(e)?16:-1),o(),h(i.hasRuntimeErrors(e)?17:-1),o(),h(i.canExpandExtensions(e)&&i.isExpanded(e.id)?18:-1)}}function $i(t,r){if(t&1&&(m(0,bi,2,3,"p-message",22),m(1,Ci,2,1),a(2,"ul",23),j(3,Bi,19,18,"li",24,bn),s()),t&2){let e=d();h(e.toggleError()?0:-1),o(),h(e.filteredPlugins().length===0?1:-1),o(2),D(e.filteredPlugins())}}function Gi(t,r){if(t&1&&(a(0,"em",70),l(1),s()),t&2){let e=d(2);o(),u(" ",e.texts.startsAsDisabledFooterHint," ")}}function Ui(t,r){if(t&1){let e=L();a(0,"footer",16),m(1,Gi,2,1,"em",70),a(2,"p-button",71),w("onClick",function(){P(e);let n=d();return E(n.discardChanges())}),s(),a(3,"p-button",72),w("onClick",function(){P(e);let n=d();return E(n.applyChanges())}),s()()}if(t&2){let e=d();o(),h(e.restartRecommended()?1:-1),o(),f("text",!0)("label",e.texts.discardChanges)("ariaLabel",e.texts.discardA11y)("disabled",e.applying()),o(),f("label",e.texts.applyAndClose)("ariaLabel",e.texts.applyA11y)("disabled",e.applying())("loading",e.applying())}}var vn=(()=>{class t{dataSource=y(X);scanTrigger=y(Rt);buffer=y(De);destroyRef=y(tt);visible=$.required();applied=ye();texts=k;pluginState=fn({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;runtimeErrorsExpanded=_(new Set);pluginFilter=_n({plugins:this.plugins});searchText=this.pluginFilter.searchText;searchActive=this.pluginFilter.searchActive;kindFilter=this.pluginFilter.kindFilter;kindFilterActive=this.pluginFilter.kindFilterActive;kindFilterChips=this.pluginFilter.kindFilterChips;sourceFilter=this.pluginFilter.sourceFilter;sourceFilterActive=this.pluginFilter.sourceFilterActive;sourceFilterChips=this.pluginFilter.sourceFilterChips;allFilterActive=this.pluginFilter.allFilterActive;visiblePlugins=this.pluginFilter.visiblePlugins;filteredPlugins=this.pluginFilter.filteredPlugins;hasProjectPlugins=v(()=>this.plugins().some(e=>e.source==="project"));constructor(){B(()=>{this.visible()&&this.pluginState.refresh()});let e={dirtyIds:this.pluginState.dirtyIds,applyChanges:async()=>{let i=await this.pluginState.applyChanges();return i.ok&&this.applied.emit(),i},discardChanges:()=>this.pluginState.discardChanges()};this.buffer.register(e),this.destroyRef.onDestroy(()=>this.buffer.deregister(e))}toggleKindFilter(e){this.pluginFilter.toggleKindFilter(e)}isKindFilterActive(e){return this.pluginFilter.isKindFilterActive(e)}toggleSourceFilter(e){this.pluginFilter.toggleSourceFilter(e)}isSourceFilterActive(e){return this.pluginFilter.isSourceFilterActive(e)}resetFilters(){this.pluginFilter.resetFilters()}toggleExpanded(e){this.pluginCollapse.toggleExpanded(e)}isExpanded(e){return this.pluginCollapse.isExpanded(e)}pendingEnabled(e){return this.pluginState.pendingEnabled(e)}isDirty(e){return this.pluginState.isDirty(e)}showStartsAsDisabledHint(e){return!e.startsAsDisabled||!e.extensions?!1:e.extensions.some(i=>this.pendingEnabled(Q(e.id,i.id)))}onExtensionToggle(e,i,n){this.pluginState.onExtensionToggle(e,i,n)}async applyChanges(){(await this.pluginState.applyChanges()).ok&&this.applied.emit()}discardChanges(){this.pluginState.discardChanges()}canExpandExtensions(e){return(e.extensions?.length??0)>0}extensionToggleInteractive(e){return!e.locked}rowIsClickable(e){return this.canExpandExtensions(e)}onRowClick(e,i){Ge(i)||this.canExpandExtensions(e)&&this.toggleExpanded(e.id)}onSubrowClick(e,i,n){if(Ge(n)||!this.extensionToggleInteractive(i))return;let c=Q(e,i.id);this.onExtensionToggle(e,i,!this.pendingEnabled(c))}statusLabel(e){return ln(e,this.texts)}isFailed(e){return pe(e.status)}runtimeErrorCount(e){return e.runtimeContributionErrors?.length??0}hasRuntimeErrors(e){return this.runtimeErrorCount(e)>0}isRuntimeErrorsExpanded(e){return this.runtimeErrorsExpanded().has(e)}toggleRuntimeErrors(e){let i=new Set(this.runtimeErrorsExpanded());i.has(e)?i.delete(e):i.add(e),this.runtimeErrorsExpanded.set(i)}sourceLabel(e){return cn(e,this.texts)}qualifiedExt(e,i){return Q(e,i)}kindTint(e){return Yt(e)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=z({type:t,selectors:[["sm-settings-plugins"]],inputs:{visible:[1,"visible"]},outputs:{applied:"applied"},decls:23,vars:12,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-filter",1,"settings-plugins__filter"],["styleClass","settings-plugins__source-chip is-all","data-testid","settings-plugins-filter-all",3,"ngModelChange","ngModel","ariaLabel"],["styleClass","settings-plugins__kind-chip",3,"ngModel","--kind-color","ariaLabel"],["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"],["aria-hidden","true",1,"settings-plugins__filter-divider"],["styleClass","settings-plugins__source-chip",3,"ngModel","ariaLabel"],["styleClass","settings-plugins__source-chip",3,"ngModelChange","ngModel","ariaLabel"],["styleClass","settings-plugins__kind-chip",3,"ngModelChange","ngModel","ariaLabel"],["aria-hidden","true",1,"fa-solid","fa-spinner","fa-spin"],["severity","error","data-testid","settings-toggle-error",3,"closable"],["role","list",1,"settings-plugins__list"],[1,"settings-plugins__row",3,"is-clickable","is-failed"],["severity","error","data-testid","settings-toggle-error",3,"onClose","closable"],["data-testid","settings-search-empty",1,"settings-plugins__hint"],["data-testid","settings-project-empty",1,"settings-plugins__hint"],["aria-hidden","true",1,"fa-solid","fa-magnifying-glass"],["aria-hidden","true",1,"fa-solid","fa-folder-open"],[1,"settings-plugins__row"],["role","button","tabindex","0",1,"settings-plugins__row-main",3,"click","keydown.enter","keydown.space"],["type","button",1,"settings-plugins__expand"],["aria-hidden","true",1,"settings-plugins__expand-spacer"],[1,"settings-plugins__row-text"],[1,"settings-plugins__row-headline"],[1,"settings-plugins__row-id"],[1,"settings-plugins__row-source"],[1,"settings-plugins__row-version"],[1,"settings-plugins__row-status","settings-plugins__row-status--failed",3,"title"],[1,"settings-plugins__row-locked",3,"title"],[1,"settings-plugins__row-runtime-errors",3,"title"],[1,"settings-plugins__row-description"],[1,"settings-plugins__row-reason"],[1,"settings-plugins__row-hint"],[1,"settings-plugins__runtime"],["role","list",1,"settings-plugins__sublist"],["type","button",1,"settings-plugins__expand",3,"click"],["aria-hidden","true",1,"fa-solid"],["aria-hidden","true",1,"fa-solid","fa-circle-xmark"],["aria-hidden","true",1,"fa-solid","fa-lock"],["aria-hidden","true",1,"fa-solid","fa-triangle-exclamation"],["type","button",1,"settings-plugins__runtime-toggle",3,"click"],["role","list",1,"settings-plugins__runtime-list"],[1,"settings-plugins__runtime-item"],[1,"settings-plugins__runtime-message"],[1,"settings-plugins__runtime-meta"],[1,"settings-plugins__runtime-meta-item"],[1,"settings-plugins__runtime-meta-label"],[1,"settings-plugins__runtime-meta-value"],["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"],["aria-hidden","true",1,"settings-plugins__dirty-dot"],[1,"settings-plugins__subrow-id"],[1,"settings-plugins__subrow-kind"],[1,"settings-plugins__subrow-version"],[1,"settings-plugins__subrow-description"],[3,"ngModelChange","ngModel","disabled","ariaLabel"],["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(i,n){i&1&&(a(0,"section",1)(1,"div",2)(2,"header",3)(3,"h2",4),l(4),s(),a(5,"p",5),l(6),s()(),a(7,"p-iconfield",6),T(8,"p-inputicon",7),a(9,"input",8),w("ngModelChange",function(g){return n.searchText.set(g)}),s()(),a(10,"div",9)(11,"p-togglebutton",10),w("ngModelChange",function(){return n.resetFilters()}),K(12,li,1,1,"ng-template",null,0,ke),s(),m(14,gi,6,0),j(15,ui,3,5,"p-togglebutton",11,q),s(),m(17,mi,2,2,"p-message",12),m(18,hi,3,1,"p",13)(19,_i,2,3,"p-message",14)(20,fi,2,1,"p",15)(21,$i,5,2),s(),m(22,Ui,4,9,"footer",16),s()),i&2&&(o(4),u(" ",n.texts.pluginsHeading," "),o(2),p(n.texts.pluginsIntro),o(3),f("placeholder",n.texts.pluginsSearchPlaceholder)("ngModel",n.searchText()),b("aria-label",n.texts.pluginsSearchA11y),o(),b("aria-label",n.texts.pluginsFilterA11y),o(),f("ngModel",n.allFilterActive())("ariaLabel",n.texts.pluginsFilterAllA11y),o(3),h(n.hasProjectPlugins()?14:-1),o(),D(n.kindFilterChips),o(2),h(n.hasPendingChanges()?17:-1),o(),h(n.loading()?18:n.loadError()?19:n.plugins().length===0?20:21),o(4),h(n.hasPendingChanges()?22:-1))},dependencies:[ae,Ee,re,se,le,Oe,xt,vt,wt,Ct,Te,Me,de,ce,Mt,Et,Le,ge],styles:["[_nghost-%COMP%]{display:flex;flex-direction:column;height:100%;overflow:hidden;--kind-color: var(--p-text-color)}.settings-plugins[_ngcontent-%COMP%]{display:flex;flex-direction:column;flex:1;min-height:0}.settings-plugins__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__filter[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:center;gap:.375rem}.settings-plugins__kind-chip[_ngcontent-%COMP%], .settings-plugins__source-chip[_ngcontent-%COMP%]{--p-togglebutton-padding: .25rem .625rem;--p-togglebutton-content-padding: 0;--p-togglebutton-content-checked-background: transparent;--p-togglebutton-content-checked-shadow: none;--p-togglebutton-border-radius: var(--sm-radius-pill);--p-togglebutton-background: color-mix(in oklab, var(--chip-accent) 8%, transparent);--p-togglebutton-hover-background: color-mix(in oklab, var(--chip-accent) 18%, transparent);--p-togglebutton-checked-background: color-mix(in oklab, var(--chip-accent) 80%, transparent);--p-togglebutton-border-color: color-mix(in oklab, var(--chip-accent) 35%, transparent);--p-togglebutton-hover-border-color: color-mix(in oklab, var(--chip-accent) 55%, transparent);--p-togglebutton-checked-border-color: var(--chip-accent);--p-togglebutton-color: color-mix(in oklab, var(--chip-accent) 70%, var(--p-text-color));--p-togglebutton-hover-color: color-mix(in oklab, var(--chip-accent) 70%, var(--p-text-color));--p-togglebutton-checked-color: var(--p-surface-50);font-size:.75rem;font-weight:500;letter-spacing:.02em;text-transform:lowercase}.settings-plugins__kind-chip[_ngcontent-%COMP%]{--chip-accent: var(--kind-color)}.settings-plugins__source-chip[_ngcontent-%COMP%]{--chip-accent: var(--p-primary-color)}.settings-plugins__source-chip.is-all[_ngcontent-%COMP%]{--chip-accent: var(--p-text-muted-color)}.settings-plugins__filter-divider[_ngcontent-%COMP%]{align-self:center;color:var(--p-text-muted-color);-webkit-user-select:none;user-select:none}.app-dark[_nghost-%COMP%] .settings-plugins__kind-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__kind-chip[_ngcontent-%COMP%], .app-dark[_nghost-%COMP%] .settings-plugins__source-chip[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__source-chip[_ngcontent-%COMP%]{--p-togglebutton-background: color-mix(in oklab, var(--chip-accent) 14%, transparent);--p-togglebutton-hover-background: color-mix(in oklab, var(--chip-accent) 26%, transparent);--p-togglebutton-checked-background: color-mix(in oklab, var(--chip-accent) 70%, transparent);--p-togglebutton-border-color: color-mix(in oklab, var(--chip-accent) 50%, transparent);--p-togglebutton-hover-border-color: color-mix(in oklab, var(--chip-accent) 70%, transparent);--p-togglebutton-color: color-mix(in oklab, var(--chip-accent) 80%, var(--p-text-color));--p-togglebutton-hover-color: color-mix(in oklab, var(--chip-accent) 80%, var(--p-text-color));--p-togglebutton-checked-color: var(--p-surface-900)}.settings-plugins__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-plugin[_ngcontent-%COMP%]{background:var(--p-content-background)}.settings-plugins__row-main[_ngcontent-%COMP%]{display:flex;align-items:center;gap:.75rem}.settings-plugins__expand[_ngcontent-%COMP%], .settings-plugins__expand-spacer[_ngcontent-%COMP%]{width:1.75rem;height:1.75rem;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.settings-plugins__expand[_ngcontent-%COMP%]{border:none;background:transparent;cursor:pointer;color:var(--p-text-muted-color);border-radius:var(--p-border-radius)}.settings-plugins__expand[_ngcontent-%COMP%]:hover{color:var(--p-text-color);background:var(--p-content-hover-background)}.settings-plugins__row-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.125rem;flex:1;min-width:0}.settings-plugins__row-headline[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;align-items:baseline;gap:.5rem .75rem;position:relative}.settings-plugins__row-id[_ngcontent-%COMP%]{font-weight:600;font-family:var(--sm-font-mono)}.settings-plugins__row-source[_ngcontent-%COMP%], .settings-plugins__row-version[_ngcontent-%COMP%], .settings-plugins__subrow-kind[_ngcontent-%COMP%], .settings-plugins__subrow-version[_ngcontent-%COMP%]{display:inline-flex;align-items:center;font-size:.7rem;font-weight:500;letter-spacing:.02em;padding:.125rem .5rem;border-radius:var(--sm-radius-pill);white-space:nowrap}.settings-plugins__row-version[_ngcontent-%COMP%], .settings-plugins__subrow-version[_ngcontent-%COMP%]{font-family:var(--sm-font-mono)}.settings-plugins__row-source[_ngcontent-%COMP%], .settings-plugins__row-version[_ngcontent-%COMP%], .settings-plugins__subrow-version[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--p-text-color) 8%,transparent);border:1px solid color-mix(in oklab,var(--p-text-color) 18%,transparent);color:var(--p-text-color)}.app-dark[_nghost-%COMP%] .settings-plugins__row-source[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__row-source[_ngcontent-%COMP%], .app-dark[_nghost-%COMP%] .settings-plugins__row-version[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__row-version[_ngcontent-%COMP%], .app-dark[_nghost-%COMP%] .settings-plugins__subrow-version[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__subrow-version[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--p-text-color) 14%,transparent);border-color:color-mix(in oklab,var(--p-text-color) 28%,transparent)}.settings-plugins__subrow-kind[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--kind-color) 14%,transparent);border:1px solid color-mix(in oklab,var(--kind-color) 38%,transparent);color:color-mix(in oklab,var(--kind-color) 70%,var(--p-surface-900))}.app-dark[_nghost-%COMP%] .settings-plugins__subrow-kind[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__subrow-kind[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--kind-color) 22%,transparent);border-color:color-mix(in oklab,var(--kind-color) 55%,transparent);color:color-mix(in oklab,var(--kind-color) 80%,var(--p-surface-50))}.settings-plugins__row-status[_ngcontent-%COMP%]{font-weight:500}.settings-plugins__row-status--failed[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;font-size:.7rem;letter-spacing:.02em;padding:.125rem .5rem;border-radius:var(--sm-radius-pill);white-space:nowrap;color:var(--p-message-error-color);background:color-mix(in oklab,var(--p-message-error-color) 14%,transparent)}.settings-plugins__row.is-failed[_ngcontent-%COMP%] .settings-plugins__row-id[_ngcontent-%COMP%], .settings-plugins__row.is-failed[_ngcontent-%COMP%] .settings-plugins__row-description[_ngcontent-%COMP%]{opacity:.6}.settings-plugins__row-locked[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;font-size:.7rem;font-weight:500;letter-spacing:.02em;padding:.125rem .5rem;border-radius:var(--sm-radius-pill);white-space:nowrap;background:color-mix(in oklab,var(--p-message-warn-color) 14%,transparent);border:1px solid color-mix(in oklab,var(--p-message-warn-color) 35%,transparent);color:color-mix(in oklab,var(--p-message-warn-color) 70%,var(--p-surface-900))}.settings-plugins__row-locked[_ngcontent-%COMP%] > .pi[_ngcontent-%COMP%]{font-size:.7rem}.app-dark[_nghost-%COMP%] .settings-plugins__row-locked[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__row-locked[_ngcontent-%COMP%]{background:color-mix(in oklab,var(--p-message-warn-color) 22%,transparent);border-color:color-mix(in oklab,var(--p-message-warn-color) 55%,transparent);color:color-mix(in oklab,var(--p-message-warn-color) 85%,var(--p-surface-50))}.settings-plugins__row-runtime-errors[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:.25rem;font-size:.7rem;font-weight:500;letter-spacing:.02em;padding:.125rem .5rem;border-radius:var(--sm-radius-pill);white-space:nowrap;color:color-mix(in oklab,var(--p-message-warn-color) 70%,var(--p-surface-900));background:color-mix(in oklab,var(--p-message-warn-color) 14%,transparent);border:1px solid color-mix(in oklab,var(--p-message-warn-color) 35%,transparent)}.app-dark[_nghost-%COMP%] .settings-plugins__row-runtime-errors[_ngcontent-%COMP%], .app-dark [_nghost-%COMP%] .settings-plugins__row-runtime-errors[_ngcontent-%COMP%]{color:color-mix(in oklab,var(--p-message-warn-color) 85%,var(--p-surface-50));background:color-mix(in oklab,var(--p-message-warn-color) 22%,transparent);border-color:color-mix(in oklab,var(--p-message-warn-color) 55%,transparent)}.settings-plugins__row-description[_ngcontent-%COMP%]{margin:.25rem 0 0;font-size:.8125rem;line-height:1.4;color:var(--p-text-muted-color)}.settings-plugins__row-reason[_ngcontent-%COMP%]{font-size:.8125rem;color:var(--p-message-error-color);font-family:var(--sm-font-mono);margin-top:.25rem}.settings-plugins__sublist[_ngcontent-%COMP%]{list-style:none;margin:0;padding:.5rem 0 0 1.75rem;display:flex;flex-direction:column;gap:.25rem;border-top:1px dashed var(--p-content-border-color)}.settings-plugins__subrow[_ngcontent-%COMP%]{display:flex;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;position:relative}.settings-plugins__subrow-id[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.875rem}.settings-plugins__subrow-description[_ngcontent-%COMP%]{margin:.25rem 0 0;font-size:.75rem;line-height:1.4;color:var(--p-text-muted-color)}.settings-plugins__dirty-dot[_ngcontent-%COMP%]{position:absolute;left:-.75rem;top:50%;transform:translateY(-50%);width:.5rem;height:.5rem;border-radius:50%;background:var(--p-warn-color);visibility:hidden}.settings-plugins__dirty-dot--visible[_ngcontent-%COMP%]{visibility:visible}.settings-plugins__row-hint[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:.5rem;margin:.25rem 0 0;font-size:.75rem;line-height:1.4;color:var(--p-warn-color)}.settings-plugins__row-hint[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{margin-top:.125rem}.settings-plugins__runtime[_ngcontent-%COMP%]{margin-top:.375rem;display:flex;flex-direction:column;gap:.375rem}.settings-plugins__runtime-toggle[_ngcontent-%COMP%]{align-self:flex-start;display:inline-flex;align-items:center;gap:.375rem;border:none;background:transparent;padding:0;cursor:pointer;font-size:.75rem;font-weight:500;letter-spacing:.02em;color:color-mix(in oklab,var(--p-message-warn-color) 70%,var(--p-text-color))}.settings-plugins__runtime-toggle[_ngcontent-%COMP%]:hover{color:var(--p-message-warn-color)}.settings-plugins__runtime-toggle[_ngcontent-%COMP%] i[_ngcontent-%COMP%]{font-size:.7rem}.settings-plugins__runtime-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.5rem;border-left:2px solid color-mix(in oklab,var(--p-message-warn-color) 35%,transparent);padding-left:.625rem}.settings-plugins__runtime-item[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem}.settings-plugins__runtime-message[_ngcontent-%COMP%]{margin:0;font-size:.8125rem;line-height:1.4;color:var(--p-text-color)}.settings-plugins__runtime-meta[_ngcontent-%COMP%]{display:flex;flex-wrap:wrap;gap:.25rem .75rem}.settings-plugins__runtime-meta-item[_ngcontent-%COMP%]{display:inline-flex;align-items:baseline;gap:.25rem;font-size:.7rem}.settings-plugins__runtime-meta-label[_ngcontent-%COMP%]{color:var(--p-text-muted-color);text-transform:uppercase;letter-spacing:.04em}.settings-plugins__runtime-meta-value[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);color:var(--p-text-muted-color)}.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})}return t})();function Ki(t,r){if(t&1&&(a(0,"p-message",4),l(1),s()),t&2){let e=d();f("closable",!1),o(),R(" ",e.texts.project.loadErrorPrefix," ",r," ")}}function qi(t,r){if(t&1&&(a(0,"p-message",5),l(1),s()),t&2){let e=d();f("closable",!1),o(),R(" ",e.texts.project.saveErrorPrefix," ",r," ")}}function Wi(t,r){t&1&&(a(0,"p-message",6),l(1),s()),t&2&&(f("closable",!1),o(),u(" ",r," "))}function Xi(t,r){if(t&1&&(a(0,"span",12),l(1),s()),t&2){let e=d();o(),p(e.texts.project.activeProviderSourceAutodetect)}}function Qi(t,r){if(t&1&&(a(0,"span",12),l(1),s()),t&2){let e=d();o(),p(e.texts.project.activeProviderSourceNone)}}function Yi(t,r){if(t&1&&(a(0,"span",12),l(1),s()),t&2){let e=d(),i=d();o(),R(" ",i.texts.project.activeProviderDetectedPrefix," ",e," ")}}function Ji(t,r){t&1&&m(0,Yi,2,2,"span",12),t&2&&h(r.length>0?0:-1)}function Zi(t,r){if(t&1&&(a(0,"p-message",15),l(1),s()),t&2){let e=d();f("closable",!1),o(),R(" ",e.texts.project.loadErrorPrefix," ",r," ")}}function eo(t,r){if(t&1&&(a(0,"p-message",16),l(1),s()),t&2){let e=d();f("closable",!1),o(),R(" ",e.texts.project.saveErrorPrefix," ",r," ")}}function to(t,r){if(t&1){let e=L();a(0,"li",19)(1,"span",27),l(2),s(),a(3,"p-button",28),w("onClick",function(){let n=P(e).$implicit,c=d();return E(c.onReferencePathRemove(n))}),s()()}if(t&2){let e=r.$implicit,i=d();o(2),p(e),o(),f("label",i.texts.project.removePathLabel)("outlined",!0)("disabled",i.isPending("scan.referencePaths")),b("data-testid","settings-project-reference-paths-remove")}}function no(t,r){if(t&1&&(a(0,"p-message",22),l(1),s()),t&2){let e=d();f("closable",!1),o(),R(" ",e.texts.project.loadErrorPrefix," ",r," ")}}function io(t,r){if(t&1&&(a(0,"p-message",23),l(1),s()),t&2){let e=d();f("closable",!1),o(),R(" ",e.texts.project.saveErrorPrefix," ",r," ")}}function oo(t,r){if(t&1){let e=L();a(0,"li",19)(1,"span",27),l(2),s(),a(3,"p-button",28),w("onClick",function(){let n=P(e).$implicit,c=d();return E(c.onIgnorePatternRemove(n))}),s()()}if(t&2){let e=r.$implicit,i=d();o(2),p(e),o(),f("label",i.texts.project.removeIgnorePatternLabel)("outlined",!0)("disabled",i.isPending("ignore.patterns")),b("data-testid","settings-project-ignore-patterns-remove")}}var ro=/[\n\r\x00-\x1F\x7F]/,xn=(()=>{class t{dataSource=y(X);confirmation=y(oe);providerRegistry=y(At);visible=$.required();texts=k;loading=_(!1);loadError=_(null);saveError=_(null);preferences=_(null);pending=_(new Set);newReferencePath=_("");referencePaths=v(()=>this.preferences()?.scan.referencePaths??[]);ignoreLoadError=_(null);ignoreSaveError=_(null);ignoreEnvelope=_(null);newIgnorePattern=_("");ignorePatterns=v(()=>this.ignoreEnvelope()?.patterns??[]);activeProviderEnvelope=_(null);activeProviderLoadError=_(null);activeProviderSaveError=_(null);activeProviderSwitchAnnouncement=_(null);providerOptions=v(()=>{let e=this.activeProviderEnvelope(),i=e?new Set(e.selectable):null;return[{id:"",label:k.project.activeProviderEmptyOption,disabled:!1},...this.providerRegistry.providers().map(n=>{let c=i!==null&&!i.has(n.id),g=c?`${n.label} ${k.project.activeProviderDisabledSuffix}`:n.label;return{id:n.id,label:g,disabled:c}})]});activeProviderValue=v(()=>this.activeProviderEnvelope()?.activeProvider??"");activeProviderDetectedLabel=v(()=>(this.activeProviderEnvelope()?.detected??[]).join(", "));activeProviderSource=v(()=>this.activeProviderEnvelope()?.source??"none");constructor(){B(()=>{this.visible()&&(this.refresh(),this.refreshIgnore(),this.refreshActiveProvider())})}isPending(e){return this.pending().has(e)}onReferencePathAdd(){let e=this.newReferencePath().trim();if(e.length===0)return;if(e.includes(",")){this.saveError.set(this.texts.project.commaForbidden);return}let i=[...this.referencePaths(),e];this.runPatch("scan.referencePaths",{scan:{referencePaths:i}}).then(n=>{n&&this.newReferencePath.set("")})}onReferencePathRemove(e){let i=this.referencePaths().filter(n=>n!==e);this.runPatch("scan.referencePaths",{scan:{referencePaths:[...i]}})}onIgnorePatternAdd(){let e=this.newIgnorePattern().trim();if(e.length===0){this.ignoreSaveError.set(this.texts.project.ignorePatternEmpty);return}if(ro.test(e)){this.ignoreSaveError.set(this.texts.project.ignorePatternHasControlChar);return}let i=this.ignorePatterns();if(i.includes(e)){this.ignoreSaveError.set(this.texts.project.ignorePatternDuplicate);return}let n=[...i,e];this.runIgnorePatch({patterns:n}).then(c=>{c&&this.newIgnorePattern.set("")})}onIgnorePatternRemove(e){let i=this.ignorePatterns().filter(n=>n!==e);this.runIgnorePatch({patterns:[...i]})}onActiveProviderChange(e){e===""||e===this.activeProviderValue()||this.confirmActiveProviderSwitch(e,async()=>{await this.runActiveProviderSwitch(e)})}async refresh(){this.loading.set(!0),this.loadError.set(null),this.saveError.set(null);try{let e=await this.dataSource.getProjectPreferences();this.preferences.set(e)}catch(e){this.loadError.set(ee(e)),this.preferences.set(null)}finally{this.loading.set(!1)}}async refreshIgnore(){this.ignoreLoadError.set(null),this.ignoreSaveError.set(null);try{let e=await this.dataSource.getProjectIgnore();this.ignoreEnvelope.set(e)}catch(e){this.ignoreLoadError.set(ee(e)),this.ignoreEnvelope.set(null)}}async refreshActiveProvider(){this.activeProviderLoadError.set(null),this.activeProviderSaveError.set(null);try{let e=await this.dataSource.getActiveProvider();this.activeProviderEnvelope.set(e)}catch(e){this.activeProviderLoadError.set(ee(e)),this.activeProviderEnvelope.set(null)}}async runActiveProviderSwitch(e){this.activeProviderSaveError.set(null),this.activeProviderSwitchAnnouncement.set(null);try{let i=await this.dataSource.setActiveProvider(e);this.activeProviderEnvelope.set({activeProvider:i.activeProvider,detected:i.detected,source:i.source,selectable:i.selectable});let n=i.switch.dropped;if(n===null)this.activeProviderSwitchAnnouncement.set(this.texts.project.activeProviderSwitchedNoDb);else{let c=this.texts.project;this.activeProviderSwitchAnnouncement.set(`${c.activeProviderSwitchedPrefix} ${n.tableCount} ${c.activeProviderSwitchedSuffix}`)}}catch(i){this.activeProviderSaveError.set(ee(i))}}confirmActiveProviderSwitch(e,i){this.confirmation.confirm({header:this.texts.project.activeProviderConfirmHeader,message:this.texts.project.activeProviderConfirmIntro,acceptLabel:this.texts.project.activeProviderConfirmAccept,rejectLabel:this.texts.project.activeProviderConfirmReject,acceptButtonProps:{severity:"primary"},rejectButtonProps:{severity:"secondary"},accept:()=>{i()},reject:()=>{let n=this.activeProviderEnvelope();n&&this.activeProviderEnvelope.set(H({},n))}})}async runPatch(e,i){if(this.pending().has(e))return!1;let n=new Set(this.pending());n.add(e),this.pending.set(n),this.saveError.set(null);let c=!1;try{let g=await this.dataSource.setProjectPreferences(i);this.preferences.set(g),c=!0}catch(g){if(g instanceof U&&g.code==="confirm-required"){let S=g.paths??[];this.confirmDialog(S,async()=>{try{let V=await this.dataSource.setProjectPreferences(Y(H({},i),{confirm:!0}));this.preferences.set(V),this.newReferencePath.set("")}catch(V){this.saveError.set(ee(V))}})}else this.saveError.set(ee(g))}finally{let g=new Set(this.pending());g.delete(e),this.pending.set(g)}return c}async runIgnorePatch(e){let i="ignore.patterns";if(this.pending().has(i))return!1;let n=new Set(this.pending());n.add(i),this.pending.set(n),this.ignoreSaveError.set(null);let c=!1;try{let g=await this.dataSource.setProjectIgnore(e);this.ignoreEnvelope.set(g),c=!0}catch(g){this.ignoreSaveError.set(ee(g))}finally{let g=new Set(this.pending());g.delete(i),this.pending.set(g)}return c}confirmDialog(e,i){this.confirmation.confirm({header:k.project.confirmDialogHeader,message:k.project.confirmDialogIntro+`
122
+ `+e.map(n=>`\u2022 ${n}`).join(`
123
+ `),acceptLabel:k.project.confirmDialogAccept,rejectLabel:k.project.confirmDialogReject,acceptButtonProps:{severity:"primary"},rejectButtonProps:{severity:"secondary"},accept:()=>{i()}})}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=z({type:t,selectors:[["sm-settings-project"]],inputs:{visible:[1,"visible"]},features:[ie([oe])],decls:58,vars:38,consts:[["data-testid","settings-project",1,"settings-project"],["id","settings-project-heading",1,"settings-project__title"],[1,"settings-project__intro"],[1,"settings-project__intro-path"],["severity","error","data-testid","settings-project-active-provider-load-error",3,"closable"],["severity","error","data-testid","settings-project-active-provider-save-error",3,"closable"],["severity","info","data-testid","settings-project-active-provider-switch-announce",3,"closable"],["data-testid","settings-project-active-provider-row",1,"settings-project__list-row"],[1,"settings-project__row-text"],[1,"settings-project__row-label"],[1,"settings-project__row-description"],[1,"settings-project__row-meta"],[1,"settings-project__meta-line"],[1,"settings-project__add-row"],["optionLabel","label","optionValue","id","optionDisabled","disabled","appendTo","body","data-testid","settings-project-active-provider-select",1,"settings-project__provider-select",3,"ngModelChange","options","ngModel"],["severity","error","data-testid","settings-project-load-error",3,"closable"],["severity","error","data-testid","settings-project-save-error",3,"closable"],["data-testid","settings-project-reference-paths-row",1,"settings-project__list-row"],["role","list",1,"settings-project__path-list"],[1,"settings-project__path-item"],["type","text","pInputText","","data-testid","settings-project-reference-paths-input",3,"ngModelChange","keydown.enter","ngModel","placeholder","disabled"],["severity","primary","size","small","data-testid","settings-project-reference-paths-add",3,"onClick","label","disabled"],["severity","error","data-testid","settings-project-ignore-load-error",3,"closable"],["severity","error","data-testid","settings-project-ignore-save-error",3,"closable"],["data-testid","settings-project-ignore-patterns-row",1,"settings-project__list-row"],["type","text","pInputText","","data-testid","settings-project-ignore-patterns-input",3,"ngModelChange","keydown.enter","ngModel","placeholder","disabled"],["severity","primary","size","small","data-testid","settings-project-ignore-patterns-add",3,"onClick","label","disabled"],[1,"settings-project__path-text"],["severity","secondary","size","small",3,"onClick","label","outlined","disabled"]],template:function(i,n){if(i&1&&(a(0,"section",0)(1,"h2",1),l(2),s(),a(3,"p",2),l(4),a(5,"code",3),l(6),s(),l(7),s(),m(8,Ki,2,3,"p-message",4),m(9,qi,2,3,"p-message",5),m(10,Wi,2,2,"p-message",6),a(11,"div",7)(12,"div",8)(13,"div",9),l(14),s(),a(15,"div",10),l(16),s(),a(17,"div",11),m(18,Xi,2,1,"span",12)(19,Qi,2,1,"span",12),m(20,Ji,1,1),s()(),a(21,"div",13)(22,"p-select",14),w("ngModelChange",function(g){return n.onActiveProviderChange(g)}),s()()(),m(23,Zi,2,3,"p-message",15),m(24,eo,2,3,"p-message",16),a(25,"div",17)(26,"div",8)(27,"div",9),l(28),s(),a(29,"div",10),l(30),s()(),a(31,"ul",18),j(32,to,4,5,"li",19,q),s(),a(34,"div",13)(35,"input",20),w("ngModelChange",function(g){return n.newReferencePath.set(g)})("keydown.enter",function(){return n.onReferencePathAdd()}),s(),a(36,"p-button",21),w("onClick",function(){return n.onReferencePathAdd()}),s()()(),m(37,no,2,3,"p-message",22),m(38,io,2,3,"p-message",23),a(39,"div",24)(40,"div",8)(41,"div",9),l(42),s(),a(43,"div",10),l(44),a(45,"code",3),l(46),s(),l(47),a(48,"code",3),l(49),s(),l(50),s()(),a(51,"ul",18),j(52,oo,4,5,"li",19,q),s(),a(54,"div",13)(55,"input",25),w("ngModelChange",function(g){return n.newIgnorePattern.set(g)})("keydown.enter",function(){return n.onIgnorePatternAdd()}),s(),a(56,"p-button",26),w("onClick",function(){return n.onIgnorePatternAdd()}),s()()(),T(57,"p-confirmdialog"),s()),i&2){let c,g,S,V,te,ue,me,fe,be;b("aria-labelledby","settings-project-heading"),o(2),u(" ",n.texts.project.heading," "),o(2),u(" ",n.texts.project.introPrefix," "),o(2),p(n.texts.project.introPath),o(),u("",n.texts.project.introSuffix," "),o(),h((c=n.activeProviderLoadError())?8:-1,c),o(),h((g=n.activeProviderSaveError())?9:-1,g),o(),h((S=n.activeProviderSwitchAnnouncement())?10:-1,S),o(4),p(n.texts.project.activeProviderLabel),o(2),u(" ",n.texts.project.activeProviderDescription," "),o(2),h((V=n.activeProviderSource())==="autodetect"?18:V==="none"?19:-1),o(2),h((te=n.activeProviderDetectedLabel())?20:-1,te),o(2),f("options",n.providerOptions())("ngModel",n.activeProviderValue()),o(),h((ue=n.loadError())?23:-1,ue),o(),h((me=n.saveError())?24:-1,me),o(4),p(n.texts.project.referencePathsLabel),o(2),u(" ",n.texts.project.referencePathsDescription," "),o(2),D(n.referencePaths()),o(3),f("ngModel",n.newReferencePath())("placeholder",n.texts.project.referencePathsPlaceholder)("disabled",n.isPending("scan.referencePaths")),b("aria-label",n.texts.project.referencePathsInputAriaLabel),o(),f("label",n.texts.project.addPathLabel)("disabled",n.isPending("scan.referencePaths")||n.newReferencePath().trim().length===0),o(),h((fe=n.ignoreLoadError())?37:-1,fe),o(),h((be=n.ignoreSaveError())?38:-1,be),o(4),p(n.texts.project.ignorePatternsLabel),o(2),u(" ",n.texts.project.ignorePatternsDescriptionPrefix," "),o(2),p(n.texts.project.ignorePatternsDescriptionFile),o(),u(" ",n.texts.project.ignorePatternsDescriptionMiddle," "),o(2),p(n.texts.project.ignorePatternsDescriptionGitignore),o(),u(" ",n.texts.project.ignorePatternsDescriptionSuffix," "),o(2),D(n.ignorePatterns()),o(3),f("ngModel",n.newIgnorePattern())("placeholder",n.texts.project.ignorePatternsPlaceholder)("disabled",n.isPending("ignore.patterns")),b("aria-label",n.texts.project.ignorePatternsInputAriaLabel),o(),f("label",n.texts.project.addIgnorePatternLabel)("disabled",n.isPending("ignore.patterns")||n.newIgnorePattern().trim().length===0)}},dependencies:[ae,Ee,re,se,le,Oe,Fe,Ie,Te,Me,de,ce,Pt,St],styles:["[_nghost-%COMP%]{display:block;height:100%;overflow-y:auto;padding:1.25rem 1.5rem}.settings-project__title[_ngcontent-%COMP%]{margin:0 0 .25rem;font-size:1.05rem;font-weight:600;color:var(--p-text-color)}.settings-project__intro[_ngcontent-%COMP%]{margin:0 0 1.25rem;font-size:.85rem;color:var(--sm-text-muted);line-height:1.5}.settings-project__intro-path[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.8rem;padding:.05rem .3rem;border-radius:var(--sm-radius-md);background:var(--p-content-background);border:1px solid var(--p-content-border-color)}[_nghost-%COMP%] p-message[_ngcontent-%COMP%]{display:block;margin-bottom:1rem}.settings-project__row[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.85rem 1rem;border:1px solid var(--p-content-border-color);border-radius:var(--sm-radius-lg);background:var(--p-content-background);margin-bottom:1rem}.settings-project__row[_ngcontent-%COMP%] > p-toggleswitch[_ngcontent-%COMP%]{flex:0 0 auto;align-self:center}.settings-project__list-row[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.75rem;padding:.85rem 1rem;border:1px solid var(--p-content-border-color);border-radius:var(--sm-radius-lg);background:var(--p-content-background);margin-bottom:1rem}.settings-project__row-text[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.25rem;flex:1 1 auto;min-width:0}.settings-project__row-label[_ngcontent-%COMP%]{font-size:.9rem;font-weight:600;color:var(--p-text-color)}.settings-project__row-description[_ngcontent-%COMP%]{font-size:.8rem;color:var(--sm-text-muted);line-height:1.45}.settings-project__path-list[_ngcontent-%COMP%]{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.4rem}.settings-project__path-item[_ngcontent-%COMP%]{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.4rem .6rem;border-radius:var(--sm-radius-md);background:var(--p-content-hover-background)}.settings-project__path-text[_ngcontent-%COMP%]{font-family:var(--sm-font-mono);font-size:.8rem;word-break:break-all;flex:1 1 auto}.settings-project__add-row[_ngcontent-%COMP%]{display:flex;gap:.5rem;align-items:center}.settings-project__add-row[_ngcontent-%COMP%] input[_ngcontent-%COMP%]{flex:1 1 auto;font-family:var(--sm-font-mono);font-size:.8rem}.settings-project__row-meta[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:.15rem;font-size:.75rem;color:var(--p-text-muted-color)}.settings-project__meta-line[_ngcontent-%COMP%]{line-height:1.3}.settings-project__provider-select[_ngcontent-%COMP%]{flex:1 1 auto}.settings-project__provider-select[_ngcontent-%COMP%] .p-select[_ngcontent-%COMP%]{width:100%}"],changeDetection:0})}return t})();function ee(t){return t instanceof U||t instanceof Error?t.message:String(t)}var so=(t,r)=>r.id;function ao(t,r){if(t&1){let e=L();a(0,"li")(1,"button",6),w("click",function(){let n=P(e).$implicit,c=d();return E(c.selectSection(n.id))}),a(2,"span",7),l(3),s()()()}if(t&2){let e=r.$implicit,i=d();o(),G("is-active",i.activeSection()===e.id),b("aria-current",i.activeSection()===e.id?"page":null)("data-testid","settings-nav-"+e.id),o(2),p(e.label)}}function lo(t,r){if(t&1){let e=L();a(0,"sm-settings-plugins",8),w("applied",function(){P(e);let n=d();return E(n.onPluginsApplied())}),s()}if(t&2){let e=d();f("visible",e.pluginsVisible())}}function co(t,r){if(t&1&&T(0,"sm-settings-general",5),t&2){let e=d();f("visible",e.generalVisible())}}function go(t,r){if(t&1&&T(0,"sm-settings-project",5),t&2){let e=d();f("visible",e.projectVisible())}}function po(t,r){if(t&1&&T(0,"sm-settings-about",5),t&2){let e=d();f("visible",e.aboutVisible())}}function uo(t,r){t&1&&T(0,"sm-settings-changelog")}var mo=[{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}],$s=(()=>{class t{visible=$.required();visibleChange=ye();confirmation=y(oe);buffer=y(De);texts=k;sections=mo;activeSection=_("plugins");pluginsVisible=v(()=>this.visible()&&this.activeSection()==="plugins");generalVisible=v(()=>this.visible()&&this.activeSection()==="general");projectVisible=v(()=>this.visible()&&this.activeSection()==="project");aboutVisible=v(()=>this.visible()&&this.activeSection()==="about");onVisibleChange(e){if(e){this.visibleChange.emit(!0);return}let i=this.buffer.dirtyCount();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:()=>{this.buffer.applyChanges()},reject:()=>{this.buffer.discardChanges(),this.visibleChange.emit(!1)}})}selectSection(e){this.activeSection.set(e)}onPluginsApplied(){this.visibleChange.emit(!1)}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=z({type:t,selectors:[["sm-settings-modal"]],inputs:{visible:[1,"visible"]},outputs:{visibleChange:"visibleChange"},features:[ie([oe])],decls:13,vars:10,consts:[["styleClass","settings-modal__dialog","contentStyleClass","settings-modal__content","data-testid","settings-modal",3,"visibleChange","visible","modal","draggable","resizable","closable","closeOnEscape","dismissableMask","header"],[1,"settings-modal__layout"],["data-testid","settings-modal-sidebar",1,"settings-modal__sidebar"],["role","list",1,"settings-modal__sidebar-list"],["data-testid","settings-modal-main",1,"settings-modal__main"],[3,"visible"],["type","button",1,"settings-modal__sidebar-item",3,"click"],[1,"settings-modal__sidebar-label"],[3,"applied","visible"]],template:function(i,n){if(i&1&&(a(0,"p-dialog",0),w("visibleChange",function(g){return n.onVisibleChange(g)}),a(1,"div",1)(2,"nav",2)(3,"ul",3),j(4,ao,4,5,"li",null,so),s()(),a(6,"div",4),m(7,lo,1,1,"sm-settings-plugins",5)(8,co,1,1,"sm-settings-general",5)(9,go,1,1,"sm-settings-project",5)(10,po,1,1,"sm-settings-about",5)(11,uo,1,0,"sm-settings-changelog"),s()(),T(12,"p-confirmdialog"),s()),i&2){let c;f("visible",n.visible())("modal",!0)("draggable",!1)("resizable",!1)("closable",!0)("closeOnEscape",!0)("dismissableMask",!0)("header",n.texts.modalTitle),o(2),b("aria-label",n.texts.modalTitle),o(2),D(n.sections),o(3),h((c=n.activeSection())==="plugins"?7:c==="general"?8:c==="project"?9:c==="about"?10:c==="changelog"?11:-1)}},dependencies:[le,Fe,Ie,Ft,It,Vt,$t,Qt,vn,xn],styles:["[_nghost-%COMP%]{display:contents;--p-message-error-color: #fca5a5;--p-message-error-background: color-mix(in srgb, #ef4444 14%, transparent);--p-message-error-border-color: color-mix(in srgb, #ef4444 45%, transparent)}[_nghost-%COMP%] .settings-modal__dialog{width:1024px;height:720px;max-width:92vw;max-height:90vh}[_nghost-%COMP%] .settings-modal__content{padding:0;height:100%;display:flex;flex-direction:column;overflow:hidden}.settings-modal__layout[_ngcontent-%COMP%]{flex:1;display:grid;grid-template-columns:200px 1fr;min-height:0}.settings-modal__sidebar[_ngcontent-%COMP%]{border-right:1px solid var(--p-content-border-color);background:var(--p-content-background);padding:.5rem;overflow-y:auto}.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})}return t})();export{$s as SettingsModal};
@@ -33,8 +33,8 @@
33
33
  preconnect handshake on first paint. Applied via `html.app-matrix`
34
34
  in `themes/matrix.css`.
35
35
  -->
36
- <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-xl:.65rem;--sm-radius-pill:999px;--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}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)}:root{--sm-bg-page:#f8fafc;--sm-bg-content:#ffffff;--sm-bg-hover:#f1f5f9;--sm-border:#e2e8f0;--sm-nav-active-bg:#eff6ff;--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-edge-neutral:#6b7280;--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-hl-comment:#6e7781;--sm-hl-keyword:#cf222e;--sm-hl-string:#0a3069;--sm-hl-number:#0550ae;--sm-hl-title:#8250df;--sm-hl-attr:#0550ae;--sm-hl-built-in:#953800;--sm-hl-meta:#6e7781;--sm-hl-addition:#116329;--sm-hl-deletion:#82071e;--sm-accent-fg:#ffffff;--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);--sm-shadow-panel:0 4px 24px rgba(0, 0, 0, .12)}</style><link rel="stylesheet" href="styles-QBTVKEVX.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-QBTVKEVX.css"></noscript></head>
36
+ <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-xl:.65rem;--sm-radius-pill:999px;--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}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)}:root{--sm-bg-page:#f8fafc;--sm-bg-content:#ffffff;--sm-bg-hover:#f1f5f9;--sm-border:#e2e8f0;--sm-nav-active-bg:#eff6ff;--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-edge-neutral:#6b7280;--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-hl-comment:#6e7781;--sm-hl-keyword:#cf222e;--sm-hl-string:#0a3069;--sm-hl-number:#0550ae;--sm-hl-title:#8250df;--sm-hl-attr:#0550ae;--sm-hl-built-in:#953800;--sm-hl-meta:#6e7781;--sm-hl-addition:#116329;--sm-hl-deletion:#82071e;--sm-accent-fg:#ffffff;--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);--sm-shadow-panel:0 4px 24px rgba(0, 0, 0, .12)}</style><link rel="stylesheet" href="styles-Q4NCOJQY.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-Q4NCOJQY.css"></noscript></head>
37
37
  <body>
38
38
  <sm-root></sm-root>
39
- <link rel="modulepreload" href="chunk-CAJ7ZI44.js"><link rel="modulepreload" href="chunk-E2XO4JVD.js"><link rel="modulepreload" href="chunk-6B5EAHIM.js"><link rel="modulepreload" href="chunk-4SG4352Z.js"><link rel="modulepreload" href="chunk-AEA5GIA7.js"><link rel="modulepreload" href="chunk-WMGW2UAL.js"><link rel="modulepreload" href="chunk-VJ57LHDR.js"><link rel="modulepreload" href="chunk-WCABR6TI.js"><script src="main-2DWVSRRX.js" type="module"></script></body>
39
+ <link rel="modulepreload" href="chunk-EQ72PEHT.js"><link rel="modulepreload" href="chunk-L4NIF75A.js"><link rel="modulepreload" href="chunk-UBQUCSQ4.js"><link rel="modulepreload" href="chunk-OFDQMBSJ.js"><link rel="modulepreload" href="chunk-P2DAPRK7.js"><link rel="modulepreload" href="chunk-GBKHMJ4B.js"><link rel="modulepreload" href="chunk-LCOYSPKE.js"><link rel="modulepreload" href="chunk-4SG4352Z.js"><link rel="modulepreload" href="chunk-Q2A6FWC7.js"><link rel="modulepreload" href="chunk-WCABR6TI.js"><script src="main-OYITFJ7B.js" type="module"></script></body>
40
40
  </html>