@jacexh/claude-web-console 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. package/README.md +102 -0
  2. package/bin/cli.js +64 -0
  3. package/claude-web-console.service +26 -0
  4. package/client/dist/assets/_baseUniq-Cnoz3HXL.js +1 -0
  5. package/client/dist/assets/arc-Z_2trbN8.js +1 -0
  6. package/client/dist/assets/architectureDiagram-Q4EWVU46-BkJc1Y5A.js +36 -0
  7. package/client/dist/assets/blockDiagram-DXYQGD6D-DajeZur_.js +132 -0
  8. package/client/dist/assets/c4Diagram-AHTNJAMY-DPrSiSIe.js +10 -0
  9. package/client/dist/assets/channel-xmJgF8AT.js +1 -0
  10. package/client/dist/assets/chunk-4BX2VUAB-Ap8VOuEx.js +1 -0
  11. package/client/dist/assets/chunk-4TB4RGXK-7WUmxI0T.js +206 -0
  12. package/client/dist/assets/chunk-55IACEB6-gyKf_szG.js +1 -0
  13. package/client/dist/assets/chunk-EDXVE4YY-Dqsdf8RE.js +1 -0
  14. package/client/dist/assets/chunk-FMBD7UC4-CFwejjYg.js +15 -0
  15. package/client/dist/assets/chunk-OYMX7WX6-DjhMJFGF.js +231 -0
  16. package/client/dist/assets/chunk-QZHKN3VN-BZl3lFpB.js +1 -0
  17. package/client/dist/assets/chunk-YZCP3GAM-Bgp9VGoJ.js +1 -0
  18. package/client/dist/assets/classDiagram-6PBFFD2Q-CUsL9OeO.js +1 -0
  19. package/client/dist/assets/classDiagram-v2-HSJHXN6E-CUsL9OeO.js +1 -0
  20. package/client/dist/assets/clone-YPoNuUWg.js +1 -0
  21. package/client/dist/assets/cose-bilkent-S5V4N54A-BhMgNxzB.js +1 -0
  22. package/client/dist/assets/cytoscape.esm-BQaXIfA_.js +331 -0
  23. package/client/dist/assets/dagre-KV5264BT-Im4xvruI.js +4 -0
  24. package/client/dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  25. package/client/dist/assets/diagram-5BDNPKRD-C_LUH1t_.js +10 -0
  26. package/client/dist/assets/diagram-G4DWMVQ6-ovGPIIZa.js +24 -0
  27. package/client/dist/assets/diagram-MMDJMWI5-Cc_S6QYf.js +43 -0
  28. package/client/dist/assets/diagram-TYMM5635-DNtJ4zRJ.js +24 -0
  29. package/client/dist/assets/erDiagram-SMLLAGMA-mjVqYF51.js +85 -0
  30. package/client/dist/assets/flowDiagram-DWJPFMVM-gfeU3vbm.js +162 -0
  31. package/client/dist/assets/ganttDiagram-T4ZO3ILL-DHzKAwPu.js +292 -0
  32. package/client/dist/assets/gitGraphDiagram-UUTBAWPF-NmVr9v2T.js +106 -0
  33. package/client/dist/assets/graph-DWZBkQul.js +1 -0
  34. package/client/dist/assets/index-Bs3edPh7.js +329 -0
  35. package/client/dist/assets/index-BvGI0U64.css +1 -0
  36. package/client/dist/assets/infoDiagram-42DDH7IO-uZQs2FWg.js +2 -0
  37. package/client/dist/assets/init-Gi6I4Gst.js +1 -0
  38. package/client/dist/assets/ishikawaDiagram-UXIWVN3A-CVqWYfyh.js +70 -0
  39. package/client/dist/assets/journeyDiagram-VCZTEJTY-BM-S2Uek.js +139 -0
  40. package/client/dist/assets/kanban-definition-6JOO6SKY-DtfrMWsW.js +89 -0
  41. package/client/dist/assets/katex-DkKDou_j.js +257 -0
  42. package/client/dist/assets/layout-dcq7fgvs.js +1 -0
  43. package/client/dist/assets/linear-B-FGkSzh.js +1 -0
  44. package/client/dist/assets/mermaid.core-DDFJ1A5Z.js +309 -0
  45. package/client/dist/assets/min-DD4RQeGA.js +1 -0
  46. package/client/dist/assets/mindmap-definition-QFDTVHPH-B1E5NbCo.js +96 -0
  47. package/client/dist/assets/ordinal-Cboi1Yqb.js +1 -0
  48. package/client/dist/assets/pieDiagram-DEJITSTG-Ciel1XRV.js +30 -0
  49. package/client/dist/assets/quadrantDiagram-34T5L4WZ-D1jxP0fH.js +7 -0
  50. package/client/dist/assets/requirementDiagram-MS252O5E-CTXKAocB.js +84 -0
  51. package/client/dist/assets/sankeyDiagram-XADWPNL6-Dj-i0BnN.js +10 -0
  52. package/client/dist/assets/sequenceDiagram-FGHM5R23-kCI4qbes.js +157 -0
  53. package/client/dist/assets/stateDiagram-FHFEXIEX-CiE-lplM.js +1 -0
  54. package/client/dist/assets/stateDiagram-v2-QKLJ7IA2-ZPI5JmoG.js +1 -0
  55. package/client/dist/assets/timeline-definition-GMOUNBTQ-MoAQpvF_.js +120 -0
  56. package/client/dist/assets/vennDiagram-DHZGUBPP-BqTjHn6B.js +34 -0
  57. package/client/dist/assets/wardley-RL74JXVD-C3OshQuH.js +162 -0
  58. package/client/dist/assets/wardleyDiagram-NUSXRM2D-Dl-s9oxJ.js +20 -0
  59. package/client/dist/assets/xychartDiagram-5P7HB3ND-BqyQEiVY.js +7 -0
  60. package/client/dist/index.html +16 -0
  61. package/package.json +57 -0
  62. package/server/src/index.ts +52 -0
  63. package/server/src/session-manager.ts +765 -0
  64. package/server/src/types.ts +295 -0
  65. package/server/src/ws-handler.ts +355 -0
