@nextclaw/ui 0.6.4 → 0.6.5

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 (29) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/assets/{ChannelsList-D_sFrLcv.js → ChannelsList-DiX7ssoj.js} +1 -1
  3. package/dist/assets/ChatPage-CEEbtfae.js +34 -0
  4. package/dist/assets/{DocBrowser-BjlljUNM.js → DocBrowser-CkDugJv3.js} +1 -1
  5. package/dist/assets/{MarketplacePage-Dob7bQI5.js → MarketplacePage-Cxt223yL.js} +1 -1
  6. package/dist/assets/{ModelConfig-BesYoiw5.js → ModelConfig-BRRJU2mk.js} +1 -1
  7. package/dist/assets/{ProvidersList-NOoQyb_C.js → ProvidersList-Bl-OMAwu.js} +1 -1
  8. package/dist/assets/{RuntimeConfig-CGLGP3_g.js → RuntimeConfig-C0wurlgT.js} +1 -1
  9. package/dist/assets/{SecretsConfig-DP_InKs3.js → SecretsConfig-C_3yJm1I.js} +2 -2
  10. package/dist/assets/{SessionsConfig-XJbSPDZp.js → SessionsConfig-D13xFf5J.js} +1 -1
  11. package/dist/assets/{card-Bg0moANO.js → card-sDEXo_R4.js} +1 -1
  12. package/dist/assets/index-6azf0otP.css +1 -0
  13. package/dist/assets/index-DP9xXu9V.js +2 -0
  14. package/dist/assets/{label-DZuLJB_b.js → label-DhIqXnKx.js} +1 -1
  15. package/dist/assets/{logos-BDO7tmL-.js → logos-B9Qiy9wo.js} +1 -1
  16. package/dist/assets/{page-layout-BL29v3Ct.js → page-layout-CC6kzYFp.js} +1 -1
  17. package/dist/assets/{switch-DxH8lRYW.js → switch-DFPJEEVz.js} +1 -1
  18. package/dist/assets/{tabs-custom-BPd_6USz.js → tabs-custom-C_1pBckQ.js} +1 -1
  19. package/dist/assets/{useConfig-CJjG7ys-.js → useConfig-q7QqH3JB.js} +3 -3
  20. package/dist/assets/{useConfirmDialog-C-G5k7zK.js → useConfirmDialog-BNkeOTcY.js} +1 -1
  21. package/dist/assets/{vendor-Ylg6Wdt_.js → vendor-Dj2ULvht.js} +61 -56
  22. package/dist/index.html +3 -3
  23. package/package.json +1 -1
  24. package/src/components/chat/ChatThread.tsx +4 -2
  25. package/src/index.css +226 -29
  26. package/src/lib/i18n.ts +2 -0
  27. package/dist/assets/ChatPage-dDje_-4b.js +0 -32
  28. package/dist/assets/index-8RAlp6Gn.js +0 -2
  29. package/dist/assets/index-r3k4oB78.css +0 -1
package/dist/index.html CHANGED
@@ -6,9 +6,9 @@
6
6
  <link rel="icon" type="image/svg+xml" href="/logo.svg" />
7
7
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
8
  <title>NextClaw - 系统配置</title>
9
- <script type="module" crossorigin src="/assets/index-8RAlp6Gn.js"></script>
10
- <link rel="modulepreload" crossorigin href="/assets/vendor-Ylg6Wdt_.js">
11
- <link rel="stylesheet" crossorigin href="/assets/index-r3k4oB78.css">
9
+ <script type="module" crossorigin src="/assets/index-DP9xXu9V.js"></script>
10
+ <link rel="modulepreload" crossorigin href="/assets/vendor-Dj2ULvht.js">
11
+ <link rel="stylesheet" crossorigin href="/assets/index-6azf0otP.css">
12
12
  </head>
13
13
 
14
14
  <body>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nextclaw/ui",
3
- "version": "0.6.4",
3
+ "version": "0.6.5",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -222,8 +222,10 @@ function MarkdownBlock({ text, role }: { text: string; role: ChatRole }) {
222
222
  }
