@manohub/ui 0.10.5 → 1.0.1
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 +155 -155
- package/dist/components/form/index.js +8 -1
- package/dist/components/input/bordered.d.ts +15 -0
- package/dist/components/input/bordered.js +8 -0
- package/dist/components/input/index.d.ts +82 -31
- package/dist/components/input/index.js +16 -6
- package/dist/components/input/number-input.d.ts +239 -0
- package/dist/components/input/number-input.js +240 -0
- package/dist/components/select/index.d.ts +19 -0
- package/dist/components/select/index.js +10 -0
- package/dist/components/select/select-tree.d.ts +11 -0
- package/dist/components/select/select-tree.js +6 -0
- package/dist/components/select/select-trigger.d.ts +17 -0
- package/dist/components/select/select-trigger.js +9 -0
- package/dist/components/table/index.d.ts +85 -10
- package/dist/components/table/index.js +38 -9
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2 -0
- package/dist/styles/components/avatar.css +131 -131
- package/dist/styles/components/avatar.tokens.css +24 -24
- package/dist/styles/components/badge.css +266 -266
- package/dist/styles/components/badge.tokens.css +24 -24
- package/dist/styles/components/button.css +460 -460
- package/dist/styles/components/capsule.css +128 -128
- package/dist/styles/components/capsule.tokens.css +27 -27
- package/dist/styles/components/card.css +198 -198
- package/dist/styles/components/checkbox.css +145 -145
- package/dist/styles/components/checkbox.tokens.css +26 -26
- package/dist/styles/components/code-block.css +216 -216
- package/dist/styles/components/code-block.tokens.css +40 -40
- package/dist/styles/components/collapse.css +62 -62
- package/dist/styles/components/collapse.tokens.css +20 -20
- package/dist/styles/components/dialog.css +158 -158
- package/dist/styles/components/dialog.tokens.css +24 -24
- package/dist/styles/components/divider.css +75 -75
- package/dist/styles/components/divider.tokens.css +22 -22
- package/dist/styles/components/drawer.css +143 -143
- package/dist/styles/components/drawer.tokens.css +22 -22
- package/dist/styles/components/filter.css +29 -29
- package/dist/styles/components/form.css +456 -425
- package/dist/styles/components/form.tokens.css +19 -15
- package/dist/styles/components/input.css +659 -538
- package/dist/styles/components/input.tokens.css +43 -43
- package/dist/styles/components/layout.css +200 -200
- package/dist/styles/components/list-view.css +244 -244
- package/dist/styles/components/loading.css +76 -76
- package/dist/styles/components/loading.tokens.css +23 -23
- package/dist/styles/components/nav.css +48 -48
- package/dist/styles/components/notice.css +153 -153
- package/dist/styles/components/notice.tokens.css +17 -17
- package/dist/styles/components/notification.css +159 -159
- package/dist/styles/components/notification.tokens.css +37 -37
- package/dist/styles/components/page.css +473 -473
- package/dist/styles/components/pagination.css +303 -303
- package/dist/styles/components/pagination.tokens.css +32 -32
- package/dist/styles/components/panel.css +77 -77
- package/dist/styles/components/query-state.css +88 -88
- package/dist/styles/components/radio.css +271 -271
- package/dist/styles/components/radio.tokens.css +26 -26
- package/dist/styles/components/search.css +34 -34
- package/dist/styles/components/select.css +326 -326
- package/dist/styles/components/select.tokens.css +44 -44
- package/dist/styles/components/skeleton.css +60 -60
- package/dist/styles/components/skeleton.tokens.css +27 -27
- package/dist/styles/components/steps.css +205 -205
- package/dist/styles/components/steps.tokens.css +44 -44
- package/dist/styles/components/switch.css +165 -165
- package/dist/styles/components/switch.tokens.css +26 -26
- package/dist/styles/components/tabbar.css +235 -235
- package/dist/styles/components/tabbar.tokens.css +30 -30
- package/dist/styles/components/table.css +510 -504
- package/dist/styles/components/table.tokens.css +44 -44
- package/dist/styles/components/tag.css +127 -127
- package/dist/styles/components/tag.tokens.css +24 -24
- package/dist/styles/components/toast.css +185 -185
- package/dist/styles/components/toast.tokens.css +26 -26
- package/dist/styles/components/tooltip.css +89 -89
- package/dist/styles/components/tooltip.tokens.css +25 -25
- package/dist/styles/components/tree.css +173 -173
- package/dist/styles/components/upload.css +151 -151
- package/dist/styles/components/upload.tokens.css +27 -27
- package/dist/styles/index.css +153 -153
- package/dist/styles/operations/collapse.css +84 -84
- package/dist/styles/operations/popup.css +193 -193
- package/dist/styles/operations/tabs.css +82 -82
- package/package.json +62 -62
|
@@ -1,143 +1,143 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Drawer —— 抽屉皮肤(与操作层并列组合:`class="mh-popup mh-drawer"`)。
|
|
3
|
-
*
|
|
4
|
-
* 与 `Dialog` 同一套行为、只换落位:模态语义 / Esc / 焦点陷阱 / `::backdrop` 遮罩 / top layer
|
|
5
|
-
* 渲染全由原生 `<dialog>` 给(见 `dialog.css` 与组件头注释);本件**不新建任何浮层机制**,
|
|
6
|
-
* 只把居中的面板改成贴屏幕某一侧、整屏高。
|
|
7
|
-
*
|
|
8
|
-
* 三条几何决策:
|
|
9
|
-
* - **`margin: 0` 必须写**:UA 给 `<dialog>` 的 `margin: auto` 正是「居中」的来源,
|
|
10
|
-
* 不归零则 `inset-inline` 与它对冲,面板会回到中线(实测)。
|
|
11
|
-
* - **整屏高不切圆角**(`--ui-drawer-radius: 0`):面板上下贴视口边缘,切角会在边缘露出遮罩缺口。
|
|
12
|
-
* 保留成令牌是为了让主题能改(如浮起式抽屉),不是为了默认切角。
|
|
13
|
-
* - **宽度由组件用行内 style 下发**:`width` 既接受像素数也接受任意合法宽度串
|
|
14
|
-
* (`min(520px, 90vw)` 这类响应式写法),比在面里堆尺寸档更省事,也让「一屏窄了要收窄」可控。
|
|
15
|
-
*
|
|
16
|
-
* 进出场用 **animation**(不用 transition):位移只碰独立的 `translate` 属性,不碰 `transform`
|
|
17
|
-
* —— 与全库动画令牌的口径一致,且不会覆盖定位。`prefers-reduced-motion` 下整体关闭。
|
|
18
|
-
*
|
|
19
|
-
* **类名与面文件名同根**:`.mh-drawer*`(元素走 `__`),一律 `mh-` 前缀。
|
|
20
|
-
*/
|
|
21
|
-
.mh-drawer {
|
|
22
|
-
position: fixed;
|
|
23
|
-
inset-block: 0;
|
|
24
|
-
inset-inline: auto 0; /* 缺省贴右侧(左档在下面覆盖) */
|
|
25
|
-
margin: 0; /* UA 的 margin:auto 会把面板拉回中线,必须归零 */
|
|
26
|
-
height: 100%;
|
|
27
|
-
max-height: 100%;
|
|
28
|
-
max-width: 100%;
|
|
29
|
-
display: flex;
|
|
30
|
-
flex-direction: column;
|
|
31
|
-
padding: 0;
|
|
32
|
-
border: none;
|
|
33
|
-
border-radius: var(--ui-drawer-radius);
|
|
34
|
-
background: var(--ui-base-100);
|
|
35
|
-
box-shadow: var(--ui-shadow-card);
|
|
36
|
-
color: var(--ui-base-content);
|
|
37
|
-
overflow: hidden;
|
|
38
|
-
}
|
|
39
|
-
.mh-drawer--left {
|
|
40
|
-
inset-inline: 0 auto; /* 贴左侧 */
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
/* 真浮层遮罩:`<dialog>` 进 top layer 时才生成 ::backdrop(静态档不生成,对本面无影响) */
|
|
44
|
-
.mh-drawer::backdrop {
|
|
45
|
-
background: var(--ui-drawer-mask);
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/* 进场:从所贴那一侧推入(`translate` 是独立属性,不动 `transform` 与定位) */
|
|
49
|
-
.mh-drawer[open] {
|
|
50
|
-
animation: mh-drawer-in-right 0.2s ease-out;
|
|
51
|
-
}
|
|
52
|
-
.mh-drawer--left[open] {
|
|
53
|
-
animation-name: mh-drawer-in-left;
|
|
54
|
-
}
|
|
55
|
-
@keyframes mh-drawer-in-right {
|
|
56
|
-
from {
|
|
57
|
-
translate: 100% 0;
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
@keyframes mh-drawer-in-left {
|
|
61
|
-
from {
|
|
62
|
-
translate: -100% 0;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
@media (prefers-reduced-motion: reduce) {
|
|
66
|
-
.mh-drawer[open] {
|
|
67
|
-
animation: none;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
/* 页头:标题左、关闭位右(三段之间无分割线,与 Dialog 同一份口径) */
|
|
72
|
-
.mh-drawer__header {
|
|
73
|
-
display: flex;
|
|
74
|
-
align-items: center;
|
|
75
|
-
justify-content: space-between;
|
|
76
|
-
gap: var(--ui-space-2);
|
|
77
|
-
flex: none;
|
|
78
|
-
padding: var(--ui-space-4) var(--ui-space-6) 0;
|
|
79
|
-
font-size: var(--ui-font-heading);
|
|
80
|
-
line-height: var(--ui-line-heading);
|
|
81
|
-
font-weight: var(--ui-weight-medium);
|
|
82
|
-
color: var(--ui-base-content);
|
|
83
|
-
}
|
|
84
|
-
/* 标题位(插槽版也走这个类,两路渲染同一份排版) */
|
|
85
|
-
.mh-drawer__title {
|
|
86
|
-
min-width: 0;
|
|
87
|
-
overflow: hidden;
|
|
88
|
-
text-overflow: ellipsis;
|
|
89
|
-
white-space: nowrap;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
.mh-drawer__close {
|
|
93
|
-
display: inline-flex;
|
|
94
|
-
align-items: center;
|
|
95
|
-
justify-content: center;
|
|
96
|
-
flex: none;
|
|
97
|
-
width: var(--ui-drawer-close-size);
|
|
98
|
-
height: var(--ui-drawer-close-size);
|
|
99
|
-
margin: calc(-1 * var(--ui-space-1)); /* 热区比字形大,但视觉上仍与标题同基线 */
|
|
100
|
-
padding: 0;
|
|
101
|
-
border: none;
|
|
102
|
-
border-radius: var(--ui-radius-sm);
|
|
103
|
-
background: transparent;
|
|
104
|
-
color: var(--ui-base-content-muted);
|
|
105
|
-
cursor: pointer;
|
|
106
|
-
transition: background-color 0.15s ease, color 0.15s ease;
|
|
107
|
-
}
|
|
108
|
-
.mh-drawer__close:hover,
|
|
109
|
-
.mh-drawer__close.is-hover {
|
|
110
|
-
background: var(--ui-base-200);
|
|
111
|
-
color: var(--ui-base-content);
|
|
112
|
-
}
|
|
113
|
-
.mh-drawer__close:focus-visible {
|
|
114
|
-
outline: 2px solid var(--ui-primary);
|
|
115
|
-
outline-offset: 2px;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
/* 内容区:**三段里唯一可滚的那段**(页头与底栏固定,抽屉才像抽屉) */
|
|
119
|
-
.mh-drawer__body {
|
|
120
|
-
flex: 1 1 auto;
|
|
121
|
-
min-height: 0;
|
|
122
|
-
overflow-y: auto;
|
|
123
|
-
padding: var(--ui-space-6);
|
|
124
|
-
font-size: var(--ui-font-body);
|
|
125
|
-
line-height: var(--ui-line-body);
|
|
126
|
-
color: var(--ui-base-content);
|
|
127
|
-
}
|
|
128
|
-
/* 首尾孩子不吃外边距:正文里的 <p> 自带 UA margin,会与内容内距叠成一块大空档 */
|
|
129
|
-
.mh-drawer__body > :first-child {
|
|
130
|
-
margin-top: 0;
|
|
131
|
-
}
|
|
132
|
-
.mh-drawer__body > :last-child {
|
|
133
|
-
margin-bottom: 0;
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
/* 底栏:按钮右对齐(按钮的面归按钮族)、间距 8、下内距 16 */
|
|
137
|
-
.mh-drawer__footer {
|
|
138
|
-
display: flex;
|
|
139
|
-
justify-content: flex-end;
|
|
140
|
-
gap: var(--ui-space-2);
|
|
141
|
-
flex: none;
|
|
142
|
-
padding: 0 var(--ui-space-6) var(--ui-space-4);
|
|
143
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Drawer —— 抽屉皮肤(与操作层并列组合:`class="mh-popup mh-drawer"`)。
|
|
3
|
+
*
|
|
4
|
+
* 与 `Dialog` 同一套行为、只换落位:模态语义 / Esc / 焦点陷阱 / `::backdrop` 遮罩 / top layer
|
|
5
|
+
* 渲染全由原生 `<dialog>` 给(见 `dialog.css` 与组件头注释);本件**不新建任何浮层机制**,
|
|
6
|
+
* 只把居中的面板改成贴屏幕某一侧、整屏高。
|
|
7
|
+
*
|
|
8
|
+
* 三条几何决策:
|
|
9
|
+
* - **`margin: 0` 必须写**:UA 给 `<dialog>` 的 `margin: auto` 正是「居中」的来源,
|
|
10
|
+
* 不归零则 `inset-inline` 与它对冲,面板会回到中线(实测)。
|
|
11
|
+
* - **整屏高不切圆角**(`--ui-drawer-radius: 0`):面板上下贴视口边缘,切角会在边缘露出遮罩缺口。
|
|
12
|
+
* 保留成令牌是为了让主题能改(如浮起式抽屉),不是为了默认切角。
|
|
13
|
+
* - **宽度由组件用行内 style 下发**:`width` 既接受像素数也接受任意合法宽度串
|
|
14
|
+
* (`min(520px, 90vw)` 这类响应式写法),比在面里堆尺寸档更省事,也让「一屏窄了要收窄」可控。
|
|
15
|
+
*
|
|
16
|
+
* 进出场用 **animation**(不用 transition):位移只碰独立的 `translate` 属性,不碰 `transform`
|
|
17
|
+
* —— 与全库动画令牌的口径一致,且不会覆盖定位。`prefers-reduced-motion` 下整体关闭。
|
|
18
|
+
*
|
|
19
|
+
* **类名与面文件名同根**:`.mh-drawer*`(元素走 `__`),一律 `mh-` 前缀。
|
|
20
|
+
*/
|
|
21
|
+
.mh-drawer {
|
|
22
|
+
position: fixed;
|
|
23
|
+
inset-block: 0;
|
|
24
|
+
inset-inline: auto 0; /* 缺省贴右侧(左档在下面覆盖) */
|
|
25
|
+
margin: 0; /* UA 的 margin:auto 会把面板拉回中线,必须归零 */
|
|
26
|
+
height: 100%;
|
|
27
|
+
max-height: 100%;
|
|
28
|
+
max-width: 100%;
|
|
29
|
+
display: flex;
|
|
30
|
+
flex-direction: column;
|
|
31
|
+
padding: 0;
|
|
32
|
+
border: none;
|
|
33
|
+
border-radius: var(--ui-drawer-radius);
|
|
34
|
+
background: var(--ui-base-100);
|
|
35
|
+
box-shadow: var(--ui-shadow-card);
|
|
36
|
+
color: var(--ui-base-content);
|
|
37
|
+
overflow: hidden;
|
|
38
|
+
}
|
|
39
|
+
.mh-drawer--left {
|
|
40
|
+
inset-inline: 0 auto; /* 贴左侧 */
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/* 真浮层遮罩:`<dialog>` 进 top layer 时才生成 ::backdrop(静态档不生成,对本面无影响) */
|
|
44
|
+
.mh-drawer::backdrop {
|
|
45
|
+
background: var(--ui-drawer-mask);
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/* 进场:从所贴那一侧推入(`translate` 是独立属性,不动 `transform` 与定位) */
|
|
49
|
+
.mh-drawer[open] {
|
|
50
|
+
animation: mh-drawer-in-right 0.2s ease-out;
|
|
51
|
+
}
|
|
52
|
+
.mh-drawer--left[open] {
|
|
53
|
+
animation-name: mh-drawer-in-left;
|
|
54
|
+
}
|
|
55
|
+
@keyframes mh-drawer-in-right {
|
|
56
|
+
from {
|
|
57
|
+
translate: 100% 0;
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
@keyframes mh-drawer-in-left {
|
|
61
|
+
from {
|
|
62
|
+
translate: -100% 0;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
@media (prefers-reduced-motion: reduce) {
|
|
66
|
+
.mh-drawer[open] {
|
|
67
|
+
animation: none;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/* 页头:标题左、关闭位右(三段之间无分割线,与 Dialog 同一份口径) */
|
|
72
|
+
.mh-drawer__header {
|
|
73
|
+
display: flex;
|
|
74
|
+
align-items: center;
|
|
75
|
+
justify-content: space-between;
|
|
76
|
+
gap: var(--ui-space-2);
|
|
77
|
+
flex: none;
|
|
78
|
+
padding: var(--ui-space-4) var(--ui-space-6) 0;
|
|
79
|
+
font-size: var(--ui-font-heading);
|
|
80
|
+
line-height: var(--ui-line-heading);
|
|
81
|
+
font-weight: var(--ui-weight-medium);
|
|
82
|
+
color: var(--ui-base-content);
|
|
83
|
+
}
|
|
84
|
+
/* 标题位(插槽版也走这个类,两路渲染同一份排版) */
|
|
85
|
+
.mh-drawer__title {
|
|
86
|
+
min-width: 0;
|
|
87
|
+
overflow: hidden;
|
|
88
|
+
text-overflow: ellipsis;
|
|
89
|
+
white-space: nowrap;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
.mh-drawer__close {
|
|
93
|
+
display: inline-flex;
|
|
94
|
+
align-items: center;
|
|
95
|
+
justify-content: center;
|
|
96
|
+
flex: none;
|
|
97
|
+
width: var(--ui-drawer-close-size);
|
|
98
|
+
height: var(--ui-drawer-close-size);
|
|
99
|
+
margin: calc(-1 * var(--ui-space-1)); /* 热区比字形大,但视觉上仍与标题同基线 */
|
|
100
|
+
padding: 0;
|
|
101
|
+
border: none;
|
|
102
|
+
border-radius: var(--ui-radius-sm);
|
|
103
|
+
background: transparent;
|
|
104
|
+
color: var(--ui-base-content-muted);
|
|
105
|
+
cursor: pointer;
|
|
106
|
+
transition: background-color 0.15s ease, color 0.15s ease;
|
|
107
|
+
}
|
|
108
|
+
.mh-drawer__close:hover,
|
|
109
|
+
.mh-drawer__close.is-hover {
|
|
110
|
+
background: var(--ui-base-200);
|
|
111
|
+
color: var(--ui-base-content);
|
|
112
|
+
}
|
|
113
|
+
.mh-drawer__close:focus-visible {
|
|
114
|
+
outline: 2px solid var(--ui-primary);
|
|
115
|
+
outline-offset: 2px;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/* 内容区:**三段里唯一可滚的那段**(页头与底栏固定,抽屉才像抽屉) */
|
|
119
|
+
.mh-drawer__body {
|
|
120
|
+
flex: 1 1 auto;
|
|
121
|
+
min-height: 0;
|
|
122
|
+
overflow-y: auto;
|
|
123
|
+
padding: var(--ui-space-6);
|
|
124
|
+
font-size: var(--ui-font-body);
|
|
125
|
+
line-height: var(--ui-line-body);
|
|
126
|
+
color: var(--ui-base-content);
|
|
127
|
+
}
|
|
128
|
+
/* 首尾孩子不吃外边距:正文里的 <p> 自带 UA margin,会与内容内距叠成一块大空档 */
|
|
129
|
+
.mh-drawer__body > :first-child {
|
|
130
|
+
margin-top: 0;
|
|
131
|
+
}
|
|
132
|
+
.mh-drawer__body > :last-child {
|
|
133
|
+
margin-bottom: 0;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/* 底栏:按钮右对齐(按钮的面归按钮族)、间距 8、下内距 16 */
|
|
137
|
+
.mh-drawer__footer {
|
|
138
|
+
display: flex;
|
|
139
|
+
justify-content: flex-end;
|
|
140
|
+
gap: var(--ui-space-2);
|
|
141
|
+
flex: none;
|
|
142
|
+
padding: 0 var(--ui-space-6) var(--ui-space-4);
|
|
143
|
+
}
|
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* drawer —— 单件令牌(**基础值**)。
|
|
3
|
-
*
|
|
4
|
-
* 本件自己的几何 / 尺寸 / 色彩槽位;只服务本件,故不随主题进 `@manohub/theme`。
|
|
5
|
-
*
|
|
6
|
-
* ## 抽出说明
|
|
7
|
-
* 本文件从面文件里抽出(原先混写在 `drawer.css` 顶部):这些是**基础值**,锚在
|
|
8
|
-
* `[data-manohub-ui]` —— 跨包唯一作用域锚,由入口层无条件写在应用容器上,因此**任何落在
|
|
9
|
-
* 容器里的分件都取得到值**,不再依赖「声明在某个组件根类上」这条脆弱假设
|
|
10
|
-
* (历史症状:跨件消费的 `--ui-*-group-*` 取不到值,组内间距变 0)。
|
|
11
|
-
*
|
|
12
|
-
* ⚠️ `.mh-<件>--<档>` 这类**档位改写**留在面文件的修饰符块里 —— 它们靠「同一元素上两个
|
|
13
|
-
* 选择器改写同一个令牌」生效,搬到本文件会让档位失效。
|
|
14
|
-
* ⚠️ 新增组件要登记两处:本文件 + `src/styles/index.css`(见其文件头「五处齐备」)。
|
|
15
|
-
*/
|
|
16
|
-
[data-manohub-ui] {
|
|
17
|
-
/* 单件令牌 */
|
|
18
|
-
--ui-drawer-radius: 0; /* 整屏高面板不切角;改它才会出现内缘圆角 */
|
|
19
|
-
--ui-drawer-close-size: 28px; /* 关闭件的点击热区(字形 14 居中) */
|
|
20
|
-
/* 与 Dialog 同一份遮罩取值(规范 Mask01 黑 45%):两件并列出现时不该有两种遮罩深度 */
|
|
21
|
-
--ui-drawer-mask: rgba(0, 0, 0, 0.45);
|
|
22
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* drawer —— 单件令牌(**基础值**)。
|
|
3
|
+
*
|
|
4
|
+
* 本件自己的几何 / 尺寸 / 色彩槽位;只服务本件,故不随主题进 `@manohub/theme`。
|
|
5
|
+
*
|
|
6
|
+
* ## 抽出说明
|
|
7
|
+
* 本文件从面文件里抽出(原先混写在 `drawer.css` 顶部):这些是**基础值**,锚在
|
|
8
|
+
* `[data-manohub-ui]` —— 跨包唯一作用域锚,由入口层无条件写在应用容器上,因此**任何落在
|
|
9
|
+
* 容器里的分件都取得到值**,不再依赖「声明在某个组件根类上」这条脆弱假设
|
|
10
|
+
* (历史症状:跨件消费的 `--ui-*-group-*` 取不到值,组内间距变 0)。
|
|
11
|
+
*
|
|
12
|
+
* ⚠️ `.mh-<件>--<档>` 这类**档位改写**留在面文件的修饰符块里 —— 它们靠「同一元素上两个
|
|
13
|
+
* 选择器改写同一个令牌」生效,搬到本文件会让档位失效。
|
|
14
|
+
* ⚠️ 新增组件要登记两处:本文件 + `src/styles/index.css`(见其文件头「五处齐备」)。
|
|
15
|
+
*/
|
|
16
|
+
[data-manohub-ui] {
|
|
17
|
+
/* 单件令牌 */
|
|
18
|
+
--ui-drawer-radius: 0; /* 整屏高面板不切角;改它才会出现内缘圆角 */
|
|
19
|
+
--ui-drawer-close-size: 28px; /* 关闭件的点击热区(字形 14 居中) */
|
|
20
|
+
/* 与 Dialog 同一份遮罩取值(规范 Mask01 黑 45%):两件并列出现时不该有两种遮罩深度 */
|
|
21
|
+
--ui-drawer-mask: rgba(0, 0, 0, 0.45);
|
|
22
|
+
}
|
|
@@ -1,29 +1,29 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Filter(筛选条):**本件无自有面 —— 零规则**。
|
|
3
|
-
*
|
|
4
|
-
* 它现在是一层**纯壳**:只给 `Form` 传「排布档 + label 列宽(可选)+ 值模型 + 字段区回车」,
|
|
5
|
-
* 字段行的排布与几何**全部沿用 `Form`**:
|
|
6
|
-
*
|
|
7
|
-
* 1. 字段排布 = `Form` 的多列动态档(本件传 `columns="auto"`)—— 网格轨道**跨行共用**,
|
|
8
|
-
* 因此换行下来的字段与上一行**逐列对齐**。从前本件自建 flex 字段区
|
|
9
|
-
* (`flex: 1 1 240px` + `wrap`),而 flex 的 `grow` 是**按行分配**的:末行只剩一项时
|
|
10
|
-
* 它独占该行剩余宽度,被拉成通栏 —— 那正是本件 2026-09 交出机制的起因;
|
|
11
|
-
* 2. label 列宽 / 行距 / 列距 / 字段最小宽 = `Form` 的默认档(令牌 + `.mh-form` 的 8px 档)。
|
|
12
|
-
* 本件**不设默认值、也不落行内值** —— 写死就是第二份默认值,`Form` 调档时不会跟着变;
|
|
13
|
-
* 消费方要收紧筛选条的几何,在容器上覆盖 `Form` 的那两个令牌即可(继承生效);
|
|
14
|
-
* 3. 表头(`Form.Header`)与字段行(`Form.Item`)一律沿用 `Form`,本件不重画任何一个。
|
|
15
|
-
*
|
|
16
|
-
* ## 为什么还留着这个文件(而不是删掉)
|
|
17
|
-
*
|
|
18
|
-
* 「组件与面一一配对」是本包的机械护栏(用例 `contract-class-surface` 要求每个组件目录
|
|
19
|
-
* 都有同名面文件)。本件确实没有自己的类与几何,故这里只留说明文字。它对外的唯一类名是
|
|
20
|
-
* `.mh-filter__form` —— **结构锚点**(消费方与用例靠它定位这个壳,几何沿用 `.mh-form`),
|
|
21
|
-
* 已登记在共用台账「只做结构 / 测试锚点、面上没有样式声明的类」里。
|
|
22
|
-
*
|
|
23
|
-
* ## 与设计稿的关系
|
|
24
|
-
*
|
|
25
|
-
* 稿(Figma「MH后台 0911」node 0:3355,页面「01.1 技能权限分配」的筛选区)只用来确定
|
|
26
|
-
* **筛选条由哪些部件组成**(上行两颗按钮 + 下行若干字段);几何**不再照抄**稿里的
|
|
27
|
-
* 68 / 16 / 24 / 240,自 2026-09 起统一走 `Form` 的默认档 —— 取舍见
|
|
28
|
-
* `components/filter/index.tsx` 的文件头。
|
|
29
|
-
*/
|
|
1
|
+
/**
|
|
2
|
+
* Filter(筛选条):**本件无自有面 —— 零规则**。
|
|
3
|
+
*
|
|
4
|
+
* 它现在是一层**纯壳**:只给 `Form` 传「排布档 + label 列宽(可选)+ 值模型 + 字段区回车」,
|
|
5
|
+
* 字段行的排布与几何**全部沿用 `Form`**:
|
|
6
|
+
*
|
|
7
|
+
* 1. 字段排布 = `Form` 的多列动态档(本件传 `columns="auto"`)—— 网格轨道**跨行共用**,
|
|
8
|
+
* 因此换行下来的字段与上一行**逐列对齐**。从前本件自建 flex 字段区
|
|
9
|
+
* (`flex: 1 1 240px` + `wrap`),而 flex 的 `grow` 是**按行分配**的:末行只剩一项时
|
|
10
|
+
* 它独占该行剩余宽度,被拉成通栏 —— 那正是本件 2026-09 交出机制的起因;
|
|
11
|
+
* 2. label 列宽 / 行距 / 列距 / 字段最小宽 = `Form` 的默认档(令牌 + `.mh-form` 的 8px 档)。
|
|
12
|
+
* 本件**不设默认值、也不落行内值** —— 写死就是第二份默认值,`Form` 调档时不会跟着变;
|
|
13
|
+
* 消费方要收紧筛选条的几何,在容器上覆盖 `Form` 的那两个令牌即可(继承生效);
|
|
14
|
+
* 3. 表头(`Form.Header`)与字段行(`Form.Item`)一律沿用 `Form`,本件不重画任何一个。
|
|
15
|
+
*
|
|
16
|
+
* ## 为什么还留着这个文件(而不是删掉)
|
|
17
|
+
*
|
|
18
|
+
* 「组件与面一一配对」是本包的机械护栏(用例 `contract-class-surface` 要求每个组件目录
|
|
19
|
+
* 都有同名面文件)。本件确实没有自己的类与几何,故这里只留说明文字。它对外的唯一类名是
|
|
20
|
+
* `.mh-filter__form` —— **结构锚点**(消费方与用例靠它定位这个壳,几何沿用 `.mh-form`),
|
|
21
|
+
* 已登记在共用台账「只做结构 / 测试锚点、面上没有样式声明的类」里。
|
|
22
|
+
*
|
|
23
|
+
* ## 与设计稿的关系
|
|
24
|
+
*
|
|
25
|
+
* 稿(Figma「MH后台 0911」node 0:3355,页面「01.1 技能权限分配」的筛选区)只用来确定
|
|
26
|
+
* **筛选条由哪些部件组成**(上行两颗按钮 + 下行若干字段);几何**不再照抄**稿里的
|
|
27
|
+
* 68 / 16 / 24 / 240,自 2026-09 起统一走 `Form` 的默认档 —— 取舍见
|
|
28
|
+
* `components/filter/index.tsx` 的文件头。
|
|
29
|
+
*/
|