savor-ui 0.14.0 → 0.14.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/CHANGELOG.md CHANGED
@@ -2,6 +2,14 @@
2
2
 
3
3
 
4
4
 
5
+ ## [0.14.1](https://gitee.com/mach552/savor-ui/compare/v0.14.0...v0.14.1) (2026-07-26)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **form:** 修复子组件`labelPosition`无效问题 ([ff76534](https://gitee.com/mach552/savor-ui/commits/ff7653461d61cd7a2e116917dd3960dd05ede902))
11
+ * **radio-group:** 修复大小无效问题 ([a9a9a12](https://gitee.com/mach552/savor-ui/commits/a9a9a1222e9db825b2222ba99b04266dfbd07383))
12
+
5
13
  # [0.14.0](https://gitee.com/mach552/savor-ui/compare/v0.13.1...v0.14.0) (2026-07-26)
6
14
 
7
15
 
@@ -19,6 +19,7 @@ var k = w("<span>"), A = w(" "), j = w("<div><label>"), M = w("<div> "), N = w("
19
19
  rules: {},
20
20
  labelWidth: {},
21
21
  tooltip: {},
22
+ labelPosition: {},
22
23
  labelAlign: {},
23
24
  showRequired: {
24
25
  type: Boolean,
@@ -27,7 +28,7 @@ var k = w("<span>"), A = w(" "), j = w("<div><label>"), M = w("<div> "), N = w("
27
28
  requiredAlign: {}
28
29
  },
29
30
  setup(p, { expose: w }) {
30
- let P = p, F = t("form-item"), I = m(i), L = l(() => I?.labelPosition?.value === "top" ? "" : P.labelWidth || I?.labelWidth?.value), R = l(() => P.labelAlign ? P.labelAlign : I?.labelAlign?.value ? I?.labelAlign?.value : I?.labelPosition?.value === "top" ? "left" : "right"), z = null, B = l(() => {
31
+ let P = p, F = t("form-item"), I = m(i), L = l(() => P.labelPosition ? P.labelPosition : I?.labelPosition?.value ? I?.labelPosition?.value : "left"), ee = l(() => I?.labelPosition?.value === "top" ? "" : P.labelWidth || I?.labelWidth?.value), R = l(() => P.labelAlign ? P.labelAlign : I?.labelAlign?.value ? I?.labelAlign?.value : I?.labelPosition?.value === "top" ? "left" : "right"), z = null, B = l(() => {
31
32
  let e = I?.model?.value;
32
33
  return e && P.field && e[P.field] !== void 0 ? e[P.field] : null;
33
34
  }), V = l(() => {
@@ -81,20 +82,20 @@ var k = w("<span>"), A = w(" "), j = w("<div><label>"), M = w("<div> "), N = w("
81
82
  });
82
83
  let Z = N(), Q = c(Z, 1), $ = c(Q);
83
84
  return y(() => {
84
- let e = D(F), t = H.value, n = D(I), r = t.state;
85
+ let e = D(F), t = H.value, n = t.state;
85
86
  b(Z, [
86
87
  e.b(),
87
- e.is("error", r === "error"),
88
- e.is("success", r === "success"),
88
+ e.is("error", n === "error"),
89
+ e.is("success", n === "success"),
89
90
  e.is("loading", t.loading),
90
- e.is("top", n?.labelPosition?.value === "top"),
91
- e.m(n?.size?.value)
91
+ e.is("top", L.value === "top"),
92
+ e.m(D(I)?.size?.value)
92
93
  ]);
93
94
  }), x(Z, 0, 0), d(() => W.value || p.label || p.tooltip, () => {
94
95
  let t = j(), i = c(t);
95
96
  return y(() => {
96
97
  let n = D(F);
97
- b(t, [n.e("label-wrapper")]), b(i, [n.e("label"), n.m("align-" + R.value)]), S(i, { width: D(e)(L.value) });
98
+ b(t, [n.e("label-wrapper")]), b(i, [n.e("label"), n.m("align-" + R.value)]), S(i, { width: D(e)(ee.value) });
98
99
  }), x(i, null, 0), d(() => G.value === "left", () => [d(() => W.value, () => {
99
100
  let e = k();
100
101
  return y(() => b(e, [D(F).e("required")])), x(e, null, 0), u(D(n)), e;
@@ -52,6 +52,7 @@ export declare const SFormItem: ((__VLS_props: NonNullable<Awaited<typeof __VLS_
52
52
  rules?: FormItemRule[] | undefined;
53
53
  labelWidth?: string | number | undefined;
54
54
  tooltip?: string | undefined;
55
+ labelPosition?: "left" | "top" | undefined;
55
56
  labelAlign?: "left" | "right" | undefined;
56
57
  showRequired?: boolean | undefined;
57
58
  requiredAlign?: "left" | "right" | undefined;
@@ -45,6 +45,8 @@ export interface FormItemProps {
45
45
  labelWidth?: string | number;
46
46
  /** 表单项提示 */
47
47
  tooltip?: string;
48
+ /** 表单项标签位置 */
49
+ labelPosition?: "left" | "top";
48
50
  /** 表单项标签对齐方式 */
49
51
  labelAlign?: "left" | "right";
50
52
  /** 是否显示必填标识 */
@@ -8,7 +8,6 @@ export declare const SRadio: ((__VLS_props: NonNullable<Awaited<typeof __VLS_set
8
8
  props: PublicProps & {
9
9
  label?: string | undefined;
10
10
  value: string | number | boolean;
11
- size?: "mini" | "small" | "medium" | "large" | undefined;
12
11
  disabled?: boolean | undefined;
13
12
  modelValue?: string | number | boolean | undefined;
14
13
  onChange?: ((value: string | number | boolean, e: Event) => any) | undefined;
@@ -34,6 +33,7 @@ export declare const SRadioGroup: ((__VLS_props: NonNullable<Awaited<typeof __VL
34
33
  vertical?: boolean | undefined;
35
34
  button?: boolean | undefined;
36
35
  block?: boolean | undefined;
36
+ size?: "mini" | "small" | "medium" | "large" | undefined;
37
37
  modelValue?: string | number | boolean | undefined;
38
38
  onChange?: ((value: string | number | boolean) => any) | undefined;
39
39
  "onUpdate:modelValue"?: ((value: string | number | boolean) => any) | undefined;
@@ -1,15 +1,17 @@
1
1
  import { useNamespace as e } from "../../../hooks/src/use-namespace.mjs";
2
2
  import "../../../hooks/index.mjs";
3
- import { radioGroupContextKey as t } from "./types.mjs";
4
- import { createSlot as n, defineVaporComponent as r, mergeModels as i, provide as a, renderEffect as o, setClass as s, setInsertionState as c, template as l, toRefs as u, unref as d, useModel as f } from "vue";
3
+ import { useFormItem as t } from "../form/use-form-item.mjs";
4
+ import { radioGroupContextKey as n } from "./types.mjs";
5
+ import { createSlot as r, defineVaporComponent as i, mergeModels as a, provide as o, renderEffect as s, setClass as c, setInsertionState as l, template as u, toRefs as d, unref as f, useModel as p } from "vue";
5
6
  //#region ../components/src/radio/radio-group.vue?vue&type=script&setup=true&vapor=true&lang.ts
6
- var p = l("<div>", 1), m = /*@__PURE__*/ r({
7
+ var m = u("<div>", 1), h = /*@__PURE__*/ i({
7
8
  name: "SRadioGroup",
8
9
  __name: "radio-group",
9
- props: /*@__PURE__*/ i({
10
+ props: /*@__PURE__*/ a({
10
11
  vertical: { type: Boolean },
11
12
  button: { type: Boolean },
12
- block: { type: Boolean }
13
+ block: { type: Boolean },
14
+ size: { default: "medium" }
13
15
  }, {
14
16
  modelValue: {
15
17
  type: [
@@ -21,27 +23,28 @@ var p = l("<div>", 1), m = /*@__PURE__*/ r({
21
23
  },
22
24
  modelModifiers: {}
23
25
  }),
24
- emits: /*@__PURE__*/ i(["change"], ["update:modelValue"]),
25
- setup(r, { emit: i }) {
26
- let l = r, m = i, h = e("radio-group"), g = f(r, "modelValue"), _ = (e) => {
27
- g.value = e, m("change", g.value);
28
- }, { button: v } = u(l);
29
- a(t, {
30
- checked: _,
31
- checkedValue: g,
32
- button: v
26
+ emits: /*@__PURE__*/ a(["change"], ["update:modelValue"]),
27
+ setup(i, { emit: a }) {
28
+ let u = i, h = a, g = e("radio-group"), _ = p(i, "modelValue"), { size: v } = d(u), { mergedSize: y } = t({ size: v }), b = (e) => {
29
+ _.value = e, h("change", _.value);
30
+ }, { button: x } = d(u);
31
+ o(n, {
32
+ checked: b,
33
+ checkedValue: _,
34
+ button: x
33
35
  });
34
- let y = p();
35
- return o(() => {
36
- let e = d(h);
37
- s(y, [
36
+ let S = m();
37
+ return s(() => {
38
+ let e = f(g);
39
+ c(S, [
38
40
  e.b(),
39
- e.is("vertical", r.vertical),
40
- e.is("button", d(v)),
41
- e.is("block", r.block)
41
+ e.is("vertical", i.vertical),
42
+ e.is("button", f(x)),
43
+ e.is("block", i.block),
44
+ e.m(f(y))
42
45
  ]);
43
- }), c(y, null, 0), n(), y;
46
+ }), l(S, null, 0), r(), S;
44
47
  }
45
48
  });
46
49
  //#endregion
47
- export { m as default };
50
+ export { h as default };
@@ -13,7 +13,6 @@ var b = g("<span></span>"), x = g(" "), S = g("<span>"), C = g("<label><input ty
13
13
  Number,
14
14
  Boolean
15
15
  ] },
16
- size: { default: "medium" },
17
16
  disabled: { type: Boolean }
18
17
  }, {
19
18
  modelValue: {
@@ -35,7 +34,6 @@ var b = g("<span></span>"), x = g(" "), S = g("<span>"), C = g("<label><input ty
35
34
  let e = v(E), t = A.value, n = o.disabled;
36
35
  d(M, [
37
36
  e.b(),
38
- e.m(o.size),
39
37
  e.is("checked", t),
40
38
  e.is("button", O.value),
41
39
  e.is("disabled", n)
@@ -4,8 +4,6 @@ export interface RadioProps {
4
4
  label?: string;
5
5
  /** 单选框值 */
6
6
  value: string | number | boolean;
7
- /** 大小 */
8
- size?: "mini" | "small" | "medium" | "large";
9
7
  /** 是否禁用 */
10
8
  disabled?: boolean;
11
9
  }
@@ -28,6 +26,8 @@ export interface RadioGroupProps {
28
26
  button?: boolean;
29
27
  /** 是否块级元素,占满父元素宽度 */
30
28
  block?: boolean;
29
+ /** 大小 */
30
+ size?: "mini" | "small" | "medium" | "large";
31
31
  }
32
32
  export interface RadioGroupEmits {
33
33
  /** 选中状态变化时触发 */
@@ -1,5 +1,6 @@
1
1
  @use "../mixins/function.scss" as *;
2
2
  @use "../mixins/mixins.scss" as *;
3
+ @use "../common/var.scss" as *;
3
4
 
4
5
  @include b(radio) {
5
6
  position: relative;
@@ -122,7 +123,6 @@
122
123
  @include when(button) {
123
124
  background-color: getCssVar("color", "fill-2");
124
125
  padding: 3px;
125
- height: getCssVar("size", "medium");
126
126
  gap: 3px;
127
127
  border-radius: getCssVar("radius", "medium");
128
128
  }
@@ -138,4 +138,17 @@
138
138
  }
139
139
  }
140
140
  }
141
+
142
+ @each $size in $size-list {
143
+ @include m(#{$size}) {
144
+ @include when(button) {
145
+ height: getCssVar("size", $size);
146
+ @include child-b(radio) {
147
+ @include be(radio, label) {
148
+ font-size: getCssVar("font-size", $size);
149
+ }
150
+ }
151
+ }
152
+ }
153
+ }
141
154
  }
@@ -814,6 +814,9 @@
814
814
  "description": "表单项提示",
815
815
  "type": "string"
816
816
  },
817
+ "s-form-item/labelPosition": {
818
+ "description": "表单项标签位置"
819
+ },
817
820
  "s-form-item/labelAlign": {
818
821
  "description": "表单项标签对齐方式"
819
822
  },
@@ -1741,9 +1744,6 @@
1741
1744
  "description": "单选框值",
1742
1745
  "type": "string | number | boolean"
1743
1746
  },
1744
- "s-radio/size": {
1745
- "description": "大小"
1746
- },
1747
1747
  "s-radio/disabled": {
1748
1748
  "description": "是否禁用",
1749
1749
  "type": "boolean"
@@ -1763,6 +1763,9 @@
1763
1763
  "description": "是否块级元素,占满父元素宽度",
1764
1764
  "type": "boolean"
1765
1765
  },
1766
+ "s-radio-group/size": {
1767
+ "description": "大小"
1768
+ },
1766
1769
  "s-scrollbar/scroll": {
1767
1770
  "description": "滚动事件"
1768
1771
  },
@@ -361,6 +361,7 @@
361
361
  "rules",
362
362
  "labelWidth",
363
363
  "tooltip",
364
+ "labelPosition",
364
365
  "labelAlign",
365
366
  "showRequired",
366
367
  "requiredAlign"
@@ -738,7 +739,6 @@
738
739
  "change",
739
740
  "label",
740
741
  "value",
741
- "size",
742
742
  "disabled"
743
743
  ]
744
744
  },
@@ -747,7 +747,8 @@
747
747
  "change",
748
748
  "vertical",
749
749
  "button",
750
- "block"
750
+ "block",
751
+ "size"
751
752
  ]
752
753
  },
753
754
  "s-scrollbar": {
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://raw.githubusercontent.com/JetBrains/web-types/master/schema/web-types.json",
3
3
  "framework": "vue",
4
4
  "name": "savor-ui",
5
- "version": "0.13.1",
5
+ "version": "0.14.0",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "types-syntax": "typescript",
@@ -2198,6 +2198,14 @@
2198
2198
  "kind": "expression"
2199
2199
  }
2200
2200
  },
2201
+ {
2202
+ "name": "labelPosition",
2203
+ "description": "表单项标签位置",
2204
+ "value": {
2205
+ "type": "left | top",
2206
+ "kind": "expression"
2207
+ }
2208
+ },
2201
2209
  {
2202
2210
  "name": "labelAlign",
2203
2211
  "description": "表单项标签对齐方式",
@@ -4558,14 +4566,6 @@
4558
4566
  "kind": "expression"
4559
4567
  }
4560
4568
  },
4561
- {
4562
- "name": "size",
4563
- "description": "大小",
4564
- "value": {
4565
- "type": "mini | small | medium | large",
4566
- "kind": "expression"
4567
- }
4568
- },
4569
4569
  {
4570
4570
  "name": "disabled",
4571
4571
  "description": "是否禁用",
@@ -4618,6 +4618,14 @@
4618
4618
  "type": "boolean",
4619
4619
  "kind": "expression"
4620
4620
  }
4621
+ },
4622
+ {
4623
+ "name": "size",
4624
+ "description": "大小",
4625
+ "value": {
4626
+ "type": "mini | small | medium | large",
4627
+ "kind": "expression"
4628
+ }
4621
4629
  }
4622
4630
  ],
4623
4631
  "events": [
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "savor-ui",
3
- "version": "0.14.0",
3
+ "version": "0.14.1",
4
4
  "description": "A Vue3 Components Library",
5
5
  "keywords": [
6
6
  "component library",