@youweichen/pi-web-ui 0.45.0 → 0.45.2

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 (70) hide show
  1. package/README.md +7 -0
  2. package/dist/server/agent-service.js +92 -2
  3. package/dist/server/index.js +6 -0
  4. package/package.json +2 -2
  5. package/web/dist/assets/{TerminalPanel-D4AktsEn.js → TerminalPanel-DTPa-GPY.js} +1 -1
  6. package/web/dist/assets/{abnfDiagram-VCTEODGH-Ct5StJwt.js → abnfDiagram-VCTEODGH-3OBIjZzo.js} +1 -1
  7. package/web/dist/assets/{arc-pkuxEN8A.js → arc-QnNbtI3G.js} +1 -1
  8. package/web/dist/assets/{architectureDiagram-5GKGNRK7-C6P6yn4y.js → architectureDiagram-5GKGNRK7-BRC6l1C0.js} +1 -1
  9. package/web/dist/assets/{blockDiagram-I7D4REHJ-BmgfH1jt.js → blockDiagram-I7D4REHJ-QtokGhle.js} +1 -1
  10. package/web/dist/assets/{c4Diagram-7LVT6UL2-CgmwTFsK.js → c4Diagram-7LVT6UL2-DrXgUAH_.js} +1 -1
  11. package/web/dist/assets/channel-j9anJgKu.js +1 -0
  12. package/web/dist/assets/{chunk-2Q5K7J3B-DX_NqAiH.js → chunk-2Q5K7J3B-C8iJ92Ek.js} +1 -1
  13. package/web/dist/assets/{chunk-5VM5RSS4-gLeuQuYv.js → chunk-5VM5RSS4-C08WMGbd.js} +1 -1
  14. package/web/dist/assets/{chunk-F27PBJKO-D4WX4mhI.js → chunk-F27PBJKO-BTyqWEjg.js} +1 -1
  15. package/web/dist/assets/{chunk-IMKFNOWR-DBpDxGQD.js → chunk-IMKFNOWR-BZz8_wBp.js} +1 -1
  16. package/web/dist/assets/{chunk-JWPE2WC7-DIQ8iZN5.js → chunk-JWPE2WC7-Bp8exp_9.js} +1 -1
  17. package/web/dist/assets/{chunk-POPQ4Y6H-F_YTNoGz.js → chunk-POPQ4Y6H-FDNtBgdZ.js} +1 -1
  18. package/web/dist/assets/{chunk-SVP7TREG-CmDIvX-r.js → chunk-SVP7TREG-B4gluy_M.js} +1 -1
  19. package/web/dist/assets/{chunk-TICWLB2K-BQUzHQyS.js → chunk-TICWLB2K-DpVfoRrb.js} +1 -1
  20. package/web/dist/assets/{chunk-XXDRQBXY-DqR9iffH.js → chunk-XXDRQBXY-DwTeYIe6.js} +1 -1
  21. package/web/dist/assets/classDiagram-ZZMXUADV-BKdhhCr1.js +1 -0
  22. package/web/dist/assets/classDiagram-v2-VYDZK3BY-BKdhhCr1.js +1 -0
  23. package/web/dist/assets/{cose-bilkent-JH36ORCC-Dl67W4Dx.js → cose-bilkent-JH36ORCC-D9QpWzlD.js} +1 -1
  24. package/web/dist/assets/{cynefin-OW5HDTMX-fWdqaCpX.js → cynefin-OW5HDTMX-jCEkLFdf.js} +1 -1
  25. package/web/dist/assets/{cynefinDiagram-5FMLGOSQ-CSUAXbaP.js → cynefinDiagram-5FMLGOSQ-dVBRtFzn.js} +1 -1
  26. package/web/dist/assets/{dagre-GXQ25YYZ-CqUVwu1X.js → dagre-GXQ25YYZ-Ck-JYQBh.js} +1 -1
  27. package/web/dist/assets/{diagram-S7CK7UJ4-bRce-WYV.js → diagram-S7CK7UJ4-DDG_bD3X.js} +1 -1
  28. package/web/dist/assets/{diagram-UQ7AKVKN-CiqPtPBE.js → diagram-UQ7AKVKN-doLowaGS.js} +1 -1
  29. package/web/dist/assets/{diagram-VSXAHHWV-CbEA05LX.js → diagram-VSXAHHWV-Bj5leyj8.js} +1 -1
  30. package/web/dist/assets/{diagram-VX7I27RA-CRcY9MD-.js → diagram-VX7I27RA-CjXqoFDD.js} +1 -1
  31. package/web/dist/assets/{diagram-Z3DM3KII-DmTwvZdS.js → diagram-Z3DM3KII-D__qC8Iy.js} +1 -1
  32. package/web/dist/assets/{ebnfDiagram-PWID7BFC-DbwmiGVj.js → ebnfDiagram-PWID7BFC-tBnh13AS.js} +1 -1
  33. package/web/dist/assets/{erDiagram-RLTQ6QDP-Cxiaf87y.js → erDiagram-RLTQ6QDP-Cbod1iTi.js} +1 -1
  34. package/web/dist/assets/{flowDiagram-HODETNUW-BQiecP1I.js → flowDiagram-HODETNUW-Bq-zlqMG.js} +1 -1
  35. package/web/dist/assets/{ganttDiagram-EL5Y4UJY-CSr8RRNw.js → ganttDiagram-EL5Y4UJY-DFJTndUE.js} +1 -1
  36. package/web/dist/assets/{gitGraphDiagram-WWUBYQGX-C4Tdis3g.js → gitGraphDiagram-WWUBYQGX-DcEi9nDs.js} +1 -1
  37. package/web/dist/assets/index-BeCUh6J7.js +23 -0
  38. package/web/dist/assets/index-BjqEFNTc.css +10 -0
  39. package/web/dist/assets/{infoDiagram-27XIBGKW-ij_5A0pY.js → infoDiagram-27XIBGKW-BZNZJWoJ.js} +1 -1
  40. package/web/dist/assets/{ishikawaDiagram-5VMMS53U-C8-tm2LV.js → ishikawaDiagram-5VMMS53U-DqnNYeKy.js} +1 -1
  41. package/web/dist/assets/{journeyDiagram-3NMN7TZE-ZJedkNel.js → journeyDiagram-3NMN7TZE-DERTsG8q.js} +1 -1
  42. package/web/dist/assets/{kanban-definition-UXKFOSKX-BEuoM53n.js → kanban-definition-UXKFOSKX-KImwxyl_.js} +1 -1
  43. package/web/dist/assets/{layout-zq_9DigZ.js → layout-BH2O4YE8.js} +1 -1
  44. package/web/dist/assets/{linear-D-QXJ5Wc.js → linear-CmJWcbZf.js} +1 -1
  45. package/web/dist/assets/{mermaid.core-CCiG-bOm.js → mermaid.core-BqE9WdEq.js} +5 -5
  46. package/web/dist/assets/{mindmap-definition-YA3MSWOX-VaAisUIe.js → mindmap-definition-YA3MSWOX-BolJqx9C.js} +1 -1
  47. package/web/dist/assets/{pegDiagram-XKGWAZYB-D5vmRtkn.js → pegDiagram-XKGWAZYB-BwDKfPEj.js} +1 -1
  48. package/web/dist/assets/{pieDiagram-E7YTZNPT-loD6V8fn.js → pieDiagram-E7YTZNPT-D9giHNCe.js} +1 -1
  49. package/web/dist/assets/{quadrantDiagram-AXDQQJYC-B7E4mH1-.js → quadrantDiagram-AXDQQJYC-BtYHmNEC.js} +1 -1
  50. package/web/dist/assets/{railroadDiagram-O6MQD6OU-DTALHvDa.js → railroadDiagram-O6MQD6OU-FEOhYVmW.js} +1 -1
  51. package/web/dist/assets/{requirementDiagram-BXWQKSXE-ZjJKuEcR.js → requirementDiagram-BXWQKSXE-zqJeWuXp.js} +1 -1
  52. package/web/dist/assets/{sankeyDiagram-P5KCCOFB-DufTudDP.js → sankeyDiagram-P5KCCOFB-BbUWBYdO.js} +1 -1
  53. package/web/dist/assets/{sequenceDiagram-WJ2MYXX4-B-Zk4alI.js → sequenceDiagram-WJ2MYXX4-CkLzAx94.js} +1 -1
  54. package/web/dist/assets/{sizeCapture-INFHLROL-B1pjlxXN.js → sizeCapture-INFHLROL-Cu_Hov-C.js} +1 -1
  55. package/web/dist/assets/{stateDiagram-D77RDMKH-BeWg6PIR.js → stateDiagram-D77RDMKH-B3r-CwIC.js} +1 -1
  56. package/web/dist/assets/stateDiagram-v2-MP3YSRHH-Bo79NQZb.js +1 -0
  57. package/web/dist/assets/{swimlanes-42K2YHIH-4J4jmMmO.js → swimlanes-42K2YHIH-YDxAaBu_.js} +1 -1
  58. package/web/dist/assets/swimlanesDiagram-VR7AAH4N--G-JueY8.js +8 -0
  59. package/web/dist/assets/{timeline-definition-24CTP7MA-ByqLfxqe.js → timeline-definition-24CTP7MA-B2Xo7om1.js} +1 -1
  60. package/web/dist/assets/{vennDiagram-4TSXK5OY-B_EqVW4R.js → vennDiagram-4TSXK5OY-Dek7fJMD.js} +1 -1
  61. package/web/dist/assets/{wardleyDiagram-VM6X3IG4-Bu7sA6F8.js → wardleyDiagram-VM6X3IG4-CmXnKCpv.js} +1 -1
  62. package/web/dist/assets/{xychartDiagram-S5SC5T6Z-w1KPVGKk.js → xychartDiagram-S5SC5T6Z-CJ9917hr.js} +1 -1
  63. package/web/dist/index.html +2 -2
  64. package/web/dist/assets/channel-0Y__6sq2.js +0 -1
  65. package/web/dist/assets/classDiagram-ZZMXUADV-BEfGIpzu.js +0 -1
  66. package/web/dist/assets/classDiagram-v2-VYDZK3BY-BEfGIpzu.js +0 -1
  67. package/web/dist/assets/index-CniHcFxT.js +0 -22
  68. package/web/dist/assets/index-DYz2iP_B.css +0 -10
  69. package/web/dist/assets/stateDiagram-v2-MP3YSRHH-DagWhIFJ.js +0 -1
  70. package/web/dist/assets/swimlanesDiagram-VR7AAH4N-Dsi9x540.js +0 -8
