@manohub/ui 0.6.0 → 0.6.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.
|
@@ -14,7 +14,7 @@ export interface SearchProps {
|
|
|
14
14
|
clearable?: boolean;
|
|
15
15
|
/** 搜索中:按钮进加载态并吞掉重复点击 */
|
|
16
16
|
loading?: boolean;
|
|
17
|
-
/**
|
|
17
|
+
/** 搜索按钮文案;**不传即不渲染按钮**(只留框内放大镜,提交走回车) */
|
|
18
18
|
searchText?: string;
|
|
19
19
|
/** 值变更回调(每次输入都调,含清空) */
|
|
20
20
|
onChange?: (value: string) => void;
|
|
@@ -24,7 +24,16 @@ export interface SearchProps {
|
|
|
24
24
|
onClear?: () => void;
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
* 搜索框(**自绘**;输入框 +
|
|
27
|
+
* 搜索框(**自绘**;输入框 + 可选搜索触发位的组合件)。
|
|
28
|
+
*
|
|
29
|
+
* ## 默认形态:**一个放大镜**
|
|
30
|
+
*
|
|
31
|
+
* 框内的放大镜(`Input` 的 `prefix` 槽)已经把「这是搜索」这个语义占住了,
|
|
32
|
+
* 所以**不传 `searchText` 时不渲染右侧按钮** —— 否则同一个字形在一行里出现两次,
|
|
33
|
+
* 看着像两个控件,其实一个是装饰、一个是触发,用户无从分辨。
|
|
34
|
+
*
|
|
35
|
+
* 缺省形态的提交走**回车**(`Input` 的 `onEnter` 与 `onSearch` 是同一次语义);
|
|
36
|
+
* 需要「有可点的触发位」时才传 `searchText`,右侧随之出现主色文案按钮。
|
|
28
37
|
*
|
|
29
38
|
* ## 为什么不是 `Input` 的一个档,而是单独一件
|
|
30
39
|
*
|
|
@@ -38,14 +47,14 @@ export interface SearchProps {
|
|
|
38
47
|
* ## 复用而不是重画
|
|
39
48
|
*
|
|
40
49
|
* 输入框那一段**就是本包的 `Input`**(框、内距、清除位、聚焦态、禁用态、`aria-invalid`
|
|
41
|
-
*
|
|
50
|
+
* 全部沿用输入框面),本件只加「一行里怎么摆」与(可选的)搜索按钮 —— 不另写一份输入框几何
|
|
42
51
|
* (两份几何必然在改令牌时漂开)。
|
|
43
52
|
*
|
|
44
53
|
* ## 受控口径(与全库同款)
|
|
45
54
|
*
|
|
46
55
|
* 传 `modelValue` 即受控(`update:modelValue` 与 `onChange` 双走),不传即非受控(由 `defaultValue` 起)。
|
|
47
56
|
*
|
|
48
|
-
* @example
|
|
57
|
+
* @example 最简(框内放大镜 + 回车触发)
|
|
49
58
|
* <Search modelValue={kw} onChange={setKw} onSearch={apply} />
|
|
50
59
|
*
|
|
51
60
|
* @example 带文案的搜索按钮 + 清空动作
|
|
@@ -85,19 +85,17 @@ const Search = /* @__PURE__ */ defineComponent({
|
|
|
85
85
|
prefix: () => createVNode(Icon, {
|
|
86
86
|
"name": "search"
|
|
87
87
|
}, null)
|
|
88
|
-
}), createVNode(Button, {
|
|
88
|
+
}), props.searchText ? createVNode(Button, {
|
|
89
89
|
"class": "mh-search__btn",
|
|
90
|
-
"variant":
|
|
90
|
+
"variant": "primary",
|
|
91
91
|
"size": props.size,
|
|
92
92
|
"icon": "search",
|
|
93
93
|
"disabled": props.disabled,
|
|
94
94
|
"loading": props.loading,
|
|
95
|
-
"title": props.searchText ? void 0 : "搜索",
|
|
96
|
-
"aria-label": props.searchText ? void 0 : "搜索",
|
|
97
95
|
"onClick": search
|
|
98
96
|
}, {
|
|
99
97
|
default: () => props.searchText
|
|
100
|
-
})]);
|
|
98
|
+
}) : null]);
|
|
101
99
|
}
|
|
102
100
|
});
|
|
103
101
|
export {
|
|
@@ -37,7 +37,8 @@ export interface TablePagination {
|
|
|
37
37
|
* ## 这个组件负责什么、不负责什么(都是刻意的)
|
|
38
38
|
*
|
|
39
39
|
* **负责**:把 `columns` × `data` 渲成表格;列对齐/宽度/省略/必填;行选中(勾选列复用本包的 `Checkbox`
|
|
40
|
-
* 组件 —— 它内部才是真实 `<input type="checkbox">`,故面上的 `tr:has(input:checked)`
|
|
40
|
+
* 组件 —— 它内部才是真实 `<input type="checkbox">`,故面上的 `tr:has(.mh-table__col-check input:checked)`
|
|
41
|
+
* 零 JS 路径仍成立;选择器**限定在勾选列内**,否则功能列的 `Switch` 也会把整行点亮);
|
|
41
42
|
* 展开行;排序按钮的**状态与事件**;加载态与空态;分页条的排布与事件透传;
|
|
42
43
|
* `rowClass` / `onRow` 让调用方标分组行、禁用行与挂行级点击。
|
|
43
44
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Search —— 搜索框(输入框 +
|
|
2
|
+
* Search —— 搜索框(输入框 + 可选搜索按钮的**组合件面**)。
|
|
3
3
|
*
|
|
4
4
|
* 本面**只声明「一行里怎么摆」**:输入框那一段的面归 `input.css`(框 / 内距 / 清除位 /
|
|
5
5
|
* 聚焦态 / 禁用态全套复用),搜索按钮的面归 `button.css`。本件因此没有自己的几何令牌,
|
|
@@ -10,6 +10,10 @@
|
|
|
10
10
|
* 必须允许收缩,否则会把同行的搜索按钮挤出容器(窄栏里尤其明显);
|
|
11
11
|
* - 搜索按钮 `flex: none`:它永远是「那么大」,宽度让给输入框。
|
|
12
12
|
*
|
|
13
|
+
* **按钮是可选的**:不传 `searchText` 时本件只渲染输入框(框内的放大镜已占住「搜索」语义,
|
|
14
|
+
* 再出一个同字形的图标按钮就是同一个意思画两遍)。此时 `__btn` 那条摆法规则无对象,
|
|
15
|
+
* 输入框自然占满整行——摆法不用改,缺了按钮也不留空档。
|
|
16
|
+
*
|
|
13
17
|
* **类名与面文件名同根**:`.mh-search*`,一律 `mh-` 前缀。
|
|
14
18
|
*/
|
|
15
19
|
.mh-search {
|
|
@@ -30,11 +30,15 @@
|
|
|
30
30
|
* "没写的边"顶掉,结果就是与表外框叠成 2px、行交界处叠成 2px、还多出列分隔线。
|
|
31
31
|
* 2. **斑马纹是显式类**(`.is-striped`)而非 `:nth-child(even)`:表里可以插分组行,`nth-child` 会整表错位
|
|
32
32
|
* —— 这是规范里唯一允许"用类代替结构选择器"的豁免。
|
|
33
|
-
* 3. **行选中由行内的选择控件驱动**(`tr:has(input:checked)`):这样零 JS 也能选中;
|
|
33
|
+
* 3. **行选中由行内的选择控件驱动**(`tr:has(.mh-table__col-check input:checked)`):这样零 JS 也能选中;
|
|
34
34
|
* 组件态给 `[data-state='selected']`,静态档给 `.is-selected` —— 三源等价。
|
|
35
35
|
* 勾选列复用 `Checkbox` **组件**(不在表格里手写原生 input):该件内部才是真实 `<input type="checkbox">`,
|
|
36
|
-
* 故 `:has(
|
|
36
|
+
* 故 `:has(...)` 这条路径照旧成立;`Checkbox` 的框体带 `data-state`(checked / indeterminate),
|
|
37
37
|
* 半选与选中都走它自己的样式数据,表格这边不再画方块。
|
|
38
|
+
* **选择器必须限定在勾选列内**(`.mh-table__col-check`,勾选列单元格自带的类):不限列时,
|
|
39
|
+
* 功能列里任何「内部本来就是 checkbox」的件都会命中 —— `Switch` 的内部正是 `<input type="checkbox">`,
|
|
40
|
+
* 于是「启用」这类**功能值**会把整行点亮。功能值与行选择语义不同,视觉必须分开(否则一张表里
|
|
41
|
+
* 开关一开就整行变色,且用户无从判断那到底表示什么)。
|
|
38
42
|
* 4. **固定列必须自带底**(`background: var(--ui-base-100)`):它是 sticky 的,不遮挡就会被滚过的单元格透出。
|
|
39
43
|
*
|
|
40
44
|
* **不做**:排序与列宽拖拽的**算法**(规范只给了 `↕` 字形与 3×40 拖拽线这两处视觉),也不做空态/加载态
|
|
@@ -141,10 +145,11 @@
|
|
|
141
145
|
}
|
|
142
146
|
/* 选中态**只有底色**:规范样张里那条 2px 主色下沿(Au01)已去掉 ——
|
|
143
147
|
行线只由单元格底边提供,选中行不再额外压一条线(`box-shadow: inset 0 -2px` 会盖住底边线,
|
|
144
|
-
看起来像"两行线叠在一起")。要恢复下沿就加回 inset 阴影 + 对应令牌。
|
|
148
|
+
看起来像"两行线叠在一起")。要恢复下沿就加回 inset 阴影 + 对应令牌。
|
|
149
|
+
第三条路径限定在勾选列内(见文件头第 3 条):不限列会被功能列的 Switch 命中。 */
|
|
145
150
|
.mh-table tbody tr.is-selected td,
|
|
146
151
|
.mh-table tbody tr[data-state='selected'] td,
|
|
147
|
-
.mh-table tbody tr:has(input:checked) td {
|
|
152
|
+
.mh-table tbody tr:has(.mh-table__col-check input:checked) td {
|
|
148
153
|
background: var(--ui-table-row-selected);
|
|
149
154
|
}
|
|
150
155
|
.mh-table tbody tr.is-disabled td,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manohub/ui",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.1",
|
|
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.6.
|
|
49
|
+
"@manohub/icon": "^0.6.1"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/node": "^24.0.0",
|