niuma-ui 1.3.5 → 1.3.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -6,6 +6,25 @@
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [1.3.8] - 2026-09-17
10
+
11
+ ### 修复
12
+
13
+ - `RsSelect`:`size` 四档(`ssm` 极小 / `sm` / `md` / `lg`)同步到 Portal 下拉面板。选项行高、搜索框、空态跟触发器同档,不再一律按 md 高度。
14
+
15
+ ## [1.3.7] - 2026-09-15
16
+
17
+ ### 新增
18
+
19
+ - `RsDropdown`:`size`、`contentWidth="fit"`、菜单项 `hint`。工具条动作菜单走公开档位,不要 `:deep` 改菜单内边距。
20
+
21
+ ## [1.3.6] - 2026-09-14
22
+
23
+ ### 新增
24
+
25
+ - `RsSplitPane`:`fill`(默认关)铺满父级并拉高插槽根节点,业务不要 `:deep` 改 `.rs-split__pane`。
26
+ - `RsSplitPane`:`collapsible` 只表示可吸附折叠(拖过阈值 / Enter / `collapse()`)。分隔条不画折叠钮,与 Allotment、react-resizable-panels 一致。
27
+
9
28
  ## [1.3.5] - 2026-09-12
10
29
 
11
30
  ### 修复
@@ -155,3 +155,38 @@
155
155
  opacity: 0.38;
156
156
  cursor: not-allowed;
157
157
  }
158
+ .rs-dropdown__item-copy {
159
+ display: flex;
160
+ flex-direction: column;
161
+ gap: 1px;
162
+ min-width: 0;
163
+ }
164
+ .rs-dropdown__item-hint {
165
+ font-size: var(--rs-font-size-xs);
166
+ color: var(--rs-muted);
167
+ line-height: var(--rs-line-height-tight);
168
+ white-space: normal;
169
+ display: -webkit-box;
170
+ -webkit-line-clamp: 2;
171
+ -webkit-box-orient: vertical;
172
+ overflow: hidden;
173
+ }
174
+ .rs-dropdown__content--fit {
175
+ min-width: 10.5rem;
176
+ width: max-content;
177
+ }
178
+ .rs-dropdown__content--ssm .rs-dropdown__item {
179
+ min-height: 26px;
180
+ padding: 5px 8px;
181
+ gap: var(--rs-space-xs);
182
+ font-size: var(--rs-font-size-xs);
183
+ align-items: flex-start;
184
+ }
185
+ .rs-dropdown__content--ssm .rs-dropdown__item-icon {
186
+ margin-top: 2px;
187
+ }
188
+ .rs-dropdown__content--sm .rs-dropdown__item {
189
+ min-height: 28px;
190
+ padding: 6px 10px;
191
+ font-size: var(--rs-font-size-sm);
192
+ }
@@ -1,10 +1,15 @@
1
- import { type RsDropdownItems as RsDropdownData } from './dropdown-utils';
1
+ import { type RsDropdownContentWidth, type RsDropdownItems as RsDropdownData } from './dropdown-utils';
2
+ import type { RsComponentSize } from '../theme/types';
2
3
  type __VLS_Props = {
3
4
  items: RsDropdownData;
4
5
  placeholder?: string;
5
6
  disabled?: boolean;
6
7
  /** 选中后是否在触发器回显选项 label;false 时固定显示 placeholder(操作菜单) */
7
8
  showSelected?: boolean;
9
+ /** 菜单项密度,与控件 size 对齐 */
10
+ size?: RsComponentSize;
11
+ /** 菜单宽度;工具条图标按钮用 fit,避免被触发器宽度压扁 */
12
+ contentWidth?: RsDropdownContentWidth;
8
13
  };
9
14
  type __VLS_ModelProps = {
10
15
  modelValue?: string;
@@ -21,8 +26,10 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, {}, {
21
26
  onSelect?: ((value: string) => any) | undefined;
22
27
  "onUpdate:modelValue"?: ((value: string | undefined) => any) | undefined;
23
28
  }>, {
29
+ size: RsComponentSize;
24
30
  disabled: boolean;
25
31
  showSelected: boolean;
32
+ contentWidth: RsDropdownContentWidth;
26
33
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
27
34
  declare const __VLS_export: __VLS_WithSlots<typeof __VLS_base, __VLS_Slots>;
28
35
  declare const _default: typeof __VLS_export;
@@ -18,7 +18,9 @@ var RsDropdown_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
18
18
  showSelected: {
19
19
  type: Boolean,
20
20
  default: true
21
- }
21
+ },
22
+ size: { default: "md" },
23
+ contentWidth: { default: "trigger" }
22
24
  }, {
23
25
  "modelValue": {},
24
26
  "modelModifiers": {}
@@ -69,7 +71,7 @@ var RsDropdown_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
69
71
  _: 1
70
72
  }, 8, ["disabled"])), createVNode(unref(DropdownMenuPortal), null, {
71
73
  default: withCtx(() => [createVNode(unref(DropdownMenuContent), {
72
- class: "rs-dropdown__content",
74
+ class: normalizeClass(["rs-dropdown__content", [`rs-dropdown__content--${__props.size}`, `rs-dropdown__content--${__props.contentWidth}`]]),
73
75
  "side-offset": 4
74
76
  }, {
75
77
  default: withCtx(() => [__props.showSelected ? (openBlock(), createBlock(unref(DropdownMenuRadioGroup), {
@@ -79,16 +81,18 @@ var RsDropdown_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defin
79
81
  }, {
80
82
  default: withCtx(() => [createVNode(RsDropdownItems_default, {
81
83
  items: __props.items,
84
+ size: __props.size,
82
85
  selectable: ""
83
- }, null, 8, ["items"])]),
86
+ }, null, 8, ["items", "size"])]),
84
87
  _: 1
85
88
  }, 8, ["modelValue"])) : (openBlock(), createBlock(RsDropdownItems_default, {
86
89
  key: 1,
87
90
  items: __props.items,
91
+ size: __props.size,
88
92
  onSelect
89
- }, null, 8, ["items"]))]),
93
+ }, null, 8, ["items", "size"]))]),
90
94
  _: 1
