@agile-team/wl-skills-ui 1.9.10 → 1.9.11

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 CHANGED
@@ -4,6 +4,17 @@ 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.9.11] - 2026-08-06
8
+
9
+ ### Fixed
10
+
11
+ - 精准识别 common-core 多标签输入的复合 wrapper,不再把 `.com-input-multi-tag-wrap.el-input.el-input__wrapper` 当成普通单行输入框强制固定高度;空值保持统一紧凑高度,标签换行时允许容器自然增长,避免外层边框消失或内容裁切。
12
+ - 复合输入严格保持“外层唯一描边、内层编辑器无描边”契约;默认、hover、focus、error、disabled 状态继续使用统一边框色、客户品牌色、危险色、禁用色与 6px 圆角,不产生双描边。
13
+
14
+ ### Changed
15
+
16
+ - 新增复合多标签输入真实 DOM 分类测试,并同时锁定普通输入仍保持 26px 固定高度,防止专项修复放宽其他正常表单规则。
17
+
7
18
  ## [1.9.10] - 2026-08-01
8
19
 
9
20
  ### Added
package/README.md CHANGED
@@ -208,7 +208,7 @@ yarn add @agile-team/wl-skills-ui
208
208
  |---|---|---|
209
209
  | `element-plus` | **`2.2.6-prod.3`** | 集团 jh- 定制版;EP 2.3.0 起引入 `.el-input__wrapper`,与 jh-ui 3.x 不兼容 |
210
210
  | `@jhlc/jh-ui` | **`3.1.0`** | SCSS 皮肤包,`.com-text` label 包裹 + `.has-colon` 冒号注入(wl-skills-ui 已统一屏蔽表单冒号) |
211
- | `@agile-team/wl-skills-ui` | `^1.9.10` | 已对齐上述组合的 DOM 假设、客户主题锁、圆角契约、表格长文本兜底与定制页样式边界 |
211
+ | `@agile-team/wl-skills-ui` | `^1.9.11` | 已对齐上述组合的 DOM 假设、客户主题锁、圆角契约、复合输入、表格长文本兜底与定制页样式边界 |
212
212
 
213
213
  三种识别方式,任选其一:
214
214
 
@@ -222,7 +222,13 @@ yarn add @agile-team/wl-skills-ui
222
222
 
223
223
  ## 版本亮点
224
224
 
225
- 当前 v1.9.10:
225
+ 当前 v1.9.11:
226
+
227
+ - **复合输入不再误伤**:common-core 多标签/人员选择器不再被普通 input 的固定高度压缩;无标签时保持 26px 紧凑基线,标签换行时容器自然增高。
228
+ - **视觉契约保持统一**:复合输入外层继续使用统一 6px 圆角及默认、hover、品牌 focus、error、disabled 边框,内部编辑 input 不重复描边;普通 input/select/date/input-number 原有规则不变。
229
+ - **结构级防回归**:新增与 common-core 实际 DOM 一致的分类测试,明确区分复合外壳、内部编辑器和普通输入框,防止后续通用选择器再次误命中。
230
+
231
+ 上一版 v1.9.10:
226
232
 
227
233
  - **长文本真正包级闭环**:普通 Element Table、BaseTable 与 AG Grid 即使没有经过 `defineColumns()`,真实超宽时也会稳定显示省略号,并由 `runtime/auto` 在悬停或键盘聚焦时兜底完整文本提示;动态行和虚拟滚动无需额外处理。
228
234
  - **严格防污染边界**:已有组件 Tooltip 优先,编辑列、操作列、Tag、复选框、自定义 renderer、主动换行列、登录页及显式皮肤豁免区域均不接管;没有溢出时不创建 Tooltip。
@@ -316,7 +322,7 @@ yarn add @agile-team/wl-skills-ui
316
322
  - 优化 BaseToolbar 下拉/分裂按钮组,让“主动作 + 下拉动作”按一个动作组展示,避免视觉割裂
317
323
  - 优化 AG Grid 操作列 `jh-op-*` 图标/胶囊/文字按钮,取消按压缩放抖动,并提升选中行下的可读性
318
324
  - 补齐输入控件 focus 品牌色边框、统一圆角、长 label 单行省略和自定义弹窗图标居中尺寸规则
