savor-ui 0.18.0 → 0.20.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.
Files changed (27) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/es/components/index.mjs +1 -1
  3. package/dist/es/components/src/badge/badge.vue_vue_type_script_setup_true_vapor_true_lang.mjs +2 -2
  4. package/dist/es/components/src/card/card.vue_vue_type_script_setup_true_vapor_true_lang.mjs +39 -32
  5. package/dist/es/components/src/card/index.d.ts +3 -0
  6. package/dist/es/components/src/card/types.d.ts +5 -0
  7. package/dist/es/components/src/carousel/carousel.vue_vue_type_script_setup_true_vapor_true_lang.mjs +6 -6
  8. package/dist/es/components/src/carousel/index.d.ts +1 -1
  9. package/dist/es/components/src/carousel/types.d.ts +2 -2
  10. package/dist/es/components/src/drawer/drawer.vue_vue_type_script_setup_true_vapor_true_lang.mjs +94 -87
  11. package/dist/es/components/src/drawer/index.d.ts +1 -0
  12. package/dist/es/components/src/drawer/types.d.ts +2 -0
  13. package/dist/es/components/src/dropdown/dropdown.vue_vue_type_script_setup_true_vapor_true_lang.mjs +13 -10
  14. package/dist/es/components/src/dropdown/index.d.ts +1 -0
  15. package/dist/es/components/src/dropdown/types.d.ts +2 -0
  16. package/dist/es/components/src/menu/menu.vue_vue_type_script_setup_true_vapor_true_lang.mjs +31 -28
  17. package/dist/es/components/src/menu/sub-menu.vue_vue_type_script_setup_true_vapor_true_lang.mjs +87 -85
  18. package/dist/es/components/src/menu/types.d.ts +2 -1
  19. package/dist/es/core/components.mjs +70 -70
  20. package/dist/es/core/index.mjs +63 -63
  21. package/dist/es/theme/components/card.scss +3 -1
  22. package/dist/es/theme/components/drawer.scss +13 -0
  23. package/dist/es/theme/components/form.scss +1 -0
  24. package/dist/json/vetur-attributes.json +17 -2
  25. package/dist/json/vetur-tags.json +6 -2
  26. package/dist/json/web-types.json +35 -3
  27. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,27 @@
2
2
 
3
3
 
4
4
 
