@manohub/ui 0.8.0 → 0.8.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.
|
@@ -42,17 +42,19 @@ export type CardHeaderIcon = string | (() => VNodeChild);
|
|
|
42
42
|
* 几何:图标 36×36(与 `ListView.CardItem` 同一档)、圆角取控件档 6;标题 16/600 单行省略;
|
|
43
43
|
* 副标题 12 + 弱字色,同样单行省略。
|
|
44
44
|
*
|
|
45
|
-
* ##
|
|
45
|
+
* ## 内距:**全部由段承载,根件不出内距**
|
|
46
46
|
*
|
|
47
47
|
* 根件只出面(底 / 描边 / 圆角),既不出内距也不出段间距;内距一律吃在**段**上:
|
|
48
48
|
* `Card.Header` / `Body` / `Footer`(分件)与 `Card` 内建头 / 操作行默认各吃 `--mh-card-padding`(20px)。
|
|
49
49
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
50
|
+
* **不给 `padding`**(面上的缺省口径):纵向是「**每段只吃上边**」—— 一段只负责**与自己上方之间的距离**
|
|
51
|
+
* (下一段的上内距就是段间距),卡片的**下沿由最后一段补**(面上 `:last-child` 那条规则)——
|
|
52
52
|
* 所以 header + body、body + footer 相邻时都不会叠成两份(20 + 20),卡片首末两端又各有一份完整内距。
|
|
53
53
|
*
|
|
54
|
-
*
|
|
55
|
-
*
|
|
54
|
+
* **给了 `padding`**:这一段**整段由消费方定价**(`y` = 上下、`x` = 左右,两维都给时下 `padding: y x` 简写,
|
|
55
|
+
* 只给一维就只落那一维、另一维照旧吃令牌)。行内样式盖过面上那条 `:last-child`,
|
|
56
|
+
* 故**下边也按 `y` 走**(`{ y: 0, x: 16 }` ≡ `padding: 0 16px`,内容贴该段下边)—— 要保留兜底就别传。
|
|
57
|
+
* 要整卡统一就改令牌 `--mh-card-padding`。
|
|
56
58
|
*
|
|
57
59
|
* 直接写内容(`<Card>正文</Card>`)时,**裸子节点会被自动包进一层 `Card.Body`**(与 `Panel` 的简写路径同款),
|
|
58
60
|
* 所以它与显式写 `<Card><Card.Body>正文</Card.Body></Card>` 得到同一份内距。
|
|
@@ -60,7 +62,7 @@ export type CardHeaderIcon = string | (() => VNodeChild);
|
|
|
60
62
|
* ## 三件(`Card.Header` / `Body` / `Footer`)
|
|
61
63
|
*
|
|
62
64
|
* 分件只有内距这一个维度:**不给就走 CSS 默认值**(不额外产生行内 `style`,DOM 与没有该维度时一致)。
|
|
63
|
-
* 分件的 `padding`
|
|
65
|
+
* 分件的 `padding` 语义同上(给了就整段由消费方定价,含下边;不给才吃「只吃上边 + 末段补下沿」的缺省口径)。
|
|
64
66
|
*
|
|
65
67
|
* ## 底部操作行(`actions` 插槽)
|
|
66
68
|
*
|
|
@@ -108,7 +110,7 @@ export interface CardProps {
|
|
|
108
110
|
* 一个位都不给时退化为自排容器:默认插槽内容原样进头容器(`Card.Header` 也仍然是「自己排头」的逃生口)。
|
|
109
111
|
*/
|
|
110
112
|
export declare const CardHeader: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
111
|
-
/**
|
|
113
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
112
114
|
padding: {
|
|
113
115
|
type: PropType<CardPadding>;
|
|
114
116
|
default: undefined;
|
|
@@ -129,7 +131,7 @@ export declare const CardHeader: import("vue").DefineComponent<import("vue").Ext
|
|
|
129
131
|
default: undefined;
|
|
130
132
|
};
|
|
131
133
|
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
132
|
-
/**
|
|
134
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
133
135
|
padding: {
|
|
134
136
|
type: PropType<CardPadding>;
|
|
135
137
|
default: undefined;
|
|
@@ -163,13 +165,13 @@ export declare const CardHeader: import("vue").DefineComponent<import("vue").Ext
|
|
|
163
165
|
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
164
166
|
/** 卡片内容区:撑满剩余高度(卡片被拉伸时才有差别),本身不滚动 —— 滚动归属由所在容器决定 */
|
|
165
167
|
export declare const CardBody: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
166
|
-
/**
|
|
168
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
167
169
|
padding: {
|
|
168
170
|
type: PropType<CardPadding>;
|
|
169
171
|
default: undefined;
|
|
170
172
|
};
|
|
171
173
|
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
172
|
-
/**
|
|
174
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
173
175
|
padding: {
|
|
174
176
|
type: PropType<CardPadding>;
|
|
175
177
|
default: undefined;
|
|
@@ -181,13 +183,13 @@ export declare const CardBody: import("vue").DefineComponent<import("vue").Extra
|
|
|
181
183
|
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
182
184
|
/** 卡片尾部:贴卡片底部(`margin-top: auto`),承载标签 / 统计 / 操作位 */
|
|
183
185
|
export declare const CardFooter: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
184
|
-
/**
|
|
186
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
185
187
|
padding: {
|
|
186
188
|
type: PropType<CardPadding>;
|
|
187
189
|
default: undefined;
|
|
188
190
|
};
|
|
189
191
|
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
190
|
-
/**
|
|
192
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
191
193
|
padding: {
|
|
192
194
|
type: PropType<CardPadding>;
|
|
193
195
|
default: undefined;
|
|
@@ -365,7 +367,7 @@ export declare const Card: {
|
|
|
365
367
|
actions?: () => VNodeChild;
|
|
366
368
|
}>, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & {
|
|
367
369
|
Header: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
368
|
-
/**
|
|
370
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
369
371
|
padding: {
|
|
370
372
|
type: PropType<CardPadding>;
|
|
371
373
|
default: undefined;
|
|
@@ -386,7 +388,7 @@ export declare const Card: {
|
|
|
386
388
|
default: undefined;
|
|
387
389
|
};
|
|
388
390
|
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
389
|
-
/**
|
|
391
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
390
392
|
padding: {
|
|
391
393
|
type: PropType<CardPadding>;
|
|
392
394
|
default: undefined;
|
|
@@ -419,13 +421,13 @@ export declare const Card: {
|
|
|
419
421
|
extra?: () => VNodeChild;
|
|
420
422
|
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
421
423
|
Body: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
422
|
-
/**
|
|
424
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
423
425
|
padding: {
|
|
424
426
|
type: PropType<CardPadding>;
|
|
425
427
|
default: undefined;
|
|
426
428
|
};
|
|
427
429
|
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
428
|
-
/**
|
|
430
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
429
431
|
padding: {
|
|
430
432
|
type: PropType<CardPadding>;
|
|
431
433
|
default: undefined;
|
|
@@ -436,13 +438,13 @@ export declare const Card: {
|
|
|
436
438
|
default?: () => VNodeChild;
|
|
437
439
|
}>, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
438
440
|
Footer: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
439
|
-
/**
|
|
441
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
440
442
|
padding: {
|
|
441
443
|
type: PropType<CardPadding>;
|
|
442
444
|
default: undefined;
|
|
443
445
|
};
|
|
444
446
|
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
445
|
-
/**
|
|
447
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
446
448
|
padding: {
|
|
447
449
|
type: PropType<CardPadding>;
|
|
448
450
|
default: undefined;
|
|
@@ -42,8 +42,16 @@ const mergeSegmentStyle = (attrsStyle, padding) => {
|
|
|
42
42
|
}];
|
|
43
43
|
const y = typeof padding === "number" ? padding : padding.y;
|
|
44
44
|
const x = typeof padding === "number" ? padding : padding.x;
|
|
45
|
+
if (y !== void 0 && x !== void 0) {
|
|
46
|
+
return [attrsStyle, {
|
|
47
|
+
padding: `${y}px ${x}px`
|
|
48
|
+
}];
|
|
49
|
+
}
|
|
45
50
|
const style = {};
|
|
46
|
-
if (y !== void 0)
|
|
51
|
+
if (y !== void 0) {
|
|
52
|
+
style.paddingTop = `${y}px`;
|
|
53
|
+
style.paddingBottom = `${y}px`;
|
|
54
|
+
}
|
|
47
55
|
if (x !== void 0) {
|
|
48
56
|
style.paddingLeft = `${x}px`;
|
|
49
57
|
style.paddingRight = `${x}px`;
|
|
@@ -55,7 +63,7 @@ const CardHeader = /* @__PURE__ */ defineComponent({
|
|
|
55
63
|
name: "CardHeader",
|
|
56
64
|
inheritAttrs: false,
|
|
57
65
|
props: {
|
|
58
|
-
/**
|
|
66
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
59
67
|
padding: {
|
|
60
68
|
type: [Number, Object, String],
|
|
61
69
|
default: void 0
|
|
@@ -97,7 +105,7 @@ const CardBody = /* @__PURE__ */ defineComponent({
|
|
|
97
105
|
name: "CardBody",
|
|
98
106
|
inheritAttrs: false,
|
|
99
107
|
props: {
|
|
100
|
-
/**
|
|
108
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
101
109
|
padding: {
|
|
102
110
|
type: [Number, Object, String],
|
|
103
111
|
default: void 0
|
|
@@ -118,7 +126,7 @@ const CardFooter = /* @__PURE__ */ defineComponent({
|
|
|
118
126
|
name: "CardFooter",
|
|
119
127
|
inheritAttrs: false,
|
|
120
128
|
props: {
|
|
121
|
-
/**
|
|
129
|
+
/** 这一段的内距(`number` = 四边同值;`{ y, x }` = 上下 / 左右):不给时吃组件令牌 `--mh-card-padding`(20px)、下边由末段补;**给了就整段由消费方定价(含下边)** */
|
|
122
130
|
padding: {
|
|
123
131
|
type: [Number, Object, String],
|
|
124
132
|
default: void 0
|
|
@@ -39,6 +39,11 @@
|
|
|
39
39
|
* 段的位置由组件保证(裸内容自动成段、封面不吃内距也不是段),故 `:last-child` 必定落在段上。
|
|
40
40
|
* 4. 横向每段恒吃 `--mh-card-padding`(`padding-inline`)。
|
|
41
41
|
*
|
|
42
|
+
* ⚠️ 以上 2 / 3 / 4 是**不给 `padding` 时的缺省口径**。分件一旦显式传了 `padding`,
|
|
43
|
+
* 组件就落行内样式(`{ y, x }` 两维都给时是 `padding: y x` 简写),**整段四边由消费方定价** ——
|
|
44
|
+
* 行内样式盖过这里的类规则,`:last-child` 那条下沿兜底也随之失效(这是有意的:消费方显式给了就说得清)。
|
|
45
|
+
* 要保留兜底就不要给那一段传 `padding`。
|
|
46
|
+
*
|
|
42
47
|
* 直接写的内容(没包 `Card.Body` 的裸子节点)由组件自动补一层 Body,所以
|
|
43
48
|
* 「不给分件」(`<Card>正文</Card>`)与显式分段得到的是同一套几何。 */
|
|
44
49
|
|
|
@@ -148,7 +153,8 @@
|
|
|
148
153
|
padding-inline: var(--mh-card-padding);
|
|
149
154
|
}
|
|
150
155
|
|
|
151
|
-
/*
|
|
156
|
+
/* 卡片下沿:不给 `padding` 时纵向只吃上边(见上),底边由**最后一段**补,否则内容贴卡片边。
|
|
157
|
+
(传了 `padding` 的段由行内样式接管,这里的兜底对那一段不再生效。) */
|
|
152
158
|
|
|
153
159
|
.mh-card > .mh-card__header:last-child,
|
|
154
160
|
.mh-card > .mh-card__body:last-child,
|
package/dist/styles/reset.css
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@manohub/ui",
|
|
3
|
-
"version": "0.8.
|
|
3
|
+
"version": "0.8.2",
|
|
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.8.
|
|
49
|
+
"@manohub/icon": "^0.8.2"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@types/node": "^24.0.0",
|