@agile-team/wl-skills-ui 1.10.0 → 1.10.2
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 +31 -0
- package/README.md +19 -1
- package/docs/governance-long-term.md +1 -1
- package/es/{chunk-FB4NHDR3.js → chunk-KCVRDXIH.js} +9 -5
- package/es/common-preset.d.ts +1 -1
- package/es/common-preset.js +2 -2
- package/es/index.d.ts +2 -2
- package/es/index.js +2 -2
- package/es/presets/security.js +1 -1
- package/es/{renderers-DKcXOFnF.d.ts → renderers-ONyz3P5K.d.ts} +8 -1
- package/mcp/README.md +9 -0
- package/package.json +4 -3
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,37 @@ All notable changes to **@agile-team/wl-skills-ui** will be documented in this f
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
6
6
|
|
|
7
|
+
## [1.10.2] - 2026-08-15
|
|
8
|
+
|
|
9
|
+
### Fixed
|
|
10
|
+
|
|
11
|
+
- `AUTO_STATUS_RULES` 匹配纪律收紧(语义正确性,零性能开销):
|
|
12
|
+
- 单字词锚定——`^待` / `^(?:无|否|未)$`,业务文案「招待费」「无票运输」「未税」不再被误判为状态 Tag;
|
|
13
|
+
- 「未X」词表先行拦截(未通过=danger / 未完成·未启用等=info),防止 success 组的 完成/通过/启用/达标 子串反向误命中「未完成/未通过」;
|
|
14
|
+
- 刻意不使用后行断言(旧 Safari 解析期报错,库代码不可引入)。
|
|
15
|
+
- `docs/governance-long-term.md` 修正 `.wl-exempt.example.json` 陈旧根路径为实际发布路径 `examples/`。
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- `npm run test:coverage`:Node 内建 `--experimental-test-coverage` 覆盖率报告(零新增依赖,仅报告不设门禁)。
|
|
20
|
+
- `publish.yml` 发布工作流(GitHub Release 触发:tag-版本一致性校验 + verify + pack 预检 + npm publish);视觉回归因快照基线为 win32 平台专属暂不入 Linux 发布路径,跨平台基线补齐后再追加。
|
|
21
|
+
|
|
22
|
+
## [1.10.1] - 2026-08-15
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- `ensureDefaultAlignment` 分组列语义修正:声明式分组(带 `children`)只递归子列,不再给分组自身补 `align/headerAlign`(分组行无叶子单元格,补齐语义多余)。
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
|
|
30
|
+
- 新增 `runtime/__tests__`(25 用例):`ensureDefaultAlignment` / `normalizeColumnAlignmentsWith`(默认居中、属性退出、cellStyle/headerClass 尊重、分组递归、不变突变)与 `autoTagTypeByLabel` / `renderAutoTagByLabel` / `renderAutoTag`(语义分级、危险词优先、镂空分类、中性纯文本兜底、resolver 注入);`npm test` 统一纳管 runtime 测试。
|
|
31
|
+
- `verify:package` 新增 `dist/tokens.css` ↔ `design/tokens/base.css` 逐字节同步守卫(防陈旧产物发布;该文件被 git 跟踪以保护 `npm pack` 完整性,忽视规则会导致打包缺文件)。
|
|
32
|
+
- 新增 GitHub Actions CI(`ci.yml`):Ubuntu Node 22/24 + Windows Node 24 矩阵,`pnpm install --frozen-lockfile` + `pnpm verify` + `npm pack --dry-run`,与 wl-skills-kit 的 CI 对齐。
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- 仓库卫生:删除根目录 3 个历史 tgz 产物与 `.tmp` / `test-results` 空目录;新增 `mcp/README.md` 声明 `server.js` 冻结(2026-05 遗留实验实现,勿基于其扩展)。
|
|
37
|
+
|
|
7
38
|
## [1.10.0] - 2026-08-15
|
|
8
39
|
|
|
9
40
|
> 来源:wl-ui-ep(危废/环保子系统)存量改造实战沉淀,全部经过"线上翻车 → 定位 → 修复 → 验证"闭环。
|
package/README.md
CHANGED
|
@@ -227,7 +227,25 @@ yarn add @agile-team/wl-skills-ui
|
|
|
227
227
|
|
|
228
228
|
## 版本亮点
|
|
229
229
|
|
|
230
|
-
当前 v1.
|
|
230
|
+
当前 v1.10.2:
|
|
231
|
+
|
|
232
|
+
- **判色纪律收紧**:单字状态词锚定(`待`/`无`/`否`/`未` 仅按词头或整词命中),「招待费」「无票运输」类业务文案不再误判;「未X」先行拦截,`未完成/未通过` 不再被子串反向误命中;不使用后行断言(旧 Safari 兼容)。
|
|
233
|
+
- **工程闭环补强(零运行时开销)**:`test:coverage` 内建覆盖率报告(零依赖);`publish.yml` Release 触发的自动发布(tag 校验 + verify 门禁)。
|
|
234
|
+
|
|
235
|
+
上一版 v1.10.1:
|
|
236
|
+
|
|
237
|
+
- **存量改造债务清偿**:新增 `runtime/__tests__`(25 个用例覆盖默认对齐与自动判色,`npm test` 统一纳管);`verify:package` 增加 `dist/tokens.css` 与 `design/tokens/base.css` 逐字节同步守卫;补 GitHub Actions CI(Ubuntu 22/24 + Windows 24 矩阵跑 `pnpm verify`);清理仓库残留 tgz 与空目录,`mcp/README.md` 声明 server.js 冻结状态。
|
|
238
|
+
- **分组列对齐语义修正**:`ensureDefaultAlignment` 对声明式分组列只递归子列、不补自身 `align`(分组行无叶子单元格)。
|
|
239
|
+
|
|
240
|
+
上一版 v1.10.0:
|
|
241
|
+
|
|
242
|
+
- **二级表头渲染根治**:AG Grid 分组表头行高改由 `--ag-header-height` / `--ag-group-header-height` 变量驱动,并带 `:has()` 两行兜底;`check:scss` 拦截 `.ag-header-row` 强制行高反模式。
|
|
243
|
+
- **滚动条双轨主题色**:默认隐藏、悬停显示品牌色(单档);标准 `scrollbar-color` + webkit 变量继承双轨,规避部分 Chromium 不重绘缺陷。
|
|
244
|
+
- **状态列自动判色**:`renderAutoTag` / `renderAutoTagByLabel` 按字典文案关键词判色(状态实心 / 分类镂空 / 中性纯文本兜底)。
|
|
245
|
+
- **默认居中可退出**:`normalizeColumnAlignmentsWith(cols, { defaultAlign: "center" })`。
|
|
246
|
+
- **操作图标三色定案**:查看蓝 / 编辑黄 / 删除红,默认统一浅主题蓝。
|
|
247
|
+
|
|
248
|
+
上一版 v1.9.16:
|
|
231
249
|
|
|
232
250
|
- **动作下拉不再深底深字**:仅对 `action-dropdown-menu` 内直属 primary 按钮补足覆盖权重,菜单动作保持扁平白底/悬停浅品牌色;普通主按钮和普通下拉菜单维持原样。
|
|
233
251
|
- **分页页码数字一致**:所有 `.el-pager > li` 统一 12px、常规字重与等宽数字特性,兼容有无 `.number` 类的 Element/jh-ui DOM,当前页使用品牌色背景而不再靠加粗放大。
|
|
@@ -172,7 +172,7 @@ npx wl-ui audit --target src --refresh-baseline
|
|
|
172
172
|
git add .wl-baseline.json
|
|
173
173
|
|
|
174
174
|
# 4. 豁免(如有)
|
|
175
|
-
cp node_modules/@agile-team/wl-skills-ui
|
|
175
|
+
cp node_modules/@agile-team/wl-skills-ui/examples/wl-exempt.example.json .wl-exempt.json
|
|
176
176
|
# 编辑为本项目实际豁免路径
|
|
177
177
|
|
|
178
178
|
# 5. CI 加 PR gate
|
|
@@ -31,15 +31,17 @@ function normalizeColumnAlignments(columns) {
|
|
|
31
31
|
}
|
|
32
32
|
function ensureDefaultAlignment(column, defaultAlign) {
|
|
33
33
|
const normalizedChildren = Array.isArray(column.children) ? column.children.map((child) => ensureDefaultAlignment(child, defaultAlign)) : column.children;
|
|
34
|
+
if (Array.isArray(column.children)) {
|
|
35
|
+
return normalizedChildren === column.children ? column : { ...column, children: normalizedChildren };
|
|
36
|
+
}
|
|
34
37
|
const hasExplicit = column.align !== void 0 || column.cellStyle !== void 0 || column.headerClass !== void 0;
|
|
35
38
|
if (hasExplicit) {
|
|
36
|
-
return
|
|
39
|
+
return column;
|
|
37
40
|
}
|
|
38
41
|
return {
|
|
39
42
|
...column,
|
|
40
43
|
align: defaultAlign,
|
|
41
|
-
headerAlign: defaultAlign
|
|
42
|
-
children: normalizedChildren
|
|
44
|
+
headerAlign: defaultAlign
|
|
43
45
|
};
|
|
44
46
|
}
|
|
45
47
|
function normalizeColumnAlignmentsWith(columns, options = {}) {
|
|
@@ -166,10 +168,12 @@ function renderDictClassifyTag(value, dictKey, typeColorMap) {
|
|
|
166
168
|
);
|
|
167
169
|
}
|
|
168
170
|
var AUTO_STATUS_RULES = [
|
|
171
|
+
[/未通过|未达标|未合格/, "danger"],
|
|
172
|
+
[/未启用|未激活|未完成|未处理|未审批|未核实|未提交|未确认|未支付|未领用/, "info"],
|
|
169
173
|
[/驳回|拒绝|停用|作废|报废|超标|异常|超期|逾期|不合格|失效|无效|惩罚|隐患/, "danger"],
|
|
170
174
|
[/已完成|已结束|完成|正常|有效|启用|合格|达标|通过|已处置|已确认|已审批|在用|使用中|奖励/, "success"],
|
|
171
|
-
[
|
|
172
|
-
[
|
|
175
|
+
[/^待|进行中|审批中|整改中|处置中|评估中|调查|预警|管控|注意/, "warning"],
|
|
176
|
+
[/新建|未开始|草稿|暂存|历史|撤回|^(?:无|否|未)$/, "info"]
|
|
173
177
|
];
|
|
174
178
|
var AUTO_CLASSIFY_RULES = [
|
|
175
179
|
[/危废|危险|惩罚|事故|气态/, "danger"],
|
package/es/common-preset.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as vue from 'vue';
|
|
2
2
|
import { VNode } from 'vue';
|
|
3
3
|
import { T as TagMapItem, J as JhTagNode } from './types-DtmxwMWV.js';
|
|
4
|
-
export { r as registerDictColorMap, a as registerDictColorMaps, b as renderDictClassifyTag, s as setDictResolver } from './renderers-
|
|
4
|
+
export { r as registerDictColorMap, a as registerDictColorMaps, b as renderDictClassifyTag, s as setDictResolver } from './renderers-ONyz3P5K.js';
|
|
5
5
|
|
|
6
6
|
declare const RISK_LEVEL_MAP: Record<string | number, TagMapItem>;
|
|
7
7
|
declare const renderRiskLevel: (v: string | number | null | undefined) => JhTagNode | null;
|
package/es/common-preset.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { installUiRuntimeGuards } from './chunk-QLPJLXY6.js';
|
|
2
|
-
import { renderTagNode, renderClassifyTag, registerColumnAutoMaps, renderRatingLevel, renderBadge } from './chunk-
|
|
3
|
-
export { registerDictColorMap, registerDictColorMaps, renderDictClassifyTag, setDictResolver } from './chunk-
|
|
2
|
+
import { renderTagNode, renderClassifyTag, registerColumnAutoMaps, renderRatingLevel, renderBadge } from './chunk-KCVRDXIH.js';
|
|
3
|
+
export { registerDictColorMap, registerDictColorMaps, renderDictClassifyTag, setDictResolver } from './chunk-KCVRDXIH.js';
|
|
4
4
|
import './chunk-Q3N5QNRZ.js';
|
|
5
5
|
|
|
6
6
|
// runtime/presets/common.ts
|
package/es/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { C as ColumnLike } from './types-DtmxwMWV.js';
|
|
2
2
|
export { E as ElTagType, J as JhTagNode, a as OpChip, O as OpItem, b as OpLink, c as OpPreset, T as TagMapItem } from './types-DtmxwMWV.js';
|
|
3
|
-
export { A as AUDIT_STATUS_MAP, c as AUTO_CLASSIFY_RULES, d as AUTO_STATUS_RULES, E as ENABLE_STATUS_MAP, R as RATING_LEVEL_COLORS, V as VERIFY_STATUS_MAP, e as autoTagTypeByLabel, r as registerDictColorMap, a as registerDictColorMaps, f as renderAuditStatus, g as renderAutoTag, h as renderAutoTagByLabel, i as renderBadge, j as renderClassifyTag, k as renderCountBadge, l as renderDangerText, b as renderDictClassifyTag, m as renderEnableStatus, n as renderOps, o as renderRatingLevel, p as renderTagNode, q as renderTagSlot, t as renderVerifyStatus, s as setDictResolver } from './renderers-
|
|
3
|
+
export { A as AUDIT_STATUS_MAP, c as AUTO_CLASSIFY_RULES, d as AUTO_STATUS_RULES, E as ENABLE_STATUS_MAP, R as RATING_LEVEL_COLORS, V as VERIFY_STATUS_MAP, e as autoTagTypeByLabel, r as registerDictColorMap, a as registerDictColorMaps, f as renderAuditStatus, g as renderAutoTag, h as renderAutoTagByLabel, i as renderBadge, j as renderClassifyTag, k as renderCountBadge, l as renderDangerText, b as renderDictClassifyTag, m as renderEnableStatus, n as renderOps, o as renderRatingLevel, p as renderTagNode, q as renderTagSlot, t as renderVerifyStatus, s as setDictResolver } from './renderers-ONyz3P5K.js';
|
|
4
4
|
import 'vue';
|
|
5
5
|
|
|
6
6
|
type ColumnAlignment = "left" | "center" | "right";
|
|
@@ -28,7 +28,7 @@ interface DefaultAlignmentOptions {
|
|
|
28
28
|
* 为无显式对齐声明的列补齐默认对齐(含表头)。
|
|
29
29
|
*
|
|
30
30
|
* - 列已有 align / cellStyle / headerClass 时一律不动(业务意图优先);
|
|
31
|
-
* - 递归处理分组列 children;
|
|
31
|
+
* - 递归处理分组列 children;声明式分组自身无叶子单元格,不补自身 align;
|
|
32
32
|
* - 与 normalizeColumnAlignment 兼容:补齐产物仍可被桥接函数消费。
|
|
33
33
|
*/
|
|
34
34
|
declare function ensureDefaultAlignment<T extends ColumnLike>(column: T, defaultAlign: ColumnAlignment): T;
|
package/es/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { SPLIT_GRID_RESIZE_EVENT, installOverflowTooltipGuard, installSplitGridResizeGuard, installUiRuntimeGuards, uninstallOverflowTooltipGuard, uninstallSplitGridResizeGuard } from './chunk-QLPJLXY6.js';
|
|
2
|
-
import { registerColumnAutoMaps } from './chunk-
|
|
3
|
-
export { AUDIT_STATUS_MAP, AUTO_CLASSIFY_RULES, AUTO_STATUS_RULES, ENABLE_STATUS_MAP, RATING_LEVEL_COLORS, VERIFY_STATUS_MAP, autoTagTypeByLabel, clearColumnAutoMap, defineColumns, ensureDefaultAlignment, getColumnAutoMap, normalizeColumnAlignment, normalizeColumnAlignments, normalizeColumnAlignmentsWith, registerColumnAutoMap, registerColumnAutoMaps, registerDictColorMap, registerDictColorMaps, renderAuditStatus, renderAutoTag, renderAutoTagByLabel, renderBadge, renderClassifyTag, renderCountBadge, renderDangerText, renderDictClassifyTag, renderEnableStatus, renderOps, renderRatingLevel, renderTagNode, renderTagSlot, renderVerifyStatus, setDictResolver } from './chunk-
|
|
2
|
+
import { registerColumnAutoMaps } from './chunk-KCVRDXIH.js';
|
|
3
|
+
export { AUDIT_STATUS_MAP, AUTO_CLASSIFY_RULES, AUTO_STATUS_RULES, ENABLE_STATUS_MAP, RATING_LEVEL_COLORS, VERIFY_STATUS_MAP, autoTagTypeByLabel, clearColumnAutoMap, defineColumns, ensureDefaultAlignment, getColumnAutoMap, normalizeColumnAlignment, normalizeColumnAlignments, normalizeColumnAlignmentsWith, registerColumnAutoMap, registerColumnAutoMaps, registerDictColorMap, registerDictColorMaps, renderAuditStatus, renderAutoTag, renderAutoTagByLabel, renderBadge, renderClassifyTag, renderCountBadge, renderDangerText, renderDictClassifyTag, renderEnableStatus, renderOps, renderRatingLevel, renderTagNode, renderTagSlot, renderVerifyStatus, setDictResolver } from './chunk-KCVRDXIH.js';
|
|
4
4
|
export { BRAND_THEME_TOKENS, installBrandThemeLock } from './chunk-Q3N5QNRZ.js';
|
|
5
5
|
|
|
6
6
|
// runtime/presets/registry.ts
|
package/es/presets/security.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { renderTagNode, registerDictColorMaps, registerColumnAutoMaps } from '../chunk-
|
|
1
|
+
import { renderTagNode, registerDictColorMaps, registerColumnAutoMaps } from '../chunk-KCVRDXIH.js';
|
|
2
2
|
import { installBrandThemeLock } from '../chunk-Q3N5QNRZ.js';
|
|
3
3
|
|
|
4
4
|
// runtime/presets/security.ts
|
|
@@ -34,7 +34,14 @@ declare function registerDictColorMap(dictKey: string, colorMap: Record<string,
|
|
|
34
34
|
declare function registerDictColorMaps(maps: Record<string, Record<string, string>>): void;
|
|
35
35
|
/** 渲染动态字典分类 Tag,适用于 logicType=dict 的类型/来源/方式/规则类型等列 */
|
|
36
36
|
declare function renderDictClassifyTag(value: string | number | null | undefined, dictKey: string, typeColorMap?: Record<string, string>): VNode | null;
|
|
37
|
-
/** 状态类关键词 → 实心 Tag
|
|
37
|
+
/** 状态类关键词 → 实心 Tag 颜色(顺序即优先级:负向未达 > 未X中间态 > 危险 > 成功 > 警示 > 中性)
|
|
38
|
+
*
|
|
39
|
+
* 匹配纪律(wl-ui-ep 实战复盘):
|
|
40
|
+
* - 单字词必须锚定:`^待`(待处理/待审批…但不匹配「招待费」)、`^(?:无|否|未)$`
|
|
41
|
+
* (仅整词命中,不匹配「无票运输」「未税」);
|
|
42
|
+
* - 「未X」词表先行拦截,防止 success 组的 完成/通过/启用/达标 子串
|
|
43
|
+
* 误命中「未完成/未通过/未启用/未达标」反向语义;
|
|
44
|
+
* - 不使用后行断言(lookbehind)——旧版 Safari 解析期即报错,库代码不可引入。 */
|
|
38
45
|
declare const AUTO_STATUS_RULES: Array<[RegExp, string]>;
|
|
39
46
|
/** 分类/级别/形态类关键词 → 镂空 Tag 颜色 */
|
|
40
47
|
declare const AUTO_CLASSIFY_RULES: Array<[RegExp, string]>;
|
package/mcp/README.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# mcp 目录状态说明
|
|
2
|
+
|
|
3
|
+
| 文件 | 状态 | 说明 |
|
|
4
|
+
|---|---|---|
|
|
5
|
+
| `registry.js` / `projectTools.js` | ✅ 维护中 | 2026-08 起随各版本持续更新 |
|
|
6
|
+
| `server.js` | ⚠️ 冻结 | 2026-05 之后的早期实验实现,**不再维护**;新集成请走 `registry.js` 注册的工具,不要基于 `server.js` 扩展 |
|
|
7
|
+
|
|
8
|
+
> 该目录通过 package.json `files` 随包发布。若未来统一 MCP 接入方式,`server.js` 应在下个
|
|
9
|
+
> major 版本移除(breaking change 需在 CHANGELOG 显著标注)。
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agile-team/wl-skills-ui",
|
|
3
|
-
"version": "1.10.
|
|
3
|
+
"version": "1.10.2",
|
|
4
4
|
"description": "企业级 UI 风格对齐框架 — Vue + Element Plus 项目通用化妆/原生双模式(tokens / element / vendors / layouts / runtime / scanner / fixer / skills)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./es/index.js",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"build": "tsup && npm run sync:tokens",
|
|
48
48
|
"prepare": "npm run build",
|
|
49
49
|
"sync:tokens": "node -e \"import('fs').then(fs=>fs.copyFileSync('design/tokens/base.css','dist/tokens.css'))\"",
|
|
50
|
-
"test": "node --test scanner/__tests__/*.test.mjs",
|
|
50
|
+
"test": "node --test scanner/__tests__/*.test.mjs runtime/__tests__/*.test.mjs",
|
|
51
51
|
"test:visual": "playwright test --config tests/visual/playwright.config.ts",
|
|
52
52
|
"test:visual:ui": "playwright test --config tests/visual/playwright.config.ts --ui",
|
|
53
53
|
"test:visual:update": "playwright test --config tests/visual/playwright.config.ts --update-snapshots",
|
|
@@ -64,7 +64,8 @@
|
|
|
64
64
|
"verify": "npm run lint && npm test && npm run check:scss && npm run docs:check && npm run build && npm run verify:package",
|
|
65
65
|
"pack:dry": "npm pack --dry-run --ignore-scripts",
|
|
66
66
|
"release:check": "npm run verify && npm run test:visual && npm pack --dry-run --ignore-scripts",
|
|
67
|
-
"prepublishOnly": "npm run release:check"
|
|
67
|
+
"prepublishOnly": "npm run release:check",
|
|
68
|
+
"test:coverage": "node --test --experimental-test-coverage scanner/__tests__/*.test.mjs runtime/__tests__/*.test.mjs"
|
|
68
69
|
},
|
|
69
70
|
"files": [
|
|
70
71
|
"dist",
|