@tfdesign/b-end 1.1.3 → 1.1.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tfdesign/b-end",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "private": false,
5
5
  "type": "module",
6
6
  "description": "TFDS B-end React components + Tailwind v4 theme.css; self-contained npm install (no monorepo clone required).",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: tfds
3
- description: "体服B端设计系统 v1.1.3,支持一键调用TFDS组件生成符合体服设计规范的UI组件与页面。"
3
+ description: "体服B端设计系统 v1.1.4,支持一键调用TFDS组件生成符合体服设计规范的UI组件与页面。"
4
4
  disable-model-invocation: true
5
5
  metadata:
6
6
  version: "3"
@@ -102,7 +102,7 @@ metadata:
102
102
  1. **栈对齐**:项目为 Vite + React + Tailwind v4;全局样式已 `@import "tailwindcss"` 且已 `@import "@tfdesign/b-end/theme.css"`;Tailwind 已扫描 `node_modules/@tfdesign/b-end/**/*.{js,jsx}`。
103
103
  2. **先选页面骨架**:按 `PAGE_ARCHETYPES.md` 判断页面范式 → 按 `LAYOUT_RECIPES.md` 选唯一主 recipe → 用 `components.summary.json` 初选 `kind: "page-pattern"` / `kind: "page-template"` → 回查 `components.index.json`:
104
104
  - **结构化对象管理** → `BasePageFramePattern`(浅灰底整页 + 多白卡分区,贴浏览器边缘,无外圈圆角/描边)
105
- - **从 0 发起 AI 任务** → `ChatHomePagePattern`(右侧主内容区**保持灰底**,⛔ 禁止包大白卡 wrapper;模板卡用 `<Card color="white" />`)
105
+ - **从 0 发起 AI 任务** → `ChatHomePagePattern`(右侧主内容区**保持灰底**,Hero 标题 + `ChatInput` 必须居中;⛔ 禁止包大白卡 wrapper;⛔ 禁止用 `Form` / `labelAi` 包裹或模拟 Hero 主输入;模板卡用 `<Card color="white" />`)
106
106
  - **围绕 AI 任务持续协作** → `ChatConversationPattern`(消息流必须用 `ChatMessage`)
107
107
  - **对象编辑 / 产物查看 + AI 侧助** → `CopilotPagePattern`
108
108
  - **真实 IM / 客服 / 私信线程** → `IMConversationPattern`(`ChatBubble` + `ChatInput variant="im-basic"`)
@@ -121,6 +121,7 @@ metadata:
121
121
  - `card` → Card 头、摘要条
122
122
  - 同页必须拉开层级;描述默认隐藏(无说明诉求不写 `description`);标题状态 Tag 用 `titleSuffix`,⛔ 不进右侧 action 区
123
123
  - **页面级 header 直接坐灰底**,⛔ 不得包白卡(详见 LAYOUT_RULES § 1.5 / [CHECKLIST.md §12](./CHECKLIST.md))
124
+ - **ChatHome 例外边界**:AI 入口页 Hero 区的“AI / 助手名 / 问候语 + ChatInput”不是表单字段标题,也不是白卡标题;⛔ 禁止写 `<Form items={[{ label: "AI", type: "input" | "textarea" }]} />`、`labelAi` 或 Form 字段标题来实现输入框顶部的 AI 标识。正确做法是按 `ChatHomePagePattern`:Hero 容器 `items-center text-center`,标题/副标题居中,`<ChatInput variant="default" />` 放在 `maxWidth: 680px` 的居中容器内。
124
125
  7. **状态徽标 / 图标 / 链接**:状态分类 → `<Tag size="m" />`(⛔ `<span>` 假徽标);图标 → `<Icon name="kebab-case" size="sm" />`(⛔ `lucide-react` 单独引入);文字链 → `<Button variant="text-brand" />`(⛔ 裸 `<a>`)。
125
126
  8. **整页高度与滚动 / 多栏 / IM 骨架**(详见 `LAYOUT_RULES.md`):
126
127
  - 根容器默认 `h-dvh + overflow-hidden + flex flex-col + w-full min-w-0`
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "system": "b-end",
3
3
  "skill": "tfds",
4
- "generatedAt": "2026-05-16T17:51:58.787Z",
4
+ "generatedAt": "2026-05-16T18:40:07.215Z",
5
5
  "summary": "B 端 COMPONENTS 37 条 + 列表页模板 4 + PATTERNS 6;import 一律来自 @tfdesign/b-end。",
