@sdata/web-vue 3.11.0 → 3.13.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 (109) hide show
  1. package/dist/sd.css +147 -15
  2. package/dist/sd.min.css +43 -1
  3. package/es/_components/picker/input-range.vue.d.ts +6 -7
  4. package/es/_components/picker/input-range.vue_vue_type_script_setup_true_lang.js +63 -46
  5. package/es/_components/picker/input.vue.d.ts +5 -6
  6. package/es/_components/picker/input.vue_vue_type_script_setup_true_lang.js +52 -35
  7. package/es/_hooks/use-readonly-tip.d.ts +11 -0
  8. package/es/_hooks/use-readonly-tip.js +66 -0
  9. package/es/auto-complete/auto-complete.d.ts +9 -0
  10. package/es/auto-complete/auto-complete.js +11 -1
  11. package/es/auto-complete/index.d.ts +15 -0
  12. package/es/button/button.vue.d.ts +16 -7
  13. package/es/button/button.vue_vue_type_script_setup_true_lang.js +57 -31
  14. package/es/button/index.d.ts +11 -0
  15. package/es/button/interface.d.ts +2 -0
  16. package/es/card/card.d.ts +312 -0
  17. package/es/card/card.js +39 -7
  18. package/es/card/index.d.ts +616 -0
  19. package/es/card/style/index.css +23 -0
  20. package/es/card/style/index.scss +31 -0
  21. package/es/cascader/cascader.vue.d.ts +9 -8
  22. package/es/cascader/cascader.vue_vue_type_script_setup_true_lang.js +149 -128
  23. package/es/cascader/types.d.ts +1 -0
  24. package/es/color-picker/color-picker.d.ts +9 -0
  25. package/es/color-picker/color-picker.js +33 -11
  26. package/es/color-picker/index.d.ts +15 -0
  27. package/es/config-provider/context.d.ts +9 -9
  28. package/es/copy/copy.vue_vue_type_script_setup_true_lang.js +1 -1
  29. package/es/date-picker/index.d.ts +3 -6
  30. package/es/date-picker/picker.vue.d.ts +2 -3
  31. package/es/date-picker/picker.vue_vue_type_script_setup_true_lang.js +5 -5
  32. package/es/date-picker/range-picker.vue.d.ts +2 -3
  33. package/es/date-picker/range-picker.vue_vue_type_script_setup_true_lang.js +4 -4
  34. package/es/drawer/drawer.vue_vue_type_script_setup_true_lang.js +3 -3
  35. package/es/empty/empty.js +1 -1
  36. package/es/file-previewer/file-previewer.vue_vue_type_script_setup_true_lang.js +1 -1
  37. package/es/image/image.vue_vue_type_script_setup_true_lang.js +1 -1
  38. package/es/image/preview-action.d.ts +7 -127
  39. package/es/image/preview.vue_vue_type_script_setup_true_lang.js +2 -2
  40. package/es/index.css +147 -15
  41. package/es/index.js +3 -3
  42. package/es/input/index.d.ts +6 -6
  43. package/es/input/input.d.ts +3 -3
  44. package/es/input/input.js +18 -6
  45. package/es/input-number/index.d.ts +9 -9
  46. package/es/input-number/input-number.d.ts +5 -5
  47. package/es/input-number/input-number.js +8 -8
  48. package/es/input-tag/index.d.ts +6 -6
  49. package/es/input-tag/input-tag.d.ts +3 -3
  50. package/es/input-tag/input-tag.js +16 -7
  51. package/es/locale/interface.d.ts +1 -0
  52. package/es/locale/lang/en-us.js +1 -0
  53. package/es/locale/lang/zh-cn.js +1 -0
  54. package/es/locale/lang/zh-tw.js +1 -0
  55. package/es/mention/index.d.ts +15 -0
  56. package/es/mention/mention.d.ts +9 -0
  57. package/es/mention/mention.js +12 -1
  58. package/es/menu/base-menu.vue_vue_type_script_setup_true_lang.js +1 -1
  59. package/es/modal/modal.vue_vue_type_script_setup_true_lang.js +3 -3
  60. package/es/pagination/pagination.js +1 -1
  61. package/es/popconfirm/popconfirm.vue_vue_type_script_setup_true_lang.js +2 -2
  62. package/es/popover/popover.vue_vue_type_script_setup_true_lang.js +1 -1
  63. package/es/rate/index.d.ts +6 -6
  64. package/es/rate/rate.d.ts +3 -3
  65. package/es/rate/rate.js +17 -7
  66. package/es/scrollbar/scrollbar.vue_vue_type_script_setup_true_lang.js +1 -1
  67. package/es/scrollbar/style/index.css +57 -15
  68. package/es/scrollbar/style/index.scss +63 -15
  69. package/es/sd-vue.js +3 -3
  70. package/es/secret/secret.vue_vue_type_script_setup_true_lang.js +1 -1
  71. package/es/select/index.d.ts +15 -0
  72. package/es/select/select.d.ts +9 -0
  73. package/es/select/select.js +28 -5
  74. package/es/style/normalize.scss +68 -0
  75. package/es/table/table-th.js +2 -2
  76. package/es/tabs/context.d.ts +2 -0
  77. package/es/tabs/index.d.ts +32 -0
  78. package/es/tabs/style/index.css +29 -0
  79. package/es/tabs/style/index.scss +38 -0
  80. package/es/tabs/tab-pane.vue.d.ts +4 -2
  81. package/es/tabs/tab-pane.vue_vue_type_script_setup_true_lang.js +19 -3
  82. package/es/tabs/tabs.d.ts +19 -0
  83. package/es/tabs/tabs.js +23 -2
  84. package/es/textarea/index.d.ts +15 -0
  85. package/es/textarea/textarea.vue.d.ts +11 -2
  86. package/es/textarea/textarea.vue_vue_type_script_setup_true_lang.js +71 -46
  87. package/es/time-picker/index.d.ts +3 -6
  88. package/es/time-picker/panel.vue_vue_type_script_setup_true_lang.js +1 -1
  89. package/es/time-picker/time-picker.vue.d.ts +2 -3
  90. package/es/time-picker/time-picker.vue_vue_type_script_setup_true_lang.js +8 -5
  91. package/es/toolbar/toolbar.vue_vue_type_script_setup_true_lang.js +1 -1
  92. package/es/tooltip/index.d.ts +8 -127
  93. package/es/tooltip/interface.d.ts +17 -0
  94. package/es/tooltip/tooltip.vue.d.ts +5 -88
  95. package/es/tooltip/tooltip.vue_vue_type_script_setup_true_lang.js +8 -69
  96. package/es/tour/tour.vue_vue_type_script_setup_true_lang.js +1 -1
  97. package/es/tree/tree.vue_vue_type_script_setup_true_lang.js +1 -1
  98. package/es/tree-select/tree-select.vue.d.ts +16 -10
  99. package/es/tree-select/tree-select.vue_vue_type_script_setup_true_lang.js +156 -133
  100. package/es/typography/base.js +1 -1
  101. package/es/upload/upload-button.js +1 -1
  102. package/es/verification-code/index.d.ts +15 -6
  103. package/es/verification-code/verification-code.d.ts +9 -3
  104. package/es/verification-code/verification-code.js +4 -1
  105. package/json/vetur-attributes.json +48 -7
  106. package/json/vetur-tags.json +17 -5
  107. package/json/web-types.json +99 -10
  108. package/package.json +1 -1
  109. package/es/style/base.scss +0 -18
