niuma-ui 1.0.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 (220) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE +25 -0
  4. package/README.en.md +99 -0
  5. package/README.md +161 -0
  6. package/package.json +106 -0
  7. package/src/__tests__/RsBadge.spec.ts +40 -0
  8. package/src/__tests__/RsBreadcrumb.spec.ts +172 -0
  9. package/src/__tests__/RsButton.spec.ts +108 -0
  10. package/src/__tests__/RsCalendarGrid.spec.ts +82 -0
  11. package/src/__tests__/RsCard.spec.ts +97 -0
  12. package/src/__tests__/RsCheckbox.spec.ts +36 -0
  13. package/src/__tests__/RsCodeEditor.spec.ts +111 -0
  14. package/src/__tests__/RsConfirmDialog.spec.ts +158 -0
  15. package/src/__tests__/RsContainer.spec.ts +89 -0
  16. package/src/__tests__/RsContextMenu.spec.ts +118 -0
  17. package/src/__tests__/RsDatePicker.spec.ts +88 -0
  18. package/src/__tests__/RsDateTimePicker.spec.ts +69 -0
  19. package/src/__tests__/RsDialog.spec.ts +404 -0
  20. package/src/__tests__/RsDrawer.spec.ts +145 -0
  21. package/src/__tests__/RsDropdown.spec.ts +135 -0
  22. package/src/__tests__/RsEmpty.spec.ts +99 -0
  23. package/src/__tests__/RsForm.spec.ts +173 -0
  24. package/src/__tests__/RsIcon.spec.ts +244 -0
  25. package/src/__tests__/RsInput.spec.ts +269 -0
  26. package/src/__tests__/RsInputNumber.spec.ts +118 -0
  27. package/src/__tests__/RsLabel.spec.ts +106 -0
  28. package/src/__tests__/RsLink.spec.ts +49 -0
  29. package/src/__tests__/RsLoading.spec.ts +84 -0
  30. package/src/__tests__/RsMarkdown.spec.ts +143 -0
  31. package/src/__tests__/RsMenu.spec.ts +119 -0
  32. package/src/__tests__/RsNewComponents.spec.ts +17 -0
  33. package/src/__tests__/RsPagination.spec.ts +158 -0
  34. package/src/__tests__/RsPopover.spec.ts +126 -0
  35. package/src/__tests__/RsScrollbar.spec.ts +53 -0
  36. package/src/__tests__/RsSelect.spec.ts +291 -0
  37. package/src/__tests__/RsSidebar.spec.ts +119 -0
  38. package/src/__tests__/RsSplitPane.spec.ts +177 -0
  39. package/src/__tests__/RsStatCard.spec.ts +79 -0
  40. package/src/__tests__/RsSteps.spec.ts +125 -0
  41. package/src/__tests__/RsTable.perf.spec.ts +103 -0
  42. package/src/__tests__/RsTable.spec.ts +1135 -0
  43. package/src/__tests__/RsTabs.spec.ts +328 -0
  44. package/src/__tests__/RsTerminal.spec.ts +218 -0
  45. package/src/__tests__/RsTimePicker.spec.ts +77 -0
  46. package/src/__tests__/RsToaster.spec.ts +95 -0
  47. package/src/__tests__/RsToolbar.spec.ts +75 -0
  48. package/src/__tests__/RsTooltip.spec.ts +111 -0
  49. package/src/__tests__/RsTree.spec.ts +572 -0
  50. package/src/__tests__/RsUpload.spec.ts +160 -0
  51. package/src/__tests__/RsVirtualList.spec.ts +77 -0
  52. package/src/__tests__/date-picker-utils.spec.ts +70 -0
  53. package/src/__tests__/dialog-viewport.spec.ts +38 -0
  54. package/src/__tests__/iso-local-datetime.spec.ts +58 -0
  55. package/src/__tests__/rs-clipboard.spec.ts +142 -0
  56. package/src/__tests__/setup.ts +12 -0
  57. package/src/__tests__/split-pane-utils.spec.ts +136 -0
  58. package/src/__tests__/table-drag.spec.ts +35 -0
  59. package/src/__tests__/table-edit-utils.spec.ts +194 -0
  60. package/src/__tests__/table-utils.spec.ts +286 -0
  61. package/src/__tests__/theme.spec.ts +22 -0
  62. package/src/__tests__/tree-utils.spec.ts +234 -0
  63. package/src/__tests__/useTableCellTooltip.spec.ts +101 -0
  64. package/src/components/RsAvatar.vue +115 -0
  65. package/src/components/RsBadge.vue +59 -0
  66. package/src/components/RsBreadcrumb.vue +65 -0
  67. package/src/components/RsBreadcrumbItems.vue +36 -0
  68. package/src/components/RsButton.vue +393 -0
  69. package/src/components/RsCalendarGrid.vue +284 -0
  70. package/src/components/RsCard.vue +237 -0
  71. package/src/components/RsCheckbox.vue +189 -0
  72. package/src/components/RsCodeBlock.vue +278 -0
  73. package/src/components/RsCodeEditor.vue +597 -0
  74. package/src/components/RsConfigProvider.vue +92 -0
  75. package/src/components/RsConfirmDialog.vue +178 -0
  76. package/src/components/RsContainer.vue +235 -0
  77. package/src/components/RsContextMenu.vue +238 -0
  78. package/src/components/RsContextMenuItems.vue +77 -0
  79. package/src/components/RsDatePicker.vue +756 -0
  80. package/src/components/RsDateTimePicker.vue +42 -0
  81. package/src/components/RsDialog.vue +486 -0
  82. package/src/components/RsDrawer.vue +175 -0
  83. package/src/components/RsDropdown.vue +252 -0
  84. package/src/components/RsDropdownItems.vue +90 -0
  85. package/src/components/RsEmpty.vue +107 -0
  86. package/src/components/RsForm.vue +131 -0
  87. package/src/components/RsIcon.vue +104 -0
  88. package/src/components/RsInput.vue +1101 -0
  89. package/src/components/RsInputNumber.vue +532 -0
  90. package/src/components/RsLabel.vue +54 -0
  91. package/src/components/RsLink.vue +106 -0
  92. package/src/components/RsLoading.vue +171 -0
  93. package/src/components/RsMarkdown.vue +329 -0
  94. package/src/components/RsMenu.vue +256 -0
  95. package/src/components/RsMenuItems.vue +125 -0
  96. package/src/components/RsMonacoEditor.vue +541 -0
  97. package/src/components/RsPagination.vue +184 -0
  98. package/src/components/RsPopover.vue +77 -0
  99. package/src/components/RsProseEditor.vue +160 -0
  100. package/src/components/RsScrollbar.vue +171 -0
  101. package/src/components/RsSelect.vue +1045 -0
  102. package/src/components/RsSidebar.vue +121 -0
  103. package/src/components/RsSidebarGroup.vue +32 -0
  104. package/src/components/RsSidebarItem.vue +72 -0
  105. package/src/components/RsSplitPane.vue +619 -0
  106. package/src/components/RsStatCard.vue +85 -0
  107. package/src/components/RsSteps.vue +138 -0
  108. package/src/components/RsTable.vue +2664 -0
  109. package/src/components/RsTableColgroup.vue +17 -0
  110. package/src/components/RsTableHeaderRow.vue +30 -0
  111. package/src/components/RsTabs.vue +951 -0
  112. package/src/components/RsTerminal.vue +697 -0
  113. package/src/components/RsTimePicker.vue +554 -0
  114. package/src/components/RsTimePickerColumns.vue +226 -0
  115. package/src/components/RsToaster.vue +396 -0
  116. package/src/components/RsToolbar.vue +135 -0
  117. package/src/components/RsTooltip.vue +142 -0
  118. package/src/components/RsTooltipProvider.vue +20 -0
  119. package/src/components/RsTree.vue +1248 -0
  120. package/src/components/RsUpload.vue +279 -0
  121. package/src/components/RsVirtualList.vue +217 -0
  122. package/src/components/avatar-utils.ts +19 -0
  123. package/src/components/breadcrumb-utils.ts +19 -0
  124. package/src/components/class-utils.ts +29 -0
  125. package/src/components/code-editor-utils.ts +106 -0
  126. package/src/components/code-mirror-completion.ts +40 -0
  127. package/src/components/code-mirror-diagnostics.ts +52 -0
  128. package/src/components/code-mirror-ghost.ts +158 -0
  129. package/src/components/code-mirror-inline-edit.ts +55 -0
  130. package/src/components/code-mirror-intel.ts +81 -0
  131. package/src/components/code-mirror-lang.ts +128 -0
  132. package/src/components/context-menu-utils.ts +20 -0
  133. package/src/components/date-picker-utils.ts +284 -0
  134. package/src/components/date-range-validation.ts +29 -0
  135. package/src/components/date-validation.ts +38 -0
  136. package/src/components/dialog-viewport.ts +48 -0
  137. package/src/components/dialog-window.ts +253 -0
  138. package/src/components/dropdown-utils.ts +31 -0
  139. package/src/components/form-utils.ts +77 -0
  140. package/src/components/input-number-utils.ts +128 -0
  141. package/src/components/input-rules.ts +84 -0
  142. package/src/components/loading-utils.ts +8 -0
  143. package/src/components/markdown-utils.ts +126 -0
  144. package/src/components/menu-utils.ts +48 -0
  145. package/src/components/overlay-utils.ts +47 -0
  146. package/src/components/pagination-utils.ts +38 -0
  147. package/src/components/popover-utils.ts +8 -0
  148. package/src/components/reka.ts +106 -0
  149. package/src/components/resolve-radius.ts +22 -0
  150. package/src/components/resolve-size.ts +29 -0
  151. package/src/components/scrollbar-utils.ts +10 -0
  152. package/src/components/select-utils.ts +72 -0
  153. package/src/components/split-pane-utils.ts +187 -0
  154. package/src/components/steps-utils.ts +22 -0
  155. package/src/components/table/RsTableBodyRow.vue +287 -0
  156. package/src/components/table/RsTableCell.vue +239 -0
  157. package/src/components/table/RsTableCellContent.ts +18 -0
  158. package/src/components/table/RsTableCellEditor.vue +351 -0
  159. package/src/components/table/RsTableEditGutter.vue +54 -0
  160. package/src/components/table/RsTableHeaderFilter.vue +107 -0
  161. package/src/components/table/RsTableRowStatus.vue +69 -0
  162. package/src/components/table/rs-table.css +1141 -0
  163. package/src/components/table/table-context-menu.ts +53 -0
  164. package/src/components/table/table-edit-utils.ts +496 -0
  165. package/src/components/table/table-keys.ts +12 -0
  166. package/src/components/table-drag.ts +215 -0
  167. package/src/components/table-utils.ts +950 -0
  168. package/src/components/tabs-utils.ts +107 -0
  169. package/src/components/terminal-utils.ts +301 -0
  170. package/src/components/terminal-wheel.ts +49 -0
  171. package/src/components/time-picker-utils.ts +167 -0
  172. package/src/components/time-range-validation.ts +23 -0
  173. package/src/components/time-validation.ts +20 -0
  174. package/src/components/tree-utils.ts +518 -0
  175. package/src/components/upload-utils.ts +55 -0
  176. package/src/components/virtual-list-utils.ts +17 -0
  177. package/src/composables/useClickOutside.ts +22 -0
  178. package/src/composables/useRsConfig.ts +91 -0
  179. package/src/composables/useRsI18n.ts +22 -0
  180. package/src/composables/useRsTabsNav.ts +187 -0
  181. package/src/composables/useRsToast.ts +48 -0
  182. package/src/composables/useTableCellTooltip.ts +239 -0
  183. package/src/composables/useTableEdit.ts +271 -0
  184. package/src/composables/useTableRowHighlight.ts +50 -0
  185. package/src/dev/vite-codemirror-deps.ts +20 -0
  186. package/src/icons/custom/api.ts +54 -0
  187. package/src/icons/custom/clickhouse.ts +52 -0
  188. package/src/icons/custom/dameng.ts +83 -0
  189. package/src/icons/custom/ftp.ts +61 -0
  190. package/src/icons/custom/kingbase.ts +52 -0
  191. package/src/icons/custom/mongodb.ts +50 -0
  192. package/src/icons/custom/mysql.ts +51 -0
  193. package/src/icons/custom/oracle.ts +52 -0
  194. package/src/icons/custom/redis.ts +51 -0
  195. package/src/icons/custom/sqlite.ts +50 -0
  196. package/src/icons/custom/sqlserver.ts +52 -0
  197. package/src/icons/custom/vastbase.ts +57 -0
  198. package/src/icons/lucide.ts +78 -0
  199. package/src/icons/registry.ts +35 -0
  200. package/src/index.ts +425 -0
  201. package/src/lib/iso-local-datetime.ts +152 -0
  202. package/src/lib/rs-dayjs.ts +56 -0
  203. package/src/locale/messages.ts +362 -0
  204. package/src/locale/types.ts +5 -0
  205. package/src/monaco/debug-decorations.css +20 -0
  206. package/src/monaco/debug-decorations.ts +70 -0
  207. package/src/monaco/index.ts +22 -0
  208. package/src/monaco/languages/index.ts +21 -0
  209. package/src/monaco/languages/mongodb-shell.ts +125 -0
  210. package/src/monaco/languages/types.ts +55 -0
  211. package/src/monaco/setup.ts +101 -0
  212. package/src/styles.css +1040 -0
  213. package/src/theme/apply.ts +12 -0
  214. package/src/theme/brand.example.css +37 -0
  215. package/src/theme/presets.ts +69 -0
  216. package/src/theme/types.ts +81 -0
  217. package/src/utils/rs-clipboard.ts +272 -0
  218. package/src/vite-env.d.ts +7 -0
  219. package/vite-plugins/monaco-zh-nls.ts +101 -0
  220. package/vite-plugins/silence-antlr-parse-console.ts +29 -0