91
- })]),
95
+ }, 8, ["class"])]),
92
96
  _: 1
93
97
  })]),
94
98
  _: 3
@@ -0,0 +1,11 @@
1
+ import type { RsDropdownItem } from './dropdown-utils';
2
+ import { type RsComponentSize } from '../theme/types';
3
+ type __VLS_Props = {
4
+ item: RsDropdownItem;
5
+ size?: RsComponentSize;
6
+ };
7
+ declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {
8
+ size: RsComponentSize;
9
+ }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
10
+ declare const _default: typeof __VLS_export;
11
+ export default _default;
@@ -0,0 +1,32 @@
1
+ import RsIcon_default from "./RsIcon.js";
2
+ import { RS_COMPONENT_SIZE_ICON_PX } from "../theme/types.js";
3
+ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createElementVNode, defineComponent, openBlock, toDisplayString } from "vue";
4
+ //#region src/components/RsDropdownItemView.vue?vue&type=script&setup=true&lang.ts
5
+ var _hoisted_1 = { class: "rs-dropdown__item-copy" };
6
+ var _hoisted_2 = { class: "rs-dropdown__item-label" };
7
+ var _hoisted_3 = {
8
+ key: 0,
9
+ class: "rs-dropdown__item-hint"
10
+ };
11
+ var RsDropdownItemView_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
12
+ __name: "RsDropdownItemView",
13
+ props: {
14
+ item: {},
15
+ size: { default: "md" }
16
+ },
17
+ setup(__props) {
18
+ /** 下拉项内容:图标 + 标题 + 可选说明,密度由 size 控制。 */
19
+ const props = __props;
20
+ const iconSize = computed(() => RS_COMPONENT_SIZE_ICON_PX[props.size]);
21
+ return (_ctx, _cache) => {
22
+ return openBlock(), createElementBlock(Fragment, null, [__props.item.icon ? (openBlock(), createBlock(RsIcon_default, {
23
+ key: 0,
24
+ name: __props.item.icon,
25
+ size: iconSize.value,
26
+ class: "rs-dropdown__item-icon"
27
+ }, null, 8, ["name", "size"])) : createCommentVNode("", true), createElementVNode("span", _hoisted_1, [createElementVNode("span", _hoisted_2, toDisplayString(__props.item.label), 1), __props.item.hint ? (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(__props.item.hint), 1)) : createCommentVNode("", true)])], 64);
28
+ };
29
+ }
30
+ });
31
+ //#endregion
32
+ export { RsDropdownItemView_vue_vue_type_script_setup_true_lang_default as default };
@@ -0,0 +1,5 @@
1
+ import RsDropdownItemView_vue_vue_type_script_setup_true_lang_default from "./RsDropdownItemView.impl.js";
2
+ //#region src/components/RsDropdownItemView.vue
3
+ var RsDropdownItemView_default = RsDropdownItemView_vue_vue_type_script_setup_true_lang_default;
4
+ //#endregion
5
+ export { RsDropdownItemView_default as default };
@@ -1,14 +1,17 @@
1
1
  import { type RsDropdownItems } from './dropdown-utils';
2
+ import type { RsComponentSize } from '../theme/types';
2
3
  type __VLS_Props = {
3
4
  items: RsDropdownItems;
4
5
  /** true:单选互斥;false:操作项 */
5
6
  selectable?: boolean;
7
+ size?: RsComponentSize;
6
8
  };
7
9
  declare const __VLS_export: import("vue").DefineComponent<__VLS_Props, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
8
10
  select: (value: string) => any;
9
11
  }, string, import("vue").PublicProps, Readonly<__VLS_Props> & Readonly<{
10
12
  onSelect?: ((value: string) => any) | undefined;
11
13
  }>, {
14
+ size: RsComponentSize;
12
15
  selectable: boolean;
13
16
  }, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
