niuma-ui 2.0.0 → 2.0.2

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 (119) hide show
  1. package/CHANGELOG.md +31 -0
  2. package/README.en.md +1 -118
  3. package/README.md +58 -62
  4. package/README.zh-CN.md +128 -0
  5. package/dist/brand-icons.css +40 -0
  6. package/dist/components/_shared/src/reka.d.ts +1 -1
  7. package/dist/components/_shared/src/reka.js +2 -2
  8. package/dist/components/_shared/src/resolve-radius.js +1 -1
  9. package/dist/components/avatar/src/RsAvatar.impl.js +1 -1
  10. package/dist/components/button/src/RsButton.impl.js +1 -1
  11. package/dist/components/card/src/RsCard.impl.js +1 -1
  12. package/dist/components/cascader/src/RsCascader.css +20 -20
  13. package/dist/components/cascader/src/RsCascader.js +1 -1
  14. package/dist/components/code-block/src/RsCodeBlock.d.ts +1 -1
  15. package/dist/components/code-editor/src/code-editor-utils.js +2 -2
  16. package/dist/components/code-editor/src/code-mirror-lang.js +1 -1
  17. package/dist/components/config-provider/src/RsConfigProvider.css +2 -2
  18. package/dist/components/config-provider/src/RsConfigProvider.d.ts +8 -6
  19. package/dist/components/config-provider/src/RsConfigProvider.impl.js +64 -15
  20. package/dist/components/config-provider/src/RsConfigProvider.js +1 -1
  21. package/dist/components/context-menu/src/RsContextMenu.css +2 -2
  22. package/dist/components/context-menu/src/RsContextMenuItems.impl.js +1 -1
  23. package/dist/components/date-picker/src/RsDatePicker.css +17 -17
  24. package/dist/components/date-picker/src/RsDatePicker.impl.js +2 -2
  25. package/dist/components/date-picker/src/RsDatePicker.js +1 -1
  26. package/dist/components/dialog/src/RsConfirmDialog.impl.js +1 -1
  27. package/dist/components/dialog/src/RsDialog.css +1 -2
  28. package/dist/components/dialog/src/RsDialog.impl.js +1 -1
  29. package/dist/components/divider/src/RsDivider.css +13 -13
  30. package/dist/components/divider/src/RsDivider.js +1 -1
  31. package/dist/components/drawer/src/RsDrawer.css +2 -4
  32. package/dist/components/drawer/src/RsDrawer.impl.js +1 -1
  33. package/dist/components/dropdown/src/RsDropdown.css +2 -2
  34. package/dist/components/dropdown/src/RsDropdown.impl.js +1 -1
  35. package/dist/components/dropdown/src/RsDropdownItemView.impl.js +1 -1
  36. package/dist/components/form/src/form-rules.js +2 -2
  37. package/dist/components/icon/src/RsIcon.css +4 -4
  38. package/dist/components/icon/src/RsIcon.impl.js +6 -1
  39. package/dist/components/icon/src/RsIcon.js +1 -1
  40. package/dist/components/input/src/RsInput.css +86 -86
  41. package/dist/components/input/src/RsInput.js +1 -1
  42. package/dist/components/input/src/input-rules.js +3 -3
  43. package/dist/components/input-number/src/RsInputNumber.css +32 -32
  44. package/dist/components/input-number/src/RsInputNumber.js +1 -1
  45. package/dist/components/label/src/RsLabel.css +7 -7
  46. package/dist/components/label/src/RsLabel.js +1 -1
  47. package/dist/components/loading-bar/src/RsLoadingBar.css +4 -5
  48. package/dist/components/loading-bar/src/RsLoadingBar.js +1 -1
  49. package/dist/components/log/src/RsLog.css +39 -39
  50. package/dist/components/log/src/RsLog.d.ts +1 -1
  51. package/dist/components/log/src/RsLog.impl.js +1 -1
  52. package/dist/components/log/src/RsLog.js +1 -1
  53. package/dist/components/markdown/src/RsMarkdown.css +9 -7
  54. package/dist/components/menu/src/RsMenu.css +5 -5
  55. package/dist/components/menu/src/RsMenuItems.impl.js +1 -1
  56. package/dist/components/pagination/src/RsPagination.css +18 -18
  57. package/dist/components/pagination/src/RsPagination.impl.js +1 -1
  58. package/dist/components/pagination/src/RsPagination.js +1 -1
  59. package/dist/components/radio/src/RsRadio.impl.js +1 -1
  60. package/dist/components/radio/src/RsRadioItem.impl.js +1 -1
  61. package/dist/components/select/src/RsSelect.css +42 -42
  62. package/dist/components/select/src/RsSelect.impl.js +2 -2
  63. package/dist/components/select/src/RsSelect.js +1 -1
  64. package/dist/components/steps/src/RsSteps.css +18 -18
  65. package/dist/components/steps/src/RsSteps.js +1 -1
  66. package/dist/components/switch/src/RsSwitch.css +4 -6
  67. package/dist/components/switch/src/RsSwitch.impl.js +1 -1
  68. package/dist/components/table/style/rs-table.css +15 -15
  69. package/dist/components/tabs/src/RsTabs.impl.js +1 -1
  70. package/dist/components/terminal/src/RsTerminal.css +24 -24
  71. package/dist/components/terminal/src/RsTerminal.js +1 -1
  72. package/dist/components/textarea/src/RsTextarea.css +26 -26
  73. package/dist/components/textarea/src/RsTextarea.js +1 -1
  74. package/dist/components/time-picker/src/RsTimePicker.css +20 -20
  75. package/dist/components/time-picker/src/RsTimePicker.impl.js +2 -2
  76. package/dist/components/time-picker/src/RsTimePicker.js +1 -1
  77. package/dist/components/toaster/src/RsToaster.css +6 -6
  78. package/dist/components/toaster/src/RsToaster.impl.js +3 -6
  79. package/dist/components/tooltip/src/RsTooltip.impl.js +1 -1
  80. package/dist/components/tree/src/RsTree.css +72 -73
  81. package/dist/components/tree/src/RsTree.js +1 -1
  82. package/dist/components/tree-select/src/RsTreeSelect.css +11 -11
  83. package/dist/components/tree-select/src/RsTreeSelect.js +1 -1
  84. package/dist/components/virtual-list/src/RsVirtualList.css +7 -8
  85. package/dist/components/virtual-list/src/RsVirtualList.js +1 -1
  86. package/dist/composables/createRsDialog.js +6 -5
  87. package/dist/composables/useRsConfig.d.ts +11 -3
  88. package/dist/composables/useRsConfig.js +18 -6
  89. package/dist/composables/useRsI18n.d.ts +1 -1
  90. package/dist/composables/useRsI18n.js +5 -5
  91. package/dist/icons/brand.d.ts +6 -0
  92. package/dist/icons/brand.js +26 -0
  93. package/dist/icons/registry.d.ts +2 -0
  94. package/dist/icons/registry.js +2 -1
  95. package/dist/index.d.ts +8 -4
  96. package/dist/index.js +19 -0
  97. package/dist/locale/apply.d.ts +8 -0
  98. package/dist/locale/apply.js +20 -0
  99. package/dist/locale/interpolate.d.ts +4 -3
  100. package/dist/locale/interpolate.js +108 -5
  101. package/dist/locale/messages.d.ts +2 -4
  102. package/dist/locale/messages.js +7 -9
  103. package/dist/locale/registry-public.d.ts +3 -0
  104. package/dist/locale/registry.d.ts +19 -0
  105. package/dist/locale/registry.js +50 -0
  106. package/dist/locale/resolve-host.d.ts +7 -0
  107. package/dist/locale/resolve-host.js +46 -0
  108. package/dist/locale/types.d.ts +13 -2
  109. package/dist/locale/types.js +6 -1
  110. package/dist/styles.css +245 -250
  111. package/dist/theme/apply.d.ts +15 -3
  112. package/dist/theme/apply.js +41 -4
  113. package/dist/theme/brand.example.css +5 -1
  114. package/dist/theme/presets.d.ts +6 -5
  115. package/dist/theme/presets.js +4 -3
  116. package/dist/theme/types.d.ts +15 -7
  117. package/dist/theme/types.js +4 -1
  118. package/dist/vite-plugins/niuma-ui-host.js +7 -0
  119. package/package.json +3 -1
