@douyinfe/semi-foundation 2.97.0 → 2.98.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 (171) hide show
  1. package/codeHighlight/codeHighlight.scss +1 -1
  2. package/datePicker/foundation.ts +7 -0
  3. package/datePicker/inputFoundation.ts +5 -0
  4. package/form/foundation.ts +48 -4
  5. package/inputNumber/foundation.ts +119 -3
  6. package/jsonViewer/jsonViewer.scss +2 -2
  7. package/lib/cjs/aiChatInput/aiChatInput.css +7 -7
  8. package/lib/cjs/anchor/anchor.css +3 -3
  9. package/lib/cjs/autoComplete/autoComplete.css +1 -1
  10. package/lib/cjs/avatar/avatar.css +5 -5
  11. package/lib/cjs/badge/badge.css +1 -1
  12. package/lib/cjs/breadcrumb/breadcrumb.css +2 -2
  13. package/lib/cjs/calendar/calendar.css +9 -9
  14. package/lib/cjs/cascader/cascader.css +6 -6
  15. package/lib/cjs/checkbox/checkbox.css +2 -2
  16. package/lib/cjs/codeHighlight/codeHighlight.css +1 -1
  17. package/lib/cjs/codeHighlight/codeHighlight.scss +1 -1
  18. package/lib/cjs/collapse/collapse.css +2 -2
  19. package/lib/cjs/datePicker/datePicker.css +8 -8
  20. package/lib/cjs/datePicker/foundation.d.ts +5 -0
  21. package/lib/cjs/datePicker/foundation.js +2 -0
  22. package/lib/cjs/datePicker/inputFoundation.d.ts +5 -0
  23. package/lib/cjs/descriptions/descriptions.css +6 -6
  24. package/lib/cjs/dropdown/dropdown.css +2 -2
  25. package/lib/cjs/form/form.css +4 -4
  26. package/lib/cjs/form/foundation.js +49 -3
  27. package/lib/cjs/hotKeys/hotKeys.css +2 -2
  28. package/lib/cjs/image/image.css +2 -2
  29. package/lib/cjs/input/input.css +8 -8
  30. package/lib/cjs/input/textarea.css +2 -2
  31. package/lib/cjs/inputNumber/foundation.d.ts +15 -0
  32. package/lib/cjs/inputNumber/foundation.js +113 -3
  33. package/lib/cjs/jsonViewer/jsonViewer.css +2 -2
  34. package/lib/cjs/jsonViewer/jsonViewer.scss +2 -2
  35. package/lib/cjs/list/list.css +1 -1
  36. package/lib/cjs/modal/modal.css +1 -1
  37. package/lib/cjs/navigation/navigation.css +2 -2
  38. package/lib/cjs/notification/notification.css +4 -4
  39. package/lib/cjs/pagination/pagination.css +5 -5
  40. package/lib/cjs/popconfirm/popconfirm.css +1 -1
  41. package/lib/cjs/popover/popover.css +1 -1
  42. package/lib/cjs/radio/radio.css +2 -2
  43. package/lib/cjs/scrollList/itemFoundation.js +12 -0
  44. package/lib/cjs/scrollList/scrollList.css +2 -2
  45. package/lib/cjs/select/select.css +6 -6
  46. package/lib/cjs/sideSheet/sideSheet.css +2 -2
  47. package/lib/cjs/sidebar/sidebar.css +11 -11
  48. package/lib/cjs/slider/foundation.js +46 -12
  49. package/lib/cjs/slider/rtl.scss +62 -0
  50. package/lib/cjs/slider/slider.css +45 -0
  51. package/lib/cjs/slider/slider.scss +2 -0
  52. package/lib/cjs/steps/steps.css +11 -11
  53. package/lib/cjs/table/foundation.d.ts +36 -0
  54. package/lib/cjs/table/foundation.js +162 -28
  55. package/lib/cjs/table/table.css +10 -2
  56. package/lib/cjs/table/table.scss +17 -0
  57. package/lib/cjs/tabs/tabs.css +2 -2
  58. package/lib/cjs/tag/tag.css +2 -2
  59. package/lib/cjs/tagInput/tagInput.css +2 -2
  60. package/lib/cjs/timePicker/timePicker.css +1 -1
  61. package/lib/cjs/timeline/timeline.css +2 -2
  62. package/lib/cjs/toast/toast.css +1 -1
  63. package/lib/cjs/tooltip/foundation.js +8 -5
  64. package/lib/cjs/tooltip/tooltip.css +1 -1
  65. package/lib/cjs/transfer/constants.d.ts +3 -1
  66. package/lib/cjs/transfer/constants.js +3 -1
  67. package/lib/cjs/transfer/foundation.d.ts +3 -0
  68. package/lib/cjs/transfer/foundation.js +4 -0
  69. package/lib/cjs/transfer/transfer.css +14 -5
  70. package/lib/cjs/transfer/transfer.scss +10 -0
  71. package/lib/cjs/tree/foundation.d.ts +3 -0
  72. package/lib/cjs/tree/foundation.js +31 -4
  73. package/lib/cjs/tree/tree.css +1 -1
  74. package/lib/cjs/treeSelect/foundation.d.ts +1 -0
  75. package/lib/cjs/treeSelect/foundation.js +8 -1
  76. package/lib/cjs/treeSelect/treeSelect.css +36 -4
  77. package/lib/cjs/treeSelect/treeSelect.scss +49 -1
  78. package/lib/cjs/typography/typography.css +8 -8
  79. package/lib/cjs/upload/upload.css +8 -8
  80. package/lib/cjs/utils/Store.d.ts +1 -1
  81. package/lib/cjs/utils/Store.js +1 -0
  82. package/lib/es/aiChatInput/aiChatInput.css +7 -7
  83. package/lib/es/anchor/anchor.css +3 -3
  84. package/lib/es/autoComplete/autoComplete.css +1 -1
  85. package/lib/es/avatar/avatar.css +5 -5
  86. package/lib/es/badge/badge.css +1 -1
  87. package/lib/es/breadcrumb/breadcrumb.css +2 -2
  88. package/lib/es/calendar/calendar.css +9 -9
  89. package/lib/es/cascader/cascader.css +6 -6
  90. package/lib/es/checkbox/checkbox.css +2 -2
  91. package/lib/es/codeHighlight/codeHighlight.css +1 -1
  92. package/lib/es/codeHighlight/codeHighlight.scss +1 -1
  93. package/lib/es/collapse/collapse.css +2 -2
  94. package/lib/es/datePicker/datePicker.css +8 -8
  95. package/lib/es/datePicker/foundation.d.ts +5 -0
  96. package/lib/es/datePicker/foundation.js +2 -0
  97. package/lib/es/datePicker/inputFoundation.d.ts +5 -0
  98. package/lib/es/descriptions/descriptions.css +6 -6
  99. package/lib/es/dropdown/dropdown.css +2 -2
  100. package/lib/es/form/form.css +4 -4
  101. package/lib/es/form/foundation.js +49 -3
  102. package/lib/es/hotKeys/hotKeys.css +2 -2
  103. package/lib/es/image/image.css +2 -2
  104. package/lib/es/input/input.css +8 -8
  105. package/lib/es/input/textarea.css +2 -2
  106. package/lib/es/inputNumber/foundation.d.ts +15 -0
  107. package/lib/es/inputNumber/foundation.js +113 -3
  108. package/lib/es/jsonViewer/jsonViewer.css +2 -2
  109. package/lib/es/jsonViewer/jsonViewer.scss +2 -2
  110. package/lib/es/list/list.css +1 -1
  111. package/lib/es/modal/modal.css +1 -1
  112. package/lib/es/navigation/navigation.css +2 -2
  113. package/lib/es/notification/notification.css +4 -4
  114. package/lib/es/pagination/pagination.css +5 -5
  115. package/lib/es/popconfirm/popconfirm.css +1 -1
  116. package/lib/es/popover/popover.css +1 -1
  117. package/lib/es/radio/radio.css +2 -2
  118. package/lib/es/scrollList/itemFoundation.js +12 -0
  119. package/lib/es/scrollList/scrollList.css +2 -2
  120. package/lib/es/select/select.css +6 -6
  121. package/lib/es/sideSheet/sideSheet.css +2 -2
  122. package/lib/es/sidebar/sidebar.css +11 -11
  123. package/lib/es/slider/foundation.js +46 -12
  124. package/lib/es/slider/rtl.scss +62 -0
  125. package/lib/es/slider/slider.css +45 -0
  126. package/lib/es/slider/slider.scss +2 -0
  127. package/lib/es/steps/steps.css +11 -11
  128. package/lib/es/table/foundation.d.ts +36 -0
  129. package/lib/es/table/foundation.js +162 -28
  130. package/lib/es/table/table.css +10 -2
  131. package/lib/es/table/table.scss +17 -0
  132. package/lib/es/tabs/tabs.css +2 -2
  133. package/lib/es/tag/tag.css +2 -2
  134. package/lib/es/tagInput/tagInput.css +2 -2
  135. package/lib/es/timePicker/timePicker.css +1 -1
  136. package/lib/es/timeline/timeline.css +2 -2
  137. package/lib/es/toast/toast.css +1 -1
  138. package/lib/es/tooltip/foundation.js +8 -5
  139. package/lib/es/tooltip/tooltip.css +1 -1
  140. package/lib/es/transfer/constants.d.ts +3 -1
  141. package/lib/es/transfer/constants.js +3 -1
  142. package/lib/es/transfer/foundation.d.ts +3 -0
  143. package/lib/es/transfer/foundation.js +4 -0
  144. package/lib/es/transfer/transfer.css +14 -5
  145. package/lib/es/transfer/transfer.scss +10 -0
  146. package/lib/es/tree/foundation.d.ts +3 -0
  147. package/lib/es/tree/foundation.js +31 -4
  148. package/lib/es/tree/tree.css +1 -1
  149. package/lib/es/treeSelect/foundation.d.ts +1 -0
  150. package/lib/es/treeSelect/foundation.js +8 -1
  151. package/lib/es/treeSelect/treeSelect.css +36 -4
  152. package/lib/es/treeSelect/treeSelect.scss +49 -1
  153. package/lib/es/typography/typography.css +8 -8
  154. package/lib/es/upload/upload.css +8 -8
  155. package/lib/es/utils/Store.d.ts +1 -1
  156. package/lib/es/utils/Store.js +1 -0
  157. package/package.json +19 -4
  158. package/scrollList/itemFoundation.ts +12 -0
  159. package/slider/foundation.ts +55 -15
  160. package/slider/rtl.scss +62 -0
  161. package/slider/slider.scss +2 -0
  162. package/table/foundation.ts +197 -29
  163. package/table/table.scss +17 -0
  164. package/tooltip/foundation.ts +8 -5
  165. package/transfer/constants.ts +3 -1
  166. package/transfer/foundation.ts +8 -1
  167. package/transfer/transfer.scss +10 -0
  168. package/tree/foundation.ts +34 -5
  169. package/treeSelect/foundation.ts +10 -1
  170. package/treeSelect/treeSelect.scss +49 -1
  171. package/utils/Store.ts +2 -1