package/README.md CHANGED
@@ -23,6 +23,13 @@ or without installing:
23
23
  npx @youweichen/pi-web-ui
24
24
  ```
25
25
 
26
+ ## Upgrade
27
+
28
+ ```bash
29
+ npm i -g @youweichen/pi-web-ui@latest
30
+ pi-web-ui server restart # if you installed the autostart service
31
+ ```
32
+
26
33
  ## Autostart on boot
27
34
 
28
35
  ```bash
@@ -2190,8 +2190,6 @@ export class ClientSession {
2190
2190
  await this.pushSessions();
2191
2191
  }
2192
2192
  async pushSessions() {
2193
- if (!this.sessionsRequested)
2194
- return;
2195
2193
  if (!this.sessionsRequested)
2196
2194
  return;
2197
2195
  try {
@@ -2261,6 +2259,98 @@ export class ClientSession {
2261
2259
  });
2262
2260
  }
2263
2261
  }
2262
+ /** List subdirectories for the workspace picker (`browse_dirs`).
2263
+ *
2264
+ * Deliberately NOT routed through FilesService.listFiles(), which pins
2265
+ * every listing inside the current workspace — choosing a new workspace
2266
+ * is exactly the case that has to look outside it. Scope is kept narrow
2267
+ * instead: directory *names* only, never file contents, and the same
2268
+ * loopback binding + PI_WEB_TOKEN auth as every other message guards it.
2269
+ * (The agent can already shell out with bash, so this exposes nothing it
2270
+ * could not already reach — it just makes it clickable.)
2271
+ */
2272
+ async browseDirs(path) {
2273
+ const { homedir } = await import("node:os");
2274
+ const fs = await import("node:fs/promises");
2275
+ const { dirname } = await import("node:path");
2276
+ const MAX = 500;
2277
+ const target = resolve(path?.trim() || homedir());
2278
+ try {
2279
+ const dirents = await fs.readdir(target, { withFileTypes: true });
2280
+ const dirs = [];
2281
+ for (const d of dirents) {
2282
+ // Symlinked directories are worth following (project checkouts
2283
+ // are often symlinked), but a broken link must not abort the
2284
+ // whole listing — isDirectory() is false for those, which is
2285
+ // the behaviour we want anyway.
2286
+ if (!d.isDirectory())
2287
+ continue;
2288
+ if (d.name.startsWith("."))
2289
+ continue; // dotfolders: noise here
2290
+ dirs.push(d.name);
2291
+ if (dirs.length >= MAX)
2292
+ break;
2293
+ }
2294
+ dirs.sort((a, b) => a.localeCompare(b));
2295
+ const parent = dirname(target);
2296
+ this.emit({
2297
+ type: "dir_browse",
2298
+ path: target,
2299
+ parent: parent === target ? null : parent,
2300
+ dirs,
2301
+ truncated: dirs.length >= MAX,
2302
+ });
2303
+ }
2304
+ catch (err) {
2305
+ this.emit({
2306
+ type: "notice",
2307
+ level: "error",
2308
+ text: `无法读取目录:${err.message}`,
2309
+ });
2310
+ }
2311
+ }
2312
+ /** Rename a persisted session (history list ✎).
2313
+ *
2314
+ * The display name lives in the transcript itself as a `session_info`
2315
+ * entry, so renaming means appending one via the SDK rather than touching
2316
+ * any sidecar state — `SessionManager.list()` already surfaces the latest
2317
+ * one as `SessionInfo.name`, which is what the panel renders. An empty
2318
+ * name clears it and the list falls back to the first user message.
2319
+ */
2320
+ async renameSession(path, name) {
2321
+ try {
2322
+ const abs = resolve(path);
2323
+ // Same guardrail as deleteSession: only transcripts under the
2324
+ // shared sessions root may be written, never arbitrary files.
2325
+ const sessionsRoot = resolve(this.agentDir, "sessions");
2326
+ if (!abs.startsWith(sessionsRoot + sep)) {
2327
+ this.emit({
2328
+ type: "notice",
2329
+ level: "error",
2330
+ text: "只能重命名会话目录中的对话记录",
2331
+ });
2332
+ return;
2333
+ }
2334
+ const trimmed = name.trim().slice(0, 120);
2335
+ // A live conversation holds its own SessionManager on this file;
2336
+ // append through that one so the two don't fight over the tail.
2337
+ const liveConv = [...this.convs.values()].find((conv) => conv.session.sessionFile === abs);
2338
+ if (liveConv) {
2339
+ liveConv.session.sessionManager.appendSessionInfo(trimmed);
2340
+ }
2341
+ else {
2342
+ SessionManager.open(abs).appendSessionInfo(trimmed);
2343
+ }
2344
+ await this.refreshSessions();
2345
+ }
2346
+ catch (err) {
2347
+ this.emit({
2348
+ type: "notice",
2349
+ level: "error",
2350
+ text: `重命名会话失败:${err.message}`,
2351
+ });
2352
+ }
2353
+ }
2264
2354
  /** Open a persisted session as the active conversation (from listSessions).
2265
2355
  *
2266
2356
  * A persisted-session click must follow the same ownership rule as
@@ -558,6 +558,12 @@ wss.on("connection", (ws) => {
558
558
  case "delete_session":
559
559
  void cs.deleteSession(msg.path);
560
560
  break;
561
+ case "rename_session":
562
+ void cs.renameSession(msg.path, msg.name);
563
+ break;
564
+ case "browse_dirs":
565
+ void cs.browseDirs(msg.path);
566
+ break;
561
567
  case "switch_session":
562
568
  void cs.switchSession(msg.path);
563
569
  break;
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@youweichen/pi-web-ui",
3
- "version": "0.45.0",
3
+ "version": "0.45.2",
4
4
  "description": "Web chat interface for the pi coding agent, powered by the pi SDK (@earendil-works/pi-coding-agent) — one-command run, Docker/systemd/launchd deployable",
5
5
  "license": "MIT",
6
6
  "author": {
7
7
  "name": "youweichen",
8
- "email": "youweichen0208@users.noreply.github.com"
8
+ "email": "youweichen0208@gmail.com"
9
9
  },
10
10
  "type": "module",
11
11
  "bin": {
@@ -1,2 +1,2 @@
1
- import{a as d,j as t}from"./markdown-CUPbftfV.js";import{u as H,F as O,a as R,b as P,c as q,d as L,e as G,f as J,g as V,r as W}from"./index-CniHcFxT.js";import{D as X,o as Y}from"./xterm-D1D2FVe3.js";import"./react-ZkKJMDQQ.js";const $="pi-web-ui:theme-change";function A(){const s=getComputedStyle(document.documentElement),n=(f,r)=>s.getPropertyValue(f).trim()||r;return{background:n("--term-bg","#1b1f24"),foreground:n("--term-fg","#e6e8ef"),cursor:n("--term-cursor","#3b49df"),cursorAccent:n("--term-cursor-accent","#1b1f24"),selectionBackground:n("--term-selection","rgba(59, 73, 223, 0.35)"),black:n("--term-black","#2a2f37"),red:n("--term-red","#f87171"),green:n("--term-green","#34d399"),yellow:n("--term-yellow","#fbbf24"),blue:n("--term-blue","#60a5fa"),magenta:n("--term-magenta","#c084fc"),cyan:n("--term-cyan","#22d3ee"),white:n("--term-white","#e6e8ef"),brightBlack:n("--term-bright-black","#6b7284"),brightRed:n("--term-bright-red","#f87171"),brightGreen:n("--term-bright-green","#34d399"),brightYellow:n("--term-bright-yellow","#fbbf24"),brightBlue:n("--term-bright-blue","#60a5fa"),brightMagenta:n("--term-bright-magenta","#c084fc"),brightCyan:n("--term-bright-cyan","#22d3ee"),brightWhite:n("--term-bright-white","#ffffff")}}function Q({conversationId:s,terminalId:n,command:f,cwd:r,active:p,send:o,register:j}){const g=d.useRef(null),y=d.useRef(null),N=f?JSON.stringify(f):"";return d.useEffect(()=>{const h=g.current;if(!h)return;const a=new X({theme:A(),fontFamily:'"SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace',fontSize:13,cursorBlink:!0,scrollback:8e3}),l=new Y;a.loadAddon(l),a.open(h),y.current={term:a,fit:l},p&&a.focus();const x=()=>{a.options.theme=A()};window.addEventListener($,x),a.attachCustomKeyEventHandler(m=>{var F;if(m.type!=="keydown")return!0;const E=(F=m.key)==null?void 0:F.toLowerCase();if((m.ctrlKey||m.metaKey)&&E==="v")return!1;if(m.ctrlKey&&!m.shiftKey&&!m.altKey&&E==="c"&&a.hasSelection()){const k=a.textarea;return k&&(k.value=a.getSelection(),k.select()),!1}return!0});const v=j(s,n,{write:m=>a.write(m),dispose:()=>a.dispose()}),C=()=>{try{l.fit(),o({type:"terminal_resize",terminalId:n,conversationId:s,cols:a.cols,rows:a.rows})}catch{}},b=requestAnimationFrame(()=>{try{l.fit()}catch{}o(f?{type:"run_command",terminalId:n,conversationId:s,command:f,cols:a.cols,rows:a.rows}:{type:"terminal_create",terminalId:n,conversationId:s,cwd:r,cols:a.cols,rows:a.rows})}),T=a.onData(m=>{o({type:"terminal_input",terminalId:n,conversationId:s,data:m})});let w=null;return typeof ResizeObserver<"u"&&(w=new ResizeObserver(()=>{h.offsetWidth>0&&h.offsetHeight>0&&C()}),w.observe(h)),()=>{cancelAnimationFrame(b),T.dispose(),window.removeEventListener($,x),w==null||w.disconnect(),v(),a.dispose(),y.current=null}},[s,n,N,o,j]),d.useEffect(()=>{if(!p)return;const h=requestAnimationFrame(()=>{const a=y.current;if(a){try{a.fit.fit(),o({type:"terminal_resize",terminalId:n,conversationId:s,cols:a.term.cols,rows:a.term.rows})}catch{}a.term.focus()}});return()=>cancelAnimationFrame(h)},[p]),t.jsx("div",{ref:g,className:`term-xterm ${p?"":"hidden"}`})}const K={name:"",command:"",cwd:"${pwd}"};function ne({chat:s,send:n,terminal:f}){const r=H(),[p,o]=d.useState(null),[j,g]=d.useState(!1),[y,N]=d.useState(!1),[h,a]=d.useState(null),[l,x]=d.useState(K),[v,C]=d.useState(null),b=d.useRef(null);d.useEffect(()=>{s.terminals.length===0?o(null):s.terminals.some(e=>e.id===p)||o(s.terminals[s.terminals.length-1].id)},[s.terminals,p]),d.useEffect(()=>()=>{b.current&&clearTimeout(b.current)},[]);const T=e=>{var u;if(!s.ready)return;const i=W(),c=s.activeConversationId||((u=s.state)==null?void 0:u.conversationId)||"";f.create({...e,id:i,conversationId:c,cols:e.cols??80,rows:e.rows??24,running:!0,exitCode:null}),o(i),g(!1)},w=()=>{var e;return T({title:r("terminalTitle",{n:s.terminals.length+1}),cwd:((e=s.state)==null?void 0:e.cwd)??""})},m=e=>{var u;const i=e.name||e.command,c=s.terminals.find(_=>_.title===i);if(c){f.restart(c.id),o(c.id),n({type:"run_command",terminalId:c.id,conversationId:c.conversationId,command:e,cols:80,rows:24});return}T({title:i,cwd:((u=s.state)==null?void 0:u.cwd)??"",command:e})},E=e=>{const i=s.terminals.find(c=>c.id===e);if(i&&n({type:"terminal_kill",terminalId:e,conversationId:i.conversationId}),f.close(e),p===e){const c=s.terminals.filter(u=>u.id!==e);o(c.length>0?c[c.length-1].id:null)}},F=()=>{N(!0),a(null),x(K)},k=e=>{const i=s.commands[e];i&&(N(!1),a(e),x({name:i.name,command:i.command,cwd:i.cwd??""}))},D=()=>{N(!1),a(null)},S=()=>{const e=l.name.trim(),i=l.command.trim();if(!e||!i)return;const c=l.cwd.trim(),u={name:e,command:i,cwd:c||void 0},_=y?[...s.commands,u]:h!==null?s.commands.map((z,B)=>B===h?u:z):s.commands;n({type:"save_commands",commands:_}),D()},M=e=>{if(v===e){const i=s.commands.filter((c,u)=>u!==e);n({type:"save_commands",commands:i}),C(null),b.current&&clearTimeout(b.current)}else C(e),b.current&&clearTimeout(b.current),b.current=setTimeout(()=>C(null),2500)},I=y||h!==null;return t.jsxs("div",{className:"terminal-view",children:[t.jsxs("aside",{className:`term-side term-commands ${j?"open":""}`,children:[t.jsxs("div",{className:"panel-header",children:[t.jsx("span",{className:"panel-title",children:r("commands")}),t.jsxs("div",{className:"panel-header-actions",children:[t.jsx("button",{type:"button",className:"panel-refresh",title:r("rerun"),onClick:()=>n({type:"list_commands"}),children:t.jsx(O,{})}),t.jsx("button",{type:"button",className:"panel-new",title:r("newCommand"),onClick:F,children:t.jsx(R,{})})]})]}),t.jsx("div",{className:"panel-body",children:I?t.jsxs("div",{className:"cmd-form",children:[t.jsx("label",{htmlFor:"cmd-name",children:r("name")}),t.jsx("input",{id:"cmd-name",className:"cmd-input",value:l.name,placeholder:r("exampleName"),autoFocus:!0,onChange:e=>x({...l,name:e.target.value})}),t.jsx("label",{htmlFor:"cmd-command",children:r("command")}),t.jsx("input",{id:"cmd-command",className:"cmd-input",value:l.command,placeholder:r("exampleCommand"),onChange:e=>x({...l,command:e.target.value}),onKeyDown:e=>{e.key==="Enter"&&!e.nativeEvent.isComposing&&S()}}),t.jsxs("label",{htmlFor:"cmd-cwd",children:[r("directory")," ",t.jsx("span",{className:"cmd-hint",children:r("cwdHint")})]}),t.jsx("input",{id:"cmd-cwd",className:"cmd-input",value:l.cwd,placeholder:"${pwd}",onChange:e=>x({...l,cwd:e.target.value}),onKeyDown:e=>{e.key==="Enter"&&!e.nativeEvent.isComposing&&S()}}),t.jsxs("div",{className:"cmd-form-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:D,children:r("cancel")}),t.jsx("button",{type:"button",className:"btn primary",disabled:!l.name.trim()||!l.command.trim(),onClick:S,children:r("save")})]})]}):t.jsxs(t.Fragment,{children:[s.commands.length===0&&t.jsx("div",{className:"panel-empty",children:r("noCommands")}),s.commands.map((e,i)=>t.jsxs("div",{className:"cmd-item",children:[t.jsx("button",{type:"button",className:"cmd-run",title:r("clickToRun"),onClick:()=>m(e),children:t.jsx(P,{})}),t.jsxs("button",{type:"button",className:"cmd-main",title:r("clickToRun"),onClick:()=>m(e),children:[t.jsx("span",{className:"cmd-name",children:e.name}),t.jsx("span",{className:"cmd-command",children:e.command}),e.cwd&&t.jsx("span",{className:"cmd-cwd",children:e.cwd})]}),t.jsx("button",{type:"button",className:"cmd-act",title:r("edit"),onClick:()=>k(i),children:t.jsx(q,{})}),t.jsx("button",{type:"button",className:`cmd-act del ${v===i?"confirm":""}`,title:r("delete"),onClick:()=>M(i),children:v===i?r("confirmQ"):t.jsx(L,{})})]},i))]})}),t.jsxs("div",{className:"term-tabs-block",children:[t.jsxs("div",{className:"panel-header",children:[t.jsx("span",{className:"panel-title",children:r("terminal")}),t.jsx("button",{type:"button",className:"panel-new",title:r("newTerminal"),onClick:w,children:t.jsx(R,{})})]}),t.jsxs("div",{className:"panel-body",children:[s.terminals.length===0&&t.jsx("div",{className:"panel-empty",children:r("noTerminal")}),s.terminals.map(e=>t.jsxs("div",{className:`term-tab ${e.id===p?"active":""}`,children:[t.jsxs("button",{type:"button",className:"term-tab-main",title:`${e.cwd}${e.command?`
1
+ import{a as d,j as t}from"./markdown-CUPbftfV.js";import{u as H,F as O,a as R,b as P,c as q,d as L,e as G,f as J,g as V,r as W}from"./index-BeCUh6J7.js";import{D as X,o as Y}from"./xterm-D1D2FVe3.js";import"./react-ZkKJMDQQ.js";const $="pi-web-ui:theme-change";function A(){const s=getComputedStyle(document.documentElement),n=(f,r)=>s.getPropertyValue(f).trim()||r;return{background:n("--term-bg","#1b1f24"),foreground:n("--term-fg","#e6e8ef"),cursor:n("--term-cursor","#3b49df"),cursorAccent:n("--term-cursor-accent","#1b1f24"),selectionBackground:n("--term-selection","rgba(59, 73, 223, 0.35)"),black:n("--term-black","#2a2f37"),red:n("--term-red","#f87171"),green:n("--term-green","#34d399"),yellow:n("--term-yellow","#fbbf24"),blue:n("--term-blue","#60a5fa"),magenta:n("--term-magenta","#c084fc"),cyan:n("--term-cyan","#22d3ee"),white:n("--term-white","#e6e8ef"),brightBlack:n("--term-bright-black","#6b7284"),brightRed:n("--term-bright-red","#f87171"),brightGreen:n("--term-bright-green","#34d399"),brightYellow:n("--term-bright-yellow","#fbbf24"),brightBlue:n("--term-bright-blue","#60a5fa"),brightMagenta:n("--term-bright-magenta","#c084fc"),brightCyan:n("--term-bright-cyan","#22d3ee"),brightWhite:n("--term-bright-white","#ffffff")}}function Q({conversationId:s,terminalId:n,command:f,cwd:r,active:p,send:o,register:j}){const g=d.useRef(null),y=d.useRef(null),N=f?JSON.stringify(f):"";return d.useEffect(()=>{const h=g.current;if(!h)return;const a=new X({theme:A(),fontFamily:'"SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace',fontSize:13,cursorBlink:!0,scrollback:8e3}),l=new Y;a.loadAddon(l),a.open(h),y.current={term:a,fit:l},p&&a.focus();const x=()=>{a.options.theme=A()};window.addEventListener($,x),a.attachCustomKeyEventHandler(m=>{var F;if(m.type!=="keydown")return!0;const E=(F=m.key)==null?void 0:F.toLowerCase();if((m.ctrlKey||m.metaKey)&&E==="v")return!1;if(m.ctrlKey&&!m.shiftKey&&!m.altKey&&E==="c"&&a.hasSelection()){const k=a.textarea;return k&&(k.value=a.getSelection(),k.select()),!1}return!0});const v=j(s,n,{write:m=>a.write(m),dispose:()=>a.dispose()}),C=()=>{try{l.fit(),o({type:"terminal_resize",terminalId:n,conversationId:s,cols:a.cols,rows:a.rows})}catch{}},b=requestAnimationFrame(()=>{try{l.fit()}catch{}o(f?{type:"run_command",terminalId:n,conversationId:s,command:f,cols:a.cols,rows:a.rows}:{type:"terminal_create",terminalId:n,conversationId:s,cwd:r,cols:a.cols,rows:a.rows})}),T=a.onData(m=>{o({type:"terminal_input",terminalId:n,conversationId:s,data:m})});let w=null;return typeof ResizeObserver<"u"&&(w=new ResizeObserver(()=>{h.offsetWidth>0&&h.offsetHeight>0&&C()}),w.observe(h)),()=>{cancelAnimationFrame(b),T.dispose(),window.removeEventListener($,x),w==null||w.disconnect(),v(),a.dispose(),y.current=null}},[s,n,N,o,j]),d.useEffect(()=>{if(!p)return;const h=requestAnimationFrame(()=>{const a=y.current;if(a){try{a.fit.fit(),o({type:"terminal_resize",terminalId:n,conversationId:s,cols:a.term.cols,rows:a.term.rows})}catch{}a.term.focus()}});return()=>cancelAnimationFrame(h)},[p]),t.jsx("div",{ref:g,className:`term-xterm ${p?"":"hidden"}`})}const K={name:"",command:"",cwd:"${pwd}"};function ne({chat:s,send:n,terminal:f}){const r=H(),[p,o]=d.useState(null),[j,g]=d.useState(!1),[y,N]=d.useState(!1),[h,a]=d.useState(null),[l,x]=d.useState(K),[v,C]=d.useState(null),b=d.useRef(null);d.useEffect(()=>{s.terminals.length===0?o(null):s.terminals.some(e=>e.id===p)||o(s.terminals[s.terminals.length-1].id)},[s.terminals,p]),d.useEffect(()=>()=>{b.current&&clearTimeout(b.current)},[]);const T=e=>{var u;if(!s.ready)return;const i=W(),c=s.activeConversationId||((u=s.state)==null?void 0:u.conversationId)||"";f.create({...e,id:i,conversationId:c,cols:e.cols??80,rows:e.rows??24,running:!0,exitCode:null}),o(i),g(!1)},w=()=>{var e;return T({title:r("terminalTitle",{n:s.terminals.length+1}),cwd:((e=s.state)==null?void 0:e.cwd)??""})},m=e=>{var u;const i=e.name||e.command,c=s.terminals.find(_=>_.title===i);if(c){f.restart(c.id),o(c.id),n({type:"run_command",terminalId:c.id,conversationId:c.conversationId,command:e,cols:80,rows:24});return}T({title:i,cwd:((u=s.state)==null?void 0:u.cwd)??"",command:e})},E=e=>{const i=s.terminals.find(c=>c.id===e);if(i&&n({type:"terminal_kill",terminalId:e,conversationId:i.conversationId}),f.close(e),p===e){const c=s.terminals.filter(u=>u.id!==e);o(c.length>0?c[c.length-1].id:null)}},F=()=>{N(!0),a(null),x(K)},k=e=>{const i=s.commands[e];i&&(N(!1),a(e),x({name:i.name,command:i.command,cwd:i.cwd??""}))},D=()=>{N(!1),a(null)},S=()=>{const e=l.name.trim(),i=l.command.trim();if(!e||!i)return;const c=l.cwd.trim(),u={name:e,command:i,cwd:c||void 0},_=y?[...s.commands,u]:h!==null?s.commands.map((z,B)=>B===h?u:z):s.commands;n({type:"save_commands",commands:_}),D()},M=e=>{if(v===e){const i=s.commands.filter((c,u)=>u!==e);n({type:"save_commands",commands:i}),C(null),b.current&&clearTimeout(b.current)}else C(e),b.current&&clearTimeout(b.current),b.current=setTimeout(()=>C(null),2500)},I=y||h!==null;return t.jsxs("div",{className:"terminal-view",children:[t.jsxs("aside",{className:`term-side term-commands ${j?"open":""}`,children:[t.jsxs("div",{className:"panel-header",children:[t.jsx("span",{className:"panel-title",children:r("commands")}),t.jsxs("div",{className:"panel-header-actions",children:[t.jsx("button",{type:"button",className:"panel-refresh",title:r("rerun"),onClick:()=>n({type:"list_commands"}),children:t.jsx(O,{})}),t.jsx("button",{type:"button",className:"panel-new",title:r("newCommand"),onClick:F,children:t.jsx(R,{})})]})]}),t.jsx("div",{className:"panel-body",children:I?t.jsxs("div",{className:"cmd-form",children:[t.jsx("label",{htmlFor:"cmd-name",children:r("name")}),t.jsx("input",{id:"cmd-name",className:"cmd-input",value:l.name,placeholder:r("exampleName"),autoFocus:!0,onChange:e=>x({...l,name:e.target.value})}),t.jsx("label",{htmlFor:"cmd-command",children:r("command")}),t.jsx("input",{id:"cmd-command",className:"cmd-input",value:l.command,placeholder:r("exampleCommand"),onChange:e=>x({...l,command:e.target.value}),onKeyDown:e=>{e.key==="Enter"&&!e.nativeEvent.isComposing&&S()}}),t.jsxs("label",{htmlFor:"cmd-cwd",children:[r("directory")," ",t.jsx("span",{className:"cmd-hint",children:r("cwdHint")})]}),t.jsx("input",{id:"cmd-cwd",className:"cmd-input",value:l.cwd,placeholder:"${pwd}",onChange:e=>x({...l,cwd:e.target.value}),onKeyDown:e=>{e.key==="Enter"&&!e.nativeEvent.isComposing&&S()}}),t.jsxs("div",{className:"cmd-form-actions",children:[t.jsx("button",{type:"button",className:"btn",onClick:D,children:r("cancel")}),t.jsx("button",{type:"button",className:"btn primary",disabled:!l.name.trim()||!l.command.trim(),onClick:S,children:r("save")})]})]}):t.jsxs(t.Fragment,{children:[s.commands.length===0&&t.jsx("div",{className:"panel-empty",children:r("noCommands")}),s.commands.map((e,i)=>t.jsxs("div",{className:"cmd-item",children:[t.jsx("button",{type:"button",className:"cmd-run",title:r("clickToRun"),onClick:()=>m(e),children:t.jsx(P,{})}),t.jsxs("button",{type:"button",className:"cmd-main",title:r("clickToRun"),onClick:()=>m(e),children:[t.jsx("span",{className:"cmd-name",children:e.name}),t.jsx("span",{className:"cmd-command",children:e.command}),e.cwd&&t.jsx("span",{className:"cmd-cwd",children:e.cwd})]}),t.jsx("button",{type:"button",className:"cmd-act",title:r("edit"),onClick:()=>k(i),children:t.jsx(q,{})}),t.jsx("button",{type:"button",className:`cmd-act del ${v===i?"confirm":""}`,title:r("delete"),onClick:()=>M(i),children:v===i?r("confirmQ"):t.jsx(L,{})})]},i))]})}),t.jsxs("div",{className:"term-tabs-block",children:[t.jsxs("div",{className:"panel-header",children:[t.jsx("span",{className:"panel-title",children:r("terminal")}),t.jsx("button",{type:"button",className:"panel-new",title:r("newTerminal"),onClick:w,children:t.jsx(R,{})})]}),t.jsxs("div",{className:"panel-body",children:[s.terminals.length===0&&t.jsx("div",{className:"panel-empty",children:r("noTerminal")}),s.terminals.map(e=>t.jsxs("div",{className:`term-tab ${e.id===p?"active":""}`,children:[t.jsxs("button",{type:"button",className:"term-tab-main",title:`${e.cwd}${e.command?`
2
2
  > ${e.command.command}`:""}`,onClick:()=>{o(e.id),g(!1)},children:[t.jsx("span",{className:`term-tab-dot ${e.running?"run":"exit"}`}),t.jsxs("span",{className:"term-tab-title",children:[e.title,!e.running&&t.jsx("span",{className:"term-tab-exit",children:r("exited",{code:e.exitCode===null?"":` ${e.exitCode}`})})]})]}),t.jsx("button",{type:"button",className:"term-tab-close",title:r("closeTerminal"),onClick:()=>E(e.id),children:t.jsx(G,{})})]},e.id))]})]})]}),t.jsxs("div",{className:"term-main",children:[j&&t.jsx("div",{className:"drawer-backdrop",onClick:()=>g(!1)}),t.jsx("button",{type:"button",className:"term-side-toggle",title:r("commands"),onClick:()=>g(e=>!e),children:t.jsx(J,{})}),s.terminals.length===0?t.jsxs("div",{className:"term-empty",children:[t.jsx(V,{className:"term-empty-icon"}),t.jsx("div",{className:"term-empty-title",children:r("builtinTerminal")}),t.jsx("div",{className:"term-empty-sub",children:r("termEmptySub")})]}):s.terminals.map(e=>t.jsx(Q,{conversationId:e.conversationId,terminalId:e.id,command:e.command,cwd:e.cwd,active:e.id===p,send:n,register:f.register},`${e.conversationId}:${e.id}`))]})]})}export{ne as TerminalPanel};
@@ -1 +1 @@
1
- import{g as p,r as u,d as a}from"./chunk-SVP7TREG-CmDIvX-r.js";import{p as f}from"./chunk-JWPE2WC7-DIQ8iZN5.js";import{_ as n,l as o}from"./mermaid.core-CCiG-bOm.js";import{M as c,b as d}from"./cynefin-OW5HDTMX-fWdqaCpX.js";import"./index-CniHcFxT.js";import"./markdown-CUPbftfV.js";import"./react-ZkKJMDQQ.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},I={parser:R,db:a,renderer:u,styles:p};export{I as diagram};
1
+ import{g as p,r as u,d as a}from"./chunk-SVP7TREG-B4gluy_M.js";import{p as f}from"./chunk-JWPE2WC7-Bp8exp_9.js";import{_ as n,l as o}from"./mermaid.core-BqE9WdEq.js";import{M as c,b as d}from"./cynefin-OW5HDTMX-jCEkLFdf.js";import"./index-BeCUh6J7.js";import"./markdown-CUPbftfV.js";import"./react-ZkKJMDQQ.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},I={parser:R,db:a,renderer:u,styles:p};export{I as diagram};
@@ -1 +1 @@
1
- import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./mermaid.core-CCiG-bOm.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(fn(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)-an,c=A.apply(this,arguments)-an,F=un(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=_(un(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<rn)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(on((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-rn/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};
1
+ import{a0 as ln,a1 as an,a2 as y,a3 as tn,a4 as H,a5 as q,a6 as _,a7 as un,a8 as rn,a9 as L,aa as o,ab as B,ac as sn,ad as on,ae as fn}from"./mermaid.core-BqE9WdEq.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(fn(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)-an,c=A.apply(this,arguments)-an,F=un(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=_(un(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<rn)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(on((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-rn/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};