14
17
  declare const _default: typeof __VLS_export;
@@ -1,12 +1,8 @@
1
- import RsIcon_default from "./RsIcon.js";
2
1
  import { DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuRadioItem } from "./reka.js";
3
2
  import { isDropdownItemGroup } from "./dropdown-utils.js";
4
- import { Fragment, createBlock, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, renderList, toDisplayString, unref, withCtx } from "vue";
3
+ import RsDropdownItemView_default from "./RsDropdownItemView.js";
4
+ import { Fragment, createBlock, createElementBlock, createTextVNode, createVNode, defineComponent, openBlock, renderList, toDisplayString, unref, withCtx } from "vue";
5
5
  //#region src/components/RsDropdownItems.vue?vue&type=script&setup=true&lang.ts
6
- var _hoisted_1 = { class: "rs-dropdown__item-label" };
7
- var _hoisted_2 = { class: "rs-dropdown__item-label" };
8
- var _hoisted_3 = { class: "rs-dropdown__item-label" };
9
- var _hoisted_4 = { class: "rs-dropdown__item-label" };
10
6
  var RsDropdownItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineComponent({
11
7
  __name: "RsDropdownItems",
12
8
  props: {
@@ -14,7 +10,8 @@ var RsDropdownItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
14
10
  selectable: {
15
11
  type: Boolean,
16
12
  default: false
17
- }
13
+ },
14
+ size: { default: "md" }
18
15
  },
19
16
  emits: ["select"],
20
17
  setup(__props, { emit: __emit }) {
@@ -26,7 +23,7 @@ var RsDropdownItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
26
23
  return (_ctx, _cache) => {
27
24
  return openBlock(true), createElementBlock(Fragment, null, renderList(__props.items, (entry, index) => {
28
25
  return openBlock(), createElementBlock(Fragment, { key: index }, [unref(isDropdownItemGroup)(entry) ? (openBlock(), createBlock(unref(DropdownMenuGroup), {
29
- key: 0,
26
+ key: `group-${index}`,
30
27
  class: "rs-dropdown__group"
31
28
  }, {
32
29
  default: withCtx(() => [createVNode(unref(DropdownMenuLabel), { class: "rs-dropdown__group-label" }, {
@@ -39,12 +36,10 @@ var RsDropdownItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
39
36
  disabled: item.disabled,
40
37
  class: "rs-dropdown__item"
41
38
  }, {
42
- default: withCtx(() => [item.icon ? (openBlock(), createBlock(RsIcon_default, {
43
- key: 0,
44
- name: item.icon,
45
- size: 16,
46
- class: "rs-dropdown__item-icon"
47
- }, null, 8, ["name"])) : createCommentVNode("", true), createElementVNode("span", _hoisted_1, toDisplayString(item.label), 1)]),
39
+ default: withCtx(() => [createVNode(RsDropdownItemView_default, {
40
+ item,
41
+ size: __props.size
42
+ }, null, 8, ["item", "size"])]),
48
43
  _: 2
49
44
  }, 1032, ["value", "disabled"]);
50
45
  }), 128)) : (openBlock(true), createElementBlock(Fragment, { key: 1 }, renderList(entry.options, (item) => {
@@ -54,41 +49,35 @@ var RsDropdownItems_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/
54
49
  class: "rs-dropdown__item",
55
50
  onSelect: ($event) => onActionSelect(item)
56
51
  }, {
57
- default: withCtx(() => [item.icon ? (openBlock(), createBlock(RsIcon_default, {
58
- key: 0,
59
- name: item.icon,
60
- size: 16,
61
- class: "rs-dropdown__item-icon"
62
- }, null, 8, ["name"])) : createCommentVNode("", true), createElementVNode("span", _hoisted_2, toDisplayString(item.label), 1)]),
52
+ default: withCtx(() => [createVNode(RsDropdownItemView_default, {
53
+ item,
54
+ size: __props.size
55
+ }, null, 8, ["item", "size"])]),
63
56
  _: 2
64
57
  }, 1032, ["disabled", "onSelect"]);
65
58
  }), 128))]),
66
59
  _: 2
67
60
  }, 1024)) : __props.selectable ? (openBlock(), createBlock(unref(DropdownMenuRadioItem), {
68
- key: entry.value,
61
+ key: `radio-${entry.value}`,
69
62
  value: entry.value,
70
63
  disabled: entry.disabled,
71
64
  class: "rs-dropdown__item"
72
65
  }, {
73
- default: withCtx(() => [entry.icon ? (openBlock(), createBlock(RsIcon_default, {
74
- key: 0,
75
- name: entry.icon,
76
- size: 16,
77
- class: "rs-dropdown__item-icon"
78
- }, null, 8, ["name"])) : createCommentVNode("", true), createElementVNode("span", _hoisted_3, toDisplayString(entry.label), 1)]),
66
+ default: withCtx(() => [createVNode(RsDropdownItemView_default, {
67
+ item: entry,
68
+ size: __props.size
69
+ }, null, 8, ["item", "size"])]),
79
70
  _: 2
80
71
  }, 1032, ["value", "disabled"])) : (openBlock(), createBlock(unref(DropdownMenuItem), {
81
- key: entry.value,
72
+ key: `action-${entry.value}`,
82
73
  disabled: entry.disabled,
83
74
  class: "rs-dropdown__item",
84
75
  onSelect: ($event) => onActionSelect(entry)
85
76
  }, {
86
- default: withCtx(() => [entry.icon ? (openBlock(), createBlock(RsIcon_default, {
87
- key: 0,
88
- name: entry.icon,
89
- size: 16,
90
- class: "rs-dropdown__item-icon"
91
- }, null, 8, ["name"])) : createCommentVNode("", true), createElementVNode("span", _hoisted_4, toDisplayString(entry.label), 1)]),
77
+ default: withCtx(() => [createVNode(RsDropdownItemView_default, {
78
+ item: entry,
79
+ size: __props.size
80
+ }, null, 8, ["item", "size"])]),
92
81
  _: 2
93
82
  }, 1032, ["disabled", "onSelect"]))], 64);