@@ -5,8 +5,9 @@ import { getPrefixCls } from "../_utils/global-config.js";
5
5
  import { isString } from "../_utils/is.js";
6
6
  import IconLoading from "../icon/icon-loading/index.js";
7
7
  import { useSize } from "../_hooks/use-size.js";
8
+ import Tooltip from "../tooltip/index.js";
8
9
  import { buttonGroupInjectionKey } from "./context.js";
9
- import { computed, createBlock, createCommentVNode, createElementBlock, defineComponent, inject, normalizeClass, onMounted, onUpdated, openBlock, ref, renderSlot, toRefs, unref } from "vue";
10
+ import { computed, createBlock, createCommentVNode, createElementBlock, createSlots, defineComponent, guardReactiveProps, inject, normalizeClass, normalizeProps, onMounted, onUpdated, openBlock, ref, renderSlot, resolveDynamicComponent, toRefs, unref, useSlots, withCtx } from "vue";
10
11
  //#region components/button/button.vue?vue&type=script&setup=true&lang.ts
11
12
  var _hoisted_1 = ["href"];
12
13
  var _hoisted_2 = { key: 2 };
@@ -94,7 +95,12 @@ var button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
94
95
  * @zh 设置跳转链接。设置此属性时,按钮渲染为a标签。
95
96
  * @en Set up a jump link. When this property is set, the button is rendered as `<a>`
96
97
  */
97
- href: String
98
+ href: String,
99
+ /**
100
+ * @zh 按钮的文字气泡配置。传入字符串时作为气泡内容;传入对象时可完整继承 Tooltip 的所有属性。
101
+ * @en Tooltip configuration for the button. A string is used as the tooltip content; an object inherits all Tooltip props.
102
+ */
103
+ tooltip: { type: [String, Object] }
98
104
  },
99
105
  emits: ["click"],
100
106
  setup(__props, { emit: __emit }) {
@@ -108,6 +114,19 @@ var button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
108
114
  */
109
115
  const { size, disabled } = toRefs(props);
110
116
  const prefixCls = getPrefixCls("btn");
117
+ const PassThrough = (_, { slots: passSlots }) => {
118
+ var _passSlots$default;
119
+ return (_passSlots$default = passSlots.default) === null || _passSlots$default === void 0 ? void 0 : _passSlots$default.call(passSlots);
120
+ };
121
+ const slots = useSlots();
122
+ const hasTooltip = computed(() => props.tooltip != null || Boolean(slots.tooltip));
123
+ const tooltipWrapper = computed(() => hasTooltip.value ? Tooltip : PassThrough);
124
+ const tooltipBindings = computed(() => {
125
+ if (!hasTooltip.value) return;
126
+ const tooltip = props.tooltip;
127
+ if (isString(tooltip)) return { content: tooltip };
128
+ return tooltip !== null && tooltip !== void 0 ? tooltip : {};
129
+ });
111
130
  const configContext = inject(configProviderInjectionKey, void 0);
112
131
  const groupContext = inject(buttonGroupInjectionKey, void 0);
113
132
  const autoInsertSpaceInButton = computed(() => Boolean(configContext === null || configContext === void 0 ? void 0 : configContext.autoInsertSpaceInButton));
@@ -159,35 +178,42 @@ var button_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineCom
159
178
  emit("click", ev);
160
179
  };