223
223
  return <img {...props} src={safeSrc} alt={alt || ''} loading="lazy" decoding="async" />;
224
224
  },
225
- code: ({ inline, className, children, ...props }) => {
226
- if (inline) {
225
+ code: ({ className, children, ...props }) => {
226
+ const plainText = String(children ?? '');
227
+ const isInlineCode = !className && !plainText.includes('\n');
228
+ if (isInlineCode) {
227
229
  return (
228
230
  <code {...props} className={cn('chat-inline-code', className)}>
229
231
  {children}
package/src/index.css CHANGED
@@ -184,70 +184,267 @@
184
184
  }
185
185
 
186
186
  .chat-markdown {
187
- font-size: 0.9rem;
188
- line-height: 1.6;
187
+ --md-text: #0f172a;
188
+ --md-muted: #334155;
189
+ --md-border: rgba(148, 163, 184, 0.34);
190
+ --md-link: hsl(var(--primary));
191
+ --md-inline-code-bg: rgba(15, 23, 42, 0.08);
192
+ --md-inline-code-color: #1e293b;
193
+ --md-blockquote-border: rgba(14, 165, 233, 0.45);
194
+ --md-blockquote-bg: rgba(14, 165, 233, 0.08);
195
+ --md-code-surface: #0b1220;
196
+ --md-code-toolbar-bg: rgba(15, 23, 42, 0.56);
197
+ --md-code-toolbar-border: rgba(148, 163, 184, 0.3);
198
+ --md-code-text: #e5e7eb;
199
+ --md-table-head-bg: rgba(148, 163, 184, 0.14);
200
+
201
+ color: var(--md-text);
202
+ font-size: 0.925rem;
203
+ line-height: 1.72;
189
204
  word-break: break-word;
190
205
  }
191
206
 
207
+ .chat-markdown-user {
208
+ --md-text: rgba(255, 255, 255, 0.97);
209
+ --md-muted: rgba(219, 234, 254, 0.92);
210
+ --md-border: rgba(191, 219, 254, 0.35);
211
+ --md-link: #dbeafe;
212
+ --md-inline-code-bg: rgba(15, 23, 42, 0.35);
213
+ --md-inline-code-color: #eff6ff;
214
+ --md-blockquote-border: rgba(191, 219, 254, 0.8);
215
+ --md-blockquote-bg: rgba(15, 23, 42, 0.2);
216
+ --md-code-surface: rgba(2, 6, 23, 0.92);
217
+ --md-code-toolbar-bg: rgba(2, 6, 23, 0.88);
218
+ --md-code-toolbar-border: rgba(191, 219, 254, 0.26);
219
+ --md-code-text: #e2e8f0;
220
+ --md-table-head-bg: rgba(191, 219, 254, 0.16);
221
+ }
222
+
192
223
  .chat-markdown > * + * {
193
- margin-top: 0.5rem;
224
+ margin-top: 0.72rem;
225
+ }
226
+
227
+ .chat-markdown p,
228
+ .chat-markdown li,
229
+ .chat-markdown blockquote {
230
+ color: var(--md-text);
194
231
  }
195
232
 
196
233
  .chat-markdown h1,
197
234
  .chat-markdown h2,
198
- .chat-markdown h3 {
199
- font-size: 1rem;
235
+ .chat-markdown h3,
236
+ .chat-markdown h4,
237
+ .chat-markdown h5,
238
+ .chat-markdown h6 {
239
+ margin: 0.2rem 0 0;
200
240
  font-weight: 700;
241
+ line-height: 1.35;
242
+ letter-spacing: -0.01em;
243
+ }
244
+
245
+ .chat-markdown h1 {
246
+ font-size: 1.22rem;
247
+ }
248
+
249
+ .chat-markdown h2 {
250
+ font-size: 1.12rem;
251
+ }
252
+
253
+ .chat-markdown h3 {
254
+ font-size: 1.02rem;
255
+ }
256
+
257
+ .chat-markdown h4,
258
+ .chat-markdown h5,
259
+ .chat-markdown h6 {
260
+ font-size: 0.96rem;
201
261
  }
202
262
 
203
263
  .chat-markdown ul,
204
264
  .chat-markdown ol {
205
- padding-left: 1.1rem;
265
+ margin: 0.35rem 0;
266
+ padding-left: 1.35rem;
267
+ }
268
+
269
+ .chat-markdown li + li {
270
+ margin-top: 0.25rem;
271
+ }
272
+
273
+ .chat-markdown li > p {
274
+ margin: 0;
275
+ }
276
+
277
+ .chat-markdown ul.contains-task-list,
278
+ .chat-markdown ol.contains-task-list {
279
+ list-style: none;
280
+ padding-left: 0.2rem;
281
+ }
282
+
283
+ .chat-markdown li.task-list-item {
284
+ display: flex;
285
+ align-items: flex-start;
286
+ gap: 0.52rem;
287
+ }
288
+
289
+ .chat-markdown .chat-task-checkbox {
290
+ position: relative;
291
+ top: 0.2rem;
292
+ width: 0.92rem;
293
+ height: 0.92rem;
294
+ cursor: default;
295
+ }
296
+
297
+ .chat-markdown hr {
298
+ border: 0;
299
+ border-top: 1px solid var(--md-border);
300
+ margin: 0.92rem 0;
301
+ }
302
+
303
+ .chat-markdown a {
304
+ color: var(--md-link);
305
+ text-decoration-line: underline;
306
+ text-decoration-thickness: 1.2px;
307
+ text-underline-offset: 2px;
308
+ word-break: break-all;
309
+ }
310
+
311
+ .chat-markdown .chat-link-invalid {
312
+ color: var(--md-muted);
313
+ text-decoration-line: underline;
314
+ text-decoration-style: dotted;
206
315
  }
207
316
 
208
317
  .chat-markdown code {
209
318
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
210
- font-size: 0.8rem;
319
+ font-size: 0.82rem;
211
320
  }
212
321
 
322
+ .chat-markdown .chat-inline-code,
213
323
  .chat-markdown :not(pre) > code {
214
- padding: 0.1rem 0.3rem;
215
- border-radius: 0.35rem;
216
- background: rgba(148, 163, 184, 0.18);
324
+ padding: 0.1rem 0.35rem;
325
+ border-radius: 0.4rem;
326
+ background: var(--md-inline-code-bg);
327
+ color: var(--md-inline-code-color);
328
+ border: 1px solid var(--md-border);
329
+ font-weight: 520;
330
+ }
331
+
332
+ .chat-codeblock {
333
+ margin: 0.2rem 0 0.1rem;
334
+ border: 1px solid var(--md-code-toolbar-border);
335
+ border-radius: 0.78rem;
336
+ overflow: hidden;
337
+ background: var(--md-code-surface);
338
+ }
339
+
340
+ .chat-codeblock-toolbar {
341
+ display: flex;
342
+ align-items: center;
343
+ justify-content: space-between;
344
+ gap: 0.5rem;
345
+ padding: 0.43rem 0.58rem;
346
+ background: var(--md-code-toolbar-bg);
347
+ border-bottom: 1px solid var(--md-code-toolbar-border);
348
+ }
349
+
350
+ .chat-codeblock-language {
351
+ font-size: 0.68rem;
352
+ font-weight: 700;
353
+ text-transform: uppercase;
354
+ letter-spacing: 0.06em;
355
+ color: var(--md-code-text);
356
+ opacity: 0.8;
357
+ }
358
+
359
+ .chat-codeblock-copy {
360
+ display: inline-flex;
361
+ align-items: center;
362
+ gap: 0.3rem;
363
+ font-size: 0.7rem;
364
+ font-weight: 600;
365
+ color: var(--md-code-text);
366
+ border: 1px solid var(--md-code-toolbar-border);
367
+ border-radius: 0.48rem;
368
+ padding: 0.18rem 0.36rem;
369
+ background: transparent;
370
+ cursor: pointer;
371
+ transition: background-color 0.15s ease, border-color 0.15s ease;
372
+ }
373
+
374
+ .chat-codeblock-copy:hover {
375
+ background: rgba(148, 163, 184, 0.2);
376
+ }
377
+
378
+ .chat-codeblock pre {
379
+ margin: 0;
380
+ padding: 0.75rem 0.82rem 0.8rem;
381
+ overflow-x: auto;
382
+ background: transparent;
383
+ }
384
+
385
+ .chat-codeblock code {
386
+ display: block;
387
+ min-width: max-content;
388
+ white-space: pre;
389
+ line-height: 1.58;
390
+ color: var(--md-code-text);
217
391
  }
218
392
 
219
- .chat-markdown pre {
393
+ .chat-table-wrap {
394
+ margin: 0.15rem 0;
395
+ border: 1px solid var(--md-border);
396
+ border-radius: 0.72rem;
220
397
  overflow-x: auto;
221
- border-radius: 0.65rem;
222
- padding: 0.65rem 0.75rem;
223
- background: rgba(15, 23, 42, 0.9);
224
- color: #e2e8f0;
225
398
  }
226
399
 
227
400
  .chat-markdown table {
228
401
  width: 100%;
229
- border-collapse: collapse;
230
- font-size: 0.8rem;
402
+ min-width: 420px;
403
+ border-collapse: separate;
404
+ border-spacing: 0;
405
+ font-size: 0.82rem;
406
+ }
407
+
408
+ .chat-markdown thead {
409
+ background: var(--md-table-head-bg);
231
410
  }
232
411
 
233
412
  .chat-markdown th,
234
413
  .chat-markdown td {
235
- border: 1px solid rgba(148, 163, 184, 0.3);
236
- padding: 0.35rem 0.45rem;
414
+ padding: 0.45rem 0.58rem;
415
+ border-bottom: 1px solid var(--md-border);
416
+ text-align: left;
417
+ vertical-align: top;
237
418
  }
238
419
 
239
- .chat-markdown blockquote {
240
- border-left: 3px solid rgba(148, 163, 184, 0.55);
241
- padding-left: 0.65rem;
242
- color: rgba(30, 41, 59, 0.85);
420
+ .chat-markdown th + th,
421
+ .chat-markdown td + td {
422
+ border-left: 1px solid var(--md-border);
243
423
  }
244
424
 
245
- .chat-markdown-user a {
246
- color: #dbeafe;
247
- text-decoration: underline;
425
+ .chat-markdown tbody tr:last-child td {
426
+ border-bottom: none;
248
427
  }
249
428
 
250
- .chat-markdown-assistant a {
251
- color: hsl(var(--primary));
252
- text-decoration: underline;
429
+ .chat-markdown th {
430
+ font-weight: 650;
431
+ }
432
+
433
+ .chat-markdown strong {
434
+ font-weight: 650;
435
+ }
436
+
437
+ .chat-markdown img {
438
+ max-width: 100%;
439
+ border-radius: 0.75rem;
440
+ border: 1px solid var(--md-border);
441
+ }
442
+
443
+ .chat-markdown blockquote {
444
+ margin: 0.2rem 0;
445
+ border-left: 3px solid var(--md-blockquote-border);
446
+ border-radius: 0 0.55rem 0.55rem 0;
447
+ padding: 0.45rem 0.72rem;
448
+ background: var(--md-blockquote-bg);
449
+ color: var(--md-muted);
253
450
  }
package/src/lib/i18n.ts CHANGED
@@ -525,6 +525,8 @@ export const LABELS: Record<string, { zh: string; en: string }> = {
525
525
  chatToolOutput: { zh: '查看输出', en: 'View Output' },
526
526
  chatToolNoOutput: { zh: '无输出(执行完成)', en: 'No output (completed)' },
527
527
  chatReasoning: { zh: '查看推理内容', en: 'Show reasoning' },
528
+ chatCodeCopy: { zh: '复制代码', en: 'Copy' },
529
+ chatCodeCopied: { zh: '已复制', en: 'Copied' },
528
530
 
529
531
  // Chat Sidebar (unified)
530
532
  chatSidebarNewTask: { zh: '新任务', en: 'New Task' },