Skip to content

Commit be92580

Browse files
committed
refactor(ui): migrate muted text in pages
T16-B 第 2 批:照 tmp/t16a/slice.md 清单迁移其余 components/** 与 pages/** 的弱化灰文本(含 NoteImage 的样式常量手工改)。 - color 一律走 Text 的 tone(本单元一律 ink-3,5.13:1;无一处 ink-4,理由见报告) - A 类三元逐处判:ok / ink-2 / due / inherit 四类语义等价档才迁;品牌青·粉·靛蓝·三红支登记例外 - B1/B2 硬守卫冲突:NON_MIGRATED_14 的 7 文件 9 处**回退不迁**(既有断言不许打红) - fontSize 在档值换 size={n};越界值原样留行内(R2 交批 5/6);文案逐字保留、零结构改动
1 parent 9532b18 commit be92580

59 files changed

Lines changed: 269 additions & 256 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎app/src/components/KnowledgeCanvasView.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ import { layoutCanvas } from "../utils/layoutCanvas";
3030
import CanvasNodeQuestion from "./CanvasNodeQuestion";
3131
import CanvasNodeConcept from "./CanvasNodeConcept";
3232
import CanvasNodeModel from "./CanvasNodeModel";
33-
import { StatusLine } from "../ui/primitives";
33+
import { StatusLine, Text } from "../ui/primitives";
3434

3535
interface Props {
3636
systemId: number;
@@ -376,7 +376,7 @@ function CanvasFlow({
376376
← 树视图
377377
</button>
378378
<span style={{ fontSize: 12, fontWeight: 600, color: "#374151" }}>🗺 知识画布</span>
379-
<span style={{ fontSize: 11, color: "#9ca3af" }}>拖拽整理你的知识结构——位置只由你决定</span>
379+
<Text tone="ink-3" style={{ fontSize: 11 }}>拖拽整理你的知识结构——位置只由你决定</Text>
380380
</div>
381381

382382
<div style={{ flex: 1, minHeight: 0 }}>

‎app/src/components/KnowledgeConceptDialog.tsx‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* @ai-context: 不预填内容(预填=假燃料)——所有输入从空字符串开始。
1010
*/
1111
import { useState } from "react";
12-
import { Modal, StatusLine } from "../ui/primitives";
12+
import { Modal, StatusLine, Text } from "../ui/primitives";
1313
import { invoke } from "@tauri-apps/api/core";
1414

