@sdata/web-vue 3.2.0 → 3.3.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 (72) hide show
  1. package/README.md +2 -2
  2. package/dist/sd.css +89 -9
  3. package/dist/sd.min.css +1 -1
  4. package/es/_components/select-view/style/index.css +4 -2
  5. package/es/_components/virtual-list-v2/hooks/use-size.d.ts +17 -0
  6. package/es/_components/virtual-list-v2/hooks/use-size.js +95 -0
  7. package/es/_components/virtual-list-v2/index.d.ts +2 -0
  8. package/es/_components/virtual-list-v2/index.js +5 -0
  9. package/es/_components/virtual-list-v2/interface.d.ts +44 -0
  10. package/es/_components/virtual-list-v2/virtual-list-item.d.ts +22 -0
  11. package/es/_components/virtual-list-v2/virtual-list-item.js +37 -0
  12. package/es/_components/virtual-list-v2/virtual-list.js +47 -0
  13. package/es/_components/virtual-list-v2/virtual-list.vue.d.ts +749 -0
  14. package/es/_components/virtual-list-v2/virtual-list.vue_vue_type_script_lang.js +179 -0
  15. package/es/_hooks/use-config-provider-prop.d.ts +1 -1
  16. package/es/_virtual/_plugin-vue_export-helper.js +8 -0
  17. package/es/color-picker/hooks/use-control-block.js +4 -1
  18. package/es/components.d.ts +1 -0
  19. package/es/config-provider/config-provider.vue.d.ts +7 -1
  20. package/es/config-provider/config-provider.vue_vue_type_script_setup_true_lang.js +7 -1
  21. package/es/config-provider/context.d.ts +14 -0
  22. package/es/config-provider/index.d.ts +9 -0
  23. package/es/image/hooks/use-image-drag.js +1 -1
  24. package/es/index.css +89 -9
  25. package/es/index.d.ts +2 -0
  26. package/es/index.js +2 -1
  27. package/es/index.scss +1 -0
  28. package/es/input-tag/style/index.css +4 -2
  29. package/es/input-tag/style/input-tag.scss +29 -7
  30. package/es/message/message.vue_vue_type_script_setup_true_lang.js +1 -1
  31. package/es/pagination/pagination.js +101 -19
  32. package/es/sd-vue.js +2 -0
  33. package/es/table/context.d.ts +1 -1
  34. package/es/table/hooks/use-column-resize.d.ts +3 -2
  35. package/es/table/hooks/use-column-resize.js +21 -48
  36. package/es/table/hooks/use-drag.d.ts +1 -3
  37. package/es/table/hooks/use-drag.js +2 -18
  38. package/es/table/index.d.ts +21 -36
  39. package/es/table/style/index.css +12 -5
  40. package/es/table/style/index.scss +16 -6
  41. package/es/table/table-operation-td.js +15 -12
  42. package/es/table/table-operation-th.js +2 -2
  43. package/es/table/table-tbody.js +3 -1
  44. package/es/table/table-td.js +3 -4
  45. package/es/table/table-th.js +24 -40
  46. package/es/table/table-thead.js +3 -1
  47. package/es/table/table.d.ts +13 -19
  48. package/es/table/table.js +205 -424
  49. package/es/table/utils.d.ts +2 -0
  50. package/es/table/utils.js +11 -1
  51. package/es/tag/index.d.ts +3 -3
  52. package/es/tag/tag.vue.d.ts +2 -2
  53. package/es/tag/tag.vue_vue_type_script_setup_true_lang.js +16 -5
  54. package/es/toolbar/index.d.ts +72 -0
  55. package/es/toolbar/index.js +10 -0
  56. package/es/toolbar/style/css.js +2 -0
  57. package/es/toolbar/style/index.css +85 -0
  58. package/es/toolbar/style/index.d.ts +2 -0
  59. package/es/toolbar/style/index.js +2 -0
  60. package/es/toolbar/style/index.scss +97 -0
  61. package/es/toolbar/style/token.scss +25 -0
  62. package/es/toolbar/toolbar.js +5 -0
  63. package/es/toolbar/toolbar.vue.d.ts +44 -0
  64. package/es/toolbar/toolbar.vue_vue_type_script_setup_true_lang.js +197 -0
  65. package/es/toolbar/types.d.ts +26 -0
  66. package/es/trigger/interface.d.ts +7 -0
  67. package/es/trigger/trigger.js +5 -1
  68. package/json/vetur-attributes.json +76 -1
  69. package/json/vetur-tags.json +24 -0
  70. package/json/web-types.json +163 -7
  71. package/package.json +1 -1
  72. package/es/table/table-col-group.vue.d.ts +0 -29