161
180
  return (_ctx, _cache) => {
162
- return __props.href ? (openBlock(), createElementBlock("a", {
163
- key: 0,
164
- ref_key: "buttonRef",
165
- ref: buttonRef,
166
- class: normalizeClass([cls.value, { [`${unref(prefixCls)}-only-icon`]: _ctx.$slots.icon && !_ctx.$slots.default }]),
167
- href: unref(mergedDisabled) || __props.loading ? void 0 : __props.href,
168
- onClick: handleClick
169
- }, [__props.loading || _ctx.$slots.icon ? (openBlock(), createElementBlock("span", {
170
- key: 0,
171
- class: normalizeClass(`${unref(prefixCls)}-icon`)
172
- }, [__props.loading ? (openBlock(), createBlock(unref(IconLoading), {
173
- key: 0,
174
- spin: ""
175
- })) : renderSlot(_ctx.$slots, "icon", { key: 1 })], 2)) : createCommentVNode("", true), !isTwoCNChar.value ? renderSlot(_ctx.$slots, "default", { key: 1 }) : (openBlock(), createElementBlock("span", _hoisted_2, [renderSlot(_ctx.$slots, "default")]))], 10, _hoisted_1)) : (openBlock(), createElementBlock("button", {
176
- key: 1,
177
- ref_key: "buttonRef",
178
- ref: buttonRef,
179
- class: normalizeClass([cls.value, { [`${unref(prefixCls)}-only-icon`]: _ctx.$slots.icon && !_ctx.$slots.default }]),
180
- type: __props.htmlType,
181
- disabled: unref(mergedDisabled),
182
- autofocus: __props.autofocus,
183
- onClick: handleClick
184
- }, [__props.loading || _ctx.$slots.icon ? (openBlock(), createElementBlock("span", {
185
- key: 0,
186
- class: normalizeClass(`${unref(prefixCls)}-icon`)
187
- }, [__props.loading ? (openBlock(), createBlock(unref(IconLoading), {
188
- key: 0,
189
- spin: true
190
- })) : renderSlot(_ctx.$slots, "icon", { key: 1 })], 2)) : createCommentVNode("", true), !isTwoCNChar.value ? renderSlot(_ctx.$slots, "default", { key: 1 }) : (openBlock(), createElementBlock("span", _hoisted_4, [renderSlot(_ctx.$slots, "default")]))], 10, _hoisted_3));
181
+ return openBlock(), createBlock(resolveDynamicComponent(tooltipWrapper.value), normalizeProps(guardReactiveProps(tooltipBindings.value)), createSlots({
182
+ default: withCtx(() => [__props.href ? (openBlock(), createElementBlock("a", {
183
+ key: 0,
184
+ ref_key: "buttonRef",
185
+ ref: buttonRef,
186
+ class: normalizeClass([cls.value, { [`${unref(prefixCls)}-only-icon`]: _ctx.$slots.icon && !_ctx.$slots.default }]),
187
+ href: unref(mergedDisabled) || __props.loading ? void 0 : __props.href,
188
+ onClick: handleClick
189
+ }, [__props.loading || _ctx.$slots.icon ? (openBlock(), createElementBlock("span", {
190
+ key: 0,
191
+ class: normalizeClass(`${unref(prefixCls)}-icon`)
192
+ }, [__props.loading ? (openBlock(), createBlock(unref(IconLoading), {
193
+ key: 0,
194
+ spin: ""
195
+ })) : renderSlot(_ctx.$slots, "icon", { key: 1 })], 2)) : createCommentVNode("", true), !isTwoCNChar.value ? renderSlot(_ctx.$slots, "default", { key: 1 }) : (openBlock(), createElementBlock("span", _hoisted_2, [renderSlot(_ctx.$slots, "default")]))], 10, _hoisted_1)) : (openBlock(), createElementBlock("button", {
196
+ key: 1,
197
+ ref_key: "buttonRef",
198
+ ref: buttonRef,
199
+ class: normalizeClass([cls.value, { [`${unref(prefixCls)}-only-icon`]: _ctx.$slots.icon && !_ctx.$slots.default }]),
200
+ type: __props.htmlType,
201
+ disabled: unref(mergedDisabled),
202
+ autofocus: __props.autofocus,
203
+ onClick: handleClick
204
+ }, [__props.loading || _ctx.$slots.icon ? (openBlock(), createElementBlock("span", {
205
+ key: 0,
206
+ class: normalizeClass(`${unref(prefixCls)}-icon`)
207
+ }, [__props.loading ? (openBlock(), createBlock(unref(IconLoading), {
208
+ key: 0,
209
+ spin: true
210
+ })) : renderSlot(_ctx.$slots, "icon", { key: 1 })], 2)) : createCommentVNode("", true), !isTwoCNChar.value ? renderSlot(_ctx.$slots, "default", { key: 1 }) : (openBlock(), createElementBlock("span", _hoisted_4, [renderSlot(_ctx.$slots, "default")]))], 10, _hoisted_3))]),
211
+ _: 2
212
+ }, [_ctx.$slots.tooltip ? {
213
+ name: "content",
214
+ fn: withCtx(() => [renderSlot(_ctx.$slots, "tooltip")]),
215
+ key: "0"
216
+ } : void 0]), 1040);
191
217
  };