@@ -34,7 +34,7 @@
34
34
  flex: 1;
35
35
  font-size: 16px;
36
36
  line-height: 22px;
37
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
37
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
38
38
  font-weight: 600;
39
39
  }
40
40
  .semi-sidebar-container-header-closeBtn {
@@ -86,7 +86,7 @@
86
86
  .semi-sidebar-mcp-configure-content-header-count {
87
87
  font-size: 12px;
88
88
  line-height: 16px;
89
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
89
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
90
90
  vertical-align: middle;
91
91
  color: var(--semi-color-text-2);
92
92
  }
@@ -124,14 +124,14 @@
124
124
  .semi-sidebar-mcp-configure-content-item-content-label {
125
125
  font-size: 14px;
126
126
  line-height: 20px;
127
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
127
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
128
128
  font-weight: 600;
129
129
  color: var(--semi-color-text-0);
130
130
  }
131
131
  .semi-sidebar-mcp-configure-content-item-content-desc {
132
132
  font-size: 12px;
133
133
  line-height: 16px;
134
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
134
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
135
135
  color: var(--semi-color-text-0);
136
136
  overflow: hidden;
137
137
  text-overflow: ellipsis;
@@ -176,7 +176,7 @@
176
176
  -webkit-box-orient: vertical;
177
177
  font-size: 14px;
178
178
  line-height: 20px;
179
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
179
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
180
180
  color: var(--semi-color-text-0);
181
181
  font-weight: 600;
182
182
  }
@@ -193,7 +193,7 @@
193
193
  .semi-sidebar-annotation-item-footer-text {
194
194
  font-size: 12px;
195
195
  line-height: 16px;
196
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
196
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
197
197
  color: var(--semi-color-text-0);
198
198
  overflow: hidden;
199
199
  text-overflow: ellipsis;
@@ -212,7 +212,7 @@
212
212
  justify-content: center;
213
213
  font-size: 12px;
214
214
  line-height: 16px;
215
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
215
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
216
216
  color: var(--semi-color-text-2);
217
217
  }
218
218
  .semi-sidebar-annotation-item-text {
@@ -233,7 +233,7 @@
233
233
  -webkit-box-orient: vertical;
234
234
  font-size: 12px;
235
235
  line-height: 16px;
236
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
236
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
237
237
  color: var(--semi-color-text-2);
238
238
  }
239
239
  .semi-sidebar-annotation-item-video {
@@ -288,13 +288,13 @@
288
288
  border-radius: 4px;
289
289
  font-size: 12px;
290
290
  line-height: 16px;
291
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
291
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
292
292
  color: var(--semi-color-bg-0);
293
293
  }
294
294
  .semi-sidebar-annotation-item-video-title {
295
295
  font-size: 14px;
296
296
  line-height: 20px;
297
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
297
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
298
298
  color: var(--semi-color-text-0);
299
299
  }
300
300
  .semi-sidebar-code-content {
@@ -522,7 +522,7 @@
522
522
  .semi-sidebar-detail-header-title {
523
523
  font-size: 16px;
524
524
  line-height: 22px;
525
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
525
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
526
526
  font-weight: 600;
527
527
  }
528
528
  .semi-sidebar-detail-header-right {
@@ -20,6 +20,8 @@ export default class SliderFoundation extends BaseFoundation {
20
20
  min,
21
21
  max
22
22
  } = this._adapter.getProps();
23
+ // Percent always increases with value, independent of visual direction.
24
+ // UI layer decides whether to use `left` or `right` to place elements.
23
25
  const minPercent = range ? (value[0] - min) / (max - min) : (value - min) / (max - min);
24
26
  const maxPercent = range ? (value[1] - min) / (max - min) : 1;
25
27
  return {
@@ -133,6 +135,8 @@ export default class SliderFoundation extends BaseFoundation {
133
135
  verticalReverse,
134
136
  range
135
137
  } = this._adapter.getProps();
138
+ const direction = this._adapter.getContext('direction');
139
+ const isRTL = direction === 'rtl' && !vertical;
136
140
  const value = this._adapter.getState('currentValue');
137
141
  const currentPos = this.transValueToPos(value);
138
142
  const {
@@ -149,6 +153,9 @@ export default class SliderFoundation extends BaseFoundation {
149
153
  let startPos;
150
154
  if (vertical && verticalReverse) {
151
155
  startPos = sliderY + len;
156
+ } else if (isRTL) {
157
+ // In RTL mode, start from right (sliderX + sliderWidth)
158
+ startPos = sliderX + len;
152
159
  } else {
153
160
  startPos = vertical ? sliderY : sliderX;
154
161
  }
@@ -156,11 +163,14 @@ export default class SliderFoundation extends BaseFoundation {
156
163
  let endPos;
157
164
  if (vertical && verticalReverse) {
158
165
  endPos = sliderY;
166
+ } else if (isRTL) {
167
+ // In RTL mode, end at left (sliderX)
168
+ endPos = sliderX;
159
169
  } else {
160
170
  endPos = vertical ? sliderY + sliderHeight : sliderX + sliderWidth;
161
171
  }
162
172
  // endPos = chooseMovePos === 'min' && isDrag && range ? currentPos[1] : endPos;
163
- if (vertical && verticalReverse) {
173
+ if (vertical && verticalReverse || isRTL) {
164
174
  if (position >= startPos) {
165
175
  position = startPos;
166
176
  } else if (position <= endPos) {
@@ -193,6 +203,8 @@ export default class SliderFoundation extends BaseFoundation {
193
203
  step,
194
204
  verticalReverse
195
205
  } = this._adapter.getProps();
206
+ const direction = this._adapter.getContext('direction');
207
+ const isRTL = direction === 'rtl' && !vertical;
196
208
  const {
197
209
  sliderX,
198
210
  sliderY,
@@ -205,6 +217,9 @@ export default class SliderFoundation extends BaseFoundation {
205
217
  if (vertical && verticalReverse) {
206
218
  //isMin = !isMin;
207
219
  stepValue = (startPos + len - pos) / len * (max - min) + min;
220
+ } else if (isRTL) {
221
+ // In RTL mode, position is calculated from right to left
222
+ stepValue = (startPos + len - pos) / len * (max - min) + min;
208
223
  } else {
209
224
  stepValue = (pos - startPos) / len * (max - min) + min;
210
225
  }
@@ -241,6 +256,8 @@ export default class SliderFoundation extends BaseFoundation {
241
256
  range,
242
257
  verticalReverse
243
258
  } = this._adapter.getProps();
259
+ const direction = this._adapter.getContext('direction');
260
+ const isRTL = direction === 'rtl' && !vertical;
244
261
  const {
245
262
  sliderX,
246
263
  sliderY,
@@ -249,10 +266,22 @@ export default class SliderFoundation extends BaseFoundation {
249
266
  } = this._adapter.getSliderLengths();
250
267
  const startPos = vertical ? sliderY : sliderX;
251
268
  const len = vertical ? sliderHeight : sliderWidth;
269
+ const transSingle = val => {
270
+ const percent = (val - min) / (max - min);
271
+ if (vertical && verticalReverse) {
272
+ // Reverse direction in vertical mode
273
+ return startPos + len - percent * len;
274
+ }
275
+ if (isRTL) {
276
+ // Reverse direction in horizontal RTL
277
+ return startPos + len - percent * len;
278
+ }
279
+ return startPos + percent * len;
280
+ };
252
281
  if (range) {
253
- return [(value[0] - min) * len / (max - min) + startPos, (value[1] - min) * len / (max - min) + startPos];
282
+ return [transSingle(value[0]), transSingle(value[1])];
254
283
  } else {
255
- return (value - min) * len / (max - min) + startPos;
284
+ return transSingle(value);
256
285
  }
257
286
  };
258
287
  /**
@@ -575,23 +604,28 @@ export default class SliderFoundation extends BaseFoundation {
575
604
  } = this.getStates();
576
605
  const {
577
606
  step,
578
- range
607
+ range,
608
+ vertical
579
609
  } = this.getProps();
610
+ const direction = this._adapter.getContext('direction');
611
+ const isRTL = direction === 'rtl' && !vertical;
580
612
  let outputValue;
581
613
  switch (event.key) {
582
614
  case "ArrowLeft":
583
615
  case "ArrowDown":
584
- outputValue = this._handleValueDecreaseWithKeyBoard(step, handler);
616
+ // In RTL mode, ArrowLeft and ArrowDown should increase value
617
+ outputValue = isRTL ? this._handleValueIncreaseWithKeyBoard(step, handler) : this._handleValueDecreaseWithKeyBoard(step, handler);
585
618
  break;
586
619
  case "ArrowRight":
587
620
  case "ArrowUp":
588
- outputValue = this._handleValueIncreaseWithKeyBoard(step, handler);
621
+ // In RTL mode, ArrowRight and ArrowUp should decrease value
622
+ outputValue = isRTL ? this._handleValueDecreaseWithKeyBoard(step, handler) : this._handleValueIncreaseWithKeyBoard(step, handler);
589
623
  break;
590
624
  case "PageUp":
591
- outputValue = this._handleValueIncreaseWithKeyBoard(10 * step, handler);
625
+ outputValue = isRTL ? this._handleValueDecreaseWithKeyBoard(10 * step, handler) : this._handleValueIncreaseWithKeyBoard(10 * step, handler);
592
626
  break;
593
627
  case "PageDown":
594
- outputValue = this._handleValueDecreaseWithKeyBoard(10 * step, handler);
628
+ outputValue = isRTL ? this._handleValueIncreaseWithKeyBoard(10 * step, handler) : this._handleValueDecreaseWithKeyBoard(10 * step, handler);
595
629
  break;
596
630
  case "Home":
597
631
  outputValue = this._handleHomeKey(handler);
@@ -712,10 +746,10 @@ export default class SliderFoundation extends BaseFoundation {
712
746
  const currentPos = this.transValueToPos(currentValue);
713
747
  let isMin = true;
714
748
  if (Array.isArray(currentPos)) {
715
- // Slide on both sides
716
- if (pagePos > currentPos[1] || Math.abs(pagePos - currentPos[0]) > Math.abs(pagePos - currentPos[1])) {
717
- isMin = false;
718
- }
749
+ // Choose the nearest handle regardless of ordering (LTR/RTL/verticalReverse)
750
+ const distToFirst = Math.abs(pagePos - currentPos[0]);
751
+ const distToSecond = Math.abs(pagePos - currentPos[1]);
752
+ isMin = distToFirst <= distToSecond;
719
753
  }
720
754
  if (vertical && verticalReverse) {
721
755
  isMin = !isMin;
@@ -0,0 +1,62 @@
1
+ $module: #{$prefix}-slider;
2
+
3
+ // RTL support (horizontal)
4
+ // Slider uses `left` positioning in LTR. In RTL we switch to `right` positioning
5
+ // in the component logic, so centering transforms must be mirrored.
6
+ .#{$prefix}-rtl,
7
+ .#{$prefix}-portal-rtl {
8
+ .#{$module} {
9
+ direction: rtl;
10
+
11
+ &-handle {
12
+ transform: $transform_scale-slider_handle translateX(50%) translateY($spacing-slider_handle-translateY);
13
+ }
14
+
15
+ &-mark {
16
+ transform: translate(50%, 0);
17
+ }
18
+
19
+ &-mark-reverse {
20
+ transform: translate(50%, 0) rotate(-180deg);
21
+ }
22
+
23
+ // Boundary text should match RTL direction: min on the right, max on the left
24
+
25
+ &-boundary-min {
26
+ left: auto;
27
+ right: $spacing-slider_boundary_min-left;
28
+ }
29
+
30
+ &-boundary-max {
31
+ right: auto;
32
+ left: $spacing-slider_boundary_max-right;
33
+ }
34
+ }
35
+ }
36
+
37
+ // Backward/explicit support: the component may add `semi-slider-rtl` on wrapper.
38
+ // Keep these rules so RTL transforms still apply even without `.semi-rtl` container.
39
+
40
+ .#{$module}-rtl {
41
+ .#{$module}-handle {
42
+ transform: $transform_scale-slider_handle translateX(50%) translateY($spacing-slider_handle-translateY);
43
+ }
44
+
45
+ .#{$module}-mark {
46
+ transform: translate(50%, 0);
47
+ }
48
+
49
+ .#{$module}-mark-reverse {
50
+ transform: translate(50%, 0) rotate(-180deg);
51
+ }
52
+
53
+ .#{$module}-boundary-min {
54
+ left: auto;
55
+ right: $spacing-slider_boundary_min-left;
56
+ }
57
+
58
+ .#{$module}-boundary-max {
59
+ right: auto;
60
+ left: $spacing-slider_boundary_max-right;
61
+ }
62
+ }
@@ -208,4 +208,49 @@
208
208
 
209
209
  .semi-slider-reverse {
210
210
  transform: rotate(180deg);
211
+ }
212
+
213
+ .semi-rtl .semi-slider,
214
+ .semi-portal-rtl .semi-slider {
215
+ direction: rtl;
216
+ }
217
+ .semi-rtl .semi-slider-handle,
218
+ .semi-portal-rtl .semi-slider-handle {
219
+ transform: var(--semi-transform_scale-small) translateX(50%) translateY(0px);
220
+ }
221
+ .semi-rtl .semi-slider-mark,
222
+ .semi-portal-rtl .semi-slider-mark {
223
+ transform: translate(50%, 0);
224
+ }
225
+ .semi-rtl .semi-slider-mark-reverse,
226
+ .semi-portal-rtl .semi-slider-mark-reverse {
227
+ transform: translate(50%, 0) rotate(-180deg);
228
+ }
229
+ .semi-rtl .semi-slider-boundary-min,
230
+ .semi-portal-rtl .semi-slider-boundary-min {
231
+ left: auto;
232
+ right: 0px;
233
+ }
234
+ .semi-rtl .semi-slider-boundary-max,
235
+ .semi-portal-rtl .semi-slider-boundary-max {
236
+ right: auto;
237
+ left: 0px;
238
+ }
239
+
240
+ .semi-slider-rtl .semi-slider-handle {
241
+ transform: var(--semi-transform_scale-small) translateX(50%) translateY(0px);
242
+ }
243
+ .semi-slider-rtl .semi-slider-mark {
244
+ transform: translate(50%, 0);
245
+ }
246
+ .semi-slider-rtl .semi-slider-mark-reverse {
247
+ transform: translate(50%, 0) rotate(-180deg);
248
+ }
249
+ .semi-slider-rtl .semi-slider-boundary-min {
250
+ left: auto;
251
+ right: 0px;
252
+ }
253
+ .semi-slider-rtl .semi-slider-boundary-max {
254
+ right: auto;
255
+ left: 0px;
211
256
  }
@@ -252,3 +252,5 @@ $module: #{$prefix}-slider;
252
252
  .#{$module}-reverse {
253
253
  transform: rotate(180deg);
254
254
  }
255
+
256
+ @import "./rtl.scss";
@@ -25,7 +25,7 @@
25
25
  position: relative;
26
26
  font-size: 18px;
27
27
  line-height: 24px;
28
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
28
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
29
29
  font-weight: 600;
30
30
  width: 100%;
31
31
  overflow: hidden;
@@ -37,7 +37,7 @@
37
37
  .semi-steps .semi-steps-item .semi-steps-item-description {
38
38
  font-size: 14px;
39
39
  line-height: 20px;
40
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
40
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
41
41
  color: var(--semi-color-text-2);
42
42
  width: 100%;
43
43
  overflow: hidden;
@@ -128,7 +128,7 @@
128
128
  justify-content: center;
129
129
  font-size: 20px;
130
130
  line-height: 28px;
131
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
131
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
132
132
  font-weight: 600;
133
133
  flex-grow: 0;
134
134
  }
@@ -183,7 +183,7 @@
183
183
  .semi-steps-basic.semi-steps-horizontal .semi-steps-item .semi-steps-item-description {
184
184
  font-size: 12px;
185
185
  line-height: 16px;
186
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
186
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
187
187
  color: var(--semi-color-text-2);
188
188
  width: 100%;
189
189
  max-width: 268px;
@@ -250,7 +250,7 @@
250
250
  .semi-steps-basic.semi-steps-vertical .semi-steps-item .semi-steps-item-description {
251
251
  font-size: 12px;
252
252
  line-height: 16px;
253
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
253
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
254
254
  color: var(--semi-color-text-2);
255
255
  width: 100%;
256
256
  }
@@ -304,7 +304,7 @@
304
304
  height: 24px;
305
305
  font-size: 16px;
306
306
  line-height: 22px;
307
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
307
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
308
308
  font-weight: 600;
309
309
  background: var(--semi-color-primary);
310
310
  border-radius: var(--semi-border-radius-circle);
@@ -316,7 +316,7 @@
316
316
  display: inline-block;
317
317
  font-size: 16px;
318
318
  line-height: 22px;
319
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
319
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
320
320
  line-height: 24px;
321
321
  font-weight: 600;
322
322
  color: var(--semi-color-text-0);
@@ -366,7 +366,7 @@
366
366
  .semi-steps-basic.semi-steps-small .semi-steps-item .semi-steps-item-title {
367
367
  font-size: 14px;
368
368
  line-height: 20px;
369
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
369
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
370
370
  }
371
371
  .semi-steps-basic.semi-steps-small .semi-steps-item .semi-steps-item-left .semi-steps-item-icon {
372
372
  height: 20px;
@@ -374,7 +374,7 @@
374
374
  .semi-steps-basic.semi-steps-small .semi-steps-item .semi-steps-item-left .semi-steps-item-icon .semi-steps-item-number-icon {
375
375
  font-size: 12px;
376
376
  line-height: 16px;
377
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
377
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
378
378
  width: 20px;
379
379
  height: 20px;
380
380
  }
@@ -411,7 +411,7 @@
411
411
  .semi-steps-nav .semi-steps-item .semi-steps-item-title {
412
412
  font-size: 16px;
413
413
  line-height: 22px;
414
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
414
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
415
415
  max-width: 17em;
416
416
  overflow: hidden;
417
417
  text-overflow: ellipsis;
@@ -425,7 +425,7 @@
425
425
  .semi-steps-nav.semi-steps-small .semi-steps-item .semi-steps-item-title {
426
426
  font-size: 14px;
427
427
  line-height: 20px;
428
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
428
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
429
429
  }
430
430
 
431
431
  .semi-rtl .semi-steps,
@@ -55,8 +55,11 @@ export interface TableAdapter<RecordType> extends DefaultAdapter {
55
55
  setFlattenData: (flattenData: RecordType[]) => void;
56
56
  setAllRowKeys: (allRowKeys: BaseRowKeyType[]) => void;
57
57
  setHoveredRowKey: (hoveredRowKey: BaseRowKeyType) => void;
58
+ setHoveredRowKeys: (hoveredRowKeys: BaseRowKeyType[]) => void;
58
59
  setCachedFilteredSortedDataSource: (filteredSortedDataSource: RecordType[]) => void;
59
60
  setCachedFilteredSortedRowKeys: (filteredSortedRowKeys: BaseRowKeyType[]) => void;
61
+ setHalfCheckedRowKeys: (halfCheckedRowKeys: BaseRowKeyType[]) => void;
62
+ setKeyEntities: (keyEntities: BaseEntitys) => void;
60
63
  getCurrentPage: () => number;
61
64
  getCurrentPageSize: () => number;
62
65
  getCachedFilteredSortedDataSource: () => RecordType[];
@@ -65,6 +68,9 @@ export interface TableAdapter<RecordType> extends DefaultAdapter {
65
68
  setAllDisabledRowKeys: (allDisabledRowKeys: BaseRowKeyType[]) => void;
66
69
  getAllDisabledRowKeys: () => BaseRowKeyType[];
67
70
  getAllDisabledRowKeysSet: () => Set<BaseRowKeyType>;
71
+ getHalfCheckedRowKeys: () => BaseRowKeyType[];
72
+ getHalfCheckedRowKeysSet: () => Set<BaseRowKeyType>;
73
+ getKeyEntities: () => BaseEntitys;
68
74
  notifyFilterDropdownVisibleChange: (visible: boolean, dataIndex: string) => void;
69
75
  notifyChange: (changeInfo: {
70
76
  pagination: BasePagination;
@@ -90,6 +96,7 @@ export interface TableAdapter<RecordType> extends DefaultAdapter {
90
96
  getMergePagination: () => (pagination: BasePagination) => BasePagination;
91
97
  setBodyHasScrollbar: (bodyHasScrollBar: boolean) => void;
92
98
  getTableLayout: () => 'fixed' | 'auto';
99
+ getCheckRelation: () => CheckRelation;
93
100
  }
94
101
  declare class TableFoundation<RecordType> extends BaseFoundation<TableAdapter<RecordType>> {
95
102
  memoizedWithFnsColumns: (queries: BaseColumnProps<RecordType>[], cachedColumns: BaseColumnProps<RecordType>[], rowSelectionUpdate: boolean, hideExpandedColumn: boolean, bodyHasScrollBar: boolean) => BaseColumnProps<RecordType>[];
@@ -223,6 +230,23 @@ declare class TableFoundation<RecordType> extends BaseFoundation<TableAdapter<Re
223
230
  */
224
231
  getRecordKey(record: RecordType): string;
225
232
  isEmpty(dataSource: RecordType[]): boolean;
233
+ /**
234
+ * Build tree data entities for checkRelation
235
+ * @param dataSource
236
+ * @returns keyEntities map
237
+ */
238
+ buildKeyEntities(dataSource?: RecordType[]): BaseEntitys;
239
+ /**
240
+ * Calculate checked keys when checkRelation is 'related'
241
+ * @param realKey
242
+ * @param selected
243
+ * @param checkedKeys
244
+ * @param halfCheckedKeys
245
+ */
246
+ calcCheckedKeysForSelect(realKey: BaseRowKeyType, selected: boolean, checkedKeys: Set<string>, halfCheckedKeys: Set<string>): {
247
+ checkedKeys: Set<string>;
248
+ halfCheckedKeys: Set<string>;
249
+ };
226
250
  handleSelectRow(realKey: BaseRowKeyType, selected: boolean, e: any): void;
227
251
  /**
228
252
  * select all rows
@@ -381,4 +405,16 @@ export type BaseIncludeGroupRecord<RecordType> = RecordType | {
381
405
  export type BaseEllipsis = boolean | {
382
406
  showTitle: boolean;
383
407
  };
408
+ export type CheckRelation = 'related' | 'unRelated';
409
+ export interface BaseEntity {
410
+ key?: string | number;
411
+ level?: number;
412
+ children?: BaseEntity[];
413
+ parent?: BaseEntity | null;
414
+ data?: Record<string, any>;
415
+ [key: string]: any;
416
+ }
417
+ export interface BaseEntitys {
418
+ [key: string]: BaseEntity;
419
+ }
384
420
  export default TableFoundation;