@manohub/ui 0.10.2 → 0.10.3
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/README.md +1 -1
- package/dist/components/badge/index.d.ts +46 -1
- package/dist/components/badge/index.js +42 -9
- package/dist/components/card/index.d.ts +1 -1
- package/dist/components/drawer/index.d.ts +1 -1
- package/dist/components/form/index.d.ts +50 -1
- package/dist/components/form/index.js +20 -2
- package/dist/components/input/index.js +1 -0
- package/dist/components/nav/index.d.ts +27 -0
- package/dist/components/nav/index.js +12 -0
- package/dist/components/notice/index.d.ts +1 -1
- package/dist/components/notification/index.d.ts +2 -2
- package/dist/components/select/index.d.ts +9 -0
- package/dist/components/select/index.js +57 -12
- package/dist/components/select/select-list.d.ts +42 -8
- package/dist/components/select/select-list.js +36 -11
- package/dist/components/select/select-panel.d.ts +36 -8
- package/dist/components/select/select-panel.js +18 -4
- package/dist/components/select/select-shared.d.ts +51 -10
- package/dist/components/select/select-shared.js +12 -2
- package/dist/components/select/select-tree.d.ts +25 -3
- package/dist/components/select/select-tree.js +17 -6
- package/dist/components/select/select-trigger.d.ts +21 -0
- package/dist/components/select/select-trigger.js +15 -1
- package/dist/components/tag/index.d.ts +32 -153
- package/dist/components/tag/index.js +102 -101
- package/dist/components/text/index.d.ts +1 -1
- package/dist/components/tooltip/index.d.ts +1 -1
- package/dist/components/tree/index.d.ts +65 -0
- package/dist/components/tree/index.js +29 -2
- package/dist/index.d.ts +1 -1
- package/dist/styles/components/avatar.css +2 -2
- package/dist/styles/components/badge.css +21 -1
- package/dist/styles/components/badge.tokens.css +24 -0
- package/dist/styles/components/button.css +7 -6
- package/dist/styles/components/button.tokens.css +5 -2
- package/dist/styles/components/divider.css +8 -4
- package/dist/styles/components/divider.tokens.css +2 -1
- package/dist/styles/components/form.css +51 -0
- package/dist/styles/components/notification.css +1 -1
- package/dist/styles/components/select.css +62 -39
- package/dist/styles/components/select.tokens.css +15 -8
- package/dist/styles/components/tag.css +77 -154
- package/dist/styles/components/tag.tokens.css +13 -22
- package/dist/styles/components/tree.css +37 -3
- package/dist/styles/components/tree.tokens.css +4 -3
- package/dist/styles/components/upload.tokens.css +1 -1
- package/dist/styles/index.css +2 -1
- package/package.json +2 -2
|
@@ -1,61 +1,53 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Tag ——
|
|
2
|
+
* Tag —— **`Badge` 的交互封装**(可关闭 / 可新增)。
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* (常规 24 高 / 大号 28;状态档 22 高、小圆角、四色语义;可选档胶囊 + 选中实底主色;
|
|
6
|
-
* 新增档虚线框;筛选项贴片底 + 主色字)。
|
|
4
|
+
* ## 本件不画框(与 `select.css` 同一条纪律)
|
|
7
5
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
6
|
+
* 底 / 边 / 圆角 / 高度 / 字号 / 内距 / 档位**全归 `badge` 面** —— 徽标是「只读标记」的唯一样式源,
|
|
7
|
+
* 本件只往它上面加两个交互位。2026-09-30 之前这里有一整套与 `badge` 重复的几何
|
|
8
|
+
* (`--ui-tag-bg` / `-height` / `-font-size` / `-radius` …):同一个高度上两件各走一个圆角档、
|
|
9
|
+
* 同一个「浅主色标签底」两件给了两个色 —— 那批规则已整体撤除,本文件只剩三样东西:
|
|
10
10
|
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
11
|
+
* 1. `.mh-tag`:内容与操作位之间的间距(比 `Badge` 的通用 gap 紧一档);
|
|
12
|
+
* 2. `.mh-tag__close` / `.mh-tag__confirm`:两个操作位(14 圆底 + 悬停蒙层;图标 12 属有意保留的专属尺寸);
|
|
13
|
+
* 3. `.mh-tag--add`:新增入口形态(虚线框 + 中性字,滑过转主色);
|
|
14
|
+
* 4. `.mh-tag--editing` / `.mh-tag__input`:新增档点开后的编辑态(输入框的框归 input 面,
|
|
15
|
+
* 这里只给**窄**宽度;输入框 ↔ 确认位沿用 `.mh-tag` 的间距)。
|
|
13
16
|
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
17
|
+
* ## 特异性:两位本件类,不靠导入顺序
|
|
18
|
+
*
|
|
19
|
+
* `--add` 那组写成 **`.mh-tag.mh-tag--add`(0-2-0)**,压过 badge 面的单类规则(0-1-0)。
|
|
20
|
+
* 两条备选都被否掉:
|
|
21
|
+
* ① 引用 `.mh-badge`(面文件的类名必须与文件词根同根,跨族引用要进豁免台账);
|
|
22
|
+
* ② 靠 `styles/index.css` 的导入顺序(badge 面在前、本面在后)—— 顺序会被人无意调整,
|
|
23
|
+
* 两位类权重不会。`--add` 转发给 `Badge` 的档是 `plain`(底透明、字取中性),
|
|
24
|
+
* 需要覆盖的只剩 `border-color` 与字色。
|
|
25
|
+
*
|
|
26
|
+
* ⚠️ 新增档的根是**真实 `<button>`**(走 `Badge` 的 `as="button"`):按钮自带外观的三样
|
|
27
|
+
* (`border` / `background` / `padding`)由 badge 面提供(`contract-reset.spec.ts` 按标签审计),
|
|
28
|
+
* `font-family: inherit` 也在那边补 —— 本件只管虚线框与悬停色。
|
|
16
29
|
*/
|
|
30
|
+
|
|
31
|
+
/* ===== 内容 ↔ 关闭位:比 Badge 的通用 gap(6,给前置点的)紧一档 ===== */
|
|
17
32
|
.mh-tag {
|
|
18
|
-
display: inline-flex;
|
|
19
|
-
align-items: center;
|
|
20
33
|
gap: var(--ui-tag-gap);
|
|
21
|
-
height: var(--ui-tag-height);
|
|
22
|
-
padding: 0 var(--ui-space-3);
|
|
23
|
-
border-radius: var(--ui-radius-control);
|
|
24
|
-
background: var(--ui-tag-bg);
|
|
25
|
-
color: var(--ui-primary);
|
|
26
|
-
font-size: var(--ui-tag-font-size);
|
|
27
|
-
line-height: 1;
|
|
28
|
-
white-space: nowrap;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
/* ===== 尺寸档 =====
|
|
32
|
-
20 档是设计稿里**唯一有实证**的标签尺寸(`0:2723` 36×20):小圆角 r3 + 12px 字。
|
|
33
|
-
左右内距取 8 而不是设计反推的 6:6 不在本包的间距阶(4/8/12/16/20/24)上,
|
|
34
|
-
为 4px 的总宽差破一档刻度不值当。 */
|
|
35
|
-
.mh-tag--sm {
|
|
36
|
-
height: var(--ui-tag-height-sm);
|
|
37
|
-
padding: 0 var(--ui-space-2);
|
|
38
|
-
border-radius: var(--ui-radius-xs);
|
|
39
|
-
font-size: var(--ui-font-micro);
|
|
40
|
-
}
|
|
41
|
-
.mh-tag--lg {
|
|
42
|
-
height: var(--ui-tag-height-lg);
|
|
43
34
|
}
|
|
44
35
|
|
|
45
|
-
/* =====
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
36
|
+
/* ===== 操作位:关闭位(受控:只回调,见 TSX)与添加位(新增档)=====
|
|
37
|
+
两位共享「按钮重置 + 圆底 + 悬停过渡」,**尺寸与字形各按自己的量级走**:
|
|
38
|
+
- 关闭位:14 触区 + **12 字形**(贴小控件的字形,见 `contract-icon-direction` 的白名单)——
|
|
39
|
+
它是标签内的轻量移除操作,不该跟内容抢视觉重量;
|
|
40
|
+
- 添加位:**常规图标档** `--ui-font-icon`(default 16 / farris 14)+ 由它派生的触区
|
|
41
|
+
(`+ 4`:16→20 / 14→18)—— 它是这一档的**主操作**(一枚 +),与入口的加号同档。
|
|
42
|
+
触区用 `calc()` 而不是写死 20:farris 的图标档是 14,写死就会让字形顶满圆底。
|
|
43
|
+
关闭位右端不再回收内距:旧写法是「本件左右内距 12 + 关闭位负外边距 4」凑出 8,
|
|
44
|
+
现在 `Badge` 的 md 内距就是 8,负外边距一并撤掉。 */
|
|
45
|
+
.mh-tag__close,
|
|
46
|
+
.mh-tag__confirm {
|
|
52
47
|
display: inline-flex;
|
|
53
48
|
align-items: center;
|
|
54
49
|
justify-content: center;
|
|
55
50
|
flex: none;
|
|
56
|
-
width: var(--ui-tag-close-size);
|
|
57
|
-
height: var(--ui-tag-close-size);
|
|
58
|
-
margin-right: calc(-1 * var(--ui-space-1));
|
|
59
51
|
padding: 0;
|
|
60
52
|
border: none;
|
|
61
53
|
border-radius: var(--ui-radius-full);
|
|
@@ -65,6 +57,10 @@
|
|
|
65
57
|
opacity: 0.65;
|
|
66
58
|
transition: opacity 0.15s ease, background-color 0.15s ease;
|
|
67
59
|
}
|
|
60
|
+
.mh-tag__close {
|
|
61
|
+
width: var(--ui-tag-close-size);
|
|
62
|
+
height: var(--ui-tag-close-size);
|
|
63
|
+
}
|
|
68
64
|
.mh-tag__close > svg {
|
|
69
65
|
flex: none;
|
|
70
66
|
width: 12px;
|
|
@@ -74,131 +70,58 @@
|
|
|
74
70
|
opacity: 1;
|
|
75
71
|
background: rgb(0 0 0 / 0.08);
|
|
76
72
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
⚠️ **本条的配方改过**:改前是「透明底 + `1px solid currentColor`」(全色描边)。全色描边在浅底
|
|
82
|
-
页面上过重,且与 `shape="status"` + `tone` 的观感打架(两者都成了「彩边」);设计给的正是
|
|
83
|
-
「同色系浅边」。若某个页面确实需要「透明底 + 全色边」那种更硬的轮廓,请提需求另开形态,
|
|
84
|
-
不要就地改回去。 */
|
|
85
|
-
.mh-tag--outline {
|
|
86
|
-
background: var(--ui-primary-weak);
|
|
87
|
-
border: 1px solid var(--ui-primary-border);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
/* ===== 状态标签(22 高 / 四色语义)===== */
|
|
91
|
-
.mh-tag--status {
|
|
92
|
-
height: var(--ui-tag-height-status);
|
|
93
|
-
padding: 0 var(--ui-space-2);
|
|
94
|
-
}
|
|
95
|
-
.mh-tag--info {
|
|
96
|
-
background: var(--ui-info-weak);
|
|
97
|
-
color: var(--ui-info);
|
|
98
|
-
}
|
|
99
|
-
.mh-tag--success {
|
|
100
|
-
background: var(--ui-success-weak);
|
|
101
|
-
color: var(--ui-success);
|
|
102
|
-
}
|
|
103
|
-
.mh-tag--warning {
|
|
104
|
-
background: var(--ui-warning-weak);
|
|
105
|
-
color: var(--ui-warning);
|
|
106
|
-
}
|
|
107
|
-
.mh-tag--error {
|
|
108
|
-
background: var(--ui-error-weak);
|
|
109
|
-
color: var(--ui-error);
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
/* ===== 可选标签(胶囊;开关是隐身原生 radio,焦点环画在可见标签上)===== */
|
|
113
|
-
.mh-tag--select {
|
|
114
|
-
position: relative;
|
|
115
|
-
border: none;
|
|
116
|
-
border-radius: var(--ui-radius-full);
|
|
117
|
-
background: var(--ui-primary-weak);
|
|
73
|
+
/* 添加位是**肯定的**操作:触区与字形都跟图标档走,色取主色、悬停给主色浅底 */
|
|
74
|
+
.mh-tag__confirm {
|
|
75
|
+
width: calc(var(--ui-font-icon) + var(--ui-space-1));
|
|
76
|
+
height: calc(var(--ui-font-icon) + var(--ui-space-1));
|
|
118
77
|
color: var(--ui-primary);
|
|
119
|
-
cursor: pointer;
|
|
120
|
-
font-family: inherit;
|
|
121
|
-
}
|
|
122
|
-
.mh-tag--select > input {
|
|
123
|
-
position: absolute;
|
|
124
|
-
width: 1px;
|
|
125
|
-
height: 1px;
|
|
126
|
-
margin: -1px;
|
|
127
|
-
padding: 0;
|
|
128
|
-
border: 0;
|
|
129
|
-
overflow: hidden;
|
|
130
|
-
white-space: nowrap;
|
|
131
|
-
clip-path: inset(50%);
|
|
132
|
-
appearance: none;
|
|
133
|
-
pointer-events: none;
|
|
134
|
-
}
|
|
135
|
-
/* 悬停底取 `base-200`(中性面)—— 改前是 `base-50`:那档只比内容底低 1.7 L*,
|
|
136
|
-
在多数屏幕上看不出悬停反馈(`base-50` 不再作为「更轻底」的默认去处,见 colors 口径第 1 条)。 */
|
|
137
|
-
.mh-tag--select:hover {
|
|
138
|
-
background: var(--ui-base-200);
|
|
139
|
-
border: 1px solid var(--ui-base-300);
|
|
140
78
|
}
|
|
141
|
-
.mh-
|
|
142
|
-
|
|
143
|
-
|
|
79
|
+
.mh-tag__confirm > svg {
|
|
80
|
+
flex: none;
|
|
81
|
+
width: var(--ui-font-icon);
|
|
82
|
+
height: var(--ui-font-icon);
|
|
144
83
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
.mh-tag--select:has(input:checked) {
|
|
149
|
-
background: var(--ui-primary);
|
|
150
|
-
color: var(--ui-primary-content);
|
|
84
|
+
.mh-tag__confirm:hover {
|
|
85
|
+
opacity: 1;
|
|
86
|
+
background: var(--ui-primary-weak);
|
|
151
87
|
}
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
88
|
+
|
|
89
|
+
/* ===== 编辑态(`shape="add"` 点入口后)=====
|
|
90
|
+
这一档**没有标记片**:输入框的框归 input 面(本件只给宽度),确认位是第二个操作位。
|
|
91
|
+
宽度令牌设在 `Input` 的**表壳**上(`Input` 的 `class` 落表壳,见它的「属性落点」)。 */
|
|
92
|
+
.mh-tag--editing {
|
|
93
|
+
display: inline-flex;
|
|
94
|
+
align-items: center;
|
|
156
95
|
}
|
|
157
|
-
/*
|
|
158
|
-
.
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
cursor: not-allowed;
|
|
96
|
+
/* ⚠️ **两位类选择器**(0-2-0),不是单类:`Input` 的表壳自带宽度规则(`.mh-input__wrap`,0-1-0),
|
|
97
|
+
而 `styles/index.css` 里 **`input.css` 排在本文件之后**(表单与选择控件那一组)—— 单类写法在
|
|
98
|
+
同特异性下会被它压掉,实测输入框渲染成 201px 而不是这一档要的 120px(「窄输入」名存实亡)。 */
|
|
99
|
+
.mh-tag .mh-tag__input {
|
|
100
|
+
width: var(--ui-tag-input-width);
|
|
163
101
|
}
|
|
164
102
|
|
|
165
|
-
/* =====
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
.mh-tag--add {
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
border: 1px dashed var(--ui-base-300);
|
|
172
|
-
border-radius: var(--ui-radius-full);
|
|
103
|
+
/* ===== 新增入口形态(`shape="add"`)=====
|
|
104
|
+
转发给 `Badge` 的是 `plain`(透明底 + 中性字),这里把框换成虚线、字压成中性档、
|
|
105
|
+
悬停 / 按下转主色 —— 与旧 `--add` 档同一套观感。 */
|
|
106
|
+
.mh-tag.mh-tag--add {
|
|
107
|
+
border-style: dashed;
|
|
108
|
+
border-color: var(--ui-line-dashed); /* 虚线线色:口径「实线 base-300 / 虚线 base-400」 */
|
|
173
109
|
background: transparent;
|
|
174
110
|
color: var(--ui-base-content-muted);
|
|
175
111
|
cursor: pointer;
|
|
176
112
|
font-family: inherit;
|
|
177
|
-
font-size: var(--ui-tag-font-size);
|
|
178
113
|
}
|
|
179
|
-
|
|
114
|
+
/* 加号走常规图标档(`--ui-font-icon`):组件里不写死 `size`(见 AGENTS 第 7 条) */
|
|
115
|
+
.mh-tag.mh-tag--add > svg {
|
|
116
|
+
flex: none;
|
|
117
|
+
width: var(--ui-font-icon);
|
|
118
|
+
height: var(--ui-font-icon);
|
|
119
|
+
}
|
|
120
|
+
.mh-tag.mh-tag--add:hover {
|
|
180
121
|
border-color: var(--ui-primary-hover);
|
|
181
122
|
color: var(--ui-primary);
|
|
182
123
|
}
|
|
183
|
-
.mh-tag--add:active {
|
|
124
|
+
.mh-tag.mh-tag--add:active {
|
|
184
125
|
border-color: var(--ui-primary);
|
|
185
126
|
color: var(--ui-primary);
|
|
186
127
|
}
|
|
187
|
-
|
|
188
|
-
/* ===== 轻量筛选片(浅底 + 主色字)===== */
|
|
189
|
-
.mh-tag--chip {
|
|
190
|
-
height: var(--ui-tag-height-sm);
|
|
191
|
-
padding: 0 var(--ui-space-2);
|
|
192
|
-
border: none;
|
|
193
|
-
border-radius: var(--ui-radius-full);
|
|
194
|
-
background: var(--ui-primary-weak);
|
|
195
|
-
color: var(--ui-primary);
|
|
196
|
-
font-family: inherit;
|
|
197
|
-
font-size: var(--ui-font-caption);
|
|
198
|
-
cursor: pointer;
|
|
199
|
-
}
|
|
200
|
-
.mh-tag--chip[data-state='active'],
|
|
201
|
-
.mh-tag--chip.is-active {
|
|
202
|
-
background: var(--ui-primary);
|
|
203
|
-
color: var(--ui-primary-content);
|
|
204
|
-
}
|
|
@@ -1,33 +1,24 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* tag —— 单件令牌(**基础值**)。
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* 本件是 **`Badge` 的交互封装**(可关闭 / 可新增):底 / 边 / 圆角 / 高度 / 字号 / 内距 / 档位
|
|
5
|
+
* 全归 `badge` 面,故这里只剩**交互位自己**的两个值 —— 文件这么短是**有意**的:
|
|
6
|
+
* 2026-09-30 之前它带着一整套与 `badge` 重复的几何(`--ui-tag-bg` / `-height` / `-font-size` …),
|
|
7
|
+
* 同一高度上还各走一个圆角档,那批令牌已随收口撤除。
|
|
5
8
|
*
|
|
6
9
|
* ## 抽出说明
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* 容器里的分件都取得到值**,不再依赖「声明在某个组件根类上」这条脆弱假设
|
|
10
|
-
* (历史症状:跨件消费的 `--ui-*-group-*` 取不到值,组内间距变 0)。
|
|
10
|
+
* 这些是**基础值**,锚在 `[data-manohub-ui]` —— 跨包唯一作用域锚,由入口层无条件写在应用容器上,
|
|
11
|
+
* 因此**任何落在容器里的分件都取得到值**,不再依赖「声明在某个组件根类上」这条脆弱假设。
|
|
11
12
|
*
|
|
12
|
-
* ⚠️ `.mh-<件>--<档>`
|
|
13
|
-
* 选择器改写同一个令牌」生效,搬到本文件会让档位失效。
|
|
13
|
+
* ⚠️ `.mh-<件>--<档>` 这类**档位改写**留在面文件的修饰符块里(搬走会让档位失效)。
|
|
14
14
|
* ⚠️ 新增组件要登记两处:本文件 + `src/styles/index.css`(见其文件头「五处齐备」)。
|
|
15
15
|
*/
|
|
16
16
|
[data-manohub-ui] {
|
|
17
|
-
/*
|
|
18
|
-
软底**只有一档**:改前是 `#e1edff`(24) 与 `#f0faff`(28) 两个字面量,与主题的主色浅底档
|
|
19
|
-
`--ui-primary-weak`(#EFF5FF) 差 ≤ 6/255 —— 三个近值并存的典型症状,本轮并入主题档。
|
|
20
|
-
设计实证:表格内标签 `0:2723` 底 `#eaefff`。 */
|
|
21
|
-
--ui-tag-bg: var(--ui-primary-weak);
|
|
22
|
-
/* 20 / 24 两档是**跨件共用**的「标记体量档」(徽标 / 标签 / 多选标签片同源)⇒ 全局值在
|
|
23
|
-
`@manohub/theme` 的 `spacing.css`,本件只做别名:改档只改主题那一处。
|
|
24
|
-
28 / 22 两档只服务本件(大号标签 / 状态标签),故字面量留在本文件。 */
|
|
25
|
-
--ui-tag-height: var(--ui-mark-height-md);
|
|
26
|
-
--ui-tag-height-sm: var(--ui-mark-height-sm);
|
|
27
|
-
--ui-tag-height-lg: 28px;
|
|
28
|
-
--ui-tag-height-status: 22px;
|
|
29
|
-
--ui-tag-font-size: var(--ui-font-caption);
|
|
30
|
-
--ui-tag-icon-size: var(--ui-font-icon); /* 常规图标档(本件不再自定数值) */
|
|
31
|
-
--ui-tag-close-size: 14px;
|
|
17
|
+
/* 内容 ↔ 操作位:4(`Badge` 的通用 gap 是 6,那是给前置点的;操作位紧一档更像「贴在字尾」) */
|
|
32
18
|
--ui-tag-gap: var(--ui-space-1);
|
|
19
|
+
/* 关闭位触区;字形 12 属「贴小控件的字形」,见 contract-icon-direction。
|
|
20
|
+
添加位(新增档)**不占令牌**:它的触区与字形都按常规图标档 `--ui-font-icon` 派生。 */
|
|
21
|
+
--ui-tag-close-size: 14px;
|
|
22
|
+
/* 新增档的**窄**输入框宽度:在容器上重设即可加宽(`--ui-tag-input-width: 200px`) */
|
|
23
|
+
--ui-tag-input-width: 120px;
|
|
33
24
|
}
|
|
@@ -7,12 +7,17 @@
|
|
|
7
7
|
|
|
8
8
|
/* ===== Tree(自建树:节点行 + 缩进 + 展开箭头 + 计数徽标位)=====
|
|
9
9
|
几何与各态对齐 `@aihub/theme` 的 `components/tree.css` 与设计稿 `0:3921` 组织树实测:
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
- 行高 34(紧凑档 28)、**行挨行(不加间距,节距 = 行高)**、圆角 6、字号 13、
|
|
11
|
+
行内 padding 承载缩进(**行底满宽、只有内容缩进**)
|
|
12
|
+
⚠️ 行距原为 6(节距 40,取自设计稿行文本 y 差):2026-09-30 按使用方拍板去掉 ——
|
|
13
|
+
树行与选择器面板里的选项行是**同一套行**(行高 / 圆角 / 内距 / 字号 / 行态逐项同源),
|
|
14
|
+
那边是行挨行的平铺列表,两处当然该同一节距(去掉行距后 select 面板里的树与列表也一致了)。
|
|
12
15
|
- 缩进 = 基础内距 8 + level × 步进 10,**无上限**;level 由组件在行上下发
|
|
13
16
|
- 三态:滑过 `--ui-primary-weak`、点击瞬态 `--ui-primary-subtle`、
|
|
14
17
|
选中 `--ui-primary-subtle` 底 + 主色字(设计:选中行 = `#2660ff` 底 10% + 蓝字)
|
|
15
18
|
- 箭头 = 常规图标档(`--ui-font-icon`,收起态转 −90°);叶子节点用占位保持层级对齐
|
|
19
|
+
- 行内图标位只有两处:箭头(`.mh-tree__caret`,可被 `renderCaret` 替换)与标签前的
|
|
20
|
+
节点图标槽(`.mh-tree__icon`,`renderIcon` 才会出现)。两者都取全局图标档、颜色跟随行色
|
|
16
21
|
|
|
17
22
|
**行态的取色口径与 Table / ListView 统一**:行类表面的「滑过」用 `--ui-primary-weak`(浅主色)、
|
|
18
23
|
「选中」用 `--ui-primary-subtle`(深一档主色)—— 三者同一套规则,不再出现「树用中性底、
|
|
@@ -24,10 +29,12 @@
|
|
|
24
29
|
一步算出(`padding-left: calc(8px + attr(...) * 10px)`);为兼容尚无该能力的引擎,这里由组件
|
|
25
30
|
同时下发 `--mh-tree-level`,公式仍在 CSS 内(数值只取令牌,不散落字面量)。 */
|
|
26
31
|
|
|
32
|
+
/* 树是**行挨行**的列容器(不加行距,节距 = 行高 34):
|
|
33
|
+
行底满宽、只有内容缩进,行态(滑过 / 按下 / 选中)的底因此是连着的 ——
|
|
34
|
+
与选择器面板里的选项行同一节距(见文件头「行距原为 6」那条)。 */
|
|
27
35
|
.mh-tree {
|
|
28
36
|
display: flex;
|
|
29
37
|
flex-direction: column;
|
|
30
|
-
row-gap: var(--ui-tree-row-gap);
|
|
31
38
|
width: 100%;
|
|
32
39
|
}
|
|
33
40
|
|
|
@@ -88,6 +95,14 @@
|
|
|
88
95
|
transition: transform 0.15s ease;
|
|
89
96
|
}
|
|
90
97
|
|
|
98
|
+
/* 自定义箭头(`renderCaret`):消费方给的字形落在槽里即取同一档,不必自己写 size
|
|
99
|
+
—— 上面那条只认缺省字形的类名,故这里按**槽内的字形**给尺寸(`<Icon>` 的 width/height
|
|
100
|
+
是属性,优先级低于类规则)。朝向不在这里转:自定义箭头由消费方按展开态自选字形。 */
|
|
101
|
+
.mh-tree__caret svg {
|
|
102
|
+
width: var(--ui-font-icon);
|
|
103
|
+
height: var(--ui-font-icon);
|
|
104
|
+
}
|
|
105
|
+
|
|
91
106
|
.mh-tree__caret[data-expanded='false'] .mh-tree__caret-icon {
|
|
92
107
|
transform: rotate(-90deg);
|
|
93
108
|
}
|
|
@@ -98,6 +113,25 @@
|
|
|
98
113
|
cursor: default;
|
|
99
114
|
}
|
|
100
115
|
|
|
116
|
+
/* 节点图标槽(`renderIcon`):标签**前**的一位图标(文件夹 / 文件)。父 / 叶共用一位,
|
|
117
|
+
叶子行上面那句箭头占位仍在,故图标列跨层级对齐。
|
|
118
|
+
**颜色不写死**:跟随行色 —— 选中行(面上已把行色换成主色 `--ui-primary`)与滑过态自动同步。 */
|
|
119
|
+
|
|
120
|
+
.mh-tree__icon {
|
|
121
|
+
display: inline-flex;
|
|
122
|
+
align-items: center;
|
|
123
|
+
justify-content: center;
|
|
124
|
+
flex-shrink: 0;
|
|
125
|
+
width: var(--ui-font-icon);
|
|
126
|
+
height: var(--ui-font-icon);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/* 槽内的字形同取全局图标档(同自定义箭头那条的理由) */
|
|
130
|
+
.mh-tree__icon svg {
|
|
131
|
+
width: var(--ui-font-icon);
|
|
132
|
+
height: var(--ui-font-icon);
|
|
133
|
+
}
|
|
134
|
+
|
|
101
135
|
.mh-tree__label {
|
|
102
136
|
flex: 1;
|
|
103
137
|
min-width: 0;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* 组件几何令牌(只服务本件,故不随主题进 `@manohub/theme`)。
|
|
3
|
-
*
|
|
4
|
-
* 高亮块 200×34)、**节距 40**(行文本 y = 3 / 43 / 83 / 123 / 163 ⇒ 40),故行间距 6。
|
|
3
|
+
* 行高取自设计稿《MH后台-0911》的组织树(`0:3921`):**34**(`0:3923` 的高亮块 200×34)。
|
|
5
4
|
* ⚠️ 改前是「行高 30 + 间距 2」(节距 32)——两套来源(规范与设计)给的节距都更松。
|
|
5
|
+
* ⚠️ `--ui-tree-row-gap`(6)**已退场**(2026-09-30,使用方拍板):树行与选择器面板里的选项行
|
|
6
|
+
* 现在同一套行(行高 / 圆角 / 内距 / 字号 / 行态逐项同源),那边是行挨行的平铺列表,
|
|
7
|
+
* 节距就该一样(设计稿的节距 40 因此让位)。**无消费者不预置令牌**,别再把它加回来。
|
|
6
8
|
*
|
|
7
9
|
* ## 抽出说明
|
|
8
10
|
* 本文件从面文件里抽出:这些是**基础值**,锚在 `[data-manohub-ui]`(跨包唯一作用域锚,
|
|
@@ -13,7 +15,6 @@
|
|
|
13
15
|
[data-manohub-ui] {
|
|
14
16
|
--ui-tree-row-height: 34px;
|
|
15
17
|
--ui-tree-row-height-compact: 28px;
|
|
16
|
-
--ui-tree-row-gap: 6px; /* 节距 40 = 行高 34 + 间距 6 */
|
|
17
18
|
--ui-tree-indent-base: 8px;
|
|
18
19
|
--ui-tree-indent-step: 10px;
|
|
19
20
|
/* 箭头不再是本件自定的尺寸:**常规图标一律取全局图标档 `--ui-font-icon`**(见下方箭头规则) */
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
--ui-upload-padding: 32px; /* 规范间距档 8(本仓间距刻度最大 24,故按实测值给) */
|
|
19
19
|
--ui-upload-zone-max-width: 500px; /* 规范拖拽区帧宽 */
|
|
20
20
|
--ui-upload-radius: var(--ui-radius-control);
|
|
21
|
-
--ui-upload-line: var(--ui-
|
|
21
|
+
--ui-upload-line: var(--ui-line-dashed); /* 虚线边:取线型档(口径「实线 base-300 / 虚线 base-400」) */
|
|
22
22
|
--ui-upload-text: var(--ui-base-content-muted); /* 主提示 Te05 */
|
|
23
23
|
--ui-upload-hint: var(--ui-base-content-subtle); /* 副提示 Te07 */
|
|
24
24
|
--ui-upload-meta-size: var(--ui-font-caption); /* 大小/缩略图文字:规范 12,本仓字阶最小 13 */
|
package/dist/styles/index.css
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
*
|
|
13
13
|
* | 段 | 命名 | 落点 | 锚 |
|
|
14
14
|
* |---|---|---|---|
|
|
15
|
-
* | 全局令牌(跨件共用的值) | `--ui-{primary,base-*,space-*,radius-*,shadow-*,font-*}`、尺寸档(`--ui-control-height-*` / `--ui-mark-height
|
|
15
|
+
* | 全局令牌(跨件共用的值) | `--ui-{primary,base-*,space-*,radius-*,shadow-*,font-*}`、尺寸档(`--ui-control-height-*` / `--ui-mark-height-*`)、线型档(`--ui-line-dashed`) | `@manohub/theme` | `[data-manohub-ui]` |
|
|
16
16
|
* | 组件令牌**基础值** | `--ui-<件>-*` | 本目录同名 `<件>.tokens.css` | `[data-manohub-ui]` |
|
|
17
17
|
* | 组件令牌**档位改写** | `--ui-<件>-*` | 面文件 `<件>.css` 的**修饰符块** | `.mh-<件>--<档>` 等 |
|
|
18
18
|
* | 内部状态变量 | `--mh-<件>-*` | 面文件(修饰符机制本身) | 组件根类 / 修饰符类 |
|
|
@@ -57,6 +57,7 @@
|
|
|
57
57
|
|
|
58
58
|
/* 数据展示 */
|
|
59
59
|
@import './components/tree.tokens.css';
|
|
60
|
+
@import './components/badge.tokens.css';
|
|
60
61
|
@import './components/tag.tokens.css';
|
|
61
62
|
@import './components/avatar.tokens.css';
|
|
62
63
|
@import './components/skeleton.tokens.css';
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manohub/ui",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.3",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "AIHub 自绘组件层:不依赖 farris 的手写 Vue TSX 组件 + 自带令牌层(Farris 规范视觉 · daisyUI 式语义令牌 · shadcn 式 API 词汇)。",
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"vue": "^3.5.0"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@manohub/icon": "^0.10.
|
|
49
|
+
"@manohub/icon": "^0.10.3"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/node": "^24.0.0",
|