192
218
  }
193
219
  }));
@@ -40,6 +40,9 @@ declare const Button: {
40
40
  default: boolean;
41
41
  };
42
42
  href: StringConstructor;
43
+ tooltip: {
44
+ type: import("vue").PropType<string | import("../tooltip/interface.ts").TooltipProps>;
45
+ };
43
46
  }>> & Readonly<{
44
47
  onClick?: ((_ev: MouseEvent) => any) | undefined;
45
48
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
@@ -95,6 +98,9 @@ declare const Button: {
95
98
  default: boolean;
96
99
  };
97
100
  href: StringConstructor;
101
+ tooltip: {
102
+ type: import("vue").PropType<string | import("../tooltip/interface.ts").TooltipProps>;
103
+ };
98
104
  }>> & Readonly<{
99
105
  onClick?: ((_ev: MouseEvent) => any) | undefined;
100
106
  }>, {}, {}, {}, {}, {
@@ -145,6 +151,9 @@ declare const Button: {
145
151
  default: boolean;
146
152
  };
147
153
  href: StringConstructor;
154
+ tooltip: {
155
+ type: import("vue").PropType<string | import("../tooltip/interface.ts").TooltipProps>;
156
+ };
148
157
  }>> & Readonly<{
149
158
  onClick?: ((_ev: MouseEvent) => any) | undefined;
150
159
  }>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
@@ -169,6 +178,8 @@ declare const Button: {
169
178
  default?: (props: {}) => any;
170
179
  } & {
171
180
  default?: (props: {}) => any;
181
+ } & {
182
+ tooltip?: (props: {}) => any;
172
183
  };