1515
interface Props {
@@ -138,9 +138,9 @@ export default function KnowledgeConceptDialog({ systemId, onCreated, onClose }:
138138
style={textarea}
139139
/>
140140

141-
<p style={{ fontSize: 11, color: "#9ca3af", margin: "10px 0 0" }}>
141+
<Text as="p" tone="ink-3" style={{ fontSize: 11, margin: "10px 0 0" }}>
142142
新概念默认状态为「核心」,创建后可在右栏详情面板修改。
143-
</p>
143+
</Text>
144144

145145
{error && (
146146
<div style={{ marginTop: 10 }}>

‎app/src/components/KnowledgeDecisionForm.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* application 且 conceptId 提供时默认带上 conceptIds=[conceptId](挂概念)。
1414
*/
1515
import { useCallback, useEffect, useMemo, useState } from "react";
16-
import { Modal, StatusLine } from "../ui/primitives";
16+
import { Modal, StatusLine, Text } from "../ui/primitives";
1717
import { invoke } from "@tauri-apps/api/core";
1818
import type {
1919
KnowledgeConcept, KnowledgeDecision, KnowledgeModel, KnowledgeNode,
@@ -230,7 +230,7 @@ function Field({ label, testid, value, onChange, placeholder }: { label: string;
230230

231231
/** 复选列表(引用多选:概念/节点/模型/笔记/闪卡/碎片) */
232232
function RefCheckboxList({ title, items, checked, onToggle, dataPrefix }: { title: string; items: { id: number; label: string }[]; checked: (id: number) => boolean; onToggle: (id: number) => void; dataPrefix: string }) {
233-
if (items.length === 0) return <div style={{ fontSize: 11, color: "#9ca3af", marginTop: 2 }}>{title}:暂无</div>;
233+
if (items.length === 0) return <Text as="div" tone="ink-3" style={{ fontSize: 11, marginTop: 2 }}>{title}:暂无</Text>;
234234
return (
235235
<div style={{ marginTop: 4 }}>
236236
<div style={{ fontSize: 11, color: "#6b7280", marginBottom: 2 }}>{title}</div>

‎app/src/components/KnowledgeDecisionLog.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { invoke } from "@tauri-apps/api/core";
1616
import { confirm } from "@tauri-apps/plugin-dialog";
1717
import type { DecisionKind, KnowledgeDecision } from "../types/knowledge";
1818
import { countUsedRefs, parseUsedRefs } from "../types/knowledge";
19-
import { EmptyState, StatusLine } from "../ui/primitives";
19+
import { EmptyState, StatusLine, Text } from "../ui/primitives";
2020

2121
interface Props {
2222
systemId: number;
@@ -96,7 +96,7 @@ export default function KnowledgeDecisionLog({ systemId, conceptId, onChanged }:
9696
<span data-testid={`decision-kind-${d.id}`} style={{ fontSize: 12 } as const}>{d.kind === "decision" ? "🧭" : "🛠"}</span>
9797
<div style={{ flex: 1, minWidth: 0 }}>
9898
<div data-testid={`decision-content-${d.id}`} style={{ fontSize: 12, color: "#374151", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>{d.content}</div>
99-
<div style={{ fontSize: 11, color: "#9ca3af" }}>{formatDecisionTime(d.decidedAt)} · {refCount} 个引用</div>
99+
<Text as="div" tone="ink-3" style={{ fontSize: 11 }}>{formatDecisionTime(d.decidedAt)} · {refCount} 个引用</Text>
100100
</div>
101101
<button data-testid={`decision-delete-${d.id}`} onClick={() => void remove(d.id)} title="删除记录" style={{ border: "none", background: "none", cursor: "pointer", fontSize: 13, color: "#9ca3af" }}>🗑</button>
102102
</div>

‎app/src/components/KnowledgeDetailPanel.tsx‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import KnowledgeLinkSection from "./KnowledgeLinkSection";
2222
import DiscoverySuggestSection from "./DiscoverySuggestSection";
2323
import KnowledgeDecisionForm from "./KnowledgeDecisionForm";
2424
import KnowledgeDecisionLog from "./KnowledgeDecisionLog";
25-
import { StatusLine } from "../ui/primitives";
25+
import { StatusLine, Text } from "../ui/primitives";
2626

2727
interface Props {
2828
/** 面板宽(v0.15 全站自适应——父层 useColumnLayout 驱动;缺省 320=历史值) */
@@ -163,9 +163,9 @@ export default function KnowledgeDetailPanel({ width = 320, system, nodes, conce
163163
</div>
164164
)}
165165
{!selection && (
166-
<div style={{ fontSize: 12, color: "#9ca3af", textAlign: "center", paddingTop: 40 }}>
166+
<Text as="div" size={5} tone="ink-3" style={{ textAlign: "center", paddingTop: 40 }}>
167167
从中间选择一个实体查看详情
168-
</div>
168+
</Text>
169169
)}
170170

171171
{/* ── 节点:只读信息 + 引用 ── */}
@@ -175,9 +175,9 @@ export default function KnowledgeDetailPanel({ width = 320, system, nodes, conce
175175
<div style={{ fontSize: 14, fontWeight: 600, color: "#111827", marginBottom: 4 }}>{selectedNode.text}</div>
176176
<div style={{ display: "flex", gap: 6, marginBottom: 6 }}>
177177
<span style={{ fontSize: 11, padding: "1px 8px", borderRadius: 8, background: "#f9fafb", color: "#6b7280" }}>{nodeTypeLabel[selectedNode.type]}</span>
178-
<span style={{ fontSize: 11, color: "#9ca3af", alignSelf: "center" }}>
178+
<Text tone="ink-3" style={{ fontSize: 11, alignSelf: "center" }}>
179179
父节点:{selectedNode.parentId != null ? (nodes.find((n) => n.id === selectedNode.parentId)?.text ?? "—") : "(根)"}
180-
</span>
180+
</Text>
181181
</div>
182182
<KnowledgeLinkSection systemId={system.id} entityType="node" entityId={selectedNode.id} links={links} nodes={nodes} concepts={concepts} models={models} onChanged={onChanged} />
183183
</div>

‎app/src/components/KnowledgeGraphView.tsx‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ import {
2929
type GraphSnapshot,
3030
} from "../utils/graphSnapshot";
3131
import { isColorId, onColorText, paletteHex, type ThemeMode } from "../utils/colorPalette";
32-
import { StatusLine } from "../ui/primitives";
32+
import { StatusLine, Text } from "../ui/primitives";
3333

3434
/** 图谱节点 data(RF 节点 data 契约——跳转/着色所需全部字段)
3535
* 注意:type 而非 interface——RF v12 Node<T> 约束 Record<string, unknown>,
@@ -171,9 +171,9 @@ function GraphFlow({ onOpenNote, onOpenGroup, onOpenSystem, refreshToken }: Prop
171171
</button>
172172
))}
173173
{snapshot && (
174-
<span data-testid="graph-counts" style={{ fontSize: 11, color: "#9ca3af" }}>
174+
<Text tone="ink-3" testId="graph-counts" style={{ fontSize: 11 }}>
175175
{snapshot.nodes.length} 节点 · {visibleCount} 边
176-
</span>
176+
</Text>
177177
)}
178178
<span style={{ fontSize: 10, color: "#d1d5db", marginLeft: "auto" }}>单击聚焦 · 双击跳转</span>
179179
</div>
@@ -194,13 +194,13 @@ function GraphFlow({ onOpenNote, onOpenGroup, onOpenSystem, refreshToken }: Prop
194194

195195
{empty ? (
196196
/* 空态(spec §5:空图不阻塞其他功能;重试按钮) */
197-
<div data-testid="graph-empty" style={{ flex: 1, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: 10, color: "#9ca3af", fontSize: 13 }}>
197+
<Text as="div" size={4} tone="ink-3" testId="graph-empty" style={{ flex: 1, display: "flex", flexDirection: "column", alignItems: "center", justifyContent: "center", gap: 10 }}>
198198
<div style={{ fontSize: 36 }}>🕸</div>
199199
<p>图谱还是空的——挂接笔记/概念后这里会出现关系。</p>
200200
<button data-testid="graph-retry" onClick={() => void load()} style={{ fontSize: 12, cursor: "pointer", padding: "4px 12px", borderRadius: 4, border: "1px solid #d1d5db", background: "#fff" }}>
201201
刷新
202202
</button>
203-
</div>
203+
</Text>
204204
) : (
205205
<div style={{ flex: 1, minHeight: 0 }}>
206206
<ReactFlow

‎app/src/components/KnowledgeModelDialog.tsx‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
* @ai-context: 不预填内容(预填=假燃料)——所有输入从空字符串开始。
99
*/
1010
import { useState } from "react";
11-
import { isImeComposing, Modal, StatusLine } from "../ui/primitives";
11+
import { isImeComposing, Modal, StatusLine, Text } from "../ui/primitives";
1212
import { invoke } from "@tauri-apps/api/core";
1313

1414
interface Props {
@@ -136,9 +136,9 @@ export default function KnowledgeModelDialog({ systemId, onCreated, onClose }: P
136136
style={textarea}
137137
/>
138138

139-
<p style={{ fontSize: 11, color: "#9ca3af", margin: "10px 0 0" }}>
139+
<Text as="p" tone="ink-3" style={{ fontSize: 11, margin: "10px 0 0" }}>
140140
新模型默认状态为「active」,创建后可在右栏详情面板修改。
141-
</p>
141+
</Text>
142142

143143
{error && (
144144
<div style={{ marginTop: 10 }}>

‎app/src/components/KnowledgeSystemWizard.tsx‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
* 底栏「取消」仍直连 `onClose`(原行为:取消不确认)。
1919
*/
2020
import { useMemo, useState } from "react";
21-
import { Modal, StatusLine } from "../ui/primitives";
21+
import { Modal, StatusLine, Text } from "../ui/primitives";
2222
import { invoke } from "@tauri-apps/api/core";
2323
import { confirm } from "@tauri-apps/plugin-dialog";
2424
import type { KnowledgeSystem, KnowledgeNodeType } from "../types/knowledge";
@@ -226,7 +226,7 @@ export default function KnowledgeSystemWizard({ onClose, onCreated }: Props) {
226226

227227
{step === 2 && (
228228
<div style={{ display: "flex", flexDirection: "column", gap: 6 }}>
229-
<div style={{ fontSize: 11, color: "#9ca3af", marginBottom: 4 }}>每个入口一行;可全部跳过(空行自动忽略)。</div>
229+
<Text as="div" tone="ink-3" style={{ fontSize: 11, marginBottom: 4 }}>每个入口一行;可全部跳过(空行自动忽略)。</Text>
230230
{domainEntries.map((val, i) => (
231231
<input
232232
key={i}

‎app/src/components/KnowledgeTreeView.tsx‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { invoke } from "@tauri-apps/api/core";
1515
import { confirm } from "@tauri-apps/plugin-dialog";
1616
import type { KnowledgeNode, KnowledgeLink, KnowledgeNodeType } from "../types/knowledge";
1717
import { nodeTypeColor, nodeTypeLabel } from "../types/knowledge";
18-
import { Button, StatusLine } from "../ui/primitives";
18+
import { Button, StatusLine, Text } from "../ui/primitives";
1919

2020
interface Props {
2121
systemId: number;
@@ -179,7 +179,7 @@ export default function KnowledgeTreeView({ systemId, nodes, links, selectedNode
179179
<span style={{ flex: 1, fontSize: 13, color: "#374151", overflow: "hidden", textOverflow: "ellipsis", whiteSpace: "nowrap" }}>{n.text}</span>
180180
)}
181181
{count > 0 && (
182-
<span data-testid={`node-ref-${n.id}`} style={{ fontSize: 11, color: "#9ca3af", whiteSpace: "nowrap" }}>{count} 引用</span>
182+
<Text tone="ink-3" testId={`node-ref-${n.id}`} style={{ fontSize: 11, whiteSpace: "nowrap" }}>{count} 引用</Text>
183183
)}
184184
{!isEditing && (
185185
<span onClick={(e) => e.stopPropagation()} style={{ display: "inline-flex", gap: 2 }}>
@@ -240,9 +240,9 @@ export default function KnowledgeTreeView({ systemId, nodes, links, selectedNode
240240
<div style={{ padding: "24px 20px", textAlign: "center" }}>
241241
<div style={{ fontSize: 26, marginBottom: 8 }}>🌱</div>
242242
<div style={{ fontSize: 14, fontWeight: 600, color: "#374151", marginBottom: 6 }}>从子问题开始</div>
243-
<p style={{ fontSize: 12, color: "#9ca3af", lineHeight: 1.7, margin: "0 auto 12px", maxWidth: 300 }}>
243+
<Text as="p" size={5} tone="ink-3" style={{ lineHeight: 1.7, margin: "0 auto 12px", maxWidth: 300 }}>
244244
把卡住你的大问题拆成一个个能动手的子问题,每拆一层,就把它从"一团乱麻"变成"一条路径"。
245-
</p>
245+
</Text>
246246
<button data-testid="tree-add-root" onClick={() => startAdd(null)} style={{ fontSize: 13, cursor: "pointer", padding: "6px 14px", borderRadius: 6, border: "1px solid #0f766e", background: "#f0fdfa", color: "#0f766e" }}>
247247
+ 添加根问题
248248
</button>
@@ -276,9 +276,9 @@ export default function KnowledgeTreeView({ systemId, nodes, links, selectedNode
276276
{nodes.length === 0 && addDraft?.parentId === null && (
277277
<div style={{ padding: "16px 8px 8px", textAlign: "center" }}>
278278
<div style={{ fontSize: 20, marginBottom: 6 }}>🌱</div>
279-
<p style={{ fontSize: 12, color: "#9ca3af", lineHeight: 1.6, margin: "0 0 10px" }}>
279+
<Text as="p" size={5} tone="ink-3" style={{ lineHeight: 1.6, margin: "0 0 10px" }}>
280280
写下第一个根问题,让它成为问题树的起点。
281-
</p>
281+
</Text>
282282
</div>
283283
)}
284284

‎app/src/components/LearningLibraryEngineSection.tsx‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import { useCallback, useEffect, useState } from "react";
1717
import { invoke } from "@tauri-apps/api/core";
1818
import type { EmbeddingStatusView } from "../types/kb";
19+
import { Text } from "../ui/primitives";
1920

2021
export default function LearningLibraryEngineSection() {
2122
const [emb, setEmb] = useState<EmbeddingStatusView | null>(null);
@@ -82,9 +83,9 @@ export default function LearningLibraryEngineSection() {
8283
✓ 就绪(dim={emb.dim})
8384
</span>
8485
) : (
85-
<span data-testid="kb-emb-noop" style={{ color: "#9ca3af" }} title={emb?.modelDir ?? "模型目录未探测"}>
86+
<Text tone="ink-3" testId="kb-emb-noop" title={emb?.modelDir ?? "模型目录未探测"}>
8687
○ {emb?.detail ?? "状态读取中…"}
87-
</span>
88+
</Text>
8889
)}
8990
<span style={{ flex: 1 }} />
9091
<button

0 commit comments

Comments
 (0)