319
- - 全量移除旧 `wk-` 前缀命名(包名 / CLI / 快照目录 / 豁免配置 / MCP 工具名),不再兼容(详见 CHANGELOG v1.6.10)
325
+ - 移除旧 `wk-` 工程命名(包名 / CLI / 快照目录 / 豁免配置 / MCP 工具名);`--wk-*` 设计 token 作为既有公共契约继续保留,避免破坏消费项目的变量覆盖,它不代表加载了旧包
320
326
  - 新增 `skills/_meta/_compat/vendors.json` 作为 L2 Project Vendors 的单一事实源(id / priority / patterns / baseline / styles),`scanner/coverage.mjs` 启动时一次性编译 RegExp,零运行时开销
321
327
  - 新增 `wl-ui add-vendor <tag> [--family <id>] [--dry-run]` 脚手架命令:一键生成专项 SCSS、`@forward` 注册、`vendors.json` baseline 追加、scanner 规则草稿
322
328
  - MCP 工具前缀统一为 `wl_ui_*`(`wl_ui_check` / `wl_ui_scan` / `wl_ui_fix_dry_run` / `wl_ui_skill_prompt` / `wl_ui_route_intent` / `wl_ui_recommend_flow`)
@@ -11,7 +11,7 @@
11
11
  | `element-plus` | **`2.2.6-prod.3`** | 集团 jh- 定制版,搭配 `@jhlc/jh-ui` 使用,DOM 仍为 `.el-input > .el-input__inner` 直挂结构(**EP 2.3.0 起才引入 `.el-input__wrapper`**) |
12
12
  | `@jhlc/jh-ui` | **`3.1.0`** | SCSS 皮肤包,`.com-text` label 包裹、`.has-colon ::after` 冒号注入、`.el-form-item--default { margin-bottom: 24px }` 等强约束 |
13
13
  | `@jhlc/common-core` | `3.1.0` 或 `3.1.0-prod.x` | 基础 util/types,`@jhlc/jh-ui` 间接依赖 |
14
- | `@agile-team/wl-skills-ui` | `^1.9.10` | 已对齐 jh-ui 3.1.0 + EP 2.2.6-prod.3 的 DOM 假设、客户主题锁、6px 基础圆角、紧凑表单、表格行状态、分裂按钮、包级长文本提示、定制页样式边界与 Vite 4 开发转换 |
14
+ | `@agile-team/wl-skills-ui` | `^1.9.11` | 已对齐 jh-ui 3.1.0 + EP 2.2.6-prod.3 的 DOM 假设、客户主题锁、6px 基础圆角、紧凑表单、复合多标签输入、表格行状态、分裂按钮、包级长文本提示、定制页样式边界与 Vite 4 开发转换 |
15
15
 
16
16
  ## 项目集群当前实测
17
17
 
@@ -35,7 +35,7 @@
35
35
 
36
36
  ## 适配建议
37
37
 
38
- - 集团内项目:**统一锚定 `element-plus@2.2.6-prod.3` + `@jhlc/jh-ui@3.1.0`**,与 wl-skills-ui v1.9.10 三方对齐。
38
+ - 集团内项目:**统一锚定 `element-plus@2.2.6-prod.3` + `@jhlc/jh-ui@3.1.0`**,与 wl-skills-ui v1.9.11 三方对齐。
39
39
  - Skin 项目除全局样式外,在 `main.ts` 引入一次 `@agile-team/wl-skills-ui/runtime/auto`;Native 项目的 `installCommonPreset()` 已包含相同包级保护,不要重复安装。
40
40
  - 升级 `element-plus` 到 2.3+ 前,必须同步升级 `@jhlc/jh-ui` 到对应支持版本,否则 `.com-text` / `.el-input__inner` DOM 与 EP `__wrapper` 体系不兼容。
41
41
  - 新项目接入:见 README 「快速接入」章节,默认会按本表声明 peerDependency 范围。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agile-team/wl-skills-ui",
3
- "version": "1.9.10",
3
+ "version": "1.9.11",
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",
@@ -33,6 +33,7 @@ applyTo: "**/*.vue"
33
33
  - label `.com-text` / `.text-line-2` 单行省略 + has-colon 冒号屏蔽
