@pactor-app/chat 0.1.0 → 1.1.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/dist/index.cjs +1483 -600
- package/dist/index.d.cts +97 -23
- package/dist/index.d.ts +97 -23
- package/dist/index.js +1453 -600
- package/package.json +7 -8
- package/styles.css +188 -176
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@pactor-app/chat",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "Pactor chat: AI message rendering protocol (message model, streaming reducer, safe registry, capability action) and chat runtime view (ChatView / MessageBubble / PartRenderer / Composer / chat layout)",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pactor",
|
|
@@ -49,11 +49,11 @@
|
|
|
49
49
|
"access": "public"
|
|
50
50
|
},
|
|
51
51
|
"dependencies": {
|
|
52
|
-
"
|
|
53
|
-
"@pactor-app/
|
|
54
|
-
"@pactor-app/markdown": "
|
|
55
|
-
"@pactor-app/core": "
|
|
56
|
-
"@pactor-app/
|
|
52
|
+
"@pactor-app/ui": "1.1.0",
|
|
53
|
+
"@pactor-app/permission": "1.1.0",
|
|
54
|
+
"@pactor-app/markdown": "1.1.0",
|
|
55
|
+
"@pactor-app/core": "1.1.0",
|
|
56
|
+
"@pactor-app/runtime": "1.1.0"
|
|
57
57
|
},
|
|
58
58
|
"peerDependencies": {
|
|
59
59
|
"react": ">=18"
|
|
@@ -65,8 +65,7 @@
|
|
|
65
65
|
"@types/react-dom": "^19.2.4",
|
|
66
66
|
"jsdom": "^30.0.1",
|
|
67
67
|
"react": "^19.2.8",
|
|
68
|
-
"react-dom": "^19.2.8"
|
|
69
|
-
"@pactor-app/ui": "0.1.0"
|
|
68
|
+
"react-dom": "^19.2.8"
|
|
70
69
|
},
|
|
71
70
|
"scripts": {
|
|
72
71
|
"build": "tsup",
|
package/styles.css
CHANGED
|
@@ -109,6 +109,37 @@
|
|
|
109
109
|
'Times New Roman', serif;
|
|
110
110
|
}
|
|
111
111
|
|
|
112
|
+
/* ------------------------------------------------------------
|
|
113
|
+
* chrome DSL 渲染层(spec: chat-chrome-dsl / chrome 令牌映射):
|
|
114
|
+
* DSL 渲染的 chrome 子树(宿主 @pactor-app/ui 组件消费 shadcn
|
|
115
|
+
* 语义令牌)统一包在本容器内,把 --pactor-chat-* 映射为 shadcn
|
|
116
|
+
* 语义令牌——--pactor-chat-* 仍为皮肤唯一配置入口,暗色经上方
|
|
117
|
+
* [data-pactor-theme='dark'] 覆盖链自动生效。
|
|
118
|
+
* display:contents 使容器不参与布局;自定义属性沿 DOM 树继承,
|
|
119
|
+
* 不受 display:contents 影响。
|
|
120
|
+
* ------------------------------------------------------------ */
|
|
121
|
+
.pactor-chat-chrome {
|
|
122
|
+
display: contents;
|
|
123
|
+
--background: var(--pactor-chat-bg);
|
|
124
|
+
--foreground: var(--pactor-chat-fg);
|
|
125
|
+
--card: var(--pactor-chat-card);
|
|
126
|
+
--card-foreground: var(--pactor-chat-fg);
|
|
127
|
+
--popover: var(--pactor-chat-card);
|
|
128
|
+
--popover-foreground: var(--pactor-chat-fg);
|
|
129
|
+
--primary: var(--pactor-chat-primary);
|
|
130
|
+
--primary-foreground: var(--pactor-chat-primary-fg);
|
|
131
|
+
--secondary: var(--pactor-chat-muted);
|
|
132
|
+
--secondary-foreground: var(--pactor-chat-fg);
|
|
133
|
+
--muted: var(--pactor-chat-muted);
|
|
134
|
+
--muted-foreground: var(--pactor-chat-muted-fg);
|
|
135
|
+
--accent: var(--pactor-chat-muted);
|
|
136
|
+
--accent-foreground: var(--pactor-chat-fg);
|
|
137
|
+
--destructive: var(--pactor-chat-danger);
|
|
138
|
+
--border: var(--pactor-chat-border);
|
|
139
|
+
--input: var(--pactor-chat-border);
|
|
140
|
+
--ring: var(--pactor-chat-primary);
|
|
141
|
+
}
|
|
142
|
+
|
|
112
143
|
/* ============================================================
|
|
113
144
|
* 2. 布局(chat 布局 + 消息区)
|
|
114
145
|
* ============================================================ */
|
|
@@ -186,194 +217,87 @@
|
|
|
186
217
|
}
|
|
187
218
|
|
|
188
219
|
/* ------------------------------------------------------------
|
|
189
|
-
* AppShell(spec: chat-app-shell
|
|
190
|
-
*
|
|
191
|
-
*
|
|
192
|
-
|
|
193
|
-
* 桌面(≥768px)flex 同行;移动端(<768px)侧栏退出文档流
|
|
194
|
-
* 变为覆盖抽屉,布局切换全部由媒体查询表达,JS 只管开合。
|
|
195
|
-
* 高度填满父容器(height: 100%):嵌入任意定高容器即正确;
|
|
196
|
-
* 父级无定高时退化为内容高度。standalone 顶层挂载时宿主
|
|
197
|
-
* 容器定高(如 100dvh)属宿主职责(嵌入契约)。
|
|
220
|
+
* AppShell(spec: chat-app-shell / chat-on-ui-sidebar):外壳结构与
|
|
221
|
+
* 交互由 ui Sidebar 承担(data-slot 结构),chat 侧仅做令牌映射与
|
|
222
|
+
* 尺寸对齐——--pactor-chat-* 仍为皮肤唯一配置入口,暗色经覆盖链
|
|
223
|
+
* 自动生效。高度填满父容器(AppShell 传入 h-full min-h-0)。
|
|
198
224
|
* ------------------------------------------------------------ */
|
|
199
225
|
|
|
200
226
|
.pactor-chat-shell {
|
|
201
|
-
display: flex;
|
|
202
|
-
height: 100%;
|
|
203
227
|
overflow: hidden;
|
|
204
228
|
background: var(--pactor-chat-bg);
|
|
205
229
|
color: var(--pactor-chat-fg);
|
|
206
230
|
font-size: 14px;
|
|
207
231
|
line-height: 1.6;
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
232
|
+
/* ui Sidebar 消费的 sidebar 系列语义令牌 → chat 令牌(映射手法与
|
|
233
|
+
.pactor-chat-chrome 一致) */
|
|
234
|
+
--sidebar: var(--pactor-chat-sidebar-bg);
|
|
235
|
+
--sidebar-foreground: var(--pactor-chat-fg);
|
|
236
|
+
--sidebar-border: var(--pactor-chat-border);
|
|
237
|
+
--sidebar-accent: var(--pactor-chat-muted);
|
|
238
|
+
--sidebar-accent-foreground: var(--pactor-chat-fg);
|
|
239
|
+
--sidebar-primary: var(--pactor-chat-primary);
|
|
240
|
+
--sidebar-primary-foreground: var(--pactor-chat-primary-fg);
|
|
241
|
+
--sidebar-ring: var(--pactor-chat-primary);
|
|
242
|
+
}
|
|
243
|
+
|
|
244
|
+
/* 侧栏宽度对齐令牌(覆盖 ui 的 w-60;icon rail 64px 与历史一致) */
|
|
245
|
+
.pactor-chat-shell [data-slot='sidebar'] {
|
|
213
246
|
width: var(--pactor-chat-sidebar-width);
|
|
214
|
-
flex-shrink: 0;
|
|
215
|
-
border-right: 1px solid var(--pactor-chat-border);
|
|
216
|
-
background: var(--pactor-chat-sidebar-bg);
|
|
217
247
|
}
|
|
218
248
|
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
.pactor-chat-shell__sidebar--framed {
|
|
222
|
-
display: flex;
|
|
223
|
-
flex-direction: column;
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
/* 桌面品牌行(决策 D3):brand 左对齐,折叠钮在右 */
|
|
227
|
-
.pactor-chat-shell__sidebar-header {
|
|
228
|
-
display: flex;
|
|
229
|
-
align-items: center;
|
|
230
|
-
justify-content: space-between;
|
|
231
|
-
gap: 8px;
|
|
232
|
-
flex-shrink: 0;
|
|
233
|
-
padding: 12px 12px 4px;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
.pactor-chat-shell__brand {
|
|
237
|
-
flex: 1;
|
|
238
|
-
min-width: 0;
|
|
239
|
-
display: flex;
|
|
240
|
-
align-items: center;
|
|
241
|
-
gap: 8px;
|
|
249
|
+
.pactor-chat-shell [data-slot='sidebar'][data-collapsed] {
|
|
250
|
+
width: 64px;
|
|
242
251
|
}
|
|
243
252
|
|
|
244
|
-
/*
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
flex: 1;
|
|
248
|
-
min-height: 0;
|
|
249
|
-
overflow-y: auto;
|
|
253
|
+
/* 移动端顶栏高度与遮罩色对齐令牌 */
|
|
254
|
+
.pactor-chat-shell [data-slot='sidebar-topbar'] {
|
|
255
|
+
height: var(--pactor-chat-shell-topbar-height);
|
|
250
256
|
}
|
|
251
257
|
|
|
252
|
-
.pactor-chat-
|
|
253
|
-
|
|
254
|
-
padding: 12px;
|
|
255
|
-
border-top: 1px solid var(--pactor-chat-border);
|
|
258
|
+
.pactor-chat-shell [data-slot='sidebar-scrim'] {
|
|
259
|
+
background: var(--pactor-chat-shell-scrim);
|
|
256
260
|
}
|
|
257
261
|
|
|
258
|
-
/* 桌面折叠(icon rail,决策 D3
|
|
259
|
-
*
|
|
260
|
-
*
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
.pactor-chat-shell__sidebar--collapsed {
|
|
264
|
-
width: 64px;
|
|
265
|
-
}
|
|
266
|
-
|
|
267
|
-
.pactor-chat-shell__sidebar--collapsed .pactor-chat-shell__sidebar-header {
|
|
268
|
-
justify-content: center;
|
|
269
|
-
padding-inline: 8px;
|
|
270
|
-
}
|
|
271
|
-
|
|
272
|
-
.pactor-chat-shell__sidebar--collapsed .pactor-chat-shell__brand {
|
|
273
|
-
display: none;
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
.pactor-chat-shell__sidebar--collapsed .pactor-chat-menu {
|
|
277
|
-
padding-inline: 8px;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
.pactor-chat-shell__sidebar--collapsed .pactor-chat-menu__item {
|
|
281
|
-
justify-content: center;
|
|
282
|
-
padding-inline: 0;
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
.pactor-chat-shell__sidebar--collapsed .pactor-chat-menu__label,
|
|
286
|
-
.pactor-chat-shell__sidebar--collapsed .pactor-chat-menu__badge,
|
|
287
|
-
.pactor-chat-shell__sidebar--collapsed .pactor-chat-menu__dot,
|
|
288
|
-
.pactor-chat-shell__sidebar--collapsed .pactor-chat-menu__group,
|
|
289
|
-
.pactor-chat-shell__sidebar--collapsed .pactor-chat-shell__sidebar-footer {
|
|
290
|
-
display: none;
|
|
291
|
-
}
|
|
262
|
+
/* 桌面折叠(icon rail,决策 D3):fallback 手写菜单降级为仅图标
|
|
263
|
+
* (DSL 路径的 ui Menu 经 useSidebarDrawer().collapsed 自感知,
|
|
264
|
+
* data-collapsed 仅在桌面折叠时出现,无需媒体查询) */
|
|
265
|
+
.pactor-chat-shell [data-slot='sidebar'][data-collapsed] .pactor-chat-menu {
|
|
266
|
+
padding-inline: 8px;
|
|
292
267
|
}
|
|
293
268
|
|
|
294
|
-
.pactor-chat-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
display: flex;
|
|
298
|
-
flex-direction: column;
|
|
299
|
-
overflow: hidden;
|
|
269
|
+
.pactor-chat-shell [data-slot='sidebar'][data-collapsed] .pactor-chat-menu__item {
|
|
270
|
+
justify-content: center;
|
|
271
|
+
padding-inline: 0;
|
|
300
272
|
}
|
|
301
273
|
|
|
302
|
-
|
|
303
|
-
.pactor-chat-
|
|
274
|
+
.pactor-chat-shell [data-slot='sidebar'][data-collapsed] .pactor-chat-menu__label,
|
|
275
|
+
.pactor-chat-shell [data-slot='sidebar'][data-collapsed] .pactor-chat-menu__badge,
|
|
276
|
+
.pactor-chat-shell [data-slot='sidebar'][data-collapsed] .pactor-chat-menu__dot,
|
|
277
|
+
.pactor-chat-shell [data-slot='sidebar'][data-collapsed] .pactor-chat-menu__group {
|
|
304
278
|
display: none;
|
|
305
|
-
align-items: center;
|
|
306
|
-
gap: 4px;
|
|
307
|
-
height: var(--pactor-chat-shell-topbar-height);
|
|
308
|
-
flex-shrink: 0;
|
|
309
|
-
padding: 0 8px;
|
|
310
|
-
border-bottom: 1px solid var(--pactor-chat-border);
|
|
311
279
|
}
|
|
312
280
|
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
height: 18px;
|
|
316
|
-
}
|
|
281
|
+
/* 对话列在 shell content 内的间距(content 区 padding 承担)与
|
|
282
|
+
* 面板打开时的贴右处理见下方 :has 规则 */
|
|
317
283
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
284
|
+
/* shell 主内容区:列布局 + 内边距(ui Sidebar 的 sidebar-content 仅
|
|
285
|
+
min-w-0 flex-1,对话列间距由这里承担) */
|
|
286
|
+
.pactor-chat-shell [data-slot='sidebar-content'] {
|
|
321
287
|
display: flex;
|
|
322
288
|
flex-direction: column;
|
|
323
289
|
overflow: hidden;
|
|
324
290
|
padding: 12px 16px 16px;
|
|
325
291
|
}
|
|
326
292
|
|
|
327
|
-
/* 对话列在 shell content 内的间距(content 区 padding 承担)与
|
|
328
|
-
* 面板打开时的贴右处理见下方 :has 规则 */
|
|
329
|
-
|
|
330
293
|
/* 产出物面板打开(spec: chat-artifact-panel):面板贴容器右缘——
|
|
331
294
|
* 内容区右/上/下 padding 归零,面板 border-left 作分隔线 */
|
|
332
|
-
.pactor-chat-
|
|
295
|
+
.pactor-chat-shell [data-slot='sidebar-content']:has(> .pactor-chat-inspector-host) {
|
|
333
296
|
padding-top: 0;
|
|
334
297
|
padding-right: 0;
|
|
335
298
|
padding-bottom: 0;
|
|
336
299
|
}
|
|
337
300
|
|
|
338
|
-
/* 抽屉遮罩:仅打开时渲染;桌面隐藏 */
|
|
339
|
-
.pactor-chat-shell__scrim {
|
|
340
|
-
display: none;
|
|
341
|
-
position: fixed;
|
|
342
|
-
inset: 0;
|
|
343
|
-
z-index: 40;
|
|
344
|
-
background: var(--pactor-chat-shell-scrim);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
@media (max-width: 767px) {
|
|
348
|
-
.pactor-chat-shell__sidebar {
|
|
349
|
-
position: fixed;
|
|
350
|
-
top: 0;
|
|
351
|
-
bottom: 0;
|
|
352
|
-
left: 0;
|
|
353
|
-
z-index: 50;
|
|
354
|
-
box-shadow: var(--pactor-chat-shadow-composer);
|
|
355
|
-
transform: translateX(-100%);
|
|
356
|
-
transition: transform 0.2s ease-out;
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
/* 移动端品牌维持顶栏现状(决策 D3):抽屉内不重复渲染品牌行 */
|
|
360
|
-
.pactor-chat-shell__sidebar-header {
|
|
361
|
-
display: none;
|
|
362
|
-
}
|
|
363
|
-
|
|
364
|
-
.pactor-chat-shell__sidebar[data-open='true'] {
|
|
365
|
-
transform: translateX(0);
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
.pactor-chat-shell__scrim {
|
|
369
|
-
display: block;
|
|
370
|
-
}
|
|
371
|
-
|
|
372
|
-
.pactor-chat-shell__topbar {
|
|
373
|
-
display: flex;
|
|
374
|
-
}
|
|
375
|
-
}
|
|
376
|
-
|
|
377
301
|
/* ------------------------------------------------------------
|
|
378
302
|
* ArtifactPanel(spec: chat-artifact-panel,设计决策 D2):
|
|
379
303
|
* 产出物预览面板。桌面(≥768px)为工作区右侧固定宽栏(flex 同行,
|
|
@@ -431,15 +355,6 @@
|
|
|
431
355
|
touch-action: none;
|
|
432
356
|
}
|
|
433
357
|
|
|
434
|
-
.pactor-chat-inspector__resize:hover,
|
|
435
|
-
.pactor-chat-inspector__resize:active {
|
|
436
|
-
background: color-mix(
|
|
437
|
-
in oklab,
|
|
438
|
-
var(--pactor-chat-primary) 35%,
|
|
439
|
-
transparent
|
|
440
|
-
);
|
|
441
|
-
}
|
|
442
|
-
|
|
443
358
|
.pactor-chat-inspector__header {
|
|
444
359
|
display: flex;
|
|
445
360
|
align-items: center;
|
|
@@ -576,6 +491,10 @@
|
|
|
576
491
|
|
|
577
492
|
.pactor-chat-artifact-card__open {
|
|
578
493
|
flex-shrink: 0;
|
|
494
|
+
display: inline-flex;
|
|
495
|
+
align-items: center;
|
|
496
|
+
gap: 4px;
|
|
497
|
+
white-space: nowrap;
|
|
579
498
|
padding: 4px 10px;
|
|
580
499
|
border: 1px solid var(--pactor-chat-border);
|
|
581
500
|
border-radius: var(--pactor-chat-radius-sm);
|
|
@@ -654,17 +573,6 @@
|
|
|
654
573
|
align-items: center;
|
|
655
574
|
}
|
|
656
575
|
|
|
657
|
-
/* 未知图标名的占位圆点(不抛错的受控降级) */
|
|
658
|
-
.pactor-chat-menu__icon-placeholder {
|
|
659
|
-
width: 6px;
|
|
660
|
-
height: 6px;
|
|
661
|
-
margin: 0 4px;
|
|
662
|
-
flex-shrink: 0;
|
|
663
|
-
border-radius: 50%;
|
|
664
|
-
background: var(--pactor-chat-muted-fg);
|
|
665
|
-
opacity: 0.5;
|
|
666
|
-
}
|
|
667
|
-
|
|
668
576
|
.pactor-chat-menu__label {
|
|
669
577
|
flex: 1;
|
|
670
578
|
min-width: 0;
|
|
@@ -759,6 +667,21 @@
|
|
|
759
667
|
background: var(--pactor-chat-muted-fg);
|
|
760
668
|
}
|
|
761
669
|
|
|
670
|
+
/* Composer 承载坞(空态居中组与钉底位共用):padding-bottom 为钉底态
|
|
671
|
+
* 与页面底部留出空白;composerBottom 槽(未提供不渲染)居中弱提示 */
|
|
672
|
+
.pactor-chat-view__composer-dock {
|
|
673
|
+
width: 100%;
|
|
674
|
+
padding-bottom: 12px;
|
|
675
|
+
}
|
|
676
|
+
|
|
677
|
+
.pactor-chat-view__composer-bottom {
|
|
678
|
+
margin-top: 8px;
|
|
679
|
+
text-align: center;
|
|
680
|
+
color: var(--pactor-chat-muted-fg);
|
|
681
|
+
font-size: 12px;
|
|
682
|
+
line-height: 1.5;
|
|
683
|
+
}
|
|
684
|
+
|
|
762
685
|
/* ============================================================
|
|
763
686
|
* 3. 空状态(spec: chat-empty-state)
|
|
764
687
|
* ============================================================ */
|
|
@@ -1105,7 +1028,7 @@ button.pactor-chat-trace__header:hover,
|
|
|
1105
1028
|
display: flex;
|
|
1106
1029
|
flex-direction: column;
|
|
1107
1030
|
gap: 2px;
|
|
1108
|
-
margin-left: 4px;
|
|
1031
|
+
/* margin-left: 4px; */
|
|
1109
1032
|
}
|
|
1110
1033
|
|
|
1111
1034
|
.pactor-chat-trace__entry-title {
|
|
@@ -1460,6 +1383,53 @@ button.pactor-chat-trace__header:hover,
|
|
|
1460
1383
|
flex: 1;
|
|
1461
1384
|
}
|
|
1462
1385
|
|
|
1386
|
+
/* Composer footer 槽(spec: chat-composer-slots / Composer footer 槽):
|
|
1387
|
+
工具栏下方的自定义区域,结构与 ChatInput footer 一致(border-t 分隔) */
|
|
1388
|
+
.pactor-chat-composer__footer {
|
|
1389
|
+
display: flex;
|
|
1390
|
+
align-items: center;
|
|
1391
|
+
flex-wrap: wrap;
|
|
1392
|
+
gap: 6px;
|
|
1393
|
+
margin: 0 -14px -12px;
|
|
1394
|
+
padding: 8px 12px 0;
|
|
1395
|
+
border-top: 1px solid var(--pactor-chat-border);
|
|
1396
|
+
}
|
|
1397
|
+
|
|
1398
|
+
/* ------------------------------------------------------------
|
|
1399
|
+
* Composer DSL 呈现路径(spec: chat-composer-on-chatinput):
|
|
1400
|
+
* 盒模型让位 ChatInput 容器(边框 / 圆角 / 阴影 / 内边距由
|
|
1401
|
+
* ChatInput 承担,经 pactor-chat-chrome 令牌映射着色),本容器
|
|
1402
|
+
* 只保留布局与拖放态;focus 高亮由 ChatInput 自身 focus-within
|
|
1403
|
+
* ring 承担,避免双层描边。
|
|
1404
|
+
* ------------------------------------------------------------ */
|
|
1405
|
+
.pactor-chat-composer--dsl {
|
|
1406
|
+
padding: 0;
|
|
1407
|
+
border-color: transparent;
|
|
1408
|
+
background: transparent;
|
|
1409
|
+
box-shadow: none;
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
.pactor-chat-composer--dsl:focus-within {
|
|
1413
|
+
border-color: transparent;
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
.pactor-chat-composer--dsl.pactor-chat-composer--dragover {
|
|
1417
|
+
border-color: var(--pactor-chat-primary);
|
|
1418
|
+
border-radius: var(--pactor-chat-radius-xl);
|
|
1419
|
+
}
|
|
1420
|
+
|
|
1421
|
+
/* 输入高度下限 / 上限(与 ChatInput textarea 的 min-h-[60px] 一致;
|
|
1422
|
+
自适应由 field-sizing-content 承担,超上限内部滚动) */
|
|
1423
|
+
.pactor-chat-composer--dsl [data-slot='chat-input'] textarea {
|
|
1424
|
+
min-height: 60px;
|
|
1425
|
+
max-height: 200px;
|
|
1426
|
+
}
|
|
1427
|
+
|
|
1428
|
+
/* header 槽空态(无附件无 chips)时收起包装,避免多余上间距 */
|
|
1429
|
+
.pactor-chat-composer--dsl [data-slot='chat-input'] > .px-3.pt-3:empty {
|
|
1430
|
+
display: none;
|
|
1431
|
+
}
|
|
1432
|
+
|
|
1463
1433
|
/* ------------------------------------------------------------
|
|
1464
1434
|
* 内建锚定弹层 AnchoredPopover(chat-builtin-features 设计决策 D3):
|
|
1465
1435
|
* position: fixed,top/bottom/left 由 JS 按锚点计算(上方优先、
|
|
@@ -1558,28 +1528,70 @@ button.pactor-chat-trace__header:hover,
|
|
|
1558
1528
|
font-size: 12.5px;
|
|
1559
1529
|
}
|
|
1560
1530
|
|
|
1561
|
-
/* 内建模型 chip(Composer 工具栏右端,toolbarEnd
|
|
1531
|
+
/* 内建模型 chip(Composer 工具栏右端,toolbarEnd 槽内容之前):
|
|
1532
|
+
无边框 ghost 形态(边框在工具栏里显脏),hover 以浅底反馈 */
|
|
1562
1533
|
.pactor-chat-model-chip {
|
|
1563
1534
|
display: inline-flex;
|
|
1564
1535
|
align-items: center;
|
|
1565
1536
|
gap: 4px;
|
|
1566
1537
|
padding: 4px 10px;
|
|
1567
|
-
border: 1px solid
|
|
1538
|
+
border: 1px solid transparent;
|
|
1568
1539
|
border-radius: 999px;
|
|
1569
|
-
background:
|
|
1540
|
+
background: transparent;
|
|
1570
1541
|
color: var(--pactor-chat-muted-fg);
|
|
1571
1542
|
font-size: 12.5px;
|
|
1572
1543
|
cursor: pointer;
|
|
1573
1544
|
transition:
|
|
1574
|
-
|
|
1545
|
+
background-color 0.15s ease,
|
|
1575
1546
|
color 0.15s ease;
|
|
1576
1547
|
}
|
|
1577
1548
|
|
|
1578
1549
|
.pactor-chat-model-chip:hover {
|
|
1579
|
-
|
|
1550
|
+
background: var(--pactor-chat-muted);
|
|
1580
1551
|
color: var(--pactor-chat-fg);
|
|
1581
1552
|
}
|
|
1582
1553
|
|
|
1554
|
+
/* ModelSelect DSL 路径(spec: chat-on-ui-components):ui Select
|
|
1555
|
+
收敛到工具栏节奏(触发器尺寸与 chip 相当,颜色经 chrome 令牌映射);
|
|
1556
|
+
触发器同为无边框 ghost 形态(覆盖 shadcn Select 的表单边框/阴影),
|
|
1557
|
+
与 fallback chip 视觉一致 */
|
|
1558
|
+
.pactor-chat-model-select {
|
|
1559
|
+
width: auto;
|
|
1560
|
+
min-width: 112px;
|
|
1561
|
+
font-size: 12.5px;
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
.pactor-chat-model-select [data-slot='select-trigger'] {
|
|
1565
|
+
height: auto;
|
|
1566
|
+
gap: 4px;
|
|
1567
|
+
padding: 4px 10px;
|
|
1568
|
+
border-color: transparent;
|
|
1569
|
+
border-radius: 999px;
|
|
1570
|
+
box-shadow: none;
|
|
1571
|
+
color: var(--pactor-chat-muted-fg);
|
|
1572
|
+
font-size: 12.5px;
|
|
1573
|
+
transition:
|
|
1574
|
+
background-color 0.15s ease,
|
|
1575
|
+
color 0.15s ease;
|
|
1576
|
+
}
|
|
1577
|
+
|
|
1578
|
+
.pactor-chat-model-select [data-slot='select-trigger']:hover {
|
|
1579
|
+
background: var(--pactor-chat-muted);
|
|
1580
|
+
color: var(--pactor-chat-fg);
|
|
1581
|
+
}
|
|
1582
|
+
|
|
1583
|
+
/* 实心图标(spec: chat-icon-convergence):停止钮方形等需 fill 的
|
|
1584
|
+
图标(ui Icon 走描边体系,fill 经 CSS 覆盖 lucide svg 的 fill=none) */
|
|
1585
|
+
.pactor-chat-icon-fill {
|
|
1586
|
+
fill: currentColor;
|
|
1587
|
+
}
|
|
1588
|
+
|
|
1589
|
+
/* ArtifactPanel 标题栏 DSL 路径(spec: chat-on-ui-components):
|
|
1590
|
+
chrome 容器 display:contents,DSL Flex 占满标题行 */
|
|
1591
|
+
.pactor-chat-inspector__header-dsl {
|
|
1592
|
+
width: 100%;
|
|
1593
|
+
}
|
|
1594
|
+
|
|
1583
1595
|
.pactor-chat-model-chip__label {
|
|
1584
1596
|
max-width: 160px;
|
|
1585
1597
|
overflow: hidden;
|