@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
- * 卡片的**下沿由最后一段补**(面上 `:last-child` 那条规则)——
50
+ * **不给 `padding`**(面上的缺省口径):纵向是「**每段只吃上边**」—— 一段只负责**与自己上方之间的距离**
51
+ * (下一段的上内距就是段间距),卡片的**下沿由最后一段补**(面上 `:last-child` 那条规则)——
52
52
  * 所以 header + body、body + footer 相邻时都不会叠成两份(20 + 20),卡片首末两端又各有一份完整内距。
53
53
  *
54
- * 要收紧某一段给那一段传 `padding`(px 数字或 `{ y, x }`,**缺哪边不覆盖哪边**:
55
- * 这里的 `y` 就是该段的段间距,横向照 `x`);要整卡统一就改令牌 `--mh-card-padding`。
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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) style.paddingTop = `${y}px`;
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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
- /** 这一段的内距(横向 + 段间距):缺省吃组件令牌 `--mh-card-padding`(20px);下边由卡片末段统一补 */
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,
@@ -203,3 +203,7 @@
203
203
  :where([data-manohub-ui]) summary {
204
204
  display: list-item;
205
205
  }
206
+
207
+ :where([data-manohub-ui]) label {
208
+ margin: 0;
209
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@manohub/ui",
3
- "version": "0.8.0",
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.0"
49
+ "@manohub/icon": "^0.8.2"
50
50
  },
51
51
  "devDependencies": {
52
52
  "@types/node": "^24.0.0",