@@ -0,0 +1,179 @@
1
+ import { _objectSpread2 } from "../../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/objectSpread2.js";
2
+ import { getPrefixCls } from "../../_utils/global-config.js";
3
+ import { isNumber, isObject } from "../../_utils/is.js";
4
+ import Scrollbar from "../../scrollbar/index.js";
5
+ import { _objectWithoutProperties } from "../../_virtual/_@oxc-project_runtime@0.133.0/helpers/esm/objectWithoutProperties.js";
6
+ import { useSize } from "./hooks/use-size.js";
7
+ import virtual_list_item_default from "./virtual-list-item.js";
8
+ import { computed, defineComponent, nextTick, ref, toRefs } from "vue";
9
+ //#region components/_components/virtual-list-v2/virtual-list.vue?vue&type=script&lang.ts
10
+ var _excluded = ["outerStyle"];
11
+ var virtual_list_vue_vue_type_script_lang_default = defineComponent({
12
+ name: "VirtualList",
13
+ components: {
14
+ Scrollbar,
15
+ VirtualListItem: virtual_list_item_default
16
+ },
17
+ props: {
18
+ height: {
19
+ type: [Number, String],
20
+ default: 200
21
+ },
22
+ data: {
23
+ type: Array,
24
+ default: () => []
25
+ },
26
+ threshold: {
27
+ type: Number,
28
+ default: 0
29
+ },
30
+ itemKey: {
31
+ type: String,
32
+ default: "key"
33
+ },
34
+ fixedSize: {
35
+ type: Boolean,
36
+ default: false
37
+ },
38
+ estimatedSize: {
39
+ type: Number,
40
+ default: 30
41
+ },
42
+ buffer: {
43
+ type: Number,
44
+ default: 10
45
+ },
46
+ component: {
47
+ type: [String, Object],
48
+ default: "div"
49
+ },
50
+ listAttrs: { type: Object },
51
+ contentAttrs: { type: Object },
52
+ paddingPosition: {
53
+ type: String,
54
+ default: "content"
55
+ },
56
+ scrollbar: {
57
+ type: [Boolean, Object],
58
+ default: false
59
+ }
60
+ },
61
+ emits: {
62
+ scroll: (ev) => true,
63
+ reachBottom: (ev) => true
64
+ },
65
+ setup(props, { emit }) {
66
+ const { data, itemKey, fixedSize, estimatedSize, buffer, height } = toRefs(props);
67
+ const prefixCls = getPrefixCls("virtual-list");
68
+ const mergedComponent = computed(() => {
69
+ if (isObject(props.component)) return _objectSpread2({
70
+ container: "div",
71
+ list: "div",
72
+ content: "div"
73
+ }, props.component);
74
+ return {
75
+ container: props.component,
76
+ list: "div",
77
+ content: "div"
78
+ };
79
+ });
80
+ const containerRef = ref();
81
+ const contentRef = ref();
82
+ const scrollbarEnabled = computed(() => props.scrollbar !== false);
83
+ const scrollbarProps = computed(() => isObject(props.scrollbar) ? props.scrollbar : {});
84
+ const containerComponent = computed(() => scrollbarEnabled.value ? Scrollbar : mergedComponent.value.container);
85
+ const style = computed(() => {
86
+ return {
87
+ height: isNumber(height.value) ? `${height.value}px` : height.value,
88
+ overflow: scrollbarEnabled.value ? "hidden" : "auto"
89
+ };
90
+ });
91
+ const containerProps = computed(() => {
92
+ if (!scrollbarEnabled.value) return {};
93
+ const _scrollbarProps$value = scrollbarProps.value, { outerStyle } = _scrollbarProps$value, rest = _objectWithoutProperties(_scrollbarProps$value, _excluded);
94
+ const heightStyle = { height: style.value.height };
95
+ return _objectSpread2(_objectSpread2({}, rest), {}, { outerStyle: Array.isArray(outerStyle) ? [heightStyle, ...outerStyle] : outerStyle ? [heightStyle, outerStyle] : heightStyle });
96
+ });
97
+ const getScrollElement = () => {
98
+ var _value$elements, _ref, _elements$scrollOffse;
99
+ const value = containerRef.value;
100
+ if (!value) return;
101
+ if (typeof value.scrollTop === "number") return value;
102
+ const elements = (_value$elements = value.elements) === null || _value$elements === void 0 ? void 0 : _value$elements.call(value);
103
+ return (_ref = (_elements$scrollOffse = elements === null || elements === void 0 ? void 0 : elements.scrollOffsetElement) !== null && _elements$scrollOffse !== void 0 ? _elements$scrollOffse : elements === null || elements === void 0 ? void 0 : elements.viewport) !== null && _ref !== void 0 ? _ref : value.$el;
104
+ };
105
+ const setContainerScrollTop = (top) => {
106
+ const value = containerRef.value;
107
+ if (value && typeof value.scrollTop === "function") {
108
+ value.scrollTop(top);
109
+ return;
110
+ }
111
+ const element = getScrollElement();
112
+ if (element) element.scrollTop = top;
113
+ };
114
+ const getContainerScrollTop = () => {
115
+ var _getScrollElement$scr, _getScrollElement;
116
+ return (_getScrollElement$scr = (_getScrollElement = getScrollElement()) === null || _getScrollElement === void 0 ? void 0 : _getScrollElement.scrollTop) !== null && _getScrollElement$scr !== void 0 ? _getScrollElement$scr : 0;
117
+ };
118
+ const dataKeys = computed(() => data.value.map((item, index) => {
119
+ var _item$itemKey$value;
120
+ return (_item$itemKey$value = item[itemKey.value]) !== null && _item$itemKey$value !== void 0 ? _item$itemKey$value : index;
121
+ }));
122
+ const { frontPadding, behindPadding, start, end, getStartByScroll, setItemSize, hasItemSize, setStart, getScrollOffset } = useSize({
123
+ dataKeys,
124
+ fixedSize,
125
+ estimatedSize,
126
+ buffer
127
+ });
128
+ const currentList = computed(() => {
129
+ if (props.threshold && data.value.length <= props.threshold) return data.value;
130
+ return data.value.slice(start.value, end.value);
131
+ });
132
+ const onScroll = (ev) => {
133
+ const { scrollTop, scrollHeight, offsetHeight } = ev.target;
134
+ const _start = getStartByScroll(scrollTop);
135
+ if (_start !== start.value) {
136
+ setStart(_start);
137
+ nextTick(() => {
138
+ scrollTo(scrollTop);
139
+ });
140
+ }
141
+ emit("scroll", ev);
142
+ if (Math.floor(scrollHeight - (scrollTop + offsetHeight)) <= 0) emit("reachBottom", ev);
143
+ };
144
+ const scrollTo = (options) => {
145
+ var _options$index, _options$key;
146
+ if (!containerRef.value) return;
147
+ if (isNumber(options)) {
148
+ setContainerScrollTop(options);
149
+ return;
150
+ }
151
+ const _index = (_options$index = options.index) !== null && _options$index !== void 0 ? _options$index : dataKeys.value.indexOf((_options$key = options.key) !== null && _options$key !== void 0 ? _options$key : "");
152
+ setStart(_index - buffer.value);
153
+ setContainerScrollTop(getScrollOffset(_index));
154
+ nextTick(() => {
155
+ const _scrollTop = getScrollOffset(_index);
156
+ if (_scrollTop !== getContainerScrollTop()) setContainerScrollTop(_scrollTop);
157
+ });
158
+ };
159
+ return {
160
+ prefixCls,
161
+ containerRef,
162
+ contentRef,
163
+ frontPadding,
164
+ currentList,
165
+ behindPadding,
166
+ onScroll,
167
+ setItemSize,
168
+ hasItemSize,
169
+ start,
170
+ scrollTo,
171
+ style,
172
+ containerProps,
173
+ containerComponent,
174
+ mergedComponent
175
+ };
176
+ }
177
+ });
178
+ //#endregion
179
+ export { virtual_list_vue_vue_type_script_lang_default as default };
@@ -4,7 +4,7 @@ interface UseConfigProviderPropOptions<T> {
4
4
  propNames: readonly string[];
5
5
  getGlobalValue: (configProviderCtx: ConfigProvider | undefined) => T | undefined;
6
6
  }
