savor-ui 0.16.0 → 0.17.0

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,19 @@
2
2
 
3
3
 
4
4
 
5
+ # [0.17.0](https://gitee.com/mach552/savor-ui/compare/v0.16.0...v0.17.0) (2026-08-07)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **cascader:** 修复选项列表更新时不刷新值的问题 ([a31af18](https://gitee.com/mach552/savor-ui/commits/a31af1880ec72b9445b411751f5e628aa992bd42))
11
+ * **grid:** 修复换行会残留间隔的问题 ([9dace33](https://gitee.com/mach552/savor-ui/commits/9dace337a3c5ff6c25d13d49e5ee0554b5a26fc6))
12
+
13
+
14
+ ### Features
15
+
16
+ * **modal:** 添加按钮相关属性 ([3c46e27](https://gitee.com/mach552/savor-ui/commits/3c46e278714fe20280d139879ead9cedd690df37))
17
+
5
18
  # [0.16.0](https://gitee.com/mach552/savor-ui/compare/v0.15.7...v0.16.0) (2026-08-06)
6
19
 
7
20
 
@@ -7,11 +7,11 @@ import { SPopover as r } from "../popover/index.mjs";
7
7
  import { SInput as i } from "../input/index.mjs";
8
8
  import { SEmpty as a } from "../empty/index.mjs";
9
9
  import ee from "./cascader-column.vue.mjs";
10
- import { computed as o, createComponent as s, createComponentWithFallback as c, createIf as te, createInvoker as l, createTemplateRefSetter as u, defineVaporComponent as d, delegateEvents as f, mergeModels as p, on as m, onMounted as h, ref as g, renderEffect as _, resolveComponent as ne, setClass as v, setInsertionState as y, template as b, toRefs as x, unref as S, useModel as C, useTemplateRef as w, watch as T, withModifiers as E, withVaporModifiers as D } from "vue";
10
+ import { computed as o, createComponent as s, createComponentWithFallback as c, createIf as l, createInvoker as u, createTemplateRefSetter as te, defineVaporComponent as d, delegateEvents as f, mergeModels as p, on as m, onMounted as h, ref as g, renderEffect as _, resolveComponent as ne, setClass as v, setInsertionState as y, template as b, toRefs as x, unref as S, useModel as C, useTemplateRef as w, watch as T, withModifiers as E, withVaporModifiers as D } from "vue";
11
11
  //#region ../components/src/cascader/cascader.vue?vue&type=script&setup=true&vapor=true&lang.ts
12
- var re = b("<div style=\"padding: 12px\">"), ie = b("<div>"), ae = b("<div data-skip-blur-validation>"), oe = b("<div>", 1);
12
+ var O = b("<div style=\"padding: 12px\">"), re = b("<div>"), ie = b("<div data-skip-blur-validation>"), ae = b("<div>", 1);
13
13
  f("mousedown", "focusin", "click");
14
- var O = /*@__PURE__*/ d({
14
+ var k = /*@__PURE__*/ d({
15
15
  name: "SCascader",
16
16
  __name: "cascader",
17
17
  props: /*@__PURE__*/ p({
@@ -52,8 +52,8 @@ var O = /*@__PURE__*/ d({
52
52
  "update:expanded"
53
53
  ]),
54
54
  setup(d, { emit: f }) {
55
- let p = d, b = e("cascader"), O = f, k = w("inputRef"), A = C(d, "modelValue"), { size: j, error: M } = x(p), { mergedSize: N, mergedError: P } = n({
56
- size: j,
55
+ let p = d, b = e("cascader"), k = f, A = w("inputRef"), j = C(d, "modelValue"), { size: oe, error: M } = x(p), { mergedSize: N, mergedError: P } = n({
56
+ size: oe,
57
57
  error: M
58
58
  }), F = C(d, "expandedKeys"), I = C(d, "expanded"), L = o(() => ({
59
59
  label: "label",
@@ -63,18 +63,18 @@ var O = /*@__PURE__*/ d({
63
63
  })), R = g(""), z = g([]), B = (e) => p.pathMode ? e.map((e) => e[L.value.key]).join(p.pathSeparator) : e[e.length - 1][L.value.key], V = (e) => e.map((e) => e[L.value.label]).join(p.pathSeparator), H = ({ item: e, expandeds: t, unchecked: n }) => {
64
64
  if (p.multiple) {
65
65
  let r = e[L.value.key], i = z.value.findIndex((e) => e[e.length - 1][L.value.key] === r);
66
- n ? i !== -1 && (z.value = z.value.toSpliced(i, 1)) : i === -1 && (z.value = [...z.value, t]), A.value = z.value.map(B), R.value = z.value.map(V).join(", "), O("selectItem", {
66
+ n ? i !== -1 && (z.value = z.value.toSpliced(i, 1)) : i === -1 && (z.value = [...z.value, t]), j.value = z.value.map(B), R.value = z.value.map(V).join(", "), k("selectItem", {
67
67
  item: e,
68
68
  expandeds: t
69
69
  });
70
70
  return;
71
71
  }
72
- R.value = V(t), A.value = B(t), O("selectItem", {
72
+ R.value = V(t), j.value = B(t), k("selectItem", {
73
73
  item: e,
74
74
  expandeds: t
75
75
  }), K(!1);
76
76
  }, U = () => {
77
- O("expand", F.value);
77
+ k("expand", F.value);
78
78
  }, W = w("popoverRef"), G = g(!1), K = (e) => {
79
79
  G.value = e, e ? W.value?.show() : W.value?.hide();
80
80
  }, se = () => {
@@ -83,7 +83,7 @@ var O = /*@__PURE__*/ d({
83
83
  }, ce = () => {
84
84
  K(!1);
85
85
  }, le = (e) => {
86
- e.target && k.value?.focus();
86
+ e.target && A.value?.focus();
87
87
  }, q = (e, t, n = []) => {
88
88
  for (let r of e) {
89
89
  let e = [...n, r];
@@ -103,12 +103,12 @@ var O = /*@__PURE__*/ d({
103
103
  }
104
104
  return n;
105
105
  }, Y = () => {
106
- if (A.value === void 0 || A.value === "") {
106
+ if (j.value === void 0 || j.value === "") {
107
107
  R.value = "", F.value = [], I.value = [], z.value = [];
108
108
  return;
109
109
  }
110
110
  if (p.multiple) {
111
- z.value = (Array.isArray(A.value) ? A.value : []).map((e) => {
111
+ z.value = (Array.isArray(j.value) ? j.value : []).map((e) => {
112
112
  if (p.pathMode && typeof e == "string") {
113
113
  let t = e.split(p.pathSeparator);
114
114
  return J(p.options, t);
@@ -118,24 +118,26 @@ var O = /*@__PURE__*/ d({
118
118
  return;
119
119
  }
120
120
  let e = null;
121
- if (p.pathMode && typeof A.value == "string") {
122
- let t = A.value.split(p.pathSeparator);
121
+ if (p.pathMode && typeof j.value == "string") {
122
+ let t = j.value.split(p.pathSeparator);
123
123
  e = J(p.options, t);
124
- } else Array.isArray(A.value) || (e = q(p.options, A.value));
124
+ } else Array.isArray(j.value) || (e = q(p.options, j.value));
125
125
  e && (F.value = e.map((e) => e[L.value.key]), I.value = e, R.value = V(e));
126
126
  }, X = (e) => {
127
- A.value === void 0 ? e.forEach((e) => {
127
+ j.value === void 0 ? e.forEach((e) => {
128
128
  F.value.includes(e[L.value.key]) && (R.value = R.value ? `${R.value}${p.pathSeparator}${e[L.value.label]}` : e[L.value.label], e[L.value.children] && X(e[L.value.children]));
129
129
  }) : Y();
130
130
  }, ue = () => {
131
- A.value = p.multiple ? [] : "", F.value = [], I.value = [], z.value = [], R.value = "", O("clear");
131
+ j.value = p.multiple ? [] : "", F.value = [], I.value = [], z.value = [], R.value = "", k("clear");
132
132
  };
133
- T(A, () => {
133
+ T(j, () => {
134
134
  Y();
135
+ }), T(() => p.options, () => {
136
+ j.value !== void 0 && j.value !== "" && Y();
135
137
  }), h(() => {
136
138
  X(p.options);
137
139
  });
138
- let Z = u(), Q = ne("SIcon"), $ = oe();
140
+ let Z = te(), Q = ne("SIcon"), $ = ae();
139
141
  return _(() => v($, [S(b).b()])), y($, null, 0), Z(s(S(r), { $: [() => ({
140
142
  offset: [0, 4],
141
143
  placement: "bottom-start",
@@ -143,12 +145,12 @@ var O = /*@__PURE__*/ d({
143
145
  ...d.popoverProps
144
146
  }), { onClickOutside: () => ce }] }, {
145
147
  content: () => {
146
- let e = ae();
147
- return _(() => v(e, [S(b).e("wrapper")])), y(e, null, 0), te(() => !d.options.length, () => {
148
- let e = re();
148
+ let e = ie();
149
+ return _(() => v(e, [S(b).e("wrapper")])), y(e, null, 0), l(() => !d.options.length, () => {
150
+ let e = O();
149
151
  return y(e, null, 0), s(S(a)), e;
150
152
  }, () => {
151
- let e = ie();
153
+ let e = re();
152
154
  return _(() => v(e, [S(b).e("panel")])), y(e, null, 0), s(ee, {
153
155
  expandTrigger: () => d.expandTrigger,
154
156
  fieldNames: () => d.fieldNames,
@@ -159,14 +161,14 @@ var O = /*@__PURE__*/ d({
159
161
  pathSeparator: () => d.pathSeparator,
160
162
  onClickItem: () => H,
161
163
  onExpand: () => U,
162
- modelValue: () => A.value,
163
- "onUpdate:modelValue": () => (e) => A.value = e,
164
+ modelValue: () => j.value,
165
+ "onUpdate:modelValue": () => (e) => j.value = e,
164
166
  expanded: () => I.value,
165
167
  "onUpdate:expanded": () => (e) => I.value = e,
166
168
  expandedKeys: () => F.value,
167
169
  "onUpdate:expandedKeys": () => (e) => F.value = e
168
170
  }), e;
169
- }, 261), m(e, "click", E(() => {}, ["stop"])), e.$evtmousedown = D(() => {}, ["prevent"]), e.$evtfocusin = l(le), e;
171
+ }, 261), m(e, "click", E(() => {}, ["stop"])), e.$evtmousedown = D(() => {}, ["prevent"]), e.$evtfocusin = u(le), e;
170
172
  },
171
173
  default: () => {
172
174
  let e = s(S(i), {
@@ -185,10 +187,10 @@ var O = /*@__PURE__*/ d({
185
187
  class: () => [S(b).e("suffix-icon")],
186
188
  style: () => ({ transform: G.value ? "rotate(180deg)" : "" })
187
189
  }, () => s(S(t))) });
188
- return Z(e, k, null, "inputRef"), e;
190
+ return Z(e, A, null, "inputRef"), e;
189
191
  }
190
- }), W, null, "popoverRef"), $.$evtclick = l(se), $;
192
+ }), W, null, "popoverRef"), $.$evtclick = u(se), $;
191
193
  }
192
194
  });
193
195
  //#endregion
194
- export { O as default };
196
+ export { k as default };
@@ -12,9 +12,12 @@ var v = p("<div>", 1), y = /*@__PURE__*/ i({
12
12
  },
13
13
  setup(i) {
14
14
  let p = i, y = g("gridItemRef"), b = e("grid"), x = "grid-item-" + h(), S = a(t, {}), C = n(() => {
15
- if (!S?.positionList) return {};
16
- let e = S?.positionList.value[x];
17
- return e ? { gridColumn: `${e.start} / ${e.end}` } : {};
15
+ let e = S?.positionList?.value[x];
16
+ return {
17
+ ...e ? { gridColumn: `${e.start} / ${e.end}` } : {},
18
+ paddingLeft: e?.isFirst ? "0px" : "var(--s-grid-gutter-x, 0px)",
19
+ paddingRight: e?.isLast ? "0px" : "var(--s-grid-gutter-x, 0px)"
20
+ };
18
21
  }), w = () => {
19
22
  S?.addGridItem?.({
20
23
  ...p,
@@ -13,10 +13,12 @@ var m = f("<div>", 1), h = /*@__PURE__*/ a({
13
13
  },
14
14
  setup(a) {
15
15
  let f = a, h = t("grid"), { current: g } = e(), _ = s([]), v = (e, t) => e ? e?.[t] ?? 24 : 24, y = r(() => v(f.cols, g.value)), b = r(() => `repeat(${v(f.cols, g.value)}, 1fr)`), x = r(() => {
16
- let e;
17
- return e = Array.isArray(f.gutter) ? `${f.gutter[1]}px ${f.gutter[0]}px` : `${f.gutter}px`, {
18
- gap: e,
19
- gridTemplateColumns: b.value
16
+ let e = 0, t = 0;
17
+ return Array.isArray(f.gutter) ? (e = f.gutter[0], t = f.gutter[1]) : (e = f.gutter, t = f.gutter), {
18
+ "--s-grid-gutter-x": `${e / 2}px`,
19
+ gridTemplateColumns: b.value,
20
+ rowGap: `${t}px`,
21
+ columnGap: "0px"
20
22
  };
21
23
  });
22
24
  o(n, {
@@ -32,12 +34,16 @@ var m = f("<div>", 1), h = /*@__PURE__*/ a({
32
34
  },
33
35
  positionList: r(() => {
34
36
  let e = 1, t = {}, n = y.value, r = [..._.value].sort((e, t) => e.el && t.el ? e.el.compareDocumentPosition(t.el) & Node.DOCUMENT_POSITION_FOLLOWING ? -1 : 1 : 0);
35
- for (let i of r) {
36
- let { uid: r, span: a = 1, offset: o = 0 } = i, s = e + o, c = s + a;
37
- t[r] = {
38
- start: s,
39
- end: c
40
- }, e = c, e > n && (e = 1);
37
+ for (let i = 0; i < r.length; i++) {
38
+ let { uid: a, span: o = 1, offset: s = 0 } = r[i], c = e + s, l = c + o;
39
+ l > n + 1 && (e = 1, c = e + s, l = c + o);
40
+ let u = c - s === 1, d = r[i + 1], f = !d || l + (d.offset || 0) + (d.span || 1) > n + 1;
41
+ t[a] = {
42
+ start: c,
43
+ end: l,
44
+ isFirst: u,
45
+ isLast: f
46
+ }, e = l;
41
47
  }
42
48
  return t;
43
49
  })
@@ -43,6 +43,8 @@ export interface GridContext {
43
43
  positionList?: ComputedRef<Record<string, {
44
44
  start: number;
45
45
  end: number;
46
+ isFirst: boolean;
47
+ isLast: boolean;
46
48
  }>>;
47
49
  }
48
50
  export declare const gridContextKey: InjectionKey<GridContext>;
@@ -2,6 +2,7 @@ import { useModal } from './method';
2
2
  import { ModalSlots } from './types';
3
3
  import { PublicProps, VNode, ShallowUnwrapRef, Plugin } from 'vue';
4
4
  import { ScrollbarProps } from '../scrollbar';
5
+ import { ButtonProps } from '../button';
5
6
  export declare const SModal: ((__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: {
6
7
  attrs: any;
7
8
  slots: ModalSlots;
@@ -34,6 +35,10 @@ export declare const SModal: ((__VLS_props: NonNullable<Awaited<typeof __VLS_set
34
35
  offset?: number | undefined;
35
36
  scrollContent?: boolean | undefined;
36
37
  scrollbarProps?: ScrollbarProps | undefined;
38
+ confirmBtn?: boolean | undefined;
39
+ confirmProps?: ButtonProps | undefined;
40
+ cancelBtn?: boolean | undefined;
41
+ cancelProps?: ButtonProps | undefined;
37
42
  confirm?: ((done: (status: boolean) => void) => void) | undefined;
38
43
  close?: (() => void) | undefined;
39
44
  closed?: (() => void) | undefined;
@@ -71,6 +71,16 @@ var M = /*@__PURE__*/ f({
71
71
  offset: { default: 120 },
72
72
  scrollContent: { type: Boolean },
73
73
  scrollbarProps: {},
74
+ confirmBtn: {
75
+ type: Boolean,
76
+ default: !0
77
+ },
78
+ confirmProps: {},
79
+ cancelBtn: {
80
+ type: Boolean,
81
+ default: !0
82
+ },
83
+ cancelProps: {},
74
84
  confirm: {},
75
85
  close: {},
76
86
  closed: {},
@@ -210,25 +220,25 @@ var M = /*@__PURE__*/ f({
210
220
  }, 4)), e;
211
221
  }, 1541), b(e, null, 2), u(() => f.footer, () => {
212
222
  let e = k();
213
- return v(() => y(e, [T(N).e("footer")])), b(e, null, 0), d("footer", null, () => u(() => f.btnReverse, () => [l(T(i), {
223
+ return v(() => y(e, [T(N).e("footer")])), b(e, null, 0), d("footer", null, () => u(() => f.btnReverse, () => [u(() => f.confirmBtn, () => l(T(i), { $: [() => ({
214
224
  label: "确定",
215
- loading: () => H.value,
225
+ loading: H.value,
216
226
  type: "primary",
217
- onClick: () => Y
218
- }), l(T(i), {
227
+ ...f.confirmProps
228
+ }), { onClick: () => Y }] }), null, 129), u(() => f.cancelBtn, () => l(T(i), { $: [() => ({
219
229
  label: "取消",
220
- secondary: "",
221
- onClick: () => X
222
- })], () => [l(T(i), {
230
+ secondary: !0,
231
+ ...f.cancelProps
232
+ }), { onClick: () => X }] }), null, 129)], () => [u(() => f.cancelBtn, () => l(T(i), { $: [() => ({
223
233
  label: "取消",
224
- secondary: "",
225
- onClick: () => X
226
- }), l(T(i), {
234
+ secondary: !0,
235
+ ...f.cancelProps
236
+ }), { onClick: () => X }] }), null, 129), u(() => f.confirmBtn, () => l(T(i), { $: [() => ({
227
237
  label: "确定",
228
- loading: () => H.value,
238
+ loading: H.value,
229
239
  type: "primary",
230
- onClick: () => Y
231
- })], 1930)), e;
240
+ ...f.confirmProps
241
+ }), { onClick: () => Y }] }), null, 129)], 2442)), e;
232
242
  }), o(e, () => z.value), $(e, I, null, "modalRef"), e;
233
243
  }), o(e, () => B.value), e;
234
244
  }, !0);
@@ -1,4 +1,5 @@
1
1
  import { VNode } from 'vue';
2
+ import { ButtonProps } from '../button';
2
3
  import { ScrollbarProps } from '../scrollbar';
3
4
  export interface ModalProps {
4
5
  /** 弹窗是否可见(v-model) */
@@ -57,6 +58,14 @@ export interface ModalProps {
57
58
  scrollContent?: boolean;
58
59
  /** 滚动容器属性 */
59
60
  scrollbarProps?: ScrollbarProps;
61
+ /** 是否显示确认按钮 */
62
+ confirmBtn?: boolean;
63
+ /** 确认按钮属性 */
64
+ confirmProps?: ButtonProps;
65
+ /** 是否显示取消按钮 */
66
+ cancelBtn?: boolean;
67
+ /** 取消按钮属性 */
68
+ cancelProps?: ButtonProps;
60
69
  /** 弹窗确认事件,需调用 done 函数关闭弹窗 */
61
70
  confirm?: (done: (status: boolean) => void) => void;
62
71
  /** 弹窗关闭事件 */
@@ -18,6 +18,8 @@
18
18
  border-radius: getCssVar("radius", "circle");
19
19
  }
20
20
  @include e(content) {
21
+ height: 100%;
22
+ width: 100%;
21
23
  line-height: 1.5715;
22
24
  font-weight: 500;
23
25
  display: flex;
@@ -8,5 +8,6 @@
8
8
  grid-template-rows: auto;
9
9
  @include e(item) {
10
10
  display: flex;
11
+ min-width: 0;
11
12
  }
12
13
  }
@@ -1,33 +1,33 @@
1
- @use '../mixins/function.scss' as *;
2
- @use '../mixins/mixins.scss' as *;
1
+ @use "../mixins/function.scss" as *;
2
+ @use "../mixins/mixins.scss" as *;
3
3
 
4
4
  @include b(statistic) {
5
5
  display: inline-flex;
6
6
  flex-direction: column;
7
7
 
8
8
  @include e(title) {
9
- font-size: getCssVar('font-size', 'medium');
10
- color: getCssVar('color', 'text-2');
11
- margin-bottom: 8px;
9
+ font-size: getCssVar("font-size", "medium");
10
+ color: getCssVar("color", "text-2");
11
+ margin-bottom: 4px;
12
12
  }
13
13
  @include e(content) {
14
14
  display: flex;
15
15
  align-items: flex-end;
16
- color: getCssVar('color', 'text-1');
16
+ color: getCssVar("color", "text-1");
17
17
  }
18
18
  @include e(value) {
19
19
  font-size: 24px;
20
20
  white-space: nowrap;
21
21
  }
22
22
  @include e(prefix) {
23
- font-size: getCssVar('font-size', 'medium');
23
+ font-size: getCssVar("font-size", "medium");
24
24
  }
25
25
  @include e(suffix) {
26
- font-size: getCssVar('font-size', 'medium');
26
+ font-size: getCssVar("font-size", "medium");
27
27
  }
28
28
  @include e(extra) {
29
- font-size: getCssVar('font-size', 'medium');
30
- color: getCssVar('color', 'text-2');
31
- margin-top: 8px;
29
+ font-size: getCssVar("font-size", "medium");
30
+ color: getCssVar("color", "text-2");
31
+ margin-top: 4px;
32
32
  }
33
33
  }
@@ -1592,6 +1592,20 @@
1592
1592
  "s-modal/scrollbarProps": {
1593
1593
  "description": "滚动容器属性"
1594
1594
  },
1595
+ "s-modal/confirmBtn": {
1596
+ "description": "是否显示确认按钮",
1597
+ "type": "boolean"
1598
+ },
1599
+ "s-modal/confirmProps": {
1600
+ "description": "确认按钮属性"
1601
+ },
1602
+ "s-modal/cancelBtn": {
1603
+ "description": "是否显示取消按钮",
1604
+ "type": "boolean"
1605
+ },
1606
+ "s-modal/cancelProps": {
1607
+ "description": "取消按钮属性"
1608
+ },
1595
1609
  "s-modal/close": {
1596
1610
  "description": "弹窗关闭事件"
1597
1611
  },
@@ -677,6 +677,10 @@
677
677
  "offset",
678
678
  "scrollContent",
679
679
  "scrollbarProps",
680
+ "confirmBtn",
681
+ "confirmProps",
682
+ "cancelBtn",
683
+ "cancelProps",
680
684
  "close",
681
685
  "closed",
682
686
  "opened"
@@ -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.15.7",
5
+ "version": "0.16.0",
6
6
  "contributions": {
7
7
  "html": {
8
8
  "types-syntax": "typescript",
@@ -4159,6 +4159,38 @@
4159
4159
  "kind": "expression"
4160
4160
  }
4161
4161
  },
4162
+ {
4163
+ "name": "confirmBtn",
4164
+ "description": "是否显示确认按钮",
4165
+ "value": {
4166
+ "type": "boolean",
4167
+ "kind": "expression"
4168
+ }
4169
+ },
4170
+ {
4171
+ "name": "confirmProps",
4172
+ "description": "确认按钮属性",
4173
+ "value": {
4174
+ "type": "ButtonProps",
4175
+ "kind": "expression"
4176
+ }
4177
+ },
4178
+ {
4179
+ "name": "cancelBtn",
4180
+ "description": "是否显示取消按钮",
4181
+ "value": {
4182
+ "type": "boolean",
4183
+ "kind": "expression"
4184
+ }
4185
+ },
4186
+ {
4187
+ "name": "cancelProps",
4188
+ "description": "取消按钮属性",
4189
+ "value": {
4190
+ "type": "ButtonProps",
4191
+ "kind": "expression"
4192
+ }
4193
+ },
4162
4194
  {
4163
4195
  "name": "confirm",
4164
4196
  "description": "弹窗确认事件,需调用 done 函数关闭弹窗",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "savor-ui",
3
- "version": "0.16.0",
3
+ "version": "0.17.0",
4
4
  "description": "A Vue3 Components Library",
5
5
  "keywords": [
6
6
  "component library",