5
+ # [0.20.0](https://gitee.com/mach552/savor-ui/compare/v0.19.0...v0.20.0) (2026-08-10)
6
+
7
+
8
+ ### Features
9
+
10
+ * **drawer:** 新增`desc`属性 ([28ac722](https://gitee.com/mach552/savor-ui/commits/28ac722dfb797062d01512f79092df889e66a4b8))
11
+ * **dropdown:** 新增延迟关闭属性 ([8a563e1](https://gitee.com/mach552/savor-ui/commits/8a563e1731542bf3297ffa595bd8c7953d48234d))
12
+
13
+ # [0.19.0](https://gitee.com/mach552/savor-ui/compare/v0.18.0...v0.19.0) (2026-08-09)
14
+
15
+
16
+ ### Bug Fixes
17
+
18
+ * **menu:** 修复弹层菜单无样式变量的问题 ([96a315a](https://gitee.com/mach552/savor-ui/commits/96a315a59f06ab072835b14e6addb35ad60dcd1b))
19
+
20
+
21
+ ### Features
22
+
23
+ * **card:** 新增边框属性 ([7842ba8](https://gitee.com/mach552/savor-ui/commits/7842ba8774566893065f4ae9f3adac02a38cc506))
24
+ * **card:** 新增标题文本属性 ([fa5c634](https://gitee.com/mach552/savor-ui/commits/fa5c6342a7ae74c7801d061c545a381441e22136))
25
+
5
26
  # [0.18.0](https://gitee.com/mach552/savor-ui/compare/v0.17.0...v0.18.0) (2026-08-08)
6
27
 
7
28
 
@@ -15,6 +15,7 @@ import "./src/auto-complete/index.mjs";
15
15
  import "./src/avatar/index.mjs";
16
16
  import "./src/badge/index.mjs";
17
17
  import "./src/button/index.mjs";
18
+ import "./src/text/index.mjs";
18
19
  import "./src/card/index.mjs";
19
20
  import "./src/carousel/index.mjs";
20
21
  import "./src/empty/index.mjs";
@@ -78,7 +79,6 @@ import "./src/table/types.mjs";
78
79
  import "./src/table/index.mjs";
79
80
  import "./src/tabs/types.mjs";
80
81
  import "./src/tabs/index.mjs";
81
- import "./src/text/index.mjs";
82
82
  import "./src/textarea/index.mjs";
83
83
  import "./src/timeline/types.mjs";
84
84
  import "./src/timeline/index.mjs";
@@ -13,8 +13,8 @@ var m = u("<div>"), h = u("<div> "), g = u("<div>", 1), _ = /*@__PURE__*/ i({
13
13
  },
14
14
  setup(i, { slots: u }) {
15
15
  let _ = i, v = e("badge"), y = t(() => ({
16
- height: "10px",
17
- width: "10px",
16
+ height: "6px",
17
+ width: "6px",
18
18
  ..._.dotStyle
19
19
  })), b = t(() => _.max && _.count > _.max ? `${_.max}+` : _.count), x = g();
20
20
  return a(() => {
@@ -1,9 +1,9 @@
1
1
  import { useNamespace as e } from "../../../hooks/src/use-namespace.mjs";
2
2
  import "../../../hooks/index.mjs";
3
- import t from "../text/text.vue.mjs";
4
- import { child as n, createComponent as r, createIf as i, createSlot as a, defineVaporComponent as o, renderEffect as s, setClass as c, setInsertionState as l, setStyle as u, setText as d, template as f, toDisplayString as p, unref as m } from "vue";
3
+ import { SText as t } from "../text/index.mjs";
4
+ import { child as n, createComponent as r, createIf as i, createSlot as a, defineVaporComponent as o, renderEffect as s, setClass as c, setInsertionState as l, setStyle as u, template as d, unref as f } from "vue";
5
5
  //#region ../components/src/card/card.vue?vue&type=script&setup=true&vapor=true&lang.ts
6
- var h = f("<div>"), g = f(" "), _ = f("<div><div></div>"), v = f("<div><div>", 1), y = /*@__PURE__*/ o({
6
+ var p = d("<div>"), m = d("<div><div></div>"), h = d("<div><div>", 1), g = /*@__PURE__*/ o({
7
7
  name: "SCard",
8
8
  __name: "card",
9
9
  props: {
@@ -11,41 +11,48 @@ var h = f("<div>"), g = f(" "), _ = f("<div><div></div>"), v = f("<div><div>", 1
11
11
  subtitle: {},
12
12
  bar: { type: Boolean },
13
13
  shadow: { default: "never" },
14
- bodyStyle: {}
14
+ bordered: { type: Boolean },
15
+ bodyStyle: {},
16
+ titleProps: {}
15
17
  },
16
- setup(o, { slots: f }) {
17
- let y = e("card"), b = v(), x = n(b, 1);
18
+ setup(o, { slots: d }) {
19
+ let g = e("card"), _ = h(), v = n(_, 1);
18
20
  return s(() => {
19
- let e = m(y);
20
- c(b, [e.b(), e.m(o.shadow)]);
21
- }), l(b, 0, 0), i(() => f.image, () => {
22
- let e = h();
23
- return s(() => c(e, [m(y).e("image")])), l(e, null, 0), a("image"), e;
21
+ let e = f(g);
22
+ c(_, [
23
+ e.b(),
24
+ e.m(o.shadow),
25
+ { [e.m("bordered")]: o.bordered }
26
+ ]);
27
+ }), l(_, 0, 0), i(() => d.image, () => {
28
+ let e = p();
29
+ return s(() => c(e, [f(g).e("image")])), l(e, null, 0), a("image"), e;
24
30
  }), s(() => {
25
- c(x, [m(y).e("body")]), u(x, o.bodyStyle);
26
- }), l(x, null, 0), i(() => f.title || o.title || f.expand, () => {
27
- let e = _(), u = n(e);
31
+ c(v, [f(g).e("body")]), u(v, o.bodyStyle);
32
+ }), l(v, null, 0), i(() => d.title || o.title || d.expand, () => {
33
+ let e = m(), u = n(e);
28
34
  return s(() => {
29
- let t = m(y);
35
+ let t = f(g);
30
36
  c(e, [t.e("header")]), c(u, [t.e("title")]);
31
- }), l(u, null, 0), a("title", null, () => r(t, { bar: () => o.bar }, () => {
32
- let e = g();
33
- return s(() => d(e, p(o.title))), e;
34
- })), l(e, null, 1), i(() => f.expand, () => {
35
- let e = h();
36
- return s(() => c(e, [m(y).e("expand")])), l(e, null, 0), a("expand"), e;
37
+ }), l(u, null, 0), a("title", null, () => r(f(t), { $: [() => ({
38
+ bar: o.bar,
39
+ label: o.title,
40
+ ...o.titleProps
41
+ })] })), l(e, null, 1), i(() => d.expand, () => {
42
+ let e = p();
43
+ return s(() => c(e, [f(g).e("expand")])), l(e, null, 0), a("expand"), e;
37
44
  }), e;
38
- }), l(x, null, 1), i(() => f.subtitle, () => {
39
- let e = h();
40
- return s(() => c(e, [m(y).e("subtitle")])), l(e, null, 0), a("subtitle"), e;
41
- }), l(x, null, 2), i(() => f.default, () => {
42
- let e = h();
43
- return s(() => c(e, [m(y).e("content")])), l(e, null, 0), a(), e;
44
- }), l(x, null, 3), i(() => f.footer, () => {
45
- let e = h();
46
- return s(() => c(e, [m(y).e("footer")])), l(e, null, 0), a("footer"), e;
47
- }), b;
45
+ }), l(v, null, 1), i(() => d.subtitle, () => {
46
+ let e = p();
47
+ return s(() => c(e, [f(g).e("subtitle")])), l(e, null, 0), a("subtitle"), e;
48
+ }), l(v, null, 2), i(() => d.default, () => {
49
+ let e = p();
50
+ return s(() => c(e, [f(g).e("content")])), l(e, null, 0), a(), e;
51
+ }), l(v, null, 3), i(() => d.footer, () => {
52
+ let e = p();
53
+ return s(() => c(e, [f(g).e("footer")])), l(e, null, 0), a("footer"), e;
54
+ }), _;
48
55
  }
49
56
  });
50
57
  //#endregion
51
- export { y as default };
58
+ export { g as default };
@@ -1,5 +1,6 @@
1
1
  import { CardSlots } from './types';
2
2
  import { PublicProps, VNode, Plugin } from 'vue';
3
+ import { TextProps } from '../text';
3
4
  export declare const SCard: ((__VLS_props: NonNullable<Awaited<typeof __VLS_setup>>["props"], __VLS_ctx?: {
4
5
  attrs: any;
5
6
  slots: CardSlots;
@@ -10,7 +11,9 @@ export declare const SCard: ((__VLS_props: NonNullable<Awaited<typeof __VLS_setu
10
11
  subtitle?: string | undefined;
11
12
  bar?: boolean | undefined;
12
13
  shadow?: "always" | "hover" | "never" | undefined;
14
+ bordered?: boolean | undefined;
13
15
  bodyStyle?: Record<string, string> | undefined;
16
+ titleProps?: TextProps | undefined;
14
17
  } & (typeof globalThis extends {
15
18
  __VLS_PROPS_FALLBACK: infer P;
16
19
  } ? P : {});
@@ -1,3 +1,4 @@
1
+ import { TextProps } from '../text';
1
2
  export interface CardProps {
2
3
  /** 卡片标题 */
3
4
  title?: string;
@@ -7,8 +8,12 @@ export interface CardProps {
7
8
  bar?: boolean;
8
9
  /** 卡片阴影 */
9
10
  shadow?: "always" | "hover" | "never";
11
+ /** 卡片边框 */
12
+ bordered?: boolean;
10
13
  /** 卡片内容区域样式 */
11
14
  bodyStyle?: Record<string, string>;
15
+ /** 卡片标题属性 */
16
+ titleProps?: TextProps;
12
17
  }
13
18
  export interface CardSlots {
14
19
  /** 自定义卡片内容 */
@@ -18,7 +18,7 @@ var D = /*@__PURE__*/ u({
18
18
  items: { default: () => [] },
19
19
  autoplay: { type: Boolean },
20
20
  speed: { default: 2e3 },
21
- card: { type: Boolean },
21
+ solid: { type: Boolean },
22
22
  showArrow: { type: Boolean },
23
23
  indicator: {
24
24
  type: Boolean,
@@ -34,13 +34,13 @@ var D = /*@__PURE__*/ u({
34
34
  let d = u, f = t("carousel"), b = C("listRef"), D = S(u, "modelValue"), O = (e) => {
35
35
  b.value && (b.value.style.transform = `translateX(-${e * 100}%)`, b.value.style.transition = "transform 0.3s"), D.value = e;
36
36
  }, k = () => {
37
- if (d.card) D.value--, D.value < 0 && (D.value = 0), console.log(D.value), N();
37
+ if (d.solid) D.value--, D.value < 0 && (D.value = 0), console.log(D.value), N();
38
38
  else {
39
39
  if (!b.value) return;
40
40
  D.value === 0 ? (b.value.style.transition = "none", b.value.style.transform = `translateX(-${d.items.length * 100}%)`, b.value.offsetHeight, O(d.items.length - 1)) : O(D.value - 1);
41
41
  }
42
42
  }, A = () => {
43
- if (d.card) D.value++, D.value > d.items.length - 1 && (D.value = d.items.length - 1), console.log(D.value), N();
43
+ if (d.solid) D.value++, D.value > d.items.length - 1 && (D.value = d.items.length - 1), console.log(D.value), N();
44
44
  else {
45
45
  if (!b.value) return;
46
46
  D.value === d.items.length - 1 ? (b.value.style.transition = "none", b.value.style.transform = "translateX(100%)", b.value.offsetHeight, O(0)) : O(D.value + 1);
@@ -62,14 +62,14 @@ var D = /*@__PURE__*/ u({
62
62
  n.style.zIndex = String(l);
63
63
  }
64
64
  }, P = (e) => {
65
- d.card ? (D.value = e, N()) : O(e);
65
+ d.solid ? (D.value = e, N()) : O(e);
66
66
  }, F = null, I = () => {
67
67
  d.autoplay && (F = setInterval(() => {
68
68
  A();
69
69
  }, d.speed));
70
70
  };
71
71
  p(() => {
72
- d.card ? N() : j(), I();
72
+ d.solid ? N() : j(), I();
73
73
  }), m(() => {
74
74
  clearInterval(F);
75
75
  });
@@ -77,7 +77,7 @@ var D = /*@__PURE__*/ u({
77
77
  return h(() => {
78
78
  let t = x(f), n = u.indicatorPosition;
79
79
  g(R, [t.b(), { [t.m("indicator-position-" + n)]: n === "outside" }]), y(R, { height: x(e)(u.height) }), g(z, [t.e("wrapper")]);
80
- }), _(z, null, 0), s(() => u.card, () => {
80
+ }), _(z, null, 0), s(() => u.solid, () => {
81
81
  let e = T();
82
82
  return h(() => g(e, [x(f).e("list-3d")])), _(e, null, 0), o(() => u.items, (e, t) => {
83
83
  let n = w(), r = i(n);
@@ -10,7 +10,7 @@ export declare const SCarousel: ((__VLS_props: NonNullable<Awaited<typeof __VLS_
10
10
  items: string[];
11
11
  autoplay?: boolean | undefined;
12
12
  speed?: number | undefined;
13
- card?: boolean | undefined;
13
+ solid?: boolean | undefined;
14
14
  showArrow?: boolean | undefined;
15
15
  indicator?: boolean | undefined;
16
16
  indicatorPosition?: "top" | "bottom" | "left" | "right" | "outside" | undefined;
@@ -13,8 +13,8 @@ export interface CarouselProps {
13
13
  * @default 3000
14
14
  */
15
15
  speed?: number;
16
- /** 是否显示为卡片样式 */
17
- card?: boolean;
16
+ /** 是否显示为3D样式 */
17
+ solid?: boolean;
18
18
  /** 是否显示切换箭头 */
19
19
  showArrow?: boolean;
20
20
  /** 是否显示指示器 */
@@ -7,16 +7,16 @@ import "../../../hooks/index.mjs";
7
7
  import i from "../../../icons/src/close.vue.mjs";
8
8
  import "../../../icons/index.mjs";
9
9
  import a from "../button/button.vue.mjs";
10
- import ee from "../scrollbar/scrollbar.vue.mjs";
11
- import { STransition as o } from "../transition/index.mjs";
12
- import { VaporTeleport as te, applyVShow as s, child as c, computed as l, createComponent as u, createIf as d, createInvoker as f, createSlot as p, createTemplateRefSetter as m, defineVaporComponent as h, delegateEvents as g, mergeModels as _, nextTick as v, onMounted as ne, onUnmounted as re, ref as y, renderEffect as b, setClass as x, setInsertionState as S, setStyle as C, setText as w, template as T, toDisplayString as E, txt as D, unref as O, useModel as ie, watch as k, watchEffect as ae } from "vue";
10
+ import o from "../scrollbar/scrollbar.vue.mjs";
11
+ import { STransition as s } from "../transition/index.mjs";
12
+ import { VaporTeleport as c, applyVShow as l, child as u, computed as d, createComponent as f, createIf as p, createInvoker as m, createSlot as h, createTemplateRefSetter as ee, defineVaporComponent as g, delegateEvents as _, mergeModels as v, nextTick as y, onMounted as te, onUnmounted as b, ref as x, renderEffect as S, setClass as C, setInsertionState as w, setStyle as T, setText as E, template as D, toDisplayString as O, txt as k, unref as A, useModel as ne, watch as j, watchEffect as re } from "vue";
13
13
  //#region ../components/src/drawer/drawer.vue?vue&type=script&setup=true&vapor=true&lang.ts
14
- var A = T("<div>"), j = T("<div> "), M = T("<div><div><div></div>");
15
- g("click", "mousedown");
16
- var N = /*@__PURE__*/ h({
14
+ var M = D("<div>"), ie = D("<div> "), ae = D("<div><div> </div>"), oe = D("<div><div><div></div>");
15
+ _("click", "mousedown");
16
+ var N = /*@__PURE__*/ g({
17
17
  name: "SDrawer",
18
18
  __name: "drawer",
19
- props: /*@__PURE__*/ _({
19
+ props: /*@__PURE__*/ v({
20
20
  modelValue: { type: Boolean },
21
21
  closeOnEsc: {
22
22
  type: Boolean,
@@ -40,6 +40,7 @@ var N = /*@__PURE__*/ h({
40
40
  resizable: { type: Boolean },
41
41
  to: { default: "body" },
42
42
  title: {},
43
+ desc: {},
43
44
  header: {
44
45
  type: Boolean,
45
46
  default: !0
@@ -65,7 +66,7 @@ var N = /*@__PURE__*/ h({
65
66
  },
66
67
  modelModifiers: {}
67
68
  }),
68
- emits: /*@__PURE__*/ _([
69
+ emits: /*@__PURE__*/ v([
69
70
  "esc",
70
71
  "maskClick",
71
72
  "open",
@@ -73,45 +74,45 @@ var N = /*@__PURE__*/ h({
73
74
  "close",
74
75
  "closed"
75
76
  ], ["update:modelValue"]),
76
- setup(h, { emit: g }) {
77
- let _ = h, T = g, N = t("drawer"), { nextZIndex: P } = r(), F = y(0), { lockScroll: I, unlockScroll: L } = n(), R = ie(h, "modelValue"), z = y(!1), B = y(!1), V = y(!1), H = y(""), U = y("");
78
- ae(() => {
79
- H.value = e(_.width), U.value = e(_.height);
77
+ setup(g, { emit: _ }) {
78
+ let v = g, D = _, N = t("drawer"), { nextZIndex: P } = r(), F = x(0), { lockScroll: se, unlockScroll: ce } = n(), I = ne(g, "modelValue"), L = x(!1), R = x(!1), z = x(!1), B = x(""), V = x("");
79
+ re(() => {
80
+ B.value = e(v.width), V.value = e(v.height);
80
81
  });
81
- let oe = l(() => ({
82
+ let H = d(() => ({
82
83
  zIndex: F.value,
83
- position: _.to === "body" ? "fixed" : "absolute"
84
- })), W = l(() => {
85
- let e = { ..._.drawerStyle };
86
- return (_.placement === "left" || _.placement === "right") && (e.width = H.value), (_.placement === "top" || _.placement === "bottom") && (e.height = U.value), e;
87
- }), se = () => {
88
- T("opened");
89
- }, ce = () => {
90
- B.value = !1, T("closed"), v(() => {
91
- Z.value && (Z.value.style.transition = "", Z.value.style.transform = ""), L();
84
+ position: v.to === "body" ? "fixed" : "absolute"
85
+ })), U = d(() => {
86
+ let e = { ...v.drawerStyle };
87
+ return (v.placement === "left" || v.placement === "right") && (e.width = B.value), (v.placement === "top" || v.placement === "bottom") && (e.height = V.value), e;
88
+ }), W = () => {
89
+ D("opened");
90
+ }, le = () => {
91
+ R.value = !1, D("closed"), y(() => {
92
+ Z.value && (Z.value.style.transition = "", Z.value.style.transform = ""), ce();
92
93
  });
93
94
  }, G = () => {
94
- R.value = !1, T("close");
95
- }, le = () => {
96
- _.closeOnMask && (G(), T("maskClick"));
97
- }, ue = (e) => {
98
- e.preventDefault(), V.value = !0;
95
+ I.value = !1, D("close");
96
+ }, ue = () => {
97
+ v.closeOnMask && (G(), D("maskClick"));
98
+ }, de = (e) => {
99
+ e.preventDefault(), z.value = !0;
99
100
  }, K = (e) => {
100
- if (V.value) {
101
- if (_.placement === "right" && (H.value = X(window.innerWidth - e.clientX, _.minWidth, _.maxWidth, !0), $(H.value, !0)), _.placement === "left") {
101
+ if (z.value) {
102
+ if (v.placement === "right" && (B.value = X(window.innerWidth - e.clientX, v.minWidth, v.maxWidth, !0), $(B.value, !0)), v.placement === "left") {
102
103
  let t = e.clientX;
103
- H.value = X(t, _.minWidth, _.maxWidth, !0), $(H.value, !0);
104
+ B.value = X(t, v.minWidth, v.maxWidth, !0), $(B.value, !0);
104
105
  }
105
- if (_.placement === "bottom" && (U.value = X(window.innerHeight - e.clientY, _.minHeight, _.maxHeight, !1), $(U.value, !0)), _.placement === "top") {
106
+ if (v.placement === "bottom" && (V.value = X(window.innerHeight - e.clientY, v.minHeight, v.maxHeight, !1), $(V.value, !0)), v.placement === "top") {
106
107
  let t = e.clientY;
107
- U.value = X(t, _.minHeight, _.maxHeight, !1), $(U.value, !0);
108
+ V.value = X(t, v.minHeight, v.maxHeight, !1), $(V.value, !0);
108
109
  }
109
110
  }
110
111
  }, q = () => {
111
- V.value &&= !1;
112
+ z.value &&= !1;
112
113
  }, J = (e) => {
113
- e.key === "Escape" && _.closeOnEsc && R.value && (G(), T("esc"));
114
- }, de = (e) => {
114
+ e.key === "Escape" && v.closeOnEsc && I.value && (G(), D("esc"));
115
+ }, fe = (e) => {
115
116
  let t = String(e).trim().match(/^(\d*\.?\d+)(.*)$/);
116
117
  return t ? {
117
118
  num: parseFloat(t[1]),
@@ -121,7 +122,7 @@ var N = /*@__PURE__*/ h({
121
122
  unit: "px"
122
123
  };
123
124
  }, Y = (e, t) => {
124
- let { num: n, unit: r } = de(e), i = t ? window.innerWidth : window.innerHeight;
125
+ let { num: n, unit: r } = fe(e), i = t ? window.innerWidth : window.innerHeight;
125
126
  switch (r) {
126
127
  case "%":
127
128
  case "vw":
@@ -132,74 +133,80 @@ var N = /*@__PURE__*/ h({
132
133
  }, X = (e, t, n, r) => {
133
134
  let i = Y(t, r), a = Y(n, r);
134
135
  return Math.max(i, Math.min(e, a)) + "px";
135
- }, Z = y(null), Q = () => {
136
- _.to === "body" ? Z.value = document.querySelector("#app") : _.to instanceof HTMLElement ? Z.value = _.to : typeof _.to == "string" && (Z.value = document.querySelector(_.to));
136
+ }, Z = x(null), Q = () => {
137
+ v.to === "body" ? Z.value = document.querySelector("#app") : v.to instanceof HTMLElement ? Z.value = v.to : typeof v.to == "string" && (Z.value = document.querySelector(v.to));
137
138
  }, $ = (e, t) => {
138
- _.push && Z.value && (t ? (Z.value.style.transition = "transform 0.3s var(--s-bezier-out)", _.placement === "left" ? Z.value.style.transform = `translateX(${e})` : _.placement === "right" ? Z.value.style.transform = `translateX(-${e})` : _.placement === "top" ? Z.value.style.transform = `translateY(${e})` : _.placement === "bottom" && (Z.value.style.transform = `translateY(-${e})`)) : (Z.value.style.transition = "transform 0.3s var(--s-bezier-in)", Z.value.style.transform = "translate(0,0)"));
139
+ v.push && Z.value && (t ? (Z.value.style.transition = "transform 0.3s var(--s-bezier-out)", v.placement === "left" ? Z.value.style.transform = `translateX(${e})` : v.placement === "right" ? Z.value.style.transform = `translateX(-${e})` : v.placement === "top" ? Z.value.style.transform = `translateY(${e})` : v.placement === "bottom" && (Z.value.style.transform = `translateY(-${e})`)) : (Z.value.style.transition = "transform 0.3s var(--s-bezier-in)", Z.value.style.transform = "translate(0,0)"));
139
140
  };
140
- k(() => _.to, Q), k(() => R.value, (e) => {
141
- e ? (F.value = P(), I(), B.value = !0, v(() => {
142
- z.value = !0, _.placement === "left" || _.placement === "right" ? $(W.value.width, !0) : (_.placement === "top" || _.placement === "bottom") && $(W.value.height, !0), _.closeOnEsc && (document.removeEventListener("keydown", J), document.addEventListener("keydown", J)), T("open");
143
- })) : (z.value = !1, document.removeEventListener("keydown", J), $("0", !1));
144
- }, { immediate: !0 }), k(() => _.resizable, (e) => {
141
+ j(() => v.to, Q), j(() => I.value, (e) => {
142
+ e ? (F.value = P(), se(), R.value = !0, y(() => {
143
+ L.value = !0, v.placement === "left" || v.placement === "right" ? $(U.value.width, !0) : (v.placement === "top" || v.placement === "bottom") && $(U.value.height, !0), v.closeOnEsc && (document.removeEventListener("keydown", J), document.addEventListener("keydown", J)), D("open");
144
+ })) : (L.value = !1, document.removeEventListener("keydown", J), $("0", !1));
145
+ }, { immediate: !0 }), j(() => v.resizable, (e) => {
145
146
  e ? (window.addEventListener("mousemove", K), window.addEventListener("mouseup", q)) : (window.removeEventListener("mousemove", K), window.removeEventListener("mouseup", q));
146
- }, { immediate: !0 }), ne(() => {
147
+ }, { immediate: !0 }), te(() => {
147
148
  Q();
148
- }), re(() => {
149
+ }), b(() => {
149
150
  document.removeEventListener("keydown", J), window.removeEventListener("mousemove", K), window.removeEventListener("mouseup", q);
150
151
  });
151
- let fe = m();
152
- return u(te, {
153
- to: () => h.to,
152
+ let pe = ee();
153
+ return f(c, {
154
+ to: () => g.to,
154
155
  defer: ""
155
156
  }, () => {
156
- let e = A();
157
- return b(() => {
158
- x(e, [O(N).e("container")]), C(e, oe.value);
159
- }), S(e, null, 0), u(O(o), { type: "opacity" }, () => d(() => h.mask, () => {
160
- let e = A();
161
- return s(e, () => z.value), e.$evtclick = f(le), b(() => {
162
- x(e, [O(N).e("mask")]), C(e, h.maskStyle);
157
+ let e = M();
158
+ return S(() => {
159
+ C(e, [A(N).e("container")]), T(e, H.value);
160
+ }), w(e, null, 0), f(A(s), { type: "opacity" }, () => p(() => g.mask, () => {
161
+ let e = M();
162
+ return l(e, () => L.value), e.$evtclick = m(ue), S(() => {
163
+ C(e, [A(N).e("mask")]), T(e, g.maskStyle);
163
164
  }), e;
164
- }, null, 129)), S(e, null, 1), u(O(o), {
165
+ }, null, 129)), w(e, null, 1), f(A(s), {
165
166
  type: "side",
166
- placement: () => h.placement,
167
- onAfterLeave: () => ce,
168
- onAfterEnter: () => se
167
+ placement: () => g.placement,
168
+ onAfterLeave: () => le,
169
+ onAfterEnter: () => W
169
170
  }, () => {
170
- let e = M(), t = c(e, 1), n = c(t, 1);
171
- return b(() => {
172
- let t = O(N);
173
- x(e, [t.b(), t.m(h.placement)]), C(e, W.value);
174
- }), S(e, 0, 0), d(() => h.resizable, () => {
175
- let e = A();
176
- return e.$evtmousedown = f(ue), b(() => {
177
- let t = O(N);
178
- x(e, [t.e("trigger"), t.is("dragging", V.value)]);
171
+ let e = oe(), t = u(e, 1), n = u(t, 1);
172
+ return S(() => {
173
+ let t = A(N);
174
+ C(e, [t.b(), t.m(g.placement)]), T(e, U.value);
175
+ }), w(e, 0, 0), p(() => g.resizable, () => {
176
+ let e = M();
177
+ return e.$evtmousedown = m(de), S(() => {
178
+ let t = A(N);
179
+ C(e, [t.e("trigger"), t.is("dragging", z.value)]);
179
180
  }), e;
180
- }), b(() => x(t, [O(N).e("wrapper")])), S(t, 0, 0), d(() => h.header, () => {
181
- let e = A();
182
- return b(() => x(e, [O(N).e("header")])), S(e, null, 0), p("header", null, () => {
183
- let e = j(), t = D(e);
184
- return b(() => {
185
- x(e, [O(N).e("title")]), w(t, E(h.title));
181
+ }), S(() => C(t, [A(N).e("wrapper")])), w(t, 0, 0), p(() => g.header, () => {
182
+ let e = M();
183
+ return S(() => C(e, [A(N).e("header")])), w(e, null, 0), h("header", null, () => {
184
+ let e = ae(), t = u(e), n = k(t);
185
+ return S(() => {
186
+ let r = A(N);
187
+ C(e, [r.e("title")]), C(t, r.e("title-text")), E(n, O(g.title));
188
+ }), w(e, null, 1), p(() => g.desc, () => {
189
+ let e = ie(), t = k(e);
190
+ return S(() => {
191
+ C(e, A(N).e("title-desc")), E(t, O(g.desc));
192
+ }), e;
186
193
  }), e;
187
- }), S(e, null, 1), d(() => h.closable, () => u(a, {
194
+ }), w(e, null, 1), p(() => g.closable, () => f(a, {
188
195
  circle: "",
189
196
  text: "",
190
197
  size: "small",
191
198
  onClick: () => G
192
- }, { icon: () => u(O(i)) })), e;
193
- }), b(() => x(n, [O(N).e("body")])), S(n, null, 0), d(() => h.scrollContent, () => u(ee, { $: [() => ({ ...h.scrollbarProps })] }, () => p("default", null, null, 4)), () => {
194
- let e = A();
195
- return b(() => {
196
- x(e, [O(N).e("content")]), C(e, h.bodyStyle);
197
- }), S(e, null, 0), p(), e;
198
- }, 1285), S(t, null, 2), d(() => h.footer, () => {
199
- let e = A();
200
- return b(() => x(e, [O(N).e("footer")])), S(e, null, 0), p("footer"), e;
201
- }), s(e, () => z.value), e;
202
- }), s(e, () => B.value), fe(e, "drawerContainerRef"), e;
199
+ }, { icon: () => f(A(i)) })), e;
200
+ }), S(() => C(n, [A(N).e("body")])), w(n, null, 0), p(() => g.scrollContent, () => f(o, { $: [() => ({ ...g.scrollbarProps })] }, () => h("default", null, null, 4)), () => {
201
+ let e = M();
202
+ return S(() => {
203
+ C(e, [A(N).e("content")]), T(e, g.bodyStyle);
204
+ }), w(e, null, 0), h(), e;
205
+ }, 1541), w(t, null, 2), p(() => g.footer, () => {
206
+ let e = M();
207
+ return S(() => C(e, [A(N).e("footer")])), w(e, null, 0), h("footer"), e;
208
+ }), l(e, () => L.value), e;
209
+ }), l(e, () => R.value), pe(e, "drawerContainerRef"), e;
203
210
  }, !0);
204
211
  }
205
212
  });
@@ -21,6 +21,7 @@ export declare const SDrawer: ((__VLS_props: NonNullable<Awaited<typeof __VLS_se
21
21
  resizable?: boolean | undefined;
22
22
  to?: (string | HTMLElement) | undefined;
23
23
  title?: string | undefined;
24
+ desc?: string | undefined;
24
25
  header?: boolean | undefined;
25
26
  footer?: boolean | undefined;
26
27
  closable?: boolean | undefined;
@@ -28,6 +28,8 @@ export interface DrawerProps {
28
28
  to?: string | HTMLElement;
29
29
  /** 标题 */
30
30
  title?: string;
31
+ /** 标题描述 */
32
+ desc?: string;
31
33
  /** 头部 */
32
34
  header?: boolean;
33
35
  /** 底部 */
@@ -7,27 +7,30 @@ import { createComponent as r, createSlot as i, defineVaporComponent as a, provi
7
7
  var m = d("<div>"), h = d("<div>", 1), g = /*@__PURE__*/ a({
8
8
  name: "SDropdown",
9
9
  __name: "dropdown",
10
- props: { popoverProps: {} },
10
+ props: {
11
+ delayClose: { type: Boolean },
12
+ popoverProps: {}
13
+ },
11
14
  setup(a) {
12
- let d = e("dropdown"), g = p("popoverRef"), _ = null, v = () => {
13
- _ &&= (_(), null);
15
+ let d = a, g = e("dropdown"), _ = p("popoverRef"), v = null, y = () => {
16
+ v &&= (v(), null);
14
17
  };
15
- o(n, { itemClick: () => (g.value?.hide(), new Promise((e) => {
16
- _ = e;
18
+ o(n, { itemClick: () => (_.value?.hide(), new Promise((e) => {
19
+ d.delayClose ? v = e : e();
17
20
  })) });
18
- let y = h();
19
- return s(() => c(y, [f(d).b()])), l(y, null, 0), u(r(f(t), { $: [() => ({
21
+ let b = h();
22
+ return s(() => c(b, [f(g).b()])), l(b, null, 0), u(r(f(t), { $: [() => ({
20
23
  trigger: "click",
21
24
  placement: a.popoverProps?.trigger === "contextmenu" ? "bottom-start" : "bottom",
22
25
  alignPoint: a.popoverProps?.trigger === "contextmenu",
23
26
  ...a.popoverProps
24
- }), { onAfterLeave: () => v }] }, {
27
+ }), { onAfterLeave: () => y }] }, {
25
28
  content: () => {
26
29
  let e = m();
27
- return s(() => c(e, f(d).e("list"))), l(e, null, 0), i("content"), e;
30
+ return s(() => c(e, f(g).e("list"))), l(e, null, 0), i("content"), e;
28
31
  },
29
32
  default: () => i("default", null, null, 4)
30
- }), g, null, "popoverRef"), y;
33
+ }), _, null, "popoverRef"), b;
31
34
  }
32
35
  });
33
36
  //#endregion
@@ -7,6 +7,7 @@ export declare const SDropdown: ((__VLS_props: NonNullable<Awaited<typeof __VLS_
7
7
  emit: {};
8
8
  }, __VLS_exposed?: NonNullable<Awaited<typeof __VLS_setup>>["expose"], __VLS_setup?: Promise<{
9
9
  props: PublicProps & {
10
+ delayClose?: boolean | undefined;
10
11
  popoverProps?: PopoverProps | undefined;
11
12
  } & (typeof globalThis extends {
12
13
  __VLS_PROPS_FALLBACK: infer P;
@@ -1,6 +1,8 @@
1
1
  import { InjectionKey } from 'vue';
2
2
  import { PopoverProps } from '../popover';
3
3
  export interface DropdownProps {
4
+ /** 延迟关闭(用于卸载组件时延迟关闭) */
5
+ delayClose?: boolean;
4
6
  /** 弹出层属性 [PopoverProps](/components/other/popover#popover-props)*/
5
7
  popoverProps?: PopoverProps;
6
8
  }