34
34
  - EP 2.2.x `.el-input__inner` 26px 高度、圆角 / focus / error 三态
35
35
  - jh-picker / reference-picker 的 `.com-picker` / `.com-reference-picker` 输入高度兜底
36
+ - common-core 多标签/人员选择器的 `.com-input-multi-tag-wrap` 使用 26px 最小高度并允许标签换行自然增高;只由外层绘制统一状态边框,内部编辑 input 不重复描边
36
37
  - jh-select / jh-date-picker 的 `.el-select.is-focus` / `.el-input.is-focus` 兼容
37
38
  - 必填星号在 inline-flex label 下显式声明颜色
38
39
 
@@ -65,6 +65,11 @@ date-picker 默认宽度固定,在 grid 布局中需撑满列宽:
65
65
 
66
66
  textarea 不强制 26px 高度,只继承统一圆角、字体和状态样式。
67
67
 
68
+ 多标签、人员/部门多选等复合输入同样不能强制固定为 26px。它们使用
69
+ `--wk-form-control-height` 作为最小高度,无内容时与普通单行控件对齐,标签换行后允许外壳自然增高。
70
+ 复合控件只能由最外层 wrapper 绘制默认、hover、focus、error、disabled 边框;内部编辑 input
71
+ 必须保持无描边,避免边框消失、内容裁切或出现双描边。
72
+
68
73
  ---
69
74
 
70
75
  ## 规则:紧凑业务表单字号统一为 12px
@@ -50,7 +50,9 @@ html body {
50
50
  font-size: var(--wk-form-font-size, 12px) !important;
51
51
  }
52
52
 
53
- &.el-input__wrapper,
53
+ // 复合多标签输入把外壳复用了 .el-input__wrapper,但它需要随标签换行自然增高;
54
+ // 这里只固定真正的单行 wrapper,复合外壳交给 L2 vendor 适配。
55
+ &.el-input__wrapper:not(.com-input-multi-tag-wrap),
54
56
  &.el-select__wrapper,
55
57
  &.el-select .el-select__wrapper,
56
58
  &.el-date-editor.el-input__wrapper,
@@ -480,8 +480,10 @@
480
480
  transition: box-shadow 0.15s ease, border-color 0.15s ease;
481
481
  }
482
482
 
483
- &.el-input__wrapper.is-focus,
484
- &.el-input__wrapper:focus-within,
483
+ // 复合多标签输入只允许最外层 wrapper 绘制焦点边框;
484
+ // 内层编辑 input 保持无边框,避免出现双描边。
485
+ &.el-input__wrapper:not(.com-input-multi-tag-wrap .el-input__wrapper).is-focus,
486
+ &.el-input__wrapper:not(.com-input-multi-tag-wrap .el-input__wrapper):focus-within,
485
487
  &.el-select__wrapper.is-focus,
486
488
  &.el-select__wrapper.is-focused,
487
489
  &.el-select__wrapper:focus-within,
@@ -590,7 +592,7 @@
590
592
  color: var(--el-color-danger, #f56c6c) !important;
591
593
  }
592
594
 
593
- .el-input__wrapper,
595
+ .el-input__wrapper:not(.com-input-multi-tag-wrap .el-input__wrapper),
594
596
  .el-select__wrapper,
595
597
  .el-date-editor.el-input__wrapper,
596
598
  .el-textarea__inner {
@@ -132,26 +132,28 @@
132
132
  border-radius: var(--el-border-radius-base);
133
133
  }
134
134
 