6
6
  "components": [
7
7
  {
@@ -3336,8 +3336,10 @@
3336
3336
  "【字段配置】items 数组每项支持 id、label、type、required、labelPosition、middleHelpText、helpText、error、errorText、disabled、value/defaultValue/onChange 等字段;字段项上未被 Form 消费的基础组件 props 应继续透传给对应控件,保证 Form 内控件能力与单独使用基础组件时一致。",
3337
3337
  "【AI推荐能力继承】如果某个字段类型对应的基础组件支持 AI 推荐,那么 Form 中同类型字段必须拥有完全一致的 AI 推荐能力:type=\"input\" 继承 Input 的 aiSuggestion / aiSuggestions / onAdoptSuggestion / onRefreshAiSuggestions;type=\"textarea\" 继承 TextArea 的同名能力;type=\"select\" 在默认 Select 模式下继承 Select 的 AI 推荐能力。Form 不单独创造新的 AI 推荐 UI,也不改变推荐区位置、间距、hover、刷新、采纳、写入值和回调行为。",
3338
3338
  "【AI推荐标题标签】当 Form 的某个字段启用 AI 推荐能力时,该字段标题右侧默认必须展示标准“AI”标签,等价于自动开启 labelAi;AI 标签用于提示该字段正在由智能推荐辅助填写,不需要业务额外再手动配置标题-AI。若字段未启用 AI 推荐,则 labelAi 仍可按普通标题附加样式独立配置。",
3339
+ "【AI推荐标题标签边界】Form 的 `labelAi` 只适用于 Form 内部字段标题,不能外溢为页面 Hero 标题、ChatInput 顶部身份提示或 AI 入口页标题。AI 入口页、AI 对话页、ChatInput Hero 区、消息输入区顶部的“AI / 助手名 / 问候语”都不得用 Form 或 Form 字段 label 实现,应遵守对应页面模板和 ChatInput 规范。",
3339
3340
  "【AI推荐配置预览】组件详情页左侧配置区必须在字段类型支持 AI 推荐时展示“AI推荐”显隐配置项:当字段类型为 Input / TextArea / Select(默认模式)时可切换显示或隐藏推荐区,并实时预览对应基础组件的 AI 推荐交互;当画布预览区显示 AI 推荐时,下方“标题-AI”开关必须自动打开并处于选中态;切换到不支持 AI 推荐的字段类型或“全集”预览时,该配置项必须隐藏且不向字段透传 AI 推荐 props。",
3340
3341
  "【AI推荐透传边界】不支持 AI 推荐的基础组件(如 InputNumber、TagInput、CheckboxGroup、RadioGroup、Switch、DatePicker、TimePicker、Slider、Upload 等)在 Form 中也不应额外展示 AI 推荐区;Select 的 tag 模式仍遵循 Select 自身规则,不支持 AI 推荐。AI 生成 Form 时,只有需求明确出现“AI推荐 / 智能推荐 / 建议填写 / 推荐文案 / 推荐选项”等语义,才给对应字段透传 AI 推荐 props。",
3342
+ "【不适用场景】Form 不用于承载 AI 入口页 Hero 主输入、AI 对话页底部输入、IM/客服消息输入、ChatInput 顶部猫条或输入框上方身份提示;这些场景必须直接使用 `ChatInput` 或对应页面模板。若只是为了显示“AI”标签或标题而使用 Form,属于错误选型。",
3341
3343
  "【标题附加样式】单字段标题支持 labelOptional、labelRequired、labelAi、labelHelp 四个布尔开关,可与纯文字标题组合显示;渲染顺序固定为 可选 -> 必填 -> AI -> Help",
3342
3344
  "【标题字重】字段标题、必填星号与可选文案统一使用 `semibold` token,即 `[font-weight:var(--font-semibold)]`;不要继续使用 `font-bold` 或手写 700 字重",
3343
3345
  "【AI 标签】当 labelAi=true 时,必须复用标准 `<Tag variant=\"ai\" radius=\"full\" fontWeight=\"bold\" size=\"m\">AI</Tag>`;禁止在 Form 内手写渐变胶囊、手写圆角块或用普通文字 span 模拟 AI 标签",
@@ -7432,11 +7434,13 @@
7432
7434
  "rules": [
7433
7435
  "【五模板定位】本模板只用于“从 0 发起 AI 任务”的入口页:用户还没进入某个对象、会话或产物,第一步是输入一句需求、搜索助手、选择模板/案例/推荐 Agent。若用户要管理一批助手/模板/机器人列表,用 `BasePageFramePattern`;若用户已经在任务内持续追问,用 `ChatConversationPattern`;若右侧有主文档/主画布/主配置,AI 只是辅助,用 `CopilotPagePattern`;若是客服/私信线程,用 `IMConversationPattern`。",
7434
7436
  "【布局 Recipe】必须按 `LAYOUT_RECIPES.md` 选择 `chat-home`:右侧主内容区是 gray-direct,不是白色 `WorkSurface`;Hero / ChatInput / Tabs / 搜索 / 模板卡网格直接坐 `var(--color-blueGrey-200)`。",
7435
- "【组件选型门禁】主输入必须用 `ChatInput`,不可用原生 textarea 或 Input 冒充 AI 输入;模板/助手/案例推荐必须用 `Card`;分类切换必须用 `Tabs`;搜索框用 `Input` + `Icon` 前缀;无结果用 `Empty`。禁止用 Button/Tag 排一行冒充 Tabs,禁止手写卡片。",
7437
+ "【组件选型门禁】主输入必须用 `ChatInput`,不可用原生 textarea、InputForm 字段冒充 AI 输入;模板/助手/案例推荐必须用 `Card`;分类切换必须用 `Tabs`;搜索框用 `Input` + `Icon` 前缀;无结果用 `Empty`。禁止用 Button/Tag 排一行冒充 Tabs,禁止手写卡片。",
7436
7438
  "【整体背景】页面以浅灰大背景(`--color-blueGrey-200`)为主:Hero、筛选行、卡片网格**直接坐灰底**,不要再额外包一整张“右侧白色大卡片容器”(白卡只用于推荐卡片本身)。",
7437
7439
  "【反例扫描】如果同一右侧首页函数里同时出现 `ChatInput`、模板 `Card` 网格,并且外层存在 `background: var(--color-surface)` / `bg-surface rounded-*` 包住 Hero + 输入框 + Tabs + 网格,说明 AI 把入口页误生成成白卡管理页,必须拆掉这层 wrapper。",
7438
7440
  "【框架不动】外框灰底 + 左侧 `NavBar` 固定不变;右侧内容区必须 `flex-1 min-w-0 min-h-0 overflow-y-auto overflow-x-hidden`,由右侧内容区作为唯一滚动容器承载整体页面滚动;Hero、ChatInput、筛选行、卡片网格要一起被滑动,禁止只让下方卡片列表单独 `overflow-y-auto`。",
7439
7441
  "【Hero 区】居中欢迎标题 + 最大宽 680px 的 ChatInput 直接坐浅灰底;Hero 主标题使用 `text-4xl leading-10`;默认使用 `ChatInput variant=\"default\"` 作为入口主输入;标准节奏为 `padding: 84px 40px 80px`,标题区较旧版整体上移 36px。标题区副标题与 ChatInput 之间必须保留 48px 间距(比普通标题说明节奏额外增加 24px),保证输入框不贴近标题区。AI 渐变只用于输入框内部 / AI 标识,不作为整块 Hero 白底。",
7442
+ "【Hero 输入区禁止 Form】Hero 区的标题、副标题、AI 身份提示和主 ChatInput 都属于入口页居中启动区,不是表单字段。禁止用 `<Form />`、Form 的 `items[].label`、`labelAi` 或字段标题来包裹 / 模拟输入框顶部的“AI”标题;如果需要在输入框上方展示“AI / 助手名 / 问候语”,必须作为 Hero 内容用普通居中布局实现,并保持 `text-center`、`items-center`、`maxWidth: 680px` 的 ChatInput 容器。",
7443
+ "【Hero 反例扫描】同一 ChatHome 页面中如果出现 `<Form items={[{ label: \"AI\", type: \"input\" | \"textarea\" }]}>`、`labelAi` 或 Form 字段标题紧贴主 ChatInput 上方,说明 AI 把入口页主输入误生成为表单字段,必须删除 Form,改回居中 Hero 标题 + `<ChatInput variant=\"default\" />`。",
7440
7444
  "【筛选与分类】分类切换必须用 `Tabs size=\"sm\"`;筛选行 `padding: 16px 40px`,左 Tabs、右搜索。模板/助手搜索框是辅助筛选入口,不是页面主输入,必须固定宽度并自动对齐到页面右侧:可用外层 `<div className=\"ml-auto shrink-0\" style={{ flex: \"0 0 240px\", width: \"240px\", minWidth: \"240px\", maxWidth: \"240px\" }}>` 包裹 `Input`,也可直接给 `Input` 传 `style={{ flex: \"0 0 240px\", \"--size-input-width\": \"240px\" }}`;`Input` 的 `style` 作用于根容器。Tabs 外层使用 `flex shrink-0` 保持左侧胶囊 Tabs 可见。筛选行容器禁止使用 `flex-wrap`、`justify-between`、`space-y-*`、`flex-col`;禁止让筛选搜索框 `flex-1`、`w-full`、撑满 Tabs 右侧剩余空间,或换到 Tabs 下方单独占一行。",
7441
7445
  "【卡片列表】使用自适应 grid(优先 `repeat(auto-fit, minmax(min(320px, 100%), 1fr))`),网格 `gap-4`,禁止固定列宽导致窄屏横向溢出;当前列表直接坐浅灰页面底,所以卡片统一使用 `Card color=\"white\"`。通用铁律是:纯白容器里必须改用 `color=\"grey\"`,灰色/浅灰/其他非纯白容器里必须使用 `color=\"white\"`,且这条规则对所有 Card 分类都生效;列表区域作为普通内容块跟随右侧页面整体滚动,使用 `shrink-0` + `padding: 0 40px 40px`,禁止在卡片列表自身设置 `overflow-y-auto` 造成只有卡片区滚动。",
7442
7446
  "【内容可扩展】Tab 项数量和卡片数据替换为业务真实数据;卡片 stats/tags 按业务维度自定义"
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "system": "b-end",
3
3
  "skill": "tfds",
4
- "generatedAt": "2026-05-16T17:51:58.787Z",
4
+ "generatedAt": "2026-05-16T18:40:07.215Z",
5
5
  "purpose": "轻量组件与页面模板目录。AI 先读本文件做选型;确定命中组件后,再到 components.index.json 按 id 读取 props / rules / examples。",
6
6
  "counts": {
7
7
  "total": 47,
@@ -631,7 +631,7 @@
631
631
  "top 布局",
632
632
  "left 布局"
633
633
  ],
634
- "ruleCount": 25,
634
+ "ruleCount": 27,
635
635
  "exampleCount": 11,
636
636
  "hasCode": false,
637
637
  "detailRef": "components.index.json#form"
@@ -1718,7 +1718,7 @@
1718
1718
  "今天想做什么",
1719
1719
  "帮我快速搞定"
1720
1720
  ],
1721
- "ruleCount": 10,
1721
+ "ruleCount": 12,
1722
1722
  "exampleCount": 0,
1723
1723
  "hasCode": true,
1724
1724
  "detailRef": "components.index.json#chat-home-page"
@@ -2088,8 +2088,10 @@ export const COMPONENTS = [
2088
2088
  '【字段配置】items 数组每项支持 id、label、type、required、labelPosition、middleHelpText、helpText、error、errorText、disabled、value/defaultValue/onChange 等字段;字段项上未被 Form 消费的基础组件 props 应继续透传给对应控件,保证 Form 内控件能力与单独使用基础组件时一致。',
2089
2089
  '【AI推荐能力继承】如果某个字段类型对应的基础组件支持 AI 推荐,那么 Form 中同类型字段必须拥有完全一致的 AI 推荐能力:type="input" 继承 Input 的 aiSuggestion / aiSuggestions / onAdoptSuggestion / onRefreshAiSuggestions;type="textarea" 继承 TextArea 的同名能力;type="select" 在默认 Select 模式下继承 Select 的 AI 推荐能力。Form 不单独创造新的 AI 推荐 UI,也不改变推荐区位置、间距、hover、刷新、采纳、写入值和回调行为。',
2090
2090
  '【AI推荐标题标签】当 Form 的某个字段启用 AI 推荐能力时,该字段标题右侧默认必须展示标准“AI”标签,等价于自动开启 labelAi;AI 标签用于提示该字段正在由智能推荐辅助填写,不需要业务额外再手动配置标题-AI。若字段未启用 AI 推荐,则 labelAi 仍可按普通标题附加样式独立配置。',
2091
+ '【AI推荐标题标签边界】Form 的 `labelAi` 只适用于 Form 内部字段标题,不能外溢为页面 Hero 标题、ChatInput 顶部身份提示或 AI 入口页标题。AI 入口页、AI 对话页、ChatInput Hero 区、消息输入区顶部的“AI / 助手名 / 问候语”都不得用 Form 或 Form 字段 label 实现,应遵守对应页面模板和 ChatInput 规范。',
2091
2092
  '【AI推荐配置预览】组件详情页左侧配置区必须在字段类型支持 AI 推荐时展示“AI推荐”显隐配置项:当字段类型为 Input / TextArea / Select(默认模式)时可切换显示或隐藏推荐区,并实时预览对应基础组件的 AI 推荐交互;当画布预览区显示 AI 推荐时,下方“标题-AI”开关必须自动打开并处于选中态;切换到不支持 AI 推荐的字段类型或“全集”预览时,该配置项必须隐藏且不向字段透传 AI 推荐 props。',
2092
2093
  '【AI推荐透传边界】不支持 AI 推荐的基础组件(如 InputNumber、TagInput、CheckboxGroup、RadioGroup、Switch、DatePicker、TimePicker、Slider、Upload 等)在 Form 中也不应额外展示 AI 推荐区;Select 的 tag 模式仍遵循 Select 自身规则,不支持 AI 推荐。AI 生成 Form 时,只有需求明确出现“AI推荐 / 智能推荐 / 建议填写 / 推荐文案 / 推荐选项”等语义,才给对应字段透传 AI 推荐 props。',
2094
+ '【不适用场景】Form 不用于承载 AI 入口页 Hero 主输入、AI 对话页底部输入、IM/客服消息输入、ChatInput 顶部猫条或输入框上方身份提示;这些场景必须直接使用 `ChatInput` 或对应页面模板。若只是为了显示“AI”标签或标题而使用 Form,属于错误选型。',
2093
2095
  '【标题附加样式】单字段标题支持 labelOptional、labelRequired、labelAi、labelHelp 四个布尔开关,可与纯文字标题组合显示;渲染顺序固定为 可选 -> 必填 -> AI -> Help',
2094
2096
  '【标题字重】字段标题、必填星号与可选文案统一使用 `semibold` token,即 `[font-weight:var(--font-semibold)]`;不要继续使用 `font-bold` 或手写 700 字重',
2095
2097
  '【AI 标签】当 labelAi=true 时,必须复用标准 `<Tag variant="ai" radius="full" fontWeight="bold" size="m">AI</Tag>`;禁止在 Form 内手写渐变胶囊、手写圆角块或用普通文字 span 模拟 AI 标签',
@@ -209,11 +209,13 @@ export default function MyPage({ defaultSelectedItemId = 'example-1' }) {
209
209
  rules: [
210
210
  '【五模板定位】本模板只用于“从 0 发起 AI 任务”的入口页:用户还没进入某个对象、会话或产物,第一步是输入一句需求、搜索助手、选择模板/案例/推荐 Agent。若用户要管理一批助手/模板/机器人列表,用 `BasePageFramePattern`;若用户已经在任务内持续追问,用 `ChatConversationPattern`;若右侧有主文档/主画布/主配置,AI 只是辅助,用 `CopilotPagePattern`;若是客服/私信线程,用 `IMConversationPattern`。',
211
211
  '【布局 Recipe】必须按 `LAYOUT_RECIPES.md` 选择 `chat-home`:右侧主内容区是 gray-direct,不是白色 `WorkSurface`;Hero / ChatInput / Tabs / 搜索 / 模板卡网格直接坐 `var(--color-blueGrey-200)`。',
212
- '【组件选型门禁】主输入必须用 `ChatInput`,不可用原生 textarea 或 Input 冒充 AI 输入;模板/助手/案例推荐必须用 `Card`;分类切换必须用 `Tabs`;搜索框用 `Input` + `Icon` 前缀;无结果用 `Empty`。禁止用 Button/Tag 排一行冒充 Tabs,禁止手写卡片。',
212
+ '【组件选型门禁】主输入必须用 `ChatInput`,不可用原生 textarea、InputForm 字段冒充 AI 输入;模板/助手/案例推荐必须用 `Card`;分类切换必须用 `Tabs`;搜索框用 `Input` + `Icon` 前缀;无结果用 `Empty`。禁止用 Button/Tag 排一行冒充 Tabs,禁止手写卡片。',
213
213
  '【整体背景】页面以浅灰大背景(`--color-blueGrey-200`)为主:Hero、筛选行、卡片网格**直接坐灰底**,不要再额外包一整张“右侧白色大卡片容器”(白卡只用于推荐卡片本身)。',
214
214
  '【反例扫描】如果同一右侧首页函数里同时出现 `ChatInput`、模板 `Card` 网格,并且外层存在 `background: var(--color-surface)` / `bg-surface rounded-*` 包住 Hero + 输入框 + Tabs + 网格,说明 AI 把入口页误生成成白卡管理页,必须拆掉这层 wrapper。',
215
215
  '【框架不动】外框灰底 + 左侧 `NavBar` 固定不变;右侧内容区必须 `flex-1 min-w-0 min-h-0 overflow-y-auto overflow-x-hidden`,由右侧内容区作为唯一滚动容器承载整体页面滚动;Hero、ChatInput、筛选行、卡片网格要一起被滑动,禁止只让下方卡片列表单独 `overflow-y-auto`。',
216
216
  '【Hero 区】居中欢迎标题 + 最大宽 680px 的 ChatInput 直接坐浅灰底;Hero 主标题使用 `text-4xl leading-10`;默认使用 `ChatInput variant="default"` 作为入口主输入;标准节奏为 `padding: 84px 40px 80px`,标题区较旧版整体上移 36px。标题区副标题与 ChatInput 之间必须保留 48px 间距(比普通标题说明节奏额外增加 24px),保证输入框不贴近标题区。AI 渐变只用于输入框内部 / AI 标识,不作为整块 Hero 白底。',
217
+ '【Hero 输入区禁止 Form】Hero 区的标题、副标题、AI 身份提示和主 ChatInput 都属于入口页居中启动区,不是表单字段。禁止用 `<Form />`、Form 的 `items[].label`、`labelAi` 或字段标题来包裹 / 模拟输入框顶部的“AI”标题;如果需要在输入框上方展示“AI / 助手名 / 问候语”,必须作为 Hero 内容用普通居中布局实现,并保持 `text-center`、`items-center`、`maxWidth: 680px` 的 ChatInput 容器。',
218
+ '【Hero 反例扫描】同一 ChatHome 页面中如果出现 `<Form items={[{ label: "AI", type: "input" | "textarea" }]}>`、`labelAi` 或 Form 字段标题紧贴主 ChatInput 上方,说明 AI 把入口页主输入误生成为表单字段,必须删除 Form,改回居中 Hero 标题 + `<ChatInput variant="default" />`。',
217
219
  '【筛选与分类】分类切换必须用 `Tabs size="sm"`;筛选行 `padding: 16px 40px`,左 Tabs、右搜索。模板/助手搜索框是辅助筛选入口,不是页面主输入,必须固定宽度并自动对齐到页面右侧:可用外层 `<div className="ml-auto shrink-0" style={{ flex: "0 0 240px", width: "240px", minWidth: "240px", maxWidth: "240px" }}>` 包裹 `Input`,也可直接给 `Input` 传 `style={{ flex: "0 0 240px", "--size-input-width": "240px" }}`;`Input` 的 `style` 作用于根容器。Tabs 外层使用 `flex shrink-0` 保持左侧胶囊 Tabs 可见。筛选行容器禁止使用 `flex-wrap`、`justify-between`、`space-y-*`、`flex-col`;禁止让筛选搜索框 `flex-1`、`w-full`、撑满 Tabs 右侧剩余空间,或换到 Tabs 下方单独占一行。',
218
220
  '【卡片列表】使用自适应 grid(优先 `repeat(auto-fit, minmax(min(320px, 100%), 1fr))`),网格 `gap-4`,禁止固定列宽导致窄屏横向溢出;当前列表直接坐浅灰页面底,所以卡片统一使用 `Card color="white"`。通用铁律是:纯白容器里必须改用 `color="grey"`,灰色/浅灰/其他非纯白容器里必须使用 `color="white"`,且这条规则对所有 Card 分类都生效;列表区域作为普通内容块跟随右侧页面整体滚动,使用 `shrink-0` + `padding: 0 40px 40px`,禁止在卡片列表自身设置 `overflow-y-auto` 造成只有卡片区滚动。',
219
221
  '【内容可扩展】Tab 项数量和卡片数据替换为业务真实数据;卡片 stats/tags 按业务维度自定义',