pi-web-ui 0.90.1 → 0.92.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/CHANGELOG.md +81 -1
- package/bin/pi-web-ui.mjs +21 -2
- package/dist/server/agent-service.js +1206 -106
- package/dist/server/claim-files-tool.js +116 -0
- package/dist/server/claim-store.js +301 -0
- package/dist/server/client-state.js +119 -5
- package/dist/server/compaction-markers.js +287 -0
- package/dist/server/conversation-read-tool.js +369 -27
- package/dist/server/conversation-touches.js +357 -0
- package/dist/server/delegate-task.js +12 -1
- package/dist/server/dsh/dsh-agent-service.js +28 -1
- package/dist/server/file-transfer-routes.js +4 -1
- package/dist/server/icon-svg.js +35 -0
- package/dist/server/index.js +152 -34
- package/dist/server/model-admin.js +124 -2
- package/dist/server/model-enrich.js +478 -0
- package/dist/server/plugin-catalog.js +5 -0
- package/dist/server/plugin-facilities.js +42 -11
- package/dist/server/plugin-schedule.js +27 -2
- package/dist/server/plugins.js +112 -18
- package/dist/server/present-files-tool.js +303 -0
- package/dist/server/prompt-composer.js +1 -1
- package/dist/server/protocol-version.js +1 -1
- package/dist/server/read-tool.js +91 -0
- package/dist/server/schedule-agent-tool.js +23 -5
- package/dist/server/scheduler-tasks.js +60 -1
- package/dist/server/scm-commitmsg.js +140 -0
- package/dist/server/scm.js +42 -0
- package/dist/server/serialize.js +21 -1
- package/dist/server/settings-service.js +47 -0
- package/dist/server/skill-tool.js +120 -0
- package/dist/server/soft-cap.js +68 -0
- package/dist/server/subagent-templates.js +6 -0
- package/dist/server/subagents.js +157 -16
- package/dist/server/text-sniff.js +15 -0
- package/dist/server/themes.js +17 -2
- package/dist/server/tool-manager.js +13 -1
- package/package.json +2 -1
- package/plugin-sdk/README.md +1 -0
- package/plugins/catalog.json +20 -0
- package/themes/catppuccin-latte.css +136 -0
- package/themes/catppuccin.css +140 -0
- package/themes/nord.css +130 -0
- package/themes/one-dark.css +131 -0
- package/themes/paper.css +12 -12
- package/themes/solarized-light.css +131 -0
- package/themes/tokyo-night.css +140 -0
- package/web/dist/assets/{TerminalPanel-CkxM4Byl.js → TerminalPanel-RACpk6AX.js} +1 -1
- package/web/dist/assets/es-DIDZppIF.js +2 -0
- package/web/dist/assets/index-BgrnP9Jz.js +364 -0
- package/web/dist/assets/index-Cy8dSTZt.css +1 -0
- package/web/dist/index.html +2 -2
- package/web/dist/assets/index-DJIV4A-t.js +0 -355
- package/web/dist/assets/index-DLdcRBs_.css +0 -1
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/* theme-name: 日照浅色 */
|
|
2
|
+
/* theme-name-en: Solarized Light */
|
|
3
|
+
/* theme-group: classic */
|
|
4
|
+
:root {
|
|
5
|
+
color-scheme: light;
|
|
6
|
+
--bg: #fdf6e3;
|
|
7
|
+
--bg-elev: #eee8d5;
|
|
8
|
+
--bg-elev2: #e0d8be;
|
|
9
|
+
--border: #d5cbab;
|
|
10
|
+
--border-soft: #e0d8be;
|
|
11
|
+
--text: #586e75;
|
|
12
|
+
--text-dim: #657b83;
|
|
13
|
+
--text-faint: #839496;
|
|
14
|
+
--accent: #268bd2;
|
|
15
|
+
--accent-soft: rgba(38, 139, 210, 0.12);
|
|
16
|
+
--green: #859900;
|
|
17
|
+
--green-soft: rgba(133, 153, 0, 0.12);
|
|
18
|
+
--red: #dc322f;
|
|
19
|
+
--red-soft: rgba(220, 50, 47, 0.1);
|
|
20
|
+
--amber: #b58900;
|
|
21
|
+
--term-bg: #fdf6e3;
|
|
22
|
+
--term-fg: #586e75;
|
|
23
|
+
--term-cursor: #586e75;
|
|
24
|
+
--term-cursor-accent: #fdf6e3;
|
|
25
|
+
--term-selection: rgba(7, 54, 66, 0.18);
|
|
26
|
+
--term-black: #073642;
|
|
27
|
+
--term-red: #dc322f;
|
|
28
|
+
--term-green: #859900;
|
|
29
|
+
--term-yellow: #b58900;
|
|
30
|
+
--term-blue: #268bd2;
|
|
31
|
+
--term-magenta: #d33682;
|
|
32
|
+
--term-cyan: #2aa198;
|
|
33
|
+
--term-white: #eee8d5;
|
|
34
|
+
--term-bright-black: #586e75;
|
|
35
|
+
--term-bright-red: #cb4b16;
|
|
36
|
+
--term-bright-green: #859900;
|
|
37
|
+
--term-bright-yellow: #b58900;
|
|
38
|
+
--term-bright-blue: #268bd2;
|
|
39
|
+
--term-bright-magenta: #6c71c4;
|
|
40
|
+
--term-bright-cyan: #2aa198;
|
|
41
|
+
--term-bright-white: #fdf6e3;
|
|
42
|
+
--mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
|
|
43
|
+
--mermaid-font-size: 12px;
|
|
44
|
+
--tooltip-bg: #fdf6e3;
|
|
45
|
+
--code-bg: #eee8d5;
|
|
46
|
+
--code-text: #586e75;
|
|
47
|
+
--code-border: var(--border-soft);
|
|
48
|
+
--code-pad: 8px 10px;
|
|
49
|
+
--card-body-pad: 4px 14px 12px;
|
|
50
|
+
--err-text: #dc322f;
|
|
51
|
+
--red-text: #dc322f;
|
|
52
|
+
--amber-text: #b58900;
|
|
53
|
+
--info-blue: #2aa198;
|
|
54
|
+
--link: #268bd2;
|
|
55
|
+
--link-hover: #2aa198;
|
|
56
|
+
--link-soft: #268bd2;
|
|
57
|
+
--md-strong: #073642;
|
|
58
|
+
--skill-blue: #268bd2;
|
|
59
|
+
--plugin-purple: #b58cff;
|
|
60
|
+
--auth-green: #859900;
|
|
61
|
+
--scroll-thumb: #d5cbab;
|
|
62
|
+
--scroll-thumb-hover: #b7a982;
|
|
63
|
+
--notice-err-bg: #401d23;
|
|
64
|
+
--notice-warn-bg: #38251f;
|
|
65
|
+
--notice-info-bg: #1b2544;
|
|
66
|
+
--notice-err-border: #ef4444;
|
|
67
|
+
--notice-warn-border: #f59e0b;
|
|
68
|
+
--notice-info-border: #3b82f6;
|
|
69
|
+
--send-blue: #268bd2;
|
|
70
|
+
--send-blue-hover: #2aa198;
|
|
71
|
+
--brand-grad-a: #268bd2;
|
|
72
|
+
--brand-grad-b: #2aa198;
|
|
73
|
+
--on-amber: #1a1a1a;
|
|
74
|
+
--search-active-fg: #1a1d26;
|
|
75
|
+
--switch-knob: #ffffff;
|
|
76
|
+
--bg-elev3: rgba(255, 255, 255, 0.06);
|
|
77
|
+
--sunken-bg: rgba(0, 0, 0, 0.15);
|
|
78
|
+
--glow-015: rgba(255, 255, 255, 0.015);
|
|
79
|
+
--glow-025: rgba(255, 255, 255, 0.025);
|
|
80
|
+
--glow-03: rgba(255, 255, 255, 0.03);
|
|
81
|
+
--glow-04: rgba(255, 255, 255, 0.04);
|
|
82
|
+
--glow-05: rgba(255, 255, 255, 0.05);
|
|
83
|
+
--glow-12: rgba(255, 255, 255, 0.12);
|
|
84
|
+
--glow-18: rgba(255, 255, 255, 0.18);
|
|
85
|
+
--glow-22: rgba(255, 255, 255, 0.22);
|
|
86
|
+
--glow-38: rgba(255, 255, 255, 0.38);
|
|
87
|
+
--control-fg: #657b83;
|
|
88
|
+
--control-bg: #eee8d5;
|
|
89
|
+
--control-border: #d5cbab;
|
|
90
|
+
--bg-image: none;
|
|
91
|
+
--bg-image-dim: 0.78;
|
|
92
|
+
--bg-image-blur: 0px;
|
|
93
|
+
--wallpaper-panel-alpha: 100%;
|
|
94
|
+
--topbar-bg: #eee8d5;
|
|
95
|
+
--statusbar-bg: #eee8d5;
|
|
96
|
+
--panel-bg: #eee8d5;
|
|
97
|
+
--card-bg: #eee8d5;
|
|
98
|
+
--chip-bg: #e0d8be;
|
|
99
|
+
--msgs-bg: #fdf6e3;
|
|
100
|
+
--inputbox-bg: #e0d8be;
|
|
101
|
+
--menu-bg: var(--bg-elev2);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* ---- syntax highlighting (Solarized Light) ---- */
|
|
105
|
+
.hljs {
|
|
106
|
+
color: #586e75;
|
|
107
|
+
background: #eee8d5;
|
|
108
|
+
}
|
|
109
|
+
.hljs-keyword,
|
|
110
|
+
.hljs-meta .hljs-keyword {
|
|
111
|
+
color: #859900;
|
|
112
|
+
}
|
|
113
|
+
.hljs-title,
|
|
114
|
+
.hljs-title.function_ {
|
|
115
|
+
color: #268bd2;
|
|
116
|
+
}
|
|
117
|
+
.hljs-number,
|
|
118
|
+
.hljs-literal {
|
|
119
|
+
color: #d33682;
|
|
120
|
+
}
|
|
121
|
+
.hljs-string {
|
|
122
|
+
color: #2aa198;
|
|
123
|
+
}
|
|
124
|
+
.hljs-built_in,
|
|
125
|
+
.hljs-type {
|
|
126
|
+
color: #b58900;
|
|
127
|
+
}
|
|
128
|
+
.hljs-comment {
|
|
129
|
+
color: #93a1a1;
|
|
130
|
+
font-style: italic;
|
|
131
|
+
}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
/* theme-name: 东京之夜 */
|
|
2
|
+
/* theme-name-en: Tokyo Night */
|
|
3
|
+
/* theme-group: classic */
|
|
4
|
+
:root {
|
|
5
|
+
color-scheme: dark;
|
|
6
|
+
--bg: #1a1b26;
|
|
7
|
+
--bg-elev: #24283b;
|
|
8
|
+
--bg-elev2: #1f2335;
|
|
9
|
+
--border: #414868;
|
|
10
|
+
--border-soft: #292e42;
|
|
11
|
+
--text: #c0caf5;
|
|
12
|
+
--text-dim: #9aa5ce;
|
|
13
|
+
--text-faint: #565f89;
|
|
14
|
+
--accent: #7aa2f7;
|
|
15
|
+
--accent-soft: rgba(122, 162, 247, 0.14);
|
|
16
|
+
--green: #9ece6a;
|
|
17
|
+
--green-soft: rgba(158, 206, 106, 0.12);
|
|
18
|
+
--red: #f7768e;
|
|
19
|
+
--red-soft: rgba(247, 118, 142, 0.12);
|
|
20
|
+
--amber: #e0af68;
|
|
21
|
+
--term-bg: #16161e;
|
|
22
|
+
--term-fg: #c0caf5;
|
|
23
|
+
--term-cursor: #c0caf5;
|
|
24
|
+
--term-cursor-accent: #16161e;
|
|
25
|
+
--term-selection: rgba(81, 92, 138, 0.4);
|
|
26
|
+
--term-black: #414868;
|
|
27
|
+
--term-red: #f7768e;
|
|
28
|
+
--term-green: #9ece6a;
|
|
29
|
+
--term-yellow: #e0af68;
|
|
30
|
+
--term-blue: #7aa2f7;
|
|
31
|
+
--term-magenta: #bb9af7;
|
|
32
|
+
--term-cyan: #7dcfff;
|
|
33
|
+
--term-white: #a9b1d6;
|
|
34
|
+
--term-bright-black: #565f89;
|
|
35
|
+
--term-bright-red: #f7768e;
|
|
36
|
+
--term-bright-green: #9ece6a;
|
|
37
|
+
--term-bright-yellow: #e0af68;
|
|
38
|
+
--term-bright-blue: #7aa2f7;
|
|
39
|
+
--term-bright-magenta: #bb9af7;
|
|
40
|
+
--term-bright-cyan: #7dcfff;
|
|
41
|
+
--term-bright-white: #c0caf5;
|
|
42
|
+
--mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
|
|
43
|
+
--mermaid-font-size: 12px;
|
|
44
|
+
--tooltip-bg: #24283b;
|
|
45
|
+
--code-bg: #16161e;
|
|
46
|
+
--code-text: #c0caf5;
|
|
47
|
+
--code-border: var(--border-soft);
|
|
48
|
+
--code-pad: 8px 10px;
|
|
49
|
+
--card-body-pad: 4px 14px 12px;
|
|
50
|
+
--err-text: #f7768e;
|
|
51
|
+
--red-text: #f7768e;
|
|
52
|
+
--amber-text: #e0af68;
|
|
53
|
+
--info-blue: #7dcfff;
|
|
54
|
+
--link: #7aa2f7;
|
|
55
|
+
--link-hover: #89ddff;
|
|
56
|
+
--link-soft: #7aa2f7;
|
|
57
|
+
--md-strong: #c0caf5;
|
|
58
|
+
--skill-blue: #7aa2f7;
|
|
59
|
+
--plugin-purple: #b58cff;
|
|
60
|
+
--auth-green: #9ece6a;
|
|
61
|
+
--scroll-thumb: #3b4261;
|
|
62
|
+
--scroll-thumb-hover: #565f89;
|
|
63
|
+
--notice-err-bg: #401d23;
|
|
64
|
+
--notice-warn-bg: #38251f;
|
|
65
|
+
--notice-info-bg: #1b2544;
|
|
66
|
+
--notice-err-border: #ef4444;
|
|
67
|
+
--notice-warn-border: #f59e0b;
|
|
68
|
+
--notice-info-border: #3b82f6;
|
|
69
|
+
--send-blue: #7aa2f7;
|
|
70
|
+
--send-blue-hover: #89ddff;
|
|
71
|
+
--brand-grad-a: #7aa2f7;
|
|
72
|
+
--brand-grad-b: #bb9af7;
|
|
73
|
+
--on-amber: #1a1a1a;
|
|
74
|
+
--search-active-fg: #1a1d26;
|
|
75
|
+
--switch-knob: #ffffff;
|
|
76
|
+
--bg-elev3: rgba(255, 255, 255, 0.06);
|
|
77
|
+
--sunken-bg: rgba(0, 0, 0, 0.15);
|
|
78
|
+
--glow-015: rgba(255, 255, 255, 0.015);
|
|
79
|
+
--glow-025: rgba(255, 255, 255, 0.025);
|
|
80
|
+
--glow-03: rgba(255, 255, 255, 0.03);
|
|
81
|
+
--glow-04: rgba(255, 255, 255, 0.04);
|
|
82
|
+
--glow-05: rgba(255, 255, 255, 0.05);
|
|
83
|
+
--glow-12: rgba(255, 255, 255, 0.12);
|
|
84
|
+
--glow-18: rgba(255, 255, 255, 0.18);
|
|
85
|
+
--glow-22: rgba(255, 255, 255, 0.22);
|
|
86
|
+
--glow-38: rgba(255, 255, 255, 0.38);
|
|
87
|
+
--control-fg: #9aa5ce;
|
|
88
|
+
--control-bg: #24283b;
|
|
89
|
+
--control-border: #414868;
|
|
90
|
+
--bg-image: none;
|
|
91
|
+
--bg-image-dim: 0.78;
|
|
92
|
+
--bg-image-blur: 0px;
|
|
93
|
+
--wallpaper-panel-alpha: 100%;
|
|
94
|
+
--topbar-bg: #24283b;
|
|
95
|
+
--statusbar-bg: #16161e;
|
|
96
|
+
--panel-bg: #24283b;
|
|
97
|
+
--card-bg: #24283b;
|
|
98
|
+
--chip-bg: #1f2335;
|
|
99
|
+
--msgs-bg: #1a1b26;
|
|
100
|
+
--inputbox-bg: #1f2335;
|
|
101
|
+
--menu-bg: var(--bg-elev2);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/* ---- syntax highlighting (Tokyo Night) ---- */
|
|
105
|
+
.hljs {
|
|
106
|
+
color: #c0caf5;
|
|
107
|
+
background: #16161e;
|
|
108
|
+
}
|
|
109
|
+
.hljs-doctag,
|
|
110
|
+
.hljs-keyword,
|
|
111
|
+
.hljs-meta .hljs-keyword {
|
|
112
|
+
color: #bb9af7;
|
|
113
|
+
}
|
|
114
|
+
.hljs-title,
|
|
115
|
+
.hljs-title.class_,
|
|
116
|
+
.hljs-title.function_ {
|
|
117
|
+
color: #7aa2f7;
|
|
118
|
+
}
|
|
119
|
+
.hljs-attr,
|
|
120
|
+
.hljs-attribute,
|
|
121
|
+
.hljs-literal,
|
|
122
|
+
.hljs-number {
|
|
123
|
+
color: #ff9e64;
|
|
124
|
+
}
|
|
125
|
+
.hljs-string,
|
|
126
|
+
.hljs-regexp {
|
|
127
|
+
color: #9ece6a;
|
|
128
|
+
}
|
|
129
|
+
.hljs-built_in,
|
|
130
|
+
.hljs-type {
|
|
131
|
+
color: #2ac3de;
|
|
132
|
+
}
|
|
133
|
+
.hljs-comment,
|
|
134
|
+
.hljs-code {
|
|
135
|
+
color: #565f89;
|
|
136
|
+
}
|
|
137
|
+
.hljs-tag,
|
|
138
|
+
.hljs-name {
|
|
139
|
+
color: #7dcfff;
|
|
140
|
+
}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-CR5VJ85Q.js";import{a as r,c as i,d as a,f as o,g as s,h as c,i as l,l as u,m as d,o as f,p,r as m,s as h,t as g,u as _}from"./index-
|
|
1
|
+
import{r as e}from"./rolldown-runtime-hePW80VL.js";import{i as t,t as n}from"./react-CR5VJ85Q.js";import{a as r,c as i,d as a,f as o,g as s,h as c,i as l,l as u,m as d,o as f,p,r as m,s as h,t as g,u as _}from"./index-BgrnP9Jz.js";import{n as v,t as y}from"./xterm-Cf5xxe4g.js";var b=e(t(),1);function x(e,t){return Math.abs(t)>10&&Math.abs(t)>Math.abs(e)*1.2}function S(e,t){return e-t}var C=n();function w(e){let t=null;return{clean:e.replace(/\r?\n?\[pi-term-exit:(-?\d+)\]\r?\n?/g,(e,n)=>(t=Number(n),`\r
|
|
2
2
|
`)).replace(/\r?\n?\x1b\[90m\[(?:进程已退出,退出码 |Process exited with code )-?\d+\]\x1b\[0m\r?\n?/g,`\r
|
|
3
3
|
`),exitCode:t}}function T({conversationId:e,terminalId:t,command:n,cwd:i,title:a,agentBash:o,active:s,running:c,exitCode:u,register:d}){let p=(0,b.useRef)(null),h=(0,b.useRef)(null),{locale:g}=f(),_=(0,b.useRef)(g);_.current=g;let T=n?JSON.stringify(n):``,E=(0,b.useRef)(c===!1);(0,b.useEffect)(()=>{let c=p.current;if(!c)return;let u=new v({theme:l(),fontFamily:`"SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace`,fontSize:13,cursorBlink:!0,scrollback:8e3}),f=new y;u.loadAddon(f),u.open(c),h.current={term:u,fit:f},s&&u.focus();let g=()=>{u.options.theme=l()};window.addEventListener(m,g),u.attachCustomKeyEventHandler(e=>{if(e.type!==`keydown`)return!0;let t=e.key?.toLowerCase();if((e.ctrlKey||e.metaKey)&&t===`v`)return!1;if(e.ctrlKey&&!e.shiftKey&&!e.altKey&&t===`c`&&u.hasSelection()){let e=u.textarea;return e&&(e.value=u.getSelection(),e.select()),!1}return!0});let b=d(e,t,{write:e=>u.write(w(e).clean),dispose:()=>u.dispose()}),C=()=>{try{f.fit(),r({type:`terminal_resize`,terminalId:t,conversationId:e,cols:u.cols,rows:u.rows})}catch{}},T=requestAnimationFrame(()=>{try{f.fit()}catch{}E.current||r(n?{type:`run_command`,terminalId:t,conversationId:e,command:n,cols:u.cols,rows:u.rows}:{type:`terminal_create`,terminalId:t,title:a,locale:_.current,agentBash:o,conversationId:e,cwd:i,cols:u.cols,rows:u.rows})}),D=u.onData(n=>{r({type:`terminal_input`,terminalId:t,conversationId:e,data:n})}),O=u.element,k=null,A=0,j=0,M=0,N=!1,P=e=>{if(e.touches.length!==1){k=null,N=!1;return}let t=e.touches[0];k=t.identifier,A=t.clientX,j=t.clientY,M=t.clientY,N=!1},F=e=>{if(k===null||e.touches.length!==1)return;let t=e.touches[0];if(t.identifier!==k)return;if(!N){if(!x(t.clientX-A,t.clientY-j))return;N=!0}e.preventDefault();let n=S(M,t.clientY);M=t.clientY,n!==0&&typeof WheelEvent<`u`&&(c.querySelector(`.xterm-viewport`)??O)?.dispatchEvent(new WheelEvent(`wheel`,{bubbles:!0,cancelable:!0,deltaY:n,deltaMode:0,clientX:t.clientX,clientY:t.clientY}))},I=e=>{if(k!==null){if(e.touches.length>0){k=null,N=!1;return}k=null,N=!1}};O?.addEventListener(`touchstart`,P,{passive:!0}),O?.addEventListener(`touchmove`,F,{passive:!1}),O?.addEventListener(`touchend`,I),O?.addEventListener(`touchcancel`,I);let L=null;return typeof ResizeObserver<`u`&&(L=new ResizeObserver(()=>{c.offsetWidth>0&&c.offsetHeight>0&&C()}),L.observe(c)),()=>{cancelAnimationFrame(T),D.dispose(),O?.removeEventListener(`touchstart`,P),O?.removeEventListener(`touchmove`,F),O?.removeEventListener(`touchend`,I),O?.removeEventListener(`touchcancel`,I),window.removeEventListener(m,g),L?.disconnect(),b(),u.dispose(),h.current=null}},[e,t,T,d]),(0,b.useEffect)(()=>{if(!s)return;let n=requestAnimationFrame(()=>{let n=h.current;if(n){try{n.fit.fit(),r({type:`terminal_resize`,terminalId:t,conversationId:e,cols:n.term.cols,rows:n.term.rows})}catch{}n.term.focus()}});return()=>cancelAnimationFrame(n)},[s]);let{t:D}=f(),O=(0,b.useRef)(void 0);return(0,b.useEffect)(()=>{if(c===O.current||(O.current=c,c!==!1))return;let e=h.current;e&&e.term.write(`\r\n\x1b[90m${D(`exitBanner`,{code:u??``})}\x1b[0m\r\n`)},[c,t,u]),(0,C.jsx)(`div`,{ref:p,className:`term-xterm ${s?``:`hidden`}`})}var E={name:``,command:``,cwd:"${pwd}"};function D({chat:e,terminal:t,uiTerminalToolbar:n,onUiAction:l}){let f=h(),[m,v]=(0,b.useState)(null),[y,x]=(0,b.useState)(!1),[S,w]=(0,b.useState)(!1),[D,O]=(0,b.useState)(null),[k,A]=(0,b.useState)(E),[j,M]=(0,b.useState)(null),N=(0,b.useRef)(null),[P,F]=(0,b.useState)(!0),[I,L]=(0,b.useState)(null),[R,z]=(0,b.useState)(``);(0,b.useEffect)(()=>{e.terminals.length===0?v(null):e.terminals.some(e=>e.id===m)||v(e.terminals[e.terminals.length-1].id)},[e.terminals,m]),(0,b.useEffect)(()=>{e.terminalActiveId&&(v(e.terminalActiveId),x(!1))},[e.terminalActiveId]),(0,b.useEffect)(()=>()=>{N.current&&clearTimeout(N.current)},[]);let B=e.terminals.filter(e=>!e.agentBash),V=e.terminals.filter(e=>e.agentBash),H=n=>{if(!e.ready)return;let r=i(),a=e.activeConversationId||e.state?.conversationId||``;t.create({...n,id:r,conversationId:a,cols:n.cols??80,rows:n.rows??24,running:!0,exitCode:null}),v(r),x(!1)},U=()=>H({title:f(`terminalTitle`,{n:B.length+1}),cwd:e.state?.cwd??``}),W=n=>{let i=n.name||n.command,a=e.terminals.find(e=>e.title===i);if(a){t.restart(a.id),v(a.id),r({type:`run_command`,terminalId:a.id,conversationId:a.conversationId,command:n,cols:80,rows:24});return}H({title:i,cwd:e.state?.cwd??``,command:n})},G=n=>{let i=e.terminals.find(e=>e.id===n);if(i&&r({type:`terminal_kill`,terminalId:n,conversationId:i.conversationId}),t.close(n),m===n){let t=e.terminals.filter(e=>e.id!==n);v(t.length>0?t[t.length-1].id:null)}},K=e=>(0,C.jsxs)(`div`,{className:`term-tab ${e.id===m?`active`:``}`,children:[(0,C.jsxs)(`button`,{type:`button`,className:`term-tab-main`,title:`${e.cwd}${e.command?`\n> ${e.command.command}`:``}`,onClick:()=>{I||(v(e.id),x(!1))},children:[(0,C.jsx)(`span`,{className:`term-tab-dot ${e.running?`run`:`exit`}`}),(0,C.jsxs)(`span`,{className:`term-tab-title`,children:[I===e.id?(0,C.jsx)(`input`,{autoFocus:!0,className:`term-tab-rename-input`,value:R,placeholder:e.title,onClick:e=>e.stopPropagation(),onChange:e=>z(e.target.value),onKeyDown:t=>{if(t.stopPropagation(),t.key===`Enter`&&!t.nativeEvent.isComposing){let t=R.trim();t&&r({type:`rename_terminal`,terminalId:e.id,conversationId:e.conversationId,title:t}),L(null)}else t.key===`Escape`&&L(null)},onBlur:()=>L(null)}):e.title,!e.running&&(0,C.jsx)(`span`,{className:`term-tab-exit`,children:f(`exited`,{code:e.exitCode===null?``:` ${e.exitCode}`})})]})]}),(0,C.jsx)(`button`,{type:`button`,className:`term-tab-close term-tab-rename`,title:f(`renameTerminal`),onClick:t=>{t.stopPropagation(),z(e.title),L(e.id)},children:(0,C.jsx)(u,{})}),(0,C.jsx)(`button`,{type:`button`,className:`term-tab-close`,title:f(`closeTerminal`),onClick:()=>G(e.id),children:(0,C.jsx)(s,{})})]},e.id),q=()=>{w(!0),O(null),A(E)},J=t=>{let n=e.commands[t];n&&(w(!1),O(t),A({name:n.name,command:n.command,cwd:n.cwd??``}))},Y=()=>{w(!1),O(null)},X=()=>{let t=k.name.trim(),n=k.command.trim();if(!t||!n)return;let i={name:t,command:n,cwd:k.cwd.trim()||void 0},a=S?[...e.commands,i]:D===null?e.commands:e.commands.map((e,t)=>t===D?i:e);r({type:`save_commands`,commands:a}),Y()},Z=t=>{if(j===t){let n=e.commands.filter((e,n)=>n!==t);r({type:`save_commands`,commands:n}),M(null),N.current&&clearTimeout(N.current)}else M(t),N.current&&clearTimeout(N.current),N.current=setTimeout(()=>M(null),2500)},ee=S||D!==null,te=n===void 0?[`host:term-cmd-refresh`,`host:term-cmd-new`,`host:term-tab-new`].map(e=>({id:e,source:`host`})):n.filter(e=>!e.hidden),Q=(e,t)=>{let n=new Set(e);return te.filter(e=>n.has(e.id)||t&&e.source!==`host`)},$={"host:term-cmd-refresh":(0,C.jsx)(`button`,{type:`button`,className:`panel-refresh`,title:f(`rerun`),onClick:()=>r({type:`list_commands`}),children:(0,C.jsx)(p,{})}),"host:term-cmd-new":(0,C.jsx)(`button`,{type:`button`,className:`panel-new`,title:f(`newCommand`),onClick:q,children:(0,C.jsx)(o,{})}),"host:term-tab-new":(0,C.jsx)(`button`,{type:`button`,className:`panel-new`,title:f(`newTerminal`),onClick:U,children:(0,C.jsx)(o,{})})};return(0,C.jsxs)(`div`,{className:`terminal-view`,children:[(0,C.jsxs)(`aside`,{className:`term-side term-commands ${y?`open`:``}`,children:[(0,C.jsxs)(`div`,{className:`panel-header`,children:[(0,C.jsx)(`span`,{className:`panel-title`,children:f(`commands`)}),(0,C.jsx)(`div`,{className:`panel-header-actions`,children:g(Q([`host:term-cmd-refresh`,`host:term-cmd-new`],!1),$,l)})]}),(0,C.jsx)(`div`,{className:`panel-body`,children:ee?(0,C.jsxs)(`div`,{className:`cmd-form`,children:[(0,C.jsx)(`label`,{htmlFor:`cmd-name`,children:f(`name`)}),(0,C.jsx)(`input`,{id:`cmd-name`,className:`cmd-input`,value:k.name,placeholder:f(`exampleName`),autoFocus:!0,onChange:e=>A({...k,name:e.target.value})}),(0,C.jsx)(`label`,{htmlFor:`cmd-command`,children:f(`command`)}),(0,C.jsx)(`input`,{id:`cmd-command`,className:`cmd-input`,value:k.command,placeholder:f(`exampleCommand`),onChange:e=>A({...k,command:e.target.value}),onKeyDown:e=>{e.key===`Enter`&&!e.nativeEvent.isComposing&&X()}}),(0,C.jsxs)(`label`,{htmlFor:`cmd-cwd`,children:[f(`directory`),` `,(0,C.jsx)(`span`,{className:`cmd-hint`,children:f(`cwdHint`)})]}),(0,C.jsx)(`input`,{id:`cmd-cwd`,className:`cmd-input`,value:k.cwd,placeholder:"${pwd}",onChange:e=>A({...k,cwd:e.target.value}),onKeyDown:e=>{e.key===`Enter`&&!e.nativeEvent.isComposing&&X()}}),(0,C.jsxs)(`div`,{className:`cmd-form-actions`,children:[(0,C.jsx)(`button`,{type:`button`,className:`btn`,onClick:Y,children:f(`cancel`)}),(0,C.jsx)(`button`,{type:`button`,className:`btn primary`,disabled:!k.name.trim()||!k.command.trim(),onClick:X,children:f(`save`)})]})]}):(0,C.jsxs)(C.Fragment,{children:[e.commands.length===0&&(0,C.jsx)(`div`,{className:`panel-empty`,children:f(`noCommands`)}),e.commands.map((e,t)=>(0,C.jsxs)(`div`,{className:`cmd-item`,children:[(0,C.jsx)(`button`,{type:`button`,className:`cmd-run`,title:f(`clickToRun`),onClick:()=>W(e),children:(0,C.jsx)(a,{})}),(0,C.jsxs)(`button`,{type:`button`,className:`cmd-main`,title:f(`clickToRun`),onClick:()=>W(e),children:[(0,C.jsx)(`span`,{className:`cmd-name`,children:e.name}),(0,C.jsx)(`span`,{className:`cmd-command`,children:e.command}),e.cwd&&(0,C.jsx)(`span`,{className:`cmd-cwd`,children:e.cwd})]}),(0,C.jsx)(`button`,{type:`button`,className:`cmd-act`,title:f(`edit`),onClick:()=>J(t),children:(0,C.jsx)(u,{})}),(0,C.jsx)(`button`,{type:`button`,className:`cmd-act del ${j===t?`confirm`:``}`,title:f(`delete`),onClick:()=>Z(t),children:j===t?f(`confirmQ`):(0,C.jsx)(c,{})})]},t))]})}),(0,C.jsxs)(`div`,{className:`term-tabs-block`,children:[(0,C.jsxs)(`div`,{className:`panel-header`,children:[(0,C.jsx)(`span`,{className:`panel-title`,children:f(`terminal`)}),g(Q([`host:term-tab-new`],!0),$,l)]}),(0,C.jsxs)(`div`,{className:`panel-body`,children:[e.terminals.length===0&&(0,C.jsx)(`div`,{className:`panel-empty`,children:f(`noTerminal`)}),B.map(K),V.length>0&&(0,C.jsxs)(`div`,{className:`term-folder`,children:[(0,C.jsxs)(`button`,{type:`button`,className:`term-folder-header ${P?`open`:``}`,title:f(`aiBashGroup`),onClick:()=>F(e=>!e),children:[(0,C.jsx)(`span`,{className:`term-folder-caret`,children:P?`▾`:`▸`}),(0,C.jsx)(`span`,{className:`term-folder-title`,children:f(`aiBashGroup`)}),(0,C.jsx)(`span`,{className:`term-folder-count`,children:V.length})]}),P&&(0,C.jsx)(`div`,{className:`term-folder-body`,children:V.map(K)})]})]})]})]}),(0,C.jsxs)(`div`,{className:`term-main`,children:[y&&(0,C.jsx)(`div`,{className:`drawer-backdrop`,onClick:()=>x(!1)}),(0,C.jsx)(`button`,{type:`button`,className:`term-side-toggle`,title:f(`commands`),onClick:()=>x(e=>!e),children:(0,C.jsx)(_,{})}),e.terminals.length===0?(0,C.jsxs)(`div`,{className:`term-empty`,children:[(0,C.jsx)(d,{className:`term-empty-icon`}),(0,C.jsx)(`div`,{className:`term-empty-title`,children:f(`builtinTerminal`)}),(0,C.jsx)(`div`,{className:`term-empty-sub`,children:f(`termEmptySub`)})]}):e.terminals.map(e=>(0,C.jsx)(T,{conversationId:e.conversationId,terminalId:e.id,command:e.command,cwd:e.cwd,title:e.title,agentBash:e.agentBash,active:e.id===m,running:e.running,exitCode:e.exitCode,register:t.register},`${e.conversationId}:${e.id}`))]})]})}export{D as TerminalPanel};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e,t){if(e.match(/^[a-z]+:\/\//i))return e;if(e.match(/^\/\//))return window.location.protocol+e;if(e.match(/^[a-z]+:/i))return e;let n=document.implementation.createHTMLDocument(),r=n.createElement(`base`),i=n.createElement(`a`);return n.head.appendChild(r),n.body.appendChild(i),t&&(r.href=t),i.href=e,i.href}var t=(()=>{let e=0,t=()=>`0000${(Math.random()*36**4<<0).toString(36)}`.slice(-4);return()=>(e+=1,`u${t()}${e}`)})();function n(e){let t=[];for(let n=0,r=e.length;n<r;n++)t.push(e[n]);return t}var r=null;function i(e={}){return r||(e.includeStyleProperties?(r=e.includeStyleProperties,r):(r=n(window.getComputedStyle(document.documentElement)),r))}function a(e,t){let n=(e.ownerDocument.defaultView||window).getComputedStyle(e).getPropertyValue(t);return n?parseFloat(n.replace(`px`,``)):0}function o(e){let t=a(e,`border-left-width`),n=a(e,`border-right-width`);return e.clientWidth+t+n}function s(e){let t=a(e,`border-top-width`),n=a(e,`border-bottom-width`);return e.clientHeight+t+n}function c(e,t={}){return{width:t.width||o(e),height:t.height||s(e)}}function ee(){let e,t;try{t=process}catch{}let n=t&&t.env?t.env.devicePixelRatio:null;return n&&(e=parseInt(n,10),Number.isNaN(e)&&(e=1)),e||window.devicePixelRatio||1}var l=16384;function te(e){(e.width>l||e.height>l)&&(e.width>l&&e.height>l?e.width>e.height?(e.height*=l/e.width,e.width=l):(e.width*=l/e.height,e.height=l):e.width>l?(e.height*=l/e.width,e.width=l):(e.width*=l/e.height,e.height=l))}function u(e,t={}){return e.toBlob?new Promise(n=>{e.toBlob(n,t.type?t.type:`image/png`,t.quality?t.quality:1)}):new Promise(n=>{let r=window.atob(e.toDataURL(t.type?t.type:void 0,t.quality?t.quality:void 0).split(`,`)[1]),i=r.length,a=new Uint8Array(i);for(let e=0;e<i;e+=1)a[e]=r.charCodeAt(e);n(new Blob([a],{type:t.type?t.type:`image/png`}))})}function d(e){return new Promise((t,n)=>{let r=new Image;r.onload=()=>{r.decode().then(()=>{requestAnimationFrame(()=>t(r))})},r.onerror=n,r.crossOrigin=`anonymous`,r.decoding=`async`,r.src=e})}async function f(e){return Promise.resolve().then(()=>new XMLSerializer().serializeToString(e)).then(encodeURIComponent).then(e=>`data:image/svg+xml;charset=utf-8,${e}`)}async function p(e,t,n){let r=`http://www.w3.org/2000/svg`,i=document.createElementNS(r,`svg`),a=document.createElementNS(r,`foreignObject`);return i.setAttribute(`width`,`${t}`),i.setAttribute(`height`,`${n}`),i.setAttribute(`viewBox`,`0 0 ${t} ${n}`),a.setAttribute(`width`,`100%`),a.setAttribute(`height`,`100%`),a.setAttribute(`x`,`0`),a.setAttribute(`y`,`0`),a.setAttribute(`externalResourcesRequired`,`true`),i.appendChild(a),a.appendChild(e),f(i)}var m=(e,t)=>{if(e instanceof t)return!0;let n=Object.getPrototypeOf(e);return n===null?!1:n.constructor.name===t.name||m(n,t)};function ne(e){let t=e.getPropertyValue(`content`);return`${e.cssText} content: '${t.replace(/'|"/g,``)}';`}function re(e,t){return i(t).map(t=>`${t}: ${e.getPropertyValue(t)}${e.getPropertyPriority(t)?` !important`:``};`).join(` `)}function ie(e,t,n,r){let i=`.${e}:${t}`,a=n.cssText?ne(n):re(n,r);return document.createTextNode(`${i}{${a}}`)}function h(e,n,r,i){let a=window.getComputedStyle(e,r),o=a.getPropertyValue(`content`);if(o===``||o===`none`)return;let s=t();try{n.className=`${n.className} ${s}`}catch{return}let c=document.createElement(`style`);c.appendChild(ie(s,r,a,i)),n.appendChild(c)}function ae(e,t,n){h(e,t,`:before`,n),h(e,t,`:after`,n)}var g=`application/font-woff`,_=`image/jpeg`,v={woff:g,woff2:g,ttf:`application/font-truetype`,eot:`application/vnd.ms-fontobject`,png:`image/png`,jpg:_,jpeg:_,gif:`image/gif`,tiff:`image/tiff`,svg:`image/svg+xml`,webp:`image/webp`};function y(e){let t=/\.([^./]*?)$/g.exec(e);return t?t[1]:``}function b(e){return v[y(e).toLowerCase()]||``}function oe(e){return e.split(/,/)[1]}function x(e){return e.search(/^(data:)/)!==-1}function S(e,t){return`data:${t};base64,${e}`}async function C(e,t,n){let r=await fetch(e,t);if(r.status===404)throw Error(`Resource "${r.url}" not found`);let i=await r.blob();return new Promise((e,t)=>{let a=new FileReader;a.onerror=t,a.onloadend=()=>{try{e(n({res:r,result:a.result}))}catch(e){t(e)}},a.readAsDataURL(i)})}var w={};function se(e,t,n){let r=e.replace(/\?.*/,``);return n&&(r=e),/ttf|otf|eot|woff2?/i.test(r)&&(r=r.replace(/.*\//,``)),t?`[${t}]${r}`:r}async function T(e,t,n){let r=se(e,t,n.includeQueryParams);if(w[r]!=null)return w[r];n.cacheBust&&(e+=(/\?/.test(e)?`&`:`?`)+new Date().getTime());let i;try{i=S(await C(e,n.fetchRequestInit,({res:e,result:n})=>(t||=e.headers.get(`Content-Type`)||``,oe(n))),t)}catch(t){i=n.imagePlaceholder||``;let r=`Failed to fetch resource: ${e}`;t&&(r=typeof t==`string`?t:t.message),r&&console.warn(r)}return w[r]=i,i}async function ce(e){let t=e.toDataURL();return t===`data:,`?e.cloneNode(!1):d(t)}async function le(e,t){if(e.currentSrc){let t=document.createElement(`canvas`),n=t.getContext(`2d`);return t.width=e.clientWidth,t.height=e.clientHeight,n?.drawImage(e,0,0,t.width,t.height),d(t.toDataURL())}let n=e.poster;return d(await T(n,b(n),t))}async function E(e,t){try{if(e?.contentDocument?.body)return await I(e.contentDocument.body,t,!0)}catch{}return e.cloneNode(!1)}async function D(e,t){return m(e,HTMLCanvasElement)?ce(e):m(e,HTMLVideoElement)?le(e,t):m(e,HTMLIFrameElement)?E(e,t):e.cloneNode(k(e))}var O=e=>e.tagName!=null&&e.tagName.toUpperCase()===`SLOT`,k=e=>e.tagName!=null&&e.tagName.toUpperCase()===`SVG`;async function A(e,t,r){if(k(t))return t;let i=[];return i=O(e)&&e.assignedNodes?n(e.assignedNodes()):m(e,HTMLIFrameElement)&&e.contentDocument?.body?n(e.contentDocument.body.childNodes):n((e.shadowRoot??e).childNodes),i.length===0||m(e,HTMLVideoElement)||await i.reduce((e,n)=>e.then(()=>I(n,r)).then(e=>{e&&t.appendChild(e)}),Promise.resolve()),t}function j(e,t,n){let r=t.style;if(!r)return;let a=window.getComputedStyle(e);a.cssText?(r.cssText=a.cssText,r.transformOrigin=a.transformOrigin):i(n).forEach(n=>{let i=a.getPropertyValue(n);n===`font-size`&&i.endsWith(`px`)&&(i=`${Math.floor(parseFloat(i.substring(0,i.length-2)))-.1}px`),m(e,HTMLIFrameElement)&&n===`display`&&i===`inline`&&(i=`block`),n===`d`&&t.getAttribute(`d`)&&(i=`path(${t.getAttribute(`d`)})`),r.setProperty(n,i,a.getPropertyPriority(n))})}function M(e,t){m(e,HTMLTextAreaElement)&&(t.innerHTML=e.value),m(e,HTMLInputElement)&&t.setAttribute(`value`,e.value)}function N(e,t){if(m(e,HTMLSelectElement)){let n=t,r=Array.from(n.children).find(t=>e.value===t.getAttribute(`value`));r&&r.setAttribute(`selected`,``)}}function P(e,t,n){return m(t,Element)&&(j(e,t,n),ae(e,t,n),M(e,t),N(e,t)),t}async function F(e,t){let n=e.querySelectorAll?e.querySelectorAll(`use`):[];if(n.length===0)return e;let r={};for(let i=0;i<n.length;i++){let a=n[i].getAttribute(`xlink:href`);if(a){let n=e.querySelector(a),i=document.querySelector(a);!n&&i&&!r[a]&&(r[a]=await I(i,t,!0))}}let i=Object.values(r);if(i.length){let t=`http://www.w3.org/1999/xhtml`,n=document.createElementNS(t,`svg`);n.setAttribute(`xmlns`,t),n.style.position=`absolute`,n.style.width=`0`,n.style.height=`0`,n.style.overflow=`hidden`,n.style.display=`none`;let r=document.createElementNS(t,`defs`);n.appendChild(r);for(let e=0;e<i.length;e++)r.appendChild(i[e]);e.appendChild(n)}return e}async function I(e,t,n){return!n&&t.filter&&!t.filter(e)?null:Promise.resolve(e).then(e=>D(e,t)).then(n=>A(e,n,t)).then(n=>P(e,n,t)).then(e=>F(e,t))}var L=/url\((['"]?)([^'"]+?)\1\)/g,R=/url\([^)]+\)\s*format\((["']?)([^"']+)\1\)/g,z=/src:\s*(?:url\([^)]+\)\s*format\([^)]+\)[,;]\s*)+/g;function B(e){let t=e.replace(/([.*+?^${}()|\[\]\/\\])/g,`\\$1`);return RegExp(`(url\\(['"]?)(${t})(['"]?\\))`,`g`)}function V(e){let t=[];return e.replace(L,(e,n,r)=>(t.push(r),e)),t.filter(e=>!x(e))}async function H(t,n,r,i,a){try{let o=r?e(n,r):n,s=b(n),c;return c=a?S(await a(o),s):await T(o,s,i),t.replace(B(n),`$1${c}$3`)}catch{}return t}function U(e,{preferredFontFormat:t}){return t?e.replace(z,e=>{for(;;){let[n,,r]=R.exec(e)||[];if(!r)return``;if(r===t)return`src: ${n};`}}):e}function W(e){return e.search(L)!==-1}async function G(e,t,n){if(!W(e))return e;let r=U(e,n);return V(r).reduce((e,r)=>e.then(e=>H(e,r,t,n)),Promise.resolve(r))}async function K(e,t,n){let r=t.style?.getPropertyValue(e);if(r){let i=await G(r,null,n);return t.style.setProperty(e,i,t.style.getPropertyPriority(e)),!0}return!1}async function ue(e,t){await K(`background`,e,t)||await K(`background-image`,e,t),await K(`mask`,e,t)||await K(`-webkit-mask`,e,t)||await K(`mask-image`,e,t)||await K(`-webkit-mask-image`,e,t)}async function de(e,t){let n=m(e,HTMLImageElement);if((!n||x(e.src))&&(!m(e,SVGImageElement)||x(e.href.baseVal)))return;let r=n?e.src:e.href.baseVal,i=await T(r,b(r),t);await new Promise((r,a)=>{e.onload=r,e.onerror=t.onImageErrorHandler?(...e)=>{try{r(t.onImageErrorHandler(...e))}catch(e){a(e)}}:a;let o=e;o.decode&&=r,o.loading===`lazy`&&(o.loading=`eager`),n?(e.srcset=``,e.src=i):e.href.baseVal=i})}async function fe(e,t){let r=n(e.childNodes).map(e=>q(e,t));await Promise.all(r).then(()=>e)}async function q(e,t){m(e,Element)&&(await ue(e,t),await de(e,t),await fe(e,t))}function pe(e,t){let{style:n}=e;t.backgroundColor&&(n.backgroundColor=t.backgroundColor),t.width&&(n.width=`${t.width}px`),t.height&&(n.height=`${t.height}px`);let r=t.style;return r!=null&&Object.keys(r).forEach(e=>{n[e]=r[e]}),e}var J={};async function Y(e){let t=J[e];return t??(t={url:e,cssText:await(await fetch(e)).text()},J[e]=t,t)}async function X(e,t){let n=e.cssText,r=/url\(["']?([^"')]+)["']?\)/g,i=(n.match(/url\([^)]+\)/g)||[]).map(async i=>{let a=i.replace(r,`$1`);return a.startsWith(`https://`)||(a=new URL(a,e.url).href),C(a,t.fetchRequestInit,({result:e})=>(n=n.replace(i,`url(${e})`),[i,e]))});return Promise.all(i).then(()=>n)}function Z(e){if(e==null)return[];let t=[],n=e.replace(/(\/\*[\s\S]*?\*\/)/gi,``),r=RegExp(`((@.*?keyframes [\\s\\S]*?){([\\s\\S]*?}\\s*?)})`,`gi`);for(;;){let e=r.exec(n);if(e===null)break;t.push(e[0])}n=n.replace(r,``);let i=/@import[\s\S]*?url\([^)]*\)[\s\S]*?;/gi,a=RegExp(`((\\s*?(?:\\/\\*[\\s\\S]*?\\*\\/)?\\s*?@media[\\s\\S]*?){([\\s\\S]*?)}\\s*?})|(([\\s\\S]*?){([\\s\\S]*?)})`,`gi`);for(;;){let e=i.exec(n);if(e===null){if(e=a.exec(n),e===null)break;i.lastIndex=a.lastIndex}else a.lastIndex=i.lastIndex;t.push(e[0])}return t}async function me(e,t){let r=[],i=[];return e.forEach(r=>{if(`cssRules`in r)try{n(r.cssRules||[]).forEach((e,n)=>{if(e.type===CSSRule.IMPORT_RULE){let a=n+1,o=e.href,s=Y(o).then(e=>X(e,t)).then(e=>Z(e).forEach(e=>{try{r.insertRule(e,e.startsWith(`@import`)?a+=1:r.cssRules.length)}catch(t){console.error(`Error inserting rule from remote css`,{rule:e,error:t})}})).catch(e=>{console.error(`Error loading remote css`,e.toString())});i.push(s)}})}catch(n){let a=e.find(e=>e.href==null)||document.styleSheets[0];r.href!=null&&i.push(Y(r.href).then(e=>X(e,t)).then(e=>Z(e).forEach(e=>{a.insertRule(e,a.cssRules.length)})).catch(e=>{console.error(`Error loading remote stylesheet`,e)})),console.error(`Error inlining remote css file`,n)}}),Promise.all(i).then(()=>(e.forEach(e=>{if(`cssRules`in e)try{n(e.cssRules||[]).forEach(e=>{r.push(e)})}catch(t){console.error(`Error while reading CSS rules from ${e.href}`,t)}}),r))}function he(e){return e.filter(e=>e.type===CSSRule.FONT_FACE_RULE).filter(e=>W(e.style.getPropertyValue(`src`)))}async function ge(e,t){if(e.ownerDocument==null)throw Error(`Provided element is not within a Document`);return he(await me(n(e.ownerDocument.styleSheets),t))}function Q(e){return e.trim().replace(/["']/g,``)}function $(e){let t=new Set;function n(e){(e.style.fontFamily||getComputedStyle(e).fontFamily).split(`,`).forEach(e=>{t.add(Q(e))}),Array.from(e.children).forEach(e=>{e instanceof HTMLElement&&n(e)})}return n(e),t}async function _e(e,t){let n=await ge(e,t),r=$(e);return(await Promise.all(n.filter(e=>r.has(Q(e.style.fontFamily))).map(e=>{let n=e.parentStyleSheet?e.parentStyleSheet.href:null;return G(e.cssText,n,t)}))).join(`
|
|
2
|
+
`)}async function ve(e,t){let n=t.fontEmbedCSS==null?t.skipFonts?null:await _e(e,t):t.fontEmbedCSS;if(n){let t=document.createElement(`style`),r=document.createTextNode(n);t.appendChild(r),e.firstChild?e.insertBefore(t,e.firstChild):e.appendChild(t)}}async function ye(e,t={}){let{width:n,height:r}=c(e,t),i=await I(e,t,!0);return await ve(i,t),await q(i,t),pe(i,t),await p(i,n,r)}async function be(e,t={}){let{width:n,height:r}=c(e,t),i=await d(await ye(e,t)),a=document.createElement(`canvas`),o=a.getContext(`2d`),s=t.pixelRatio||ee(),l=t.canvasWidth||n,u=t.canvasHeight||r;return a.width=l*s,a.height=u*s,t.skipAutoScale||te(a),a.style.width=`${l}`,a.style.height=`${u}`,t.backgroundColor&&(o.fillStyle=t.backgroundColor,o.fillRect(0,0,a.width,a.height)),o.drawImage(i,0,0,a.width,a.height),a}async function xe(e,t={}){return await u(await be(e,t))}export{xe as toBlob};
|