@yancyyu/openhermit 1.6.39 → 1.6.40
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-renderer/assets/{ProjectEditorOverlay-krO5vQxX.js → ProjectEditorOverlay-CemDOX-3.js} +3 -3
- package/dist-renderer/assets/{TeamGraphOverlay-DqhQzcTr.js → TeamGraphOverlay-hPY770Db.js} +1 -1
- package/dist-renderer/assets/{_basePickBy-B7kSYPxr.js → _basePickBy-BHHrJT1i.js} +1 -1
- package/dist-renderer/assets/{_baseUniq-CnjxqwAk.js → _baseUniq-CWErBtke.js} +1 -1
- package/dist-renderer/assets/{arc-CLeZuINP.js → arc-C_o2_Uv8.js} +1 -1
- package/dist-renderer/assets/{architectureDiagram-VXUJARFQ-QKtqaqdY.js → architectureDiagram-VXUJARFQ-DUW0LI3t.js} +1 -1
- package/dist-renderer/assets/{blockDiagram-VD42YOAC-BqdrzO_f.js → blockDiagram-VD42YOAC-CWbCE9hQ.js} +1 -1
- package/dist-renderer/assets/{c4Diagram-YG6GDRKO-gwPlCxDC.js → c4Diagram-YG6GDRKO-BjLadrfV.js} +1 -1
- package/dist-renderer/assets/channel-DyP9YlCF.js +1 -0
- package/dist-renderer/assets/{chunk-4BX2VUAB-C6XLurL4.js → chunk-4BX2VUAB-CPnvjZl9.js} +1 -1
- package/dist-renderer/assets/{chunk-55IACEB6-Ds6quhEP.js → chunk-55IACEB6-OlL47yXQ.js} +1 -1
- package/dist-renderer/assets/{chunk-B4BG7PRW-5UlA1_e9.js → chunk-B4BG7PRW-DTasjbm8.js} +1 -1
- package/dist-renderer/assets/{chunk-DI55MBZ5-ywFrqIsY.js → chunk-DI55MBZ5-C5_Xaqkk.js} +1 -1
- package/dist-renderer/assets/{chunk-FMBD7UC4-C7ifUA17.js → chunk-FMBD7UC4-NdoM4DMR.js} +1 -1
- package/dist-renderer/assets/{chunk-QN33PNHL-BxGCo80U.js → chunk-QN33PNHL-C8Fybejy.js} +1 -1
- package/dist-renderer/assets/{chunk-QZHKN3VN-B2CuaZs6.js → chunk-QZHKN3VN-E98TYFXJ.js} +1 -1
- package/dist-renderer/assets/{chunk-TZMSLE5B-Ds1hInvp.js → chunk-TZMSLE5B-h4lFgkIq.js} +1 -1
- package/dist-renderer/assets/classDiagram-2ON5EDUG-BqffFTae.js +1 -0
- package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-BqffFTae.js +1 -0
- package/dist-renderer/assets/clone-MPcKWs2O.js +1 -0
- package/dist-renderer/assets/{cose-bilkent-S5V4N54A-Cz1GVtLp.js → cose-bilkent-S5V4N54A-DtQ7fkrs.js} +1 -1
- package/dist-renderer/assets/{dagre-6UL2VRFP-BrmR-P4h.js → dagre-6UL2VRFP-CN-nL_z4.js} +1 -1
- package/dist-renderer/assets/{diagram-PSM6KHXK-DbNjC5Rg.js → diagram-PSM6KHXK-DVJtqmm-.js} +1 -1
- package/dist-renderer/assets/{diagram-QEK2KX5R-qkRX5_Mq.js → diagram-QEK2KX5R-DlxHxyXh.js} +1 -1
- package/dist-renderer/assets/{diagram-S2PKOQOG-CyL5rCv2.js → diagram-S2PKOQOG-7dpzO6x6.js} +1 -1
- package/dist-renderer/assets/{erDiagram-Q2GNP2WA-Dox3-bA5.js → erDiagram-Q2GNP2WA-GP1TqsHi.js} +1 -1
- package/dist-renderer/assets/{flowDiagram-NV44I4VS-BtkaxlDL.js → flowDiagram-NV44I4VS-C7ZLETuH.js} +1 -1
- package/dist-renderer/assets/{ganttDiagram-JELNMOA3-Dhy_d9GK.js → ganttDiagram-JELNMOA3-CvPB68dH.js} +1 -1
- package/dist-renderer/assets/{gitGraphDiagram-V2S2FVAM-B5XRhIQA.js → gitGraphDiagram-V2S2FVAM-B5yOm3w7.js} +1 -1
- package/dist-renderer/assets/{graph-CsoEwUhS.js → graph-smeyY1YZ.js} +1 -1
- package/dist-renderer/assets/{index-BWPWmJNo.js → index-BJx8XvG1.js} +1 -1
- package/dist-renderer/assets/{index-h17WuEyf.js → index-CQaXUAua.js} +1 -1
- package/dist-renderer/assets/{index-DGEBzLNT.js → index-CajRpxO2.js} +1 -1
- package/dist-renderer/assets/{index-Bu2R-Se7.js → index-ChG4rE-E.js} +35 -35
- package/dist-renderer/assets/index-DUd0uw9C.css +32 -0
- package/dist-renderer/assets/{index-D-3KgskL.js → index-IhmXZWqf.js} +1 -1
- package/dist-renderer/assets/{index-NhHNs2Oo.js → index-x_JkoDRH.js} +1 -1
- package/dist-renderer/assets/{infoDiagram-HS3SLOUP-hMGmNojH.js → infoDiagram-HS3SLOUP-D-hWRQGY.js} +1 -1
- package/dist-renderer/assets/{journeyDiagram-XKPGCS4Q-DXV2rBDl.js → journeyDiagram-XKPGCS4Q-Bb6W8rUG.js} +1 -1
- package/dist-renderer/assets/{kanban-definition-3W4ZIXB7-Bf99WLRy.js → kanban-definition-3W4ZIXB7-CnHdUX0q.js} +1 -1
- package/dist-renderer/assets/{layout-C3XWrpwo.js → layout-pqss_zkI.js} +1 -1
- package/dist-renderer/assets/{linear-OEEcn8KN.js → linear-B1mFITNh.js} +1 -1
- package/dist-renderer/assets/{mindmap-definition-VGOIOE7T-Dpi3S2x4.js → mindmap-definition-VGOIOE7T-DTD9q7-D.js} +1 -1
- package/dist-renderer/assets/{pieDiagram-ADFJNKIX-xTPPhtNx.js → pieDiagram-ADFJNKIX-Df3mhrn7.js} +1 -1
- package/dist-renderer/assets/{quadrantDiagram-AYHSOK5B-euniyDlz.js → quadrantDiagram-AYHSOK5B-B1FZ09vH.js} +1 -1
- package/dist-renderer/assets/{requirementDiagram-UZGBJVZJ-D9Uiw4kF.js → requirementDiagram-UZGBJVZJ-aEO78thZ.js} +1 -1
- package/dist-renderer/assets/{sankeyDiagram-TZEHDZUN-CySU4nED.js → sankeyDiagram-TZEHDZUN-6Ui--jp-.js} +1 -1
- package/dist-renderer/assets/{sequenceDiagram-WL72ISMW-JVGpET6V.js → sequenceDiagram-WL72ISMW-DF4Q1cAM.js} +1 -1
- package/dist-renderer/assets/{stateDiagram-FKZM4ZOC-B2FY5qqi.js → stateDiagram-FKZM4ZOC-BqA2BI8C.js} +1 -1
- package/dist-renderer/assets/{stateDiagram-v2-4FDKWEC3-DcoMiR8H.js → stateDiagram-v2-4FDKWEC3-Cs2ZtUD2.js} +1 -1
- package/dist-renderer/assets/{timeline-definition-IT6M3QCI-DmycNUUe.js → timeline-definition-IT6M3QCI-DoOkw_A8.js} +1 -1
- package/dist-renderer/assets/{treemap-GDKQZRPO-DPq4gZuB.js → treemap-GDKQZRPO-DUe26QdD.js} +1 -1
- package/dist-renderer/assets/{xychartDiagram-PRI3JC2R-J6VVJzRq.js → xychartDiagram-PRI3JC2R-BKCnj5Xn.js} +1 -1
- package/dist-renderer/index.html +2 -2
- package/package.json +1 -1
- package/src/renderer/components/chat/ChatHistoryItem.tsx +1 -1
- package/src/renderer/components/chat/items/SubagentItem.tsx +2 -2
- package/src/renderer/components/chat/viewers/MermaidDiagram.tsx +2 -2
- package/src/renderer/components/common/ErrorBoundary.tsx +1 -1
- package/src/renderer/components/dashboard/CliStatusBanner.tsx +7 -7
- package/src/renderer/components/extensions/ExtensionStoreView.tsx +1 -1
- package/src/renderer/components/extensions/common/ExtensionToast.tsx +3 -3
- package/src/renderer/components/extensions/common/SourceBadge.tsx +1 -1
- package/src/renderer/components/extensions/plugins/CategoryChips.tsx +1 -1
- package/src/renderer/components/extensions/plugins/PluginCard.tsx +1 -1
- package/src/renderer/components/extensions/plugins/PluginDetailDialog.tsx +2 -2
- package/src/renderer/components/extensions/skills/SkillEditorDialog.tsx +1 -1
- package/src/renderer/components/layout/PaneResizeHandle.tsx +2 -2
- package/src/renderer/components/layout/Sidebar.tsx +2 -2
- package/src/renderer/components/layout/SortableTab.tsx +2 -2
- package/src/renderer/components/report/sections/CostSection.tsx +2 -2
- package/src/renderer/components/report/sections/InsightsSection.tsx +1 -1
- package/src/renderer/components/runtime/ProviderRuntimeBackendSelector.tsx +2 -2
- package/src/renderer/components/search/CommandPalette.tsx +4 -4
- package/src/renderer/components/settings/sections/CliStatusSection.tsx +1 -1
- package/src/renderer/components/sidebar/SessionFiltersPopover.tsx +1 -1
- package/src/renderer/components/sidebar/SessionItem.tsx +3 -3
- package/src/renderer/components/sidebar/SidebarSessions.tsx +2 -2
- package/src/renderer/components/sidebar/WorkspaceBrowser.tsx +1 -1
- package/src/renderer/components/team/CcSessionsSection.tsx +5 -5
- package/src/renderer/components/team/ClaudeLogsFilterPopover.tsx +1 -1
- package/src/renderer/components/team/ClaudeLogsPanel.tsx +1 -1
- package/src/renderer/components/team/CollapsibleTeamSection.tsx +1 -1
- package/src/renderer/components/team/ProcessesSection.tsx +2 -2
- package/src/renderer/components/team/TaskTooltip.tsx +2 -2
- package/src/renderer/components/team/TeamDetailView.tsx +1 -1
- package/src/renderer/components/team/TeamListFilterPopover.tsx +1 -1
- package/src/renderer/components/team/TeamListView.tsx +2 -2
- package/src/renderer/components/team/TeamSessionsSection.tsx +6 -6
- package/src/renderer/components/team/UnreadCommentsBadge.tsx +1 -1
- package/src/renderer/components/team/activity/ActivityItem.tsx +9 -9
- package/src/renderer/components/team/activity/ActivityTimeline.tsx +5 -5
- package/src/renderer/components/team/activity/LeadThoughtsGroup.tsx +3 -3
- package/src/renderer/components/team/activity/ReplyQuoteBlock.tsx +4 -4
- package/src/renderer/components/team/dialogs/CreateTaskDialog.tsx +2 -2
- package/src/renderer/components/team/dialogs/LaunchTeamDialog.tsx +1 -1
- package/src/renderer/components/team/dialogs/PlatformBindingDialog.tsx +1 -1
- package/src/renderer/components/team/dialogs/PlatformManualForm.tsx +1 -1
- package/src/renderer/components/team/dialogs/PlatformSetupQR.tsx +4 -4
- package/src/renderer/components/team/dialogs/SendMessageDialog.tsx +6 -6
- package/src/renderer/components/team/dialogs/SkipPermissionsCheckbox.tsx +6 -6
- package/src/renderer/components/team/dialogs/StatusHistoryTimeline.tsx +1 -1
- package/src/renderer/components/team/dialogs/TaskAttachments.tsx +1 -1
- package/src/renderer/components/team/dialogs/TaskCommentInput.tsx +6 -6
- package/src/renderer/components/team/dialogs/TaskCommentsSection.tsx +4 -4
- package/src/renderer/components/team/dialogs/TaskDetailDialog.tsx +3 -3
- package/src/renderer/components/team/editor/EditorFileTree.tsx +4 -4
- package/src/renderer/components/team/editor/EditorSearchPanel.tsx +1 -1
- package/src/renderer/components/team/editor/MarkdownSplitView.tsx +1 -1
- package/src/renderer/components/team/editor/NewFileDialog.tsx +1 -1
- package/src/renderer/components/team/editor/ProjectEditorOverlay.tsx +1 -1
- package/src/renderer/components/team/editor/SearchInFilesPanel.tsx +1 -1
- package/src/renderer/components/team/kanban/KanbanFilterPopover.tsx +4 -4
- package/src/renderer/components/team/kanban/KanbanSearchInput.tsx +1 -1
- package/src/renderer/components/team/kanban/KanbanSortPopover.tsx +5 -5
- package/src/renderer/components/team/kanban/KanbanTaskCard.tsx +4 -4
- package/src/renderer/components/team/members/MemberDraftRow.tsx +1 -1
- package/src/renderer/components/team/members/MemberStatsTab.tsx +2 -2
- package/src/renderer/components/team/members/MemberWorkspaceTab.tsx +1 -1
- package/src/renderer/components/team/messages/MessageComposer.tsx +2 -2
- package/src/renderer/components/team/messages/MessagesFilterPopover.tsx +1 -1
- package/src/renderer/components/team/messages/MessagesPanel.tsx +7 -7
- package/src/renderer/components/team/review/ChangeReviewDialog.tsx +1 -1
- package/src/renderer/components/team/schedule/ScheduleStatusBadge.tsx +1 -1
- package/src/renderer/components/team/sidebar/TeamSidebarRail.tsx +4 -4
- package/src/renderer/components/team/tasks/TaskRow.tsx +1 -1
- package/src/renderer/components/team/tools/SkillChip.tsx +1 -1
- package/src/renderer/components/team/tools/ToolsSection.tsx +1 -1
- package/src/renderer/components/ui/MemberSelect.tsx +2 -2
- package/src/renderer/components/ui/MentionSuggestionList.tsx +2 -2
- package/src/renderer/components/ui/MentionableTextarea.tsx +3 -3
- package/src/renderer/index.css +17 -17
- package/dist-renderer/assets/channel-DpMHF50r.js +0 -1
- package/dist-renderer/assets/classDiagram-2ON5EDUG-CBYCBVRl.js +0 -1
- package/dist-renderer/assets/classDiagram-v2-WZHVMYZB-CBYCBVRl.js +0 -1
- package/dist-renderer/assets/clone-DcMF6Psb.js +0 -1
- package/dist-renderer/assets/index-CnWV3BhG.css +0 -32
|
@@ -421,9 +421,9 @@ export const SendMessageDialog = ({
|
|
|
421
421
|
|
|
422
422
|
<div className={quote ? 'flex flex-col' : 'contents'}>
|
|
423
423
|
{quote ? (
|
|
424
|
-
<div className="relative overflow-hidden rounded-t-md border border-b-0 border-
|
|
424
|
+
<div className="relative overflow-hidden rounded-t-md border border-b-0 border-indigo-400/30 bg-blue-100/80 py-2 pl-3 pr-2 dark:border-indigo-500/20 dark:bg-blue-950/20">
|
|
425
425
|
{/* Decorative quotation mark */}
|
|
426
|
-
<span className="pointer-events-none absolute -right-1 top-1/2 -translate-y-1/2 select-none font-serif text-[64px] leading-none text-
|
|
426
|
+
<span className="pointer-events-none absolute -right-1 top-1/2 -translate-y-1/2 select-none font-serif text-[64px] leading-none text-indigo-500/[0.08] dark:text-indigo-400/[0.08]">
|
|
427
427
|
“
|
|
428
428
|
</span>
|
|
429
429
|
|
|
@@ -431,7 +431,7 @@ export const SendMessageDialog = ({
|
|
|
431
431
|
<TooltipTrigger asChild>
|
|
432
432
|
<button
|
|
433
433
|
type="button"
|
|
434
|
-
className="absolute right-1.5 top-1.5 z-10 rounded p-0.5 text-
|
|
434
|
+
className="absolute right-1.5 top-1.5 z-10 rounded p-0.5 text-indigo-400/60 hover:text-indigo-600 dark:text-indigo-300/40 dark:hover:text-blue-200"
|
|
435
435
|
onClick={() => setQuote(undefined)}
|
|
436
436
|
>
|
|
437
437
|
<X size={12} />
|
|
@@ -441,7 +441,7 @@ export const SendMessageDialog = ({
|
|
|
441
441
|
</Tooltip>
|
|
442
442
|
|
|
443
443
|
<div className="mb-1 flex items-center gap-1.5">
|
|
444
|
-
<span className="text-[10px] text-
|
|
444
|
+
<span className="text-[10px] text-indigo-600/70 dark:text-indigo-300/60">
|
|
445
445
|
正在回复
|
|
446
446
|
</span>
|
|
447
447
|
<MemberBadge name={quote.from} color={colorMap.get(quote.from)} size="sm" />
|
|
@@ -458,7 +458,7 @@ export const SendMessageDialog = ({
|
|
|
458
458
|
{isQuoteLong ? (
|
|
459
459
|
<button
|
|
460
460
|
type="button"
|
|
461
|
-
className="mt-0.5 text-[10px] text-
|
|
461
|
+
className="mt-0.5 text-[10px] text-indigo-500 hover:text-blue-700 dark:text-indigo-400/60 dark:hover:text-indigo-300"
|
|
462
462
|
onClick={() => setQuoteExpanded((v) => !v)}
|
|
463
463
|
>
|
|
464
464
|
{quoteExpanded ? '收起' : '展开'}
|
|
@@ -487,7 +487,7 @@ export const SendMessageDialog = ({
|
|
|
487
487
|
cornerAction={
|
|
488
488
|
<button
|
|
489
489
|
type="button"
|
|
490
|
-
className="inline-flex shrink-0 items-center gap-1 rounded-full bg-
|
|
490
|
+
className="inline-flex shrink-0 items-center gap-1 rounded-full bg-indigo-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-indigo-500 disabled:cursor-not-allowed disabled:opacity-50"
|
|
491
491
|
disabled={!canSend}
|
|
492
492
|
onClick={handleSubmit}
|
|
493
493
|
>
|
|
@@ -33,13 +33,13 @@ export const SkipPermissionsCheckbox: React.FC<SkipPermissionsCheckboxProps> = (
|
|
|
33
33
|
<div
|
|
34
34
|
className="mt-1.5 rounded-md border px-3 py-2 text-xs"
|
|
35
35
|
style={{
|
|
36
|
-
backgroundColor: 'rgba(
|
|
37
|
-
borderColor: 'rgba(
|
|
36
|
+
backgroundColor: 'rgba(99, 102, 241, 0.08)',
|
|
37
|
+
borderColor: 'rgba(99, 102, 241, 0.2)',
|
|
38
38
|
color: 'var(--color-text-secondary)',
|
|
39
39
|
}}
|
|
40
40
|
>
|
|
41
41
|
<div className="flex items-start gap-2">
|
|
42
|
-
<Info className="mt-0.5 size-3.5 shrink-0 text-
|
|
42
|
+
<Info className="mt-0.5 size-3.5 shrink-0 text-indigo-400" />
|
|
43
43
|
<p>启用自主模式后,所有工具都会直接执行,不再逐次请求确认。处理不可信代码时请谨慎。</p>
|
|
44
44
|
</div>
|
|
45
45
|
</div>
|
|
@@ -47,13 +47,13 @@ export const SkipPermissionsCheckbox: React.FC<SkipPermissionsCheckboxProps> = (
|
|
|
47
47
|
<div
|
|
48
48
|
className="mt-1.5 rounded-md border px-3 py-2 text-xs"
|
|
49
49
|
style={{
|
|
50
|
-
backgroundColor: 'rgba(
|
|
51
|
-
borderColor: 'rgba(
|
|
50
|
+
backgroundColor: 'rgba(99, 102, 241, 0.08)',
|
|
51
|
+
borderColor: 'rgba(99, 102, 241, 0.2)',
|
|
52
52
|
color: 'var(--color-text-secondary)',
|
|
53
53
|
}}
|
|
54
54
|
>
|
|
55
55
|
<div className="flex items-start gap-2">
|
|
56
|
-
<Info className="mt-0.5 size-3.5 shrink-0 text-
|
|
56
|
+
<Info className="mt-0.5 size-3.5 shrink-0 text-indigo-400" />
|
|
57
57
|
<p>手动模式:每次工具调用都需要你实时批准或拒绝。</p>
|
|
58
58
|
</div>
|
|
59
59
|
</div>
|
|
@@ -203,7 +203,7 @@ function dotColorForStatus(status: TeamTaskStatus): string {
|
|
|
203
203
|
case 'pending':
|
|
204
204
|
return 'bg-zinc-500';
|
|
205
205
|
case 'in_progress':
|
|
206
|
-
return 'bg-
|
|
206
|
+
return 'bg-indigo-400';
|
|
207
207
|
case 'completed':
|
|
208
208
|
return 'bg-emerald-400';
|
|
209
209
|
case 'deleted':
|
|
@@ -241,7 +241,7 @@ export const TaskAttachments = ({
|
|
|
241
241
|
|
|
242
242
|
{/* Drop zone indicator */}
|
|
243
243
|
{dragOver ? (
|
|
244
|
-
<div className="flex items-center justify-center rounded-md border-2 border-dashed border-
|
|
244
|
+
<div className="flex items-center justify-center rounded-md border-2 border-dashed border-indigo-500/40 bg-indigo-500/5 py-4 text-xs text-indigo-400">
|
|
245
245
|
Drop image here
|
|
246
246
|
</div>
|
|
247
247
|
) : null}
|
|
@@ -228,9 +228,9 @@ export const TaskCommentInput = ({
|
|
|
228
228
|
return (
|
|
229
229
|
<div>
|
|
230
230
|
{replyTo ? (
|
|
231
|
-
<div className="relative overflow-hidden rounded-t-md border border-b-0 border-
|
|
231
|
+
<div className="relative overflow-hidden rounded-t-md border border-b-0 border-indigo-400/30 bg-blue-100/80 py-2 pl-3 pr-2 dark:border-indigo-500/20 dark:bg-blue-950/20">
|
|
232
232
|
{/* Decorative quotation mark */}
|
|
233
|
-
<span className="pointer-events-none absolute -right-1 top-1/2 -translate-y-1/2 select-none font-serif text-[64px] leading-none text-
|
|
233
|
+
<span className="pointer-events-none absolute -right-1 top-1/2 -translate-y-1/2 select-none font-serif text-[64px] leading-none text-indigo-500/[0.08] dark:text-indigo-400/[0.08]">
|
|
234
234
|
“
|
|
235
235
|
</span>
|
|
236
236
|
|
|
@@ -238,7 +238,7 @@ export const TaskCommentInput = ({
|
|
|
238
238
|
<TooltipTrigger asChild>
|
|
239
239
|
<button
|
|
240
240
|
type="button"
|
|
241
|
-
className="absolute right-1.5 top-1.5 z-10 rounded p-0.5 text-
|
|
241
|
+
className="absolute right-1.5 top-1.5 z-10 rounded p-0.5 text-indigo-400/60 hover:text-indigo-600 dark:text-indigo-300/40 dark:hover:text-blue-200"
|
|
242
242
|
onClick={onClearReply}
|
|
243
243
|
>
|
|
244
244
|
<X size={12} />
|
|
@@ -248,7 +248,7 @@ export const TaskCommentInput = ({
|
|
|
248
248
|
</Tooltip>
|
|
249
249
|
|
|
250
250
|
<div className="mb-1 flex items-center gap-1.5">
|
|
251
|
-
<span className="text-[10px] text-
|
|
251
|
+
<span className="text-[10px] text-indigo-600/70 dark:text-indigo-300/60">正在回复</span>
|
|
252
252
|
<MemberBadge name={replyTo.author} color={colorMap.get(replyTo.author)} size="sm" />
|
|
253
253
|
</div>
|
|
254
254
|
<div
|
|
@@ -263,7 +263,7 @@ export const TaskCommentInput = ({
|
|
|
263
263
|
{replyTo.text.length > LONG_QUOTE_THRESHOLD ? (
|
|
264
264
|
<button
|
|
265
265
|
type="button"
|
|
266
|
-
className="mt-0.5 text-[10px] text-
|
|
266
|
+
className="mt-0.5 text-[10px] text-indigo-500 hover:text-blue-700 dark:text-indigo-400/60 dark:hover:text-indigo-300"
|
|
267
267
|
onClick={() => setQuoteExpanded((v) => !v)}
|
|
268
268
|
>
|
|
269
269
|
{quoteExpanded ? '收起' : '展开'}
|
|
@@ -390,7 +390,7 @@ export const TaskCommentInput = ({
|
|
|
390
390
|
</Tooltip>
|
|
391
391
|
<button
|
|
392
392
|
type="button"
|
|
393
|
-
className="inline-flex shrink-0 items-center gap-1 rounded-full bg-
|
|
393
|
+
className="inline-flex shrink-0 items-center gap-1 rounded-full bg-indigo-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-indigo-500 disabled:cursor-not-allowed disabled:opacity-50"
|
|
394
394
|
disabled={!canSubmit}
|
|
395
395
|
onClick={() => void handleSubmit()}
|
|
396
396
|
>
|
|
@@ -223,7 +223,7 @@ export const TaskCommentsSection = ({
|
|
|
223
223
|
comment.type === 'review_approved'
|
|
224
224
|
? 'border-y border-emerald-500/20 bg-emerald-500/5'
|
|
225
225
|
: comment.type === 'review_request'
|
|
226
|
-
? 'border-y border-
|
|
226
|
+
? 'border-y border-indigo-500/20 bg-indigo-500/5'
|
|
227
227
|
: '',
|
|
228
228
|
].join(' ')}
|
|
229
229
|
style={
|
|
@@ -244,7 +244,7 @@ export const TaskCommentsSection = ({
|
|
|
244
244
|
>
|
|
245
245
|
<div className="mb-1 flex items-center gap-2 text-[10px] text-[var(--color-text-muted)]">
|
|
246
246
|
{unreadCommentIds?.has(comment.id) ? (
|
|
247
|
-
<span className="size-2 shrink-0 rounded-full bg-
|
|
247
|
+
<span className="size-2 shrink-0 rounded-full bg-indigo-500" />
|
|
248
248
|
) : null}
|
|
249
249
|
<MemberBadge
|
|
250
250
|
name={comment.author}
|
|
@@ -257,7 +257,7 @@ export const TaskCommentsSection = ({
|
|
|
257
257
|
已批准
|
|
258
258
|
</span>
|
|
259
259
|
) : comment.type === 'review_request' ? (
|
|
260
|
-
<span className="inline-flex items-center gap-0.5 rounded-full bg-
|
|
260
|
+
<span className="inline-flex items-center gap-0.5 rounded-full bg-indigo-500/15 px-1.5 py-0.5 text-[10px] font-medium text-indigo-600 dark:text-indigo-400">
|
|
261
261
|
<Eye size={10} />
|
|
262
262
|
已请求审查
|
|
263
263
|
</span>
|
|
@@ -440,7 +440,7 @@ export const TaskCommentsSection = ({
|
|
|
440
440
|
cornerAction={
|
|
441
441
|
<button
|
|
442
442
|
type="button"
|
|
443
|
-
className="inline-flex shrink-0 items-center gap-1 rounded-full bg-
|
|
443
|
+
className="inline-flex shrink-0 items-center gap-1 rounded-full bg-indigo-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-indigo-500 disabled:cursor-not-allowed disabled:opacity-50"
|
|
444
444
|
disabled={!canSubmit}
|
|
445
445
|
onClick={() => void handleSubmit()}
|
|
446
446
|
>
|
|
@@ -821,7 +821,7 @@ export const TaskDetailDialog = ({
|
|
|
821
821
|
className={`flex items-center justify-between rounded-md px-3 py-2 text-xs ${
|
|
822
822
|
currentTask.needsClarification === 'user'
|
|
823
823
|
? 'border border-red-500/20 bg-red-500/10 text-red-400'
|
|
824
|
-
: 'border border-
|
|
824
|
+
: 'border border-indigo-500/20 bg-indigo-500/10 text-indigo-400'
|
|
825
825
|
}`}
|
|
826
826
|
>
|
|
827
827
|
<span className="flex items-center gap-1.5">
|
|
@@ -953,7 +953,7 @@ export const TaskDetailDialog = ({
|
|
|
953
953
|
|
|
954
954
|
{blocksIds.length > 0 ? (
|
|
955
955
|
<div className="flex flex-wrap items-center gap-1.5">
|
|
956
|
-
<span className="inline-flex items-center gap-0.5 text-xs text-
|
|
956
|
+
<span className="inline-flex items-center gap-0.5 text-xs text-indigo-600 dark:text-indigo-400">
|
|
957
957
|
<ArrowRightFromLine size={12} />
|
|
958
958
|
阻塞
|
|
959
959
|
</span>
|
|
@@ -971,7 +971,7 @@ export const TaskDetailDialog = ({
|
|
|
971
971
|
className={`inline-flex items-center rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors ${
|
|
972
972
|
isCompleted
|
|
973
973
|
? 'bg-emerald-500/15 text-emerald-700 hover:bg-emerald-500/25 dark:text-emerald-400'
|
|
974
|
-
: 'bg-
|
|
974
|
+
: 'bg-indigo-500/15 text-indigo-600 hover:bg-indigo-500/25 dark:text-indigo-400'
|
|
975
975
|
} cursor-pointer`}
|
|
976
976
|
onClick={() => handleDependencyClick(id)}
|
|
977
977
|
>
|
|
@@ -589,7 +589,7 @@ const RootDropZone = React.forwardRef<
|
|
|
589
589
|
<div
|
|
590
590
|
ref={combinedRef}
|
|
591
591
|
className={`scrollbar-thin h-full overflow-y-auto transition-colors ${
|
|
592
|
-
isDropTarget ? 'bg-
|
|
592
|
+
isDropTarget ? 'bg-indigo-400/5 ring-1 ring-inset ring-indigo-400/30' : ''
|
|
593
593
|
}`}
|
|
594
594
|
role="tree"
|
|
595
595
|
>
|
|
@@ -709,8 +709,8 @@ const DraggableTreeItem = React.memo(
|
|
|
709
709
|
className={`flex h-full cursor-pointer select-none items-center gap-1 truncate px-2 text-xs transition-colors hover:bg-surface-raised ${
|
|
710
710
|
isSelected ? 'bg-surface-raised text-text' : 'text-text-secondary'
|
|
711
711
|
} ${isDragging ? 'opacity-30' : ''} ${
|
|
712
|
-
isDropTarget ? 'rounded bg-
|
|
713
|
-
} ${isInsideDropTarget && !isDropTarget ? 'border-l-2 border-l-
|
|
712
|
+
isDropTarget ? 'rounded bg-indigo-400/10 ring-2 ring-indigo-400/50' : ''
|
|
713
|
+
} ${isInsideDropTarget && !isDropTarget ? 'border-l-2 border-l-indigo-400/40 bg-indigo-400/5' : ''}`}
|
|
714
714
|
style={{ paddingLeft: `${visualDepth * INDENT_PX + 8}px` }}
|
|
715
715
|
onClick={handleClick}
|
|
716
716
|
onKeyDown={handleKeyDown}
|
|
@@ -843,7 +843,7 @@ const InlineRenameInput = ({
|
|
|
843
843
|
}}
|
|
844
844
|
onBlur={() => requestAnimationFrame(() => inputRef.current?.focus())}
|
|
845
845
|
onClick={(e) => e.stopPropagation()}
|
|
846
|
-
className="min-w-0 flex-1 rounded border border-
|
|
846
|
+
className="min-w-0 flex-1 rounded border border-indigo-400/50 bg-surface px-1 py-0 text-xs text-text outline-none focus:ring-1 focus:ring-indigo-400/50"
|
|
847
847
|
/>
|
|
848
848
|
);
|
|
849
849
|
};
|
|
@@ -76,7 +76,7 @@ const SearchToggleButton = React.memo(function SearchToggleButton({
|
|
|
76
76
|
className={cn(
|
|
77
77
|
'flex size-[22px] items-center justify-center rounded transition-colors',
|
|
78
78
|
active
|
|
79
|
-
? 'bg-
|
|
79
|
+
? 'bg-indigo-500/20 text-indigo-400'
|
|
80
80
|
: 'text-[var(--color-text-muted)] hover:bg-[var(--color-surface-raised)] hover:text-[var(--color-text-secondary)]'
|
|
81
81
|
)}
|
|
82
82
|
onClick={onClick}
|
|
@@ -107,7 +107,7 @@ export const MarkdownSplitView = React.memo(function MarkdownSplitView({
|
|
|
107
107
|
// eslint-disable-next-line jsx-a11y/no-static-element-interactions -- resize handle
|
|
108
108
|
<div
|
|
109
109
|
className={`shrink-0 cursor-col-resize border-x border-border transition-colors ${
|
|
110
|
-
isResizing ? 'bg-
|
|
110
|
+
isResizing ? 'bg-indigo-500/50' : 'hover:bg-indigo-500/30'
|
|
111
111
|
}`}
|
|
112
112
|
style={{ width: HANDLE_WIDTH }}
|
|
113
113
|
onMouseDown={handleMouseDown}
|
|
@@ -121,7 +121,7 @@ export const NewFileDialog = ({
|
|
|
121
121
|
onKeyDown={handleKeyDown}
|
|
122
122
|
onBlur={() => requestAnimationFrame(() => inputRef.current?.focus())}
|
|
123
123
|
placeholder={type === 'file' ? '文件名...' : '文件夹名...'}
|
|
124
|
-
className="min-w-0 flex-1 rounded border border-border-emphasis bg-surface px-1.5 py-0.5 text-xs text-text outline-none focus:border-
|
|
124
|
+
className="min-w-0 flex-1 rounded border border-border-emphasis bg-surface px-1.5 py-0.5 text-xs text-text outline-none focus:border-indigo-500"
|
|
125
125
|
aria-label={type === 'file' ? '新文件名' : '新文件夹名'}
|
|
126
126
|
/>
|
|
127
127
|
</div>
|
|
@@ -720,7 +720,7 @@ export const ProjectEditorOverlay = ({
|
|
|
720
720
|
|
|
721
721
|
{/* External change banner */}
|
|
722
722
|
{activeTabId && externalChanges[activeTabId] && (
|
|
723
|
-
<div className="flex shrink-0 items-center gap-2 border-b border-
|
|
723
|
+
<div className="flex shrink-0 items-center gap-2 border-b border-indigo-400/30 bg-blue-100/50 px-3 py-1.5 text-xs text-blue-700 dark:border-indigo-500/30 dark:bg-indigo-500/10 dark:text-indigo-300">
|
|
724
724
|
<RefreshCw className="size-3.5 shrink-0" />
|
|
725
725
|
<span>
|
|
726
726
|
{externalChanges[activeTabId] === 'delete'
|
|
@@ -193,7 +193,7 @@ export const SearchInFilesPanel = ({
|
|
|
193
193
|
onClick={handleCaseSensitiveToggle}
|
|
194
194
|
className={`rounded px-1.5 py-0.5 text-[10px] font-medium transition-colors ${
|
|
195
195
|
caseSensitive
|
|
196
|
-
? 'bg-
|
|
196
|
+
? 'bg-indigo-500/20 text-indigo-400'
|
|
197
197
|
: 'text-text-muted hover:bg-surface-raised'
|
|
198
198
|
}`}
|
|
199
199
|
aria-label="区分大小写"
|
|
@@ -91,7 +91,7 @@ export const KanbanFilterPopover = ({
|
|
|
91
91
|
>
|
|
92
92
|
<Filter size={14} />
|
|
93
93
|
{activeCount > 0 && (
|
|
94
|
-
<span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-
|
|
94
|
+
<span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-indigo-500 text-[10px] font-medium text-white">
|
|
95
95
|
{activeCount}
|
|
96
96
|
</span>
|
|
97
97
|
)}
|
|
@@ -111,7 +111,7 @@ export const KanbanFilterPopover = ({
|
|
|
111
111
|
type="button"
|
|
112
112
|
className={`w-full rounded-md px-2 py-1.5 text-left text-xs transition-colors ${
|
|
113
113
|
filter.sessionId === null
|
|
114
|
-
? 'bg-
|
|
114
|
+
? 'bg-indigo-500/15 text-indigo-300'
|
|
115
115
|
: 'text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-raised)]'
|
|
116
116
|
}`}
|
|
117
117
|
onClick={() => handleSessionSelect(null)}
|
|
@@ -128,12 +128,12 @@ export const KanbanFilterPopover = ({
|
|
|
128
128
|
type="button"
|
|
129
129
|
className={`flex w-full items-center gap-1.5 rounded-md px-2 py-1.5 text-left text-xs transition-colors ${
|
|
130
130
|
isSelected
|
|
131
|
-
? 'bg-
|
|
131
|
+
? 'bg-indigo-500/15 text-indigo-300'
|
|
132
132
|
: 'text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-raised)]'
|
|
133
133
|
}`}
|
|
134
134
|
onClick={() => handleSessionSelect(isSelected ? null : session.id)}
|
|
135
135
|
>
|
|
136
|
-
{isLead && <Crown size={11} className="shrink-0 text-
|
|
136
|
+
{isLead && <Crown size={11} className="shrink-0 text-indigo-400" />}
|
|
137
137
|
<span className="truncate">{label}</span>
|
|
138
138
|
</button>
|
|
139
139
|
);
|
|
@@ -228,7 +228,7 @@ const TaskSuggestionItem = React.memo(function TaskSuggestionItem({
|
|
|
228
228
|
case 'pending':
|
|
229
229
|
return 'bg-zinc-500/15 text-zinc-400';
|
|
230
230
|
case 'in_progress':
|
|
231
|
-
return 'bg-
|
|
231
|
+
return 'bg-indigo-500/15 text-indigo-400';
|
|
232
232
|
case 'completed':
|
|
233
233
|
return 'bg-emerald-500/15 text-emerald-400';
|
|
234
234
|
case 'deleted':
|
|
@@ -66,7 +66,7 @@ export const KanbanSortPopover = ({
|
|
|
66
66
|
>
|
|
67
67
|
<ArrowUpDown size={14} />
|
|
68
68
|
{isNonDefault && (
|
|
69
|
-
<span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-
|
|
69
|
+
<span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-indigo-500 text-[10px] font-medium text-white">
|
|
70
70
|
1
|
|
71
71
|
</span>
|
|
72
72
|
)}
|
|
@@ -90,7 +90,7 @@ export const KanbanSortPopover = ({
|
|
|
90
90
|
className={cn(
|
|
91
91
|
'flex w-full items-center gap-2.5 rounded-md px-2 py-1.5 text-left text-xs transition-colors',
|
|
92
92
|
isSelected
|
|
93
|
-
? 'bg-
|
|
93
|
+
? 'bg-indigo-500/15 text-indigo-300'
|
|
94
94
|
: 'text-[var(--color-text-secondary)] hover:bg-[var(--color-surface-raised)]'
|
|
95
95
|
)}
|
|
96
96
|
onClick={() => onSortChange({ field: option.field })}
|
|
@@ -98,7 +98,7 @@ export const KanbanSortPopover = ({
|
|
|
98
98
|
<span
|
|
99
99
|
className={cn(
|
|
100
100
|
'shrink-0',
|
|
101
|
-
isSelected ? 'text-
|
|
101
|
+
isSelected ? 'text-indigo-400' : 'text-[var(--color-text-muted)]'
|
|
102
102
|
)}
|
|
103
103
|
>
|
|
104
104
|
{option.icon}
|
|
@@ -108,14 +108,14 @@ export const KanbanSortPopover = ({
|
|
|
108
108
|
<div
|
|
109
109
|
className={cn(
|
|
110
110
|
'text-[10px]',
|
|
111
|
-
isSelected ? 'text-
|
|
111
|
+
isSelected ? 'text-indigo-300/70' : 'text-[var(--color-text-muted)]'
|
|
112
112
|
)}
|
|
113
113
|
>
|
|
114
114
|
{option.description}
|
|
115
115
|
</div>
|
|
116
116
|
</div>
|
|
117
117
|
{isSelected && (
|
|
118
|
-
<ArrowDownUp size={12} className="ml-auto shrink-0 text-
|
|
118
|
+
<ArrowDownUp size={12} className="ml-auto shrink-0 text-indigo-400" />
|
|
119
119
|
)}
|
|
120
120
|
</button>
|
|
121
121
|
);
|
|
@@ -63,8 +63,8 @@ const DISPATCH_STATUS_STYLE: Record<string, { bg: string; text: string; label: s
|
|
|
63
63
|
text: 'text-yellow-600 dark:text-yellow-400',
|
|
64
64
|
label: '已派发',
|
|
65
65
|
},
|
|
66
|
-
received: { bg: 'bg-
|
|
67
|
-
in_progress: { bg: 'bg-
|
|
66
|
+
received: { bg: 'bg-indigo-500/15', text: 'text-indigo-600 dark:text-indigo-400', label: '已接收' },
|
|
67
|
+
in_progress: { bg: 'bg-indigo-500/15', text: 'text-indigo-600 dark:text-indigo-400', label: '执行中' },
|
|
68
68
|
completed: {
|
|
69
69
|
bg: 'bg-emerald-500/15',
|
|
70
70
|
text: 'text-emerald-600 dark:text-emerald-400',
|
|
@@ -355,7 +355,7 @@ export const KanbanTaskCard = memo(
|
|
|
355
355
|
className={`mt-1 inline-flex items-center gap-1 rounded-full px-1.5 py-0.5 text-[10px] font-medium ${
|
|
356
356
|
task.needsClarification === 'user'
|
|
357
357
|
? 'bg-red-500/15 text-red-400'
|
|
358
|
-
: 'bg-
|
|
358
|
+
: 'bg-indigo-500/15 text-indigo-600 dark:text-indigo-400'
|
|
359
359
|
}`}
|
|
360
360
|
>
|
|
361
361
|
<HelpCircle size={10} />
|
|
@@ -392,7 +392,7 @@ export const KanbanTaskCard = memo(
|
|
|
392
392
|
|
|
393
393
|
{hasBlocks ? (
|
|
394
394
|
<div className="mb-2 flex flex-wrap items-center gap-1">
|
|
395
|
-
<span className="inline-flex items-center gap-0.5 text-[10px] text-
|
|
395
|
+
<span className="inline-flex items-center gap-0.5 text-[10px] text-indigo-600 dark:text-indigo-400">
|
|
396
396
|
<ArrowRightFromLine size={10} />
|
|
397
397
|
阻塞
|
|
398
398
|
</span>
|
|
@@ -295,7 +295,7 @@ export const MemberDraftRow = ({
|
|
|
295
295
|
)}
|
|
296
296
|
工作流
|
|
297
297
|
{!workflowExpanded && workflowDraft.value.trim() ? (
|
|
298
|
-
<span className="absolute -right-1 -top-1 size-2 rounded-full bg-
|
|
298
|
+
<span className="absolute -right-1 -top-1 size-2 rounded-full bg-indigo-500" />
|
|
299
299
|
) : null}
|
|
300
300
|
</Button>
|
|
301
301
|
) : null}
|
|
@@ -188,7 +188,7 @@ const ToolUsageBars = ({
|
|
|
188
188
|
</span>
|
|
189
189
|
<div className="h-3.5 flex-1 overflow-hidden rounded-sm bg-[var(--color-surface-raised)]">
|
|
190
190
|
<div
|
|
191
|
-
className="h-full rounded-sm bg-
|
|
191
|
+
className="h-full rounded-sm bg-indigo-500/40"
|
|
192
192
|
style={{ width: `${(count / maxCount) * 100}%` }}
|
|
193
193
|
/>
|
|
194
194
|
</div>
|
|
@@ -241,7 +241,7 @@ const FilesTouchedSection = ({
|
|
|
241
241
|
Files Touched ({validFiles.length})
|
|
242
242
|
</p>
|
|
243
243
|
{onShowAll && (
|
|
244
|
-
<button className="text-[10px] text-
|
|
244
|
+
<button className="text-[10px] text-indigo-400 hover:text-indigo-300" onClick={onShowAll}>
|
|
245
245
|
View All Changes
|
|
246
246
|
</button>
|
|
247
247
|
)}
|
|
@@ -90,7 +90,7 @@ export const MemberWorkspaceTab = ({
|
|
|
90
90
|
</div>
|
|
91
91
|
{onViewAllChanges && (
|
|
92
92
|
<button
|
|
93
|
-
className="flex items-center gap-1 text-[10px] text-
|
|
93
|
+
className="flex items-center gap-1 text-[10px] text-indigo-400 hover:text-indigo-300"
|
|
94
94
|
onClick={onViewAllChanges}
|
|
95
95
|
>
|
|
96
96
|
<FileDiff size={10} />
|
|
@@ -550,7 +550,7 @@ export const MessageComposer = ({
|
|
|
550
550
|
</span>
|
|
551
551
|
) : null}
|
|
552
552
|
{isSelected ? (
|
|
553
|
-
<Check size={12} className="ml-auto shrink-0 text-
|
|
553
|
+
<Check size={12} className="ml-auto shrink-0 text-indigo-400" />
|
|
554
554
|
) : null}
|
|
555
555
|
</button>
|
|
556
556
|
);
|
|
@@ -640,7 +640,7 @@ export const MessageComposer = ({
|
|
|
640
640
|
<span className="inline-flex">
|
|
641
641
|
<button
|
|
642
642
|
type="button"
|
|
643
|
-
className="inline-flex shrink-0 items-center gap-1 rounded-full bg-
|
|
643
|
+
className="inline-flex shrink-0 items-center gap-1 rounded-full bg-indigo-600 px-3 py-1.5 text-[11px] font-medium text-white shadow-sm transition-colors hover:bg-indigo-500 disabled:cursor-not-allowed disabled:opacity-50"
|
|
644
644
|
disabled={!canSend}
|
|
645
645
|
onClick={handleSend}
|
|
646
646
|
>
|
|
@@ -122,7 +122,7 @@ export const MessagesFilterPopover = ({
|
|
|
122
122
|
>
|
|
123
123
|
<Filter size={14} />
|
|
124
124
|
{activeCount > 0 && (
|
|
125
|
-
<span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-
|
|
125
|
+
<span className="absolute -right-1 -top-1 flex size-4 items-center justify-center rounded-full bg-indigo-500 text-[10px] font-medium text-white">
|
|
126
126
|
{activeCount}
|
|
127
127
|
</span>
|
|
128
128
|
)}
|
|
@@ -566,7 +566,7 @@ export const MessagesPanel = memo(function MessagesPanel({
|
|
|
566
566
|
className={cn(
|
|
567
567
|
'shrink-0 rounded-full border px-2 py-0.5 transition-colors',
|
|
568
568
|
quickParticipantFilter === null
|
|
569
|
-
? 'border-
|
|
569
|
+
? 'border-indigo-500/40 bg-indigo-500/10 text-indigo-500'
|
|
570
570
|
: 'border-[var(--color-border)] text-[var(--color-text-muted)] hover:text-[var(--color-text)]'
|
|
571
571
|
)}
|
|
572
572
|
onClick={() => setParticipantFilter(null)}
|
|
@@ -580,7 +580,7 @@ export const MessagesPanel = memo(function MessagesPanel({
|
|
|
580
580
|
className={cn(
|
|
581
581
|
'shrink-0 rounded-full border px-2 py-0.5 transition-colors',
|
|
582
582
|
quickParticipantFilter === participant
|
|
583
|
-
? 'border-
|
|
583
|
+
? 'border-indigo-500/40 bg-indigo-500/10 text-indigo-500'
|
|
584
584
|
: 'border-[var(--color-border)] text-[var(--color-text-muted)] hover:text-[var(--color-text)]'
|
|
585
585
|
)}
|
|
586
586
|
onClick={() =>
|
|
@@ -1056,7 +1056,7 @@ export const MessagesPanel = memo(function MessagesPanel({
|
|
|
1056
1056
|
<TooltipTrigger asChild>
|
|
1057
1057
|
<Badge
|
|
1058
1058
|
variant="secondary"
|
|
1059
|
-
className="bg-
|
|
1059
|
+
className="bg-indigo-500/20 px-1.5 py-0.5 text-[10px] font-normal leading-none text-indigo-600 dark:text-indigo-400"
|
|
1060
1060
|
>
|
|
1061
1061
|
{messagesUnreadCount} 条新消息
|
|
1062
1062
|
</Badge>
|
|
@@ -1069,7 +1069,7 @@ export const MessagesPanel = memo(function MessagesPanel({
|
|
|
1069
1069
|
<TooltipTrigger asChild>
|
|
1070
1070
|
<button
|
|
1071
1071
|
type="button"
|
|
1072
|
-
className="flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] text-
|
|
1072
|
+
className="flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] text-indigo-400 transition-colors hover:bg-indigo-500/10"
|
|
1073
1073
|
onClick={handleMarkAllRead}
|
|
1074
1074
|
>
|
|
1075
1075
|
<CheckCheck size={12} />
|
|
@@ -1291,7 +1291,7 @@ export const MessagesPanel = memo(function MessagesPanel({
|
|
|
1291
1291
|
<TooltipTrigger asChild>
|
|
1292
1292
|
<Badge
|
|
1293
1293
|
variant="secondary"
|
|
1294
|
-
className="bg-
|
|
1294
|
+
className="bg-indigo-500/20 px-1 py-0 text-[9px] font-normal leading-none text-indigo-600 dark:text-indigo-400"
|
|
1295
1295
|
>
|
|
1296
1296
|
{messagesUnreadCount} 条新消息
|
|
1297
1297
|
</Badge>
|
|
@@ -1309,7 +1309,7 @@ export const MessagesPanel = memo(function MessagesPanel({
|
|
|
1309
1309
|
<Button
|
|
1310
1310
|
variant="ghost"
|
|
1311
1311
|
size="sm"
|
|
1312
|
-
className="size-[22px] p-0 text-
|
|
1312
|
+
className="size-[22px] p-0 text-indigo-400 hover:bg-indigo-500/10 hover:text-indigo-300"
|
|
1313
1313
|
onClick={handleMarkAllRead}
|
|
1314
1314
|
aria-label="将全部消息标为已读"
|
|
1315
1315
|
>
|
|
@@ -1542,7 +1542,7 @@ export const MessagesPanel = memo(function MessagesPanel({
|
|
|
1542
1542
|
<TooltipTrigger asChild>
|
|
1543
1543
|
<button
|
|
1544
1544
|
type="button"
|
|
1545
|
-
className="pointer-events-auto flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] text-
|
|
1545
|
+
className="pointer-events-auto flex items-center gap-1 rounded-md px-1.5 py-1 text-[11px] text-indigo-400 transition-colors hover:bg-indigo-500/10"
|
|
1546
1546
|
onClick={(e) => {
|
|
1547
1547
|
e.stopPropagation();
|
|
1548
1548
|
handleMarkAllRead();
|
|
@@ -106,7 +106,7 @@ export const ChangeReviewDialog: React.FC<ChangeReviewDialogProps> = ({
|
|
|
106
106
|
? 'flex items-center gap-2 rounded-md bg-emerald-500/5 px-3 py-2 font-mono text-xs text-emerald-400'
|
|
107
107
|
: status === 'deleted'
|
|
108
108
|
? 'flex items-center gap-2 rounded-md bg-red-500/5 px-3 py-2 font-mono text-xs text-red-400'
|
|
109
|
-
: 'flex items-center gap-2 rounded-md bg-
|
|
109
|
+
: 'flex items-center gap-2 rounded-md bg-indigo-500/5 px-3 py-2 font-mono text-xs text-indigo-400'
|
|
110
110
|
}
|
|
111
111
|
>
|
|
112
112
|
<span className="w-12 shrink-0 text-center font-sans text-[10px] uppercase tracking-wide opacity-60">
|
|
@@ -36,7 +36,7 @@ export const ScheduleStatusBadge = ({ status }: ScheduleStatusBadgeProps): React
|
|
|
36
36
|
|
|
37
37
|
const RUN_STATUS_CONFIG: Record<ScheduleRunStatus, { label: string; className: string }> = {
|
|
38
38
|
pending: { label: '等待中', className: 'text-zinc-400' },
|
|
39
|
-
warming_up: { label: '预热中', className: 'text-
|
|
39
|
+
warming_up: { label: '预热中', className: 'text-indigo-400' },
|
|
40
40
|
warm: { label: '已预热', className: 'text-cyan-400' },
|
|
41
41
|
running: { label: '运行中', className: 'text-emerald-400' },
|
|
42
42
|
completed: { label: '已完成', className: 'text-emerald-400' },
|
|
@@ -30,14 +30,14 @@ export const TeamSidebarRail = memo(function TeamSidebarRail({
|
|
|
30
30
|
const [logsOpen, setLogsOpen] = useState(false);
|
|
31
31
|
const logsSeparator = logsOpen ? (
|
|
32
32
|
<div
|
|
33
|
-
className={`group relative h-3 shrink-0 cursor-row-resize ${isLogsResizing ? 'bg-
|
|
33
|
+
className={`group relative h-3 shrink-0 cursor-row-resize ${isLogsResizing ? 'bg-indigo-500/10' : ''}`}
|
|
34
34
|
onMouseDown={onLogsResizeMouseDown}
|
|
35
35
|
>
|
|
36
36
|
<div
|
|
37
37
|
className={`absolute inset-x-0 top-1/2 h-0.5 -translate-y-1/2 transition-colors ${
|
|
38
38
|
isLogsResizing
|
|
39
|
-
? 'bg-
|
|
40
|
-
: 'bg-[var(--color-text-muted)]/35 group-hover:bg-
|
|
39
|
+
? 'bg-indigo-500'
|
|
40
|
+
: 'bg-[var(--color-text-muted)]/35 group-hover:bg-indigo-500/90'
|
|
41
41
|
}`}
|
|
42
42
|
/>
|
|
43
43
|
</div>
|
|
@@ -60,7 +60,7 @@ export const TeamSidebarRail = memo(function TeamSidebarRail({
|
|
|
60
60
|
<MessagesPanel position="sidebar" {...messagesPanelProps} />
|
|
61
61
|
</div>
|
|
62
62
|
<div
|
|
63
|
-
className={`absolute inset-y-0 right-0 z-20 w-1 cursor-col-resize transition-colors hover:bg-
|
|
63
|
+
className={`absolute inset-y-0 right-0 z-20 w-1 cursor-col-resize transition-colors hover:bg-indigo-500/30 ${isResizing ? 'bg-indigo-500/40' : ''}`}
|
|
64
64
|
onMouseDown={onResizeMouseDown}
|
|
65
65
|
/>
|
|
66
66
|
</div>
|
|
@@ -53,7 +53,7 @@ export const TaskRow = ({ task }: TaskRowProps): React.JSX.Element => {
|
|
|
53
53
|
</td>
|
|
54
54
|
<td className="px-3 py-2 text-xs">
|
|
55
55
|
{blocksIds.length > 0 ? (
|
|
56
|
-
<span className="text-
|
|
56
|
+
<span className="text-indigo-600 dark:text-indigo-400">
|
|
57
57
|
{blocksIds.map((id) => `#${deriveTaskDisplayId(id)}`).join(', ')}
|
|
58
58
|
</span>
|
|
59
59
|
) : (
|
|
@@ -17,7 +17,7 @@ export const SkillChip = ({ skill, onRemove }: SkillChipProps): React.JSX.Elemen
|
|
|
17
17
|
<div className="group inline-flex items-center gap-1.5 rounded-full bg-[var(--color-bg-secondary)] px-2.5 py-1 text-xs transition-colors hover:bg-[var(--color-bg-secondary-hover)]">
|
|
18
18
|
<span className="max-w-[120px] truncate text-[var(--color-text)]">{skill.name}</span>
|
|
19
19
|
{skill.scope && (
|
|
20
|
-
<span className="rounded bg-
|
|
20
|
+
<span className="rounded bg-indigo-500/20 px-1 py-0.5 text-[10px] text-indigo-400">
|
|
21
21
|
{skill.scope === 'project' ? '项目' : '用户'}
|
|
22
22
|
</span>
|
|
23
23
|
)}
|