tt-design-web-vue 0.1.4 → 0.1.6
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/CHANGELOG.md +115 -0
- package/README.md +1 -1
- package/dist/index.cjs +3 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +7006 -3991
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/types/ai/AiArtifactRow/AiArtifactRow.vue.d.ts +54 -0
- package/dist/types/ai/AiArtifactRow/index.d.ts +2 -0
- package/dist/types/ai/AiExecutionFeed/AiExecutionFeed.vue.d.ts +43 -0
- package/dist/types/ai/AiExecutionFeed/index.d.ts +1 -0
- package/dist/types/ai/AiFoldText/AiFoldText.vue.d.ts +35 -0
- package/dist/types/ai/AiFoldText/index.d.ts +1 -0
- package/dist/types/ai/AiInteractionCard/AiInteractionCard.vue.d.ts +113 -0
- package/dist/types/ai/AiInteractionCard/index.d.ts +2 -0
- package/dist/types/ai/AiResultPanel/AiResultPanel.vue.d.ts +23 -0
- package/dist/types/ai/AiResultPanel/index.d.ts +1 -0
- package/dist/types/ai/AiStatusCode/AiStatusCode.vue.d.ts +20 -0
- package/dist/types/ai/AiStatusCode/index.d.ts +3 -0
- package/dist/types/ai/AiStatusCode/status.d.ts +27 -0
- package/dist/types/ai/AiSubagentLineage/AiSubagentLineage.vue.d.ts +33 -0
- package/dist/types/ai/AiSubagentLineage/index.d.ts +2 -0
- package/dist/types/ai/AiTodoProgress/AiTodoProgress.vue.d.ts +41 -0
- package/dist/types/ai/AiTodoProgress/index.d.ts +2 -0
- package/dist/types/ai/AiToolCall/AiToolCall.vue.d.ts +64 -0
- package/dist/types/ai/AiToolCall/index.d.ts +1 -0
- package/dist/types/components/Badge/Badge.vue.d.ts +2 -2
- package/dist/types/components/CardSelect/CardSelect.vue.d.ts +1 -1
- package/dist/types/components/Carousel/Carousel.vue.d.ts +2 -2
- package/dist/types/components/Cascader/Cascader.vue.d.ts +6 -6
- package/dist/types/components/Chart/Chart.vue.d.ts +2 -2
- package/dist/types/components/ColorPicker/ColorPicker.vue.d.ts +2 -2
- package/dist/types/components/Comment/Comment.vue.d.ts +1 -1
- package/dist/types/components/Descriptions/Descriptions.vue.d.ts +2 -2
- package/dist/types/components/Dialog/Dialog.vue.d.ts +6 -3
- package/dist/types/components/Drawer/Drawer.vue.d.ts +7 -3
- package/dist/types/components/EChartsWrapper/EChartsWrapper.vue.d.ts +1 -1
- package/dist/types/components/FloatButton/FloatButton.vue.d.ts +1 -1
- package/dist/types/components/Form/FormItem.vue.d.ts +18 -1
- package/dist/types/components/Grid/Col.vue.d.ts +2 -2
- package/dist/types/components/Icon/ttIcons/TtIconActivityOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconApiOutline14.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconArchiveOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconBookOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconBoxOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconBranchOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconBriefcaseOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconBrowseOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconBuildingOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconCheckSquareOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconChecklistOutline14.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconChevronDownOutline14.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconClockOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconCodeOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconCompactOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconCpuOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconDashboardOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconDatabaseOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconDollarSignOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconEditOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconEyeOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconFeatherClockOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconFeatherCodeOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconFileMinusOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconFilePlusOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconFileTextOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconFlagOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconFocusOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconFolderOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconFolderOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconGitBranchOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconGoalOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconGridOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconGridPlusOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconHouseOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconImageOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconInfoOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconListOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconLoadingOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconMessageSquareOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconMicOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconMonitorOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconMoonOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconMusicOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconNetworkOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconPhoneOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconPlusOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconPulseOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconRefreshOutline14.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconSearchOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconServerOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconSettingsTwoOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconShieldCheckOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconShieldOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconSparkle16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconStarOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconSunOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconSunnyOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconTaskDoneOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconTeamOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconThinkOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconToolOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconToolboxOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconTranslateOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconUserGroupOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconUserOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconUserRoundOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconUsersOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconVideoOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconVolumeTwoOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconWarningOutline16.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/TtIconWorkflowOutline24.vue.d.ts +6 -0
- package/dist/types/components/Icon/ttIcons/index.d.ts +79 -0
- package/dist/types/components/Icon/ttIcons/props.d.ts +13 -0
- package/dist/types/components/Input/Input.vue.d.ts +8 -8
- package/dist/types/components/InputNumber/InputNumber.vue.d.ts +6 -6
- package/dist/types/components/MenuPanel/MenuPanelItem.vue.d.ts +1 -1
- package/dist/types/components/Money/Money.vue.d.ts +1 -1
- package/dist/types/components/PageHeader/PageHeader.vue.d.ts +7 -3
- package/dist/types/components/Plate/Plate.vue.d.ts +5 -5
- package/dist/types/components/Progress/Progress.vue.d.ts +2 -2
- package/dist/types/components/QRCode/QRCode.vue.d.ts +2 -2
- package/dist/types/components/RichText/RichText.vue.d.ts +4 -4
- package/dist/types/components/Select/Select.vue.d.ts +1 -1
- package/dist/types/components/Space/SpaceCompact.vue.d.ts +1 -1
- package/dist/types/components/Space/index.d.ts +3 -3
- package/dist/types/components/Steps/Step.vue.d.ts +2 -2
- package/dist/types/components/Switch/Switch.vue.d.ts +2 -2
- package/dist/types/components/Tabs/Tabs.vue.d.ts +8 -1
- package/dist/types/components/Tag/CheckableTag.vue.d.ts +2 -2
- package/dist/types/components/Tag/Tag.vue.d.ts +15 -4
- package/dist/types/components/Tag/index.d.ts +21 -15
- package/dist/types/components/Tour/Tour.vue.d.ts +2 -2
- package/dist/types/components/Upload/Upload.vue.d.ts +2 -2
- package/dist/types/index.d.ts +15 -0
- package/dist/types/utils/forwardProps.d.ts +27 -0
- package/docs/component-compatibility.md +90 -9
- package/docs/component-manifest.json +534 -33
- package/docs/components/button.md +27 -1
- package/docs/components/dialog.md +4 -0
- package/docs/components/form.md +26 -4
- package/docs/components/icon.md +120 -1
- package/docs/theme.md +1 -0
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,121 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## 0.1.6
|
|
6
|
+
- **组件清单去手工行号(删除 131 处行号字段)**:`docs/component-manifest.json` 里「某某在第几行」这类字段全部删除——`sources.react.componentImportLines` / `componentExportLines` / `runtimeAliasLines`(该子对象随之删除)、`sources.vue.runtimeExportLines` / `typeOnlyExportLines`、`vueOnly.defaultExtensions[].line` × 92、`vueOnly.namedCompositeOrSubcomponentExports[].line` × 25、`mappings.aliasCandidates[].reactLine` / `vueLine`、`mappings.missing[].reactLine`、`mappings.nonEquivalent[].reactLine` / `vueLine`、`reactNonComponentRuntimeExports[].declarationLine` / `exportLine`。删掉的理由是这些字段**没有任何消费者**:全仓唯一下游 `tests/components/ai-message-flow.spec.ts` 只读 `vueOnly.defaultExtensions[].name` 做存在性断言,从不校验行号 / 计数 / 类型行;同时包内 `files` 不含 `src/`,行号对使用方本就不可解析。而它们又能由 `src/index.ts` 完全推导、却长期靠手写转录——实测回溯 8 个历史提交,**同一提交内的 manifest 从未与源码一致过**(`vueOnly` 行号 10/20 错、具名子组件行号 25/25 全错、30 条类型导出行仅 7 条有效且漏登 34 条)。删掉载体后漂移不再可能发生,故**不引入生成器、不新增校验**(不为无人消费的字段维护 CI 机制)。同步去掉 `docs/component-compatibility.md`「基线来源」中的行号区间(`index.js:80-154`、`index.ts:1-109`)。`summary.reactBaselineComponentCount` 含 "Baseline" 但属计数而非行号,已保留。
|
|
7
|
+
- **组件清单计数与条目按口径补正**:`summary.vueRuntimeComponentExportCount` 190 → **193**、`vueNamedRuntimeExports` 26 → **29**。口径统一为「默认再导出 + 具名子组件」:`vueDefaultReexports` **164**(= 92 个直接 `default as Tt*` + 72 个图标桶 `export *`,未变)+ 29 个 `X as TtY` 形态的具名子组件。此前那个 26 是**只随 `vueDefaultReexports` 同步递增、从未重算过**的常量(历次 changelog 中两者差值恒为 26 可证)。`vueOnly.namedCompositeOrSubcomponentExports` 补齐漏登的 4 条并按源码顺序重排(25 → 29):`TtRow` / `TtMenuPanelItem` / `TtSpaceCompact` / `TtCheckableTag`——`TtCol` 早已登记而配对的 `TtRow` 漏登,是本表不自洽的直接证据。`docs/component-compatibility.md` 统计表同步:Vue 运行时组件/子组件导出 132 → **193**、Vue-only 默认扩展 36 → **92**、Vue-only 命名复合/子组件 24 → **29**,并补齐其命名复合清单块为 29 项。改后 md 与 manifest 的统计行、`exactNameComponents`(70)、`defaultExtensions`(92)、命名复合块(29,顺序一致)逐项复核通过。
|
|
8
|
+
- **`TtCard` 头部内边距收敛为 `--tt-card-header-padding`(默认值不变)**:此前 `.el-card__header` 的 `9px 20px` 写死在库内,宿主想让分区面板的标题与正文贴齐同一条内容对齐线时,只能再叠一层选择器覆盖组件内部规则。现与 `--tt-card-body-padding` / `--tt-card-footer-padding` 同一做法收敛成变量:默认值 `9px 20px` 声明在卡片根节点(`.tt-card.el-card`),副标题变体的默认值 `9px 16px 11px 20px` 同样声明在根节点选择器块内(而不是声明在被消费的 `.el-card__header` 元素上——那样宿主在卡片上赋的值会被子元素自身的声明覆盖、静默退回默认值)。宿主在卡片元素上按同等或更高特异度赋值即可生效。**视觉零回归**:两条默认值与改动前逐项一致。
|
|
9
|
+
- **测试**:`tests/components/card.spec.ts` 由 10 例扩到 **13 例**(头部消费变量且不写裸值、两条默认值与改动前逐项一致、变量声明在根节点作用域而非被消费的头部元素上)。
|
|
10
|
+
- **补充自定义 Icon 图标规范**:在 Icon 文档和 `ttIcons/README.md` 中明确图标使用优先级(Element Plus → 公共 `ttIcons` → 宿主私有图标)、内联 SVG 与独立 SVG 资产的使用边界、公共图标与域资产的维护边界、`sources.json` 唯一事实来源、生成物职责、`TtIcon` 形状命名与撞名规则、新增校验流程及无障碍要求;保留 iconfont 作为兼容路径,新图标不再新增到字体图标体系。
|
|
11
|
+
- **图标族新增 4 个自绘图标(`ttIcons`,72 个)**:为 TongClaw 项目资料库统计卡补入 `TtIconFolderOutline24`(文件夹,带横隔线)/ `TtIconTaskDoneOutline24`(方框内勾选)/ `TtIconFileTextOutline24`(带文字行的文档)/ `TtIconUserGroupOutline24`(三人)。四者上游(Element Plus / DeepSeek Harness / Feather)均无等价图形,按族规登记为 `source: 'self-drawn'` (`provenance: 'original'`),`origin` 如实记录最初取自 TongClaw 源码的位置;画布 24、`stroke`、`stroke-width 2`、`currentColor`,满足族内设计规则(由 `tt-icons.spec.ts` 强制)。命名遵循撞名规则:`Folder` / `TaskDone` / `FileText` / `UserGroup` 均为形状名,与族内既有 `TtIconFolderOutline16` / `TtIconCheckSquareOutline16` / `TtIconUsersOutline24` **图形不同**,故用不同形状名而非限定词区分。既有 68 个图标的渲染标记与文件头**零回归**(已用备份逐字节比对)。
|
|
12
|
+
- **生成器加固**:`--check` 之外,入库源校验新增 `license` / `upstream` 必填——此前新增条目漏字段时会生成 `本库自绘(undefined)` 的文件头,现在直接报错退出而不是静默产出错图标。
|
|
13
|
+
- **新增 Tabs-first 浮层布局合同**:`TtDrawer` / `TtDialog` 新增 `bodyLayout="tabs"`,`TtTabs` 新增 `fill`。组合使用时浮层 body 不再叠加默认 padding,页签头保持 38px,TabPane 统一承担一层内容 padding 与独立滚动,修复 Drawer / Dialog 内使用 Tabs 后留白和可用高度被重复扣减的问题。
|
|
14
|
+
- **修复 `danger + text/link` 按钮颜色**:危险文字与链接按钮的 normal / hover / active 状态分别使用 `--tt-color-error` / `--tt-color-error-hover` / `--tt-color-error-active`,不再被通用文字按钮规则覆盖成品牌蓝。
|
|
15
|
+
- **`TtIcon` 图标族升级为「多来源统一图标库」,图标 16 → 68 个**:`ttIcons/` 原为「DeepSeek Harness 专属族」(16 个),现改为统一承载**公共图标**(壳层、导航、通用动作),消费方不再各自维护图标注册表。新增 52 个图标,来源三类并在 `manifest.json` 与每个 SFC 文件头逐条标注:**`dsh`**(DeepSeek Harness,16 个,MIT / Copyright (c) 2026 DeepSeek)、**`feather`**(Feather Icons v4.29.2,21 个,MIT / Copyright (c) Cole Bemis,其中 4 个为 `derived` 改形:`Monitor` / `FilePlus` / `Archive` / `Info`)、**`self-drawn`**(上游图标集无等价图形,31 个,由本项目自绘)。`provenance` 区分 `verbatim` / `derived` / `original`。
|
|
16
|
+
- **规则改造(本版核心)**:族规由「单一 DSH 源 + 路径逐字核验」改为**多来源 + 分源核验**。
|
|
17
|
+
- **入库源独立成文件** `scripts/tt-icons/sources.json`(唯一事实来源,含来源元数据)。生成器与新测试**只读该文件,不依赖任何外部检出**——修复了此前「`tt-icons.spec.ts` 强制要求本机存在 deepseek-harness 检出、否则整个用例文件报错」的既存缺陷(该缺陷在无 DSH 检出的机器上使 2 个用例恒失败)。
|
|
18
|
+
- **生成器**由 `scripts/extract-dsh-icons.mjs` 重写为 `scripts/extract-tt-icons.mjs`:多来源适配器、入库源校验(缺字段 / 组件名重复 / 来源未知 / 含硬编码颜色一律显式报错退出)、`--check` 幂等校验、可选 `--verify-upstream` 与真实上游交叉核验(上游不可用时明确报告,不静默通过)。
|
|
19
|
+
- **测试**由「数量硬编码 16 + 路径必须存在于 DSH 源」改为:数量与清单一致(清单是唯一事实来源)、按 `source` 分派核验(`dsh` / `feather` 走出处核验,`self-drawn` / `derived` 走**设计规则校验**)。
|
|
20
|
+
- **设计规则校验**(替代出处校验,供自绘与改形项使用):结构合法(渲染出 `svg` 且 `viewBox` 与画布一致)/ 无硬编码颜色(只允许 `none` 与 `currentColor`)/ 无硬编码尺寸(不写 `width`·`height`)/ 图元白名单(`path`·`rect`·`circle`·`ellipse`·`line`·`polyline`·`polygon`)/ 坐标不越界。坐标解析按 SVG 规范实现:**按每条命令的真实参数元数取数**(`H`/`V` 只带 1 个值)、**按规范分词数字**(`c.907.339` 是两个数而非 `907.339`)、**应用元素 `transform`**(部分图标用 `matrix(...)` 定位,局部坐标含负数)。三点都是实测踩过的坑,注释里已写明。
|
|
21
|
+
- **新增 52 个图标(形状名,业务语义留在消费侧)**:
|
|
22
|
+
- 构建端导航(18px 档):`GridOutline24`(Feather)、`AtSign`→**`UserOutline24`**、`UsersTwo`→**`TeamOutline24`**、`GridPlusOutline24`、`ShieldCheckOutline24`、`BookOutline24`、`DatabaseOutline24`、`GitMerge`→**`WorkflowOutline24`**、`PhoneOutline24`、`GitBranchOutline24`、`StarOutline24`(Feather)、`Package`→**`ToolboxOutline24`**、`ToolOutline24`(Feather)、`Sliders`→**`FocusOutline24`**、`ActivityOutline24`(Feather)、`BookOpen`→**`MessageSquareOutline24`**、`Gauge`→**`EyeOutline24`**、`ShieldOutline24`(Feather)、主题三态 `SunOutline24` / `MoonOutline24`(Feather)/ `MonitorOutline24`(改形)。
|
|
23
|
+
- 设置与安全二级导航(16px 档):`CpuOutline24`、`SettingsTwoOutline24`、`ImageOutline24`(Feather)、`VolumeTwoOutline24`、`MicOutline24`(Feather)、`MusicOutline24`(Feather)、`VideoOutline24`(Feather)、`BoxOutline24`、`BriefcaseOutline24`(Feather)、`BuildingOutline24`、`UsersOutline24`(Feather)、`Terminal`→**`ListOutline24`**、`Route`→**`NetworkOutline24`**、`Layers`→**`ArchiveOutline24`**(Feather 改形)、`ServerOutline24`(Feather)、`FileMinusOutline24`(Feather)、`FilePlusOutline24`(改形)、`DollarSignOutline24`、`FlagOutline24`、`InfoOutline24`(改形)、**`FeatherClockOutline24`** / **`FeatherCodeOutline24`**(见下)。
|
|
24
|
+
- 应用端导航(16px 档,原 CSS mask 素材):`PlusOutline16`、`DashboardOutline16`、`HouseOutline16`、`CheckSquareOutline16`、`UserRoundOutline16`、`SunnyOutline16`、`FolderOutline16`、`PulseOutline16`。
|
|
25
|
+
- 用户菜单(16px 档):`ActivityOutline24`、`SunOutline24`、`TranslateOutline24`。
|
|
26
|
+
- **命名规则(新增,写入 README)**:族内一律用**形状名**(`TtIconGridOutline24`),业务语义不进库;**撞名时新方加限定词、已有名不改**(避免破坏性重命名)。本版命中 2 处并与族内既有图标是**不同图形**(实测相似度 0.369 / 0.073):Feather `clock` → **`TtIconFeatherClockOutline24`**(族内已有 `TtIconClockOutline16`,DSH)、Feather `code` → **`TtIconFeatherCodeOutline24`**(族内已有 `TtIconCodeOutline16`,DSH)。
|
|
27
|
+
- **既有 16 个图标零回归**:生成物渲染标记与升级前**逐字节一致**(已用备份对照校验),导出名、props、`tt-*` 类名、视觉行为均不变。
|
|
28
|
+
- **机械替换、不改变视觉**:应用端 8 个图标源自 CSS `mask-image` 素材,替换时只做两件必要操作——写死颜色(`#235` / `#213354` / `#38F` / `#3388FF` / `var(--fill-0, …)`)归一为 `currentColor`,以及为 5 个缺 `viewBox` 的素材补 `viewBox`(= 其固有坐标系)。两项均已用 headless Chromium 逐像素验证为**视觉无操作**(补 `viewBox` 差异 0.000000;颜色归一最大差异 0.140% 覆盖率,为抗锯齿取整噪声)。`stroke-width`(1.2/1.5/1.6/2)、画布(16/20/24)与 fill/stroke 混排**一律原样保留**,不在本版统一。
|
|
29
|
+
- **不做 EP re-export**:经评估(EP 图标名与库导出名零碰撞、`@element-plus/icons-vue` 已在 rollup `external` 列表、但宿主侧 EP 图标 import 分散在 146 个文件)决定**不**在入口平铺 re-export EP 图标;EP 图标继续由消费方从 `@element-plus/icons-vue` 直接 import。库的导出面只增加 52 个字形。
|
|
30
|
+
- **文档与登记**:`docs/components/icon.md` 补「图标族」整节(此前**完全未记录**图标族,只写了 `icon` / `iconfont` / 插槽三种用法)——含用法三种形态、图标族 props、三种来源与许可、设计规则、新增流程;`ttIcons/README.md` 按多来源重写(来源表、判定顺序、设计规则、命名规则、生成脚本用法、新增步骤);`docs/component-compatibility.md` 与 `docs/component-manifest.json` 同步(图标条目 16 → 68,`summary` 的 `vueDefaultReexports` 107 → 159、`vueRuntimeComponentExportCount` 133 → 185。**本版最终为 `vueDefaultReexports` 164 / `vueRuntimeComponentExportCount` 193**,含 `TtAiInteractionCard` 与本版新增的 4 个图标;`vueNamedRuntimeExports` 于本版末由 26 修正为 29);`feather-icons@4.29.2` 加入 devDependencies(仅生成期与测试期读取,**产物零运行时依赖**)。
|
|
31
|
+
- **测试**:`tests/components/tt-icons.spec.ts` 由 10 例扩到 **14 例**(数量与清单一致、清单字段合法性、barrel 与公共入口、默认尺寸与画布、文件头来源标注、生成器声明、分源核验、设计规则校验五项)。
|
|
32
|
+
- **待需求人确认 2 项**:① 35 个 `self-drawn` 图标(本版 16 → 68 升级中加入 31 个、后续新增 4 个)最初取自 TongClaw 源码(`capturedFrom` 已如实记录),**公开发布前需确认该批图形的权利归属**;② 族内并存 fill(19 个)与 stroke(53 个)两种渲染方式,本版按「机械替换、不改变视觉」原样保留,视觉统一另议。
|
|
33
|
+
- **`TtPopover` 几何默认值改放零特异性 `:where()`,修复「宿主赋值静默失效」**:`--tt-popover-padding` / `--tt-popover-min-width` / `--tt-popover-max-width` 三条默认值原先写在高特异性的 `.tt-popover.el-popover.el-popper`(0,3,0)里,宿主在浮层元素上用**单个类**赋值只有 (0,1,0),会被库内规则压掉——实测宿主写 `--tt-popover-min-width: 400px` 后浮层仍是 242px,Element Plus 的 `width` 属性同样无效(min/max-width 是硬上限,会连同 `width="auto"` 一起把浮层钉在 242px),宿主只能再叠一层提升特异性的选择器,那是本库禁止的写法。现把默认值搬进 `:where(.tt-popover.el-popover.el-popper)`(特异性 0),宿主单类赋值或内联样式即可生效,「几何走变量」的承诺才真正成立;与 `Menu/style.scss` 对 `--tt-menu-*` 默认值的做法一致。默认值只在 `:where()` 声明一次,**不得在高特异性规则里重复声明**(已有用例锁定)。
|
|
34
|
+
- **新增命令面板浮层宽度契约(缺陷 D17)**:`TtPopover` 的 242px 是**气泡卡片**语义,而浮层里承载 `TtMenuPanel` 时宽度应由**面板内容**决定——否则「编辑 / 设为扩展 / 删除」这类三项菜单会被撑到 242px(实测内容仅需 150px)。新增 `.tt-popover.el-popover.el-popper:has(.tt-menu-panel)`(宿主用 `TtPopover` 包 `TtMenuPanel` 即自动正确,**不依赖宿主记得传 `popper-class`**)与 `.tt-popover.tt-menu-popper.el-popover.el-popper`(`tt-menu-popper` 是库与宿主既有的命令面板标记类,保留作显式契约)两条选择器:放开宽度为内容自适应(`--tt-popover-min-width: 0`、`--tt-popover-max-width: min(var(--tt-menu-panel-max-width, 320px), calc(100vw - 32px))`,新增 `--tt-menu-panel-max-width` 变量),并清除气泡卡片的内衬与自绘外观(面板自带表面与 8px 内衬,避免「气泡外框 + 面板内框」双层)。真实浏览器实测:三项菜单 242px → **166px**(= 面板 150px + 8px×2),带与不带 `tt-menu-popper` 结果一致,普通气泡卡片仍是登记的 242px,宿主单类赋值可正常覆盖。
|
|
35
|
+
- **测试**:`tests/components/popover.spec.ts` 由 3 例扩到 **5 例**(新增「几何默认值放在零特异性 `:where()` 里,宿主用变量即可覆盖」与「命令面板浮层的宽度随菜单面板内容,不吃气泡卡片的 242px」);两例均做过变异反证(默认值搬回高特异性规则、删除命令面板规则都会被抓住)。库全量 **57 文件 / 369 例通过**。
|
|
36
|
+
- **新增 `TtAiInteractionCard`(AI 会话组件族第 9 个组件)**:会话里「需要用户响应」的交互块此前没有库内组件 —— 库内 8 个 `TtAi*` 全是展示类,唯一的「选择」语义是产物行 / 血缘行的整行 `select`。于是每个「让用户选一下 / 填一下」的场景都在页面里各自自绘:手写原生 `<input type=radio>` / `<input type=checkbox>` / `<textarea>` / `<button>`、各写一套私有配色、各写一套展开状态,同一个交互在六处长得不一样,也绕开了「不手写控件、不用私有色」的约束。本组件把这套骨架一次收进组件库。
|
|
37
|
+
- **一张卡 = 标题行 + 正文**。标题行是卡片自身:行首 16px 状态盒(异常显示状态点、常态显示节点图标)+ 标题(14/22、600)+ 可选摘要(2px 分隔点 + 单行省略)+ 可选折叠箭头;正文依次是事由、默认插槽(复杂卡自绘)、候选、输入、动作。
|
|
38
|
+
- **props**:`title` / `icon` / `summary` / `status` / `statusLabel` / `reason` / `options`(`{id,label,description?,disabled?}[]`)/ `selection`(`none` 纯动作卡 / `single` 单选 / `multiple` 多选)/ `input`(`none` / `line` / `text`)/ `inputLabel` / `inputPlaceholder` / `inputRows` / `actions`(`{id,label,variant?,disabled?,loading?}[]`)/ `collapsible` / `busy` / `readOnly`。
|
|
39
|
+
- **v-model**:`v-model:expanded`(折叠)、`v-model:model-value`(选中的候选 id,单选为 `string`、多选为 `string[]`)、`v-model:input-value`(输入内容)。**props** 另有 `expanded` 本身,受控折叠由调用方持有,组件不自持展开状态。
|
|
40
|
+
- **events**:`submit(actionId)` —— 动作按钮被点击时回传该动作的 id。
|
|
41
|
+
- **slots**:`default`(正文,复杂卡用它挂自己的结构,卡片不再开二级折叠)、`title-extra`(标题行的行内辅助内容,如「查看执行详情」;收起态只有标题行可见,行内辅助动作必须与标题同在)。
|
|
42
|
+
- **组件不含业务逻辑**(族契约既有条款):不发请求、不写存储、不持全局状态,提交一律由调用方处理;`busy` 只负责「禁用候选 / 输入 / 全部动作」这一件事,是否在提交、失败了怎么办由调用方决定。
|
|
43
|
+
- **`readOnly`**:已决态不再渲染任何可选控件、输入控件与动作,候选项以静态清单、输入内容以静态文本交出 —— 同一张卡完成态与开场态是同一个组件,不会出现「已决的卡里还留着能点的控件」。
|
|
44
|
+
- **状态语义与族内过程行同口径**:失败 / 中断等待行首显示状态点,其余显示节点图标;状态名经 `statusLabel` 以 1px 裁剪盒交给辅助技术,组件不内置任何状态文案(不传 `status` 时不渲染任何状态标记,缺失终态不会被渲染成成功)。
|
|
45
|
+
- **卡内不手写控件**:候选用 `TtRadioGroup` / `TtCheckboxGroup`、输入用 `TtInput`、动作用 `TtButton`;动作变体只映射到既有变体(`primary` / 默认 / `ghost`),不新增变体。
|
|
46
|
+
- **几何与视觉全部走 token**:卡片 `--tt-ai-interaction-card-radius` 默认 `var(--tt-radius-lg)`(r8)、标题行 `--tt-ai-interaction-card-row-height` 默认 `var(--tt-control-height)`(32px)、行首盒 16px、分隔点 2px、段间距 8px;中性面板 = 1px `--tt-border-color-light` 描边 + 白面,无阴影、无彩色底、无彩色左边框;圆角形状(标题行圆上两角 / 正文圆下两角)也做成变量,`border-radius` 声明本身只读变量。
|
|
47
|
+
- **无障碍**:可折叠时标题行是原生 `<button>` 并带 `aria-expanded` + `aria-controls`(指向正文),不可折叠时是 `<div>`,指针手势与 hover 反馈只挂在 `tt-ai-interaction-card--collapsible` 修饰类下(不给点了没反应的假交互);输入区标签是控件的可访问名;焦点可见走 `--tt-focus-ring`;折叠箭头过渡带 `prefers-reduced-motion` 兜底。
|
|
48
|
+
- **同步**:`src/index.ts`(值与类型分开导出 `AiInteractionOption` / `AiInteractionAction` / `AiInteractionSelection` / `AiInteractionInput` / `AiInteractionActionVariant`)、`src/styles/index.scss` 注册、`AiInteractionCard.stories.ts`(6 个 story:纯动作卡 / 单选候选 / 多选与输入 / 可折叠 / 已决态 / 提交中)、新增 `tests/components/ai-interaction-card.spec.ts`(24 条)。族契约 `ai-message-flow.spec.ts` 纳入新组件后**约束强度不变**:族内导出、类型导出、样式聚合注册、只吃 `--tt-*`(无裸色、无 `rgba()`、无库外变量)、颜色 / 间距 / 圆角 / 字阶全走 token、高度字面值落在 4px 阶梯、状态不只靠颜色、无指针手势假反馈、`reduced-motion` 兜底、无业务逻辑、清单登记,全部对新组件一并生效(其中「状态不只靠颜色」与「无指针手势假反馈」两条当前仍只锚定族内既有成员,对新组件的同等约束由 `tests/components/ai-interaction-card.spec.ts` 承担)。
|
|
49
|
+
- **组件清单**:`docs/component-manifest.json` 登记为 Vue-only 默认扩展(AI 信息流 · 需用户响应的交互卡),`docs/component-compatibility.md` 同步。`TtAi*` 一族仍按既有约定不进 VitePress 组件页(8 个既有成员同样只以 Storybook + 类型声明 + 本条目为准),族内文档口径不变。
|
|
50
|
+
- **`TtAiInteractionCard` 的折叠契约**:`expanded` 由调用方持有(`v-model:expanded`),组件只上抛展开意图、不自己改写。标题行按 `collapsible` **且卡片确实有正文可展** 决定形态:两者同时成立时才是整行按钮(带 `aria-expanded` / `aria-controls`),否则是 `<div>` —— 与 `TtAiToolCall` / `TtAiExecutionFeed` 的「没有可展开内容就不是按钮」对齐,不给点了没反应的假交互。正文来源包含 `reason` / 候选 / 输入 / 动作与默认插槽,任一存在即算有正文。
|
|
51
|
+
- **修复 `TtAiInteractionCard` 行内辅助动作会连带展开卡片**:`title-extra` 插槽此前渲染在标题行**按钮内部**,点这个动作会冒泡到行按钮,一次点击同时打开详情并展开卡片;且 `collapsible` 时插槽落在 `<button>` 里,构成「button 内嵌 interactive content」的 HTML 内容模型违规。现新增 `__header` 标题区容器(描边与圆角移到它身上),标题行按钮与 `title-extra` 成为**兄弟节点** —— 点行内动作不再冒泡翻转展开态,也不再嵌套交互元素,且因仍在标题区(不在正文),收起态照样可见可点。族契约的高度阶梯豁免改为**按做法判定** —— 该块声明了 `clip` / `clip-path` 裁剪(视觉隐藏的标准技法)即豁免,不再按类名枚举,族内任何用该技法承载语义文字的组件都不会被误判为几何越界(豁免写死类名时,豁免范围只对当时那几个类名有效,新成员会被误判)。
|
|
52
|
+
- **修复 `TtAiInteractionCard` 已决态看不出当时选了什么**:`readOnly` 时候选退化为静态清单却不读选中值(输入侧一直有回显,选择侧没有,两侧口径不对称)。现按 `modelValue` 把当时选中的候选项标出来(勾形图标 + 视觉隐藏的「已选」,多选逐项标),仍不渲染任何可交互控件;`selection: 'none'` 的纯动作卡没有选择语义,不标。调用方进入已决态时不要提前清空 `modelValue`,否则无从标注 —— 该口径写进 `readOnly` 的 props 注释。
|
|
53
|
+
- **`TtDropdown` 菜单行密度对齐库内 32px 档(一次可见视觉变化)**:`.el-dropdown-menu__item` 的 `min-height` 由 38px 收到 32px、内边距由 `8px` 改为 `5px 8px`(行距 8px 不变)。本库此前已把「紧贴触发器的选项列表」的密度定为 32px / 纵向 5px / 行距 8px(`TtMenuPanelItem` 与 `TtSelect` 下拉选项行同档),`TtDropdown` 是三者中唯一没有跟进该理由的:同为紧贴触发器弹出的选项列表,行高多 6px、节距 46px 对 40px,四项菜单的面板总高比同密度档多 24px(192px 对 168px)。三者的行高都由 `--tt-line-height-base`(22px) + 纵向内边距得出,故新取值与兄弟组件同源、不是另立的数字。**宽度契约不变**(浮层与菜单仍 `min-width: 136px`),组件 props、导出名与 `tt-*` 类名均不变。命中面是全部使用 `TtDropdown` 的下拉菜单,逐处矮 6px、节距少 6px;宿主此前无需、此后也不应为此写行几何覆盖或自造 `--tt-dropdown-*` 变量。
|
|
54
|
+
- **测试**:新增 `tests/components/dropdown.spec.ts`(**5 例**),直接读 `style.scss` 做断言——本行取 32px 档且 38px / `padding: 8px` 不得回潮、与 `TtMenuPanelItem` 行几何逐项一致、与 `TtSelect` 选项行同高同行距、行高与兄弟组件同源、宽度契约不变。
|
|
55
|
+
|
|
56
|
+
## 0.1.5
|
|
57
|
+
- **`TtAi*` 一族迁到 `src/ai/`**:8 个 AI 会话组件(`AiExecutionFeed` / `AiToolCall` / `AiStatusCode` / `AiFoldText` / `AiResultPanel` / `AiArtifactRow` / `AiTodoProgress` / `AiSubagentLineage`)从 `src/components/` 移到 `src/ai/`,与通用组件分开管理,避免通用组件目录被「只服务 AI 会话信息流、其他页面不消费」的组件淹没。**对消费方无影响**:公开入口仍是 `src/index.ts`,`TtAi*` 的导出名、props、事件、插槽、`tt-*` 类名与全部视觉行为逐项不变;`package.json` 的 `exports` 只暴露包根与 `style.css` / `rich-text.css`,不含内部目录路径,单文件深路径引用本就不在公共契约内。族内样式注册(`src/styles/index.scss`)、定向 Vitest、Storybook story 与文档登记方式一并保持不变;`TtAi*` 之间的相对引用与族契约的路径锚点已同步更新。
|
|
58
|
+
- **破坏性变更与行为变更(`TtAiToolCall` / `TtAiExecutionFeed`,消费方升级前必读)**
|
|
59
|
+
- **过程行几何 28px → 24px**:`--tt-ai-tool-call-row-height` 默认改为 `var(--tt-control-height-sm)`(24px,复用既有控件高度档,不新增数值)。行结构按 DSH `ToolRow` 重建为 24px 单行:`[16px 行首盒(状态/图标,悬停切箭头)] 6px [title] 8px [2px 分隔点] 8px [summary 占满并单行省略]`。
|
|
60
|
+
- **移除 `lines?: number`**:明细改「段内滚动」后不再有行数上限概念,保留会造成「接受了但不生效」的静默空转。`TtAiFoldText` 组件本身保留(其折叠能力仍被宿主的思考文本与过程文本使用),移除的只是 `TtAiToolCall` 对它的用法与该入参;折叠与段内滚动**二选一**,不叠加(叠加会形成「折叠里再折叠」——用户先要展开行、再要展开文本,且折叠后的可视线索与段内滚动条重复)。
|
|
61
|
+
- **移除明细「两个并排卡片」结构**:类 `.tt-ai-tool-call__panes` / `__pane` / `__pane-label` / `__pane-body` 与变量 `--tt-ai-tool-call-pane-gap` / `--tt-ai-tool-call-pane-min-width` / `--tt-ai-tool-call-pane-max-height` 全部删除(此前靠 `repeat(auto-fit)` 栅格排版,`240px` 硬下限在窄容器下会把整行撑出容器)。
|
|
62
|
+
- **移除 `.tt-ai-tool-call__status` 与 `.tt-ai-tool-call__spacer`**:行尾不再渲染任何状态标记或箭头,状态下沉到行首(原先行尾的可见 `AiStatusCode` 用法与 `size="sm"` 一并移除,行首状态点改用 `marker="dot"`);摘要占满剩余宽度后不再需要撑开用的 spacer。
|
|
63
|
+
- **`statusLabel` 语义变更**:此前是**可见**的行尾标签,现改为**视觉隐藏**文本(仍传同一 prop,但不再可见);依赖可见状态文案的调用方需改走别的行内容。
|
|
64
|
+
- **状态语义改由「视觉隐藏文本」承载**(不变量 3「状态不靠颜色」):行首状态点是装饰性的(`aria-hidden`),状态的文字名以 1px 裁剪盒交给辅助技术(**用 `clip` 而非 `display: none`**,后者会把文本移出可访问性树);文案仍一律由调用方经 `statusLabel` 提供,组件不内置任何状态文案;`TtAiStatusCode` 的标记(状态点或图标)同样一律 `aria-hidden`,文字名由调用方经 `label` 提供,`label` 与 `name` 都为空时组件整体 `aria-hidden`,不会自己编出一句状态文案。
|
|
65
|
+
- **`TtAiExecutionFeed` 折叠行:成功态不再渲染可见状态标记**(需求人裁决「跟 DSH 一样成功态无状态标记」;DSH 的 `TurnProcessNodeView` 折叠行只有 `label + chevron`,任何状态都不给状态点):成功态只保留「标题 + 计数摘要 + chevron」;非成功态(进行中 / 失败 / 中断等待 / 未知)仍在行首给状态点、行尾给可见状态名。状态语义仍对辅助技术可读 —— 新增 `__status-text` 视觉隐藏载体,放在按钮**内**使状态名进入该行的可访问名(读屏播报「执行过程 · N 次工具调用 · 已完成」)。
|
|
66
|
+
- **新增 `summary?: string`**:渲染为 title 之后的「2px 分隔点 + 单行省略文本」,占据行的剩余宽度;**空 summary 连分隔点一起不渲染**(行末不留孤立圆点)。摘要取 `--tt-text-placeholder` 档(H2 裁决:TT 无 tertiary 档,与 DSH caption 同档)。
|
|
67
|
+
- **行首承担状态**(对齐 DSH `ToolRow.leadingFor()`):**失败**与**中断等待**显示状态点,其余(含**成功**、进行中、未定)显示节点图标 —— 由此「成功态无可见状态标记」成立:成功行显示的是工具自己的图标,不是状态标记。
|
|
68
|
+
- **箭头改悬停出现**:收起态在行首盒内同时渲染节点图标与预览箭头,行悬停或行获得键盘焦点时图标淡出、箭头淡入;展开态只显示箭头。两处均带 `prefers-reduced-motion` 兜底。
|
|
69
|
+
- **与 DSH 的一处有意分歧**:DSH 的行是 `div[role="button"]` + 内嵌 `button.leading`;Vue 侧照抄会形成 **button 套 button 的非法 HTML**。故改为「整行单一原生 `<button>` + 行首为装饰 `<span>`」:点行首即点整行,一次事件、天然不重复触发,并已加用例锁定行内不得出现嵌套 `button` / `[role="button"]`。
|
|
70
|
+
- **`TtAiToolCall` 明细重构为「一个卡片 + IN/OUT 两段」**(按 DSH `.ioCard` / `.ioSection` / `.ioLabel`):一个数据面容器(1px 描边 + `--tt-radius-xl` 12px 圆角 + `--tt-bg-subtle` 底,`overflow: hidden`),内部两段各自按 `--tt-ai-tool-call-io-max-height`(默认 150px)**限高并独立纵向滚动**,段间为**全宽分隔线**;段内为「标签列 + 载荷列」网格(`grid-template-columns: max-content 1fr`、`column-gap` 12px、`align-items: baseline`),标签取 `--tt-text-placeholder`(比载荷淡一档,读作标签而非内容)并 `position: sticky; top: 0`,失败调用的输出用 `--tt-color-error`。滚动条做了内缩(`::-webkit-scrollbar-thumb` 透明边框 + `padding-box` 裁剪),滑块不贴圆角卡片边缘。
|
|
71
|
+
- **窄容器防回归按新结构重验**:防溢出机制由「栅格下限夹取」改为「换行 + 收缩链」(卡片与段均 `min-width: 0`、段 `overflow-x: hidden`、载荷 `white-space: pre-wrap` + `overflow-wrap: anywhere`)。**真实浏览器实测**(Vite SSR 渲染真实组件 DOM + 无头 Chrome 取几何):120 / 160 / 200 / 240 / 320 / 480 / 640px 七个宽度下,卡片、段与文档横向溢出均为 **0**;段高恒 ≤ 150px;段间分隔线铺满卡片内容宽;长内容确实在段内滚动而非撑开卡片。旧机制相关源码已彻底移除,不留「变量还在但不再生效」的假防线。
|
|
72
|
+
- 新增明细结构类 `__io-card` / `__io-section` / `__io-label` / `__io-text`(+ 失败态 `__io-text--error`)/ `__io-divider`;新增行首结构类 `__leading` / `__leading-state` / `__sep` / `__summary` / `__status-text`。**未变**:`title` / `icon` / `meta` / `status` / `input` / `output` / `inputLabel` / `outputLabel` / `nested` / `v-model:expanded` 及事件、插槽。
|
|
73
|
+
- 同步更新:`AiToolCall.stories.ts` 重写为「状态 × 摘要 × 明细有无」矩阵并新增「明细两段」story(长短不一 / 两段都长 / 无空格长串 / 只有 IN 段 / 失败输出);`AiExecutionFeed.stories.ts` 消费处改用 `summary`;`ai-tool-call.spec.ts` 18 → 32 → **35 条**(H3 结构与无障碍用例、H4 明细结构性用例 12 条,状态与明细用例改写为新机制);`ai-execution-feed.spec.ts` 调整 2 处原断言(原要求成功态渲染状态点与可见状态名)并新增「成功无标记 / 非成功有标记」对照断言;族契约 `ai-message-flow.spec.ts` 随两轮各更新三处并**保持约束强度**(过程行 28px → 24px;高度 4px 阶梯校验允许**字面 0**(「0 即 0×4」,分隔线改用 `border-top` 表达、盒高归零),并对视觉隐藏块加**精确豁免**并写明理由;状态载体断言改为新机制;`repeat()` 栅格夹取不变量**本体仍全量生效**,仅把锚点从「AiToolCall 含 auto-fit 栅格」改为「AiToolCall 用 `max-content 1fr` 且不含 auto-fit」,避免锚定一个已消失的写法)。
|
|
74
|
+
|
|
75
|
+
- **新增 AI 会话组件族(`TtAi*`,首期 8 个)**,把会话详情页执行信息流的视觉与交互一次性收进组件库,页面只做组合、不写覆盖样式。此前库内没有 AI 对话专用组件(`ActivityFeed` 只是 `Timeline` 的薄包装、`Message` 是 toast),执行过程的「每类节点一张彩色卡 + 彩色状态圆点」由此无处收敛,只能落在页面样式里。族内分工:`TtAiExecutionFeed` 是过程区的**唯一入口**(32px 整行按钮折叠行 + 24px 单列过程行容器 + 左侧 1px 中性引导线,两层折叠、收起不影响承载位);`TtAiToolCall` 是过程行(16px 图标盒 + 主文案 + 摘要 + 悬停箭头,行内明细为「一个卡片 + IN/OUT 两段」,`nested` 用左缩进 + 中性左边框表达递归子调用层级);`TtAiStatusCode` 承担状态多通道;`TtAiFoldText` 统一截断与折叠语;`TtAiResultPanel` 是结果区唯一的数据面容器(r8、无阴影、内部 12px 栅格);`TtAiArtifactRow` 把产物从大卡片改为行、超过 4 项折叠为「全部 N 个」;`TtAiTodoProgress` 是输入区 dock 的待办/目标变体;`TtAiSubagentLineage` 是会话头部血缘(只身份 + 状态)。
|
|
76
|
+
- **状态色**按「成功态一律中性色、彩色只用于进行中/失败/中断等待」落定:`--tt-ai-status-code-color` 在 `success` 上是 `--tt-text-secondary`,`pending` / `unknown` 是 `--tt-text-placeholder`,只有 `running` / `failed` / `warning` 分别取 `--tt-color-primary` / `--tt-color-error` / `--tt-text-warning`,且**不使用** `--tt-color-success` 与任何底色 —— 原来的绿色完成点正是被反馈的对象。`status` 是必填项,`TtAiToolCall` 不传 `status` 时**不渲染任何状态标记**:缺失终态不会被默认判成成功(不变量「不编造执行事实」)。
|
|
77
|
+
- **`TtAiFoldText` 的截断契约**:截断语统一为「… 其余 N 行」,且**展开后能拿到完整内容**(折叠只按换行截取前 N 行,展开后原样给出传入的整段文本,不做二次截断;`text` 与展示上限无关)。与折叠正交的 `truncated` 用于调用方声明「上游数据本身已被截断」——那种情况下库里没有完整内容,组件始终给出标注,不静默丢内容。
|
|
78
|
+
- **几何落在 4px 阶梯上并全部走变量**:折叠行 `--tt-ai-execution-feed-row-height` 默认 `var(--tt-control-height)`(32px)、过程行 `--tt-ai-tool-call-row-height` 默认 `var(--tt-control-height-sm)`(24px)、产物行 `--tt-ai-artifact-row-height` 默认 `var(--tt-control-height)`(32px)、图标盒 16px(`TtIcon` 的 `size`)、行间距 4px(`--tt-space-1`)、明细区圆角 8px(`--tt-radius-lg`)、状态点圆角 `--tt-radius-round`。样式里没有裸色值、没有 `--dsw-*`、没有 12px 圆角与 0.5px 发丝边(不引入 DSH 视觉语言),字阶与间距全部读 `--tt-*`。
|
|
79
|
+
- **无障碍**:折叠行与过程行整行是原生 `<button>`(`aria-expanded` + `aria-controls` 指向受控节点,无可展开内容时渲染 `<div>` 而不是 disabled 按钮);焦点可见(`--tt-focus-ring`);`TtAiFoldText` / `TtAiArtifactRow` / `TtAiTodoProgress` 的展开控件都带 `aria-expanded` 与辅助技术名称;`reduced-motion` 下关掉 chevron 旋转、状态图标 spin 与进度条过渡。
|
|
80
|
+
- **承载位与过程行的诚实边界**:`TtAiTodoProgress` 在清单为空时**整块不渲染**(清单为空是「没有投影」,不是「一件都没做」,给出 `0/0` 会被读成后者);`TtAiToolCall` 在没有明细可展开时渲染 `<div>` 而不是按钮,指针手势与 hover 反馈只挂在 `--expandable` 修饰类下;`TtAiSubagentLineage` 同理只在 `selectable` 打开时才是按钮,默认不给点了没反应的假交互。
|
|
81
|
+
- **定向测试**:8 个组件用例(`ai-status-code` / `ai-fold-text` / `ai-execution-feed` / `ai-tool-call` / `ai-result-panel` / `ai-artifact-row` / `ai-todo-progress` / `ai-subagent-lineage`)+ 族契约 `ai-message-flow`。族契约直接读组件源码与样式,锁住「只吃 `--tt-*`、无裸色值、无 `--dsw-*`、无 `--tt-color-success`、几何落在折叠行 32px / 过程行 24px / 图标盒 16px、凡有过渡或动画的样式文件都带 `prefers-reduced-motion`」。
|
|
82
|
+
- 同步 `docs/component-manifest.json` 与 `docs/component-compatibility.md`:8 个 `TtAi*` 组件登记为 Vue-only 默认扩展。**注**:本条原先记的导出计数快照「默认再导出 83 → 91、运行时组件/子组件导出 109 → 117」与当前 manifest 实测值(`vueDefaultReexports: 107`、`vueRuntimeComponentExportCount: 133`)不一致,计数口径待确认后补正,不留下对不上的数字。
|
|
83
|
+
|
|
84
|
+
- **新增 TtIcon 图标族 `ttIcons/`(取自 DeepSeek Harness,MIT)**:按需求人裁决「图标不自行设计,直接用 DSH 的图标」,用一次性脚本 `scripts/extract-dsh-icons.mjs` 从 DSH 的 `packages/client/ui-primitives/src/icons/index.tsx`(单文件 78 个内联 SVG)静态抽取 **16 个**过程区所需图标,生成到 `src/components/Icon/ttIcons/`,并由 `src/index.ts` 的 `export * from './components/Icon/ttIcons'` 统一导出。每个 SFC 的 props 为 `size`(默认 = 该图标自身绘制尺寸,由源签名解析,不按名字猜)与 `color`(默认 `currentColor`),文件头逐条写明来源、原始导出名、源路径与 MIT 许可(Copyright (c) 2026 DeepSeek)。脚本幂等(重复运行不产生 diff,`--check` 只校验)、失败即停(源里找不到图标、默认尺寸解析不出、子节点含动态 JSX、出现未映射的驼峰属性都显式报错,不静默生成错图标),生成物可逐行 `git diff` 审查。
|
|
85
|
+
- **`TtIcon` 无需适配即可承载新图标**(已验证,未改 `Icon.vue`):`TtIcon` 以 `font-size` 承载尺寸,Element Plus 的 `.el-icon svg{width:1em;height:1em}` 覆盖 SVG 自身的 `width`/`height` 呈现属性,因此 `<TtIcon :icon="TtIconSearchOutline16" :size="12" />` 按 12px 渲染,与库内既有 `@element-plus/icons-vue` 图标同一机制;单独使用时回落该图标固有尺寸。宿主前置条件(先加载 `element-plus/dist/index.css`)已写入 `ttIcons/README.md`。
|
|
86
|
+
- **未自造任何图标**:本轮请求的 16 个图标在 DSH 源中全部命中,无缺口;DSH 其余 62 个候选池与「先查池、查不到再报需求人设计」的规则登记在 `ttIcons/README.md`。
|
|
87
|
+
- **定向用例 `tests/components/tt-icons.spec.ts`(现 10 条)**:清单与生成物一一对应、每个图标的画布与默认尺寸与 DSH 源**独立解析**结果一致、`size`/`color` 可覆盖、文件头许可齐备、`TtIcon` 组合契约,以及**逐条核对每段路径数据原文存在于 DSH 源**(证明是移植而非自造)。该「移植性」断言做过定点变异验证:改动一条路径数据的单个字符即被捕获并报出具体图标名。
|
|
88
|
+
|
|
89
|
+
- **新增 `TtSelect` / `TtTreeSelect` 选中标签的限宽与单行截断**:此前只有 `TtTag` 有截断能力,选择器内部自己渲染的 `.el-tag` 没有覆盖 —— 标签高度固定 24px,超长文案(如项目资料名)换行会把标签撑变形,宿主只能写 `:deep(.el-tag){max-width}` 与 `:deep(.el-tag__content){overflow/text-overflow/white-space}` 两处绕过组件库(应用端项目资料选择器即为其一)。现新增 `--tt-select-tag-max-width` 出口(默认 `100%`,即 Element Plus 原值,不赋值时行为与改动前逐项一致),并让 `.el-tag__content` 单行省略。变量用**回退值**写法(`var(--x, 100%)`)而不是在根元素声明默认值,宿主在组件元素或祖先容器任一处赋值都生效;截断无条件生效(固定高度下换行本就是错显示)。同步删除应用端项目资料选择器的两处 `:deep()` 绕过与其重复声明的 `min-height`。
|
|
90
|
+
|
|
91
|
+
- **新增 `TtTag` 的 `neutral` 属性**,用于**不带状态语义**的类型 / 分类标识(白底 + 控件描边 + 中性文字色),默认关闭、行为与改动前一致。此前这类标签只能写 `effect="plain"`,但 Element Plus 默认给标签加 `.el-tag--primary`,组件库里 `.el-tag--primary.el-tag--plain` 会把描边与文字染成品牌色(实测描边 `--tt-color-primary-3`、文字 `--tt-color-primary`),宿主想拿到「灰框 + 深色字」只能自己写选择器覆盖库内颜色。`neutral` 把任意 `type` 拉回中性格;语义状态标签仍用 `type` + `effect`,两者正交。
|
|
92
|
+
- 新增 `--tt-tag-plain-color`(默认 `var(--tt-text-secondary)`,与改动前一致)驱动中性描边形态的文字色,`.el-tag--plain` 不再写死次级色;宿主按上下文需要更深字色时下发变量即可,不必覆盖库内规则。
|
|
93
|
+
- 新增回归测试 `tag.spec.ts`:覆盖 `neutral` 规则必须排在全部 typed plain 规则之后(同特异性后写者胜)、三项中性取值、默认关闭时不加类名,以及 `neutral` 不作为未知属性透出到 DOM。
|
|
94
|
+
|
|
95
|
+
- 新增 `TtCard` 可点击形态的悬浮底色变量 `--tt-card-interactive-hover-bg`(默认 `var(--tt-color-primary-1)`,取值与改动前逐项一致):`interactive` 卡片的悬浮底色原先写死为浅蓝填充,这对「多选一」的选择型卡片是对的,但「整卡即入口」的导航卡片(例如应用端自动化列表卡)需要只高亮描边、不要整卡填充。宿主把该变量设成卡片自身底色即可,不必写选择器覆盖 `.tt-card--interactive:hover`。与 `--tt-card-body-padding` 同一做法:默认值声明在组件元素自身,宿主必须在卡片元素上赋值。
|
|
96
|
+
- 新增 `TtCard` 的悬浮阴影变量 `--tt-card-hover-shadow`(默认 `0 4px 12px var(--tt-shadow-color)`,取值与改动前逐项一致):`shadow="hover"` 原先固定「高亮描边 + y4/blur12 阴影」,对卡片列表偏重;宿主把该变量设成 `none` 即可只保留按钮式的描边高亮。
|
|
97
|
+
- 统一 5 种浮层组件(`TtSelect` / `TtDropdown` / `TtCascader` / `TtMenu` / `TtTreeSelect`)的下拉面板阴影:原来写死的 `0 2px 20px var(--tt-color-grey-2)` 改为登记值 `var(--tt-shadow-md)`。原写法把「颜色」当「阴影色」用——浅色主题下 `--tt-color-grey-2` 是 `#e9ecf2`(近白),20px 模糊会摊成一圈发光;暗色主题下同一变量翻成 `#082337`(近黑),又变成一团黑雾。改用语义阴影 token 后,浅色为 `0 8px 24px rgb(8 17 38 / 12%)`、暗色为 `0 8px 24px rgb(0 0 0 / 36%)`,与 `TtDialog` / `TtDrawer` / `TtDatePicker` 等既有浮层一致;同时也修掉了 `TtDropdown` 与 `TtMenuPanel` 违反各自规范(`surfaceShadow -> --tt-shadow-md`)的问题。面板尺寸、圆角、内边距、选项几何与交互全部不变。
|
|
98
|
+
- 新增浮层阴影契约用例:锁定这 5 个组件的 popover surface 必须使用 `--tt-shadow-md`;全库任何 `box-shadow` **声明**中不得再出现 `0 2px 20px`(历史取值仅作为说明性注释保留);并逐条审查所有组件的 `box-shadow` 声明,禁止把 `--tt-color-grey-*` 当阴影色(`inset` 描边不在此列)。
|
|
99
|
+
|
|
100
|
+
- 修复 `TtForm` / `TtFormItem` 把 Element Plus 布尔属性默认值 `true` 覆盖为 `false` 的问题:两者用 `defineProps<Partial<FormProps | FormItemProps>>()` 声明属性后把整个 `props` 合并回 `$attrs` 再透传,而 Vue 对**声明过但缺席的 Boolean 属性**会解析成 `false`,于是 `showMessage`、`validateOnRuleChange`、`scrollIntoViewOptions` 被显式写成 `false` 传给 Element Plus,压过对方 `default: true` 的默认值。实际后果是**表单校验失败只有红框、没有任何错误文案**(`showMessage` 在 Element Plus 里同时控制字段与表单两级,任一为 `false` 即不渲染 `.el-form-item__error`),宿主只能每个页面显式再传一次 `show-message` 绕过。现按 Element Plus 的默认值补齐三项,未传时与对方一致,显式传 `false` 时仍可关闭。其余 Boolean 属性(`inline`、`hideRequiredAsterisk`、`scrollToError`、`disabled`、`inlineMessage` 等)的 Element Plus 默认值本就是 `false`/`undefined`,未做改动。
|
|
101
|
+
- 新增回归测试 `form.spec.ts`:覆盖「错误态同时渲染错误文案」「显式 `showMessage=false` 只保留错误态」「未传 `showMessage` 时组件自身与内部 `ElFormItem` / `ElForm` 的取值都是 `true`」,后两条同时锁住「不得再把对方默认值透传成 `false`」这条契约。
|
|
102
|
+
- 修复 `TtButton` **链接形态(`link`)在页面上渲染成浅灰描边白底块**:规范登记 `link`「不承载普通按钮的高度、背景、边框或阴影」,且明确「`text` 与 `link` 形态在组件库内解析为 `min-width: auto`、透明边框与透明底色」,但组件库此前只给 `text` 形态做了透明解析,`link` 只有一条 `text-decoration: underline`。于是基础规则 `.tt-button.el-button` 里**无条件**的 `border-color` / `background-color`(0,3,0)生效,而 Element Plus 自身的 `.el-button.is-link{border-color:transparent;background:transparent}`(0,2,0)权重更低且更早加载,透明解析被静默压掉。现给链接形态补齐透明边框与透明底色,并把 `hover` / `focus` / `active` 三个状态一并清零(基础规则对应分支为 0,4,0,不清零则悬浮 / 聚焦 / 按下时边框与底色会重新出现);写法与基础规则同为 0,3,0 / 0,4,0 且置于文件后部,靠顺序取胜,不引入提权。文字色不在本层写死,仍由基础规则读 `--el-button-*-text-color`,`.tt-button-danger.tt-button-link` 因此继续得到错误色;`:focus-visible` 的焦点环未被覆盖,键盘焦点环不变。**本缺陷影响所有 `<TtButton link>` 使用点,应用端资料库「会话来源」链接即为其一。**
|
|
103
|
+
- 补齐 `TtButton` **`link` 与 `text` 形态的高度清零**:规范「Link Button 正常态」登记这两个形态「不承载普通按钮的高度」,但基础规则 `.tt-button.el-button` 给所有按钮 `height: var(--tt-control-height)`(32px)且二者都没覆盖。后果是行内文字操作会把所在行撑高:应用端资料库的文档详情元信息、目录树「来源」列的行高被撑到 **32px**,修复后在真实浏览器(构建产物 + headless Chrome)实测 `height` 为 **23.33px**(内容自适应)。现给 `link` 与 `text` 各补 `height: auto; min-height: 0`(`min-height` 用于防止 flex 容器把行内文字操作拉伸回控件高)。修复方式为同权重后写,不引入提权、不涉及公开 API。
|
|
104
|
+
- `button.spec.ts` 15 → 17 → **18 条**:新增链接形态透明解析的契约断言(含三个状态分支必须存在、且本层不得写死品牌色)与链接形态 DOM 类名断言;并断言 `link` 的**顶层**声明区与 `text` 块内都必须含 `height: auto` 与 `min-height: 0`。两轮新增断言都做过**定点变异**(分别删掉 `link` / `text` 的清零、删掉顶层透明声明)均被捕获,恢复后全绿。透明解析断言还有**两处自身缺陷在验证中被逐次暴露并修正**:①按非贪婪匹配取到的是库内**另一处**同名选择器(盒几何 `padding` 清零),误报「不含透明声明」,改为按内容取到承载透明解析的那一块;②修正后做反向验证**未被捕获** —— 取到的整块包含嵌套的 `hover` / `focus` / `active` 分支,其内的透明声明把顶层缺失掩盖了;改为只截取块内第一个 `&:` 之前的**顶层**声明区再断言,反向验证通过(删掉顶层清零即失败)。这条缺陷本身说明:断言「存在某字符串」不等于断言「该声明在正确层级」。
|
|
105
|
+
- 修复 `TtInput` 字数计数器(`show-word-limit`)在应用端呈蓝色:Element Plus 用 `--el-color-info` 给计数器着色,而宿主主题桥会把该变量映射成品牌色,计数器因此跟着变蓝。计数器属于辅助文字,现由组件库显式声明为占位文字色 `--tt-text-placeholder`,超出上限时切 `--tt-color-error`(不依赖宿主变量,也不会把 Element Plus 的超限红色压掉)。
|
|
106
|
+
- 修复 `TtDatePicker` 日期区间(`daterange` / `datetimerange`)的文字与占位符居中:Element Plus 的 `.el-date-editor .el-range-input { text-align: center }` 会把「开始时间 / 结束时间」顶到控件中间,在筛选工具栏里与相邻的搜索框、下拉选择不是一套观感。现改回左对齐,与 `.el-input__inner` 同一口径。单日期选择、时间选择、面板与浮层几何不变。
|
|
107
|
+
- **`TtAiToolCall` 明细双栏栅格在窄容器下的横向溢出(当时记录;该机制已被上文「一个卡片 + 两段」整体取代)**:栅格原为 `repeat(auto-fit, minmax(var(--tt-ai-tool-call-pane-min-width), 1fr))`,`240px` 是**硬下限**,栅格宽度不足 240px 时轨道压不到下限以下、整行被撑出容器;当时改为 `minmax(min(240px, 100%), 1fr)`(列宽行为在宽容器下与改动前逐项相同)并实测「栅格宽度 120 / 180 / 200 / 239px 时改动前分别溢出 136 / 76 / 56 / 17px,改动后溢出均为 0 且折叠为单列铺满」;注意真实组件里栅格比外层窄 16px(`__detail` 的左内边距),因此**外层** 240px 时改动前仍会溢出 16px,等价点换算到外层是 256px。该 `auto-fit` 栅格随后在明细重构中被整体移除,防溢出改由「换行 + 收缩链」承担(见上文),相关源码、变量与定向用例一并随之改写。
|
|
108
|
+
|
|
109
|
+
- 规范与元数据:上述各条改动**均未修改设计系统规范数值** —— 图标来源属实现层事实(不新增规范数值);`TtButton` 的 link/text 合同与 `TtForm` 的默认值行为早已登记在 `docs/design-system` 侧(`button/spec.md:190`、`:228`),本次是组件库实现向规范收敛,不涉及规范改值。`docs/component-manifest.json` 与 `docs/component-compatibility.md` 按新增组件同步登记。
|
|
110
|
+
- **根治相邻按钮间距被翻倍的问题(`TtButton` 自身清除 Element Plus 的隐式外边距)。** Element Plus 为服务 inline-block 行内按钮,给相邻 `.el-button` 写死 `margin-left: 12px`;本库按钮一律在 flex 容器里按 `gap` 排布,两者叠加会把间距翻倍(实测 12px 变 24px、10px 变 22px、8px 变 20px)。此前 `TtDialog` / `TtPopconfirm` 各自在自己容器里清过一次,而 `PageHeader` / `QueryForm` / `Card` / `Comment` / `FilePreview` / `List` 等容器都漏了——**逐容器处理天然会漏,每新增一个容器就要再记得一次**(本次正是先按容器修了 3 处,随即被暴露出 `ProviderCard` 的 `.card-actions` 仍为 20px)。现把该归零收进 `Button/style.scss`:`.tt-button.el-button + .tt-button.el-button { margin-left: 0 }`,特异性 (0,4,0) 高于 Element Plus 的 (0,2,0),不受两份样式表加载顺序影响。**任何容器只声明 `gap` 即自动正确,不再需要页面级补丁**;同时移除了上一轮加在 `TtPageHeader` / `TtQueryForm` / `TtDrawer` 以及宿主三处容器上的冗余归零声明(`TtDrawer` footer 保留新增的显式 `gap`,它对 Element Plus 隐式 margin 的依赖仍然要消除)。**行为变化的边界**:若某处不声明 `gap` 而指望行内按钮自带间距(例如正文里夹着两个按钮),现在会贴在一起——应改用 `TtSpace` 或由容器声明 `gap`;已在 `docs/components/button.md` 与设计系统 `standards/button/spec.md` 写明这一反面约束。
|
|
111
|
+
|
|
112
|
+
- 同步 `docs/components/button.md`:新增「相邻按钮之间的间距由容器提供」章节(说明根治点在按钮组件自身、容器只需声明 `gap`、以及不用 `gap` 的行内场景应改用 `TtSpace` 的反面约束);并把 Props 一行改为准确描述——只透传父组件实际传过的属性,以及本库扩展的 `neutral` / `ghost` / `selected` / `muted` 不下发给 `ElButton`。
|
|
113
|
+
|
|
114
|
+
- **修复 `TtForm` / `TtFormItem` / `TtButton` / `TtPagination` 覆盖 Element Plus 默认值,导致表单校验失败文案永不渲染(缺陷 D8)。** 根因是这四个包装组件用 `defineProps<Partial<XProps>>()` 声明属性后以 `{ ...props, ...attrs }` 全量透传:Vue 会为声明的属性生成运行时 props,而**没有 `default` 的 Boolean 属性在父组件未传时会被折叠成 `false`**,这个 `false` 会作为显式值下发给 Element Plus,覆盖其自身的默认值。实测影响:`ElForm`/`ElFormItem` 的 `showMessage`(EP 默认 `true`)被压成 `false` → `.tt-form-item.is-error` 类照常出现但 `.el-form-item__error` 文案节点永不渲染;`validateOnRuleChange`(EP 默认 `true`)被压成 `false` → 规则变更不再触发校验;`required`(EP 默认 `undefined`)被下发 `false` → 凭空多出一条 `{ required: false }` 校验规则,改变 `validate()` 的判定范围;`ElPagination` 的 `teleported`(EP 默认 `true`)被压成 `false` → 每页条数下拉浮层留在表格容器内,被 `overflow: auto` 的容器裁切。现新增共享工具 `src/utils/forwardProps.ts` 的 `useForwardedProps()`,用当前实例的原始 vnode props 判断某个键**是否被父组件写过**(同时接受 camelCase 与 kebab-case),只透传写过的键,再叠加 `$attrs`。这样子组件的 `withDefaults` 才能生效,而未传属性仍由 Element Plus 自己的默认值决定。四个组件同步接入。
|
|
115
|
+
- 新增 `TtFormItem` 的 `hideRequiredAsterisk` 属性(本库扩展):**只关闭本项**的必填星号,`required` 与校验规则照常生效。Element Plus 的 `hideRequiredAsterisk` 只能挂在表单上,一旦打开整表星号都会消失;需要「整表保留星号、个别项不显示」时业务侧原先只能去掉 `required` 自行维护校验,那会绕开「必填标记只能由 `required` 产出」的约束。实现复用 Element Plus 自己的 `is-no-asterisk` 类(表单级走的是同一个类),星号样式因此与 Element Plus 完全一致,本库不写第二套星号规则。默认 `undefined`,不传时行为与未扩展前完全相同;该属性由本库消费,不下发给 Element Plus(否则会作为无效属性落到根元素上)。
|
|
116
|
+
- **修复 `TtTree` 的当前节点态与悬浮态视觉不可区分(缺陷 D10)。** 改前 `.el-tree-node.is-current > .el-tree-node__content` 与 `.el-tree-node__content:hover` 都取 `--tt-bg-light`(浅色 `#f7f8fa`),导致「鼠标划过」与「当前选中范围」在树里无法区分——而「我现在选中了哪个范围」正是树形导航的核心信息;且当前态从品牌色退化为中性灰。现按设计系统对选中态的规定(品牌浅底 + 品牌色文字)改为 `--tt-bg-active`(浅色 `#f0f9ff` / 深色 `#123b5a`)+ `--tt-color-primary`,并把两态各自抽成可覆盖变量 `--tt-tree-node-current-bg` / `--tt-tree-node-current-color` / `--tt-tree-node-hover-bg` / `--tt-tree-node-hover-color`(`--el-tree-node-hover-bg-color` 也接上本库变量,避免两处各自写死),宿主需要换色时不必提升特异性覆盖库内规则。
|
|
117
|
+
- 同步 `docs/components/form.md`:写明「**未传的属性不下发**」是行为合同而非实现细节,并补充 `hideRequiredAsterisk` 的表单级 / 单项级用法与边界。
|
|
118
|
+
- 新增回归测试:`form.spec.ts` 9 例(含 `showMessage` 保留 EP 默认、`required` 不被下发 `false`、错误文案真实渲染、显式 `showMessage: false` 仍生效、逐项星号开关三例)、`pagination.spec.ts` 3 例(`teleported` 保留 EP 默认 `true`、显式 `false` 仍生效、未传项不强行下发)、`tree.spec.ts` 3 例(两态变量化、当前态与悬浮态不同源、当前节点仍由 Element Plus 打类)、`button.spec.ts` 2 例(自有变体不下发到 Element Plus / 原生 button、`autoInsertSpace` 未传不下发)。全量 45 文件 / 228 例通过。
|
|
119
|
+
|
|
5
120
|
## 0.1.4
|
|
6
121
|
|
|
7
122
|
> 本版是 `0.1.1` 之后第一个发布到 registry 的版本。下方 `0.1.3` / `0.1.2` 两节的编号已归档,但从未发布,其内容一并包含在本版中:宿主从 `0.1.1` 升级到本版时,请连同那两节一起阅读。
|
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
基于 Vue 3 与 Element Plus 的 TT Design 风格组件库。
|
|
4
4
|
|
|
5
|
-
> 当前版本为 `0.1.
|
|
5
|
+
> 当前版本为 `0.1.6`(下一次发布的版本号,发布即 `npm publish`,不再改版本)。registry 上的最新已发布版本可用 `npm view tt-design-web-vue dist-tags` 查询。本项目从原 workspace 的 `tt-design-vue` 迁出,作为独立项目构建并提供真实的 JavaScript、类型声明和 CSS 产物。
|
|
6
6
|
|
|
7
7
|
## 安装
|
|
8
8
|
|