@@ -0,0 +1,1141 @@
1
+ .rs-table-shell {
2
+ width: 100%;
3
+ min-width: 0;
4
+ }
5
+ /* fill 模式:shell 撑满父级高度,内层 .rs-table 成为唯一受限滚动容器,
6
+ 横向滚动条随之固定在可视区底部,纵向滚动内置且不再依赖外层包裹元素 */
7
+ .rs-table-shell--fill {
8
+ display: flex;
9
+ flex-direction: column;
10
+ flex: 1 1 auto;
11
+ min-height: 0;
12
+ height: 100%;
13
+ }
14
+ .rs-table--fill {
15
+ flex: 1 1 auto;
16
+ align-self: stretch;
17
+ min-height: 0;
18
+ /* 成为唯一纵向滚动视口,保证 thead sticky 相对本容器生效 */
19
+ max-height: 100%;
20
+ }
21
+ .rs-table-shell--ctx {
22
+ position: relative;
23
+ display: flex;
24
+ flex-direction: column;
25
+ flex: 1 1 auto;
26
+ min-height: inherit;
27
+ height: 100%;
28
+ width: 100%;
29
+ }
30
+ /* 空白区域命中层(伪元素替代额外 DOM 节点) */
31
+ .rs-table-shell--ctx::before {
32
+ content: '';
33
+ position: absolute;
34
+ inset: 0;
35
+ z-index: 0;
36
+ }
37
+ .rs-table-shell--ctx > .rs-table {
38
+ position: relative;
39
+ z-index: 1;
40
+ }
41
+ .rs-table {
42
+ width: 100%;
43
+ min-width: 0;
44
+ /* 默认不开启横向滚动:避免纵向条出现后把 width:100% 表「挤」出多余横向条。
45
+ 仅在列宽确需超出容器时再加 .rs-table--overflow-x */
46
+ overflow-x: hidden;
47
+ overflow-y: auto;
48
+ overscroll-behavior: contain;
49
+ background: var(--rs-table-bg);
50
+ }
51
+ .rs-table--overflow-x {
52
+ overflow-x: auto;
53
+ }
54
+ .rs-table--rounded {
55
+ border-radius: var(--rs-table-radius);
56
+ }
57
+ /* 非虚拟滚动的大表:跳过视口外行绘制,减轻纵向滚动卡顿 */
58
+ .rs-table--content-visibility .rs-table__row {
59
+ content-visibility: auto;
60
+ contain-intrinsic-size: auto 36px;
61
+ }
62
+ /* 有表头时容器与 sticky header 同色,消除右侧滚动条轨道与表头的色差 */
63
+ .rs-table:has(.rs-table__head) {
64
+ background: var(--rs-table-bg-header);
65
+ }
66
+ .rs-table:has(.rs-table__head) .rs-table__table > tbody {
67
+ background: var(--rs-table-body-bg);
68
+ }
69
+ /* 空态 / 加载占位:tbody 仅一行,表体高度不够撑满视口时,容器若仍用表头灰底
70
+ 会在空行下方露出第二层色差。改用表体底色,并让空行占满剩余高度。 */
71
+ .rs-table:has(> .rs-table__table > tbody > tr:only-child > .rs-table__empty) {
72
+ background: var(--rs-table-body-bg);
73
+ }
74
+ .rs-table:has(> .rs-table__table > tbody > tr:only-child > .rs-table__empty) .rs-table__table {
75
+ height: 100%;
76
+ }
77
+ .rs-table:has(> .rs-table__table > tbody > tr:only-child > .rs-table__empty)
78
+ .rs-table__table
79
+ > tbody
80
+ > tr:only-child {
81
+ height: 100%;
82
+ }
83
+ /* 内置右键:shell 撑满 + 内层 table 区域自行滚动,无需外层 RsScrollbar */
84
+ .rs-table-shell--ctx > .rs-table.rs-table--ctx {
85
+ flex: 1 1 auto;
86
+ min-height: 0;
87
+ /* 继承 .rs-table 的 overflow-x/y 策略,勿再写成 overflow:auto 覆盖 */
88
+ }
89
+ .rs-table-shell--ctx > .rs-table.rs-table--ctx:has(.rs-table__head) {
90
+ background: var(--rs-table-bg-header);
91
+ }
92
+ .rs-table-shell--ctx > .rs-table.rs-table--ctx:has(.rs-table__head) .rs-table__table > tbody {
93
+ background: var(--rs-table-body-bg);
94
+ }
95
+ .rs-table-shell--ctx
96
+ > .rs-table.rs-table--ctx:has(> .rs-table__table > tbody > tr:only-child > .rs-table__empty) {
97
+ background: var(--rs-table-body-bg);
98
+ }
99
+ .rs-table-shell--ctx > .rs-table.rs-table--ctx:not(:has(.rs-table__head)) {
100
+ background: transparent;
101
+ }
102
+ .rs-table--virtual {
103
+ overflow-x: hidden;
104
+ overflow-y: auto;
105
+ }
106
+ .rs-table--virtual.rs-table--overflow-x {
107
+ overflow-x: auto;
108
+ }
109
+ .rs-table--virtual-cols {
110
+ overflow-x: auto;
111
+ }
112
+ .rs-table__col-pad {
113
+ padding: 0 !important;
114
+ border: 0 !important;
115
+ background: transparent !important;
116
+ pointer-events: none;
117
+ }
118
+ .rs-table--bordered {
119
+ border: 1px solid var(--rs-table-border);
120
+ }
121
+ .rs-table--column-bordered .rs-table__th:not(:last-child),
122
+ .rs-table--column-bordered .rs-table__td:not(:last-child) {
123
+ border-right: 1px solid var(--rs-table-cell-divider);
124
+ }
125
+ .rs-table__table {
126
+ width: 100%;
127
+ border-collapse: separate;
128
+ border-spacing: 0;
129
+ color: var(--rs-table-fg);
130
+ font-size: var(--rs-table-cell-size, var(--rs-font-size-xs));
131
+ font-weight: var(--rs-table-cell-weight, 400);
132
+ }
133
+ .rs-table__th,
134
+ .rs-table__td {
135
+ padding: var(--rs-space-sm) var(--rs-space-md);
136
+ border-bottom: 1px solid var(--rs-table-cell-divider);
137
+ white-space: nowrap;
138
+ }
139
+ .rs-table__td {
140
+ font-size: var(--rs-table-cell-size, var(--rs-font-size-xs));
141
+ font-weight: var(--rs-table-cell-weight, 400);
142
+ }
143
+ .rs-table--compact .rs-table__th,
144
+ .rs-table--compact .rs-table__td,
145
+ .rs-table--sm .rs-table__th,
146
+ .rs-table--sm .rs-table__td {
147
+ padding: var(--rs-space-xs) var(--rs-space-sm);
148
+ }
149
+ .rs-table--sm .rs-table__table {
150
+ font-size: var(--rs-table-cell-size, var(--rs-font-size-xs));
151
+ }
152
+ .rs-table--lg .rs-table__th,
153
+ .rs-table--lg .rs-table__td {
154
+ padding: var(--rs-space-md) var(--rs-space-lg);
155
+ font-size: var(--rs-font-size-sm);
156
+ }
157
+ .rs-table--lg .rs-table__table {
158
+ font-size: var(--rs-font-size-sm);
159
+ }
160
+ .rs-table__th {
161
+ position: sticky;
162
+ top: 0;
163
+ z-index: 3;
164
+ background: var(--rs-table-header-bg);
165
+ color: var(--rs-table-header-fg);
166
+ font-size: var(--rs-table-header-size, var(--rs-font-size-xs));
167
+ font-weight: var(--rs-table-header-weight);
168
+ white-space: nowrap;
169
+ vertical-align: middle;
170
+ }
171
+ .rs-table__th-label {
172
+ display: inline-block;
173
+ max-width: 100%;
174
+ overflow: hidden;
175
+ text-overflow: ellipsis;
176
+ vertical-align: bottom;
177
+ }
178
+ .rs-table__th-label--tip {
179
+ cursor: default;
180
+ }
181
+ .rs-table__shared-tip--header {
182
+ white-space: pre-line;
183
+ font-family: var(--rs-font-mono);
184
+ max-width: min(24rem, 90vw);
185
+ }
186
+ .rs-table__th.rs-table__cell--fixed,
187
+ .rs-table__th.rs-table__th--drag,
188
+ .rs-table__th.rs-table__th--expand,
189
+ .rs-table__th.rs-table__th--selection,
190
+ .rs-table__th.rs-table__th--index,
191
+ .rs-table__th.rs-table__th--gutter {
192
+ z-index: 4;
193
+ }
194
+ /* 行级底色变量:所有 body 单元格统一继承,避免斑马纹与前缀列断裂 */
195
+ .rs-table__row {
196
+ --rs-table-row-bg: var(--rs-table-body-bg);
197
+ }
198
+ .rs-table__row .rs-table__td,
199
+ .rs-table__row .rs-table__cell--fixed {
200
+ background-color: var(--rs-table-row-bg);
201
+ }
202
+ .rs-table--scroll-x .rs-table__table {
203
+ width: max-content;
204
+ }
205
+ .rs-table__th--expand,
206
+ .rs-table__td--expand {
207
+ width: 40px;
208
+ padding-inline: var(--rs-space-xs);
209
+ text-align: center;
210
+ }
211
+ .rs-table__th--drag,
212
+ .rs-table__td--drag {
213
+ width: 40px;
214
+ padding-inline: 0;
215
+ text-align: center;
216
+ vertical-align: middle;
217
+ }
218
+ .rs-table__column-drag-handle,
219
+ .rs-table__row-drag-handle {
220
+ display: inline-flex;
221
+ align-items: center;
222
+ justify-content: center;
223
+ width: 1.25rem;
224
+ height: 1.25rem;
225
+ color: var(--rs-table-muted-fg);
226
+ cursor: default;
227
+ user-select: none;
228
+ opacity: 0.5;
229
+ }
230
+ /* 六点 grip(Ant Holder / Notion 同款),纯 CSS,无图标组件 */
231
+ .rs-table__column-drag-handle::before,
232
+ .rs-table__row-drag-handle::before {
233
+ content: '';
234
+ width: 6px;
235
+ height: 10px;
236
+ background-image: radial-gradient(circle, currentColor 1px, transparent 1.15px);
237
+ background-size: 3px 3.333px;
238
+ background-repeat: repeat;
239
+ }
240
+ .rs-table__th--dragging {
241
+ opacity: 0.55;
242
+ }
243
+ .rs-table__th--drop-target {
244
+ box-shadow: inset 2px 0 0 var(--rs-table-drop-indicator);
245
+ }
246
+ .rs-table__row--dragging > .rs-table__td {
247
+ opacity: 0.42;
248
+ }
249
+ .rs-table__row--drop-before {
250
+ box-shadow: inset 0 2px 0 var(--rs-table-drop-indicator);
251
+ }
252
+ .rs-table__row--drop-after {
253
+ box-shadow: inset 0 -2px 0 var(--rs-table-drop-indicator);
254
+ }
255
+ .rs-table__row--drop-into {
256
+ --rs-table-row-bg: color-mix(in srgb, var(--rs-primary) 14%, var(--rs-table-row-bg, transparent));
257
+ box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--rs-primary) 45%, transparent);
258
+ }
259
+ .rs-table__row--draggable,
260
+ .rs-table__td--row-draggable {
261
+ cursor: default;
262
+ user-select: none;
263
+ }
264
+ .rs-table__drag-preview {
265
+ padding: 0.25rem 0.5rem;
266
+ border: 1px solid var(--rs-border);
267
+ border-radius: var(--rs-radius-xs);
268
+ background: var(--rs-surface-elevated, var(--rs-surface));
269
+ color: var(--rs-text);
270
+ box-shadow: var(--rs-shadow-sm);
271
+ font-size: var(--rs-font-size-xs);
272
+ font-variant-numeric: tabular-nums;
273
+ line-height: 1.2;
274
+ pointer-events: none;
275
+ white-space: nowrap;
276
+ }
277
+ .rs-table__sort-priority {
278
+ margin-left: 0.125rem;
279
+ font-size: 0.625rem;
280
+ color: var(--rs-table-muted-fg);
281
+ }
282
+ .rs-table__expand-btn {
283
+ display: inline-flex;
284
+ align-items: center;
285
+ justify-content: center;
286
+ width: 1.25rem;
287
+ height: 1.25rem;
288
+ border: 0;
289
+ border-radius: var(--rs-radius-xs);
290
+ background: transparent;
291
+ color: var(--rs-table-muted-fg);
292
+ cursor: pointer;
293
+ transition: transform 0.15s ease;
294
+ }
295
+ .rs-table__expand-btn--expanded {
296
+ transform: rotate(90deg);
297
+ }
298
+ .rs-table__expand-row {
299
+ background: var(--rs-table-expand-bg);
300
+ }
301
+ .rs-table__expand-cell {
302
+ padding: var(--rs-space-sm) var(--rs-space-md) var(--rs-space-md);
303
+ }
304
+ .rs-table__foot {
305
+ position: sticky;
306
+ bottom: 0;
307
+ z-index: 2;
308
+ background: var(--rs-table-footer-bg);
309
+ }
310
+ .rs-table__summary {
311
+ padding: var(--rs-space-sm) var(--rs-space-md);
312
+ color: var(--rs-table-muted-fg);
313
+ font-weight: var(--rs-table-header-weight);
314
+ }
315
+ .rs-table__checkbox-box--radio {
316
+ border-radius: 999px;
317
+ }
318
+ /* resizable + auto:列宽随内容/表头自适应,仅用户拖拽过的列写入显式 width */
319
+ .rs-table--resizable.rs-table--col-auto .rs-table__table {
320
+ table-layout: auto;
321
+ width: 100%;
322
+ }
323
+ /* resizable + fixed:colgroup 精确锁定每列宽度;width:100% 让列少时拉满容器 */
324
+ .rs-table--resizable.rs-table--col-fixed .rs-table__table {
325
+ table-layout: fixed;
326
+ width: 100%;
327
+ }
328
+ /* 勿把 resizable 表头改成 position:relative:会覆盖 .rs-table__th 的 sticky,
329
+ 导致纵向滚动时表头跟正文一起滚走。sticky 本身已建立绝对定位包含块,拖拽把手可用。 */
330
+ .rs-table__header-actions {
331
+ display: inline-flex;
332
+ align-items: center;
333
+ gap: 0.125rem;
334
+ margin-left: var(--rs-space-xs);
335
+ vertical-align: middle;
336
+ flex-shrink: 0;
337
+ }
338
+ .rs-table__filter {
339
+ display: inline-flex;
340
+ align-items: center;
341
+ justify-content: center;
342
+ width: 1.125rem;
343
+ height: 1.125rem;
344
+ padding: 0;
345
+ border: 0;
346
+ background: transparent;
347
+ color: var(--rs-table-muted-fg);
348
+ vertical-align: middle;
349
+ cursor: pointer;
350
+ border-radius: var(--rs-radius-xs);
351
+ transition: color 0.12s, background 0.12s;
352
+ }
353
+ .rs-table__filter:hover,
354
+ .rs-table__filter--active {
355
+ color: var(--rs-table-sort-active-fg);
356
+ }
357
+ .rs-table__filter:hover {
358
+ background: var(--rs-surface-subtle);
359
+ }
360
+ .rs-table__filter--active {
361
+ color: var(--rs-primary);
362
+ }
363
+ .rs-table__sort {
364
+ display: inline-flex;
365
+ align-items: center;
366
+ justify-content: center;
367
+ gap: 0.125rem;
368
+ min-width: 1.125rem;
369
+ height: 1.125rem;
370
+ margin-left: 0;
371
+ padding: 0;
372
+ border: 0;
373
+ background: transparent;
374
+ color: var(--rs-table-muted-fg);
375
+ vertical-align: middle;
376
+ cursor: pointer;
377
+ border-radius: var(--rs-radius-xs);
378
+ transition: color 0.12s, background 0.12s;
379
+ }
380
+ .rs-table__sort:hover,
381
+ .rs-table__sort--active {
382
+ color: var(--rs-table-sort-active-fg);
383
+ }
384
+ .rs-table__sort:hover {
385
+ background: var(--rs-surface-subtle);
386
+ }
387
+ .rs-table__row--striped:not(.rs-table__row--selected):not(.rs-table__row--highlighted) {
388
+ --rs-table-row-bg: var(--rs-table-row-stripe);
389
+ }
390
+ /* 行点选多选:禁止 Shift 划过时出现浏览器文字蓝选 */
391
+ .rs-table--row-select .rs-table__row {
392
+ user-select: none;
393
+ }
394
+ .rs-table--row-select .rs-table__row :where(input, textarea, [contenteditable='true']) {
395
+ user-select: text;
396
+ }
397
+ .rs-table__row--selected {
398
+ --rs-table-row-bg: var(--rs-table-row-selected);
399
+ color: var(--rs-table-row-selected-fg);
400
+ }
401
+ .rs-table__row--selected .rs-table__td:first-child,
402
+ .rs-table__row--selected .rs-table__cell--fixed:first-child {
403
+ box-shadow: inset 3px 0 0 var(--rs-table-row-selected-accent, var(--rs-primary));
404
+ }
405
+ .rs-table__row--selected .rs-table__td--gutter {
406
+ background: color-mix(in srgb, var(--rs-table-row-selected) 90%, var(--rs-table-gutter-bg));
407
+ color: var(--rs-table-row-selected-fg);
408
+ border-right-color: var(--rs-table-gutter-border);
409
+ }
410
+ .rs-table__row:hover:not(.rs-table__row--disabled):not(.rs-table__row--selected):not(.rs-table__row--highlighted) {
411
+ --rs-table-row-bg: var(--rs-table-row-hover);
412
+ }
413
+ .rs-table__row--selected:hover:not(.rs-table__row--disabled) {
414
+ --rs-table-row-bg: var(--rs-table-row-selected-hover, var(--rs-table-row-selected));
415
+ }
416
+ .rs-table__row--highlighted {
417
+ --rs-table-row-bg: var(--rs-table-row-highlight);
418
+ color: var(--rs-table-row-highlight-fg, var(--rs-table-fg));
419
+ }
420
+ .rs-table__row--highlighted .rs-table__td:first-child,
421
+ .rs-table__row--highlighted .rs-table__cell--fixed:first-child {
422
+ box-shadow: inset 3px 0 0 var(--rs-table-row-highlight-accent);
423
+ }
424
+ .rs-table__row--highlighted .rs-table__td--gutter {
425
+ background: color-mix(in srgb, var(--rs-table-row-highlight) 90%, var(--rs-table-gutter-bg));
426
+ color: var(--rs-table-row-highlight-fg, var(--rs-table-muted-fg));
427
+ border-right-color: var(--rs-table-gutter-border);
428
+ }
429
+ .rs-table__row--highlighted:hover:not(.rs-table__row--disabled) {
430
+ --rs-table-row-bg: var(--rs-table-row-highlight-hover);
431
+ }
432
+ .rs-table__row--highlighted:hover:not(.rs-table__row--disabled) .rs-table__td--gutter {
433
+ background: color-mix(in srgb, var(--rs-table-row-highlight-hover) 90%, var(--rs-table-gutter-bg));
434
+ }
435
+ .rs-table__row--dirty:not(.rs-table__row--selected):not(.rs-table__row--highlighted) {
436
+ --rs-table-row-bg: color-mix(in srgb, var(--rs-warning, #f59e0b) 8%, var(--rs-table-row-bg, var(--rs-table-bg)));
437
+ }
438
+ .rs-table__td--editing {
439
+ padding: 0;
440
+ position: relative;
441
+ vertical-align: middle;
442
+ /* 编辑态:单元格外轮廓,避免输入框内部背景/下划线突变 */
443
+ z-index: 2;
444
+ outline: 1px solid var(--rs-primary);
445
+ outline-offset: -1px;
446
+ background: var(--rs-table-row-bg, var(--rs-table-body-bg));
447
+ box-shadow: none;
448
+ }
449
+ .rs-table__td--focused:not(.rs-table__td--editing) {
450
+ /* 与编辑态同为 1px,避免选中→编辑时轮廓粗细跳变 */
451
+ outline: 1px solid color-mix(in srgb, var(--rs-primary) 70%, transparent);
452
+ outline-offset: -1px;
453
+ z-index: 1;
454
+ }
455
+ .rs-table__td--invalid {
456
+ outline: 1px solid var(--rs-danger) !important;
457
+ outline-offset: -1px;
458
+ z-index: 2;
459
+ }
460
+ .rs-table__cell-tip--editing {
461
+ position: absolute;
462
+ inset: 0;
463
+ display: block;
464
+ min-width: 0;
465
+ height: 100%;
466
+ }
467
+ .rs-table__row--disabled {
468
+ opacity: 0.38;
469
+ cursor: not-allowed;
470
+ }
471
+ .rs-table__th--selection,
472
+ .rs-table__td--selection {
473
+ width: 40px;
474
+ padding-inline: var(--rs-space-sm);
475
+ text-align: center;
476
+ vertical-align: middle;
477
+ }
478
+ .rs-table__th--index,
479
+ .rs-table__td--index {
480
+ width: var(--rs-table-index-width, 56px);
481
+ min-width: var(--rs-table-index-width, 56px);
482
+ max-width: var(--rs-table-index-width, 56px);
483
+ box-sizing: border-box;
484
+ color: var(--rs-table-muted-fg);
485
+ }
486
+ .rs-table--edit-gutter .rs-table__th--gutter,
487
+ .rs-table--edit-gutter .rs-table__td--gutter {
488
+ width: var(--rs-table-gutter-width, 32px);
489
+ min-width: var(--rs-table-gutter-width, 32px);
490
+ max-width: var(--rs-table-gutter-width, 32px);
491
+ padding-inline: 2px;
492
+ box-sizing: border-box;
493
+ }
494
+ .rs-table__th--gutter,
495
+ .rs-table__td--gutter {
496
+ padding-inline: 2px;
497
+ text-align: center;
498
+ vertical-align: middle;
499
+ color: var(--rs-table-muted-fg);
500
+ background: var(--rs-table-gutter-bg);
501
+ border-right: 1px solid var(--rs-table-gutter-border);
502
+ user-select: none;
503
+ }
504
+ .rs-table__th--gutter {
505
+ position: sticky;
506
+ background: var(--rs-table-gutter-bg);
507
+ }
508
+ .rs-table__td--gutter {
509
+ background: color-mix(in srgb, var(--rs-border) 8%, var(--rs-table-row-bg, var(--rs-table-body-bg)));
510
+ }
511
+ .rs-table-edit-gutter {
512
+ position: relative;
513
+ display: flex;
514
+ align-items: center;
515
+ justify-content: center;
516
+ width: 100%;
517
+ height: 1.125rem;
518
+ min-height: 1.125rem;
519
+ max-height: 1.125rem;
520
+ line-height: 1;
521
+ flex-wrap: nowrap;
522
+ overflow: hidden;
523
+ }
524
+ .rs-table-edit-gutter__line {
525
+ display: inline-flex;
526
+ align-items: center;
527
+ justify-content: center;
528
+ width: 100%;
529
+ height: 100%;
530
+ font-size: var(--rs-font-size-xs);
531
+ font-variant-numeric: tabular-nums;
532
+ color: var(--rs-table-muted-fg);
533
+ }
534
+ .rs-table-edit-gutter__line--hidden {
535
+ visibility: hidden;
536
+ }
537
+ .rs-table-edit-gutter__actions {
538
+ position: absolute;
539
+ inset: 0;
540
+ display: inline-flex;
541
+ align-items: center;
542
+ justify-content: center;
543
+ gap: 1px;
544
+ flex-wrap: nowrap;
545
+ }
546
+ .rs-table-edit-gutter__commit {
547
+ display: inline-flex;
548
+ align-items: center;
549
+ justify-content: center;
550
+ flex: 0 0 auto;
551
+ width: 0.8125rem;
552
+ height: 0.8125rem;
553
+ padding: 0;
554
+ border: 0;
555
+ border-radius: var(--rs-radius-xs);
556
+ background: transparent;
557
+ color: var(--rs-primary);
558
+ cursor: pointer;
559
+ }
560
+ .rs-table-edit-gutter__commit-hint {
561
+ position: absolute;
562
+ width: 1px;
563
+ height: 1px;
564
+ padding: 0;
565
+ margin: -1px;
566
+ overflow: hidden;
567
+ clip: rect(0, 0, 0, 0);
568
+ white-space: nowrap;
569
+ border: 0;
570
+ }
571
+ .rs-table-edit-gutter__commit:hover {
572
+ background: color-mix(in srgb, var(--rs-primary) 12%, transparent);
573
+ }
574
+ .rs-table-edit-gutter__rollback {
575
+ display: inline-flex;
576
+ align-items: center;
577
+ justify-content: center;
578
+ flex: 0 0 auto;
579
+ width: 0.8125rem;
580
+ height: 0.8125rem;
581
+ padding: 0;
582
+ border: 0;
583
+ border-radius: var(--rs-radius-xs);
584
+ background: transparent;
585
+ color: var(--rs-table-muted-fg);
586
+ cursor: pointer;
587
+ }
588
+ .rs-table-edit-gutter__rollback:hover {
589
+ background: var(--rs-surface-hover);
590
+ color: var(--rs-text);
591
+ }
592
+ .rs-table__th--status,
593
+ .rs-table__td--status {
594
+ width: 52px;
595
+ padding-inline: var(--rs-space-xs);
596
+ text-align: center;
597
+ }
598
+ .rs-table__td--ellipsis {
599
+ overflow: hidden;
600
+ max-width: 0;
601
+ }
602
+ .rs-table__ellipsis-text {
603
+ display: block;
604
+ overflow: hidden;
605
+ text-overflow: ellipsis;
606
+ white-space: nowrap;
607
+ min-width: 0;
608
+ }
609
+ /* 自定义 slot 内容也需受 ellipsis 容器约束,避免长文本撑破列宽 */
610
+ .rs-table__ellipsis-text > * {
611
+ max-width: 100%;
612
+ min-width: 0;
613
+ }
614
+ .rs-table__shared-tip {
615
+ position: fixed;
616
+ z-index: var(--rs-z-tooltip);
617
+ width: max-content;
618
+ max-width: min(16rem, 90vw);
619
+ padding: 0.375rem 0.625rem;
620
+ border-radius: var(--rs-radius-sm);
621
+ border: 1px solid var(--rs-border);
622
+ background: var(--rs-surface-elevated);
623
+ color: var(--rs-text);
624
+ font-size: var(--rs-font-size-xs);
625
+ line-height: var(--rs-line-height-tight);
626
+ box-shadow: var(--rs-shadow-sm);
627
+ overflow-wrap: break-word;
628
+ pointer-events: none;
629
+ opacity: 0;
630
+ transition: opacity var(--rs-transition-fast);
631
+ }
632
+ .rs-table__shared-tip--ready {
633
+ opacity: 1;
634
+ }
635
+ .rs-table__checkbox {
636
+ position: relative;
637
+ display: inline-flex;
638
+ align-items: center;
639
+ justify-content: center;
640
+ vertical-align: middle;
641
+ line-height: 0;
642
+ cursor: pointer;
643
+ }
644
+ .rs-table__checkbox-input {
645
+ position: absolute;
646
+ width: 1px;
647
+ height: 1px;
648
+ margin: -1px;
649
+ padding: 0;
650
+ overflow: hidden;
651
+ clip: rect(0, 0, 0, 0);
652
+ white-space: nowrap;
653
+ border: 0;
654
+ }
655
+ .rs-table__checkbox-box {
656
+ position: relative;
657
+ display: inline-flex;
658
+ align-items: center;
659
+ justify-content: center;
660
+ flex-shrink: 0;
661
+ width: 1rem;
662
+ height: 1rem;
663
+ border: 1px solid var(--rs-border);
664
+ border-radius: var(--rs-radius-xs, 4px);
665
+ background: var(--rs-table-checkbox-bg);
666
+ box-sizing: border-box;
667
+ overflow: hidden;
668
+ }
669
+ .rs-table__checkbox--checked .rs-table__checkbox-box,
670
+ .rs-table__checkbox--indeterminate .rs-table__checkbox-box {
671
+ border-color: var(--rs-primary);
672
+ background: var(--rs-primary);
673
+ }
674
+ .rs-table__checkbox--checked .rs-table__checkbox-box::after {
675
+ content: '';
676
+ position: absolute;
677
+ top: 42%;
678
+ left: 50%;
679
+ width: 0.3rem;
680
+ height: 0.55rem;
681
+ border: solid var(--rs-on-primary, #fff);
682
+ border-width: 0 2px 2px 0;
683
+ transform: translate(-50%, -50%) rotate(45deg);
684
+ }
685
+ .rs-table__checkbox--checked .rs-table__checkbox-box--radio::after {
686
+ content: '';
687
+ position: absolute;
688
+ top: 50%;
689
+ left: 50%;
690
+ width: 0.35rem;
691
+ height: 0.35rem;
692
+ border: 0;
693
+ border-radius: 999px;
694
+ background: var(--rs-on-primary, #fff);
695
+ transform: translate(-50%, -50%);
696
+ }
697
+ .rs-table__checkbox--indeterminate .rs-table__checkbox-box::after {
698
+ content: '';
699
+ position: absolute;
700
+ top: 50%;
701
+ left: 50%;
702
+ width: 0.5rem;
703
+ height: 2px;
704
+ background: var(--rs-on-primary, #fff);
705
+ border-radius: 1px;
706
+ transform: translate(-50%, -50%);
707
+ }
708
+ .rs-table__group-row {
709
+ background: var(--rs-table-group-bg);
710
+ }
711
+ .rs-table__group-cell {
712
+ padding: var(--rs-space-xs) var(--rs-space-md);
713
+ color: var(--rs-table-muted-fg);
714
+ font-size: var(--rs-font-size-xs);
715
+ font-weight: 600;
716
+ }
717
+ .rs-table__virtual-pad td {
718
+ padding: 0;
719
+ border: 0;
720
+ line-height: 0;
721
+ }
722
+ .rs-table__cell--left {
723
+ text-align: left;
724
+ }
725
+ .rs-table__cell--center {
726
+ text-align: center;
727
+ }
728
+ .rs-table__cell--right {
729
+ text-align: right;
730
+ }
731
+ .rs-table__empty {
732
+ padding: var(--rs-space-xl);
733
+ color: var(--rs-table-muted-fg);
734
+ text-align: center;
735
+ }
736
+ .rs-table:has(> .rs-table__table > tbody > tr:only-child > .rs-table__empty) .rs-table__empty {
737
+ height: 100%;
738
+ vertical-align: middle;
739
+ }
740
+ .rs-table__empty--more {
741
+ padding: var(--rs-space-md);
742
+ }
743
+ .rs-table__sort--active {
744
+ color: var(--rs-table-sort-active-fg);
745
+ }
746
+ .rs-table__resize-handle {
747
+ position: absolute;
748
+ top: 0;
749
+ right: 0;
750
+ width: 7px;
751
+ height: 100%;
752
+ transform: translateX(50%);
753
+ cursor: col-resize;
754
+ touch-action: none;
755
+ z-index: 2;
756
+ }
757
+ /* 默认与列 border 重合,不额外绘制;悬浮时高亮为可拖拽分隔线 */
758
+ .rs-table__resize-handle::after {
759
+ content: '';
760
+ position: absolute;
761
+ top: 0;
762
+ bottom: 0;
763
+ left: 50%;
764
+ width: 1px;
765
+ transform: translateX(-50%);
766
+ border-radius: 0;
767
+ background: transparent;
768
+ opacity: 0;
769
+ transition: opacity 0.12s ease, background 0.12s ease;
770
+ }
771
+ .rs-table__resize-handle:hover::after,
772
+ .rs-table__resize-handle:active::after {
773
+ opacity: 1;
774
+ background: var(--rs-table-resize-handle-hover);
775
+ }
776
+ /* column-bordered:平时由单元格 border-right 承担分隔线,悬浮时由 handle 接管高亮 */
777
+ .rs-table--column-bordered .rs-table__th:has(> .rs-table__resize-handle:hover),
778
+ .rs-table--column-bordered .rs-table__th:has(> .rs-table__resize-handle:active) {
779
+ border-right-color: transparent;
780
+ }
781
+ /* 滚动条交汇角与容器底色一致 */
782
+ .rs-table.rs-native-scrollbar:has(.rs-table__head)::-webkit-scrollbar-corner {
783
+ background: var(--rs-table-scrollbar-corner);
784
+ }
785
+ /* 单元格展示/编辑(子组件 RsTableCell / RsTableCellEditor) */
786
+ .rs-table__cell-body {
787
+ display: block;
788
+ min-width: 0;
789
+ }
790
+ .rs-table__cell-body--editable {
791
+ cursor: text;
792
+ /* 空单元格也要能点中双击进入编辑(注释 / 默认值等常为空) */
793
+ width: 100%;
794
+ min-height: 1.25em;
795
+ box-sizing: border-box;
796
+ }
797
+ .rs-table__td--data > span {
798
+ display: block;
799
+ width: 100%;
800
+ min-width: 0;
801
+ }
802
+ .rs-table__cell-body--readonly {
803
+ cursor: default;
804
+ color: var(--rs-muted);
805
+ }
806
+ .rs-table__cell-body--dirty {
807
+ color: var(--rs-primary);
808
+ }
809
+ .rs-table__cell-body--null {
810
+ color: var(--rs-muted);
811
+ font-style: italic;
812
+ }
813
+ .rs-table__cell-body--invalid {
814
+ color: var(--rs-danger);
815
+ }
816
+ .rs-table__cell-body--focused {
817
+ background: color-mix(in srgb, var(--rs-primary) 6%, transparent);
818
+ }
819
+ .rs-table-cell-editor {
820
+ display: block;
821
+ width: 100%;
822
+ height: 100%;
823
+ min-width: 0;
824
+ min-height: 0;
825
+ }
826
+ .rs-table-cell-editor--inline {
827
+ display: block;
828
+ width: 100%;
829
+ height: 100%;
830
+ min-width: 0;
831
+ min-height: 0;
832
+ }
833
+ /*
834
+ * 单元格内编辑器:完全贴合单元格,去掉 RsInput/RsSelect 默认边框、
835
+ * 控件高度、主色底与 inset 下划线,避免进入编辑态时背景/下划线突变。
836
+ * 使用更高优先级覆盖 scoped 组件样式。
837
+ */
838
+ .rs-table-cell-editor--inline > .rs-field {
839
+ display: flex;
840
+ width: 100%;
841
+ height: 100%;
842
+ min-width: 0;
843
+ min-height: 0;
844
+ }
845
+ .rs-table-cell-editor--inline .rs-input-field {
846
+ display: flex;
847
+ width: 100%;
848
+ height: 100%;
849
+ min-width: 0;
850
+ min-height: 0;
851
+ }
852
+ .rs-table-cell-editor--inline .rs-input-group,
853
+ .rs-table-cell-editor--inline .rs-input-group.rs-input-group--sm,
854
+ .rs-table-cell-editor--inline .rs-input-group.rs-input-group--md,
855
+ .rs-table-cell-editor--inline .rs-input-group.rs-input-group--lg,
856
+ .rs-table-cell-editor--inline .rs-input-group:hover,
857
+ .rs-table-cell-editor--inline .rs-input-group:focus-within,
858
+ .rs-table-cell-editor--inline .rs-input-group.rs-input-group--invalid,
859
+ .rs-table-cell-editor--inline .rs-input-group.rs-input-group--invalid:focus-within {
860
+ display: flex;
861
+ width: 100%;
862
+ height: 100%;
863
+ min-height: 0 !important;
864
+ margin: 0;
865
+ padding: 0;
866
+ border: 0 !important;
867
+ border-radius: 0 !important;
868
+ background: transparent !important;
869
+ box-shadow: none !important;
870
+ transition: none !important;
871
+ }
872
+ .rs-table-cell-editor--inline .rs-input-group__control {
873
+ width: 100%;
874
+ height: 100%;
875
+ min-height: 0;
876
+ padding: var(--rs-space-sm) var(--rs-space-md);
877
+ border: 0;
878
+ outline: none;
879
+ border-radius: 0;
880
+ background: transparent !important;
881
+ color: inherit;
882
+ font: inherit;
883
+ line-height: inherit;
884
+ box-shadow: none !important;
885
+ -webkit-box-shadow: none !important;
886
+ }
887
+ .rs-table-cell-editor--inline .rs-input-group__control:focus {
888
+ outline: none;
889
+ box-shadow: none !important;
890
+ }
891
+ .rs-table--compact .rs-table-cell-editor--inline .rs-input-group__control,
892
+ .rs-table--sm .rs-table-cell-editor--inline .rs-input-group__control {
893
+ padding: var(--rs-space-xs) var(--rs-space-sm);
894
+ }
895
+ .rs-table--lg .rs-table-cell-editor--inline .rs-input-group__control {
896
+ padding: var(--rs-space-md) var(--rs-space-lg);
897
+ }
898
+ /*
899
+ * number:RsInputNumber 使用独立 DOM(.rs-input-number),需与 RsInput 同样压平,
900
+ * 否则会保留圆角/边框/焦点环,与 td--editing 轮廓叠成「框套框」。
901
+ */
902
+ .rs-table-cell-editor--inline .rs-input-number-field {
903
+ display: flex;
904
+ width: 100%;
905
+ height: 100%;
906
+ min-width: 0;
907
+ min-height: 0;
908
+ }
909
+ .rs-table-cell-editor--inline .rs-input-number,
910
+ .rs-table-cell-editor--inline .rs-input-number.rs-input-number--ssm,
911
+ .rs-table-cell-editor--inline .rs-input-number.rs-input-number--sm,
912
+ .rs-table-cell-editor--inline .rs-input-number.rs-input-number--md,
913
+ .rs-table-cell-editor--inline .rs-input-number.rs-input-number--lg,
914
+ .rs-table-cell-editor--inline .rs-input-number:hover,
915
+ .rs-table-cell-editor--inline .rs-input-number:focus-within,
916
+ .rs-table-cell-editor--inline .rs-input-number.rs-input-number--invalid,
917
+ .rs-table-cell-editor--inline .rs-input-number.rs-input-number--invalid:focus-within {
918
+ display: flex;
919
+ width: 100%;
920
+ height: 100%;
921
+ min-height: 0 !important;
922
+ margin: 0;
923
+ padding: 0;
924
+ border: 0 !important;
925
+ border-radius: 0 !important;
926
+ background: transparent !important;
927
+ box-shadow: none !important;
928
+ overflow: hidden;
929
+ transition: none !important;
930
+ }
931
+ .rs-table-cell-editor--inline .rs-input-number__control,
932
+ .rs-table-cell-editor--inline .rs-input-number__control.rs-input-number__control--ssm,
933
+ .rs-table-cell-editor--inline .rs-input-number__control.rs-input-number__control--sm,
934
+ .rs-table-cell-editor--inline .rs-input-number__control.rs-input-number__control--lg {
935
+ width: 100%;
936
+ height: 100%;
937
+ min-height: 0;
938
+ padding: var(--rs-space-sm) var(--rs-space-md);
939
+ border: 0;
940
+ outline: none;
941
+ border-radius: 0;
942
+ background: transparent !important;
943
+ color: inherit;
944
+ font: inherit;
945
+ font-size: inherit;
946
+ line-height: inherit;
947
+ box-shadow: none !important;
948
+ }
949
+ .rs-table-cell-editor--inline .rs-input-number__control:focus {
950
+ outline: none;
951
+ box-shadow: none !important;
952
+ }
953
+ .rs-table--compact .rs-table-cell-editor--inline .rs-input-number__control,
954
+ .rs-table--sm .rs-table-cell-editor--inline .rs-input-number__control {
955
+ padding: var(--rs-space-xs) var(--rs-space-sm);
956
+ }
957
+ .rs-table--lg .rs-table-cell-editor--inline .rs-input-number__control {
958
+ padding: var(--rs-space-md) var(--rs-space-lg);
959
+ }
960
+ .rs-table-cell-editor--inline .rs-input-number__handlers {
961
+ border-left-color: transparent;
962
+ }
963
+ .rs-table-cell-editor--inline .rs-input-number__handler--up {
964
+ border-bottom-color: transparent;
965
+ }
966
+ /* select / date:同样压平触发器,由 td--editing 轮廓承担编辑反馈 */
967
+ .rs-table-cell-editor--inline .rs-select,
968
+ .rs-table-cell-editor--inline .rs-select--block {
969
+ display: flex;
970
+ width: 100%;
971
+ max-width: none;
972
+ height: 100%;
973
+ min-width: 0;
974
+ }
975
+ .rs-table-cell-editor--inline .rs-select__anchor,
976
+ .rs-table-cell-editor--inline .rs-date-picker,
977
+ .rs-table-cell-editor--inline .rs-date-picker__field {
978
+ display: flex;
979
+ width: 100%;
980
+ height: 100%;
981
+ min-width: 0;
982
+ }
983
+ .rs-table-cell-editor--inline .rs-select__trigger,
984
+ .rs-table-cell-editor--inline .rs-date-picker__trigger,
985
+ .rs-table-cell-editor--inline .rs-input-group {
986
+ min-height: 0 !important;
987
+ }
988
+ .rs-table-cell-editor--inline .rs-select__trigger {
989
+ width: 100%;
990
+ height: 100%;
991
+ min-height: 0 !important;
992
+ padding: var(--rs-space-xs) var(--rs-space-sm);
993
+ border: 0 !important;
994
+ border-radius: 0 !important;
995
+ background: transparent !important;
996
+ box-shadow: none !important;
997
+ transition: none !important;
998
+ }
999
+ .rs-table-cell-editor--inline .rs-select__trigger:hover,
1000
+ .rs-table-cell-editor--inline .rs-select__trigger:focus,
1001
+ .rs-table-cell-editor--inline .rs-select__trigger[data-state='open'] {
1002
+ border: 0 !important;
1003
+ background: transparent !important;
1004
+ box-shadow: none !important;
1005
+ }
1006
+ .rs-table-cell-editor--inline .rs-date-picker {
1007
+ display: flex;
1008
+ width: 100%;
1009
+ height: 100%;
1010
+ min-width: 0;
1011
+ }
1012
+ .rs-table-cell-editor--inline .rs-date-picker__trigger {
1013
+ display: flex;
1014
+ width: 100%;
1015
+ height: 100%;
1016
+ min-height: 0 !important;
1017
+ padding: var(--rs-space-xs) var(--rs-space-sm);
1018
+ border: 0 !important;
1019
+ border-radius: 0 !important;
1020
+ background: transparent !important;
1021
+ box-shadow: none !important;
1022
+ transition: none !important;
1023
+ }
1024
+ .rs-table-cell-editor--inline .rs-date-picker__trigger:hover,
1025
+ .rs-table-cell-editor--inline .rs-date-picker__trigger:focus,
1026
+ .rs-table-cell-editor--inline .rs-date-picker__trigger[data-state='open'] {
1027
+ border: 0 !important;
1028
+ background: transparent !important;
1029
+ box-shadow: none !important;
1030
+ }
1031
+ /* Popover/表单场景:保留 RsInput / RsInputNumber 默认外观 */
1032
+ .rs-table-cell-editor--field .rs-input-field,
1033
+ .rs-table-cell-editor--field .rs-input-group,
1034
+ .rs-table-cell-editor--field .rs-input-number-field,
1035
+ .rs-table-cell-editor--field .rs-input-number {
1036
+ width: 100%;
1037
+ }
1038
+
1039
+ /* 布尔单元格:RsCheckbox 居中,不挂载编辑器(大表友好) */
1040
+ .rs-table__cell-check {
1041
+ display: inline-flex;
1042
+ align-items: center;
1043
+ justify-content: center;
1044
+ width: 100%;
1045
+ min-height: 1.25rem;
1046
+ }
1047
+ .rs-table__cell-check.rs-table__cell-check--dirty .rs-checkbox__box {
1048
+ outline: 1px solid color-mix(in srgb, var(--rs-warning, #d97706) 70%, transparent);
1049
+ outline-offset: 1px;
1050
+ }
1051
+
1052
+ .rs-table-cell-editor--overlay,
1053
+ .rs-table-cell-editor--select,
1054
+ .rs-table-cell-editor--date,
1055
+ .rs-table-cell-editor--datetime {
1056
+ width: 100%;
1057
+ min-width: 0;
1058
+ }
1059
+ .rs-table-cell-editor--overlay .rs-select,
1060
+ .rs-table-cell-editor--select .rs-select {
1061
+ width: 100%;
1062
+ }
1063
+ /* 表格内多选:标签单行平铺,溢出裁剪(不出现滚动条) */
1064
+ .rs-table-cell-editor--select .rs-select__value--multiple {
1065
+ flex-wrap: nowrap;
1066
+ overflow: hidden;
1067
+ }
1068
+ .rs-table-cell-editor--select .rs-select--multiple .rs-select__trigger {
1069
+ height: var(--rs-control-height-sm);
1070
+ min-height: var(--rs-control-height-sm);
1071
+ padding-top: 0;
1072
+ padding-bottom: 0;
1073
+ }
1074
+ .rs-table-cell-editor__sr-label {
1075
+ position: absolute;
1076
+ width: 1px;
1077
+ height: 1px;
1078
+ padding: 0;
1079
+ margin: -1px;
1080
+ overflow: hidden;
1081
+ clip: rect(0, 0, 0, 0);
1082
+ white-space: nowrap;
1083
+ border: 0;
1084
+ }
1085
+ .rs-table-cell-editor__textarea {
1086
+ display: block;
1087
+ width: 100%;
1088
+ height: 100%;
1089
+ min-height: 2.5rem;
1090
+ margin: 0;
1091
+ padding: var(--rs-space-xs) var(--rs-space-sm);
1092
+ border: 0;
1093
+ outline: none;
1094
+ resize: vertical;
1095
+ background: transparent;
1096
+ color: inherit;
1097
+ font: inherit;
1098
+ line-height: inherit;
1099
+ box-sizing: border-box;
1100
+ }
1101
+ .rs-table-cell-editor--validating {
1102
+ opacity: 0.85;
1103
+ }
1104
+ .rs-table-cell-editor__validating {
1105
+ position: absolute;
1106
+ top: 2px;
1107
+ right: 4px;
1108
+ z-index: 1;
1109
+ font-size: 10px;
1110
+ line-height: 1;
1111
+ color: var(--rs-muted);
1112
+ pointer-events: none;
1113
+ }
1114
+ .rs-table-cell-editor__null-tag {
1115
+ position: absolute;
1116
+ top: 2px;
1117
+ right: 4px;
1118
+ z-index: 1;
1119
+ font-size: 10px;
1120
+ line-height: 1;
1121
+ color: var(--rs-muted);
1122
+ pointer-events: none;
1123
+ }
1124
+ .rs-table-cell-editor--invalid {
1125
+ box-shadow: inset 0 0 0 1px var(--rs-danger);
1126
+ }
1127
+ .rs-table-cell-editor__null-tag {
1128
+ position: absolute;
1129
+ top: 2px;
1130
+ right: 4px;
1131
+ z-index: 1;
1132
+ font-size: 10px;
1133
+ line-height: 1;
1134
+ color: var(--rs-muted);
1135
+ pointer-events: none;
1136
+ }
1137
+ .rs-table-cell-editor--custom {
1138
+ width: 100%;
1139
+ height: 100%;
1140
+ min-width: 0;
1141
+ }