173
184
  }) & {
174
185
  Group: {
@@ -1,3 +1,4 @@
1
+ import type { TooltipProps } from '../tooltip';
1
2
  import { Size, Status, BorderShape } from '../_utils/constant';
2
3
  import { ButtonTypes } from './constants';
3
4
  export interface ButtonProps {
@@ -12,4 +13,5 @@ export interface ButtonProps {
12
13
  htmlType?: 'button' | 'submit' | 'reset';
13
14
  autofocus?: boolean;
14
15
  href?: string;
16
+ tooltip?: string | TooltipProps;
15
17
  }
package/es/card/card.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { PropType, CSSProperties } from 'vue';
2
+ import { type ScrollbarProps } from '../scrollbar';
2
3
  declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
3
4
  bordered: {
4
5
  type: BooleanConstructor;
@@ -29,6 +30,14 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
29
30
  extra: {
30
31
  type: StringConstructor;
31
32
  };
33
+ fullHeight: {
34
+ type: BooleanConstructor;
35
+ default: boolean;
36
+ };
37
+ scrollbar: {
38
+ type: PropType<boolean | ScrollbarProps>;
39
+ default: boolean;
40
+ };
32
41
  }>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
33
42
  bordered: {
34
43
  type: BooleanConstructor;
@@ -59,12 +68,22 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
59
68
  extra: {
60
69
  type: StringConstructor;
61
70
  };
71
+ fullHeight: {
72
+ type: BooleanConstructor;
73
+ default: boolean;
74
+ };
75
+ scrollbar: {
76
+ type: PropType<boolean | ScrollbarProps>;
77
+ default: boolean;
78
+ };
62
79
  }>> & Readonly<{}>, {
80
+ scrollbar: boolean | ScrollbarProps;
63
81
  loading: boolean;
64
82
  bordered: boolean;
65
83
  hoverable: boolean;
66
84
  bodyStyle: CSSProperties;
67
85
  headerStyle: CSSProperties;
86
+ fullHeight: boolean;
68
87
  }, {}, {
69
88
  Spin: {
70
89
  new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import("vue").ExtractPropTypes<{
@@ -126,5 +145,298 @@ declare const _default: import("vue").DefineComponent<import("vue").ExtractPropT
126
145
  }, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & {
127
146
  install: (app: import("vue").App, options?: import("../_utils/types").SDOptions) => void;
128
147
  };
148
+ Scrollbar: {
149
+ new (...args: any[]): import("vue").CreateComponentPublicInstanceWithMixins<Readonly<import("vue").ExtractPropTypes<{
150
+ type: {
151
+ type: PropType<"track" | "embed">;
152
+ default: string;
153
+ };
154
+ outerClass: (ObjectConstructor | StringConstructor | ArrayConstructor)[];
155
+ outerStyle: {
156
+ type: PropType<import("vue").StyleValue>;
157
+ };
158
+ paddingAbsolute: {
159
+ type: PropType<ScrollbarProps["paddingAbsolute"]>;
160
+ default: undefined;
161
+ };
162
+ showNativeOverlaidScrollbars: {
163
+ type: PropType<ScrollbarProps["showNativeOverlaidScrollbars"]>;
164
+ default: undefined;
165
+ };
166
+ updateOptions: {
167
+ type: PropType<ScrollbarProps["updateOptions"]>;
168
+ };
169
+ overflow: {
170
+ type: PropType<ScrollbarProps["overflow"]>;
171
+ };
172
+ scrollbars: {
173
+ type: PropType<ScrollbarProps["scrollbars"]>;
174
+ };
175
+ overlayOptions: {
176
+ type: PropType<ScrollbarProps["overlayOptions"]>;
177
+ };
178
+ events: {
179
+ type: PropType<ScrollbarProps["events"]>;
180
+ };
181
+ hide: {
182
+ type: BooleanConstructor;
183
+ default: boolean;
184
+ };
185
+ disableHorizontal: {
186
+ type: BooleanConstructor;
187
+ default: boolean;
188
+ };
189
+ disableVertical: {
190
+ type: BooleanConstructor;
191
+ default: boolean;
192
+ };
193
+ }>> & Readonly<{
194
+ onScroll?: ((_ev: Event) => any) | undefined;
195
+ }>, {
196
+ getOSInstance: () => {
197
+ options: {
198
+ (): import("overlayscrollbars").Options;
199
+ (newOptions: import("overlayscrollbars").PartialOptions, pure?: boolean): import("overlayscrollbars").Options;
200
+ };
201
+ on: {
202
+ (eventListeners: import("overlayscrollbars").EventListeners, pure?: boolean): () => void;
203
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>): () => void;
204
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>[]): () => void;
205
+ };
206
+ off: {
207
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>): void;
208
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>[]): void;
209
+ };
210
+ update: (force?: boolean) => boolean;
211
+ sleep: (sleeping: boolean) => void;
212
+ state: () => import("overlayscrollbars").State;
213
+ elements: () => import("overlayscrollbars").Elements;
214
+ destroy: () => void;
215
+ plugin: <P extends import("overlayscrollbars").InstancePlugin>(osPlugin: P) => import("overlayscrollbars").InferInstancePluginModuleInstance<P> | undefined;
216
+ } | null;
217
+ options: (newOptions?: ScrollbarProps["overlayOptions"], pure?: boolean) => import("overlayscrollbars").Options | undefined;
218
+ on: (nameOrListeners: keyof import("overlayscrollbars").EventListenerArgs | import("overlayscrollbars").EventListeners, listenerOrPure?: import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs> | import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs>[] | boolean) => (() => void) | undefined;
219
+ off: (name: keyof import("overlayscrollbars").EventListenerArgs, listener: import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs> | import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs>[]) => void;
220
+ update: (force?: boolean) => boolean;
221
+ sleep: (sleeping: boolean) => void;
222
+ state: () => import("overlayscrollbars").State | undefined;
223
+ elements: () => import("overlayscrollbars").Elements | undefined;
224
+ plugin: (osPlugin: import("..").ScrollbarPlugin) => void | import("overlayscrollbars").PluginModuleInstance | undefined;
225
+ destroy: () => void;
226
+ scrollTo: (options?: number | {
227
+ left?: number;
228
+ top?: number;
229
+ }, y?: number) => void;
230
+ scrollTop: (top: number) => void;
231
+ scrollLeft: (left: number) => void;
232
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
233
+ scroll: (_ev: Event) => any;
234
+ }, import("vue").PublicProps, {
235
+ paddingAbsolute: boolean | undefined;
236
+ showNativeOverlaidScrollbars: boolean | undefined;
237
+ type: "track" | "embed";
238
+ hide: boolean;
239
+ disableHorizontal: boolean;
240
+ disableVertical: boolean;
241
+ }, true, {}, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, {}, any, import("vue").ComponentProvideOptions, {
242
+ P: {};
243
+ B: {};
244
+ D: {};
245
+ C: {};
246
+ M: {};
247
+ Defaults: {};
248
+ }, Readonly<import("vue").ExtractPropTypes<{
249
+ type: {
250
+ type: PropType<"track" | "embed">;
251
+ default: string;
252
+ };
253
+ outerClass: (ObjectConstructor | StringConstructor | ArrayConstructor)[];
254
+ outerStyle: {
255
+ type: PropType<import("vue").StyleValue>;
256
+ };
257
+ paddingAbsolute: {
258
+ type: PropType<ScrollbarProps["paddingAbsolute"]>;
259
+ default: undefined;
260
+ };
261
+ showNativeOverlaidScrollbars: {
262
+ type: PropType<ScrollbarProps["showNativeOverlaidScrollbars"]>;
263
+ default: undefined;
264
+ };
265
+ updateOptions: {
266
+ type: PropType<ScrollbarProps["updateOptions"]>;
267
+ };
268
+ overflow: {
269
+ type: PropType<ScrollbarProps["overflow"]>;
270
+ };
271
+ scrollbars: {
272
+ type: PropType<ScrollbarProps["scrollbars"]>;
273
+ };
274
+ overlayOptions: {
275
+ type: PropType<ScrollbarProps["overlayOptions"]>;
276
+ };
277
+ events: {
278
+ type: PropType<ScrollbarProps["events"]>;
279
+ };
280
+ hide: {
281
+ type: BooleanConstructor;
282
+ default: boolean;
283
+ };
284
+ disableHorizontal: {
285
+ type: BooleanConstructor;
286
+ default: boolean;
287
+ };
288
+ disableVertical: {
289
+ type: BooleanConstructor;
290
+ default: boolean;
291
+ };
292
+ }>> & Readonly<{
293
+ onScroll?: ((_ev: Event) => any) | undefined;
294
+ }>, {
295
+ getOSInstance: () => {
296
+ options: {
297
+ (): import("overlayscrollbars").Options;
298
+ (newOptions: import("overlayscrollbars").PartialOptions, pure?: boolean): import("overlayscrollbars").Options;
299
+ };
300
+ on: {
301
+ (eventListeners: import("overlayscrollbars").EventListeners, pure?: boolean): () => void;
302
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>): () => void;
303
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>[]): () => void;
304
+ };
305
+ off: {
306
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>): void;
307
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>[]): void;
308
+ };
309
+ update: (force?: boolean) => boolean;
310
+ sleep: (sleeping: boolean) => void;
311
+ state: () => import("overlayscrollbars").State;
312
+ elements: () => import("overlayscrollbars").Elements;
313
+ destroy: () => void;
314
+ plugin: <P extends import("overlayscrollbars").InstancePlugin>(osPlugin: P) => import("overlayscrollbars").InferInstancePluginModuleInstance<P> | undefined;
315
+ } | null;
316
+ options: (newOptions?: ScrollbarProps["overlayOptions"], pure?: boolean) => import("overlayscrollbars").Options | undefined;
317
+ on: (nameOrListeners: keyof import("overlayscrollbars").EventListenerArgs | import("overlayscrollbars").EventListeners, listenerOrPure?: import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs> | import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs>[] | boolean) => (() => void) | undefined;
318
+ off: (name: keyof import("overlayscrollbars").EventListenerArgs, listener: import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs> | import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs>[]) => void;
319
+ update: (force?: boolean) => boolean;
320
+ sleep: (sleeping: boolean) => void;
321
+ state: () => import("overlayscrollbars").State | undefined;
322
+ elements: () => import("overlayscrollbars").Elements | undefined;
323
+ plugin: (osPlugin: import("..").ScrollbarPlugin) => void | import("overlayscrollbars").PluginModuleInstance | undefined;
324
+ destroy: () => void;
325
+ scrollTo: (options?: number | {
326
+ left?: number;
327
+ top?: number;
328
+ }, y?: number) => void;
329
+ scrollTop: (top: number) => void;
330
+ scrollLeft: (left: number) => void;
331
+ }, {}, {}, {}, {
332
+ paddingAbsolute: boolean | undefined;
333
+ showNativeOverlaidScrollbars: boolean | undefined;
334
+ type: "track" | "embed";
335
+ hide: boolean;
336
+ disableHorizontal: boolean;
337
+ disableVertical: boolean;
338
+ }>;
339
+ __isFragment?: never;
340
+ __isTeleport?: never;
341
+ __isSuspense?: never;
342
+ } & import("vue").ComponentOptionsBase<Readonly<import("vue").ExtractPropTypes<{
343
+ type: {
344
+ type: PropType<"track" | "embed">;
345
+ default: string;
346
+ };
347
+ outerClass: (ObjectConstructor | StringConstructor | ArrayConstructor)[];
348
+ outerStyle: {
349
+ type: PropType<import("vue").StyleValue>;
350
+ };
351
+ paddingAbsolute: {
352
+ type: PropType<ScrollbarProps["paddingAbsolute"]>;
353
+ default: undefined;
354
+ };
355
+ showNativeOverlaidScrollbars: {
356
+ type: PropType<ScrollbarProps["showNativeOverlaidScrollbars"]>;
357
+ default: undefined;
358
+ };
359
+ updateOptions: {
360
+ type: PropType<ScrollbarProps["updateOptions"]>;
361
+ };
362
+ overflow: {
363
+ type: PropType<ScrollbarProps["overflow"]>;
364
+ };
365
+ scrollbars: {
366
+ type: PropType<ScrollbarProps["scrollbars"]>;
367
+ };
368
+ overlayOptions: {
369
+ type: PropType<ScrollbarProps["overlayOptions"]>;
370
+ };
371
+ events: {
372
+ type: PropType<ScrollbarProps["events"]>;
373
+ };
374
+ hide: {
375
+ type: BooleanConstructor;
376
+ default: boolean;
377
+ };
378
+ disableHorizontal: {
379
+ type: BooleanConstructor;
380
+ default: boolean;
381
+ };
382
+ disableVertical: {
383
+ type: BooleanConstructor;
384
+ default: boolean;
385
+ };
386
+ }>> & Readonly<{
387
+ onScroll?: ((_ev: Event) => any) | undefined;
388
+ }>, {
389
+ getOSInstance: () => {
390
+ options: {
391
+ (): import("overlayscrollbars").Options;
392
+ (newOptions: import("overlayscrollbars").PartialOptions, pure?: boolean): import("overlayscrollbars").Options;
393
+ };
394
+ on: {
395
+ (eventListeners: import("overlayscrollbars").EventListeners, pure?: boolean): () => void;
396
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>): () => void;
397
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>[]): () => void;
398
+ };
399
+ off: {
400
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>): void;
401
+ <N extends keyof import("overlayscrollbars").EventListenerArgs>(name: N, listener: import("overlayscrollbars").EventListener<N>[]): void;
402
+ };
403
+ update: (force?: boolean) => boolean;
404
+ sleep: (sleeping: boolean) => void;
405
+ state: () => import("overlayscrollbars").State;
406
+ elements: () => import("overlayscrollbars").Elements;
407
+ destroy: () => void;
408
+ plugin: <P extends import("overlayscrollbars").InstancePlugin>(osPlugin: P) => import("overlayscrollbars").InferInstancePluginModuleInstance<P> | undefined;
409
+ } | null;
410
+ options: (newOptions?: ScrollbarProps["overlayOptions"], pure?: boolean) => import("overlayscrollbars").Options | undefined;
411
+ on: (nameOrListeners: keyof import("overlayscrollbars").EventListenerArgs | import("overlayscrollbars").EventListeners, listenerOrPure?: import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs> | import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs>[] | boolean) => (() => void) | undefined;
412
+ off: (name: keyof import("overlayscrollbars").EventListenerArgs, listener: import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs> | import("..").ScrollbarEventListener<keyof import("overlayscrollbars").EventListenerArgs>[]) => void;
413
+ update: (force?: boolean) => boolean;
414
+ sleep: (sleeping: boolean) => void;
415
+ state: () => import("overlayscrollbars").State | undefined;
416
+ elements: () => import("overlayscrollbars").Elements | undefined;
417
+ plugin: (osPlugin: import("..").ScrollbarPlugin) => void | import("overlayscrollbars").PluginModuleInstance | undefined;
418
+ destroy: () => void;
419
+ scrollTo: (options?: number | {
420
+ left?: number;
421
+ top?: number;
422
+ }, y?: number) => void;
423
+ scrollTop: (top: number) => void;
424
+ scrollLeft: (left: number) => void;
425
+ }, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
426
+ scroll: (_ev: Event) => any;
427
+ }, string, {
428
+ paddingAbsolute: boolean | undefined;
429
+ showNativeOverlaidScrollbars: boolean | undefined;
430
+ type: "track" | "embed";
431
+ hide: boolean;
432
+ disableHorizontal: boolean;
433
+ disableVertical: boolean;
434
+ }, {}, string, {}, import("vue").GlobalComponents, import("vue").GlobalDirectives, string, import("vue").ComponentProvideOptions> & import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps & (new () => {
435
+ $slots: {
436
+ default?: (props: {}) => any;
437
+ };
438
+ }) & {
439
+ install: (app: import("vue").App, options?: import("../_utils/types").SDOptions) => void;
440
+ };
129
441
  }, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