@@ -1,54 +1,54 @@
1
1
 
2
- .rs-tree[data-v-8aa5cfea] {
2
+ .rs-tree[data-v-59bbd9de] {
3
3
  outline: none;
4
4
  }
5
5
 
6
6
  /* 限定高度 / 虚拟滚动:铺满父级,::before 捕获节点列表下方空白区右键 */
7
- .rs-tree--fill-capture[data-v-8aa5cfea] {
7
+ .rs-tree--fill-capture[data-v-59bbd9de] {
8
8
  position: relative;
9
9
  height: 100%;
10
10
  min-height: 0;
11
11
  }
12
- .rs-tree--fill-capture[data-v-8aa5cfea]::before {
12
+ .rs-tree--fill-capture[data-v-59bbd9de]::before {
13
13
  content: '';
14
14
  position: absolute;
15
15
  inset: 0;
16
16
  z-index: 0;
17
17
  }
18
- .rs-tree--fill-capture > .rs-tree__empty[data-v-8aa5cfea],
19
- .rs-tree--fill-capture > .rs-tree__viewport[data-v-8aa5cfea] {
18
+ .rs-tree--fill-capture > .rs-tree__empty[data-v-59bbd9de],
19
+ .rs-tree--fill-capture > .rs-tree__viewport[data-v-59bbd9de] {
20
20
  position: relative;
21
21
  z-index: 1;
22
22
  height: 100%;
23
23
  min-height: 0;
24
24
  box-sizing: border-box;
25
25
  }
26
- .rs-tree[data-v-8aa5cfea]:focus-visible {
26
+ .rs-tree[data-v-59bbd9de]:focus-visible {
27
27
  box-shadow: 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
28
28
  border-radius: var(--rs-radius-sm);
29
29
  }
30
- .rs-tree__viewport--scroll[data-v-8aa5cfea] {
30
+ .rs-tree__viewport--scroll[data-v-59bbd9de] {
31
31
  overflow: auto;
32
32
  }
33
33
 
34
34
  /* 虚拟模式下组件自动撑满父容器,使内置 ResizeObserver 能测到真实可用高度 */
35
- .rs-tree--virtual[data-v-8aa5cfea] {
35
+ .rs-tree--virtual[data-v-59bbd9de] {
36
36
  height: 100%;
37
37
  }
38
- .rs-tree--virtual .rs-tree__viewport--scroll[data-v-8aa5cfea],
39
- .rs-tree__viewport--scroll[data-v-8aa5cfea] {
38
+ .rs-tree--virtual .rs-tree__viewport--scroll[data-v-59bbd9de],
39
+ .rs-tree__viewport--scroll[data-v-59bbd9de] {
40
40
  border-radius: var(--rs-radius-sm);
41
41
  }
42
- .rs-tree__empty[data-v-8aa5cfea] {
42
+ .rs-tree__empty[data-v-59bbd9de] {
43
43
  padding: var(--rs-space-xl) var(--rs-space-md);
44
44
  }
45
- .rs-tree__list[data-v-8aa5cfea],
46
- .rs-tree__item[data-v-8aa5cfea] {
45
+ .rs-tree__list[data-v-59bbd9de],
46
+ .rs-tree__item[data-v-59bbd9de] {
47
47
  margin: 0;
48
48
  padding: 0;
49
49
  list-style: none;
50
50
  }
51
- .rs-tree__row[data-v-8aa5cfea] {
51
+ .rs-tree__row[data-v-59bbd9de] {
52
52
  position: relative;
53
53
  display: flex;
54
54
  align-items: center;
@@ -59,83 +59,82 @@
59
59
  box-sizing: border-box;
60
60
  transition: background 0.15s ease, box-shadow 0.15s ease, color 0.15s ease;
61
61
  }
62
- .rs-tree__row[data-v-8aa5cfea]:hover:not(.rs-tree__row--disabled):not(.rs-tree__row--selected) {
62
+ .rs-tree__row[data-v-59bbd9de]:hover:not(.rs-tree__row--disabled):not(.rs-tree__row--selected) {
63
63
  background: var(--rs-tree-row-hover);
64
64
  }
65
- .rs-tree__row--selected[data-v-8aa5cfea] {
65
+ .rs-tree__row--selected[data-v-59bbd9de] {
66
66
  background: var(--rs-tree-selected-bg);
67
67
  }
68
- .rs-tree__row--selected .rs-tree__label[data-v-8aa5cfea],
69
- .rs-tree__row--selected .rs-tree__label--block[data-v-8aa5cfea] {
68
+ .rs-tree__row--selected .rs-tree__label[data-v-59bbd9de],
69
+ .rs-tree__row--selected .rs-tree__label--block[data-v-59bbd9de] {
70
70
  color: var(--rs-tree-selected-fg);
71
71
  font-weight: inherit;
72
72
  }
73
- .rs-tree__row--focused[data-v-8aa5cfea] {
73
+ .rs-tree__row--focused[data-v-59bbd9de] {
74
74
  background: var(--rs-tree-focused-bg);
75
75
  box-shadow: inset 0 0 0 1px var(--rs-tree-focused-ring);
76
76
  }
77
- .rs-tree__row--selected.rs-tree__row--focused[data-v-8aa5cfea] {
77
+ .rs-tree__row--selected.rs-tree__row--focused[data-v-59bbd9de] {
78
78
  background: var(--rs-tree-selected-focused-bg);
79
79
  box-shadow: inset 0 0 0 1px var(--rs-tree-selected-focused-ring);
80
80
  }
81
- .rs-tree--block .rs-tree__row[data-v-8aa5cfea] {
81
+ .rs-tree--block .rs-tree__row[data-v-59bbd9de] {
82
82
  cursor: pointer;
83
83
  }
84
- .rs-tree__row--disabled[data-v-8aa5cfea] {
84
+ .rs-tree__row--disabled[data-v-59bbd9de] {
85
85
  opacity: 0.38;
86
86
  cursor: not-allowed;
87
87
  }
88
- .rs-tree__row--drop-before[data-v-8aa5cfea]::before,
89
- .rs-tree__row--drop-after[data-v-8aa5cfea]::after {
88
+ .rs-tree__row--drop-before[data-v-59bbd9de]::before,
89
+ .rs-tree__row--drop-after[data-v-59bbd9de]::after {
90
90
  content: '';
91
91
  position: absolute;
92
- left: 0;
93
- right: 0;
92
+ inset-inline: 0;
94
93
  height: 2px;
95
94
  background: var(--rs-tree-drop-indicator);
96
95
  pointer-events: none;
97
96
  }
98
- .rs-tree__row--drop-before[data-v-8aa5cfea]::before {
97
+ .rs-tree__row--drop-before[data-v-59bbd9de]::before {
99
98
  top: 0;
100
99
  }
101
- .rs-tree__row--drop-after[data-v-8aa5cfea]::after {
100
+ .rs-tree__row--drop-after[data-v-59bbd9de]::after {
102
101
  bottom: 0;
103
102
  }
104
- .rs-tree__row--drop-inside[data-v-8aa5cfea] {
103
+ .rs-tree__row--drop-inside[data-v-59bbd9de] {
105
104
  background: color-mix(in srgb, var(--rs-primary) 8%, transparent);
106
105
  }
107
- .rs-tree--line .rs-tree__lines[data-v-8aa5cfea] {
106
+ .rs-tree--line .rs-tree__lines[data-v-59bbd9de] {
108
107
  position: absolute;
109
108
  inset: 0;
110
109
  pointer-events: none;
111
110
  }
112
111
 
113
112
  /* 导航线:半透明字色 token,避免宿主把 --rs-border-subtle 桥成实色灰后过深 */
114
- .rs-tree--line .rs-tree__line-vert[data-v-8aa5cfea] {
113
+ .rs-tree--line .rs-tree__line-vert[data-v-59bbd9de] {
115
114
  position: absolute;
116
115
  top: 0;
117
116
  bottom: 0;
118
117
  width: var(--rs-tree-line-width, 1px);
119
118
  background: var(--rs-tree-line);
120
119
  }
121
- .rs-tree--line .rs-tree__line-vert--self.rs-tree__line-vert--end[data-v-8aa5cfea] {
120
+ .rs-tree--line .rs-tree__line-vert--self.rs-tree__line-vert--end[data-v-59bbd9de] {
122
121
  bottom: 50%;
123
122
  }
124
- .rs-tree--line .rs-tree__line-horz[data-v-8aa5cfea] {
123
+ .rs-tree--line .rs-tree__line-horz[data-v-59bbd9de] {
125
124
  position: absolute;
126
125
  top: 50%;
127
126
  height: var(--rs-tree-line-width, 1px);
128
127
  background: var(--rs-tree-line);
129
128
  }
130
- .rs-tree__drag-handle[data-v-8aa5cfea] {
129
+ .rs-tree__drag-handle[data-v-59bbd9de] {
131
130
  display: inline-flex;
132
131
  align-items: center;
133
132
  color: var(--rs-muted);
134
133
  cursor: move;
135
134
  flex: 0 0 auto;
136
135
  }
137
- .rs-tree__toggle[data-v-8aa5cfea],
138
- .rs-tree__spacer[data-v-8aa5cfea] {
136
+ .rs-tree__toggle[data-v-59bbd9de],
137
+ .rs-tree__spacer[data-v-59bbd9de] {
139
138
  display: inline-flex;
140
139
  align-items: center;
141
140
  justify-content: center;
@@ -143,7 +142,7 @@
143
142
  height: 1.25rem;
144
143
  flex: 0 0 auto;
145
144
  }
146
- .rs-tree__toggle[data-v-8aa5cfea] {
145
+ .rs-tree__toggle[data-v-59bbd9de] {
147
146
  border: 0;
148
147
  padding: 0;
149
148
  border-radius: var(--rs-radius-xs);
@@ -153,16 +152,16 @@
153
152
  outline: none;
154
153
  transition: color var(--rs-transition-fast);
155
154
  }
156
- .rs-tree__toggle[data-v-8aa5cfea]:hover:not(:disabled) {
155
+ .rs-tree__toggle[data-v-59bbd9de]:hover:not(:disabled) {
157
156
  color: var(--rs-text);
158
157
  }
159
- .rs-tree__toggle[data-v-8aa5cfea]:focus-visible {
158
+ .rs-tree__toggle[data-v-59bbd9de]:focus-visible {
160
159
  box-shadow: 0 0 0 var(--rs-focus-ring-width, 2px) var(--rs-focus-ring);
161
160
  }
162
- .rs-tree__toggle[data-v-8aa5cfea]:disabled {
161
+ .rs-tree__toggle[data-v-59bbd9de]:disabled {
163
162
  cursor: default;
164
163
  }
165
- .rs-tree__toggle-caret[data-v-8aa5cfea] {
164
+ .rs-tree__toggle-caret[data-v-59bbd9de] {
166
165
  display: block;
167
166
  font-size: var(--rs-font-size-lg);
168
167
  font-weight: var(--rs-font-weight-medium);
@@ -170,26 +169,26 @@
170
169
  transform: translateY(-0.5px);
171
170
  transition: transform var(--rs-transition-fast);
172
171
  }
173
- .rs-tree__toggle--expanded .rs-tree__toggle-caret[data-v-8aa5cfea] {
172
+ .rs-tree__toggle--expanded .rs-tree__toggle-caret[data-v-59bbd9de] {
174
173
  transform: translateY(-0.5px) rotate(90deg);
175
174
  }
176
- .rs-tree__loading-icon[data-v-8aa5cfea] {
175
+ .rs-tree__loading-icon[data-v-59bbd9de] {
177
176
  color: var(--rs-primary);
178
177
  }
179
- .rs-tree__checkbox[data-v-8aa5cfea] {
178
+ .rs-tree__checkbox[data-v-59bbd9de] {
180
179
  position: relative;
181
180
  display: inline-flex;
182
181
  align-items: center;
183
182
  flex: 0 0 auto;
184
183
  cursor: pointer;
185
184
  }
186
- .rs-tree__checkbox-spacer[data-v-8aa5cfea] {
185
+ .rs-tree__checkbox-spacer[data-v-59bbd9de] {
187
186
  display: inline-block;
188
187
  width: 1rem;
189
188
  height: 1rem;
190
189
  flex: 0 0 auto;
191
190
  }
192
- .rs-tree__checkbox-input[data-v-8aa5cfea] {
191
+ .rs-tree__checkbox-input[data-v-59bbd9de] {
193
192
  position: absolute;
194
193
  width: 1px;
195
194
  height: 1px;
@@ -200,7 +199,7 @@
200
199
  white-space: nowrap;
201
200
  border: 0;
202
201
  }
203
- .rs-tree__checkbox-box[data-v-8aa5cfea] {
202
+ .rs-tree__checkbox-box[data-v-59bbd9de] {
204
203
  display: inline-flex;
205
204
  align-items: center;
206
205
  justify-content: center;
@@ -211,12 +210,12 @@
211
210
  background: var(--rs-surface);
212
211
  transition: background 0.15s ease, border-color 0.15s ease;
213
212
  }
214
- .rs-tree__checkbox--checked .rs-tree__checkbox-box[data-v-8aa5cfea],
215
- .rs-tree__checkbox--indeterminate .rs-tree__checkbox-box[data-v-8aa5cfea] {
213
+ .rs-tree__checkbox--checked .rs-tree__checkbox-box[data-v-59bbd9de],
214
+ .rs-tree__checkbox--indeterminate .rs-tree__checkbox-box[data-v-59bbd9de] {
216
215
  border-color: var(--rs-primary);
217
216
  background: var(--rs-primary);
218
217
  }
219
- .rs-tree__checkbox--checked .rs-tree__checkbox-box[data-v-8aa5cfea]::after {
218
+ .rs-tree__checkbox--checked .rs-tree__checkbox-box[data-v-59bbd9de]::after {
220
219
  content: '';
221
220
  width: 0.3rem;
222
221
  height: 0.55rem;
@@ -224,18 +223,18 @@
224
223
  border-width: 0 2px 2px 0;
225
224
  transform: rotate(45deg) translate(-1px, -1px);
226
225
  }
227
- .rs-tree__checkbox--indeterminate .rs-tree__checkbox-box[data-v-8aa5cfea]::after {
226
+ .rs-tree__checkbox--indeterminate .rs-tree__checkbox-box[data-v-59bbd9de]::after {
228
227
  content: '';
229
228
  width: 0.5rem;
230
229
  height: 2px;
231
230
  background: var(--rs-on-primary, #fff);
232
231
  border-radius: 1px;
233
232
  }
234
- .rs-tree__node-icon[data-v-8aa5cfea] {
233
+ .rs-tree__node-icon[data-v-59bbd9de] {
235
234
  flex: 0 0 auto;
236
235
  color: var(--rs-muted);
237
236
  }
238
- .rs-tree__label[data-v-8aa5cfea] {
237
+ .rs-tree__label[data-v-59bbd9de] {
239
238
  flex: 1 1 auto;
240
239
  min-width: 0;
241
240
  border: 0;
@@ -246,20 +245,20 @@
246
245
  text-align: start;
247
246
  cursor: pointer;
248
247
  }
249
- .rs-tree__label-text[data-v-8aa5cfea] {
248
+ .rs-tree__label-text[data-v-59bbd9de] {
250
249
  display: block;
251
250
  overflow: hidden;
252
251
  text-overflow: ellipsis;
253
252
  white-space: nowrap;
254
253
  }
255
- .rs-tree__label--block[data-v-8aa5cfea] {
254
+ .rs-tree__label--block[data-v-59bbd9de] {
256
255
  cursor: inherit;
257
256
  }
258
- .rs-tree__label[data-v-8aa5cfea]:disabled,
259
- .rs-tree__label--disabled[data-v-8aa5cfea] {
257
+ .rs-tree__label[data-v-59bbd9de]:disabled,
258
+ .rs-tree__label--disabled[data-v-59bbd9de] {
260
259
  cursor: not-allowed;
261
260
  }
262
- .rs-tree__highlight[data-v-8aa5cfea] {
261
+ .rs-tree__highlight[data-v-59bbd9de] {
263
262
  padding: 0 0.125rem;
264
263
  border: 0;
265
264
  border-radius: 2px;
@@ -267,42 +266,42 @@
267
266
  color: inherit;
268
267
  font-weight: var(--rs-font-weight-semibold);
269
268
  }
270
- .rs-tree__pad[data-v-8aa5cfea] {
269
+ .rs-tree__pad[data-v-59bbd9de] {
271
270
  flex: 0 0 auto;
272
271
  pointer-events: none;
273
272
  }
274
- .rs-tree--ssm .rs-tree__label[data-v-8aa5cfea],
275
- .rs-tree--ssm .rs-tree__toggle[data-v-8aa5cfea] {
273
+ .rs-tree--ssm .rs-tree__label[data-v-59bbd9de],
274
+ .rs-tree--ssm .rs-tree__toggle[data-v-59bbd9de] {
276
275
  font-size: var(--rs-font-size-xs);
277
276
  }
278
- .rs-tree--ssm .rs-tree__toggle[data-v-8aa5cfea],
279
- .rs-tree--ssm .rs-tree__spacer[data-v-8aa5cfea] {
277
+ .rs-tree--ssm .rs-tree__toggle[data-v-59bbd9de],
278
+ .rs-tree--ssm .rs-tree__spacer[data-v-59bbd9de] {
280
279
  width: 0.875rem;
281
280
  height: 0.875rem;
282
281
  }
283
- .rs-tree--ssm .rs-tree__toggle-caret[data-v-8aa5cfea] {
282
+ .rs-tree--ssm .rs-tree__toggle-caret[data-v-59bbd9de] {
284
283
  font-size: var(--rs-font-size-sm);
285
284
  }
286
- .rs-tree--sm .rs-tree__label[data-v-8aa5cfea],
287
- .rs-tree--sm .rs-tree__toggle[data-v-8aa5cfea] {
285
+ .rs-tree--sm .rs-tree__label[data-v-59bbd9de],
286
+ .rs-tree--sm .rs-tree__toggle[data-v-59bbd9de] {
288
287
  font-size: var(--rs-font-size-xs);
289
288
  }
290
- .rs-tree--sm .rs-tree__toggle[data-v-8aa5cfea],
291
- .rs-tree--sm .rs-tree__spacer[data-v-8aa5cfea] {
289
+ .rs-tree--sm .rs-tree__toggle[data-v-59bbd9de],
290
+ .rs-tree--sm .rs-tree__spacer[data-v-59bbd9de] {
292
291
  width: 1rem;
293
292
  height: 1rem;
294
293
  }
295
- .rs-tree--sm .rs-tree__toggle-caret[data-v-8aa5cfea] {
294
+ .rs-tree--sm .rs-tree__toggle-caret[data-v-59bbd9de] {
296
295
  font-size: var(--rs-font-size-base);
297
296
  }
298
- .rs-tree--lg .rs-tree__label[data-v-8aa5cfea] {
297
+ .rs-tree--lg .rs-tree__label[data-v-59bbd9de] {
299
298
  font-size: var(--rs-font-size-sm);
300
299
  }
301
- .rs-tree--lg .rs-tree__toggle[data-v-8aa5cfea],
302
- .rs-tree--lg .rs-tree__spacer[data-v-8aa5cfea] {
300
+ .rs-tree--lg .rs-tree__toggle[data-v-59bbd9de],
301
+ .rs-tree--lg .rs-tree__spacer[data-v-59bbd9de] {
303
302
  width: 1.5rem;
304
303
  height: 1.5rem;
305
304
  }
306
- .rs-tree--lg .rs-tree__toggle-caret[data-v-8aa5cfea] {
305
+ .rs-tree--lg .rs-tree__toggle-caret[data-v-59bbd9de] {
307
306
  font-size: var(--rs-font-size-xl);
308
307
  }
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
3
3
  import RsTree_vue_vue_type_script_setup_true_lang_default from "./RsTree.impl.js";
4
4
 
5
5
  //#region src/components/tree/src/RsTree.vue
6
- var RsTree_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsTree_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-8aa5cfea"]]);
6
+ var RsTree_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsTree_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-59bbd9de"]]);
7
7
  //#endregion
8
8
  export { RsTree_default as default };
@@ -1,5 +1,5 @@
1
1
 
2
- .rs-tree-select[data-v-5417c986] {
2
+ .rs-tree-select[data-v-47b84d55] {
3
3
  display: inline-flex;
4
4
  align-items: center;
5
5
  gap: var(--rs-space-sm);
@@ -15,40 +15,40 @@
15
15
  font-size: var(--rs-font-size-sm);
16
16
  cursor: pointer;
17
17
  }
18
- .rs-tree-select--sm[data-v-5417c986] {
18
+ .rs-tree-select--sm[data-v-47b84d55] {
19
19
  height: var(--rs-control-height-sm);
20
20
  }
21
- .rs-tree-select--lg[data-v-5417c986] {
21
+ .rs-tree-select--lg[data-v-47b84d55] {
22
22
  height: var(--rs-control-height-lg);
23
23
  }
24
- .rs-tree-select--disabled[data-v-5417c986] {
24
+ .rs-tree-select--disabled[data-v-47b84d55] {
25
25
  opacity: 0.38;
26
26
  cursor: not-allowed;
27
27
  }
28
- .rs-tree-select__placeholder[data-v-5417c986] {
28
+ .rs-tree-select__placeholder[data-v-47b84d55] {
29
29
  flex: 1;
30
30
  color: var(--rs-muted);
31
- text-align: left;
31
+ text-align: start;
32
32
  }
33
- .rs-tree-select__value[data-v-5417c986] {
33
+ .rs-tree-select__value[data-v-47b84d55] {
34
34
  flex: 1;
35
35
  overflow: hidden;
36
- text-align: left;
36
+ text-align: start;
37
37
  text-overflow: ellipsis;
38
38
  white-space: nowrap;
39
39
  }
40
- .rs-tree-select__clear[data-v-5417c986] {
40
+ .rs-tree-select__clear[data-v-47b84d55] {
41
41
  border: 0;
42
42
  background: transparent;
43
43
  color: var(--rs-muted);
44
44
  cursor: pointer;
45
45
  }
46
- .rs-tree-select__panel[data-v-5417c986] {
46
+ .rs-tree-select__panel[data-v-47b84d55] {
47
47
  max-height: 18rem;
48
48
  padding: var(--rs-space-xs);
49
49
  overflow: auto;
50
50
  }
51
- .rs-tree-select__search[data-v-5417c986] {
51
+ .rs-tree-select__search[data-v-47b84d55] {
52
52
  box-sizing: border-box;
53
53
  width: 100%;
54
54
  margin-bottom: var(--rs-space-xs);
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
3
3
  import RsTreeSelect_vue_vue_type_script_setup_true_lang_default from "./RsTreeSelect.impl.js";
4
4
 
5
5
  //#region src/components/tree-select/src/RsTreeSelect.vue
6
- var RsTreeSelect_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsTreeSelect_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-5417c986"]]);
6
+ var RsTreeSelect_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsTreeSelect_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-47b84d55"]]);
7
7
  //#endregion
8
8
  export { RsTreeSelect_default as default };
@@ -1,29 +1,28 @@
1
1
 
2
- .rs-virtual-list[data-v-50e53514] {
2
+ .rs-virtual-list[data-v-4d459ccc] {
3
3
  overflow: auto;
4
4
  border: 1px solid var(--rs-border-subtle);
5
5
  border-radius: var(--rs-virtual-list-radius, var(--rs-radius-sm));
6
6
  }
7
- .rs-virtual-list--fill[data-v-50e53514] {
7
+ .rs-virtual-list--fill[data-v-4d459ccc] {
8
8
  flex: 1;
9
9
  align-self: stretch;
10
10
  width: 100%;
11
11
  min-height: 0;
12
12
  height: 0;
13
13
  }
14
- .rs-virtual-list__spacer[data-v-50e53514] {
14
+ .rs-virtual-list__spacer[data-v-4d459ccc] {
15
15
  position: relative;
16
16
  }
17
- .rs-virtual-list__items[data-v-50e53514] {
17
+ .rs-virtual-list__items[data-v-4d459ccc] {
18
18
  position: absolute;
19
- left: 0;
20
- right: 0;
19
+ inset-inline: 0;
21
20
  top: 0;
22
21
  }
23
- .rs-virtual-list__item[data-v-50e53514] {
22
+ .rs-virtual-list__item[data-v-4d459ccc] {
24
23
  box-sizing: border-box;
25
24
  }
26
- .rs-virtual-list__item--active[data-v-50e53514] {
25
+ .rs-virtual-list__item--active[data-v-4d459ccc] {
27
26
  background: color-mix(in srgb, var(--rs-primary) 14%, var(--rs-surface));
28
27
  box-shadow: inset 2px 0 0 var(--rs-primary);
29
28
  }
@@ -3,6 +3,6 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
3
3
  import RsVirtualList_vue_vue_type_script_setup_true_lang_default from "./RsVirtualList.impl.js";
4
4
 
5
5
  //#region src/components/virtual-list/src/RsVirtualList.vue
6
- var RsVirtualList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsVirtualList_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-50e53514"]]);
6
+ var RsVirtualList_default = /*#__PURE__*/ _plugin_vue_export_helper_default(RsVirtualList_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-4d459ccc"]]);
7
7
  //#endregion
8
8
  export { RsVirtualList_default as default };
@@ -1,17 +1,18 @@
1
- import { defaultLocale } from "../locale/types.js";
1
+ import { isRsLocaleRegistered } from "../locale/registry.js";
2
+ import { resolveHostLocale } from "../locale/resolve-host.js";
3
+ import { readResolvedTheme } from "../theme/apply.js";
2
4
  import RsConfigProvider_default from "../components/config-provider/src/RsConfigProvider.js";
3
5
  import RsDialog_default from "../components/dialog/src/RsDialog.js";
4
6
  import RsConfirmDialog_default from "../components/dialog/src/RsConfirmDialog.js";
5
7
  import { createApp, h, ref } from "vue";
6
8
  //#region src/composables/createRsDialog.ts
7
9
  function readDomTheme() {
8
- if (typeof document === "undefined") return "light";
9
- return document.documentElement.getAttribute("data-rs-theme") === "dark" ? "dark" : "light";
10
+ return readResolvedTheme();
10
11
  }
11
12
  function readDomLocale() {
12
- if (typeof document === "undefined") return defaultLocale;
13
+ if (typeof document === "undefined") return resolveHostLocale();
13
14
  const value = document.documentElement.getAttribute("data-rs-locale");
14
- return value === "en-US" || value === "zh-CN" ? value : defaultLocale;
15
+ return value && isRsLocaleRegistered(value) ? value : resolveHostLocale();
15
16
  }
16
17
  /** 命令式实例的销毁函数;测试收尾用 destroyAllRsDialogHosts 走正规 unmount。 */
17
18
  var liveHosts = /* @__PURE__ */ new Set();
@@ -1,10 +1,15 @@
1
1
  import { type InjectionKey, type Ref } from 'vue';
2
2
  import { type RsTranslateFn } from '../locale/interpolate';
3
- import { type RsLocale } from '../locale/types';
4
- import type { RsComponentSize, RsRadius, RsThemeMode } from '../theme/types';
3
+ import { type RsDirMode, type RsLocale } from '../locale/types';
4
+ import type { RsComponentSize, RsRadius, RsResolvedTheme, RsThemeMode } from '../theme/types';
5
5
  export interface RsConfigContext {
6
+ /** 用户偏好:light / dark / system */
6
7
  theme: Ref<RsThemeMode>;
8
+ /** 已解析的明暗,跟着 applyTheme 与系统偏好更新 */
9
+ resolvedTheme: Ref<RsResolvedTheme>;
7
10
  locale: Ref<RsLocale>;
11
+ /** 书写方向偏好:ltr / rtl / auto(跟 locale) */
12
+ dir: Ref<RsDirMode>;
8
13
  /** 全局默认控件尺寸(ssm / sm / md / lg)。 */
9
14
  controlSize: Ref<RsComponentSize>;
10
15
  /**
@@ -14,13 +19,16 @@ export interface RsConfigContext {
14
19
  controlRadius: Ref<RsRadius | undefined>;
15
20
  setTheme: (mode: RsThemeMode) => void;
16
21
  setLocale: (locale: RsLocale) => void;
22
+ setDir: (dir: RsDirMode) => void;
17
23
  setControlSize: (size: RsComponentSize) => void;
18
24
  setControlRadius: (radius: RsRadius | undefined) => void;
25
+ /** 系统偏好变化或 applyTheme 之后同步 resolvedTheme */
26
+ syncResolvedTheme: () => void;
19
27
  t: RsTranslateFn;
20
28
  }
21
29
  export declare const rsConfigKey: InjectionKey<RsConfigContext>;
22
30
  export declare function useRsConfig(): RsConfigContext;
23
31
  /** 可选读取;组件在 Provider 外也可独立使用。 */
24
32
  export declare function useRsConfigOptional(): RsConfigContext | null;
25
- export declare function createRsConfigState(initialTheme?: RsThemeMode, initialLocale?: RsLocale, initialControlSize?: RsComponentSize, initialControlRadius?: RsRadius): RsConfigContext;
33
+ export declare function createRsConfigState(initialTheme?: RsThemeMode, initialLocale?: RsLocale, initialControlSize?: RsComponentSize, initialControlRadius?: RsRadius, initialDir?: RsDirMode): RsConfigContext;
26
34
  export declare function provideRsConfig(ctx: RsConfigContext): void;
@@ -1,6 +1,7 @@
1
1
  import { interpolateRsMessage, resolveRsTranslateArgs } from "../locale/interpolate.js";
2
- import { localeMap } from "../locale/messages.js";
3
- import { defaultLocale } from "../locale/types.js";
2
+ import { resolveRsMessage } from "../locale/registry.js";
3
+ import { resolveHostLocale } from "../locale/resolve-host.js";
4
+ import { resolveThemeMode } from "../theme/apply.js";
4
5
  import { inject, provide, ref } from "vue";
5
6
  //#region src/composables/useRsConfig.ts
6
7
  var rsConfigKey = Symbol("rs-config");
@@ -13,17 +14,25 @@ function useRsConfig() {
13
14
  function useRsConfigOptional() {
14
15
  return inject(rsConfigKey, null);
15
16
  }
16
- function createRsConfigState(initialTheme = "light", initialLocale = defaultLocale, initialControlSize = "md", initialControlRadius) {
17
+ function createRsConfigState(initialTheme = "light", initialLocale = resolveHostLocale(), initialControlSize = "md", initialControlRadius, initialDir = "auto") {
17
18
  const theme = ref(initialTheme);
19
+ const resolvedTheme = ref(resolveThemeMode(initialTheme));
18
20
  const locale = ref(initialLocale);
21
+ const dir = ref(initialDir);
19
22
  const controlSize = ref(initialControlSize);
20
23
  const controlRadius = ref(initialControlRadius);
21
24
  function setTheme(mode) {
22
25
  theme.value = mode;
26
+ resolvedTheme.value = resolveThemeMode(mode);
27
+ }
28
+ function syncResolvedTheme() {
29
+ resolvedTheme.value = resolveThemeMode(theme.value);
23
30
  }
24
31
  function setLocale(next) {
25
32
  locale.value = next;
26
- if (typeof document !== "undefined") document.documentElement.setAttribute("data-rs-locale", next);
33
+ }
34
+ function setDir(next) {
35
+ dir.value = next;
27
36
  }
28
37
  function setControlSize(size) {
29
38
  controlSize.value = size;
@@ -33,18 +42,21 @@ function createRsConfigState(initialTheme = "light", initialLocale = defaultLoca
33
42
  }
34
43
  const t = (key, fallbackOrVars, vars) => {
35
44
  const parsed = resolveRsTranslateArgs(fallbackOrVars, vars);
36
- return interpolateRsMessage(localeMap[locale.value][key] ?? parsed.fallback ?? key, parsed.vars);
45
+ return interpolateRsMessage(resolveRsMessage(locale.value, key) ?? parsed.fallback ?? key, parsed.vars, locale.value);
37
46
  };
38
- if (typeof document !== "undefined") document.documentElement.setAttribute("data-rs-locale", locale.value);
39
47
  return {
40
48
  theme,
49
+ resolvedTheme,
41
50
  locale,
51
+ dir,
42
52
  controlSize,
43
53
  controlRadius,
44
54
  setTheme,
45
55
  setLocale,
56
+ setDir,
46
57
  setControlSize,
47
58
  setControlRadius,
59
+ syncResolvedTheme,
48
60
  t
49
61
  };
50
62
  }
@@ -1,7 +1,7 @@
1
1
  import { type RsI18nVars, type RsTranslateFn } from '../locale/interpolate';
2
2
  import { type RsLocale } from '../locale/types';
3
3
  export type { RsI18nVars, RsTranslateFn };
4
- /** 组件内安全取文案:Provider 内跟随 locale,否则回退 defaultLocale */
4
+ /** 组件内安全取文案:Provider 内跟随 locale,否则按本机语言,再回退 zh-CN */
5
5
  export declare function useRsI18n(): {
6
6
  t: RsTranslateFn;
7
7
  locale: import("vue").ComputedRef<RsLocale>;
@@ -1,17 +1,17 @@
1
1
  import { interpolateRsMessage, resolveRsTranslateArgs } from "../locale/interpolate.js";
2
- import { localeMap } from "../locale/messages.js";
3
- import "../locale/types.js";
2
+ import { resolveRsMessage } from "../locale/registry.js";
3
+ import { resolveHostLocale } from "../locale/resolve-host.js";
4
4
  import { rsConfigKey } from "./useRsConfig.js";
5
5
  import { computed, inject } from "vue";
6
6
  //#region src/composables/useRsI18n.ts
7
7
  function translate(locale, key, fallbackOrVars, vars) {
8
8
  const parsed = resolveRsTranslateArgs(fallbackOrVars, vars);
9
- return interpolateRsMessage(localeMap[locale][key] ?? parsed.fallback ?? key, parsed.vars);
9
+ return interpolateRsMessage(resolveRsMessage(locale, key) ?? parsed.fallback ?? key, parsed.vars, locale);
10
10
  }
11
- /** 组件内安全取文案:Provider 内跟随 locale,否则回退 defaultLocale */
11
+ /** 组件内安全取文案:Provider 内跟随 locale,否则按本机语言,再回退 zh-CN */
12
12
  function useRsI18n() {
13
13
  const ctx = inject(rsConfigKey, null);
14
- const locale = computed(() => ctx?.locale.value ?? "zh-CN");
14
+ const locale = computed(() => ctx?.locale.value ?? resolveHostLocale());
15
15
  const t = (key, fallbackOrVars, vars) => translate(locale.value, key, fallbackOrVars, vars);
16
16
  return {
17
17
  t,
@@ -0,0 +1,6 @@
1
+ /** 内置品牌 mark(工作台数据源)。Lucide 线标不在此列。 */
2
+ export declare const rsBrandIconNames: readonly ["ftp", "redis", "mongodb", "vastbase", "mysql", "sqlite", "dameng", "oracle", "clickhouse", "kingbase", "sqlserver", "postgres"];
3
+ export type RsBrandIconName = (typeof rsBrandIconNames)[number];
4
+ export declare function isRsBrandIconName(name: string): name is RsBrandIconName;
5
+ /** 品牌 mark 填充色变量,如 `--rs-icon-mysql-accent`。 */
6
+ export declare function rsBrandIconAccentVar(name: RsBrandIconName): `--rs-icon-${RsBrandIconName}-accent`;