94
83
  }), 128);
@@ -1,12 +1,12 @@
1
1
 
2
- .rs-select[data-v-956c54dc] {
2
+ .rs-select[data-v-afda3ccc] {
3
3
  display: inline-flex;
4
4
  width: 100%;
5
5
  max-width: 100%;
6
6
  vertical-align: middle;
7
7
  box-sizing: border-box;
8
8
  }
9
- .rs-select__trigger[data-v-956c54dc] {
9
+ .rs-select__trigger[data-v-afda3ccc] {
10
10
  display: inline-flex;
11
11
  align-items: center;
12
12
  justify-content: space-between;
@@ -31,13 +31,13 @@
31
31
  box-shadow var(--rs-transition-fast),
32
32
  background var(--rs-transition-fast);
33
33
  }
34
- .rs-select--multiple .rs-select__trigger[data-v-956c54dc] {
34
+ .rs-select--multiple .rs-select__trigger[data-v-afda3ccc] {
35
35
  min-height: var(--rs-control-height-md);
36
36
  height: auto;
37
37
  padding-top: var(--rs-space-xs);
38
38
  padding-bottom: var(--rs-space-xs);
39
39
  }
40
- .rs-select--block[data-v-956c54dc] {
40
+ .rs-select--block[data-v-afda3ccc] {
41
41
  display: flex;
42
42
  flex-direction: column;
43
43
  width: 100%;
@@ -46,56 +46,56 @@
46
46
  align-self: stretch;
47
47
  box-sizing: border-box;
48
48
  }
49
- .rs-select--block .rs-select__anchor[data-v-956c54dc],
50
- .rs-select--block .rs-select__trigger[data-v-956c54dc] {
49
+ .rs-select--block .rs-select__anchor[data-v-afda3ccc],
50
+ .rs-select--block .rs-select__trigger[data-v-afda3ccc] {
51
51
  width: 100%;
52
52
  }
53
- .rs-select--ssm .rs-select__trigger[data-v-956c54dc] {
53
+ .rs-select--ssm .rs-select__trigger[data-v-afda3ccc] {
54
54
  height: var(--rs-control-height-ssm);
55
55
  min-height: var(--rs-control-height-ssm);
56
56
  padding: 0 var(--rs-space-xs);
57
57
  font-size: var(--rs-font-size-xs);
58
58
  }
59
- .rs-select--ssm.rs-select--multiple .rs-select__trigger[data-v-956c54dc] {
59
+ .rs-select--ssm.rs-select--multiple .rs-select__trigger[data-v-afda3ccc] {
60
60
  min-height: var(--rs-control-height-ssm);
61
61
  }
62
- .rs-select--sm .rs-select__trigger[data-v-956c54dc] {
62
+ .rs-select--sm .rs-select__trigger[data-v-afda3ccc] {
63
63
  height: var(--rs-control-height-sm);
64
64
  min-height: var(--rs-control-height-sm);
65
65
  padding: 0 var(--rs-space-sm);
66
66
  font-size: var(--rs-font-size-xs);
67
67
  }
68
- .rs-select--sm.rs-select--multiple .rs-select__trigger[data-v-956c54dc] {
68
+ .rs-select--sm.rs-select--multiple .rs-select__trigger[data-v-afda3ccc] {
69
69
  min-height: var(--rs-control-height-sm);
70
70
  }
71
- .rs-select--lg .rs-select__trigger[data-v-956c54dc] {
71
+ .rs-select--lg .rs-select__trigger[data-v-afda3ccc] {
72
72
  height: var(--rs-control-height-lg);
73
73
  min-height: var(--rs-control-height-lg);
74
74
  padding: 0 var(--rs-space-lg);
75
75
  font-size: var(--rs-font-size-base);
76
76
  }
77
- .rs-select--lg.rs-select--multiple .rs-select__trigger[data-v-956c54dc] {
77
+ .rs-select--lg.rs-select--multiple .rs-select__trigger[data-v-afda3ccc] {
78
78
  min-height: var(--rs-control-height-lg);
79
79
  }
80
- .rs-select--filled .rs-select__trigger[data-v-956c54dc] {
80
+ .rs-select--filled .rs-select__trigger[data-v-afda3ccc] {
81
81
  border-color: transparent;
82
82
  background: var(--rs-surface-hover);
83
83
  }
84
- .rs-select--borderless .rs-select__trigger[data-v-956c54dc] {
84
+ .rs-select--borderless .rs-select__trigger[data-v-afda3ccc] {
85
85
  border-color: transparent;
86
86
  background: transparent;
87
87
  box-shadow: none;
88
88
  }
89
- .rs-select__mark[data-v-956c54dc] {
89
+ .rs-select__mark[data-v-afda3ccc] {
90
90
  padding: 0;
91
91
  background: color-mix(in srgb, var(--rs-primary) 22%, transparent);
92
92
  color: inherit;
93
93
  font-weight: var(--rs-font-weight-medium);
94
94
  }
95
- .rs-select__trigger[data-v-956c54dc]:hover:not([data-disabled]) {
95
+ .rs-select__trigger[data-v-afda3ccc]:hover:not([data-disabled]) {
96
96
  border-color: var(--rs-input-border-hover, var(--rs-border));
97
97
  }
98
- .rs-select__trigger[data-v-956c54dc]:focus-visible {
98
+ .rs-select__trigger[data-v-afda3ccc]:focus-visible {
99
99
  outline: none;
100
100
  border-color: var(--rs-focus-border, var(--rs-primary));
101
101
  background: var(--rs-input-bg);
@@ -103,32 +103,32 @@
103
103
  var(--rs-input-shadow, none),
104
104
  0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
105
105
  }
106
- .rs-select__trigger[data-disabled][data-v-956c54dc] {
106
+ .rs-select__trigger[data-disabled][data-v-afda3ccc] {
107
107
  opacity: 0.38;
108
108
  cursor: not-allowed;
109
109
  background: var(--rs-surface-hover);
110
110
  }
111
- .rs-select__trigger--invalid[data-v-956c54dc] {
111
+ .rs-select__trigger--invalid[data-v-afda3ccc] {
112
112
  border-color: var(--rs-danger);
113
113
  }
114
- .rs-select__trigger--invalid[data-v-956c54dc]:focus-visible {
114
+ .rs-select__trigger--invalid[data-v-afda3ccc]:focus-visible {
115
115
  border-color: var(--rs-danger);
116
116
  box-shadow:
117
117
  var(--rs-input-shadow, none),
118
118
  0 0 0 var(--rs-focus-ring-width, 2px)
119
119
  color-mix(in srgb, var(--rs-danger) 14%, transparent);
120
120
  }
121
- .rs-select__trigger--warning[data-v-956c54dc] {
121
+ .rs-select__trigger--warning[data-v-afda3ccc] {
122
122
  border-color: var(--rs-warning, #d97706);
123
123
  }
124
- .rs-select__trigger--warning[data-v-956c54dc]:focus-visible {
124
+ .rs-select__trigger--warning[data-v-afda3ccc]:focus-visible {
125
125
  border-color: var(--rs-warning, #d97706);
126
126
  box-shadow:
127
127
  var(--rs-input-shadow, none),
128
128
  0 0 0 var(--rs-focus-ring-width, 2px)
129
129
  color-mix(in srgb, var(--rs-warning, #d97706) 14%, transparent);
130
130
  }
131
- .rs-select__value[data-v-956c54dc] {
131
+ .rs-select__value[data-v-afda3ccc] {
132
132
  flex: 1;
133
133
  min-width: 0;
134
134
  text-align: left;
@@ -136,7 +136,7 @@
136
136
  text-overflow: ellipsis;
137
137
  white-space: nowrap;
138
138
  }
139
- .rs-select__value--multiple[data-v-956c54dc] {
139
+ .rs-select__value--multiple[data-v-afda3ccc] {
140
140
  display: flex;
141
141
  flex-wrap: nowrap;
142
142
  gap: var(--rs-space-xs);
@@ -144,28 +144,28 @@
144
144
  white-space: nowrap;
145
145
  overflow: hidden;
146
146
  }
147
- .rs-select__prefix[data-v-956c54dc] {
147
+ .rs-select__prefix[data-v-afda3ccc] {
148
148
  display: inline-flex;
149
149
  flex-shrink: 0;
150
150
  align-items: center;
151
151
  color: var(--rs-muted);
152
152
  }
153
- .rs-select__tag--rest[data-v-956c54dc] {
153
+ .rs-select__tag--rest[data-v-afda3ccc] {
154
154
  padding-right: 0.5rem;
155
155
  color: var(--rs-muted);
156
156
  background: var(--rs-surface-hover);
157
157
  border-color: var(--rs-border);
158
158
  }
159
- .rs-select__placeholder[data-v-956c54dc] {
159
+ .rs-select__placeholder[data-v-afda3ccc] {
160
160
  color: var(--rs-placeholder);
161
161
  }
162
- .rs-select__single-label[data-v-956c54dc] {
162
+ .rs-select__single-label[data-v-afda3ccc] {
163
163
  display: block;
164
164
  overflow: hidden;
165
165
  text-overflow: ellipsis;
166
166
  white-space: nowrap;
167
167
  }
168
- .rs-select__tag[data-v-956c54dc] {
168
+ .rs-select__tag[data-v-afda3ccc] {
169
169
  display: inline-flex;
170
170
  align-items: center;
171
171
  gap: 0.125rem;
@@ -179,12 +179,12 @@
179
179
  font-size: var(--rs-font-size-xs);
180
180
  line-height: var(--rs-line-height-tight);
181
181
  }
182
- .rs-select__tag-label[data-v-956c54dc] {
182
+ .rs-select__tag-label[data-v-afda3ccc] {
183
183
  overflow: hidden;
184
184
  text-overflow: ellipsis;
185
185
  white-space: nowrap;
186
186
  }
187
- .rs-select__tag-remove[data-v-956c54dc] {
187
+ .rs-select__tag-remove[data-v-afda3ccc] {
188
188
  display: inline-flex;
189
189
  align-items: center;
190
190
  justify-content: center;
@@ -200,17 +200,17 @@
200
200
  color var(--rs-transition-fast),
201
201
  background var(--rs-transition-fast);
202
202
  }
203
- .rs-select__tag-remove[data-v-956c54dc]:hover {
203
+ .rs-select__tag-remove[data-v-afda3ccc]:hover {
204
204
  color: var(--rs-on-primary-container);
205
205
  background: color-mix(in srgb, var(--rs-primary) 16%, transparent);
206
206
  }
207
- .rs-select__actions[data-v-956c54dc] {
207
+ .rs-select__actions[data-v-afda3ccc] {
208
208
  display: inline-flex;
209
209
  align-items: center;
210
210
  gap: var(--rs-space-xs);
211
211
  flex-shrink: 0;
212
212
  }
213
- .rs-select__clear[data-v-956c54dc] {
213
+ .rs-select__clear[data-v-afda3ccc] {
214
214
  display: inline-flex;
215
215
  align-items: center;
216
216
  justify-content: center;
@@ -226,23 +226,23 @@
226
226
  color var(--rs-transition-fast),
227
227
  background var(--rs-transition-fast);
228
228
  }
229
- .rs-select__clear[data-v-956c54dc]:hover {
229
+ .rs-select__clear[data-v-afda3ccc]:hover {
230
230
  color: var(--rs-text);
231
231
  background: var(--rs-item-hover);
232
232
  }
233
- .rs-select__suffix[data-v-956c54dc] {
233
+ .rs-select__suffix[data-v-afda3ccc] {
234
234
  display: inline-flex;
235
235
  align-items: center;
236
236
  }
237
- .rs-select__icon[data-v-956c54dc] {
237
+ .rs-select__icon[data-v-afda3ccc] {
238
238
  color: var(--rs-muted);
239
239
  flex-shrink: 0;
240
240
  transition: transform var(--rs-transition-fast);
241
241
  }
242
- .rs-select__trigger[data-state='open'] .rs-select__icon[data-v-956c54dc] {
242
+ .rs-select__trigger[data-state='open'] .rs-select__icon[data-v-afda3ccc] {
243
243
  transform: rotate(180deg);
244
244
  }
245
- .rs-select__item--create .rs-select__item-label[data-v-956c54dc] {
245
+ .rs-select__item--create .rs-select__item-label[data-v-afda3ccc] {
246
246
  color: var(--rs-primary);
247
247
  font-weight: var(--rs-font-weight-medium);
248
248
  }
@@ -425,6 +425,7 @@ var RsSelect_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defineC
425
425
  }, 512), createVNode(unref(ComboboxPortal), { to: portalTo.value }, {
426
426
  default: withCtx(() => [createVNode(unref(ComboboxContent), {
427
427
  class: normalizeClass(["rs-select__content", [
428
+ `rs-select__content--${unref(resolvedSize)}`,
428
429
  __props.popupClassName,
429
430
  __props.classNames?.popup,
430
431
  { "rs-select__content--match-trigger": __props.matchTriggerWidth }
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../_virtual/_plugin-vue_export-he
3
3
  import RsSelect_vue_vue_type_script_setup_true_lang_default from "./RsSelect.impl.js";
4
4
 
5
5
  //#region src/components/RsSelect.vue
6
- var RsSelect_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsSelect_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-956c54dc"]]);
6
+ var RsSelect_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsSelect_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-afda3ccc"]]);
7
7
  //#endregion
8
8
  export { RsSelect_default as default };
@@ -22,6 +22,18 @@
22
22
  min-height: 0;
23
23
  overflow: hidden;
24
24
  }
25
+
26
+ /* fill:面板当弹性列,插槽根节点吃满。业务改自己的内容,不要 :deep 本组件。 */
27
+ .rs-split--fill > .rs-split__pane:not(.rs-split__pane--auto) {
28
+ display: flex;
29
+ flex-direction: column;
30
+ }
31
+ .rs-split--fill > .rs-split__pane:not(.rs-split__pane--auto) > * {
32
+ flex: 1 1 auto;
33
+ min-width: 0;
34
+ min-height: 0;
35
+ width: 100%;
36
+ }
25
37
  .rs-split__pane--auto {
26
38
  /* 内容撑开;超出 max 时在面板内滚动 */
27
39
  overflow: auto;
@@ -10,6 +10,11 @@ type __VLS_Props = {
10
10
  keyboardStep?: number;
11
11
  /** 在分隔条中央展示抓手(grip)指示 */
12
12
  withHandle?: boolean;
13
+ /**
14
+ * 面板铺满父级,并把插槽根节点拉高。
15
+ * 默认关,不改变原有内容尺寸;工作台 / 设置页显式打开,避免 :deep。
16
+ */
17
+ fill?: boolean;
13
18
  };
14
19
  type __VLS_ModelProps = {
15
20
  /** 各面板尺寸(百分比,总和 100) */
@@ -36,6 +41,7 @@ declare const __VLS_base: import("vue").DefineComponent<__VLS_PublicProps, RsSpl
36
41
  onCollapse?: ((key: string) => any) | undefined;
37
42
  "onUpdate:sizes"?: ((value: number[]) => any) | undefined;
38
43
  }>, {
44
+ fill: boolean;
39
45
  disabled: boolean;
40
46
  orientation: RsSplitOrientation;
41
47
  keyboardStep: number;
@@ -40,6 +40,10 @@ var RsSplitPane_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
40
40
  withHandle: {
41
41
  type: Boolean,
42
42
  default: false
43
+ },
44
+ fill: {
45
+ type: Boolean,
46
+ default: false
43
47
  }
44
48
  }, {
45
49
  "sizes": { default: () => [] },
@@ -369,7 +373,10 @@ var RsSplitPane_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ defi
369
373
  return openBlock(), createElementBlock("div", {
370
374
  ref_key: "rootRef",
371
375
  ref: rootRef,
372
- class: normalizeClass(["rs-split", [`rs-split--${__props.orientation}`, { "rs-split--disabled": __props.disabled }]])
376
+ class: normalizeClass(["rs-split", [`rs-split--${__props.orientation}`, {
377
+ "rs-split--disabled": __props.disabled,
378
+ "rs-split--fill": __props.fill
379
+ }]])
373
380
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(__props.panes, (pane, index) => {
374
381
  return openBlock(), createElementBlock(Fragment, { key: pane.key }, [createElementVNode("div", {
375
382
  class: normalizeClass(["rs-split__pane", {
@@ -2,6 +2,8 @@ export interface RsDropdownItem {
2
2
  label: string;
3
3
  value: string;
4
4
  icon?: string;
5
+ /** 次要说明,工具条动作菜单等场景使用 */
6
+ hint?: string;
5
7
  disabled?: boolean;
6
8
  }
7
9
  export interface RsDropdownItemGroup {
@@ -9,5 +11,7 @@ export interface RsDropdownItemGroup {
9
11
  options: RsDropdownItem[];
10
12
  }
11
13
  export type RsDropdownItems = RsDropdownItem[] | RsDropdownItemGroup[];
14
+ /** 菜单宽度:trigger 对齐触发器;fit 随内容,不跟窄图标按钮 */
15
+ export type RsDropdownContentWidth = 'trigger' | 'fit';
12
16
  export declare function isDropdownItemGroup(item: RsDropdownItem | RsDropdownItemGroup): item is RsDropdownItemGroup;
13
17
  export declare function flattenDropdownItems(items: RsDropdownItems): RsDropdownItem[];
package/dist/index.d.ts CHANGED
@@ -109,7 +109,7 @@ export type { RsContainerBreakpoint, RsContainerGap, RsContainerMaxWidth, RsCont
109
109
  export type { RsBreadcrumbItem } from './components/RsBreadcrumb.js';
110
110
  export type { RsToolbarBorder, RsToolbarSize } from './components/RsToolbar.js';
111
111
  export type { RsContextMenuItem } from './components/context-menu-utils';
112
- export type { RsDropdownItem, RsDropdownItemGroup, RsDropdownItems } from './components/dropdown-utils';
112
+ export type { RsDropdownContentWidth, RsDropdownItem, RsDropdownItemGroup, RsDropdownItems } from './components/dropdown-utils';
113
113
  export type { RsMenuItem, RsMenuItemGroup, RsMenuItems } from './components/menu-utils';
114
114
  export type { RsScrollbarOrientation, RsScrollbarType } from './components/scrollbar-utils';
115
115
  export type { RsSelectFieldNames, RsSelectFilterOption, RsSelectFilterSort, RsSelectGetPopupContainer, RsSelectLabeledValue, RsSelectModelValue, RsSelectResolvedModel, RsSelectOption, RsSelectOptionFilterProp, RsSelectOptionGroup, RsSelectOptionInput, RsSelectOptions, RsSelectOptionsInput, RsSelectPlacement, RsSelectStatus, RsSelectMaxTagCount, RsSelectVariant, RsSelectValue, } from './components/select-utils';
@@ -144,6 +144,8 @@ var zhCN = {
144
144
  "tree.drag": "拖拽排序",
145
145
  "split.label": "面板分割",
146
146
  "split.resize": "拖动调整面板尺寸",
147
+ "split.collapse": "收起面板",
148
+ "split.expand": "展开面板",
147
149
  "drawer.resize": "拖动调整抽屉尺寸",
148
150
  "terminal.copy": "复制",
149
151
  "terminal.paste": "粘贴",
@@ -374,6 +376,8 @@ var enUS = {
374
376
  "tree.drag": "Drag to reorder",
375
377
  "split.label": "Split panes",
376
378
  "split.resize": "Drag to resize panes",
379
+ "split.collapse": "Collapse pane",
380
+ "split.expand": "Expand pane",
377
381
  "drawer.resize": "Drag to resize the drawer",
378
382
  "terminal.copy": "Copy",
379
383
  "terminal.paste": "Paste",
package/dist/styles.css CHANGED
@@ -1697,6 +1697,64 @@ code {
1697
1697
  cursor: not-allowed;
1698
1698
  }
1699
1699
 
1700
+ /* 面板 Portal 在 body,尺寸只能跟 content 档位,不能跟 .rs-select--sm */
1701
+ .rs-select__content--sm .rs-select__item,
1702
+ .rs-select__content--ssm .rs-select__item {
1703
+ gap: var(--rs-space-xs);
1704
+ font-size: var(--rs-font-size-xs);
1705
+ line-height: var(--rs-line-height-tight);
1706
+ }
1707
+
1708
+ .rs-select__content--sm .rs-select__item {
1709
+ min-height: var(--rs-control-height-sm);
1710
+ padding: 0.25rem 0.5rem;
1711
+ }
1712
+
1713
+ .rs-select__content--ssm .rs-select__item {
1714
+ min-height: var(--rs-control-height-ssm);
1715
+ padding: 0.125rem 0.375rem;
1716
+ }
1717
+
1718
+ .rs-select__content--lg .rs-select__item {
1719
+ min-height: var(--rs-control-height-lg);
1720
+ padding: var(--rs-space-sm) var(--rs-space-lg);
1721
+ font-size: var(--rs-font-size-base);
1722
+ }
1723
+
1724
+ .rs-select__content--sm .rs-select__item-check,
1725
+ .rs-select__content--ssm .rs-select__item-check {
1726
+ width: 0.75rem;
1727
+ }
1728
+
1729
+ .rs-select__content--sm .rs-select__search,
1730
+ .rs-select__content--ssm .rs-select__search {
1731
+ font-size: var(--rs-font-size-xs);
1732
+ }
1733
+
1734
+ .rs-select__content--ssm .rs-select__search-wrap {
1735
+ min-height: var(--rs-control-height-ssm);
1736
+ }
1737
+
1738
+ .rs-select__content--sm .rs-select__empty,
1739
+ .rs-select__content--ssm .rs-select__empty,
1740
+ .rs-select__content--sm .rs-select__status,
1741
+ .rs-select__content--ssm .rs-select__status {
1742
+ padding: var(--rs-space-sm);
1743
+ font-size: var(--rs-font-size-xs);
1744
+ }
1745
+
1746
+ .rs-select__content--sm .rs-select__viewport,
1747
+ .rs-select__content--ssm .rs-select__viewport {
1748
+ padding-left: 0.25rem;
1749
+ padding-right: 0.25rem;
1750
+ padding-bottom: 0.25rem;
1751
+ }
1752
+
1753
+ .rs-select__content--sm:not(:has(.rs-select__search-bar)) .rs-select__viewport,
1754
+ .rs-select__content--ssm:not(:has(.rs-select__search-bar)) .rs-select__viewport {
1755
+ padding-top: 0.25rem;
1756
+ }
1757
+
1700
1758
  .rs-auto-complete {
1701
1759
  position: relative;
1702
1760
  display: inline-flex;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "niuma-ui",
3
- "version": "1.3.5",
3
+ "version": "1.3.8",
4
4
  "license": "Apache-2.0",
5
5
  "type": "module",
6
6
  "description": "Vue 3 工作台设计系统(Rs* 组件、--rs-* token;含可选编辑器 / 终端)",