pi-web-ui 0.69.0 → 0.71.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.
@@ -0,0 +1,78 @@
1
+ /* theme-name: 全透明 */
2
+ /* theme-name-en: Transparent */
3
+ /*
4
+ * 全透明主题——「半透明」的极致版(专配壁纸,issue #100):
5
+ * 调色板与默认暗色一致,但把壁纸机制里所有表面变量的透图率压到 0
6
+ * (--wallpaper-panel-alpha: 0% → --topbar-bg / --statusbar-bg / --panel-bg /
7
+ * --card-bg / --chip-bg / --inputbox-bg / --msgs-bg 全部变成 transparent),
8
+ * 顶栏/底栏/左右面板/消息区/输入框/全部气泡/代码块/终端视图统统直接见壁纸,
9
+ * 界面只剩边框与文字定结构。代价是文字全靠 --bg-image-dim 压暗撑着——
10
+ * 这里压暗加重到 0.85(默认 0.78),亮区壁纸下文字仍可读。
11
+ *
12
+ * 全透后 hover/浮动反馈不能依赖容器色(已是 0%),本文件尾段把这些实色
13
+ * hover 统一改成 25% 半透底(折叠摘要、展开条、折叠键、复制键、滚到底按钮);
14
+ * 强调色 hover(accent-soft)与语义按钮(发送/停止/杀进程)不受影响。
15
+ * 下拉弹窗(声音/语言/主题/模型/思考强度等 .dd-menu)保持实色
16
+ * (--menu-bg: var(--bg-elev2)),密集列表不随界面透图。
17
+ * 配壁纸用最佳;不配壁纸时界面直接透出 --bg 纯色(= 默认暗色,无差别)。
18
+ */
19
+ :root {
20
+ color-scheme: dark;
21
+ --bg: #0d0e12;
22
+ --bg-elev: #14161c;
23
+ --bg-elev2: #1a1d26;
24
+ --border: #262a35;
25
+ --border-soft: #1e2230;
26
+ --text: #e6e8ef;
27
+ --text-dim: #9aa1b4;
28
+ --text-faint: #6b7284;
29
+ --accent: #8b5cf6;
30
+ --accent-soft: rgba(139, 92, 246, 0.14);
31
+ --green: #34d399;
32
+ --green-soft: rgba(52, 211, 153, 0.12);
33
+ --red: #f87171;
34
+ --red-soft: rgba(248, 113, 113, 0.12);
35
+ --amber: #fbbf24;
36
+ --term-bg: transparent;
37
+ --term-fg: #e6e8ef;
38
+ --term-cursor: #8b5cf6;
39
+ --term-cursor-accent: #0b0d12;
40
+ --term-selection: rgba(139, 92, 246, 0.35);
41
+ --term-black: #1a1d26;
42
+ --term-red: #f87171;
43
+ --term-green: #34d399;
44
+ --term-yellow: #fbbf24;
45
+ --term-blue: #60a5fa;
46
+ --term-magenta: #c084fc;
47
+ --term-cyan: #22d3ee;
48
+ --term-white: #e6e8ef;
49
+ --term-bright-black: #6b7284;
50
+ --term-bright-red: #f87171;
51
+ --term-bright-green: #34d399;
52
+ --term-bright-yellow: #fbbf24;
53
+ --term-bright-blue: #60a5fa;
54
+ --term-bright-magenta: #c084fc;
55
+ --term-bright-cyan: #22d3ee;
56
+ --term-bright-white: #ffffff;
57
+
58
+ /* ---- 全透明核心:0% 容器色 = 全部 color-mix 表面(三大区域 / 卡片 /
59
+ 控件 / 输入框 / 消息区)直接变 transparent;终端 --term-bg 上面已设
60
+ transparent。想留一点点玻璃感就把这里提到 10~15%。---- */
61
+ --wallpaper-panel-alpha: 0%;
62
+ /* 下拉弹窗(声音/语言/主题/模型/思考强度):实色底保密集列表可读 */
63
+ --menu-bg: var(--bg-elev2);
64
+ /* 压暗加重:全透后没有容器色兜底,文字只靠压暗保可读 */
65
+ --bg-image-dim: 0.85;
66
+ }
67
+
68
+ /* hover / 浮动静置反馈:0% 容器色下这些实色 hover 必消失,统一给 25% 半透
69
+ 底(仍透图、可辨反馈)。强调色 hover(accent-soft)与语义按钮不受影响;
70
+ 下拉弹窗已在实色菜单内,其 hover 保留 styles.css 默认实色。 */
71
+ .msg-collapsed:hover,
72
+ .panel-rail:hover,
73
+ .chead-toggle:hover,
74
+ .chead-copy:hover,
75
+ .empty-templates-reset:hover,
76
+ .scroll-bottom {
77
+ background: color-mix(in srgb, var(--bg-elev) 25%, transparent);
78
+ }
package/themes/white.css CHANGED
@@ -1,160 +1,176 @@
1
- /* theme-name: 白色 */
2
- /* theme-name-en: White */
3
- :root {
4
- color-scheme: light;
5
- --bg: #ffffff;
6
- --bg-elev: #ffffff;
7
- --bg-elev2: #f6f8fa;
8
- --border: #d0d7de;
9
- --border-soft: #d8dee4;
10
- --text: #1f2328;
11
- --text-dim: #59636e;
12
- --text-faint: #818b98;
13
- --accent: #0969da;
14
- --accent-soft: rgba(9, 105, 218, 0.1);
15
- --green: #059669;
16
- --green-soft: rgba(5, 150, 105, 0.12);
17
- --red: #dc2626;
18
- --red-soft: rgba(220, 38, 38, 0.1);
19
- --amber: #d97706;
20
- --term-bg: #ffffff;
21
- --term-fg: #1f2328;
22
- --term-cursor: #0969da;
23
- --term-cursor-accent: #ffffff;
24
- --term-selection: rgba(9, 105, 218, 0.32);
25
- --term-black: #e8eaf0;
26
- --term-red: #dc2626;
27
- --term-green: #059669;
28
- --term-yellow: #d97706;
29
- --term-blue: #2563eb;
30
- --term-magenta: #9333ea;
31
- --term-cyan: #0e7490;
32
- --term-white: #1f2328;
33
- --term-bright-black: #8a91a3;
34
- --term-bright-red: #dc2626;
35
- --term-bright-green: #059669;
36
- --term-bright-yellow: #d97706;
37
- --term-bright-blue: #2563eb;
38
- --term-bright-magenta: #9333ea;
39
- --term-bright-cyan: #0e7490;
40
- --term-bright-white: #000000;
41
- --mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
42
- --tooltip-bg: #ffffff;
43
- --code-bg: #f6f8fa;
44
- --code-text: #1f2937;
45
- --err-text: #dc2626;
46
- --red-text: #dc2626;
47
- --amber-text: #b45309;
48
- --info-blue: #2563eb;
49
- --link: #0969da;
50
- --link-hover: #0550ae;
51
- --link-soft: #0969da;
52
- --md-strong: #111827;
53
- --skill-blue: #2563eb;
54
- --plugin-purple: #b58cff;
55
- --auth-green: #059669;
56
- --scroll-thumb: #c7ccd8;
57
- --scroll-thumb-hover: #aab2c0;
58
- --notice-err-bg: #eadadf;
59
- --notice-warn-bg: #eae2dc;
60
- --notice-info-bg: #d8e0f3;
61
- --notice-err-border: #dc2626;
62
- --notice-warn-border: #b45309;
63
- --notice-info-border: #2563eb;
64
- --send-blue: #0969da;
65
- --send-blue-hover: #0550ae;
66
- --brand-grad-a: #8b5cf6;
67
- --brand-grad-b: #6366f1;
68
- --on-amber: #1a1a1a;
69
- --search-active-fg: #1a1d26;
70
- --switch-knob: #ffffff;
71
- --bg-elev3: rgba(0, 0, 0, 0.03);
72
- --glow-015: rgba(0, 0, 0, 0.02);
73
- --glow-025: rgba(0, 0, 0, 0.02);
74
- --glow-03: rgba(0, 0, 0, 0.02);
75
- --glow-04: rgba(0, 0, 0, 0.03);
76
- --glow-05: rgba(0, 0, 0, 0.03);
77
- --glow-12: rgba(0, 0, 0, 0.08);
78
- --glow-18: rgba(0, 0, 0, 0.12);
79
- --glow-22: rgba(0, 0, 0, 0.15);
80
- --glow-38: rgba(0, 0, 0, 0.25);
81
- }
82
-
83
- /* ---- syntax highlighting (overrides static github-dark import) ---- */
84
- .hljs {
85
- color: #1f2328;
86
- background: #f6f8fa;
87
- }
88
- .hljs-doctag,
89
- .hljs-keyword,
90
- .hljs-meta .hljs-keyword,
91
- .hljs-template-tag,
92
- .hljs-template-variable,
93
- .hljs-type,
94
- .hljs-variable.language_ {
95
- color: #cf222e;
96
- }
97
- .hljs-title,
98
- .hljs-title.class_,
99
- .hljs-title.class_.inherited__,
100
- .hljs-title.function_ {
101
- color: #8250df;
102
- }
103
- .hljs-attr,
104
- .hljs-attribute,
105
- .hljs-literal,
106
- .hljs-meta,
107
- .hljs-number,
108
- .hljs-operator,
109
- .hljs-variable,
110
- .hljs-selector-attr,
111
- .hljs-selector-class,
112
- .hljs-selector-id {
113
- color: #0550ae;
114
- }
115
- .hljs-regexp,
116
- .hljs-string,
117
- .hljs-meta .hljs-string {
118
- color: #0a3069;
119
- }
120
- .hljs-built_in,
121
- .hljs-symbol {
122
- color: #953800;
123
- }
124
- .hljs-comment,
125
- .hljs-code,
126
- .hljs-formula {
127
- color: #6e7781;
128
- }
129
- .hljs-name,
130
- .hljs-quote,
131
- .hljs-selector-tag,
132
- .hljs-selector-pseudo {
133
- color: #116329;
134
- }
135
- .hljs-subst {
136
- color: #24292f;
137
- }
138
- .hljs-section {
139
- color: #0550ae;
140
- font-weight: 700;
141
- }
142
- .hljs-bullet {
143
- color: #0550ae;
144
- }
145
- .hljs-emphasis {
146
- color: #24292f;
147
- font-style: italic;
148
- }
149
- .hljs-strong {
150
- color: #24292f;
151
- font-weight: 700;
152
- }
153
- .hljs-addition {
154
- color: #116329;
155
- background: #dafbe1;
156
- }
157
- .hljs-deletion {
158
- color: #82071e;
159
- background: #ffebe9;
160
- }
1
+ /* theme-name: 白色 */
2
+ /* theme-name-en: White */
3
+ :root {
4
+ color-scheme: light;
5
+ --bg: #ffffff;
6
+ --bg-elev: #ffffff;
7
+ --bg-elev2: #f6f8fa;
8
+ --border: #d0d7de;
9
+ --border-soft: #d8dee4;
10
+ --text: #1f2328;
11
+ --text-dim: #59636e;
12
+ --text-faint: #818b98;
13
+ --accent: #0969da;
14
+ --accent-soft: rgba(9, 105, 218, 0.1);
15
+ --green: #059669;
16
+ --green-soft: rgba(5, 150, 105, 0.12);
17
+ --red: #dc2626;
18
+ --red-soft: rgba(220, 38, 38, 0.1);
19
+ --amber: #d97706;
20
+ --term-bg: #ffffff;
21
+ --term-fg: #1f2328;
22
+ --term-cursor: #0969da;
23
+ --term-cursor-accent: #ffffff;
24
+ --term-selection: rgba(9, 105, 218, 0.32);
25
+ --term-black: #e8eaf0;
26
+ --term-red: #dc2626;
27
+ --term-green: #059669;
28
+ --term-yellow: #d97706;
29
+ --term-blue: #2563eb;
30
+ --term-magenta: #9333ea;
31
+ --term-cyan: #0e7490;
32
+ --term-white: #1f2328;
33
+ --term-bright-black: #8a91a3;
34
+ --term-bright-red: #dc2626;
35
+ --term-bright-green: #059669;
36
+ --term-bright-yellow: #d97706;
37
+ --term-bright-blue: #2563eb;
38
+ --term-bright-magenta: #9333ea;
39
+ --term-bright-cyan: #0e7490;
40
+ --term-bright-white: #000000;
41
+ --mono: "SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace;
42
+ --mermaid-font-size: 12px;
43
+ --tooltip-bg: #ffffff;
44
+ --code-bg: #f6f8fa;
45
+ --code-text: #1f2937;
46
+ --err-text: #dc2626;
47
+ --red-text: #dc2626;
48
+ --amber-text: #b45309;
49
+ --info-blue: #2563eb;
50
+ --link: #0969da;
51
+ --link-hover: #0550ae;
52
+ --link-soft: #0969da;
53
+ --md-strong: #111827;
54
+ --skill-blue: #2563eb;
55
+ --plugin-purple: #b58cff;
56
+ --auth-green: #059669;
57
+ --scroll-thumb: #c7ccd8;
58
+ --scroll-thumb-hover: #aab2c0;
59
+ --notice-err-bg: #eadadf;
60
+ --notice-warn-bg: #eae2dc;
61
+ --notice-info-bg: #d8e0f3;
62
+ --notice-err-border: #dc2626;
63
+ --notice-warn-border: #b45309;
64
+ --notice-info-border: #2563eb;
65
+ --send-blue: #0969da;
66
+ --send-blue-hover: #0550ae;
67
+ --brand-grad-a: #8b5cf6;
68
+ --brand-grad-b: #6366f1;
69
+ --on-amber: #1a1a1a;
70
+ --search-active-fg: #1a1d26;
71
+ --switch-knob: #ffffff;
72
+ --bg-elev3: rgba(0, 0, 0, 0.03);
73
+ --glow-015: rgba(0, 0, 0, 0.02);
74
+ --glow-025: rgba(0, 0, 0, 0.02);
75
+ --glow-03: rgba(0, 0, 0, 0.02);
76
+ --glow-04: rgba(0, 0, 0, 0.03);
77
+ --glow-05: rgba(0, 0, 0, 0.03);
78
+ --glow-12: rgba(0, 0, 0, 0.08);
79
+ --glow-18: rgba(0, 0, 0, 0.12);
80
+ --glow-22: rgba(0, 0, 0, 0.15);
81
+ --glow-38: rgba(0, 0, 0, 0.25);
82
+ --control-fg: #59636e;
83
+ --control-bg: #f6f8fa;
84
+ --control-border: #d0d7de;
85
+ --bg-image: none;
86
+ --bg-image-dim: 0.78;
87
+ --bg-image-blur: 0px;
88
+ --wallpaper-panel-alpha: 62%;
89
+ --topbar-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
90
+ --statusbar-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
91
+ --panel-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
92
+ --card-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
93
+ --chip-bg: color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha, 62%), transparent);
94
+ --msgs-bg: color-mix(in srgb, var(--bg-elev) var(--wallpaper-panel-alpha, 62%), transparent);
95
+ --inputbox-bg: color-mix(in srgb, var(--bg-elev2) var(--wallpaper-panel-alpha, 62%), transparent);
96
+ --menu-bg: var(--chip-bg);
97
+ }
98
+
99
+ /* ---- syntax highlighting (overrides static github-dark import) ---- */
100
+ .hljs {
101
+ color: #1f2328;
102
+ background: #f6f8fa;
103
+ }
104
+ .hljs-doctag,
105
+ .hljs-keyword,
106
+ .hljs-meta .hljs-keyword,
107
+ .hljs-template-tag,
108
+ .hljs-template-variable,
109
+ .hljs-type,
110
+ .hljs-variable.language_ {
111
+ color: #cf222e;
112
+ }
113
+ .hljs-title,
114
+ .hljs-title.class_,
115
+ .hljs-title.class_.inherited__,
116
+ .hljs-title.function_ {
117
+ color: #8250df;
118
+ }
119
+ .hljs-attr,
120
+ .hljs-attribute,
121
+ .hljs-literal,
122
+ .hljs-meta,
123
+ .hljs-number,
124
+ .hljs-operator,
125
+ .hljs-variable,
126
+ .hljs-selector-attr,
127
+ .hljs-selector-class,
128
+ .hljs-selector-id {
129
+ color: #0550ae;
130
+ }
131
+ .hljs-regexp,
132
+ .hljs-string,
133
+ .hljs-meta .hljs-string {
134
+ color: #0a3069;
135
+ }
136
+ .hljs-built_in,
137
+ .hljs-symbol {
138
+ color: #953800;
139
+ }
140
+ .hljs-comment,
141
+ .hljs-code,
142
+ .hljs-formula {
143
+ color: #6e7781;
144
+ }
145
+ .hljs-name,
146
+ .hljs-quote,
147
+ .hljs-selector-tag,
148
+ .hljs-selector-pseudo {
149
+ color: #116329;
150
+ }
151
+ .hljs-subst {
152
+ color: #24292f;
153
+ }
154
+ .hljs-section {
155
+ color: #0550ae;
156
+ font-weight: 700;
157
+ }
158
+ .hljs-bullet {
159
+ color: #0550ae;
160
+ }
161
+ .hljs-emphasis {
162
+ color: #24292f;
163
+ font-style: italic;
164
+ }
165
+ .hljs-strong {
166
+ color: #24292f;
167
+ font-weight: 700;
168
+ }
169
+ .hljs-addition {
170
+ color: #116329;
171
+ background: #dafbe1;
172
+ }
173
+ .hljs-deletion {
174
+ color: #82071e;
175
+ background: #ffebe9;
176
+ }
@@ -1,4 +1,4 @@
1
- import{a as l,j as n}from"./markdown-Cpo0pNcR.js";import{u as P,b as O,T as M,a as W,F as Y,c as z,d as Z,e as H,f as ee,g as ne,h as te,i as se,r as ae}from"./index-DCOcsPFm.js";import{D as re,o as ie}from"./xterm-B96xOxS9.js";import"./react-CtudoG1_.js";function le(t){let c=null;return{clean:t.replace(/\r?\n?\[pi-term-exit:(-?\d+)\]\r?\n?/g,(a,x)=>(c=Number(x),`\r
1
+ import{a as l,j as n}from"./markdown-Cpo0pNcR.js";import{u as P,b as O,T as M,a as W,F as Y,c as z,d as Z,e as H,f as ee,g as ne,h as te,i as se,r as ae}from"./index-Cue012aF.js";import{D as re,o as ie}from"./xterm-B96xOxS9.js";import"./react-CtudoG1_.js";function le(t){let c=null;return{clean:t.replace(/\r?\n?\[pi-term-exit:(-?\d+)\]\r?\n?/g,(a,x)=>(c=Number(x),`\r
2
2
  `)).replace(/\r?\n?\x1b\[90m\[(?:进程已退出,退出码 |Process exited with code )-?\d+\]\x1b\[0m\r?\n?/g,`\r
3
3
  `),exitCode:c}}function ce({conversationId:t,terminalId:c,command:p,cwd:a,title:x,active:u,running:v,exitCode:j,send:h,register:C}){const T=l.useRef(null),y=l.useRef(null),{locale:o}=P(),N=l.useRef(o);N.current=o;const E=p?JSON.stringify(p):"";l.useEffect(()=>{const m=T.current;if(!m)return;const r=new re({theme:O(),fontFamily:'"SF Mono", "JetBrains Mono", ui-monospace, Menlo, Consolas, monospace',fontSize:13,cursorBlink:!0,scrollback:8e3}),b=new ie;r.loadAddon(b),r.open(m),y.current={term:r,fit:b},u&&r.focus();const g=()=>{r.options.theme=O()};window.addEventListener(M,g),r.attachCustomKeyEventHandler(d=>{if(d.type!=="keydown")return!0;const S=d.key?.toLowerCase();if((d.ctrlKey||d.metaKey)&&S==="v")return!1;if(d.ctrlKey&&!d.shiftKey&&!d.altKey&&S==="c"&&r.hasSelection()){const D=r.textarea;return D&&(D.value=r.getSelection(),D.select()),!1}return!0});const _=C(t,c,{write:d=>r.write(le(d).clean),dispose:()=>r.dispose()}),$=()=>{try{b.fit(),h({type:"terminal_resize",terminalId:c,conversationId:t,cols:r.cols,rows:r.rows})}catch{}},B=requestAnimationFrame(()=>{try{b.fit()}catch{}h(p?{type:"run_command",terminalId:c,conversationId:t,command:p,cols:r.cols,rows:r.rows}:{type:"terminal_create",terminalId:c,title:x,locale:N.current,conversationId:t,cwd:a,cols:r.cols,rows:r.rows})}),R=r.onData(d=>{h({type:"terminal_input",terminalId:c,conversationId:t,data:d})});let k=null;return typeof ResizeObserver<"u"&&(k=new ResizeObserver(()=>{m.offsetWidth>0&&m.offsetHeight>0&&$()}),k.observe(m)),()=>{cancelAnimationFrame(B),R.dispose(),window.removeEventListener(M,g),k?.disconnect(),_(),r.dispose(),y.current=null}},[t,c,E,h,C]),l.useEffect(()=>{if(!u)return;const m=requestAnimationFrame(()=>{const r=y.current;if(r){try{r.fit.fit(),h({type:"terminal_resize",terminalId:c,conversationId:t,cols:r.term.cols,rows:r.term.rows})}catch{}r.term.focus()}});return()=>cancelAnimationFrame(m)},[u]);const{t:F}=P(),f=l.useRef(void 0);return l.useEffect(()=>{if(v===f.current||(f.current=v,v!==!1))return;const m=y.current;m&&m.term.write(`\r
4
4
  \x1B[90m${F("exitBanner",{code:j??""})}\x1B[0m\r