@tfdesign/b-end 1.0.4
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/AI_READ_FIRST.md +131 -0
- package/LICENSE +21 -0
- package/README.md +353 -0
- package/package.json +67 -0
- package/scripts/check-tfds-contract.mjs +334 -0
- package/scripts/check-tfds-integration.mjs +263 -0
- package/scripts/postinstall-cursor-skill.mjs +382 -0
- package/scripts/setup.mjs +520 -0
- package/skills/tfds/CHECKLIST.md +205 -0
- package/skills/tfds/COMMON_FAILURES.md +238 -0
- package/skills/tfds/DESIGN_PRINCIPLES.md +477 -0
- package/skills/tfds/GLOBAL_DESIGN_RULES.md +636 -0
- package/skills/tfds/LAYOUT_RECIPES.md +140 -0
- package/skills/tfds/LAYOUT_RULES.md +1355 -0
- package/skills/tfds/PAGE_ARCHETYPES.md +201 -0
- package/skills/tfds/SKILL.md +188 -0
- package/skills/tfds/components.index.json +7305 -0
- package/skills/tfds/components.summary.json +1809 -0
- package/src/_b_end_runtime/components/AiSuggestionShared.jsx +166 -0
- package/src/_b_end_runtime/components/Avatar.jsx +325 -0
- package/src/_b_end_runtime/components/Avatar.tokens.js +76 -0
- package/src/_b_end_runtime/components/AvatarGridPreview.jsx +56 -0
- package/src/_b_end_runtime/components/AvatarGroup.jsx +80 -0
- package/src/_b_end_runtime/components/AvatarGroup.tokens.js +28 -0
- package/src/_b_end_runtime/components/Button.jsx +144 -0
- package/src/_b_end_runtime/components/Button.tokens.js +90 -0
- package/src/_b_end_runtime/components/Card.jsx +460 -0
- package/src/_b_end_runtime/components/Card.tokens.js +124 -0
- package/src/_b_end_runtime/components/CardPreview.jsx +51 -0
- package/src/_b_end_runtime/components/ChatBubble.jsx +384 -0
- package/src/_b_end_runtime/components/ChatBubble.tokens.js +60 -0
- package/src/_b_end_runtime/components/ChatBubblePreview.jsx +129 -0
- package/src/_b_end_runtime/components/ChatInput.jsx +1399 -0
- package/src/_b_end_runtime/components/ChatInput.tokens.js +75 -0
- package/src/_b_end_runtime/components/ChatMessage.jsx +2215 -0
- package/src/_b_end_runtime/components/ChatMessage.tokens.js +257 -0
- package/src/_b_end_runtime/components/ChatMessagePreview.jsx +388 -0
- package/src/_b_end_runtime/components/Checkbox.jsx +317 -0
- package/src/_b_end_runtime/components/Checkbox.tokens.js +59 -0
- package/src/_b_end_runtime/components/ConversationList.jsx +1264 -0
- package/src/_b_end_runtime/components/ConversationList.tokens.js +135 -0
- package/src/_b_end_runtime/components/ConversationListPreview.jsx +108 -0
- package/src/_b_end_runtime/components/CustomerServiceWorkspaceFrame.jsx +324 -0
- package/src/_b_end_runtime/components/CustomerServiceWorkspaceFrame.tokens.js +69 -0
- package/src/_b_end_runtime/components/DatePicker.jsx +739 -0
- package/src/_b_end_runtime/components/DatePicker.tokens.js +99 -0
- package/src/_b_end_runtime/components/Empty.jsx +141 -0
- package/src/_b_end_runtime/components/Empty.tokens.js +40 -0
- package/src/_b_end_runtime/components/Form.jsx +609 -0
- package/src/_b_end_runtime/components/Form.tokens.js +77 -0
- package/src/_b_end_runtime/components/FormFieldStack.jsx +123 -0
- package/src/_b_end_runtime/components/FormFieldStack.tokens.js +12 -0
- package/src/_b_end_runtime/components/FormTitle.jsx +119 -0
- package/src/_b_end_runtime/components/FormTitle.tokens.js +87 -0
- package/src/_b_end_runtime/components/FullScreenPage.jsx +97 -0
- package/src/_b_end_runtime/components/FullScreenPage.tokens.js +19 -0
- package/src/_b_end_runtime/components/Icon.jsx +172 -0
- package/src/_b_end_runtime/components/Icon.tokens.js +26 -0
- package/src/_b_end_runtime/components/IconGridPreview.jsx +277 -0
- package/src/_b_end_runtime/components/InfoDisplayPanel.jsx +620 -0
- package/src/_b_end_runtime/components/InfoDisplayPanel.tokens.js +71 -0
- package/src/_b_end_runtime/components/InfoDisplayPanelPreview.jsx +133 -0
- package/src/_b_end_runtime/components/Input.jsx +258 -0
- package/src/_b_end_runtime/components/Input.tokens.js +68 -0
- package/src/_b_end_runtime/components/InputNumber.jsx +242 -0
- package/src/_b_end_runtime/components/InputNumber.tokens.js +55 -0
- package/src/_b_end_runtime/components/Modal.jsx +155 -0
- package/src/_b_end_runtime/components/Modal.tokens.js +73 -0
- package/src/_b_end_runtime/components/NavBar.jsx +842 -0
- package/src/_b_end_runtime/components/NavBar.tokens.js +97 -0
- package/src/_b_end_runtime/components/NavBarPreview.jsx +11 -0
- package/src/_b_end_runtime/components/Radio.jsx +227 -0
- package/src/_b_end_runtime/components/Radio.tokens.js +59 -0
- package/src/_b_end_runtime/components/Select.jsx +766 -0
- package/src/_b_end_runtime/components/Select.tokens.js +99 -0
- package/src/_b_end_runtime/components/Sheet.jsx +132 -0
- package/src/_b_end_runtime/components/Sheet.tokens.js +61 -0
- package/src/_b_end_runtime/components/Slider.jsx +346 -0
- package/src/_b_end_runtime/components/Slider.tokens.js +47 -0
- package/src/_b_end_runtime/components/Switch.jsx +124 -0
- package/src/_b_end_runtime/components/Switch.tokens.js +38 -0
- package/src/_b_end_runtime/components/Table.jsx +1338 -0
- package/src/_b_end_runtime/components/Table.tokens.js +147 -0
- package/src/_b_end_runtime/components/TablePreview.jsx +599 -0
- package/src/_b_end_runtime/components/Tabs.jsx +149 -0
- package/src/_b_end_runtime/components/Tabs.tokens.js +102 -0
- package/src/_b_end_runtime/components/Tag.jsx +199 -0
- package/src/_b_end_runtime/components/Tag.tokens.js +171 -0
- package/src/_b_end_runtime/components/TagBar.jsx +1134 -0
- package/src/_b_end_runtime/components/TagBar.tokens.js +75 -0
- package/src/_b_end_runtime/components/TagGridPreview.jsx +23 -0
- package/src/_b_end_runtime/components/TagInput.jsx +382 -0
- package/src/_b_end_runtime/components/TagInput.tokens.js +52 -0
- package/src/_b_end_runtime/components/TextArea.jsx +363 -0
- package/src/_b_end_runtime/components/TextArea.tokens.js +65 -0
- package/src/_b_end_runtime/components/TimePicker.jsx +444 -0
- package/src/_b_end_runtime/components/TimePicker.tokens.js +77 -0
- package/src/_b_end_runtime/components/Toast.jsx +120 -0
- package/src/_b_end_runtime/components/Toast.tokens.js +146 -0
- package/src/_b_end_runtime/components/Tooltip.jsx +282 -0
- package/src/_b_end_runtime/components/Tooltip.tokens.js +48 -0
- package/src/_b_end_runtime/components/TooltipPreview.jsx +50 -0
- package/src/_b_end_runtime/components/Upload.jsx +455 -0
- package/src/_b_end_runtime/components/Upload.tokens.js +47 -0
- package/src/_b_end_runtime/components/avatar-assets/avatar-default.png +0 -0
- package/src/_b_end_runtime/components/avatar-group-assets/avatar-group-1.png +0 -0
- package/src/_b_end_runtime/components/avatar-group-assets/avatar-group-2.png +0 -0
- package/src/_b_end_runtime/components/avatar-group-assets/avatar-group-3.png +0 -0
- package/src/_b_end_runtime/components/avatar-group-assets/avatar-group-4.png +0 -0
- package/src/_b_end_runtime/components/avatar-group-assets/avatar-group-5.png +0 -0
- package/src/_b_end_runtime/components/empty-assets/administrator-1.svg +40 -0
- package/src/_b_end_runtime/components/empty-assets/administrator-2.svg +33 -0
- package/src/_b_end_runtime/components/empty-assets/construction.svg +33 -0
- package/src/_b_end_runtime/components/empty-assets/failure.svg +49 -0
- package/src/_b_end_runtime/components/empty-assets/idle.svg +34 -0
- package/src/_b_end_runtime/components/empty-assets/no-access.svg +36 -0
- package/src/_b_end_runtime/components/empty-assets/no-content.svg +77 -0
- package/src/_b_end_runtime/components/empty-assets/no-result.svg +61 -0
- package/src/_b_end_runtime/components/empty-assets/not-found.svg +46 -0
- package/src/_b_end_runtime/components/empty-assets/success.svg +38 -0
- package/src/_b_end_runtime/components/file-type-assets/batch-report.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/catcat.svg +21 -0
- package/src/_b_end_runtime/components/file-type-assets/code.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/conversation.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/document.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/feishu-card.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/feishu-sheet.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/feishu.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/image.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/index.js +105 -0
- package/src/_b_end_runtime/components/file-type-assets/knowledge.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/pdf.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/pe.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/strategy.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/table.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/webpage.png +0 -0
- package/src/_b_end_runtime/components/file-type-assets/xmind.png +0 -0
- package/src/_b_end_runtime/components/icons/icon-data.js +12496 -0
- package/src/_b_end_runtime/components/nav-bar-assets/bytehi-logo-mark.svg +21 -0
- package/src/_b_end_runtime/components/table-assets/avatar.png +0 -0
- package/src/_b_end_runtime/components/table-assets/button.png +0 -0
- package/src/_b_end_runtime/components/table-assets/icon-chevron-down.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/avatar.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/button.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/checkbox.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/icon-chevron-right.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/icon.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/semi-icons-handle.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/semi-icons-tree-triangle-right.png +0 -0
- package/src/_b_end_runtime/components/table-cell-assets/switch.png +0 -0
- package/src/_b_end_runtime/components/tagShared.js +3 -0
- package/src/_b_end_runtime/components/team-avatar-assets/chengcheng-murphy.png +0 -0
- package/src/_b_end_runtime/components/team-avatar-assets/duan-ran.png +0 -0
- package/src/_b_end_runtime/components/team-avatar-assets/guo-zhezhi.png +0 -0
- package/src/_b_end_runtime/components/team-avatar-assets/li-siru.png +0 -0
- package/src/_b_end_runtime/components/team-avatar-assets/liu-delin.png +0 -0
- package/src/_b_end_runtime/components.js +3499 -0
- package/src/_b_end_runtime/index.js +9 -0
- package/src/_b_end_runtime/page-patterns/BasePageFramePattern.jsx +395 -0
- package/src/_b_end_runtime/page-patterns/ChatConversationPattern.jsx +989 -0
- package/src/_b_end_runtime/page-patterns/ChatHomePagePattern.jsx +281 -0
- package/src/_b_end_runtime/page-patterns/CopilotPagePattern.jsx +380 -0
- package/src/_b_end_runtime/page-patterns/CustomerServiceWorkspaceFramePattern.jsx +392 -0
- package/src/_b_end_runtime/page-patterns/IMConversationPattern.jsx +590 -0
- package/src/_b_end_runtime/page-patterns/McpManagementPage.jsx +237 -0
- package/src/_b_end_runtime/page-patterns/StrategyListPage.jsx +189 -0
- package/src/_b_end_runtime/page-patterns/TabTopBarListPage.jsx +594 -0
- package/src/_b_end_runtime/page-patterns/VariableManagementPage.jsx +87 -0
- package/src/_b_end_runtime/page-patterns/pageListShared.jsx +177 -0
- package/src/_b_end_runtime/patterns.js +428 -0
- package/src/_b_end_runtime/preview-registry.jsx +4719 -0
- package/src/_b_end_runtime/teamMembers.js +56 -0
- package/src/_b_end_runtime/tokens.js +500 -0
- package/src/index.d.ts +1073 -0
- package/src/index.js +52 -0
- package/theme.css +350 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
# TFDS 页面范式选型(AI 先判页面,再选组件)
|
|
2
|
+
|
|
3
|
+
> **作用域**:生成整页前,用本文件判断页面属于哪种范式。选定范式后,再到 `components.summary.json` 选组件、到 `components.index.json` 读取命中组件详情。
|
|
4
|
+
>
|
|
5
|
+
> **原则**:页面范式由用户第一步动作决定,而不是由视觉喜好决定。
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 目录
|
|
10
|
+
|
|
11
|
+
- §0 选型决策树
|
|
12
|
+
- §1 平台壳 / 模块工作区
|
|
13
|
+
- §2 列表管理页
|
|
14
|
+
- §3 分类列表 / 知识库详情页
|
|
15
|
+
- §4 策略 / 编辑详情页
|
|
16
|
+
- §5 会话工作台 / 托管页
|
|
17
|
+
- §6 入口页 / AI 入口页
|
|
18
|
+
- §7 产物预览 / 任务协同页
|
|
19
|
+
- §8 多步骤配置 / 批测评估页
|
|
20
|
+
- §9 选型后必须做
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## 0. 选型决策树
|
|
25
|
+
|
|
26
|
+
| 用户第一步动作 | 首选页面模板 | 布局 Recipe | 必须出现的主组件 | 不要误选 |
|
|
27
|
+
| --- | --- | --- | --- | --- |
|
|
28
|
+
| 筛选、搜索、浏览一批结构化对象、批量操作、查看详情 | `BasePageFramePattern`,再从 `StrategyListPage` / `VariableManagementPage` / `McpManagementPage` / `TabTopBarListPage` 选子模板 | `base-management` | `NavBar`、`FormTitle`、`Input/Select/DatePicker/TagInput`、`Table`、`Tag`、`Button`,有分类维度时加 `TagBar` | 不要因为页面里有 AI 字样就选 `ChatHomePagePattern` 或 `ChatConversationPattern` |
|
|
29
|
+
| 用户尚未进入具体上下文,第一步是输入一句需求、搜索助手、从模板 / 案例开始 | `ChatHomePagePattern` | `chat-home` | `NavBar`、`ChatInput`、`Tabs`、`Card`、`Input`、`Icon`;右侧主区保持浅灰底,模板卡用白底 Card | 不要做成“标题 + 筛选 + 表格”的白卡管理页;不要在右侧内容区外包一整张白色大卡 |
|
|
30
|
+
| 用户已在一个 AI 任务 / 会话里,第一步是继续追问、看执行进度、看 AI 消息流 | `ChatConversationPattern` | `chat-conversation` | `ChatMessage`、`ChatInput`、`Button`、`Icon` | 不要用 `ChatBubble` 手搓 AI 回复,也不要把消息流塞进表格 / 白卡列表 |
|
|
31
|
+
| 用户正在编辑 / 查看一个对象或产物,同时需要 AI 辅助分析、改写、解释、侧边追问 | `CopilotPagePattern` | `copilot-workbench` | `Button`、`Tabs`、`ChatInput`、`Switch`、`Icon`,编辑区按内容补 `FormTitle/TextArea/InputNumber/Select` | 不要选纯 `ChatConversationPattern`,因为主角不是消息流,而是右侧对象 / 产物 / 画布 |
|
|
32
|
+
| 用户处理真实人际消息、客服接待、私信、站内信、履约沟通,第一步是查看历史消息并回复 | `IMConversationPattern`,多线程时外层组合 `ConversationList` | `im-thread` | `ChatBubble`、`ChatInput variant="im-basic"`,多线程加 `ConversationList` | 不要用 `ChatMessage` 渲染普通 IM 气泡;不要把普通客服会话误判为 AI 对话页 |
|
|
33
|
+
| 无权限、建设中、无数据 | `BasePageFramePattern` 的 NoAccess / Construction 子示例或 `Empty` | 跟随承载页面,通常 `base-management` | `Empty`、`Button` | 不要新造插画、空状态卡片或手写状态徽标 |
|
|
34
|
+
|
|
35
|
+
### 0.1 五模板选择优先级
|
|
36
|
+
|
|
37
|
+
当用户描述同时命中多个模板时,按下面顺序裁决,裁决依据是“用户进入页面后的第一步动作”和“页面主角”,不是页面里出现了哪个组件名。
|
|
38
|
+
|
|
39
|
+
1. **普通 IM / 客服沟通优先判 `IMConversationPattern`**:只要主线是人与人 / 人与客服 / 用户与机器人按时间线往返,且业务目标是继续回复当前线程,就用 IM;AI 只作为机器人角色存在时也仍是 IM。
|
|
40
|
+
2. **AI 消息流优先判 `ChatConversationPattern`**:如果主线是一条 AI 任务会话,用户要追问、确认任务规划、看流式执行、查看 AI 产物卡,就用 AI 对话页。
|
|
41
|
+
3. **对象编辑 + AI 侧助优先判 `CopilotPagePattern`**:如果右侧对象、文档、策略画布、报告预览是主工作区,AI 只是辅助解释 / 改写 / 追问,就用 Copilot。
|
|
42
|
+
4. **从 0 开始发起任务优先判 `ChatHomePagePattern`**:如果用户还没选对象、没进入会话,只是要搜索助手、输入需求、从模板开始,就用 AI 入口页。
|
|
43
|
+
5. **结构化对象管理默认判 `BasePageFramePattern`**:只要第一步是筛选、浏览、批量处理一批对象,就回到白卡管理页,不因为“AI 变量 / 智能策略 / 机器人列表”等名词改变模板。
|
|
44
|
+
|
|
45
|
+
### 0.2 模板到组件的生成矩阵
|
|
46
|
+
|
|
47
|
+
| 模板 | 组件调用铁律 | 常见错误 |
|
|
48
|
+
| --- | --- | --- |
|
|
49
|
+
| `BasePageFramePattern` | 页面壳先放 `NavBar`;白卡标题用 `FormTitle`;筛选用 `Input/Select/DatePicker/Checkbox/TagInput`;列表用 `Table`;分类维度用 `TagBar`;状态全部用 `Tag`;动作全部用 `Button` | 手写标题、手写状态徽标、用 `Button` 冒充 Tabs、表格外层没有独立滚动 |
|
|
50
|
+
| `ChatHomePagePattern` | 主入口必须是 `ChatInput`;模板 / 助手推荐用 `Card`;分类切换用 `Tabs`;搜索只用 `Input`;卡片网格用 `auto-fit/minmax` | 把入口页改成白卡筛选表格、用普通 `<textarea>` 当 AI 输入框、固定 3 列导致窄屏溢出 |
|
|
51
|
+
| `ChatConversationPattern` | 每条消息统一用 `ChatMessage`;用户消息走 `role="user"`;AI 消息走 `header` + `thinking/plan/taskGroups/resultArtifacts/followUps`;底部吸底 `ChatInput` | 用 `ChatBubble` 或裸 div 模拟 AI 消息、把执行流拆成多张随机卡片、输入框随消息滚走 |
|
|
52
|
+
| `CopilotPagePattern` | 页面级 header 直接坐灰底;主内容白卡是主角;AI 面板用 `ChatInput`;对象编辑区按字段语义使用 `TextArea/InputNumber/Select/Switch/Tabs`;长编辑器必须内部滚动 | 把 header 包白卡、让 AI 侧栏抢主内容宽度、把对象编辑页做成纯聊天页 |
|
|
53
|
+
| `IMConversationPattern` | 当前线程消息用 `ChatBubble`;普通回复输入用 `ChatInput variant="im-basic"`;多线程列表用 `ConversationList`;系统事件用居中弱化文字 | 用 `ChatMessage` 做普通客服气泡、在消息区和输入框之间插入额外推荐层、横向滚动查看气泡 |
|
|
54
|
+
|
|
55
|
+
### 0.3 选型后立即读取 Recipe
|
|
56
|
+
|
|
57
|
+
选定模板后,必须马上到 `LAYOUT_RECIPES.md` 读取对应 recipe,再写 JSX:
|
|
58
|
+
|
|
59
|
+
- `BasePageFramePattern` / 列表示例 → `base-management`
|
|
60
|
+
- `ChatHomePagePattern` → `chat-home`
|
|
61
|
+
- `ChatConversationPattern` → `chat-conversation`
|
|
62
|
+
- `CopilotPagePattern` → `copilot-workbench`
|
|
63
|
+
- `IMConversationPattern` → `im-thread`
|
|
64
|
+
|
|
65
|
+
⛔ 禁止只凭“白卡承载工作内容”这句通用原则生成整页。页面级 header、AI 入口页、会话输入区、产物预览区分别有不同容器语义,必须由 recipe 决定。
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 1. 平台壳 / 模块工作区
|
|
70
|
+
|
|
71
|
+
**适用**:变量、MCP、策略、知识库、客服、评估等平台模块。
|
|
72
|
+
|
|
73
|
+
- 左侧 `NavBar` 承载产品域 / 业务域。
|
|
74
|
+
- 顶部模块切换用 `Tabs variant="pill"` 或 `segment`,直接坐灰底。
|
|
75
|
+
- 右上角放页面主次操作,主操作用 `Button variant="primary"`。
|
|
76
|
+
- 内容白卡只装工作区,不装页面级标题、版本切换、发布按钮。
|
|
77
|
+
|
|
78
|
+
**不要**:
|
|
79
|
+
|
|
80
|
+
- 不要把顶部导航和主操作包进白卡。
|
|
81
|
+
- 不要在 `main` 中加 `max-w-* mx-auto`。
|
|
82
|
+
- 不要用多个 primary 按钮抢层级。
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 2. 列表管理页
|
|
87
|
+
|
|
88
|
+
**适用**:变量管理、策略列表、数据资产、配置列表、审核任务。
|
|
89
|
+
|
|
90
|
+
- 标题区:`FormTitle variant="level-1"` + 业务范围 Tag / 数量。
|
|
91
|
+
- 筛选区:搜索 240px 左右,筛选控件固定宽,横向排布。
|
|
92
|
+
- 主体:`Table` 撑满白卡剩余高度,分页固定在表格底部。
|
|
93
|
+
- 状态/类型:全部用 `Tag`,操作列收敛。
|
|
94
|
+
|
|
95
|
+
**优先模板**:
|
|
96
|
+
|
|
97
|
+
- 单白卡:`VariableManagementPage`
|
|
98
|
+
- 树形/版本列表:`StrategyListPage`
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 3. 分类列表 / 知识库详情页
|
|
103
|
+
|
|
104
|
+
**适用**:案例库、知识库、标签树、MCP 分类、QA 对。
|
|
105
|
+
|
|
106
|
+
- 左侧分类:`TagBar` 或分类树,固定宽,可独立白卡。
|
|
107
|
+
- 中间列表:选中态用品牌描边 / 轻品牌底,不大面积染色。
|
|
108
|
+
- 右侧详情:富文本、案例内容、知识内容、编辑区优先右侧详情面板,不轻易弹窗。
|
|
109
|
+
- 三栏都要 `min-h-0`,各自内部滚动。
|
|
110
|
+
|
|
111
|
+
**优先模板**:
|
|
112
|
+
|
|
113
|
+
- 分类 + 列表:`McpManagementPage`
|
|
114
|
+
- 列表 + 右详情:`TabTopBarListPage`
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## 4. 策略 / 编辑详情页
|
|
119
|
+
|
|
120
|
+
**适用**:策略节点、Prompt、流程画布、模型配置、批测单测。
|
|
121
|
+
|
|
122
|
+
- 顶部:返回 + 对象名 + 页面级 Tabs + 保存/发布直接坐灰底。
|
|
123
|
+
- 中间:编辑器 / 画布 / 文档主体占最大面积。
|
|
124
|
+
- 右侧:节点配置、说明文档、单测、批量测试作为辅助面板。
|
|
125
|
+
- 左侧:如果存在 AI 执行进程或上下文,只放进程和摘要,不抢编辑主区。
|
|
126
|
+
|
|
127
|
+
**不要**:
|
|
128
|
+
|
|
129
|
+
- 不要把编辑详情页做成普通列表页。
|
|
130
|
+
- 不要让右侧配置压缩主编辑器标题或正文。
|
|
131
|
+
- 不要让整页滚动导致编辑区、配置区、运行区无法对照。
|
|
132
|
+
|
|
133
|
+
---
|
|
134
|
+
|
|
135
|
+
## 5. 会话工作台 / 托管页
|
|
136
|
+
|
|
137
|
+
**适用**:客服托管、工单队列、IM 会话、人工复核。
|
|
138
|
+
|
|
139
|
+
- 左侧队列按状态分组,当前项用左品牌条或轻底色。
|
|
140
|
+
- 中间会话流保持时间线,任务卡 / 总结卡用轻灰内嵌容器。
|
|
141
|
+
- 背景先按场景选:常规 IM / 客服会话默认白色会话背景;AI 问答 / 执行进度 / Copilot 类对话优先浅灰背景。
|
|
142
|
+
- 气泡色随背景定:白底用左灰右绿或右 AI;灰底用左灰右白,明确 AI 回复再用右 AI。
|
|
143
|
+
- 底部输入、确认、执行按钮固定,不随消息流滚走。
|
|
144
|
+
- 右侧用户信息、订单、工单详情只做辅助,不抢会话主线。
|
|
145
|
+
|
|
146
|
+
**优先组件**:
|
|
147
|
+
|
|
148
|
+
- 消息:`ChatMessage` / `ChatBubble`
|
|
149
|
+
- 输入:`ChatInput`
|
|
150
|
+
- 静态 IM 剧本:`IMConversationPattern`
|
|
151
|
+
|
|
152
|
+
---
|
|
153
|
+
|
|
154
|
+
## 6. 入口页 / AI 入口页
|
|
155
|
+
|
|
156
|
+
**适用**:HiSeek 首页、分析入口、模板广场、任务入口。
|
|
157
|
+
|
|
158
|
+
- 用户尚未进入具体上下文时,主输入或核心入口可以居中。
|
|
159
|
+
- 右侧主内容区必须是 `var(--color-blueGrey-200)` 浅灰大背景;Hero、`ChatInput`、模板 Tabs、搜索框和模板网格直接坐灰底。
|
|
160
|
+
- 白色卡片只用于推荐模板 / 助手 / 案例本身:模板卡写 `<Card color="white" />`;不要在模板网格外再套一层白卡。
|
|
161
|
+
- 模板 / 案例 / 推荐卡片在主输入下方,作为下一步路径。
|
|
162
|
+
- AI 渐变只用于输入、AI 推荐、AI 标识,不铺满背景。
|
|
163
|
+
- 左侧历史/收藏/定时可以作为轻侧栏存在,但不能抢主输入。
|
|
164
|
+
- 反例扫描:若同一右侧首页函数里同时出现 `ChatInput`、模板 `Card` 网格,并且外层有 `background: var(--color-surface)` / `bg-surface rounded-*` 包住整个内容区,必须拆掉这层白卡 wrapper,恢复为灰底裸放。
|
|
165
|
+
|
|
166
|
+
**优先模板**:`ChatHomePagePattern`
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 7. 产物预览 / 任务协同页
|
|
171
|
+
|
|
172
|
+
**适用**:AI 生成报告、飞书文档、HTML 预览、流程批测产物。
|
|
173
|
+
|
|
174
|
+
- 产物区是主角,占页面最大面积。
|
|
175
|
+
- 顶部工具栏轻量:标题、状态、下载、复制、全屏、链接等。
|
|
176
|
+
- 左侧 AI 进程区只承载上下文、进度、下一步建议。
|
|
177
|
+
- 正文像文档:段落、标题、指标卡、图表应形成阅读节奏。
|
|
178
|
+
|
|
179
|
+
**优先模板**:`CopilotPagePattern` / `ChatConversationPattern`
|
|
180
|
+
|
|
181
|
+
---
|
|
182
|
+
|
|
183
|
+
## 8. 多步骤配置 / 批测评估页
|
|
184
|
+
|
|
185
|
+
**适用**:评估集构建、选择对象、评估配置、批测配置。
|
|
186
|
+
|
|
187
|
+
- 横向多栏优先于纵向长表单。
|
|
188
|
+
- 步骤编号用小黑底数字或明确序号。
|
|
189
|
+
- 每栏白卡内部可用轻描边子区块承载选项、预览和参数。
|
|
190
|
+
- 中间预览/对象列表保持可见,右侧配置不挤压它。
|
|
191
|
+
- 顶部右侧固定“发起评估 / 发布 / 保存”。
|
|
192
|
+
|
|
193
|
+
---
|
|
194
|
+
|
|
195
|
+
## 9. 选型后必须做
|
|
196
|
+
|
|
197
|
+
1. 到 `components.summary.json` 查该范式涉及的组件。
|
|
198
|
+
2. 对每个命中组件,到 `components.index.json` 读取完整 props / rules / examples。
|
|
199
|
+
3. 到 `LAYOUT_RULES.md` 确认滚动模型、宽高和白卡层级。
|
|
200
|
+
4. 到 `GLOBAL_DESIGN_RULES.md` 确认自定义区块 token。
|
|
201
|
+
5. 交付前按 `CHECKLIST.md` 自检。
|
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tfds
|
|
3
|
+
description: "体服DesignSystem,一键调用TFDS组件生成符合体服设计规范的UI组件与页面"
|
|
4
|
+
disable-model-invocation: true
|
|
5
|
+
metadata:
|
|
6
|
+
version: "3"
|
|
7
|
+
system: "b-end"
|
|
8
|
+
display_name: "【TFDS】"
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# 【TFDS】B 端页面生成 Skill
|
|
12
|
+
|
|
13
|
+
你是 **TFDS 前端实现助手**。用户已通过 `npm` 安装 `@tf-designsystem/b-end`,并在项目里安装了本 Skill(路径通常为 `.cursor/skills/tfds/`、`.agents/skills/tfds/`、`.claude/skills/tfds/` 之一)。
|
|
14
|
+
|
|
15
|
+
> 本文件只保留**决策树 + 5 条铁律 + 必读链路**。逐项 Bad/Good 反例与五件套下沉到 [CHECKLIST.md](./CHECKLIST.md) 与 [COMMON_FAILURES.md](./COMMON_FAILURES.md):高风险场景(FormTitle / Playground / ChatHome / 多面板 / IM)生成前按需读取命中章节,交付前再全量自检。
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 0. 启动判断(决策树)
|
|
20
|
+
|
|
21
|
+
| 触发信号 | 强度 | 行为 |
|
|
22
|
+
| --------------------------------------------------------------- | ---- | ---------------------------------------- |
|
|
23
|
+
| 用户输入 `/tfds`、`@tfds`、点名「【TFDS】」 | 🟢 强 | **必须**完整执行本 Skill 流程 |
|
|
24
|
+
| 用户说「按 TFDS 生成 / 用 b-end 设计 / 按设计系统做」 | 🟢 强 | **必须**完整执行本 Skill 流程 |
|
|
25
|
+
| 当前业务项目已 `import` 了 `@tf-designsystem/b-end` 且用户在写 React/Vite 页面 | 🟡 中 | 主动应用本 Skill;若用户明显意图不在 UI(如改 API/写测试),不强制 |
|
|
26
|
+
| 其他对话(聊天、写后端、写脚本等) | ⚪ 无 | **不要**启动本 Skill |
|
|
27
|
+
|
|
28
|
+
启动后**先看下方 5 条铁律**(最高优先级),再按"必读文档"和"黄金流程"执行。
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## ⚡ AI 调用优先级 · 5 条铁律(最高级别 · 高于本文件其他章节)
|
|
33
|
+
|
|
34
|
+
**每生成一个 UI 元素之前**,必须先按下面的决策树判断:
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
┌─ ① 私有 NPM 组件(summary 初选 + index 详情)── 首选:整体复用
|
|
38
|
+
│ 匹配 → 直接 import + 传 props,⛔ 禁止"仿造样式"
|
|
39
|
+
│ 不匹配 ↓
|
|
40
|
+
├─ ② 通用设计规范(LAYOUT_RULES.md + GLOBAL_DESIGN_RULES.md)── 次选:用 token 拼装
|
|
41
|
+
│ 仍找不到 ↓
|
|
42
|
+
└─ ③ 严禁"凭审美随机生成" ← 最高禁忌
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
> **头像素材硬规则**:凡使用 `Avatar` / `AvatarGroup` / `ChatBubble` / `ConversationList` / `NavBar` / `Table` 的人像类头像,默认优先使用包内本地成员头像素材(`team-avatar-assets`,可随机或按数据 seed 取用)。`Avatar` 图片态未传 `src` 时会自动随机使用本地成员头像;生成页面时不要写 pravatar / Unsplash / placeholder 等随机外链头像,只有业务真实接口返回用户头像 URL 时才传远程 `src`。
|
|
46
|
+
|
|
47
|
+
> **ChatMessage 用户气泡背景硬规则**:`ChatMessage role="user"` 默认保留 `userBubbleTone="auto"`;白色大背景 / 白色工作卡内自动用灰色 `fill` 气泡,浅灰、蓝灰、AI 会话灰底等非白背景自动用白色 `surface` 气泡。不要在白底上显式写 `userBubbleTone="surface"`,复杂背景无法识别时才手动传 `fill` / `surface`。
|
|
48
|
+
|
|
49
|
+
1. ✅ **优先调用私有组件,整体复用**
|
|
50
|
+
组件索引里有对应组件 → **必须**直接 `import` 整体使用 + 通过 props 配置;
|
|
51
|
+
⛔ **禁止**"参考样式自己手搓相似组件";⛔ **禁止**仅改颜色/字号等样式片段后冒充组件(如把 `<Tag />` 写成 `<span className="rounded bg-… text-…">`)。
|
|
52
|
+
**标题是最高频组件,不是排版细节**:任何页面标题、白卡标题、面板标题、卡片左上角标题、section 标题、workspace 标题、Conversation/Settings/Result 标题,必须先 `import { FormTitle } from '@tf-designsystem/b-end'` 并用 `<FormTitle />`;⛔ 禁止手写 `h2/h3/span + 自绘竖条`。
|
|
53
|
+
2. ✅ **私有未覆盖时走通用规范**
|
|
54
|
+
组件索引找不到对应模块 → **必须**按 `LAYOUT_RULES.md` + `GLOBAL_DESIGN_RULES.md` 用现有 token 拼装出新模块,**不**回退到"裸 div + 自定义样式"。
|
|
55
|
+
3. ✅ **混合使用必须对齐原子变量**
|
|
56
|
+
通用模块与私有组件同屏组合时 → 颜色/间距/圆角/阴影/字号/行高**全部走 token**(`var(--color-...)` / `var(--spacing-...)` / `var(--radius-...)` / `var(--shadow-...)` / `var(--text-...)`);
|
|
57
|
+
⛔ **禁止**任何 `#hex` 硬编码、`text-[Npx]` / `p-[Npx]` 等任意值、`text-black` / `border-black` / `bg-gray-N` 通用调色板。
|
|
58
|
+
4. ⛔ **严禁脱离两大规范**
|
|
59
|
+
"私有组件库(components.summary.json + components.index.json)" + "通用设计规范(LAYOUT + GLOBAL)" 是 AI **唯一允许**的创作素材库。
|
|
60
|
+
⛔ **禁止**随机生成无规则的组件、样式、布局;⛔ **禁止**用模型自身审美填空。
|
|
61
|
+
5. ✅ **新场景拓展只能走通用规范**
|
|
62
|
+
遇到组件库与通用规范都未直接覆盖的特殊场景 → **必须**基于 `GLOBAL_DESIGN_RULES.md` 现有 token 组合拓展;
|
|
63
|
+
⛔ **禁止**自行新增任何 token、⛔ **禁止**绕开 token 体系硬写值。
|
|
64
|
+
|
|
65
|
+
> ⚠️ **本节优先级最高**:与下方任何章节、任何 component rules 有歧义时,以本节 5 条铁律为准。
|
|
66
|
+
|
|
67
|
+
---
|
|
68
|
+
|
|
69
|
+
## 1. 必读文档(按加载顺序)
|
|
70
|
+
|
|
71
|
+
设计组件数量有限,无法覆盖所有 AI 生成场景。生成页面前**必须**按下面顺序加载文档;其中 `components.index.json` 是完整权威索引,只在 `components.summary.json` 初选命中后读取对应条目,不要一开始全文吞入。
|
|
72
|
+
|
|
73
|
+
| # | 文档 | 路径 | 读取时机 |
|
|
74
|
+
| --- | -------------- | ---------------------------- | --------------------------------------------- |
|
|
75
|
+
| 1 | **设计原则** | `./DESIGN_PRINCIPLES.md` | 先判断页面气质、UX 取舍、视觉权重和组件角色 |
|
|
76
|
+
| 2 | **页面范式** | `./PAGE_ARCHETYPES.md` | 判断页面类型、信息架构、主工作流和首选模板 |
|
|
77
|
+
| 3 | **布局 Recipe** | `./LAYOUT_RECIPES.md` | 把页面范式映射为容器语义、间距、对齐、滚动和反例扫描 |
|
|
78
|
+
| 4 | **组件摘要** | `./components.summary.json` | 快速筛选页面模板 / 业务组件 / 基础组件,不作为样式权威 |
|
|
79
|
+
| 5 | **组件详情索引** | `./components.index.json` | 只读取命中的组件条目,抄 props / rules / examples |
|
|
80
|
+
| 6 | **页面布局规范** | `./LAYOUT_RULES.md` | 决定页面骨架、滚动层级、宽高自适应 |
|
|
81
|
+
| 7 | **全局设计规范** | `./GLOBAL_DESIGN_RULES.md` | 写组件库未覆盖的自定义区块时(颜色/字体/间距/圆角/阴影 token) |
|
|
82
|
+
| 8 | **场景/交付自检** | `./CHECKLIST.md` | 高风险场景生成前按命中章节读取;交付前全量检查组件调用、页面范式、布局、token 和工程集成 |
|
|
83
|
+
| 9 | **常见失败修正** | `./COMMON_FAILURES.md` | 生成前遇到命中反例按需读取;页面"不像 TFDS"或 `/tfds` 调用失败时优先排查 |
|
|
84
|
+
|
|
85
|
+
### 规范优先级(冲突时从高到低)
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
0. ⚡ 本文件「5 条铁律」 ← 最高
|
|
89
|
+
1. components.index.json 命中组件 rules / examples
|
|
90
|
+
2. 本 SKILL.md 决策(§2 黄金流程)
|
|
91
|
+
3. LAYOUT_RECIPES.md(容器语义、容器模式、间距对齐 recipe)
|
|
92
|
+
4. LAYOUT_RULES.md(页面骨架、响应式)
|
|
93
|
+
5. GLOBAL_DESIGN_RULES.md(颜色/字体/间距 token)
|
|
94
|
+
6. DESIGN_PRINCIPLES.md / PAGE_ARCHETYPES.md / components.summary.json
|
|
95
|
+
7. 模型自身审美 ← 永远最后
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
---
|
|
99
|
+
|
|
100
|
+
## 2. 黄金流程(生成任意页面前必走)
|
|
101
|
+
|
|
102
|
+
1. **栈对齐**:项目为 Vite + React + Tailwind v4;全局样式已 `@import "tailwindcss"` 且已 `@import "@tf-designsystem/b-end/theme.css"`;Tailwind 已扫描 `node_modules/@tf-designsystem/b-end/**/*.{js,jsx}`。
|
|
103
|
+
2. **先选页面骨架**:按 `PAGE_ARCHETYPES.md` 判断页面范式 → 按 `LAYOUT_RECIPES.md` 选唯一主 recipe → 用 `components.summary.json` 初选 `kind: "page-pattern"` / `kind: "page-template"` → 回查 `components.index.json`:
|
|
104
|
+
- **结构化对象管理** → `BasePageFramePattern`(浅灰底整页 + 多白卡分区,贴浏览器边缘,无外圈圆角/描边)
|
|
105
|
+
- **从 0 发起 AI 任务** → `ChatHomePagePattern`(右侧主内容区**保持灰底**,⛔ 禁止包大白卡 wrapper;模板卡用 `<Card color="white" />`)
|
|
106
|
+
- **围绕 AI 任务持续协作** → `ChatConversationPattern`(消息流必须用 `ChatMessage`)
|
|
107
|
+
- **对象编辑 / 产物查看 + AI 侧助** → `CopilotPagePattern`
|
|
108
|
+
- **真实 IM / 客服 / 私信线程** → `IMConversationPattern`(`ChatBubble` + `ChatInput variant="im-basic"`)
|
|
109
|
+
- **客服多模块工作台框架** → `CustomerServiceWorkspaceFramePattern`(`activeConversationId` 单一事实源,左右联动)
|
|
110
|
+
- **页面模板示例**:`StrategyListPage` / `VariableManagementPage` / `McpManagementPage`(双白卡 + 横向拖拽标杆)/ `TabTopBarListPage`;无权限 / 建设中先用 `Empty + Card + Button` 按通用规范组合,除非 `components.index.json` 明确导出对应模板
|
|
111
|
+
3. **有组件不手搓**:
|
|
112
|
+
- 顶/侧导 → `NavBar`(命中即一级骨架切到 `flex-row` app shell,⛔ 禁止纵向堆叠);列表 → `Table`;表单 → `Input/Select/Button`;对话 → `ChatInput/ChatMessage`
|
|
113
|
+
- `summary.json` 只用于初选;具体 JSX 前必须回到 `components.index.json` 命中条目读取 props / rules / examples
|
|
114
|
+
4. **表单控件默认 MD(36px)**:`Input` / `Select` / `TagInput` / `InputNumber` / `Button` 在主区/筛选栏/弹窗/抽屉默认 `md`;`sm` 仅限**表格行内**与**极窄工具条**。**宽度判定**:筛选栏并排字段固定宽(搜索 ≈ 240px、状态/时间 160-200px);白卡内单列主字段满宽 `w-full`。
|
|
115
|
+
5. **类 Tab 切换硬约束**:同页/同卡内多块互斥内容点选切换**必须**用 `<Tabs />`;内容区/白卡内/Playground 内**默认 SM**(`size="sm"` 或省略);只有平台顶部 header / 页面级顶导才允许 `md/lg`;分段器 → `variant="segment"`,详情子页签 → `line`,块状分类 → `button`,顶部胶囊 → `pill`。⛔ 禁止用 `Button` / `Tag` 冒充 Tabs。
|
|
116
|
+
6. **标题必须用 `FormTitle`**(按层级选 variant,详细五件套见 [CHECKLIST.md §8](./CHECKLIST.md)):
|
|
117
|
+
- `form` → 整页左上角总标题 / 工作台名(最大字号、无竖条)
|
|
118
|
+
- `level-1` → 一级板块标题、单张主白卡顶栏主标题
|
|
119
|
+
- `level-2` → 白卡内 section 区块标题("Prompt Workspace / System Prompt / Conversation / Tools / Run Result")
|
|
120
|
+
- `level-3` → level-2 之下子分区
|
|
121
|
+
- `card` → Card 头、摘要条
|
|
122
|
+
- 同页必须拉开层级;描述默认隐藏(无说明诉求不写 `description`);标题状态 Tag 用 `titleSuffix`,⛔ 不进右侧 action 区
|
|
123
|
+
- **页面级 header 直接坐灰底**,⛔ 不得包白卡(详见 LAYOUT_RULES § 1.5 / [CHECKLIST.md §12](./CHECKLIST.md))
|
|
124
|
+
7. **状态徽标 / 图标 / 链接**:状态分类 → `<Tag size="m" />`(⛔ `<span>` 假徽标);图标 → `<Icon name="kebab-case" size="sm" />`(⛔ `lucide-react` 单独引入);文字链 → `<Button variant="text-brand" />`(⛔ 裸 `<a>`)。
|
|
125
|
+
8. **整页高度与滚动 / 多栏 / IM 骨架**(详见 `LAYOUT_RULES.md`):
|
|
126
|
+
- 根容器默认 `h-dvh + overflow-hidden + flex flex-col + w-full min-w-0`
|
|
127
|
+
- **NavBar 命中**:一级骨架切到 `flex-row`,左侧 `shrink-0`,右侧 `flex-1 min-w-0 flex flex-col overflow-hidden`
|
|
128
|
+
- 内容区 `flex-1 min-h-0 overflow-y-auto`;底部 `shrink-0` 吸底
|
|
129
|
+
- 双栏:辅助大卡默认支持宽度拖拽(`width + onWidthChange + minWidth + maxWidth + resizable`);主卡 `flex-1 min-w-0`
|
|
130
|
+
- 多栏卡片用 `grid auto-fit + minmax(min(Npx, 100%), 1fr)`,⛔ 禁止固定 `grid-cols-N`
|
|
131
|
+
- 表格容器 `flex-1 min-h-0 overflow-auto`
|
|
132
|
+
- **滚动模型**:命中 Playground / 调试 / IDE / 多面板 / Prompt Editor / A-B 对比 → 整页绝不滚(详见 [CHECKLIST.md §11](./CHECKLIST.md));仅 Dashboard / 入口聚合首页 / KPI 看板才允许整页滚
|
|
133
|
+
- **全宽撑满铁律**:`main` padding 只能 `p-4`;⛔ 禁止 `max-w-* mx-auto` 居中容器;⛔ 禁止 `max-w-screen-xl` / `max-w-7xl` 收窄值(详见 [CHECKLIST.md §13](./CHECKLIST.md))
|
|
134
|
+
9. **Card 颜色映射**:父容器灰底 → `Card color="white"`;父容器白底 → `Card color="grey"`(避免白叠白)。
|
|
135
|
+
10. **可运行交付**:输出完整 JSX 与文件路径级改动说明,保证 `npm run dev` 直接看到结果。
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 3. 生成后自检(必做)
|
|
140
|
+
|
|
141
|
+
完整 13 章自检见 [CHECKLIST.md](./CHECKLIST.md);常见失败模式与修复见 [COMMON_FAILURES.md](./COMMON_FAILURES.md)。生成前已按命中场景读取相关章节,交付前仍要完整自检;**任一项不满足,先改再交付。**
|
|
142
|
+
|
|
143
|
+
最高频四个硬门禁(必过):
|
|
144
|
+
|
|
145
|
+
- ⚡ **铁律自检**:整页无"自己手搓"的相似组件;无"只复用样式片段"的伪组件;FormTitle 真伪五件套全过([CHECKLIST.md §8](./CHECKLIST.md));token 全部走 var,无硬编码 / 任意值
|
|
146
|
+
- 🧱 **白卡铁律**:最外层白卡纯白底 + 12px 圆角,⛔ 无 `border` / `outline` / `ring` / `shadow`
|
|
147
|
+
- 🪜 **滚动模型**:根容器 `h-dvh + overflow-hidden`;NavBar 命中即 `flex-row`;多面板/Playground 走嵌套骨架([CHECKLIST.md §11](./CHECKLIST.md)),不整页滚
|
|
148
|
+
- 📐 **页面 header 灰底裸放**:标题/描述/操作按钮直接坐灰底,⛔ 不被白卡包住([CHECKLIST.md §12](./CHECKLIST.md))
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## 4. 隔离保证(按需调用时生效)
|
|
153
|
+
|
|
154
|
+
`@tf-designsystem/b-end` 可与项目内任何其他资源共存。AI 工具**不会**因为安装了这个包就把 TFDS 规范应用到所有对话——只有用户明确表达 TFDS / b-end / 设计系统意图,或当前项目已接入 `@tf-designsystem/b-end` 且任务是 UI 生成时,规范才生效。
|
|
155
|
+
|
|
156
|
+
| IDE | 调用指令 | 隔离原理 |
|
|
157
|
+
| ---------------- | ----------------------------------------- | ------------------------------------------------------------ |
|
|
158
|
+
| **Cursor** | `/tfds` | 本文件已设 `disable-model-invocation: true`;Cursor 不会自动纳入对话,仅显式触发 |
|
|
159
|
+
| **Codex** | `/tfds` 或 `@.agents/skills/tfds/SKILL.md` | 隔离靠"不放入 `AGENTS.md`"维护;⛔ 禁止把 TFDS 内容写入项目根 `AGENTS.md` |
|
|
160
|
+
| **Claude Code** | `/tfds` | 通过 `.claude/skills/tfds/` 显式加载 |
|
|
161
|
+
| **Trae** | `@tfds`(知识库引用) | Trae 知识库天然 opt-in;⛔ 禁止放进 `.trae/rules/`(always-on 目录) |
|
|
162
|
+
| **其它 Agent IDE** | `@` 引用本文件 / `AI_READ_FIRST.md` | 通用原则:放在按需引用知识库,不要放进全局 prompt / 项目规则 |
|
|
163
|
+
|
|
164
|
+
**Trae 一次性设置**:在 Trae 打开「知识库」→ 新建命名 `tfds` → 添加 `node_modules/@tf-designsystem/b-end/skills/tfds/` 整个目录;若只能添加文件,至少添加 `AI_READ_FIRST.md`、`SKILL.md`、`DESIGN_PRINCIPLES.md`、`PAGE_ARCHETYPES.md`、`components.summary.json`,生成具体组件前再引用 `components.index.json`。
|
|
165
|
+
|
|
166
|
+
> **Cursor 规范**([Agent Skills](https://cursor.com/docs/context/skills)):`name` 必须与父文件夹名 `tfds` 一致;已设 `disable-model-invocation: true` 确保不自动触发。
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
## 5. 集成与契约自检命令
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
# 集成检测(只读,检查 theme.css 引入、@source 扫描、Skill 目录)
|
|
174
|
+
node node_modules/@tf-designsystem/b-end/scripts/check-tfds-integration.mjs
|
|
175
|
+
|
|
176
|
+
# 契约自检(只读,扫描 #hex、任意值、间距漂移等)
|
|
177
|
+
node node_modules/@tf-designsystem/b-end/scripts/check-tfds-contract.mjs
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
---
|
|
181
|
+
|
|
182
|
+
## 6. 与单组件 Skill 的关系
|
|
183
|
+
|
|
184
|
+
若项目中另有「ChatInput」等**单组件** zip Skill,与本 Skill **不冲突**:本【TFDS】总控 Skill 负责**整页编排与全量组件选型**;`components.summary.json` 负责快速定位,细节 props / rules / examples 仍以 `components.index.json` 命中条目为准。两者描述歧义时,以本 Skill + 包内索引为准。
|
|
185
|
+
|
|
186
|
+
---
|
|
187
|
+
|
|
188
|
+
**版本**:与本目录 `components.index.json` / `components.summary.json` 同步迭代(由主仓 `npm run generate:tfds-b-end-bundle` 生成)。升级 `@tf-designsystem/b-end` 后若需更新 Skill:删除 `.cursor/skills/tfds` 后重新执行 `npm i`,或手动复制 `node_modules/@tf-designsystem/b-end/skills/tfds`。
|