130
442
  export default _default;
package/es/card/card.js CHANGED
@@ -1,13 +1,18 @@
1
1
  import { getPrefixCls } from "../_utils/global-config.js";
2
2
  import { getAllElements } from "../_utils/vue-utils.js";
3
3
  import { useSize } from "../_hooks/use-size.js";
4
+ import { useScrollbar } from "../_hooks/use-scrollbar.js";
5
+ import Scrollbar from "../scrollbar/index.js";
4
6
  import Spin from "../spin/index.js";
5
7
  import { cardInjectionKey } from "./context.js";
6
- import { computed, createVNode, defineComponent, provide, reactive, toRefs } from "vue";
8
+ import { computed, createVNode, defineComponent, mergeProps, provide, reactive, toRef, toRefs } from "vue";
7
9
  //#region components/card/card.tsx
8
10
  var card_default = /* @__PURE__ */ defineComponent({
9
11
  name: "Card",
10
- components: { Spin },
12
+ components: {
13
+ Spin,
14
+ Scrollbar
15
+ },
11
16
  props: {
12
17
  /**
13
18
  * @zh 是否有边框
@@ -65,7 +70,24 @@ var card_default = /* @__PURE__ */ defineComponent({
65
70
  * @zh 卡片右上角的操作区域
66
71
  * @en Content to render in the top-right corner of the card
67
72
  */
68
- extra: { type: String }
73
+ extra: { type: String },
74
+ /**
75
+ * @zh 是否高度撑满父容器(内容区域自动滚动,仅在父容器有确定高度时生效)
76
+ * @en Whether to fill the height of the parent container (the content area scrolls automatically, only effective when the parent container has a determinate height)
77
+ */
78
+ fullHeight: {
79
+ type: Boolean,
80
+ default: false
81
+ },
82
+ /**
83
+ * @zh 内容区域是否使用 Scrollbar 组件滚动,可传入对象自定义滚动条配置。为 false 时使用原生 overflow 滚动。仅 `full-height` 为 true 时生效
84
+ * @en Whether the content area uses the Scrollbar component for scrolling, an object can be passed to customize the scrollbar. When false, native overflow scrolling is used. Only effective when `full-height` is true
85
+ * @defaultValue true
86
+ */
87
+ scrollbar: {
88
+ type: [Boolean, Object],
89
+ default: true
90
+ }
69
91
  },
70
92
  /**
71
93
  * @zh 卡片标题
@@ -95,6 +117,8 @@ var card_default = /* @__PURE__ */ defineComponent({
95
117
  if (_mergedSize.value === "small" || _mergedSize.value === "mini") return "small";
96
118
  return "medium";
97
119
  });
120
+ const { scrollbarProps } = useScrollbar(toRef(props, "scrollbar"));
121
+ const scrollEnabled = computed(() => props.fullHeight && props.scrollbar !== false);
98
122
  const renderActions = (vns) => {
99
123
  const actions = getAllElements(vns);
100
124
  return createVNode("div", { "class": `${prefixCls}-actions` }, [createVNode("div", { "class": `${prefixCls}-actions-right` }, [actions.map((action, index) => createVNode("span", {
@@ -116,11 +140,16 @@ var card_default = /* @__PURE__ */ defineComponent({
116
140
  [`${prefixCls}-loading`]: props.loading,
117
141
  [`${prefixCls}-bordered`]: props.bordered,
118
142
  [`${prefixCls}-hoverable`]: props.hoverable,
119
- [`${prefixCls}-contain-grid`]: cardContext.hasGrid
143
+ [`${prefixCls}-contain-grid`]: cardContext.hasGrid,
144
+ [`${prefixCls}-full-height`]: props.fullHeight
120
145
  }
121
146
  ]);
147
+ const bodyCls = computed(() => [`${prefixCls}-body`, {
148
+ [`${prefixCls}-body-scroll`]: scrollEnabled.value,
149
+ [`${prefixCls}-body-native`]: props.fullHeight && props.scrollbar === false
150
+ }]);
122
151
  return () => {
123
- var _slots$title, _slots$extra, _slots$title2, _slots$title3, _slots$extra2, _slots$extra3, _slots$default;
152
+ var _slots$title, _slots$extra, _slots$title2, _slots$title3, _slots$extra2, _slots$extra3, _slots$default2;
124
153
  const hasTitle = Boolean((_slots$title = slots.title) !== null && _slots$title !== void 0 ? _slots$title : props.title);
125
154
  const hasExtra = Boolean((_slots$extra = slots.extra) !== null && _slots$extra !== void 0 ? _slots$extra : props.extra);
126
155
  return createVNode("div", { "class": cls.value }, [
@@ -130,9 +159,12 @@ var card_default = /* @__PURE__ */ defineComponent({
130
159
  }, [hasTitle && createVNode("div", { "class": `${prefixCls}-header-title` }, [(_slots$title2 = (_slots$title3 = slots.title) === null || _slots$title3 === void 0 ? void 0 : _slots$title3.call(slots)) !== null && _slots$title2 !== void 0 ? _slots$title2 : props.title]), hasExtra && createVNode("div", { "class": `${prefixCls}-header-extra` }, [(_slots$extra2 = (_slots$extra3 = slots.extra) === null || _slots$extra3 === void 0 ? void 0 : _slots$extra3.call(slots)) !== null && _slots$extra2 !== void 0 ? _slots$extra2 : props.extra])]),
131
160
  slots.cover && createVNode("div", { "class": `${prefixCls}-cover` }, [slots.cover()]),
132
161
  createVNode("div", {
133
- "class": `${prefixCls}-body`,
162
+ "class": bodyCls.value,
134
163
  "style": props.bodyStyle
135
- }, [props.loading ? createVNode(Spin, null, null) : (_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots), slots.actions && !cardContext.hasMeta && renderActions(slots.actions())])
164
+ }, [props.loading ? createVNode(Spin, null, null) : scrollEnabled.value ? createVNode(Scrollbar, mergeProps(scrollbarProps.value, { "outerClass": `${prefixCls}-body-scrollbar` }), { default: () => {
165
+ var _slots$default;
166
+ return [(_slots$default = slots.default) === null || _slots$default === void 0 ? void 0 : _slots$default.call(slots)];
167
+ } }) : (_slots$default2 = slots.default) === null || _slots$default2 === void 0 ? void 0 : _slots$default2.call(slots), slots.actions && !cardContext.hasMeta && renderActions(slots.actions())])
136
168
  ]);
137
169
  };
138
170
  }