7
- export declare const useConfigProviderProp: <T>(propValue: Ref<T | undefined>, options: UseConfigProviderPropOptions<T>) => {
7
+ export declare const useConfigProviderProp: <T>(propValue: Ref<T>, options: UseConfigProviderPropOptions<T>) => {
8
8
  mergedValue: import("vue").ComputedRef<T | undefined>;
9
9
  };
10
10
  export {};
@@ -0,0 +1,8 @@
1
+ //#region \0plugin-vue:export-helper
2
+ var _plugin_vue_export_helper_default = (sfc, props) => {
3
+ const target = sfc.__vccOpts || sfc;
4
+ for (const [key, val] of props) target[key] = val;
5
+ return target;
6
+ };
7
+ //#endregion
8
+ export { _plugin_vue_export_helper_default as default };
@@ -1,9 +1,11 @@
1
+ import { throttleByRaf } from "../../_utils/throttle-by-raf.js";
1
2
  import { ref } from "vue";
2
3
  //#region components/color-picker/hooks/use-control-block.ts
3
4
  var useControlBlock = ({ value, onChange }) => {
4
5
  const active = ref(false);
5
6
  const blockRef = ref();
6
7
  const handlerRef = ref();
8
+ const throttledChange = throttleByRaf(onChange);
7
9
  const getPercentNumber = (value, max) => {
8
10
  if (value < 0) return 0;
9
11
  if (value > max) return 1;
@@ -14,7 +16,7 @@ var useControlBlock = ({ value, onChange }) => {
14
16
  const { clientX, clientY } = ev;
15
17
  const rect = blockRef.value.getBoundingClientRect();
16
18
  const newValue = [getPercentNumber(clientX - rect.x, rect.width), getPercentNumber(clientY - rect.y, rect.height)];
17
- if (newValue[0] !== value[0] || newValue[1] !== value[1]) onChange === null || onChange === void 0 || onChange(newValue);
19
+ if (newValue[0] !== value[0] || newValue[1] !== value[1]) throttledChange(newValue);
18
20
  };
19
21
  const removeListener = () => {
20
22
  active.value = false;
@@ -23,6 +25,7 @@ var useControlBlock = ({ value, onChange }) => {
23
25
  window.removeEventListener("contextmenu", removeListener);
24
26
  };
25
27
  const onMouseDown = (ev) => {
28
+ ev.preventDefault();
26
29
  active.value = true;
27
30
  setCurrentPosition(ev);
28
31
  window.addEventListener("mousemove", onMouseMove);
@@ -126,6 +126,7 @@ declare module 'vue' {
126
126
  SdTimePicker: SDVue['TimePicker'];
127
127
  SdTimeline: SDVue['Timeline'];
128
128
  SdTimelineItem: SDVue['TimelineItem'];
129
+ SdToolbar: SDVue['Toolbar'];
129
130
  SdTooltip: SDVue['Tooltip'];
130
131
  SdTour: SDVue['Tour'];
131
132
  SdTransfer: SDVue['Transfer'];
@@ -2,7 +2,7 @@ import type { PropType } from 'vue';
2
2
  import { VirtualListProps } from '../_components/virtual-list/interface';
3
3
  import { Size } from '../_utils/constant';
4
4
  import { SdLang } from '../locale/interface';
5
- import { ConfigProviderDatePicker, ConfigProviderDrawer, type JsonFormProviderConfig, ConfigProviderModal } from './context';
5
+ import { ConfigProviderDatePicker, ConfigProviderDrawer, type JsonFormProviderConfig, ConfigProviderModal, ConfigProviderPagination } from './context';
6
6
  import { SdThemeConfig, SdThemeMode } from './theme';
7
7
  declare var __VLS_8: {};
8
8
  type __VLS_Slots = {} & {
@@ -63,6 +63,9 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
63
63
  drawer: {
64
64
  type: PropType<ConfigProviderDrawer>;
65
65
  };
66
+ pagination: {
67
+ type: PropType<ConfigProviderPagination>;
68
+ };
66
69
  jsonForm: {
67
70
  type: PropType<JsonFormProviderConfig>;
68
71
  };
@@ -127,6 +130,9 @@ declare const __VLS_base: import("vue").DefineComponent<import("vue").ExtractPro
127
130
  drawer: {
128
131
  type: PropType<ConfigProviderDrawer>;
129
132
  };
133
+ pagination: {
134
+ type: PropType<ConfigProviderPagination>;
135
+ };
130
136
  jsonForm: {
131
137
  type: PropType<JsonFormProviderConfig>;
132
138
  };
@@ -115,6 +115,11 @@ var config_provider_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
115
115
  */
116
116
  drawer: { type: Object },
117
117
  /**
118
+ * @zh Pagination 组件默认配置
119
+ * @en Default config for Pagination
120
+ */
121
+ pagination: { type: Object },
122
+ /**
118
123
  * @zh JsonForm 组件默认配置
119
124
  * @en Default config for JsonForm
120
125
  */
@@ -146,7 +151,7 @@ var config_provider_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
146
151
  * @version 2.28.0
147
152
  */
148
153
  const slots = useSlots();
149
- const { prefixCls, locale, size, allowClear, autoInsertSpaceInButton, allowSearch, virtualListProps, updateAtScroll, scrollToClose, exchangeTime, rtl, datePicker, modal, drawer } = toRefs(props);
154
+ const { prefixCls, locale, size, allowClear, autoInsertSpaceInButton, allowSearch, virtualListProps, updateAtScroll, scrollToClose, exchangeTime, rtl, datePicker, modal, drawer, pagination } = toRefs(props);
150
155
  const config = reactive({
151
156
  slots,
152
157
  prefixCls,
@@ -163,6 +168,7 @@ var config_provider_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
163
168
  datePicker,
164
169
  modal,
165
170
  drawer,
171
+ pagination,
166
172
  jsonForm: toRefs(props).jsonForm,
167
173
  theme: normalizeTheme(props.theme)
168
174
  });
@@ -7,6 +7,7 @@ import { ButtonProps } from '../button';
7
7
  import { ShortcutType, WeekStart } from '../date-picker/interface';
8
8
  import { EllipsisTooltipProps } from '../ellipsis';
9
9
  import { SdLang } from '../locale/interface';
10
+ import { PaginationSelectProps } from '../pagination/interface';
10
11
  import { SDThemeNormalized } from './theme';
11
12
  export interface ConfigProviderModal {
12
13
  mask?: boolean;
@@ -53,6 +54,18 @@ export interface ConfigProviderDatePicker {
53
54
  dayStartOfWeek?: WeekStart;
54
55
  abbreviation?: boolean;
55
56
  }
57
+ export interface ConfigProviderPagination {
58
+ pageSizeOptions?: number[];
59
+ defaultPageSize?: number;
60
+ showTotal?: boolean;
61
+ showMore?: boolean;
62
+ showJumper?: boolean;
63
+ showPageSize?: boolean;
64
+ autoAdjust?: boolean;
65
+ baseSize?: number;
66
+ bufferSize?: number;
67
+ pageSizeProps?: PaginationSelectProps;
68
+ }
56
69
  export interface ConfigProvider {
57
70
  slots: Slots;
58
71
  prefixCls?: string;
@@ -69,6 +82,7 @@ export interface ConfigProvider {
69
82
  datePicker?: ConfigProviderDatePicker;
70
83
  modal?: ConfigProviderModal;
71
84
  drawer?: ConfigProviderDrawer;
85
+ pagination?: ConfigProviderPagination;
72
86
  jsonForm?: JsonFormProviderConfig;
73
87
  theme?: SDThemeNormalized;
74
88
  }
@@ -57,6 +57,9 @@ declare const ConfigProvider: {
57
57
  drawer: {
58
58
  type: import("vue").PropType<import("./context.ts").ConfigProviderDrawer>;
59
59
  };
60
+ pagination: {
61
+ type: import("vue").PropType<import("./context.ts").ConfigProviderPagination>;
62
+ };
60
63
  jsonForm: {
61
64
  type: import("vue").PropType<import("./context.ts").JsonFormProviderConfig>;
62
65
  };
@@ -138,6 +141,9 @@ declare const ConfigProvider: {
138
141
  drawer: {
139
142
  type: import("vue").PropType<import("./context.ts").ConfigProviderDrawer>;
140
143
  };
144
+ pagination: {
145
+ type: import("vue").PropType<import("./context.ts").ConfigProviderPagination>;
146
+ };
141
147
  jsonForm: {
142
148
  type: import("vue").PropType<import("./context.ts").JsonFormProviderConfig>;
143
149
  };
@@ -216,6 +222,9 @@ declare const ConfigProvider: {
216
222
  drawer: {
217
223
  type: import("vue").PropType<import("./context.ts").ConfigProviderDrawer>;
218
224
  };
225
+ pagination: {
226
+ type: import("vue").PropType<import("./context.ts").ConfigProviderPagination>;
227
+ };
219
228
  jsonForm: {
220
229
  type: import("vue").PropType<import("./context.ts").JsonFormProviderConfig>;
221
230
  };
@@ -25,7 +25,7 @@ function useImageDrag(props) {
25
25
  offEvents();
26
26
  };
27
27
  const onMoveStart = (e) => {
28
- if (e.target !== e.currentTarget) return;
28
+ if (e.target !== e.currentTarget || e.button !== 0) return;
29
29
  e.preventDefault && e.preventDefault();
30
30
  moving.value = true;
31
31
  startPageX = e.pageX;
package/es/index.css CHANGED
@@ -2713,6 +2713,8 @@ body {
2713
2713
  font-size: 12px;
2714
2714
  white-space: pre-wrap;
2715
2715
  word-break: break-word;
2716
+ }
2717
+ .sd-select-view-multiple .sd-select-view-inner .sd-select-view-tag:not(.sd-tag-custom-color):not(.sd-tag-red):not(.sd-tag-orangered):not(.sd-tag-orange):not(.sd-tag-gold):not(.sd-tag-lime):not(.sd-tag-green):not(.sd-tag-cyan):not(.sd-tag-blue):not(.sd-tag-sdblue):not(.sd-tag-purple):not(.sd-tag-pinkpurple):not(.sd-tag-magenta) {
2716
2718
  background-color: var(--sd-color-bg-2);
2717
2719
  border-color: var(--sd-color-fill-3);
2718
2720
  }
@@ -2796,14 +2798,14 @@ body {
2796
2798
  max-width: 100%;
2797
2799
  vertical-align: bottom;
2798
2800
  }
2799
- .sd-select-view-multiple.sd-select-view-focus .sd-select-view-tag {
2801
+ .sd-select-view-multiple.sd-select-view-focus .sd-select-view-tag:not(.sd-tag-custom-color):not(.sd-tag-red):not(.sd-tag-orangered):not(.sd-tag-orange):not(.sd-tag-gold):not(.sd-tag-lime):not(.sd-tag-green):not(.sd-tag-cyan):not(.sd-tag-blue):not(.sd-tag-sdblue):not(.sd-tag-purple):not(.sd-tag-pinkpurple):not(.sd-tag-magenta) {
2800
2802
  background-color: var(--sd-color-fill-2);
2801
2803
  border-color: var(--sd-color-fill-2);
2802
2804
  }
2803
2805
  .sd-select-view-multiple.sd-select-view-focus .sd-select-view-tag .sd-icon-hover:hover::before {
2804
2806
  background-color: var(--sd-color-fill-3);
2805
2807
  }
2806
- .sd-select-view-multiple.sd-select-view-disabled .sd-select-view-tag {
2808
+ .sd-select-view-multiple.sd-select-view-disabled .sd-select-view-tag:not(.sd-tag-custom-color):not(.sd-tag-red):not(.sd-tag-orangered):not(.sd-tag-orange):not(.sd-tag-gold):not(.sd-tag-lime):not(.sd-tag-green):not(.sd-tag-cyan):not(.sd-tag-blue):not(.sd-tag-sdblue):not(.sd-tag-purple):not(.sd-tag-pinkpurple):not(.sd-tag-magenta) {
2807
2809
  color: var(--sd-color-text-4);
2808
2810
  background-color: var(--sd-color-fill-2);
2809
2811
  border-color: var(--sd-color-fill-3);
@@ -5251,6 +5253,75 @@ body.sd-tour-active .sd-tour-popover * {
5251
5253
  resize: vertical;
5252
5254
  }
5253
5255
 
5256
+ .sd-toolbar {
5257
+ width: 100%;
5258
+ }
5259
+ .sd-toolbar-inner {
5260
+ display: flex;
5261
+ flex-wrap: wrap;
5262
+ gap: 12px;
5263
+ align-items: flex-start;
5264
+ width: 100%;
5265
+ }
5266
+ .sd-toolbar-with-border .sd-toolbar-inner {
5267
+ padding-bottom: 8px;
5268
+ border-bottom: 1px solid var(--sd-color-neutral-3);
5269
+ }
5270
+ .sd-toolbar-body {
5271
+ flex: 1 1 0;
5272
+ min-width: 0;
5273
+ max-height: var(--toolbar-body-max-height);
5274
+ overflow: hidden;
5275
+ transition: max-height 0.3s ease;
5276
+ }
5277
+ .sd-toolbar-body--schema .sd-form {
5278
+ display: grid;
5279
+ flex: 1;
5280
+ grid-template-columns: repeat(auto-fill, minmax(var(--toolbar-span-width), 1fr));
5281
+ gap: 8px;
5282
+ width: 100%;
5283
+ background-color: var(--sd-color-bg-2);
5284
+ }
5285
+ .sd-toolbar-body--schema .sd-form > * {
5286
+ max-width: var(--toolbar-item-max-width);
5287
+ }
5288
+ .sd-toolbar-body--schema .sd-form-item {
5289
+ margin-bottom: 0;
5290
+ }
5291
+ .sd-toolbar-body--schema .sd-form-item-content {
5292
+ min-height: var(--toolbar-item-height);
5293
+ }
5294
+ .sd-toolbar-body--max-width .sd-form {
5295
+ grid-template-columns: repeat(auto-fill, minmax(min(var(--toolbar-item-max-width), var(--toolbar-span-width)), var(--toolbar-item-max-width)));
5296
+ }
5297
+ .sd-toolbar-actions {
5298
+ display: flex;
5299
+ flex-shrink: 0;
5300
+ gap: 8px;
5301
+ align-items: center;
5302
+ align-self: flex-end;
5303
+ white-space: nowrap;
5304
+ }
5305
+ .sd-toolbar-expand {
5306
+ display: inline-flex;
5307
+ gap: 4px;
5308
+ align-items: center;
5309
+ }
5310
+ .sd-toolbar-expand-icon {
5311
+ transition: transform 0.3s ease;
5312
+ }
5313
+ .sd-toolbar-expand-icon--up {
5314
+ transform: rotate(180deg);
5315
+ }
5316
+ @media screen and (width <= 640px) {
5317
+ .sd-toolbar-body--schema .sd-form {
5318
+ grid-template-columns: minmax(0, 1fr) !important;
5319
+ }
5320
+ .sd-toolbar-body--schema .sd-form-item {
5321
+ grid-column: span 1 !important;
5322
+ }
5323
+ }
5324
+
5254
5325
  .sd-tag-group {
5255
5326
  position: relative;
5256
5327
  display: inline-flex;
@@ -6232,6 +6303,9 @@ body.sd-tour-active .sd-tour-popover * {
6232
6303
  grid-column: 1/-1;
6233
6304
  grid-template-columns: var(--sd-table-grid-template, minmax(0, 1fr));
6234
6305
  }
6306
+ .sd-table-thead > .sd-table-tr, .sd-table-tbody > .sd-table-tr, .sd-table-tfoot-content > .sd-table-tr {
6307
+ display: contents;
6308
+ }
6235
6309
  .sd-table-tbody > .sd-virtual-list, .sd-table-tbody > .sd-table-body {
6236
6310
  grid-column: 1/-1;
6237
6311
  width: 100%;
@@ -6566,9 +6640,10 @@ body.sd-tour-active .sd-tour-popover * {
6566
6640
  flex-direction: column;
6567
6641
  width: auto;
6568
6642
  height: 100%;
6643
+ overflow: hidden;
6569
6644
  }
6570
6645
  .sd-table-container .sd-table-content-scroll-x {
6571
- overflow: auto hidden;
6646
+ overflow: hidden;
6572
6647
  }
6573
6648
  .sd-table-container::before, .sd-table-container::after {
6574
6649
  position: absolute;
@@ -6597,6 +6672,7 @@ body.sd-tour-active .sd-tour-popover * {
6597
6672
  box-shadow: inset -6px 0 8px -3px rgba(0, 0, 0, 0.15);
6598
6673
  }
6599
6674
  .sd-table-header {
6675
+ flex: 0 0 auto;
6600
6676
  width: 100%;
6601
6677
  min-width: 100%;
6602
6678
  overflow: hidden;
@@ -6621,13 +6697,15 @@ body.sd-tour-active .sd-tour-popover * {
6621
6697
  background-color: transparent;
6622
6698
  }
6623
6699
  .sd-table.sd-table-empty .sd-table-header {
6624
- overflow-x: auto;
6700
+ overflow-x: hidden;
6625
6701
  }
6626
6702
  .sd-table-body {
6627
6703
  position: relative;
6704
+ flex: 1 1 auto;
6628
6705
  width: 100%;
6629
- min-height: 40px;
6630
- overflow: auto;
6706
+ min-width: 0;
6707
+ min-height: 0;
6708
+ overflow: hidden;
6631
6709
  background-color: var(--sd-color-bg-2);
6632
6710
  }
6633
6711
  .sd-table-border .sd-table-container {
@@ -6747,7 +6825,7 @@ body.sd-tour-active .sd-tour-popover * {
6747
6825
  z-index: 1;
6748
6826
  flex-shrink: 0;
6749
6827
  width: 100%;
6750
- overflow-x: auto;
6828
+ overflow-x: hidden;
6751
6829
  background-color: var(--sd-color-neutral-2);
6752
6830
  box-shadow: 0 -1px 0 var(--sd-color-neutral-3);
6753
6831
  scrollbar-color: transparent transparent;
@@ -11542,6 +11620,8 @@ body.sd-tour-active .sd-tour-popover * {
11542
11620
  font-size: 12px;
11543
11621
  white-space: pre-wrap;
11544
11622
  word-break: break-word;
11623
+ }
11624
+ .sd-input-tag .sd-input-tag-inner .sd-input-tag-tag:not(.sd-tag-custom-color):not(.sd-tag-red):not(.sd-tag-orangered):not(.sd-tag-orange):not(.sd-tag-gold):not(.sd-tag-lime):not(.sd-tag-green):not(.sd-tag-cyan):not(.sd-tag-blue):not(.sd-tag-sdblue):not(.sd-tag-purple):not(.sd-tag-pinkpurple):not(.sd-tag-magenta) {
11545
11625
  background-color: var(--sd-color-bg-2);
11546
11626
  border-color: var(--sd-color-fill-3);
11547
11627
  }
@@ -11625,14 +11705,14 @@ body.sd-tour-active .sd-tour-popover * {
11625
11705
  max-width: 100%;
11626
11706
  vertical-align: bottom;
11627
11707
  }
11628
- .sd-input-tag.sd-input-tag-focus .sd-input-tag-tag {
11708
+ .sd-input-tag.sd-input-tag-focus .sd-input-tag-tag:not(.sd-tag-custom-color):not(.sd-tag-red):not(.sd-tag-orangered):not(.sd-tag-orange):not(.sd-tag-gold):not(.sd-tag-lime):not(.sd-tag-green):not(.sd-tag-cyan):not(.sd-tag-blue):not(.sd-tag-sdblue):not(.sd-tag-purple):not(.sd-tag-pinkpurple):not(.sd-tag-magenta) {
11629
11709
  background-color: var(--sd-color-fill-2);
11630
11710
  border-color: var(--sd-color-fill-2);
11631
11711
  }
11632
11712
  .sd-input-tag.sd-input-tag-focus .sd-input-tag-tag .sd-icon-hover:hover::before {
11633
11713
  background-color: var(--sd-color-fill-3);
11634
11714
  }
11635
- .sd-input-tag.sd-input-tag-disabled .sd-input-tag-tag {
11715
+ .sd-input-tag.sd-input-tag-disabled .sd-input-tag-tag:not(.sd-tag-custom-color):not(.sd-tag-red):not(.sd-tag-orangered):not(.sd-tag-orange):not(.sd-tag-gold):not(.sd-tag-lime):not(.sd-tag-green):not(.sd-tag-cyan):not(.sd-tag-blue):not(.sd-tag-sdblue):not(.sd-tag-purple):not(.sd-tag-pinkpurple):not(.sd-tag-magenta) {
11636
11716
  color: var(--sd-color-text-4);
11637
11717
  background-color: var(--sd-color-fill-2);
11638
11718
  border-color: var(--sd-color-fill-3);
package/es/index.d.ts CHANGED
@@ -145,6 +145,8 @@ export { default as Tag } from './tag';
145
145
  export type { TagColor, TagInstance, TagProps } from './tag';
146
146
  export { default as TagGroup } from './tag-group';
147
147
  export type { TagGroupFieldNames, TagGroupInstance, TagGroupObjectOption, TagGroupOption, TagGroupOptionLabel, TagGroupProps, } from './tag-group';
148
+ export { default as Toolbar } from './toolbar';
149
+ export type { ToolbarEmits, ToolbarInstance, ToolbarModelValue, ToolbarProps, ToolbarResetEventHandler, ToolbarSearchEventHandler, } from './toolbar';
148
150
  export { default as Textarea } from './textarea';
149
151
  export type { TextareaInstance } from './textarea';
150
152
  export { default as TimePicker } from './time-picker';
package/es/index.js CHANGED
@@ -135,6 +135,7 @@ import TagGroup from "./tag-group/index.js";
135
135
  import ThemeProvider from "./theme-provider/index.js";
136
136
  import item_default$1 from "./timeline/item.js";
137
137
  import Timeline from "./timeline/index.js";
138
+ import Toolbar from "./toolbar/index.js";
138
139
  import Tour from "./tour/index.js";
139
140
  import paragraph_default from "./typography/paragraph.js";
140
141
  import text_default from "./typography/text.js";
@@ -143,4 +144,4 @@ import Typography from "./typography/index.js";
143
144
  import Upload from "./upload/index.js";
144
145
  import Watermark from "./watermark/index.js";
145
146
  import SDVue from "./sd-vue.js";
146
- export { A2UI_0_8, Affix, Alert, Anchor, anchor_link_default as AnchorLink, AutoComplete, Avatar, AvatarGroup, BackTop, Badge, BorderBeam, Breadcrumb, breadcrumb_item_default as BreadcrumbItem, Button, button_group_default as ButtonGroup, Calendar, Card, card_grid_default as CardGrid, card_meta_default as CardMeta, Carousel, carousel_item_default as CarouselItem, Cascader, cascader_panel_default as CascaderPanel, Checkbox, checkbox_group_default as CheckboxGroup, grid_col_default as Col, Collapse, collapse_item_default as CollapseItem, ColorPicker, Comment, ConfigProvider, Copy, countdown_default as Countdown, Cropper, DatePicker, Descriptions, descriptions_item_default as DescriptionsItem, dropdown_group_default as Dgroup, Divider, dropdown_option_default as Doption, Drawer, Dropdown, dropdown_button_default as DropdownButton, dropdown_submenu_default as Dsubmenu, Ellipsis, Empty, FilePreviewer, Form, form_item_default as FormItem, Grid, grid_item_default as GridItem, Icon, Image, preview_default as ImagePreview, preview_action_default as ImagePreviewAction, preview_group_default as ImagePreviewGroup, Input, input_group_default as InputGroup, InputNumber, input_password_default as InputPassword, input_search_default as InputSearch, InputTag, JsonForm, Layout, content_default as LayoutContent, footer_default as LayoutFooter, header_default as LayoutHeader, sider_default as LayoutSider, Link, List, list_item_default as ListItem, list_item_meta_default as ListItemMeta, Mention, Menu, item_default as MenuItem, item_group_default as MenuItemGroup, Message, Modal, month_picker_default as MonthPicker, Notification, OverflowList, PageHeader, Pagination, PerformantEllipsis, Popconfirm, Popover, Progress, QrCode, quarter_picker_default as QuarterPicker, Radio, radio_group_default as RadioGroup, range_picker_default as RangePicker, Rate, ResizeBox, Result, grid_row_default as Row, Scrollbar, Secret, Select, Skeleton, line_default as SkeletonLine, shape_default as SkeletonShape, Slider, Space, Spin, Split, Statistic, step_default as Step, Steps, sub_menu_default as SubMenu, Switch, tab_pane_default as TabPane, Table, table_column_default as TableColumn, Tabs, Tag, TagGroup, table_tbody_default as Tbody, table_td_default as Td, Textarea, table_th_default as Th, table_thead_default as Thead, ThemeProvider, TimePicker, Timeline, item_default$1 as TimelineItem, Tooltip, Tour, table_tr_default as Tr, Transfer, Tree, TreeSelect, Trigger, Typography, paragraph_default as TypographyParagraph, text_default as TypographyText, title_default as TypographyTitle, Upload, VerificationCode, Watermark, week_picker_default as WeekPicker, year_picker_default as YearPicker, addI18nMessages, SDVue as default, defineJsonFormComponents, defineJsonFormSchemas, getCssVarToken, getLocale, useFormItem, useLocale };
147
+ export { A2UI_0_8, Affix, Alert, Anchor, anchor_link_default as AnchorLink, AutoComplete, Avatar, AvatarGroup, BackTop, Badge, BorderBeam, Breadcrumb, breadcrumb_item_default as BreadcrumbItem, Button, button_group_default as ButtonGroup, Calendar, Card, card_grid_default as CardGrid, card_meta_default as CardMeta, Carousel, carousel_item_default as CarouselItem, Cascader, cascader_panel_default as CascaderPanel, Checkbox, checkbox_group_default as CheckboxGroup, grid_col_default as Col, Collapse, collapse_item_default as CollapseItem, ColorPicker, Comment, ConfigProvider, Copy, countdown_default as Countdown, Cropper, DatePicker, Descriptions, descriptions_item_default as DescriptionsItem, dropdown_group_default as Dgroup, Divider, dropdown_option_default as Doption, Drawer, Dropdown, dropdown_button_default as DropdownButton, dropdown_submenu_default as Dsubmenu, Ellipsis, Empty, FilePreviewer, Form, form_item_default as FormItem, Grid, grid_item_default as GridItem, Icon, Image, preview_default as ImagePreview, preview_action_default as ImagePreviewAction, preview_group_default as ImagePreviewGroup, Input, input_group_default as InputGroup, InputNumber, input_password_default as InputPassword, input_search_default as InputSearch, InputTag, JsonForm, Layout, content_default as LayoutContent, footer_default as LayoutFooter, header_default as LayoutHeader, sider_default as LayoutSider, Link, List, list_item_default as ListItem, list_item_meta_default as ListItemMeta, Mention, Menu, item_default as MenuItem, item_group_default as MenuItemGroup, Message, Modal, month_picker_default as MonthPicker, Notification, OverflowList, PageHeader, Pagination, PerformantEllipsis, Popconfirm, Popover, Progress, QrCode, quarter_picker_default as QuarterPicker, Radio, radio_group_default as RadioGroup, range_picker_default as RangePicker, Rate, ResizeBox, Result, grid_row_default as Row, Scrollbar, Secret, Select, Skeleton, line_default as SkeletonLine, shape_default as SkeletonShape, Slider, Space, Spin, Split, Statistic, step_default as Step, Steps, sub_menu_default as SubMenu, Switch, tab_pane_default as TabPane, Table, table_column_default as TableColumn, Tabs, Tag, TagGroup, table_tbody_default as Tbody, table_td_default as Td, Textarea, table_th_default as Th, table_thead_default as Thead, ThemeProvider, TimePicker, Timeline, item_default$1 as TimelineItem, Toolbar, Tooltip, Tour, table_tr_default as Tr, Transfer, Tree, TreeSelect, Trigger, Typography, paragraph_default as TypographyParagraph, text_default as TypographyText, title_default as TypographyTitle, Upload, VerificationCode, Watermark, week_picker_default as WeekPicker, year_picker_default as YearPicker, addI18nMessages, SDVue as default, defineJsonFormComponents, defineJsonFormSchemas, getCssVarToken, getLocale, useFormItem, useLocale };
package/es/index.scss CHANGED
@@ -16,6 +16,7 @@
16
16
  @use '@components/timeline/style/index.scss' as *;
17
17
  @use '@components/time-picker/style/index.scss' as *;
18
18
  @use '@components/textarea/style/index.scss' as *;
19
+ @use '@components/toolbar/style/index.scss' as *;
19
20
  @use '@components/tag/style/index.scss' as *;
20
21
  @use '@components/tag-group/style/index.scss' as *;
21
22
  @use '@components/tabs/style/index.scss' as *;
@@ -617,6 +617,8 @@
617
617
  font-size: 12px;
618
618
  white-space: pre-wrap;
619
619
  word-break: break-word;
620
+ }
621
+ .sd-input-tag .sd-input-tag-inner .sd-input-tag-tag:not(.sd-tag-custom-color):not(.sd-tag-red):not(.sd-tag-orangered):not(.sd-tag-orange):not(.sd-tag-gold):not(.sd-tag-lime):not(.sd-tag-green):not(.sd-tag-cyan):not(.sd-tag-blue):not(.sd-tag-sdblue):not(.sd-tag-purple):not(.sd-tag-pinkpurple):not(.sd-tag-magenta) {
620
622
  background-color: var(--sd-color-bg-2);
621
623
  border-color: var(--sd-color-fill-3);
622
624
  }
@@ -700,14 +702,14 @@
700
702
  max-width: 100%;
701
703
  vertical-align: bottom;
702
704
  }
703
- .sd-input-tag.sd-input-tag-focus .sd-input-tag-tag {
705
+ .sd-input-tag.sd-input-tag-focus .sd-input-tag-tag:not(.sd-tag-custom-color):not(.sd-tag-red):not(.sd-tag-orangered):not(.sd-tag-orange):not(.sd-tag-gold):not(.sd-tag-lime):not(.sd-tag-green):not(.sd-tag-cyan):not(.sd-tag-blue):not(.sd-tag-sdblue):not(.sd-tag-purple):not(.sd-tag-pinkpurple):not(.sd-tag-magenta) {
704
706
  background-color: var(--sd-color-fill-2);
705
707
  border-color: var(--sd-color-fill-2);
706
708
  }
707
709
  .sd-input-tag.sd-input-tag-focus .sd-input-tag-tag .sd-icon-hover:hover::before {
708
710
  background-color: var(--sd-color-fill-3);
709
711
  }
710
- .sd-input-tag.sd-input-tag-disabled .sd-input-tag-tag {
712
+ .sd-input-tag.sd-input-tag-disabled .sd-input-tag-tag:not(.sd-tag-custom-color):not(.sd-tag-red):not(.sd-tag-orangered):not(.sd-tag-orange):not(.sd-tag-gold):not(.sd-tag-lime):not(.sd-tag-green):not(.sd-tag-cyan):not(.sd-tag-blue):not(.sd-tag-sdblue):not(.sd-tag-purple):not(.sd-tag-pinkpurple):not(.sd-tag-magenta) {
711
713
  color: var(--sd-color-text-4);
712
714
  background-color: var(--sd-color-fill-2);
713
715
  border-color: var(--sd-color-fill-3);