135
- // 6) jh-picker / reference-picker — 不走 .com-input wrapper,也要继承单行控件高度
136
- &.com-picker .el-input,
137
- &.com-reference-picker .el-input,
138
- &.com-reference-picker-input .el-input,
139
- &.com-user-picker .el-input,
140
- &.com-dept-picker .el-input,
141
- &.com-userPicker .el-input,
142
- &.com-deptPicker .el-input,
135
+ // 6) jh-picker / reference-picker — 不走 .com-input wrapper,也要继承单行控件高度。
136
+ // 多标签组件会把外壳同时声明成 .el-input / .el-input__wrapper;外壳不是单行输入,
137
+ // 必须允许内容换行增高,只固定它内部真正负责编辑的 input。
138
+ &.com-picker .el-input:not(.com-input-multi-tag-wrap),
139
+ &.com-reference-picker .el-input:not(.com-input-multi-tag-wrap),
140
+ &.com-reference-picker-input .el-input:not(.com-input-multi-tag-wrap),
141
+ &.com-user-picker .el-input:not(.com-input-multi-tag-wrap),
142
+ &.com-dept-picker .el-input:not(.com-input-multi-tag-wrap),
143
+ &.com-userPicker .el-input:not(.com-input-multi-tag-wrap),
144
+ &.com-deptPicker .el-input:not(.com-input-multi-tag-wrap),
143
145
  &.jh-picker .el-input,
144
146
  &.jh-picker-trigger.el-input {
145
147
  height: var(--wk-form-control-height, 26px) !important;
146
148
  }
147
149
 
148
- &.com-picker .el-input__wrapper,
149
- &.com-reference-picker .el-input__wrapper,
150
- &.com-reference-picker-input .el-input__wrapper,
151
- &.com-user-picker .el-input__wrapper,
152
- &.com-dept-picker .el-input__wrapper,
153
- &.com-userPicker .el-input__wrapper,
154
- &.com-deptPicker .el-input__wrapper,
150
+ &.com-picker .el-input__wrapper:not(.com-input-multi-tag-wrap),
151
+ &.com-reference-picker .el-input__wrapper:not(.com-input-multi-tag-wrap),
152
+ &.com-reference-picker-input .el-input__wrapper:not(.com-input-multi-tag-wrap),
153
+ &.com-user-picker .el-input__wrapper:not(.com-input-multi-tag-wrap),
154
+ &.com-dept-picker .el-input__wrapper:not(.com-input-multi-tag-wrap),
155
+ &.com-userPicker .el-input__wrapper:not(.com-input-multi-tag-wrap),
156
+ &.com-deptPicker .el-input__wrapper:not(.com-input-multi-tag-wrap),
155
157
  &.jh-picker .el-input__wrapper,
156
158
  &.jh-picker-trigger.el-input .el-input__wrapper {
157
159
  height: var(--wk-form-control-height, 26px) !important;
@@ -159,6 +161,31 @@
159
161
  border-radius: var(--el-border-radius-base) !important;
160
162
  }
161
163
 
164
+ // common-core 多标签输入:外层负责唯一边框和统一圆角,内容负责自然换行。
165
+ // 不设置固定 height,避免标签/内部输入覆盖外层 inset 边框或被裁切。
166
+ &.com-input-multi-tag-wrap.el-input__wrapper {
167
+ height: auto !important;
168
+ min-height: var(--wk-form-control-height, 26px) !important;
169
+ border-radius: var(--wk-form-control-radius, var(--el-border-radius-base, 6px)) !important;
170
+ box-sizing: border-box !important;
171
+ background: var(--el-input-bg-color, var(--el-fill-color-blank, #fff)) !important;
172
+ box-shadow:
173
+ 0 0 0 1px var(--el-input-border-color, var(--el-border-color, #dcdfe6)) inset !important;
174
+ transition: box-shadow 0.15s ease, border-color 0.15s ease !important;
175
+ }
176
+
177
+ // hover 保持低于后加载的 focus/error 契约,组合状态下由品牌焦点色或危险色胜出。
178
+ &.com-input-multi-tag-wrap.el-input__wrapper:not(.is-disabled):hover {
179
+ box-shadow:
180
+ 0 0 0 1px var(--el-input-hover-border-color, var(--el-border-color-hover, #c0c4cc)) inset !important;
181
+ }
182
+
183
+ &.com-input-multi-tag-wrap.el-input__wrapper.is-disabled {
184
+ background: var(--el-disabled-bg-color, #f5f7fa) !important;
185
+ box-shadow:
186
+ 0 0 0 1px var(--el-disabled-border-color, #e4e7ed) inset !important;
187
+ }
188
+
162
189
  &.com-picker .el-input > .el-input__inner,
163
190
  &.com-reference-picker .el-input > .el-input__inner,
164
191
  &.com-reference-picker-input .el-input > .el-input__inner,