package/README.md ADDED
@@ -0,0 +1,102 @@
1
+ # @jacexh/claude-web-console
2
+
3
+ Web-based console for [Claude Code](https://docs.anthropic.com/en/docs/claude-code) -- manage multiple sessions, switch models, preview artifacts, and more, all from the browser.
4
+
5
+ ![Node.js](https://img.shields.io/badge/node-%3E%3D18-brightgreen)
6
+ ![License](https://img.shields.io/badge/license-MIT-blue)
7
+
8
+ ## Features
9
+
10
+ - **Multi-session management** -- create, resume, close, rename, and fork sessions
11
+ - **Model switching** -- change Claude model mid-session or at creation time
12
+ - **Permission control** -- choose permission mode per session (auto, acceptEdits, plan, bypassPermissions, dontAsk)
13
+ - **Environment variables** -- pass custom env vars when creating sessions
14
+ - **Artifact preview** -- HTML (sandboxed iframe), Markdown, code highlighting (Prism), Mermaid diagrams
15
+ - **SubAgent visualization** -- nested agent rendering with collapsible cards
16
+ - **Elicitation handling** -- inline form/URL prompts from MCP servers
17
+ - **Command menu** -- `/` slash commands with autocomplete
18
+ - **File mention** -- `@` file autocomplete in chat input
19
+ - **Settings dashboard** -- view permission mode, MCP server status, account info
20
+ - **Resizable three-panel layout** -- session list, chat, and artifact preview
21
+
22
+ ## Quick Start
23
+
24
+ ### npx (no install)
25
+
26
+ ```bash
27
+ npx @jacexh/claude-web-console
28
+ ```
29
+
30
+ Open [http://localhost:3000](http://localhost:3000) in your browser.
31
+
32
+ ### Global install
33
+
34
+ ```bash
35
+ npm install -g @jacexh/claude-web-console
36
+ claude-web-console --port 8080
37
+ ```
38
+
39
+ ### Docker
40
+
41
+ ```bash
42
+ docker run -p 3000:3000 \
43
+ -v ~/.claude:/root/.claude \
44
+ ghcr.io/jacexh/claude-web-console
45
+ ```
46
+
47
+ > Mount `~/.claude` so the container can reuse your existing Claude Code authentication.
48
+
49
+ ### systemd (Linux)
50
+
51
+ ```bash
52
+ # Copy the service file
53
+ cp claude-web-console.service ~/.config/systemd/user/
54
+
55
+ # Edit environment variables as needed
56
+ systemctl --user edit claude-web-console.service
57
+
58
+ # Enable and start
59
+ systemctl --user enable --now claude-web-console.service
60
+
61
+ # Check status / logs
62
+ systemctl --user status claude-web-console.service
63
+ journalctl --user -u claude-web-console.service -f
64
+ ```
65
+
66
+ ## CLI Options
67
+
68
+ ```
69
+ claude-web-console [options]
70
+
71
+ Options:
72
+ --port <number> Port to listen on (default: 3000, env: PORT)
73
+ --host <address> Host to bind to (default: 0.0.0.0)
74
+ --help, -h Show this help message
75
+ --version, -v Show version
76
+ ```
77
+
78
+ ## Prerequisites
79
+
80
+ - **Node.js >= 18**
81
+ - **Claude Code CLI** installed and authenticated (`claude` must be available in PATH, or set `CLAUDE_PATH` env var)
82
+
83
+ ## Development
84
+
85
+ ```bash
86
+ git clone https://github.com/jacexh/talgent.git
87
+ cd talgent/claude-web-console
88
+ npm install
89
+ npm run dev
90
+ ```
91
+
92
+ This starts both the Fastify server and Vite dev server concurrently.
93
+
94
+ ## Tech Stack
95
+
96
+ - **Server:** Fastify v5, WebSocket, `@anthropic-ai/claude-agent-sdk`
97
+ - **Client:** React 19, Vite 6, Tailwind CSS v4
98
+ - **Runtime:** tsx (no build step for server in dev)
99
+
100
+ ## License
101
+
102
+ MIT
package/bin/cli.js ADDED
@@ -0,0 +1,64 @@
1
+ #!/usr/bin/env node
2
+
3
+ const args = process.argv.slice(2);
4
+
5
+ function getArg(name, fallback) {
6
+ const idx = args.indexOf(name);
7
+ if (idx !== -1 && idx + 1 < args.length) return args[idx + 1];
8
+ const eq = args.find(a => a.startsWith(`${name}=`));
9
+ if (eq) return eq.split('=')[1];
10
+ return fallback;
11
+ }
12
+
13
+ if (args.includes('--help') || args.includes('-h')) {
14
+ console.log(`
15
+ claude-web-console - Web-based console for Claude Code
16
+
17
+ Usage:
18
+ claude-web-console [options]
19
+
20
+ Options:
21
+ --port <number> Port to listen on (default: 3000, env: PORT)
22
+ --host <address> Host to bind to (default: 0.0.0.0)
23
+ --help, -h Show this help message
24
+ --version, -v Show version
25
+ `);
26
+ process.exit(0);
27
+ }
28
+
29
+ if (args.includes('--version') || args.includes('-v')) {
30
+ const { readFileSync } = await import('node:fs');
31
+ const { fileURLToPath } = await import('node:url');
32
+ const { dirname, join } = await import('node:path');
33
+ const __dirname = dirname(fileURLToPath(import.meta.url));
34
+ const pkg = JSON.parse(readFileSync(join(__dirname, '..', 'package.json'), 'utf-8'));
35
+ console.log(pkg.version);
36
+ process.exit(0);
37
+ }
38
+
39
+ const port = getArg('--port', process.env.PORT || '3000');
40
+ const host = getArg('--host', '0.0.0.0');
41
+
42
+ process.env.PORT = port;
43
+ process.env.HOST = host;
44
+
45
+ // Launch the server via tsx
46
+ import { fileURLToPath } from 'node:url';
47
+ import { dirname, join } from 'node:path';
48
+ import { spawn } from 'node:child_process';
49
+
50
+ const __dirname = dirname(fileURLToPath(import.meta.url));
51
+ const serverEntry = join(__dirname, '..', 'server', 'src', 'index.ts');
52
+ const tsxBin = join(__dirname, '..', 'node_modules', '.bin', 'tsx');
53
+
54
+ const child = spawn(tsxBin, [serverEntry], {
55
+ stdio: 'inherit',
56
+ env: { ...process.env, PORT: port, HOST: host },
57
+ });
58
+
59
+ child.on('exit', (code) => process.exit(code ?? 0));
60
+
61
+ // Forward signals
62
+ for (const sig of ['SIGINT', 'SIGTERM']) {
63
+ process.on(sig, () => child.kill(sig));
64
+ }
@@ -0,0 +1,26 @@
1
+ [Unit]
2
+ Description=Claude Web Console
3
+ After=network.target
4
+
5
+ [Service]
6
+ Type=simple
7
+ ExecStart=/usr/bin/env npx @jacexh/claude-web-console
8
+ Restart=on-failure
9
+ RestartSec=5
10
+
11
+ # Environment
12
+ Environment=PORT=3000
13
+ Environment=HOST=0.0.0.0
14
+ # Uncomment and set if claude is not in PATH
15
+ # Environment=CLAUDE_PATH=/usr/local/bin/claude
16
+ # Uncomment to set a default working directory for new sessions
17
+ # Environment=CC_WEB_CONSOLE_CWD=/home/your-user/projects
18
+
19
+ # Security hardening
20
+ NoNewPrivileges=true
21
+ ProtectSystem=strict
22
+ ProtectHome=read-only
23
+ ReadWritePaths=%h/.claude
24
+
25
+ [Install]
26
+ WantedBy=multi-user.target
@@ -0,0 +1 @@
1
+ import{aX as L,bt as ln,aH as A,aV as P,aG as z,bu as gn,bv as dn,bw as hn,bx as W,by as pn,bo as An,bz as m,aY as N,b1 as B,b4 as T,bA as _n,a$ as on,bB as wn,br as On,aI as V,bp as vn,bC as R}from"./mermaid.core-DDFJ1A5Z.js";var Pn="[object Symbol]";function x(n){return typeof n=="symbol"||L(n)&&ln(n)==Pn}function yn(n,r){for(var e=-1,i=n==null?0:n.length,f=Array(i);++e<i;)f[e]=r(n[e],e,n);return f}var U=P?P.prototype:void 0,H=U?U.toString:void 0;function k(n){if(typeof n=="string")return n;if(A(n))return yn(n,k)+"";if(x(n))return H?H.call(n):"";var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function bn(){}function En(n,r){for(var e=-1,i=n==null?0:n.length;++e<i&&r(n[e],e,n)!==!1;);return n}function cn(n,r,e,i){for(var f=n.length,t=e+-1;++t<f;)if(r(n[t],t,n))return t;return-1}function Tn(n){return n!==n}function In(n,r,e){for(var i=e-1,f=n.length;++i<f;)if(n[i]===r)return i;return-1}function Rn(n,r,e){return r===r?In(n,r,e):cn(n,Tn,e)}function Sn(n,r){var e=n==null?0:n.length;return!!e&&Rn(n,r,0)>-1}function M(n){return z(n)?gn(n):dn(n)}var Ln=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,xn=/^\w*$/;function $(n,r){if(A(n))return!1;var e=typeof n;return e=="number"||e=="symbol"||e=="boolean"||n==null||x(n)?!0:xn.test(n)||!Ln.test(n)||r!=null&&n in Object(r)}var Mn=500;function $n(n){var r=hn(n,function(i){return e.size===Mn&&e.clear(),i}),e=r.cache;return r}var Cn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,Gn=/\\(\\)?/g,Dn=$n(function(n){var r=[];return n.charCodeAt(0)===46&&r.push(""),n.replace(Cn,function(e,i,f,t){r.push(f?t.replace(Gn,"$1"):i||e)}),r});function Fn(n){return n==null?"":k(n)}function j(n,r){return A(n)?n:$(n,r)?[n]:Dn(Fn(n))}function I(n){if(typeof n=="string"||x(n))return n;var r=n+"";return r=="0"&&1/n==-1/0?"-0":r}function nn(n,r){r=j(r,n);for(var e=0,i=r.length;n!=null&&e<i;)n=n[I(r[e++])];return e&&e==i?n:void 0}function mn(n,r,e){var i=n==null?void 0:nn(n,r);return i===void 0?e:i}function rn(n,r){for(var e=-1,i=r.length,f=n.length;++e<i;)n[f+e]=r[e];return n}var K=P?P.isConcatSpreadable:void 0;function Nn(n){return A(n)||W(n)||!!(K&&n&&n[K])}function Kr(n,r,e,i,f){var t=-1,s=n.length;for(e||(e=Nn),f||(f=[]);++t<s;){var u=n[t];e(u)?rn(f,u):i||(f[f.length]=u)}return f}function Bn(n,r,e,i){var f=-1,t=n==null?0:n.length;for(i&&t&&(e=n[++f]);++f<t;)e=r(e,n[f],f,n);return e}function en(n,r){for(var e=-1,i=n==null?0:n.length,f=0,t=[];++e<i;){var s=n[e];r(s,e,n)&&(t[f++]=s)}return t}function Un(){return[]}var Hn=Object.prototype,Kn=Hn.propertyIsEnumerable,q=Object.getOwnPropertySymbols,qn=q?function(n){return n==null?[]:(n=Object(n),en(q(n),function(r){return Kn.call(n,r)}))}:Un;function Yn(n,r,e){var i=r(n);return A(n)?i:rn(i,e(n))}function Y(n){return Yn(n,M,qn)}var Zn="__lodash_hash_undefined__";function Xn(n){return this.__data__.set(n,Zn),this}function Jn(n){return this.__data__.has(n)}function y(n){var r=-1,e=n==null?0:n.length;for(this.__data__=new pn;++r<e;)this.add(n[r])}y.prototype.add=y.prototype.push=Xn;y.prototype.has=Jn;function Qn(n,r){for(var e=-1,i=n==null?0:n.length;++e<i;)if(r(n[e],e,n))return!0;return!1}function tn(n,r){return n.has(r)}var zn=1,Wn=2;function fn(n,r,e,i,f,t){var s=e&zn,u=n.length,a=r.length;if(u!=a&&!(s&&a>u))return!1;var h=t.get(n),g=t.get(r);if(h&&g)return h==r&&g==n;var l=-1,d=!0,o=e&Wn?new y:void 0;for(t.set(n,r),t.set(r,n);++l<u;){var p=n[l],_=r[l];if(i)var w=s?i(_,p,l,r,n,t):i(p,_,l,n,r,t);if(w!==void 0){if(w)continue;d=!1;break}if(o){if(!Qn(r,function(O,v){if(!tn(o,v)&&(p===O||f(p,O,e,i,t)))return o.push(v)})){d=!1;break}}else if(!(p===_||f(p,_,e,i,t))){d=!1;break}}return t.delete(n),t.delete(r),d}function Vn(n){var r=-1,e=Array(n.size);return n.forEach(function(i,f){e[++r]=[f,i]}),e}function C(n){var r=-1,e=Array(n.size);return n.forEach(function(i){e[++r]=i}),e}var kn=1,jn=2,nr="[object Boolean]",rr="[object Date]",er="[object Error]",ir="[object Map]",tr="[object Number]",fr="[object RegExp]",sr="[object Set]",ur="[object String]",ar="[object Symbol]",lr="[object ArrayBuffer]",gr="[object DataView]",Z=P?P.prototype:void 0,S=Z?Z.valueOf:void 0;function dr(n,r,e,i,f,t,s){switch(e){case gr:if(n.byteLength!=r.byteLength||n.byteOffset!=r.byteOffset)return!1;n=n.buffer,r=r.buffer;case lr:return!(n.byteLength!=r.byteLength||!t(new m(n),new m(r)));case nr:case rr:case tr:return An(+n,+r);case er:return n.name==r.name&&n.message==r.message;case fr:case ur:return n==r+"";case ir:var u=Vn;case sr:var a=i&kn;if(u||(u=C),n.size!=r.size&&!a)return!1;var h=s.get(n);if(h)return h==r;i|=jn,s.set(n,r);var g=fn(u(n),u(r),i,f,t,s);return s.delete(n),g;case ar:if(S)return S.call(n)==S.call(r)}return!1}var hr=1,pr=Object.prototype,Ar=pr.hasOwnProperty;function _r(n,r,e,i,f,t){var s=e&hr,u=Y(n),a=u.length,h=Y(r),g=h.length;if(a!=g&&!s)return!1;for(var l=a;l--;){var d=u[l];if(!(s?d in r:Ar.call(r,d)))return!1}var o=t.get(n),p=t.get(r);if(o&&p)return o==r&&p==n;var _=!0;t.set(n,r),t.set(r,n);for(var w=s;++l<a;){d=u[l];var O=n[d],v=r[d];if(i)var F=s?i(v,O,d,r,n,t):i(O,v,d,n,r,t);if(!(F===void 0?O===v||f(O,v,e,i,t):F)){_=!1;break}w||(w=d=="constructor")}if(_&&!w){var b=n.constructor,E=r.constructor;b!=E&&"constructor"in n&&"constructor"in r&&!(typeof b=="function"&&b instanceof b&&typeof E=="function"&&E instanceof E)&&(_=!1)}return t.delete(n),t.delete(r),_}var or=1,X="[object Arguments]",J="[object Array]",c="[object Object]",wr=Object.prototype,Q=wr.hasOwnProperty;function Or(n,r,e,i,f,t){var s=A(n),u=A(r),a=s?J:N(n),h=u?J:N(r);a=a==X?c:a,h=h==X?c:h;var g=a==c,l=h==c,d=a==h;if(d&&B(n)){if(!B(r))return!1;s=!0,g=!1}if(d&&!g)return t||(t=new T),s||_n(n)?fn(n,r,e,i,f,t):dr(n,r,a,e,i,f,t);if(!(e&or)){var o=g&&Q.call(n,"__wrapped__"),p=l&&Q.call(r,"__wrapped__");if(o||p){var _=o?n.value():n,w=p?r.value():r;return t||(t=new T),f(_,w,e,i,t)}}return d?(t||(t=new T),_r(n,r,e,i,f,t)):!1}function G(n,r,e,i,f){return n===r?!0:n==null||r==null||!L(n)&&!L(r)?n!==n&&r!==r:Or(n,r,e,i,G,f)}var vr=1,Pr=2;function yr(n,r,e,i){var f=e.length,t=f;if(n==null)return!t;for(n=Object(n);f--;){var s=e[f];if(s[2]?s[1]!==n[s[0]]:!(s[0]in n))return!1}for(;++f<t;){s=e[f];var u=s[0],a=n[u],h=s[1];if(s[2]){if(a===void 0&&!(u in n))return!1}else{var g=new T,l;if(!(l===void 0?G(h,a,vr|Pr,i,g):l))return!1}}return!0}function sn(n){return n===n&&!on(n)}function br(n){for(var r=M(n),e=r.length;e--;){var i=r[e],f=n[i];r[e]=[i,f,sn(f)]}return r}function un(n,r){return function(e){return e==null?!1:e[n]===r&&(r!==void 0||n in Object(e))}}function Er(n){var r=br(n);return r.length==1&&r[0][2]?un(r[0][0],r[0][1]):function(e){return e===n||yr(e,n,r)}}function cr(n,r){return n!=null&&r in Object(n)}function Tr(n,r,e){r=j(r,n);for(var i=-1,f=r.length,t=!1;++i<f;){var s=I(r[i]);if(!(t=n!=null&&e(n,s)))break;n=n[s]}return t||++i!=f?t:(f=n==null?0:n.length,!!f&&wn(f)&&On(s,f)&&(A(n)||W(n)))}function Ir(n,r){return n!=null&&Tr(n,r,cr)}var Rr=1,Sr=2;function Lr(n,r){return $(n)&&sn(r)?un(I(n),r):function(e){var i=mn(e,n);return i===void 0&&i===r?Ir(e,n):G(r,i,Rr|Sr)}}function xr(n){return function(r){return r==null?void 0:r[n]}}function Mr(n){return function(r){return nn(r,n)}}function $r(n){return $(n)?xr(I(n)):Mr(n)}function an(n){return typeof n=="function"?n:n==null?V:typeof n=="object"?A(n)?Lr(n[0],n[1]):Er(n):$r(n)}function Cr(n,r){return n&&vn(n,r,M)}function Gr(n,r){return function(e,i){if(e==null)return e;if(!z(e))return n(e,i);for(var f=e.length,t=-1,s=Object(e);++t<f&&i(s[t],t,s)!==!1;);return e}}var D=Gr(Cr);function Dr(n){return typeof n=="function"?n:V}function qr(n,r){var e=A(n)?En:D;return e(n,Dr(r))}function Fr(n,r){var e=[];return D(n,function(i,f,t){r(i,f,t)&&e.push(i)}),e}function Yr(n,r){var e=A(n)?en:Fr;return e(n,an(r))}function mr(n,r,e,i,f){return f(n,function(t,s,u){e=i?(i=!1,t):r(e,t,s,u)}),e}function Zr(n,r,e){var i=A(n)?Bn:mr,f=arguments.length<3;return i(n,an(r),e,f,D)}var Nr=1/0,Br=R&&1/C(new R([,-0]))[1]==Nr?function(n){return new R(n)}:bn,Ur=200;function Xr(n,r,e){var i=-1,f=Sn,t=n.length,s=!0,u=[],a=u;if(t>=Ur){var h=r?null:Br(n);if(h)return C(h);s=!1,f=tn,a=new y}else a=r?[]:u;n:for(;++i<t;){var g=n[i],l=r?r(g):g;if(g=g!==0?g:0,s&&l===l){for(var d=a.length;d--;)if(a[d]===l)continue n;r&&a.push(l),u.push(g)}else f(a,l,e)||(a!==u&&a.push(l),u.push(g))}return u}export{D as a,Kr as b,an as c,yn as d,rn as e,Yn as f,qn as g,En as h,x as i,Y as j,M as k,Xr as l,Yr as m,qr as n,cn as o,Dr as p,Cr as q,Zr as r,Un as s,Tr as t,j as u,I as v,nn as w,Ir as x,Fn as y};
@@ -0,0 +1 @@
1
+ import{a0 as ln,a1 as an,a2 as H,a3 as q,a4 as B,a5 as un,a6 as y,a7 as tn,a8 as L,a9 as _,aa as rn,ab as o,ac as on,ad as sn,ae as fn}from"./mermaid.core-DDFJ1A5Z.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,C,a){var O=I-l,i=D-h,n=C-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function W(l,h,I,D,v,A,C){var a=l-I,O=h-D,i=(C?A:-A)/L(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,F=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*L(on(0,T*T*R-P*P)),j=(P*g-m*S)/R,z=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=j-F,e=z-t,r=w-F,G=p-t;return x*x+e*e>r*r+G*G&&(j=w,z=p),{cx:j,cy:z,x01:-n,y01:-d,x11:j*(v/T-1),y11:z*(v/T-1)}}function hn(){var l=cn,h=yn,I=B(0),D=null,v=gn,A=dn,C=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,F=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(F>tn-y)a.moveTo(s*H(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*H(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=F,S=F,j=C.apply(this,arguments)/2,z=j>y&&(D?+D.apply(this,arguments):L(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if(z>y){var G=sn(z/u*q(j)),M=sn(z/s*q(j));(P-=G*2)>y?(G*=t?1:-1,R+=G,T-=G):(P=0,R=T=(f+c)/2),(S-=M*2)>y?(M*=t?1:-1,m+=M,g-=M):(S=0,m=g=(f+c)/2)}var J=s*H(m),K=s*q(m),N=u*H(T),Q=u*q(T);if(w>y){var U=s*H(g),V=s*q(g),X=u*H(R),Y=u*q(R),E;if(F<an)if(E=pn(J,K,X,Y,U,V,N,Q)){var Z=J-E[0],$=K-E[1],b=U-E[0],k=V-E[1],nn=1/q(fn((Z*b+$*k)/(L(Z*Z+$*$)*L(b*b+k*k)))/2),en=L(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=W(X,Y,J,K,s,x,t),r=W(U,V,N,Q,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(J,K),a.arc(0,0,s,m,g,!t)):a.moveTo(J,K),!(u>y)||!(P>y)?a.lineTo(N,Q):p>y?(e=W(N,Q,U,V,u,-p,t),r=W(J,K,X,Y,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[H(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:B(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:B(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:B(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:B(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:B(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:B(+n),i):A},i.padAngle=function(n){return arguments.length?(C=typeof n=="function"?n:B(+n),i):C},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};