@zuzuucodes/cli 1.4.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/zuzuu.mjs +20 -4
- package/package.json +1 -1
- package/web-app/dist/auth.js +91 -0
- package/web-app/dist/server.js +16 -79
- package/web-app/dist/zuzuu-cli.js +124 -0
- package/web-app/dist/{zuzuu-api.js → zuzuu-routes.js} +158 -133
- package/web-app/web-dist/assets/CommandPalette-DhBdR7X3.js +45 -0
- package/web-app/web-dist/assets/DiffTab-CqxwSjI2.js +1 -0
- package/web-app/web-dist/assets/EditorPane-94QPFR9R.js +41 -0
- package/web-app/web-dist/assets/MonacoFile-D76epTrG.js +1 -0
- package/web-app/web-dist/assets/angular-html-BVBpGdXr.js +1 -0
- package/web-app/web-dist/assets/{angular-ts-CD_OonCa.js → angular-ts-BfdufMKP.js} +1 -1
- package/web-app/web-dist/assets/{apl-uOGC3x4e.js → apl-DWBSSoBH.js} +1 -1
- package/web-app/web-dist/assets/{astro-B6ybQmWG.js → astro-3LtMP0Sq.js} +1 -1
- package/web-app/web-dist/assets/{blade-B1QGRlVx.js → blade-llJRbbtR.js} +1 -1
- package/web-app/web-dist/assets/c-Wt1voDr2.js +1 -0
- package/web-app/web-dist/assets/{cobol-BgqgtYWn.js → cobol-x_HIyl2P.js} +1 -1
- package/web-app/web-dist/assets/{coffee-0wIRKYlr.js → coffee-CThvmt4R.js} +1 -1
- package/web-app/web-dist/assets/cpp-NtAeskI3.js +1 -0
- package/web-app/web-dist/assets/{crystal-CyTK3qFN.js → crystal-DNu_sX0G.js} +1 -1
- package/web-app/web-dist/assets/css-DJp_X0uY.js +1 -0
- package/web-app/web-dist/assets/{cssMode-B9jnrWOz.js → cssMode-ByQBaInt.js} +1 -1
- package/web-app/web-dist/assets/dist-DQqjtuhV.js +153 -0
- package/web-app/web-dist/assets/{edge-CvML9pwC.js → edge-ozw5tpLl.js} +1 -1
- package/web-app/web-dist/assets/{editor.api2-BmGoRSl4.js → editor.api2-C7skgoRB.js} +1 -1
- package/web-app/web-dist/assets/{elixir-CrjqTiSc.js → elixir-VhA6FeZt.js} +1 -1
- package/web-app/web-dist/assets/{elm-C4JtJ0Au.js → elm-dREJmIFz.js} +1 -1
- package/web-app/web-dist/assets/{erb-Cmeb-29V.js → erb-CIg6G69l.js} +1 -1
- package/web-app/web-dist/assets/{freemarker2-B5LAi19B.js → freemarker2-CBBwP9JV.js} +1 -1
- package/web-app/web-dist/assets/{git-rebase-CXqdToiP.js → git-rebase-B44mJPta.js} +1 -1
- package/web-app/web-dist/assets/{glimmer-js-Kq-kdTyV.js → glimmer-js-vH_gHG0-.js} +1 -1
- package/web-app/web-dist/assets/{glimmer-ts-D0RKLJNf.js → glimmer-ts--abOzSAQ.js} +1 -1
- package/web-app/web-dist/assets/glsl-Dv5r7kPw.js +1 -0
- package/web-app/web-dist/assets/graphql-CB4jsw2E.js +1 -0
- package/web-app/web-dist/assets/{hack-trjVF3Po.js → hack-DvEYX148.js} +1 -1
- package/web-app/web-dist/assets/haml-zE6W3STP.js +1 -0
- package/web-app/web-dist/assets/{handlebars-B8_x7Zx7.js → handlebars-CzBR2SDs.js} +1 -1
- package/web-app/web-dist/assets/{handlebars-g7ZhGhI_.js → handlebars-tXdfxEd6.js} +1 -1
- package/web-app/web-dist/assets/html-C8UlPnhE.js +1 -0
- package/web-app/web-dist/assets/{html-CfvRMgoC.js → html-DgPn1QYH.js} +1 -1
- package/web-app/web-dist/assets/{html-derivative-BYX_F_XH.js → html-derivative-CY6NRz-J.js} +1 -1
- package/web-app/web-dist/assets/{htmlMode-Bi8vSvwb.js → htmlMode-BtdIDgA2.js} +1 -1
- package/web-app/web-dist/assets/{http-BIVDpHT-.js → http-Cyd7bS_S.js} +1 -1
- package/web-app/web-dist/assets/{hurl-CFsshMju.js → hurl-CWPsiEpf.js} +1 -1
- package/web-app/web-dist/assets/index-B27_WOhS.css +2 -0
- package/web-app/web-dist/assets/index-De6DWTZM.js +7 -0
- package/web-app/web-dist/assets/java-CGc3VwQr.js +1 -0
- package/web-app/web-dist/assets/{javascript-Bxx2wV4w.js → javascript-5m05n-Be.js} +1 -1
- package/web-app/web-dist/assets/javascript-CUt1pgmJ.js +1 -0
- package/web-app/web-dist/assets/{jinja-_ZS5zWwe.js → jinja-CD-Z-FLd.js} +1 -1
- package/web-app/web-dist/assets/{jison-D8mMEpcs.js → jison-imPNup1l.js} +1 -1
- package/web-app/web-dist/assets/json-Bg9ijW3F.js +1 -0
- package/web-app/web-dist/assets/{jsonMode-C6ELX5GM.js → jsonMode-BG32YnTY.js} +1 -1
- package/web-app/web-dist/assets/jsx-CY6oMTks.js +1 -0
- package/web-app/web-dist/assets/{julia-D4h2DZrs.js → julia-Dc3O-irA.js} +1 -1
- package/web-app/web-dist/assets/{just-bMqQi3xg.js → just-BhOq_Kbv.js} +1 -1
- package/web-app/web-dist/assets/{latex-DThYi3CX.js → latex-Cu4Y1d5w.js} +1 -1
- package/web-app/web-dist/assets/lib-KIOQTlcs.js +1 -0
- package/web-app/web-dist/assets/{liquid-CUjzzP4r.js → liquid-3ZnQzTbs.js} +1 -1
- package/web-app/web-dist/assets/{liquid-CesB-zzl.js → liquid-CvXMrjlQ.js} +1 -1
- package/web-app/web-dist/assets/{lspLanguageFeatures-gTnJsses.js → lspLanguageFeatures-6KXALSrl.js} +1 -1
- package/web-app/web-dist/assets/lua-BjLEUjKY.js +1 -0
- package/web-app/web-dist/assets/{marko-yoGoLK2m.js → marko-DvhNOisQ.js} +1 -1
- package/web-app/web-dist/assets/{mdc-BvtXU6eH.js → mdc-Bm9TpL1X.js} +1 -1
- package/web-app/web-dist/assets/{mdx-DrXGQbNB.js → mdx-DffTEkNE.js} +1 -1
- package/web-app/web-dist/assets/{monaco-setup-CsR6EfHe.js → monaco-setup-DM3A5_VI.js} +3 -3
- package/web-app/web-dist/assets/{nginx-DoUz032F.js → nginx-Bhc82uuv.js} +1 -1
- package/web-app/web-dist/assets/{nim-B0Pl8B4R.js → nim-DXTVBFnF.js} +1 -1
- package/web-app/web-dist/assets/{perl-D2tfAALb.js → perl-C7veXV9z.js} +1 -1
- package/web-app/web-dist/assets/{php-BImCcX5X.js → php-BRiuMnnr.js} +1 -1
- package/web-app/web-dist/assets/{pug-BcnpC8P_.js → pug-C5hz5LQ7.js} +1 -1
- package/web-app/web-dist/assets/{python-ypRCBnvu.js → python-DyLAD3Wt.js} +1 -1
- package/web-app/web-dist/assets/{qml-DFDAunHY.js → qml-BdUV3aTS.js} +1 -1
- package/web-app/web-dist/assets/r-8R7vtdQc.js +1 -0
- package/web-app/web-dist/assets/{razor-aqrhpwqZ.js → razor-C49xQTPQ.js} +1 -1
- package/web-app/web-dist/assets/{razor-1_376SZM.js → razor-DRL52XO2.js} +1 -1
- package/web-app/web-dist/assets/react-vendor-CCIEwYL0.js +9 -0
- package/web-app/web-dist/assets/regexp-Omp9DhTb.js +1 -0
- package/web-app/web-dist/assets/{rst-2vG6f11Y.js → rst-BHX71KW9.js} +1 -1
- package/web-app/web-dist/assets/{ruby-Dj6bCFXR.js → ruby-B--HzjGU.js} +1 -1
- package/web-app/web-dist/assets/{sas-BhVZ4qL2.js → sas-DrLaYOK_.js} +1 -1
- package/web-app/web-dist/assets/scss-DdSxiZKl.js +1 -0
- package/web-app/web-dist/assets/shellscript-DwcUjJBL.js +1 -0
- package/web-app/web-dist/assets/{shellsession-CyO2fnhB.js → shellsession-CPZkydE6.js} +1 -1
- package/web-app/web-dist/assets/{soy-DIkw6E88.js → soy-Br5FhD7c.js} +1 -1
- package/web-app/web-dist/assets/sql-DNssxck8.js +1 -0
- package/web-app/web-dist/assets/{stata-DvkM932O.js → stata-DXn1tqOr.js} +1 -1
- package/web-app/web-dist/assets/{surrealql-B4-Q8tqV.js → surrealql-IeLNQw0f.js} +1 -1
- package/web-app/web-dist/assets/{svelte-p6yBy-Ki.js → svelte-DOdLCIlh.js} +1 -1
- package/web-app/web-dist/assets/{templ-C7EkuiZr.js → templ-CIwIngms.js} +1 -1
- package/web-app/web-dist/assets/{tex-DkmD8uFC.js → tex-D8QMumu5.js} +1 -1
- package/web-app/web-dist/assets/{ts-tags-U-hncHg4.js → ts-tags-BMVY4q-l.js} +1 -1
- package/web-app/web-dist/assets/{tsMode-a8OvovQd.js → tsMode-BndVBac5.js} +1 -1
- package/web-app/web-dist/assets/tsx-5Eka4NBX.js +1 -0
- package/web-app/web-dist/assets/{twig-CU0OP-IA.js → twig-C8o_5mgw.js} +1 -1
- package/web-app/web-dist/assets/{typescript-DnLjiKtn.js → typescript-B1w9vqKF.js} +1 -1
- package/web-app/web-dist/assets/typescript-DOu2WMV5.js +1 -0
- package/web-app/web-dist/assets/{vue-Db7nY3ba.js → vue-BU18DNDL.js} +1 -1
- package/web-app/web-dist/assets/{vue-html-BvAbiAw1.js → vue-html-BeluIYX0.js} +1 -1
- package/web-app/web-dist/assets/{vue-vine-BEaIQIlA.js → vue-vine-DGUAbOCX.js} +1 -1
- package/web-app/web-dist/assets/{xml-an4Nuuqq.js → xml-D8uAlVv5.js} +1 -1
- package/web-app/web-dist/assets/xml-DIqSwXR3.js +1 -0
- package/web-app/web-dist/assets/{xsl-D3NQgH22.js → xsl-Ct_-YIAy.js} +1 -1
- package/web-app/web-dist/assets/xterm-B1ffpRuj.js +36 -0
- package/web-app/web-dist/assets/xterm-addons-psDEiUMC.js +136 -0
- package/web-app/web-dist/assets/{yaml-Diiu6O9P.js → yaml-Bb7jXyQv.js} +1 -1
- package/web-app/web-dist/assets/yaml-DTtCYNlS.js +1 -0
- package/web-app/web-dist/index.html +6 -3
- package/zuzuu/actions/convert.mjs +10 -9
- package/zuzuu/actions/dispatch.mjs +12 -7
- package/zuzuu/actions/inbox.mjs +5 -5
- package/zuzuu/actions/manifest.mjs +48 -30
- package/zuzuu/actions/schema.mjs +9 -3
- package/zuzuu/actions/trail.mjs +1 -1
- package/zuzuu/commands/act-author.mjs +23 -13
- package/zuzuu/commands/act.mjs +4 -6
- package/zuzuu/commands/capture.mjs +2 -2
- package/zuzuu/commands/code.mjs +2 -2
- package/zuzuu/commands/digest.mjs +2 -2
- package/zuzuu/commands/distill.mjs +15 -16
- package/zuzuu/commands/doctor.mjs +41 -19
- package/zuzuu/commands/enable.mjs +1 -1
- package/zuzuu/commands/eval.mjs +3 -36
- package/zuzuu/commands/explain.mjs +4 -4
- package/zuzuu/commands/faculty.mjs +158 -0
- package/zuzuu/commands/generation.mjs +5 -8
- package/zuzuu/commands/hook.mjs +14 -12
- package/zuzuu/commands/inbox.mjs +1 -6
- package/zuzuu/commands/init.mjs +18 -4
- package/zuzuu/commands/knowledge.mjs +1 -1
- package/zuzuu/commands/migrations/home.mjs +96 -0
- package/zuzuu/commands/migrations/index.mjs +48 -0
- package/zuzuu/commands/migrations/items.mjs +360 -0
- package/zuzuu/commands/migrations/proposals.mjs +100 -0
- package/zuzuu/commands/proposals.mjs +131 -0
- package/zuzuu/commands/review.mjs +13 -227
- package/zuzuu/commands/session.mjs +8 -2
- package/zuzuu/commands/sessions.mjs +159 -0
- package/zuzuu/commands/status.mjs +3 -3
- package/zuzuu/commands/trace.mjs +1 -1
- package/zuzuu/{capture-core.mjs → core/capture-core.mjs} +3 -3
- package/zuzuu/{store.mjs → core/store.mjs} +1 -1
- package/zuzuu/digest/compose.mjs +96 -0
- package/zuzuu/eval/score.mjs +14 -1
- package/zuzuu/faculties/actions/index.mjs +283 -0
- package/zuzuu/faculties/guardrails/index.mjs +320 -0
- package/zuzuu/faculties/instructions/index.mjs +288 -0
- package/zuzuu/faculties/knowledge/index.mjs +185 -0
- package/zuzuu/faculties/memory/index.mjs +124 -0
- package/zuzuu/faculty/envelope.mjs +290 -0
- package/zuzuu/faculty/generation/read.mjs +206 -0
- package/zuzuu/faculty/generation/write.mjs +207 -0
- package/zuzuu/faculty/items.mjs +81 -0
- package/zuzuu/faculty/module.mjs +74 -0
- package/zuzuu/faculty/pending.mjs +63 -0
- package/zuzuu/faculty/registry.mjs +204 -18
- package/zuzuu/faculty/render.mjs +59 -0
- package/zuzuu/faculty/trail.mjs +1 -1
- package/zuzuu/guardrails/engine.mjs +137 -0
- package/zuzuu/{scaffold.mjs → home/scaffold.mjs} +110 -39
- package/zuzuu/knowledge/items.mjs +56 -91
- package/zuzuu/live/install.mjs +1 -1
- package/zuzuu/live/live-store.mjs +2 -2
- package/zuzuu/live/reconcile.mjs +2 -2
- package/zuzuu/sessions/git.mjs +47 -0
- package/zuzuu/{session-git.mjs → sessions/session-git.mjs} +5 -43
- package/web-app/web-dist/assets/DiffTab-BuWonUNJ.js +0 -1
- package/web-app/web-dist/assets/MonacoFile-CL3DhFKG.js +0 -1
- package/web-app/web-dist/assets/angular-html-CmT26mqM.js +0 -1
- package/web-app/web-dist/assets/c-BvoqrSVH.js +0 -1
- package/web-app/web-dist/assets/cpp-BXsk94m0.js +0 -1
- package/web-app/web-dist/assets/css-Z8oOGxII.js +0 -1
- package/web-app/web-dist/assets/dist-ChcDQ_7s.js +0 -153
- package/web-app/web-dist/assets/glsl-KwyfU2aa.js +0 -1
- package/web-app/web-dist/assets/graphql-DSeOUAa2.js +0 -1
- package/web-app/web-dist/assets/haml-azVoxQRV.js +0 -1
- package/web-app/web-dist/assets/html-D_7P5S4m.js +0 -1
- package/web-app/web-dist/assets/index--5yy8RbA.js +0 -267
- package/web-app/web-dist/assets/index-BVG4hgk7.css +0 -2
- package/web-app/web-dist/assets/java-D4RbCvBe.js +0 -1
- package/web-app/web-dist/assets/javascript-Cb010CKM.js +0 -1
- package/web-app/web-dist/assets/json-DWgqV4D1.js +0 -1
- package/web-app/web-dist/assets/jsx-CZjSJa1f.js +0 -1
- package/web-app/web-dist/assets/lua-TGj_6NzO.js +0 -1
- package/web-app/web-dist/assets/r-fCpuAR7u.js +0 -1
- package/web-app/web-dist/assets/regexp-B4yxx-Ty.js +0 -1
- package/web-app/web-dist/assets/scss-QdjMO_xV.js +0 -1
- package/web-app/web-dist/assets/shellscript-BnlgeVVx.js +0 -1
- package/web-app/web-dist/assets/sql-DGnQv6iD.js +0 -1
- package/web-app/web-dist/assets/tsx-MJ0-9sYG.js +0 -1
- package/web-app/web-dist/assets/typescript-C17ZkDe8.js +0 -1
- package/web-app/web-dist/assets/xml-CA9lHFQV.js +0 -1
- package/web-app/web-dist/assets/yaml-CwRYMJka.js +0 -1
- package/zuzuu/actions/adapter.mjs +0 -130
- package/zuzuu/commands/migrate.mjs +0 -225
- package/zuzuu/digest.mjs +0 -149
- package/zuzuu/faculty/generation.mjs +0 -392
- package/zuzuu/guardrails/adapter.mjs +0 -134
- package/zuzuu/guardrails.mjs +0 -89
- package/zuzuu/instructions/adapter.mjs +0 -93
- package/zuzuu/knowledge/adapter.mjs +0 -99
- package/zuzuu/memory/adapter.mjs +0 -121
- package/zuzuu/miners/actions.mjs +0 -118
- package/zuzuu/miners/guardrails.mjs +0 -179
- package/zuzuu/miners/instructions.mjs +0 -157
- package/zuzuu/miners/knowledge.mjs +0 -25
- package/zuzuu/miners/memory.mjs +0 -27
- package/zuzuu/miners/registry.mjs +0 -31
- /package/web-app/web-dist/assets/{chunk-QTnfLwEv.js → rolldown-runtime-QTnfLwEv.js} +0 -0
- /package/zuzuu/{session.mjs → core/session.mjs} +0 -0
- /package/zuzuu/{inject.mjs → home/inject.mjs} +0 -0
|
@@ -1,142 +1,118 @@
|
|
|
1
1
|
// /api/zuzuu/* — observe + act routes over a project's zuzuu `.zuzuu/` home.
|
|
2
2
|
// Reads: raw data (proposals, generations, sessions, digest) comes from disk;
|
|
3
3
|
// computed views (status, inbox, eval, generation diff) shell out to
|
|
4
|
-
// `zuzuu <cmd> --json`
|
|
4
|
+
// `zuzuu <cmd> --json` (the spawn layer lives in zuzuu-cli.ts) and fall back
|
|
5
|
+
// to file-reads when the binary is absent.
|
|
5
6
|
// Writes: mutations (approve/reject, mint, rollback) are CLI-ONLY — the daemon
|
|
6
7
|
// never reimplements faculty writes; no CLI → 503. Mirrors fs-api.ts.
|
|
7
8
|
import fsp from "node:fs/promises";
|
|
8
9
|
import { existsSync } from "node:fs";
|
|
9
|
-
import { spawn, spawnSync } from "node:child_process";
|
|
10
10
|
import path from "node:path";
|
|
11
11
|
import { Hono } from "hono";
|
|
12
12
|
import { PathError, resolveSafe } from "./safe-path.js";
|
|
13
|
+
import { binAvailable, runZuzuu, runZuzuuMut } from "./zuzuu-cli.js";
|
|
13
14
|
const FACULTIES = ["knowledge", "memory", "actions", "instructions", "guardrails"];
|
|
14
15
|
/** Ids/slugs/generation-ids that may ride into a zuzuu argv. Validated BEFORE any spawn. */
|
|
15
16
|
const SAFE_ID = /^[a-z0-9][a-z0-9._-]{0,127}$/i;
|
|
16
17
|
const MAX_REASON_LEN = 500;
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
18
|
+
// ── Faculty Standard envelope listing ────────────────────────────────────
|
|
19
|
+
// The CLI is the parser of record (`zuzuu faculty items <f> --json` returns
|
|
20
|
+
// the full envelopes incl. payload/body). When it's absent we degrade to a
|
|
21
|
+
// count-only frontmatter PEEK: read the items dir, lift the tiny top-level
|
|
22
|
+
// scalar lines (title:/status:/kind:) best-effort — counts still render,
|
|
23
|
+
// detail degrades. Never a re-implementation of the envelope grammar.
|
|
24
|
+
/** Flat envelope item dirs per faculty; actions are dir-shaped (ACTION.md). */
|
|
25
|
+
const ITEM_DIRS = {
|
|
26
|
+
knowledge: ["knowledge", "items"],
|
|
27
|
+
memory: ["memory", "entries"],
|
|
28
|
+
instructions: ["instructions", "items"],
|
|
29
|
+
guardrails: ["guardrails", "items"],
|
|
30
|
+
};
|
|
31
|
+
const PEEK_KEYS = new Set(["id", "faculty", "kind", "title", "status", "created_at", "updated_at"]);
|
|
32
|
+
function unquoteScalar(s) {
|
|
33
|
+
const t = s.trim();
|
|
34
|
+
if (t.startsWith('"') && t.endsWith('"') && t.length >= 2) {
|
|
30
35
|
try {
|
|
31
|
-
|
|
36
|
+
return JSON.parse(t);
|
|
32
37
|
}
|
|
33
38
|
catch {
|
|
34
|
-
|
|
35
|
-
return;
|
|
39
|
+
return t.slice(1, -1);
|
|
36
40
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
}
|
|
41
|
+
}
|
|
42
|
+
if (t.startsWith("'") && t.endsWith("'") && t.length >= 2)
|
|
43
|
+
return t.slice(1, -1);
|
|
44
|
+
return t;
|
|
45
|
+
}
|
|
46
|
+
/** Best-effort peek at an envelope's top-level frontmatter scalars. */
|
|
47
|
+
function peekFrontmatter(text) {
|
|
48
|
+
const m = text.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
49
|
+
if (!m)
|
|
50
|
+
return {};
|
|
51
|
+
const out = {};
|
|
52
|
+
for (const raw of (m[1] ?? "").split("\n")) {
|
|
53
|
+
if (/^\s/.test(raw))
|
|
54
|
+
continue; // indented = provenance/payload children
|
|
55
|
+
const kv = raw.match(/^([A-Za-z_][\w-]*):\s*(.*)$/);
|
|
56
|
+
if (kv && PEEK_KEYS.has(kv[1]))
|
|
57
|
+
out[kv[1]] = unquoteScalar(kv[2] ?? "");
|
|
58
|
+
}
|
|
59
|
+
return out;
|
|
55
60
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const timeoutMs = opts.timeoutMs ?? 10_000;
|
|
63
|
-
return new Promise((resolve) => {
|
|
64
|
-
let out = "";
|
|
65
|
-
let err = "";
|
|
66
|
-
let done = false;
|
|
67
|
-
const finish = (v) => { if (!done) {
|
|
68
|
-
done = true;
|
|
69
|
-
resolve(v);
|
|
70
|
-
} };
|
|
71
|
-
let child;
|
|
61
|
+
/** CLI-less fallback: degraded envelope items (no payload/body) from disk. */
|
|
62
|
+
async function peekFacultyItems(agent, key) {
|
|
63
|
+
const files = [];
|
|
64
|
+
if (key === "actions") {
|
|
65
|
+
const base = path.join(agent, "actions");
|
|
66
|
+
let names = [];
|
|
72
67
|
try {
|
|
73
|
-
|
|
68
|
+
names = (await fsp.readdir(base)).sort();
|
|
74
69
|
}
|
|
75
70
|
catch {
|
|
76
|
-
|
|
77
|
-
|
|
71
|
+
return [];
|
|
72
|
+
}
|
|
73
|
+
for (const n of names) {
|
|
74
|
+
if (n === "inbox" || n === "proposals" || n === "_rolledback")
|
|
75
|
+
continue;
|
|
76
|
+
files.push({ id: n, file: path.join(base, n, "ACTION.md") });
|
|
78
77
|
}
|
|
79
|
-
const timer = setTimeout(() => {
|
|
80
|
-
try {
|
|
81
|
-
child.kill();
|
|
82
|
-
}
|
|
83
|
-
catch { /* noop */ }
|
|
84
|
-
finish({ ok: false, code: "failed", stderr: "zuzuu timed out" });
|
|
85
|
-
}, timeoutMs);
|
|
86
|
-
child.stdout?.on("data", (b) => { out += b.toString(); });
|
|
87
|
-
child.stderr?.on("data", (b) => {
|
|
88
|
-
err += b.toString();
|
|
89
|
-
if (err.length > STDERR_TAIL)
|
|
90
|
-
err = err.slice(-STDERR_TAIL);
|
|
91
|
-
});
|
|
92
|
-
child.on("error", (e) => {
|
|
93
|
-
clearTimeout(timer);
|
|
94
|
-
if (e.code === "ENOENT")
|
|
95
|
-
finish({ ok: false, code: "absent" });
|
|
96
|
-
else
|
|
97
|
-
finish({ ok: false, code: "failed", stderr: e.message });
|
|
98
|
-
});
|
|
99
|
-
child.on("close", (code) => {
|
|
100
|
-
clearTimeout(timer);
|
|
101
|
-
if (code !== 0) {
|
|
102
|
-
// zuzuu prints structured JSON even on refusals (exit 1, e.g.
|
|
103
|
-
// empty-squash-with-checkpoints) — keep it so the UI can act on reason.
|
|
104
|
-
try {
|
|
105
|
-
const parsed = JSON.parse(out);
|
|
106
|
-
return finish({ ok: false, code: "failed", stderr: err.slice(-STDERR_TAIL), data: parsed });
|
|
107
|
-
}
|
|
108
|
-
catch {
|
|
109
|
-
return finish({ ok: false, code: "failed", stderr: err.slice(-STDERR_TAIL) });
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
try {
|
|
113
|
-
finish({ ok: true, data: JSON.parse(out) });
|
|
114
|
-
}
|
|
115
|
-
catch {
|
|
116
|
-
finish({ ok: false, code: "failed", stderr: "unparseable JSON from zuzuu" });
|
|
117
|
-
}
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
}
|
|
121
|
-
/** Best-effort: is the zuzuu binary runnable? */
|
|
122
|
-
function binAvailable(binary) {
|
|
123
|
-
try {
|
|
124
|
-
const r = spawnSync(binary, ["version"], { stdio: "ignore", timeout: 3000 });
|
|
125
|
-
return !r.error && r.status === 0;
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
return false;
|
|
129
78
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
const
|
|
135
|
-
|
|
79
|
+
else {
|
|
80
|
+
const rel = ITEM_DIRS[key];
|
|
81
|
+
if (!rel)
|
|
82
|
+
return [];
|
|
83
|
+
const dir = path.join(agent, ...rel);
|
|
84
|
+
let names = [];
|
|
85
|
+
try {
|
|
86
|
+
names = (await fsp.readdir(dir)).sort();
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return [];
|
|
90
|
+
}
|
|
91
|
+
for (const n of names) {
|
|
92
|
+
if (!n.endsWith(".md") || n === "README.md")
|
|
93
|
+
continue;
|
|
94
|
+
files.push({ id: n.replace(/\.md$/, ""), file: path.join(dir, n) });
|
|
95
|
+
}
|
|
136
96
|
}
|
|
137
|
-
|
|
138
|
-
|
|
97
|
+
const items = [];
|
|
98
|
+
for (const { id, file } of files) {
|
|
99
|
+
let fm;
|
|
100
|
+
try {
|
|
101
|
+
fm = peekFrontmatter(await fsp.readFile(file, "utf8"));
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
continue;
|
|
105
|
+
}
|
|
106
|
+
items.push({ kind: "?", ...fm, id: fm.id ?? id, faculty: key, title: fm.title ?? id });
|
|
139
107
|
}
|
|
108
|
+
return items;
|
|
109
|
+
}
|
|
110
|
+
/** One faculty's envelope items: CLI first (full envelopes), peek fallback. */
|
|
111
|
+
async function facultyEnvelopeItems(root, agent, key, binary) {
|
|
112
|
+
const viaCli = await runZuzuu(root, ["faculty", "items", key], { binary });
|
|
113
|
+
if (viaCli && Array.isArray(viaCli.items))
|
|
114
|
+
return { items: viaCli.items, errors: Array.isArray(viaCli.errors) ? viaCli.errors : [], degraded: false };
|
|
115
|
+
return { items: await peekFacultyItems(agent, key), errors: [], degraded: true };
|
|
140
116
|
}
|
|
141
117
|
/** Read every *.json in a dir into objects; missing dir → [], corrupt file → skipped. */
|
|
142
118
|
async function readJsonDir(dir) {
|
|
@@ -163,14 +139,6 @@ function proposalTitle(p) {
|
|
|
163
139
|
const payload = p.payload;
|
|
164
140
|
return firstLine(cand?.body ?? payload?.body ?? p.id);
|
|
165
141
|
}
|
|
166
|
-
/** The conventional item dir for a faculty, or null (heterogeneous faculties → counted as 0 for the MVP). */
|
|
167
|
-
function itemsDirOf(agent, key) {
|
|
168
|
-
if (key === "knowledge")
|
|
169
|
-
return path.join(agent, "knowledge", "items");
|
|
170
|
-
if (key === "memory")
|
|
171
|
-
return path.join(agent, "memory", "entries");
|
|
172
|
-
return null;
|
|
173
|
-
}
|
|
174
142
|
export function createZuzuuApi(getRoot, opts = {}) {
|
|
175
143
|
const app = new Hono();
|
|
176
144
|
let root = getRoot();
|
|
@@ -188,26 +156,62 @@ export function createZuzuuApi(getRoot, opts = {}) {
|
|
|
188
156
|
});
|
|
189
157
|
app.get("/faculties", async (c) => {
|
|
190
158
|
const agent = await agentDir();
|
|
191
|
-
const faculties =
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}
|
|
159
|
+
const faculties = await Promise.all(FACULTIES.map(async (key) => {
|
|
160
|
+
const [{ items }, proposals] = await Promise.all([
|
|
161
|
+
facultyEnvelopeItems(root, agent, key, opts.binary),
|
|
162
|
+
proposalsOf(agent, key),
|
|
163
|
+
]);
|
|
164
|
+
return { key, count: items.length, pending: proposals.length };
|
|
165
|
+
}));
|
|
198
166
|
return c.json({ faculties });
|
|
199
167
|
});
|
|
168
|
+
// The batched faculty surface: ONE `zuzuu faculty overview --json` spawn
|
|
169
|
+
// covers all faculties (manifest ui descriptors + counts + top titles +
|
|
170
|
+
// pending) — replaces the 5-spawn-per-cycle /faculties pattern for the
|
|
171
|
+
// panel root. CLI absent → peek fallback (counts survive, ui descriptors
|
|
172
|
+
// degrade to the web kit's built-in metadata).
|
|
173
|
+
app.get("/overview", async (c) => {
|
|
174
|
+
const viaCli = await runZuzuu(root, ["faculty", "overview"], { binary: opts.binary });
|
|
175
|
+
if (viaCli && Array.isArray(viaCli.faculties))
|
|
176
|
+
return c.json(viaCli);
|
|
177
|
+
const agent = await agentDir();
|
|
178
|
+
const faculties = await Promise.all(FACULTIES.map(async (id) => {
|
|
179
|
+
const [items, proposals] = await Promise.all([peekFacultyItems(agent, id), proposalsOf(agent, id)]);
|
|
180
|
+
return {
|
|
181
|
+
id,
|
|
182
|
+
title: id.charAt(0).toUpperCase() + id.slice(1),
|
|
183
|
+
counts: { items: items.length, pending: proposals.length, errors: 0 },
|
|
184
|
+
top: items.slice(0, 3).map((it) => String(it.title ?? it.id)),
|
|
185
|
+
declarative: false,
|
|
186
|
+
};
|
|
187
|
+
}));
|
|
188
|
+
return c.json({ faculties, degraded: true });
|
|
189
|
+
});
|
|
200
190
|
app.get("/faculty/:key", async (c) => {
|
|
201
191
|
const key = c.req.param("key");
|
|
202
192
|
if (!FACULTIES.includes(key))
|
|
203
193
|
return c.json({ error: "unknown faculty" }, 404);
|
|
204
194
|
const agent = await agentDir();
|
|
205
|
-
const
|
|
206
|
-
const items = itemsDir
|
|
207
|
-
? (await countItemFiles(itemsDir)).names.map((n) => ({ id: n.replace(/\.(json|md)$/, ""), title: n.replace(/\.(json|md)$/, "") }))
|
|
208
|
-
: [];
|
|
195
|
+
const { items, errors, degraded } = await facultyEnvelopeItems(root, agent, key, opts.binary);
|
|
209
196
|
const proposals = (await proposalsOf(agent, key)).map((p) => ({ id: String(p.id ?? "?"), faculty: key, title: proposalTitle(p) }));
|
|
210
|
-
return c.json({ key, items, proposals });
|
|
197
|
+
return c.json({ key, items, proposals, errors, ...(degraded ? { degraded: true } : {}) });
|
|
198
|
+
});
|
|
199
|
+
app.get("/faculty/:key/schema", async (c) => {
|
|
200
|
+
const key = c.req.param("key");
|
|
201
|
+
if (!FACULTIES.includes(key))
|
|
202
|
+
return c.json({ error: "unknown faculty" }, 404);
|
|
203
|
+
const viaCli = await runZuzuu(root, ["faculty", "schema", key], { binary: opts.binary });
|
|
204
|
+
if (viaCli)
|
|
205
|
+
return c.json({ key, schema: viaCli, source: "cli" });
|
|
206
|
+
// CLI absent → the seeded payload schema in the home (zuzuu init writes it)
|
|
207
|
+
const agent = await agentDir();
|
|
208
|
+
try {
|
|
209
|
+
const schema = JSON.parse(await fsp.readFile(path.join(agent, key, "schema.json"), "utf8"));
|
|
210
|
+
return c.json({ key, schema, source: "home" });
|
|
211
|
+
}
|
|
212
|
+
catch {
|
|
213
|
+
return c.json({ key, schema: null, source: "absent" });
|
|
214
|
+
}
|
|
211
215
|
});
|
|
212
216
|
app.get("/generations", async (c) => {
|
|
213
217
|
const agent = await agentDir();
|
|
@@ -225,7 +229,13 @@ export function createZuzuuApi(getRoot, opts = {}) {
|
|
|
225
229
|
generations: gens.map((g) => ({ id: String(g.id), mintedAt: g.mintedAt ?? null, mintedFrom: g.mintedFrom ?? [] })),
|
|
226
230
|
});
|
|
227
231
|
});
|
|
232
|
+
// Sessions list: CLI-first (`zuzuu sessions --json` — state-labelled:
|
|
233
|
+
// active|completed|abandoned|crashed|captured); falls back to the raw
|
|
234
|
+
// sessions.json index (no state labels) when the CLI is absent.
|
|
228
235
|
app.get("/sessions", async (c) => {
|
|
236
|
+
const viaCli = await runZuzuu(root, ["sessions"], { binary: opts.binary });
|
|
237
|
+
if (viaCli && Array.isArray(viaCli.sessions))
|
|
238
|
+
return c.json(viaCli);
|
|
229
239
|
const agent = await agentDir();
|
|
230
240
|
try {
|
|
231
241
|
const idx = JSON.parse(await fsp.readFile(path.join(agent, "sessions.json"), "utf8"));
|
|
@@ -235,6 +245,21 @@ export function createZuzuuApi(getRoot, opts = {}) {
|
|
|
235
245
|
return c.json({ sessions: [] });
|
|
236
246
|
}
|
|
237
247
|
});
|
|
248
|
+
// One session's observability document (`zuzuu session inspect <id> --json`:
|
|
249
|
+
// trace summary + per-faculty mined signals + warnings). CLI-only — the
|
|
250
|
+
// daemon never re-mines transcripts; absent → 503, failed → 502.
|
|
251
|
+
app.get("/session-inspect/:id", async (c) => {
|
|
252
|
+
const id = c.req.param("id");
|
|
253
|
+
if (!SAFE_ID.test(id))
|
|
254
|
+
return c.json({ error: "bad id" }, 400);
|
|
255
|
+
const r = await runZuzuuMut(root, ["session", "inspect", id], { binary: opts.binary });
|
|
256
|
+
if (!r.ok) {
|
|
257
|
+
return r.code === "absent"
|
|
258
|
+
? c.json({ error: "zuzuu CLI required" }, 503)
|
|
259
|
+
: c.json({ error: "zuzuu command failed", stderr: r.stderr ?? "", data: r.data ?? null }, 502);
|
|
260
|
+
}
|
|
261
|
+
return c.json(r.data);
|
|
262
|
+
});
|
|
238
263
|
app.get("/digest", async (c) => {
|
|
239
264
|
const agent = await agentDir();
|
|
240
265
|
try {
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import{r as e}from"./rolldown-runtime-QTnfLwEv.js";import{i as t,r as n,t as r}from"./react-vendor-CCIEwYL0.js";import{c as i,f as a,g as o,h as s,i as c,m as l,p as u,t as d}from"./index-De6DWTZM.js";var f=e(t(),1),p=1,m=.9,h=.8,g=.17,_=.1,v=.999,y=.9999,b=.99,x=/[\\\/_+.#"@\[\(\{&]/,S=/[\\\/_+.#"@\[\(\{&]/g,C=/[\s-]/,w=/[\s-]/g;function T(e,t,n,r,i,a,o){if(a===t.length)return i===e.length?p:b;var s=`${i},${a}`;if(o[s]!==void 0)return o[s];for(var c=r.charAt(a),l=n.indexOf(c,i),u=0,d,f,E,D;l>=0;)d=T(e,t,n,r,l+1,a+1,o),d>u&&(l===i?d*=p:x.test(e.charAt(l-1))?(d*=h,E=e.slice(i,l-1).match(S),E&&i>0&&(d*=v**+E.length)):C.test(e.charAt(l-1))?(d*=m,D=e.slice(i,l-1).match(w),D&&i>0&&(d*=v**+D.length)):(d*=g,i>0&&(d*=v**+(l-i))),e.charAt(l)!==t.charAt(a)&&(d*=y)),(d<_&&n.charAt(l-1)===r.charAt(a+1)||r.charAt(a+1)===r.charAt(a)&&n.charAt(l-1)!==r.charAt(a))&&(f=T(e,t,n,r,l+1,a+2,o),f*_>d&&(d=f*_)),d>u&&(u=d),l=n.indexOf(c,l+1);return o[s]=u,u}function E(e){return e.toLowerCase().replace(w,` `)}function D(e,t,n){return e=n&&n.length>0?`${e+` `+n.join(` `)}`:e,T(e,t,E(e),E(t),0,0,{})}typeof window<`u`&&window.document&&window.document.createElement;function O(e,t,{checkForDefaultPrevented:n=!0}={}){return function(r){if(e?.(r),n===!1||!r.defaultPrevented)return t?.(r)}}function k(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function A(...e){return t=>{let n=!1,r=e.map(e=>{let r=k(e,t);return!n&&typeof r==`function`&&(n=!0),r});if(n)return()=>{for(let t=0;t<r.length;t++){let n=r[t];typeof n==`function`?n():k(e[t],null)}}}}function j(...e){return f.useCallback(A(...e),e)}var M=r();function ee(e,t){let n=f.createContext(t);n.displayName=e+`Context`;let r=e=>{let{children:t,...r}=e,i=f.useMemo(()=>r,Object.values(r));return(0,M.jsx)(n.Provider,{value:i,children:t})};r.displayName=e+`Provider`;function i(r){let i=f.useContext(n);if(i)return i;if(t!==void 0)return t;throw Error(`\`${r}\` must be used within \`${e}\``)}return[r,i]}function te(e,t=[]){let n=[];function r(t,r){let i=f.createContext(r);i.displayName=t+`Context`;let a=n.length;n=[...n,r];let o=t=>{let{scope:n,children:r,...o}=t,s=n?.[e]?.[a]||i,c=f.useMemo(()=>o,Object.values(o));return(0,M.jsx)(s.Provider,{value:c,children:r})};o.displayName=t+`Provider`;function s(n,o){let s=o?.[e]?.[a]||i,c=f.useContext(s);if(c)return c;if(r!==void 0)return r;throw Error(`\`${n}\` must be used within \`${t}\``)}return[o,s]}let i=()=>{let t=n.map(e=>f.createContext(e));return function(n){let r=n?.[e]||t;return f.useMemo(()=>({[`__scope${e}`]:{...n,[e]:r}}),[n,r])}};return i.scopeName=e,[r,ne(i,...t)]}function ne(...e){let t=e[0];if(e.length===1)return t;let n=()=>{let n=e.map(e=>({useScope:e(),scopeName:e.scopeName}));return function(e){let r=n.reduce((t,{useScope:n,scopeName:r})=>{let i=n(e)[`__scope${r}`];return{...t,...i}},{});return f.useMemo(()=>({[`__scope${t.scopeName}`]:r}),[r])}};return n.scopeName=t.scopeName,n}var N=globalThis?.document?f.useLayoutEffect:()=>{},re=f.useId||(()=>void 0),ie=0;function P(e){let[t,n]=f.useState(re());return N(()=>{e||n(e=>e??String(ie++))},[e]),e||(t?`radix-${t}`:``)}var ae=f.useInsertionEffect||N;function oe({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){let[i,a,o]=se({defaultProp:t,onChange:n}),s=e!==void 0,c=s?e:i;{let t=f.useRef(e!==void 0);f.useEffect(()=>{let e=t.current;e!==s&&console.warn(`${r} is changing from ${e?`controlled`:`uncontrolled`} to ${s?`controlled`:`uncontrolled`}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),t.current=s},[s,r])}return[c,f.useCallback(t=>{if(s){let n=ce(t)?t(e):t;n!==e&&o.current?.(n)}else a(t)},[s,e,a,o])]}function se({defaultProp:e,onChange:t}){let[n,r]=f.useState(e),i=f.useRef(n),a=f.useRef(t);return ae(()=>{a.current=t},[t]),f.useEffect(()=>{i.current!==n&&(a.current?.(n),i.current=n)},[n,i]),[n,r,a]}function ce(e){return typeof e==`function`}var le=e(n(),1);function ue(e){let t=f.forwardRef((t,n)=>{let{children:r,...i}=t,a=null,o=!1,s=[];_e(r)&&typeof xe==`function`&&(r=xe(r._payload)),f.Children.forEach(r,e=>{if(he(e)){o=!0;let t=e,n=`child`in t.props?t.props.child:t.props.children;_e(n)&&typeof xe==`function`&&(n=xe(n._payload)),a=fe(t,n),s.push(a?.props?.children)}else s.push(e)}),a?a=f.cloneElement(a,void 0,s):!o&&f.Children.count(r)===1&&f.isValidElement(r)&&(a=r);let c=a?me(a):void 0,l=j(n,c);if(!a){if(r||r===0)throw Error(o?be(e):ye(e));return r}let u=pe(i,a.props??{});return a.type!==f.Fragment&&(u.ref=n?l:c),f.cloneElement(a,u)});return t.displayName=`${e}.Slot`,t}var de=Symbol.for(`radix.slottable`),fe=(e,t)=>{if(`child`in e.props){let t=e.props.child;return f.isValidElement(t)?f.cloneElement(t,void 0,e.props.children(t.props.children)):null}return f.isValidElement(t)?t:null};function pe(e,t){let n={...t};for(let r in t){let i=e[r],a=t[r];/^on[A-Z]/.test(r)?i&&a?n[r]=(...e)=>{let t=a(...e);return i(...e),t}:i&&(n[r]=i):r===`style`?n[r]={...i,...a}:r===`className`&&(n[r]=[i,a].filter(Boolean).join(` `))}return{...e,...n}}function me(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function he(e){return f.isValidElement(e)&&typeof e.type==`function`&&`__radixId`in e.type&&e.type.__radixId===de}var ge=Symbol.for(`react.lazy`);function _e(e){return typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===ge&&`_payload`in e&&ve(e._payload)}function ve(e){return typeof e==`object`&&!!e&&`then`in e}var ye=e=>`${e} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,be=e=>`${e} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,xe=f.use,F=[`a`,`button`,`div`,`form`,`h2`,`h3`,`img`,`input`,`label`,`li`,`nav`,`ol`,`p`,`select`,`span`,`svg`,`ul`].reduce((e,t)=>{let n=ue(`Primitive.${t}`),r=f.forwardRef((e,r)=>{let{asChild:i,...a}=e,o=i?n:t;return typeof window<`u`&&(window[Symbol.for(`radix-ui`)]=!0),(0,M.jsx)(o,{...a,ref:r})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function Se(e,t){e&&le.flushSync(()=>e.dispatchEvent(t))}function I(e){let t=f.useRef(e);return f.useEffect(()=>{t.current=e}),f.useMemo(()=>((...e)=>t.current?.(...e)),[])}function Ce(e,t=globalThis?.document){let n=I(e);f.useEffect(()=>{let e=e=>{e.key===`Escape`&&n(e)};return t.addEventListener(`keydown`,e,{capture:!0}),()=>t.removeEventListener(`keydown`,e,{capture:!0})},[n,t])}var we=`DismissableLayer`,Te=`dismissableLayer.update`,Ee=`dismissableLayer.pointerDownOutside`,De=`dismissableLayer.focusOutside`,Oe,ke=f.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Ae=f.forwardRef((e,t)=>{let{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:i,onFocusOutside:a,onInteractOutside:o,onDismiss:s,...c}=e,l=f.useContext(ke),[u,d]=f.useState(null),p=u?.ownerDocument??globalThis?.document,[,m]=f.useState({}),h=j(t,e=>d(e)),g=Array.from(l.layers),[_]=[...l.layersWithOutsidePointerEventsDisabled].slice(-1),v=g.indexOf(_),y=u?g.indexOf(u):-1,b=l.layersWithOutsidePointerEventsDisabled.size>0,x=y>=v,S=Ne(e=>{let t=e.target,n=[...l.branches].some(e=>e.contains(t));!x||n||(i?.(e),o?.(e),e.defaultPrevented||s?.())},p),C=Pe(e=>{let t=e.target;[...l.branches].some(e=>e.contains(t))||(a?.(e),o?.(e),e.defaultPrevented||s?.())},p);return Ce(e=>{y===l.layers.size-1&&(r?.(e),!e.defaultPrevented&&s&&(e.preventDefault(),s()))},p),f.useEffect(()=>{if(u)return n&&(l.layersWithOutsidePointerEventsDisabled.size===0&&(Oe=p.body.style.pointerEvents,p.body.style.pointerEvents=`none`),l.layersWithOutsidePointerEventsDisabled.add(u)),l.layers.add(u),Fe(),()=>{n&&(l.layersWithOutsidePointerEventsDisabled.delete(u),l.layersWithOutsidePointerEventsDisabled.size===0&&(p.body.style.pointerEvents=Oe))}},[u,p,n,l]),f.useEffect(()=>()=>{u&&(l.layers.delete(u),l.layersWithOutsidePointerEventsDisabled.delete(u),Fe())},[u,l]),f.useEffect(()=>{let e=()=>m({});return document.addEventListener(Te,e),()=>document.removeEventListener(Te,e)},[]),(0,M.jsx)(F.div,{...c,ref:h,style:{pointerEvents:b?x?`auto`:`none`:void 0,...e.style},onFocusCapture:O(e.onFocusCapture,C.onFocusCapture),onBlurCapture:O(e.onBlurCapture,C.onBlurCapture),onPointerDownCapture:O(e.onPointerDownCapture,S.onPointerDownCapture)})});Ae.displayName=we;var je=`DismissableLayerBranch`,Me=f.forwardRef((e,t)=>{let n=f.useContext(ke),r=f.useRef(null),i=j(t,r);return f.useEffect(()=>{let e=r.current;if(e)return n.branches.add(e),()=>{n.branches.delete(e)}},[n.branches]),(0,M.jsx)(F.div,{...e,ref:i})});Me.displayName=je;function Ne(e,t=globalThis?.document){let n=I(e),r=f.useRef(!1),i=f.useRef(()=>{});return f.useEffect(()=>{let e=e=>{if(e.target&&!r.current){let r=function(){Ie(Ee,n,a,{discrete:!0})},a={originalEvent:e};e.pointerType===`touch`?(t.removeEventListener(`click`,i.current),i.current=r,t.addEventListener(`click`,i.current,{once:!0})):r()}else t.removeEventListener(`click`,i.current);r.current=!1},a=window.setTimeout(()=>{t.addEventListener(`pointerdown`,e)},0);return()=>{window.clearTimeout(a),t.removeEventListener(`pointerdown`,e),t.removeEventListener(`click`,i.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function Pe(e,t=globalThis?.document){let n=I(e),r=f.useRef(!1);return f.useEffect(()=>{let e=e=>{e.target&&!r.current&&Ie(De,n,{originalEvent:e},{discrete:!1})};return t.addEventListener(`focusin`,e),()=>t.removeEventListener(`focusin`,e)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Fe(){let e=new CustomEvent(Te);document.dispatchEvent(e)}function Ie(e,t,n,{discrete:r}){let i=n.originalEvent.target,a=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&i.addEventListener(e,t,{once:!0}),r?Se(i,a):i.dispatchEvent(a)}var Le=`focusScope.autoFocusOnMount`,Re=`focusScope.autoFocusOnUnmount`,ze={bubbles:!1,cancelable:!0},Be=`FocusScope`,Ve=f.forwardRef((e,t)=>{let{loop:n=!1,trapped:r=!1,onMountAutoFocus:i,onUnmountAutoFocus:a,...o}=e,[s,c]=f.useState(null),l=I(i),u=I(a),d=f.useRef(null),p=j(t,e=>c(e)),m=f.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;f.useEffect(()=>{if(r){let e=function(e){if(m.paused||!s)return;let t=e.target;s.contains(t)?d.current=t:L(d.current,{select:!0})},t=function(e){if(m.paused||!s)return;let t=e.relatedTarget;t!==null&&(s.contains(t)||L(d.current,{select:!0}))},n=function(e){if(document.activeElement===document.body)for(let t of e)t.removedNodes.length>0&&L(s)};document.addEventListener(`focusin`,e),document.addEventListener(`focusout`,t);let r=new MutationObserver(n);return s&&r.observe(s,{childList:!0,subtree:!0}),()=>{document.removeEventListener(`focusin`,e),document.removeEventListener(`focusout`,t),r.disconnect()}}},[r,s,m.paused]),f.useEffect(()=>{if(s){Je.add(m);let e=document.activeElement;if(!s.contains(e)){let t=new CustomEvent(Le,ze);s.addEventListener(Le,l),s.dispatchEvent(t),t.defaultPrevented||(He(Ze(We(s)),{select:!0}),document.activeElement===e&&L(s))}return()=>{s.removeEventListener(Le,l),setTimeout(()=>{let t=new CustomEvent(Re,ze);s.addEventListener(Re,u),s.dispatchEvent(t),t.defaultPrevented||L(e??document.body,{select:!0}),s.removeEventListener(Re,u),Je.remove(m)},0)}}},[s,l,u,m]);let h=f.useCallback(e=>{if(!n&&!r||m.paused)return;let t=e.key===`Tab`&&!e.altKey&&!e.ctrlKey&&!e.metaKey,i=document.activeElement;if(t&&i){let t=e.currentTarget,[r,a]=Ue(t);r&&a?!e.shiftKey&&i===a?(e.preventDefault(),n&&L(r,{select:!0})):e.shiftKey&&i===r&&(e.preventDefault(),n&&L(a,{select:!0})):i===t&&e.preventDefault()}},[n,r,m.paused]);return(0,M.jsx)(F.div,{tabIndex:-1,...o,ref:p,onKeyDown:h})});Ve.displayName=Be;function He(e,{select:t=!1}={}){let n=document.activeElement;for(let r of e)if(L(r,{select:t}),document.activeElement!==n)return}function Ue(e){let t=We(e);return[Ge(t,e),Ge(t.reverse(),e)]}function We(e){let t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:e=>{let t=e.tagName===`INPUT`&&e.type===`hidden`;return e.disabled||e.hidden||t?NodeFilter.FILTER_SKIP:e.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Ge(e,t){for(let n of e)if(!Ke(n,{upTo:t}))return n}function Ke(e,{upTo:t}){if(getComputedStyle(e).visibility===`hidden`)return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display===`none`)return!0;e=e.parentElement}return!1}function qe(e){return e instanceof HTMLInputElement&&`select`in e}function L(e,{select:t=!1}={}){if(e&&e.focus){let n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&qe(e)&&t&&e.select()}}var Je=Ye();function Ye(){let e=[];return{add(t){let n=e[0];t!==n&&n?.pause(),e=Xe(e,t),e.unshift(t)},remove(t){e=Xe(e,t),e[0]?.resume()}}}function Xe(e,t){let n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function Ze(e){return e.filter(e=>e.tagName!==`A`)}var Qe=`Portal`,$e=f.forwardRef((e,t)=>{let{container:n,...r}=e,[i,a]=f.useState(!1);N(()=>a(!0),[]);let o=n||i&&globalThis?.document?.body;return o?le.createPortal((0,M.jsx)(F.div,{...r,ref:t}),o):null});$e.displayName=Qe;function et(e,t){return f.useReducer((e,n)=>t[e][n]??e,e)}var tt=e=>{let{present:t,children:n}=e,r=nt(t),i=typeof n==`function`?n({present:r.isPresent}):f.Children.only(n),a=it(r.ref,ot(i));return typeof n==`function`||r.isPresent?f.cloneElement(i,{ref:a}):null};tt.displayName=`Presence`;function nt(e){let[t,n]=f.useState(),r=f.useRef(null),i=f.useRef(e),a=f.useRef(`none`),[o,s]=et(e?`mounted`:`unmounted`,{mounted:{UNMOUNT:`unmounted`,ANIMATION_OUT:`unmountSuspended`},unmountSuspended:{MOUNT:`mounted`,ANIMATION_END:`unmounted`},unmounted:{MOUNT:`mounted`}});return f.useEffect(()=>{let e=at(r.current);a.current=o===`mounted`?e:`none`},[o]),N(()=>{let t=r.current,n=i.current;if(n!==e){let r=a.current,o=at(t);e?s(`MOUNT`):o===`none`||t?.display===`none`?s(`UNMOUNT`):s(n&&r!==o?`ANIMATION_OUT`:`UNMOUNT`),i.current=e}},[e,s]),N(()=>{if(t){let e,n=t.ownerDocument.defaultView??window,o=a=>{let o=at(r.current).includes(CSS.escape(a.animationName));if(a.target===t&&o&&(s(`ANIMATION_END`),!i.current)){let r=t.style.animationFillMode;t.style.animationFillMode=`forwards`,e=n.setTimeout(()=>{t.style.animationFillMode===`forwards`&&(t.style.animationFillMode=r)})}},c=e=>{e.target===t&&(a.current=at(r.current))};return t.addEventListener(`animationstart`,c),t.addEventListener(`animationcancel`,o),t.addEventListener(`animationend`,o),()=>{n.clearTimeout(e),t.removeEventListener(`animationstart`,c),t.removeEventListener(`animationcancel`,o),t.removeEventListener(`animationend`,o)}}else s(`ANIMATION_END`)},[t,s]),{isPresent:[`mounted`,`unmountSuspended`].includes(o),ref:f.useCallback(e=>{r.current=e?getComputedStyle(e):null,n(e)},[])}}function rt(e,t){if(typeof e==`function`)return e(t);e!=null&&(e.current=t)}function it(...e){let t=f.useRef(e);return t.current=e,f.useCallback(e=>{let n=t.current,r=!1,i=n.map(t=>{let n=rt(t,e);return!r&&typeof n==`function`&&(r=!0),n});if(r)return()=>{for(let e=0;e<i.length;e++){let t=i[e];typeof t==`function`?t():rt(n[e],null)}}},[])}function at(e){return e?.animationName||`none`}function ot(e){let t=Object.getOwnPropertyDescriptor(e.props,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,`ref`)?.get,n=t&&`isReactWarning`in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var st=0,R=null;function ct(){f.useEffect(()=>{R||={start:lt(),end:lt()};let{start:e,end:t}=R;return document.body.firstElementChild!==e&&document.body.insertAdjacentElement(`afterbegin`,e),document.body.lastElementChild!==t&&document.body.insertAdjacentElement(`beforeend`,t),st++,()=>{st===1&&(R?.start.remove(),R?.end.remove(),R=null),st=Math.max(0,st-1)}},[])}function lt(){let e=document.createElement(`span`);return e.setAttribute(`data-radix-focus-guard`,``),e.tabIndex=0,e.style.outline=`none`,e.style.opacity=`0`,e.style.position=`fixed`,e.style.pointerEvents=`none`,e}var z=function(){return z=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},z.apply(this,arguments)};function ut(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols==`function`)for(var i=0,r=Object.getOwnPropertySymbols(e);i<r.length;i++)t.indexOf(r[i])<0&&Object.prototype.propertyIsEnumerable.call(e,r[i])&&(n[r[i]]=e[r[i]]);return n}function dt(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var ft=`right-scroll-bar-position`,pt=`width-before-scroll-bar`,mt=`with-scroll-bars-hidden`,ht=`--removed-body-scroll-bar-size`;function gt(e,t){return typeof e==`function`?e(t):e&&(e.current=t),e}function _t(e,t){var n=(0,f.useState)(function(){return{value:e,callback:t,facade:{get current(){return n.value},set current(e){var t=n.value;t!==e&&(n.value=e,n.callback(e,t))}}}})[0];return n.callback=t,n.facade}var vt=typeof window<`u`?f.useLayoutEffect:f.useEffect,yt=new WeakMap;function bt(e,t){var n=_t(t||null,function(t){return e.forEach(function(e){return gt(e,t)})});return vt(function(){var t=yt.get(n);if(t){var r=new Set(t),i=new Set(e),a=n.current;r.forEach(function(e){i.has(e)||gt(e,null)}),i.forEach(function(e){r.has(e)||gt(e,a)})}yt.set(n,e)},[e]),n}function xt(e){return e}function St(e,t){t===void 0&&(t=xt);var n=[],r=!1;return{read:function(){if(r)throw Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");return n.length?n[n.length-1]:e},useMedium:function(e){var i=t(e,r);return n.push(i),function(){n=n.filter(function(e){return e!==i})}},assignSyncMedium:function(e){for(r=!0;n.length;){var t=n;n=[],t.forEach(e)}n={push:function(t){return e(t)},filter:function(){return n}}},assignMedium:function(e){r=!0;var t=[];if(n.length){var i=n;n=[],i.forEach(e),t=n}var a=function(){var n=t;t=[],n.forEach(e)},o=function(){return Promise.resolve().then(a)};o(),n={push:function(e){t.push(e),o()},filter:function(e){return t=t.filter(e),n}}}}}function Ct(e){e===void 0&&(e={});var t=St(null);return t.options=z({async:!0,ssr:!1},e),t}var wt=function(e){var t=e.sideCar,n=ut(e,[`sideCar`]);if(!t)throw Error("Sidecar: please provide `sideCar` property to import the right car");var r=t.read();if(!r)throw Error(`Sidecar medium not found`);return f.createElement(r,z({},n))};wt.isSideCarExport=!0;function Tt(e,t){return e.useMedium(t),wt}var Et=Ct(),Dt=function(){},Ot=f.forwardRef(function(e,t){var n=f.useRef(null),r=f.useState({onScrollCapture:Dt,onWheelCapture:Dt,onTouchMoveCapture:Dt}),i=r[0],a=r[1],o=e.forwardProps,s=e.children,c=e.className,l=e.removeScrollBar,u=e.enabled,d=e.shards,p=e.sideCar,m=e.noRelative,h=e.noIsolation,g=e.inert,_=e.allowPinchZoom,v=e.as,y=v===void 0?`div`:v,b=e.gapMode,x=ut(e,[`forwardProps`,`children`,`className`,`removeScrollBar`,`enabled`,`shards`,`sideCar`,`noRelative`,`noIsolation`,`inert`,`allowPinchZoom`,`as`,`gapMode`]),S=p,C=bt([n,t]),w=z(z({},x),i);return f.createElement(f.Fragment,null,u&&f.createElement(S,{sideCar:Et,removeScrollBar:l,shards:d,noRelative:m,noIsolation:h,inert:g,setCallbacks:a,allowPinchZoom:!!_,lockRef:n,gapMode:b}),o?f.cloneElement(f.Children.only(s),z(z({},w),{ref:C})):f.createElement(y,z({},w,{className:c,ref:C}),s))});Ot.defaultProps={enabled:!0,removeScrollBar:!0,inert:!1},Ot.classNames={fullWidth:pt,zeroRight:ft};var kt,At=function(){if(kt)return kt;if(typeof __webpack_nonce__<`u`)return __webpack_nonce__};function jt(){if(!document)return null;var e=document.createElement(`style`);e.type=`text/css`;var t=At();return t&&e.setAttribute(`nonce`,t),e}function Mt(e,t){e.styleSheet?e.styleSheet.cssText=t:e.appendChild(document.createTextNode(t))}function Nt(e){(document.head||document.getElementsByTagName(`head`)[0]).appendChild(e)}var Pt=function(){var e=0,t=null;return{add:function(n){e==0&&(t=jt())&&(Mt(t,n),Nt(t)),e++},remove:function(){e--,!e&&t&&(t.parentNode&&t.parentNode.removeChild(t),t=null)}}},Ft=function(){var e=Pt();return function(t,n){f.useEffect(function(){return e.add(t),function(){e.remove()}},[t&&n])}},It=function(){var e=Ft();return function(t){var n=t.styles,r=t.dynamic;return e(n,r),null}},Lt={left:0,top:0,right:0,gap:0},Rt=function(e){return parseInt(e||``,10)||0},zt=function(e){var t=window.getComputedStyle(document.body),n=t[e===`padding`?`paddingLeft`:`marginLeft`],r=t[e===`padding`?`paddingTop`:`marginTop`],i=t[e===`padding`?`paddingRight`:`marginRight`];return[Rt(n),Rt(r),Rt(i)]},Bt=function(e){if(e===void 0&&(e=`margin`),typeof window>`u`)return Lt;var t=zt(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},Vt=It(),B=`data-scroll-locked`,Ht=function(e,t,n,r){var i=e.left,a=e.top,o=e.right,s=e.gap;return n===void 0&&(n=`margin`),`
|
|
2
|
+
.${mt} {
|
|
3
|
+
overflow: hidden ${r};
|
|
4
|
+
padding-right: ${s}px ${r};
|
|
5
|
+
}
|
|
6
|
+
body[${B}] {
|
|
7
|
+
overflow: hidden ${r};
|
|
8
|
+
overscroll-behavior: contain;
|
|
9
|
+
${[t&&`position: relative ${r};`,n===`margin`&&`
|
|
10
|
+
padding-left: ${i}px;
|
|
11
|
+
padding-top: ${a}px;
|
|
12
|
+
padding-right: ${o}px;
|
|
13
|
+
margin-left:0;
|
|
14
|
+
margin-top:0;
|
|
15
|
+
margin-right: ${s}px ${r};
|
|
16
|
+
`,n===`padding`&&`padding-right: ${s}px ${r};`].filter(Boolean).join(``)}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
.${ft} {
|
|
20
|
+
right: ${s}px ${r};
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
.${pt} {
|
|
24
|
+
margin-right: ${s}px ${r};
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.${ft} .${ft} {
|
|
28
|
+
right: 0 ${r};
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.${pt} .${pt} {
|
|
32
|
+
margin-right: 0 ${r};
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
body[${B}] {
|
|
36
|
+
${ht}: ${s}px;
|
|
37
|
+
}
|
|
38
|
+
`},Ut=function(){var e=parseInt(document.body.getAttribute(`data-scroll-locked`)||`0`,10);return isFinite(e)?e:0},Wt=function(){f.useEffect(function(){return document.body.setAttribute(B,(Ut()+1).toString()),function(){var e=Ut()-1;e<=0?document.body.removeAttribute(B):document.body.setAttribute(B,e.toString())}},[])},Gt=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,i=r===void 0?`margin`:r;Wt();var a=f.useMemo(function(){return Bt(i)},[i]);return f.createElement(Vt,{styles:Ht(a,!t,i,n?``:`!important`)})},Kt=!1;if(typeof window<`u`)try{var qt=Object.defineProperty({},"passive",{get:function(){return Kt=!0,!0}});window.addEventListener(`test`,qt,qt),window.removeEventListener(`test`,qt,qt)}catch{Kt=!1}var V=Kt?{passive:!1}:!1,Jt=function(e){return e.tagName===`TEXTAREA`},Yt=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!==`hidden`&&!(n.overflowY===n.overflowX&&!Jt(e)&&n[t]===`visible`)},Xt=function(e){return Yt(e,`overflowY`)},Zt=function(e){return Yt(e,`overflowX`)},Qt=function(e,t){var n=t.ownerDocument,r=t;do{if(typeof ShadowRoot<`u`&&r instanceof ShadowRoot&&(r=r.host),tn(e,r)){var i=nn(e,r);if(i[1]>i[2])return!0}r=r.parentNode}while(r&&r!==n.body);return!1},$t=function(e){return[e.scrollTop,e.scrollHeight,e.clientHeight]},en=function(e){return[e.scrollLeft,e.scrollWidth,e.clientWidth]},tn=function(e,t){return e===`v`?Xt(t):Zt(t)},nn=function(e,t){return e===`v`?$t(t):en(t)},rn=function(e,t){return e===`h`&&t===`rtl`?-1:1},an=function(e,t,n,r,i){var a=rn(e,window.getComputedStyle(t).direction),o=a*r,s=n.target,c=t.contains(s),l=!1,u=o>0,d=0,f=0;do{if(!s)break;var p=nn(e,s),m=p[0],h=p[1]-p[2]-a*m;(m||h)&&tn(e,s)&&(d+=h,f+=m);var g=s.parentNode;s=g&&g.nodeType===Node.DOCUMENT_FRAGMENT_NODE?g.host:g}while(!c&&s!==document.body||c&&(t.contains(s)||t===s));return(u&&(i&&Math.abs(d)<1||!i&&o>d)||!u&&(i&&Math.abs(f)<1||!i&&-o>f))&&(l=!0),l},on=function(e){return`changedTouches`in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},sn=function(e){return[e.deltaX,e.deltaY]},cn=function(e){return e&&`current`in e?e.current:e},ln=function(e,t){return e[0]===t[0]&&e[1]===t[1]},un=function(e){return`
|
|
39
|
+
.block-interactivity-${e} {pointer-events: none;}
|
|
40
|
+
.allow-interactivity-${e} {pointer-events: all;}
|
|
41
|
+
`},dn=0,H=[];function fn(e){var t=f.useRef([]),n=f.useRef([0,0]),r=f.useRef(),i=f.useState(dn++)[0],a=f.useState(It)[0],o=f.useRef(e);f.useEffect(function(){o.current=e},[e]),f.useEffect(function(){if(e.inert){document.body.classList.add(`block-interactivity-${i}`);var t=dt([e.lockRef.current],(e.shards||[]).map(cn),!0).filter(Boolean);return t.forEach(function(e){return e.classList.add(`allow-interactivity-${i}`)}),function(){document.body.classList.remove(`block-interactivity-${i}`),t.forEach(function(e){return e.classList.remove(`allow-interactivity-${i}`)})}}},[e.inert,e.lockRef.current,e.shards]);var s=f.useCallback(function(e,t){if(`touches`in e&&e.touches.length===2||e.type===`wheel`&&e.ctrlKey)return!o.current.allowPinchZoom;var i=on(e),a=n.current,s=`deltaX`in e?e.deltaX:a[0]-i[0],c=`deltaY`in e?e.deltaY:a[1]-i[1],l,u=e.target,d=Math.abs(s)>Math.abs(c)?`h`:`v`;if(`touches`in e&&d===`h`&&u.type===`range`)return!1;var f=window.getSelection(),p=f&&f.anchorNode;if(p&&(p===u||p.contains(u)))return!1;var m=Qt(d,u);if(!m)return!0;if(m?l=d:(l=d===`v`?`h`:`v`,m=Qt(d,u)),!m)return!1;if(!r.current&&`changedTouches`in e&&(s||c)&&(r.current=l),!l)return!0;var h=r.current||l;return an(h,t,e,h===`h`?s:c,!0)},[]),c=f.useCallback(function(e){var n=e;if(!(!H.length||H[H.length-1]!==a)){var r=`deltaY`in n?sn(n):on(n),i=t.current.filter(function(e){return e.name===n.type&&(e.target===n.target||n.target===e.shadowParent)&&ln(e.delta,r)})[0];if(i&&i.should){n.cancelable&&n.preventDefault();return}if(!i){var c=(o.current.shards||[]).map(cn).filter(Boolean).filter(function(e){return e.contains(n.target)});(c.length>0?s(n,c[0]):!o.current.noIsolation)&&n.cancelable&&n.preventDefault()}}},[]),l=f.useCallback(function(e,n,r,i){var a={name:e,delta:n,target:r,should:i,shadowParent:pn(r)};t.current.push(a),setTimeout(function(){t.current=t.current.filter(function(e){return e!==a})},1)},[]),u=f.useCallback(function(e){n.current=on(e),r.current=void 0},[]),d=f.useCallback(function(t){l(t.type,sn(t),t.target,s(t,e.lockRef.current))},[]),p=f.useCallback(function(t){l(t.type,on(t),t.target,s(t,e.lockRef.current))},[]);f.useEffect(function(){return H.push(a),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:p}),document.addEventListener(`wheel`,c,V),document.addEventListener(`touchmove`,c,V),document.addEventListener(`touchstart`,u,V),function(){H=H.filter(function(e){return e!==a}),document.removeEventListener(`wheel`,c,V),document.removeEventListener(`touchmove`,c,V),document.removeEventListener(`touchstart`,u,V)}},[]);var m=e.removeScrollBar,h=e.inert;return f.createElement(f.Fragment,null,h?f.createElement(a,{styles:un(i)}):null,m?f.createElement(Gt,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function pn(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}var mn=Tt(Et,fn),hn=f.forwardRef(function(e,t){return f.createElement(Ot,z({},e,{ref:t,sideCar:mn}))});hn.classNames=Ot.classNames;var gn=function(e){return typeof document>`u`?null:(Array.isArray(e)?e[0]:e).ownerDocument.body},U=new WeakMap,_n=new WeakMap,vn={},yn=0,bn=function(e){return e&&(e.host||bn(e.parentNode))},xn=function(e,t){return t.map(function(t){if(e.contains(t))return t;var n=bn(t);return n&&e.contains(n)?n:(console.error(`aria-hidden`,t,`in not contained inside`,e,`. Doing nothing`),null)}).filter(function(e){return!!e})},Sn=function(e,t,n,r){var i=xn(t,Array.isArray(e)?e:[e]);vn[n]||(vn[n]=new WeakMap);var a=vn[n],o=[],s=new Set,c=new Set(i),l=function(e){!e||s.has(e)||(s.add(e),l(e.parentNode))};i.forEach(l);var u=function(e){!e||c.has(e)||Array.prototype.forEach.call(e.children,function(e){if(s.has(e))u(e);else try{var t=e.getAttribute(r),i=t!==null&&t!==`false`,c=(U.get(e)||0)+1,l=(a.get(e)||0)+1;U.set(e,c),a.set(e,l),o.push(e),c===1&&i&&_n.set(e,!0),l===1&&e.setAttribute(n,`true`),i||e.setAttribute(r,`true`)}catch(t){console.error(`aria-hidden: cannot operate on `,e,t)}})};return u(t),s.clear(),yn++,function(){o.forEach(function(e){var t=U.get(e)-1,i=a.get(e)-1;U.set(e,t),a.set(e,i),t||(_n.has(e)||e.removeAttribute(r),_n.delete(e)),i||e.removeAttribute(n)}),yn--,yn||(U=new WeakMap,U=new WeakMap,_n=new WeakMap,vn={})}},Cn=function(e,t,n){n===void 0&&(n=`data-aria-hidden`);var r=Array.from(Array.isArray(e)?e:[e]),i=t||gn(e);return i?(r.push.apply(r,Array.from(i.querySelectorAll(`[aria-live], script`))),Sn(r,i,n,`aria-hidden`)):function(){return null}},wn=`Dialog`,[Tn,En]=te(wn),[Dn,W]=Tn(wn),On=e=>{let{__scopeDialog:t,children:n,open:r,defaultOpen:i,onOpenChange:a,modal:o=!0}=e,s=f.useRef(null),c=f.useRef(null),[l,u]=oe({prop:r,defaultProp:i??!1,onChange:a,caller:wn});return(0,M.jsx)(Dn,{scope:t,triggerRef:s,contentRef:c,contentId:P(),titleId:P(),descriptionId:P(),open:l,onOpenChange:u,onOpenToggle:f.useCallback(()=>u(e=>!e),[u]),modal:o,children:n})};On.displayName=wn;var kn=`DialogTrigger`,An=f.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=W(kn,n),a=j(t,i.triggerRef);return(0,M.jsx)(F.button,{type:`button`,"aria-haspopup":`dialog`,"aria-expanded":i.open,"aria-controls":i.open?i.contentId:void 0,"data-state":Yn(i.open),...r,ref:a,onClick:O(e.onClick,i.onOpenToggle)})});An.displayName=kn;var jn=`DialogPortal`,[Mn,Nn]=Tn(jn,{forceMount:void 0}),Pn=e=>{let{__scopeDialog:t,forceMount:n,children:r,container:i}=e,a=W(jn,t);return(0,M.jsx)(Mn,{scope:t,forceMount:n,children:f.Children.map(r,e=>(0,M.jsx)(tt,{present:n||a.open,children:(0,M.jsx)($e,{asChild:!0,container:i,children:e})}))})};Pn.displayName=jn;var Fn=`DialogOverlay`,In=f.forwardRef((e,t)=>{let n=Nn(Fn,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=W(Fn,e.__scopeDialog);return a.modal?(0,M.jsx)(tt,{present:r||a.open,children:(0,M.jsx)(Rn,{...i,ref:t})}):null});In.displayName=Fn;var Ln=ue(`DialogOverlay.RemoveScroll`),Rn=f.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=W(Fn,n);return(0,M.jsx)(hn,{as:Ln,allowPinchZoom:!0,shards:[i.contentRef],children:(0,M.jsx)(F.div,{"data-state":Yn(i.open),...r,ref:t,style:{pointerEvents:`auto`,...r.style}})})}),G=`DialogContent`,zn=f.forwardRef((e,t)=>{let n=Nn(G,e.__scopeDialog),{forceMount:r=n.forceMount,...i}=e,a=W(G,e.__scopeDialog);return(0,M.jsx)(tt,{present:r||a.open,children:a.modal?(0,M.jsx)(Bn,{...i,ref:t}):(0,M.jsx)(Vn,{...i,ref:t})})});zn.displayName=G;var Bn=f.forwardRef((e,t)=>{let n=W(G,e.__scopeDialog),r=f.useRef(null),i=j(t,n.contentRef,r);return f.useEffect(()=>{let e=r.current;if(e)return Cn(e)},[]),(0,M.jsx)(Hn,{...e,ref:i,trapFocus:n.open,disableOutsidePointerEvents:n.open,onCloseAutoFocus:O(e.onCloseAutoFocus,e=>{e.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:O(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,n=t.button===0&&t.ctrlKey===!0;(t.button===2||n)&&e.preventDefault()}),onFocusOutside:O(e.onFocusOutside,e=>e.preventDefault())})}),Vn=f.forwardRef((e,t)=>{let n=W(G,e.__scopeDialog),r=f.useRef(!1),i=f.useRef(!1);return(0,M.jsx)(Hn,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(r.current||n.triggerRef.current?.focus(),t.preventDefault()),r.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(r.current=!0,t.detail.originalEvent.type===`pointerdown`&&(i.current=!0));let a=t.target;n.triggerRef.current?.contains(a)&&t.preventDefault(),t.detail.originalEvent.type===`focusin`&&i.current&&t.preventDefault()}})}),Hn=f.forwardRef((e,t)=>{let{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:i,onCloseAutoFocus:a,...o}=e,s=W(G,n),c=f.useRef(null),l=j(t,c);return ct(),(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(Ve,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:i,onUnmountAutoFocus:a,children:(0,M.jsx)(Ae,{role:`dialog`,id:s.contentId,"aria-describedby":s.descriptionId,"aria-labelledby":s.titleId,"data-state":Yn(s.open),...o,ref:l,onDismiss:()=>s.onOpenChange(!1)})}),(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)($n,{titleId:s.titleId}),(0,M.jsx)(tr,{contentRef:c,descriptionId:s.descriptionId})]})]})}),Un=`DialogTitle`,Wn=f.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=W(Un,n);return(0,M.jsx)(F.h2,{id:i.titleId,...r,ref:t})});Wn.displayName=Un;var Gn=`DialogDescription`,Kn=f.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=W(Gn,n);return(0,M.jsx)(F.p,{id:i.descriptionId,...r,ref:t})});Kn.displayName=Gn;var qn=`DialogClose`,Jn=f.forwardRef((e,t)=>{let{__scopeDialog:n,...r}=e,i=W(qn,n);return(0,M.jsx)(F.button,{type:`button`,...r,ref:t,onClick:O(e.onClick,()=>i.onOpenChange(!1))})});Jn.displayName=qn;function Yn(e){return e?`open`:`closed`}var Xn=`DialogTitleWarning`,[Zn,Qn]=ee(Xn,{contentName:G,titleName:Un,docsSlug:`dialog`}),$n=({titleId:e})=>{let t=Qn(Xn),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users.
|
|
42
|
+
|
|
43
|
+
If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component.
|
|
44
|
+
|
|
45
|
+
For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return f.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},er=`DialogDescriptionWarning`,tr=({contentRef:e,descriptionId:t})=>{let n=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${Qn(er).contentName}}.`;return f.useEffect(()=>{let r=e.current?.getAttribute(`aria-describedby`);t&&r&&(document.getElementById(t)||console.warn(n))},[n,e,t]),null},nr=On,rr=Pn,ir=In,ar=zn,K=`[cmdk-group=""]`,or=`[cmdk-group-items=""]`,sr=`[cmdk-group-heading=""]`,cr=`[cmdk-item=""]`,lr=`${cr}:not([aria-disabled="true"])`,ur=`cmdk-item-select`,q=`data-value`,dr=(e,t,n)=>D(e,t,n),fr=f.createContext(void 0),pr=()=>f.useContext(fr),mr=f.createContext(void 0),hr=()=>f.useContext(mr),gr=f.createContext(void 0),_r=f.forwardRef((e,t)=>{let n=X(()=>({search:``,value:e.value??e.defaultValue??``,selectedItemId:void 0,filtered:{count:0,items:new Map,groups:new Set}})),r=X(()=>new Set),i=X(()=>new Map),a=X(()=>new Map),o=X(()=>new Set),s=Or(e),{label:c,children:l,value:u,onValueChange:d,filter:p,shouldFilter:m,loop:h,disablePointerSelection:g=!1,vimBindings:_=!0,...v}=e,y=P(),b=P(),x=P(),S=f.useRef(null),C=Ar();Y(()=>{if(u!==void 0){let e=u.trim();n.current.value=e,w.emit()}},[u]),Y(()=>{C(6,A)},[]);let w=f.useMemo(()=>({subscribe:e=>(o.current.add(e),()=>o.current.delete(e)),snapshot:()=>n.current,setState:(e,t,r)=>{var i,a,o;if(!Object.is(n.current[e],t)){if(n.current[e]=t,e===`search`)k(),D(),C(1,O);else if(e===`value`){if(document.activeElement.hasAttribute(`cmdk-input`)||document.activeElement.hasAttribute(`cmdk-root`)){let e=document.getElementById(x);e?e.focus():(i=document.getElementById(y))==null||i.focus()}if(C(7,()=>{n.current.selectedItemId=j()?.id,w.emit()}),r||C(5,A),s.current?.value!==void 0){let e=t??``;(o=(a=s.current).onValueChange)==null||o.call(a,e);return}}w.emit()}},emit:()=>{o.current.forEach(e=>e())}}),[]),T=f.useMemo(()=>({value:(e,t,r)=>{t!==a.current.get(e)?.value&&(a.current.set(e,{value:t,keywords:r}),n.current.filtered.items.set(e,E(t,r)),C(2,()=>{D(),w.emit()}))},item:(e,t)=>(r.current.add(e),t&&(i.current.has(t)?i.current.get(t).add(e):i.current.set(t,new Set([e]))),C(3,()=>{k(),D(),n.current.value||O(),w.emit()}),()=>{a.current.delete(e),r.current.delete(e),n.current.filtered.items.delete(e);let t=j();C(4,()=>{k(),t?.getAttribute(`id`)===e&&O(),w.emit()})}),group:e=>(i.current.has(e)||i.current.set(e,new Set),()=>{a.current.delete(e),i.current.delete(e)}),filter:()=>s.current.shouldFilter,label:c||e[`aria-label`],getDisablePointerSelection:()=>s.current.disablePointerSelection,listId:y,inputId:x,labelId:b,listInnerRef:S}),[]);function E(e,t){let r=s.current?.filter??dr;return e?r(e,n.current.search,t):0}function D(){if(!n.current.search||s.current.shouldFilter===!1)return;let e=n.current.filtered.items,t=[];n.current.filtered.groups.forEach(n=>{let r=i.current.get(n),a=0;r.forEach(t=>{let n=e.get(t);a=Math.max(n,a)}),t.push([n,a])});let r=S.current;M().sort((t,n)=>{let r=t.getAttribute(`id`),i=n.getAttribute(`id`);return(e.get(i)??0)-(e.get(r)??0)}).forEach(e=>{let t=e.closest(or);t?t.appendChild(e.parentElement===t?e:e.closest(`${or} > *`)):r.appendChild(e.parentElement===r?e:e.closest(`${or} > *`))}),t.sort((e,t)=>t[1]-e[1]).forEach(e=>{let t=S.current?.querySelector(`${K}[${q}="${encodeURIComponent(e[0])}"]`);t?.parentElement.appendChild(t)})}function O(){let e=M().find(e=>e.getAttribute(`aria-disabled`)!==`true`)?.getAttribute(q);w.setState(`value`,e||void 0)}function k(){if(!n.current.search||s.current.shouldFilter===!1){n.current.filtered.count=r.current.size;return}n.current.filtered.groups=new Set;let e=0;for(let t of r.current){let r=E(a.current.get(t)?.value??``,a.current.get(t)?.keywords??[]);n.current.filtered.items.set(t,r),r>0&&e++}for(let[e,t]of i.current)for(let r of t)if(n.current.filtered.items.get(r)>0){n.current.filtered.groups.add(e);break}n.current.filtered.count=e}function A(){var e;let t=j();t&&(t.parentElement?.firstChild===t&&((e=t.closest(K)?.querySelector(sr))==null||e.scrollIntoView({block:`nearest`})),t.scrollIntoView({block:`nearest`}))}function j(){return S.current?.querySelector(`${cr}[aria-selected="true"]`)}function M(){return Array.from(S.current?.querySelectorAll(lr)||[])}function ee(e){let t=M()[e];t&&w.setState(`value`,t.getAttribute(q))}function te(e){var t;let n=j(),r=M(),i=r.findIndex(e=>e===n),a=r[i+e];(t=s.current)!=null&&t.loop&&(a=i+e<0?r[r.length-1]:i+e===r.length?r[0]:r[i+e]),a&&w.setState(`value`,a.getAttribute(q))}function ne(e){let t=j()?.closest(K),n;for(;t&&!n;)t=e>0?Er(t,K):Dr(t,K),n=t?.querySelector(lr);n?w.setState(`value`,n.getAttribute(q)):te(e)}let N=()=>ee(M().length-1),re=e=>{e.preventDefault(),e.metaKey?N():e.altKey?ne(1):te(1)},ie=e=>{e.preventDefault(),e.metaKey?ee(0):e.altKey?ne(-1):te(-1)};return f.createElement(F.div,{ref:t,tabIndex:-1,...v,"cmdk-root":``,onKeyDown:e=>{var t;(t=v.onKeyDown)==null||t.call(v,e);let n=e.nativeEvent.isComposing||e.keyCode===229;if(!(e.defaultPrevented||n))switch(e.key){case`n`:case`j`:_&&e.ctrlKey&&re(e);break;case`ArrowDown`:re(e);break;case`p`:case`k`:_&&e.ctrlKey&&ie(e);break;case`ArrowUp`:ie(e);break;case`Home`:e.preventDefault(),ee(0);break;case`End`:e.preventDefault(),N();break;case`Enter`:{e.preventDefault();let t=j();if(t){let e=new Event(ur);t.dispatchEvent(e)}}}}},f.createElement(`label`,{"cmdk-label":``,htmlFor:T.inputId,id:T.labelId,style:Nr},c),Mr(e,e=>f.createElement(mr.Provider,{value:w},f.createElement(fr.Provider,{value:T},e))))}),vr=f.forwardRef((e,t)=>{let n=P(),r=f.useRef(null),i=f.useContext(gr),a=pr(),o=Or(e),s=o.current?.forceMount??i?.forceMount;Y(()=>{if(!s)return a.item(n,i?.id)},[s]);let c=kr(n,r,[e.value,e.children,r],e.keywords),l=hr(),u=Z(e=>e.value&&e.value===c.current),d=Z(e=>s||a.filter()===!1?!0:e.search?e.filtered.items.get(n)>0:!0);f.useEffect(()=>{let t=r.current;if(!(!t||e.disabled))return t.addEventListener(ur,p),()=>t.removeEventListener(ur,p)},[d,e.onSelect,e.disabled]);function p(){var e,t;m(),(t=(e=o.current).onSelect)==null||t.call(e,c.current)}function m(){l.setState(`value`,c.current,!0)}if(!d)return null;let{disabled:h,value:g,onSelect:_,forceMount:v,keywords:y,...b}=e;return f.createElement(F.div,{ref:A(r,t),...b,id:n,"cmdk-item":``,role:`option`,"aria-disabled":!!h,"aria-selected":!!u,"data-disabled":!!h,"data-selected":!!u,onPointerMove:h||a.getDisablePointerSelection()?void 0:m,onClick:h?void 0:p},e.children)}),yr=f.forwardRef((e,t)=>{let{heading:n,children:r,forceMount:i,...a}=e,o=P(),s=f.useRef(null),c=f.useRef(null),l=P(),u=pr(),d=Z(e=>i||u.filter()===!1?!0:e.search?e.filtered.groups.has(o):!0);Y(()=>u.group(o),[]),kr(o,s,[e.value,e.heading,c]);let p=f.useMemo(()=>({id:o,forceMount:i}),[i]);return f.createElement(F.div,{ref:A(s,t),...a,"cmdk-group":``,role:`presentation`,hidden:d?void 0:!0},n&&f.createElement(`div`,{ref:c,"cmdk-group-heading":``,"aria-hidden":!0,id:l},n),Mr(e,e=>f.createElement(`div`,{"cmdk-group-items":``,role:`group`,"aria-labelledby":n?l:void 0},f.createElement(gr.Provider,{value:p},e))))}),br=f.forwardRef((e,t)=>{let{alwaysRender:n,...r}=e,i=f.useRef(null),a=Z(e=>!e.search);return!n&&!a?null:f.createElement(F.div,{ref:A(i,t),...r,"cmdk-separator":``,role:`separator`})}),xr=f.forwardRef((e,t)=>{let{onValueChange:n,...r}=e,i=e.value!=null,a=hr(),o=Z(e=>e.search),s=Z(e=>e.selectedItemId),c=pr();return f.useEffect(()=>{e.value!=null&&a.setState(`search`,e.value)},[e.value]),f.createElement(F.input,{ref:t,...r,"cmdk-input":``,autoComplete:`off`,autoCorrect:`off`,spellCheck:!1,"aria-autocomplete":`list`,role:`combobox`,"aria-expanded":!0,"aria-controls":c.listId,"aria-labelledby":c.labelId,"aria-activedescendant":s,id:c.inputId,type:`text`,value:i?e.value:o,onChange:e=>{i||a.setState(`search`,e.target.value),n?.(e.target.value)}})}),Sr=f.forwardRef((e,t)=>{let{children:n,label:r=`Suggestions`,...i}=e,a=f.useRef(null),o=f.useRef(null),s=Z(e=>e.selectedItemId),c=pr();return f.useEffect(()=>{if(o.current&&a.current){let e=o.current,t=a.current,n,r=new ResizeObserver(()=>{n=requestAnimationFrame(()=>{let n=e.offsetHeight;t.style.setProperty(`--cmdk-list-height`,n.toFixed(1)+`px`)})});return r.observe(e),()=>{cancelAnimationFrame(n),r.unobserve(e)}}},[]),f.createElement(F.div,{ref:A(a,t),...i,"cmdk-list":``,role:`listbox`,tabIndex:-1,"aria-activedescendant":s,"aria-label":r,id:c.listId},Mr(e,e=>f.createElement(`div`,{ref:A(o,c.listInnerRef),"cmdk-list-sizer":``},e)))}),Cr=f.forwardRef((e,t)=>{let{open:n,onOpenChange:r,overlayClassName:i,contentClassName:a,container:o,...s}=e;return f.createElement(nr,{open:n,onOpenChange:r},f.createElement(rr,{container:o},f.createElement(ir,{"cmdk-overlay":``,className:i}),f.createElement(ar,{"aria-label":e.label,"cmdk-dialog":``,className:a},f.createElement(_r,{ref:t,...s}))))}),wr=f.forwardRef((e,t)=>Z(e=>e.filtered.count===0)?f.createElement(F.div,{ref:t,...e,"cmdk-empty":``,role:`presentation`}):null),Tr=f.forwardRef((e,t)=>{let{progress:n,children:r,label:i=`Loading...`,...a}=e;return f.createElement(F.div,{ref:t,...a,"cmdk-loading":``,role:`progressbar`,"aria-valuenow":n,"aria-valuemin":0,"aria-valuemax":100,"aria-label":i},Mr(e,e=>f.createElement(`div`,{"aria-hidden":!0},e)))}),J=Object.assign(_r,{List:Sr,Item:vr,Input:xr,Group:yr,Separator:br,Dialog:Cr,Empty:wr,Loading:Tr});function Er(e,t){let n=e.nextElementSibling;for(;n;){if(n.matches(t))return n;n=n.nextElementSibling}}function Dr(e,t){let n=e.previousElementSibling;for(;n;){if(n.matches(t))return n;n=n.previousElementSibling}}function Or(e){let t=f.useRef(e);return Y(()=>{t.current=e}),t}var Y=typeof window>`u`?f.useEffect:f.useLayoutEffect;function X(e){let t=f.useRef();return t.current===void 0&&(t.current=e()),t}function Z(e){let t=hr(),n=()=>e(t.snapshot());return f.useSyncExternalStore(t.subscribe,n,n)}function kr(e,t,n,r=[]){let i=f.useRef(),a=pr();return Y(()=>{var o;let s=(()=>{for(let e of n){if(typeof e==`string`)return e.trim();if(typeof e==`object`&&`current`in e)return e.current?e.current.textContent?.trim():i.current}})(),c=r.map(e=>e.trim());a.value(e,s,c),(o=t.current)==null||o.setAttribute(q,s),i.current=s}),i}var Ar=()=>{let[e,t]=f.useState(),n=X(()=>new Map);return Y(()=>{n.current.forEach(e=>e()),n.current=new Map},[e]),(e,r)=>{n.current.set(e,r),t({})}};function jr(e){let t=e.type;return typeof t==`function`?t(e.props):`render`in t?t.render(e.props):e}function Mr({asChild:e,children:t},n){return e&&f.isValidElement(t)?f.cloneElement(jr(t),{ref:t.ref},n(t.props.children)):n(t)}var Nr={position:`absolute`,width:`1px`,height:`1px`,padding:`0`,margin:`-1px`,overflow:`hidden`,clip:`rect(0, 0, 0, 0)`,whiteSpace:`nowrap`,borderWidth:`0`};function Pr({open:e,mode:t=`all`,onClose:n,onRunWorkflow:r}){let[p,m]=(0,f.useState)(``),h=o(),g=c(e=>e.openPreviewPath),_=c(e=>e.openSearch),v=d(e=>e.history),{tabs:y,activeId:b,setActive:x,create:S}=u(),C=s({queryKey:[`files`],queryFn:l.listFiles,enabled:e&&t===`all`,staleTime:3e4}),w=s({queryKey:[`workflows`],queryFn:l.listWorkflows,enabled:e&&t===`all`,staleTime:1e4}),T=s({queryKey:[`history`],queryFn:l.history,enabled:e,staleTime:15e3}),E=(0,f.useMemo)(()=>{let e=new Set,t=[];for(let n of[...v,...T.data?.commands??[]]){let r=n.trim();r&&!e.has(r)&&(e.add(r),t.push(r))}return t},[v,T.data]),D=(0,f.useRef)(!1);if((0,f.useEffect)(()=>{e||m(``)},[e]),!e)return null;let O=t===`history`,k=e=>{e(),n()},A=e=>a.get(b)?.sendInput(`\x15${e}\r`),j=e=>a.get(b)?.sendInput(`\x15${e}`);return(0,M.jsx)(i,{onClose:n,align:`top`,children:(0,M.jsxs)(J,{label:`Command palette`,className:`w-full max-w-xl overflow-hidden rounded-[var(--radius-dialog)] border border-border bg-elevated`,style:{boxShadow:`var(--shadow-dialog)`},onClick:e=>e.stopPropagation(),loop:!0,children:[(0,M.jsx)(J.Input,{autoFocus:!0,value:p,onValueChange:m,onKeyDown:e=>D.current=e.altKey,placeholder:O?`Run a recent command… (Alt+Enter inserts without running)`:`Jump to file, run a command, search…`,className:`w-full border-b border-border bg-transparent px-4 py-3 text-body text-ink-100 placeholder:text-ink-500 focus:outline-none`}),(0,M.jsxs)(J.List,{className:`max-h-[50vh] overflow-auto p-1.5`,children:[(0,M.jsx)(J.Empty,{className:`px-3 py-6 text-center text-ui text-ink-500`,children:`no matches`}),!O&&p.trim().length>=2&&(0,M.jsx)(J.Group,{heading:`Search`,children:(0,M.jsxs)(Q,{onSelect:()=>k(()=>_(p.trim())),children:[(0,M.jsx)($,{children:`search`}),` "`,p.trim(),`" in workspace`]})}),E.length>0&&(0,M.jsx)(J.Group,{heading:O?`Recent commands`:`History`,children:E.slice(0,O?200:8).map((e,t)=>(0,M.jsxs)(Q,{value:`history ${e}`,onSelect:()=>k(()=>D.current?j(e):A(e)),children:[(0,M.jsx)($,{children:`run`}),` `,e]},`h-${t}`))}),!O&&(w.data?.workflows.length??0)>0&&(0,M.jsx)(J.Group,{heading:`Workflows`,children:w.data.workflows.map(e=>(0,M.jsxs)(Q,{value:`workflow ${e.name} ${e.command}`,onSelect:()=>k(()=>r(e)),children:[(0,M.jsx)($,{children:`flow`}),` `,e.name,(0,M.jsx)(`span`,{className:`ml-2 truncate text-ink-500`,children:e.description??e.command})]},`w-${e.name}`))}),!O&&(0,M.jsx)(J.Group,{heading:`Files`,children:(C.data?.files??[]).slice(0,500).map(e=>(0,M.jsxs)(Q,{value:`file ${e}`,onSelect:()=>k(()=>g(e)),children:[(0,M.jsx)($,{children:`file`}),` `,e]},`f-${e}`))}),!O&&(0,M.jsxs)(J.Group,{heading:`Sessions`,children:[y.map(e=>(0,M.jsxs)(Q,{value:`session ${e.title} ${e.id}`,onSelect:()=>k(()=>x(e.id)),children:[(0,M.jsx)($,{children:`term`}),` `,e.title,e.id===b&&(0,M.jsx)(`span`,{className:`ml-2 text-accent-dim`,children:`active`})]},`s-${e.id}`)),(0,M.jsxs)(Q,{value:`new terminal session`,onSelect:()=>k(()=>void S()),children:[(0,M.jsx)($,{children:`term`}),` New terminal`]})]}),!O&&(0,M.jsxs)(J.Group,{heading:`Workspace`,children:[(0,M.jsxs)(Q,{value:`switch vault workspace open folder`,onSelect:()=>k(()=>window.dispatchEvent(new Event(`zuzuu-web:open-vault-picker`))),children:[(0,M.jsx)($,{children:`vault`}),` Switch vault… `,(0,M.jsx)(`span`,{className:`ml-2 text-ink-500`,children:`⌘⇧O`})]}),(0,M.jsxs)(Q,{value:`save session recording cast asciicast`,onSelect:()=>k(()=>window.dispatchEvent(new Event(`zuzuu-web:save-recording`))),children:[(0,M.jsx)($,{children:`rec`}),` Save session recording (.cast)`]}),(0,M.jsxs)(Q,{value:`refresh files reload tree`,onSelect:()=>k(()=>{h.invalidateQueries({queryKey:[`dir`]}),h.invalidateQueries({queryKey:[`files`]})}),children:[(0,M.jsx)($,{children:`fs`}),` Refresh files`]})]})]})]})})}function Q({children:e,value:t,onSelect:n}){return(0,M.jsx)(J.Item,{value:t,onSelect:n,className:`flex cursor-pointer items-center gap-1 truncate rounded-[var(--radius-sm)] px-2 py-1.5 text-ui text-ink-100 data-[selected=true]:bg-hover`,children:e})}function $({children:e}){return(0,M.jsx)(`span`,{className:`mr-1 shrink-0 rounded-[var(--radius-sm)] bg-hover px-1.5 py-0.5 text-meta uppercase tracking-wide text-ink-400`,children:e})}export{Pr as CommandPalette};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{t as e}from"./react-vendor-CCIEwYL0.js";import{h as t,m as n}from"./index-De6DWTZM.js";import{i as r,n as i,t as a}from"./monaco-setup-DM3A5_VI.js";var o=e();function s({path:e,name:s}){let{data:l,isLoading:u,error:d}=t({queryKey:[`git`,`diff`,e],queryFn:async()=>{let[t,r]=await Promise.all([n.gitDiff(e),n.readFile(e).catch(()=>``)]);return{original:t.original,working:r}}});return d?(0,o.jsx)(c,{danger:!0,children:d.message}):u||!l?(0,o.jsx)(c,{children:`loading diff…`}):(0,o.jsx)(r,{original:l.original,modified:l.working,language:i(s),theme:a(),options:{readOnly:!0,renderSideBySide:!0,fontFamily:`"JetBrains Mono Variable", ui-monospace, monospace`,fontSize:13,minimap:{enabled:!1},automaticLayout:!0}})}function c({children:e,danger:t}){return(0,o.jsx)(`div`,{className:`flex h-full items-center justify-center text-ui ${t?`text-danger`:`text-ink-500`}`,children:e})}export{s as DiffTab,s as default};
|