@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
@@ -16,6 +16,7 @@ import BaseFoundation from '../base/foundation';
16
16
  import { strings, numbers } from './constants';
17
17
  import { mergeQueries, flattenColumns, filterColumns } from './utils';
18
18
  import { pullAll, withOrderSort } from '../utils/array';
19
+ import { convertDataToEntities, calcCheckedKeysForChecked, calcCheckedKeysForUnchecked } from '../tree/treeUtil';
19
20
  class TableFoundation extends BaseFoundation {
20
21
  /**
21
22
  * update columns in place, and use default values as initial values if the sorting and filtering columns have no values
@@ -587,29 +588,115 @@ class TableFoundation extends BaseFoundation {
587
588
  dataSource = dataSource == null ? this.getProp('dataSource') : dataSource;
588
589
  return !(Array.isArray(dataSource) && dataSource.length > 0);
589
590
  }
591
+ /**
592
+ * Build tree data entities for checkRelation
593
+ * @param dataSource
594
+ * @returns keyEntities map
595
+ */
596
+ buildKeyEntities(dataSource) {
597
+ dataSource = dataSource == null ? this._getDataSource() : dataSource;
598
+ const childrenRecordName = this.getProp('childrenRecordName');
599
+ const rowKey = this.getProp('rowKey');
600
+ // Convert table data to tree data format
601
+ const convertToTreeData = data => {
602
+ return data.map(record => {
603
+ const key = typeof rowKey === 'function' ? rowKey(record) : _get(record, rowKey);
604
+ const children = _get(record, childrenRecordName);
605
+ const node = Object.assign({
606
+ key
607
+ }, record);
608
+ if (Array.isArray(children) && children.length) {
609
+ node.children = convertToTreeData(children);
610
+ }
611
+ return node;
612
+ });
613
+ };
614
+ const treeData = convertToTreeData(dataSource);
615
+ const {
616
+ keyEntities
617
+ } = convertDataToEntities(treeData, {
618
+ key: 'key',
619
+ children: 'children'
620
+ });
621
+ return keyEntities;
622
+ }
623
+ /**
624
+ * Calculate checked keys when checkRelation is 'related'
625
+ * @param realKey
626
+ * @param selected
627
+ * @param checkedKeys
628
+ * @param halfCheckedKeys
629
+ */
630
+ calcCheckedKeysForSelect(realKey, selected, checkedKeys, halfCheckedKeys) {
631
+ const keyEntities = this._adapter.getKeyEntities();
632
+ const keyStr = String(realKey);
633
+ // If keyEntities doesn't contain this key, handle it as a simple add/remove
634
+ if (!keyEntities || !keyEntities[keyStr]) {
635
+ if (selected) {
636
+ checkedKeys.add(keyStr);
637
+ } else {
638
+ checkedKeys.delete(keyStr);
639
+ }
640
+ return {
641
+ checkedKeys,
642
+ halfCheckedKeys
643
+ };
644
+ }
645
+ if (selected) {
646
+ return calcCheckedKeysForChecked(keyStr, keyEntities, checkedKeys, halfCheckedKeys);
647
+ } else {
648
+ return calcCheckedKeysForUnchecked(keyStr, keyEntities, checkedKeys, halfCheckedKeys);
649
+ }
650
+ }
590
651
  handleSelectRow(realKey, selected, e) {
591
652
  this.stopPropagation(e);
592
653
  if (typeof selected === 'boolean' && realKey != null) {
654
+ const checkRelation = this._adapter.getCheckRelation();
593
655
  const selectedRowKeys = this._getSelectedRowKeys();
656
+ const halfCheckedRowKeys = [...(this._adapter.getHalfCheckedRowKeys() || [])];
594
657
  let foundIdx = -1;
595
658
  const selectedRow = this.getSelectedRows(null, [realKey])[0];
596
659
  let selectedRows;
597
- if ((foundIdx = selectedRowKeys.indexOf(realKey)) > -1 && selected === false) {
598
- selectedRowKeys.splice(foundIdx, 1);
599
- selectedRows = this.getSelectedRows(null, selectedRowKeys);
660
+ if (checkRelation === 'related') {
661
+ // When checkRelation is 'related', use tree selection logic
662
+ const keyEntities = this._adapter.getKeyEntities();
663
+ // Convert keys to strings for tree utility functions
664
+ const checkedKeysSet = new Set(selectedRowKeys.map(key => String(key)));
665
+ const halfCheckedKeysSet = new Set(halfCheckedRowKeys.map(key => String(key)));
666
+ const {
667
+ checkedKeys,
668
+ halfCheckedKeys
669
+ } = this.calcCheckedKeysForSelect(String(realKey), selected, checkedKeysSet, halfCheckedKeysSet);
670
+ const newSelectedRowKeys = [...checkedKeys];
671
+ const newHalfCheckedRowKeys = [...halfCheckedKeys];
672
+ selectedRows = this.getSelectedRows(null, newSelectedRowKeys);
673
+ // Always update halfCheckedRowKeys state for checkRelation='related' mode
674
+ // This is needed for rendering the half-checked state in the UI
675
+ this._adapter.setHalfCheckedRowKeys(newHalfCheckedRowKeys);
600
676
  if (!this._selectionIsControlled()) {
601
- this._adapter.setSelectedRowKeys(selectedRowKeys);
677
+ this._adapter.setSelectedRowKeys(newSelectedRowKeys);
602
678
  }
603
679
  this._adapter.notifySelect(selectedRow, selected, selectedRows, e);
604
- this._adapter.notifySelectionChange(selectedRowKeys, selectedRows);
605
- } else if (selectedRowKeys.indexOf(realKey) === -1 && selected === true) {
606
- selectedRowKeys.push(realKey);
607
- selectedRows = this.getSelectedRows(null, selectedRowKeys);
608
- if (!this._selectionIsControlled()) {
609
- this._adapter.setSelectedRowKeys(selectedRowKeys);
680
+ this._adapter.notifySelectionChange(newSelectedRowKeys, selectedRows);
681
+ } else {
682
+ // Original logic for unRelated mode
683
+ if ((foundIdx = selectedRowKeys.indexOf(realKey)) > -1 && selected === false) {
684
+ selectedRowKeys.splice(foundIdx, 1);
685
+ selectedRows = this.getSelectedRows(null, selectedRowKeys);
686
+ if (!this._selectionIsControlled()) {
687
+ this._adapter.setSelectedRowKeys(selectedRowKeys);
688
+ }
689
+ this._adapter.notifySelect(selectedRow, selected, selectedRows, e);
690
+ this._adapter.notifySelectionChange(selectedRowKeys, selectedRows);
691
+ } else if (selectedRowKeys.indexOf(realKey) === -1 && selected === true) {
692
+ selectedRowKeys.push(realKey);
693
+ selectedRows = this.getSelectedRows(null, selectedRowKeys);
694
+ if (!this._selectionIsControlled()) {
695
+ this._adapter.setSelectedRowKeys(selectedRowKeys);
696
+ }
697
+ this._adapter.notifySelect(selectedRow, selected, selectedRows, e);
698
+ this._adapter.notifySelectionChange(selectedRowKeys, selectedRows);
610
699
  }
611
- this._adapter.notifySelect(selectedRow, selected, selectedRows, e);
612
- this._adapter.notifySelectionChange(selectedRowKeys, selectedRows);
613
700
  }
614
701
  }
615
702
  }
@@ -621,6 +708,7 @@ class TableFoundation extends BaseFoundation {
621
708
  handleSelectAllRow(selected, e) {
622
709
  this.stopPropagation(e);
623
710
  if (typeof selected === 'boolean') {
711
+ const checkRelation = this._adapter.getCheckRelation();
624
712
  const curSelectedRowKeys = this._getSelectedRowKeys();
625
713
  let selectedRowKeys = [...curSelectedRowKeys];
626
714
  const selectedRowKeysSet = this._getSelectedRowKeysSet();
@@ -628,26 +716,72 @@ class TableFoundation extends BaseFoundation {
628
716
  const disabledRowKeys = this._adapter.getAllDisabledRowKeys();
629
717
  const disabledRowKeysSet = this._adapter.getAllDisabledRowKeysSet();
630
718
  let changedRowKeys;
631
- // Select all, if not disabled && not in selectedRowKeys
632
- if (selected) {
633
- for (const key of allRowKeys) {
634
- if (!disabledRowKeysSet.has(key) && !selectedRowKeysSet.has(key)) {
635
- selectedRowKeys.push(key);
719
+ if (checkRelation === 'related') {
720
+ // When checkRelation is 'related', use tree selection logic
721
+ const keyEntities = this._adapter.getKeyEntities();
722
+ const halfCheckedRowKeys = [...(this._adapter.getHalfCheckedRowKeys() || [])];
723
+ // Convert keys to strings for tree utility functions
724
+ let checkedKeysSet = new Set(selectedRowKeys.map(key => String(key)));
725
+ let halfCheckedKeysSet = new Set(halfCheckedRowKeys.map(key => String(key)));
726
+ if (selected) {
727
+ // Select all: add all non-disabled keys
728
+ const keysToAdd = allRowKeys.filter(key => !disabledRowKeysSet.has(key));
729
+ for (const key of keysToAdd) {
730
+ const keyStr = String(key);
731
+ if (!checkedKeysSet.has(keyStr) && keyEntities && keyEntities[keyStr]) {
732
+ const result = calcCheckedKeysForChecked(keyStr, keyEntities, checkedKeysSet, halfCheckedKeysSet);
733
+ checkedKeysSet = result.checkedKeys;
734
+ halfCheckedKeysSet = result.halfCheckedKeys;
735
+ }
736
+ }
737
+ changedRowKeys = keysToAdd;
738
+ } else {
739
+ // Deselect all: remove all keys
740
+ const keysToRemove = [...checkedKeysSet];
741
+ for (const key of keysToRemove) {
742
+ if (keyEntities && keyEntities[key]) {
743
+ const result = calcCheckedKeysForUnchecked(key, keyEntities, checkedKeysSet, halfCheckedKeysSet);
744
+ checkedKeysSet = result.checkedKeys;
745
+ halfCheckedKeysSet = result.halfCheckedKeys;
746
+ }
636
747
  }
748
+ changedRowKeys = [...curSelectedRowKeys];
637
749
  }
638
- allRowKeys = pullAll(allRowKeys, [...disabledRowKeys, ...curSelectedRowKeys]);
639
- changedRowKeys = [...allRowKeys];
750
+ selectedRowKeys = [...checkedKeysSet];
751
+ const newHalfCheckedRowKeys = [...halfCheckedKeysSet];
752
+ const changedRows = this.getSelectedRows(null, changedRowKeys || []);
753
+ const selectedRows = this.getSelectedRows(null, selectedRowKeys || []);
754
+ // Always update halfCheckedRowKeys state for checkRelation='related' mode
755
+ // This is needed for rendering the half-checked state in the UI
756
+ this._adapter.setHalfCheckedRowKeys(newHalfCheckedRowKeys);
757
+ if (!this._selectionIsControlled()) {
758
+ this._adapter.setSelectedRowKeys(selectedRowKeys);
759
+ }
760
+ this._adapter.notifySelectAll(selected, selectedRows, changedRows, e);
761
+ this._adapter.notifySelectionChange(selectedRowKeys, selectedRows);
640
762
  } else {
641
- selectedRowKeys = pullAll(selectedRowKeys, allRowKeys);
642
- changedRowKeys = [...curSelectedRowKeys];
643
- }
644
- const changedRows = this.getSelectedRows(null, changedRowKeys || []);
645
- const selectedRows = this.getSelectedRows(null, selectedRowKeys || []);
646
- if (!this._selectionIsControlled()) {
647
- this._adapter.setSelectedRowKeys(selectedRowKeys);
763
+ // Original logic for unRelated mode
764
+ // Select all, if not disabled && not in selectedRowKeys
765
+ if (selected) {
766
+ for (const key of allRowKeys) {
767
+ if (!disabledRowKeysSet.has(key) && !selectedRowKeysSet.has(key)) {
768
+ selectedRowKeys.push(key);
769
+ }
770
+ }
771
+ allRowKeys = pullAll(allRowKeys, [...disabledRowKeys, ...curSelectedRowKeys]);
772
+ changedRowKeys = [...allRowKeys];
773
+ } else {
774
+ selectedRowKeys = pullAll(selectedRowKeys, allRowKeys);
775
+ changedRowKeys = [...curSelectedRowKeys];
776
+ }
777
+ const changedRows = this.getSelectedRows(null, changedRowKeys || []);
778
+ const selectedRows = this.getSelectedRows(null, selectedRowKeys || []);
779
+ if (!this._selectionIsControlled()) {
780
+ this._adapter.setSelectedRowKeys(selectedRowKeys);
781
+ }
782
+ this._adapter.notifySelectAll(selected, selectedRows, changedRows, e);
783
+ this._adapter.notifySelectionChange(selectedRowKeys, selectedRows);
648
784
  }
649
- this._adapter.notifySelectAll(selected, selectedRows, changedRows, e);
650
- this._adapter.notifySelectionChange(selectedRowKeys, selectedRows);
651
785
  }
652
786
  }
653
787
  /**
@@ -22,7 +22,7 @@
22
22
  .semi-table-pagination-info {
23
23
  font-size: 14px;
24
24
  line-height: 20px;
25
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
25
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
26
26
  font-weight: 400;
27
27
  }
28
28
  .semi-table-pagination-outer {
@@ -48,7 +48,7 @@
48
48
  padding: 0;
49
49
  font-size: 14px;
50
50
  line-height: 20px;
51
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
51
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
52
52
  color: var(--semi-color-text-0);
53
53
  width: 100%;
54
54
  }
@@ -222,6 +222,14 @@
222
222
  display: table-row;
223
223
  background-color: var(--semi-color-bg-1);
224
224
  }
225
+ .semi-table-tbody > .semi-table-row.semi-table-row-hovered > .semi-table-row-cell {
226
+ background-image: linear-gradient(0deg, var(--semi-color-fill-0), var(--semi-color-fill-0));
227
+ background-color: var(--semi-color-bg-0);
228
+ }
229
+ .semi-table-tbody > .semi-table-row.semi-table-row-hovered > .semi-table-row-cell.semi-table-cell-fixed-left, .semi-table-tbody > .semi-table-row.semi-table-row-hovered > .semi-table-row-cell.semi-table-cell-fixed-right {
230
+ background-image: linear-gradient(0deg, var(--semi-color-fill-0), var(--semi-color-fill-0));
231
+ background-color: var(--semi-color-bg-1);
232
+ }
225
233
  .semi-table-tbody > .semi-table-row:hover > .semi-table-row-cell {
226
234
  background-image: linear-gradient(0deg, var(--semi-color-fill-0), var(--semi-color-fill-0));
227
235
  background-color: var(--semi-color-bg-0);
@@ -259,6 +259,23 @@ $module: #{$prefix}-table;
259
259
  display: table-row;
260
260
  background-color: $color-table_body-bg-default;
261
261
 
262
+ // Programmatic hover state (e.g. rowSpanHover feature)
263
+ // Keep visual effect consistent with native :hover
264
+ &.#{$module}-row-hovered {
265
+ & > .#{$module}-row-cell {
266
+ background-image: linear-gradient(0deg, $color-table_body-bg-hover, $color-table_body-bg-hover);
267
+ background-color: $color-table_cell-bg-hover;
268
+
269
+ &.#{$module}-cell-fixed {
270
+ &-left,
271
+ &-right {
272
+ background-image: linear-gradient(0deg, $color-table_body-bg-hover, $color-table_body-bg-hover);
273
+ background-color: $color-table_body-bg-default;
274
+ }
275
+ }
276
+ }
277
+ }
278
+
262
279
  &:hover {
263
280
  & > .#{$module}-row-cell {
264
281
  // $color-table_body-bg-hover has transparency,will reveal the background color $color-table_body-bg-default\
@@ -51,7 +51,7 @@
51
51
  .semi-tabs-bar .semi-tabs-tab {
52
52
  font-size: 14px;
53
53
  line-height: 20px;
54
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
54
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
55
55
  cursor: pointer;
56
56
  box-sizing: border-box;
57
57
  position: relative;
@@ -112,7 +112,7 @@
112
112
  .semi-tabs-tab-single.semi-tabs-tab {
113
113
  font-size: 14px;
114
114
  line-height: 20px;
115
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
115
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
116
116
  cursor: pointer;
117
117
  box-sizing: border-box;
118
118
  position: relative;
@@ -18,7 +18,7 @@
18
18
  .semi-tag-default, .semi-tag-small {
19
19
  font-size: 12px;
20
20
  line-height: 16px;
21
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
21
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
22
22
  height: 20px;
23
23
  padding: 2px 8px;
24
24
  }
@@ -34,7 +34,7 @@
34
34
  .semi-tag-large {
35
35
  font-size: 12px;
36
36
  line-height: 16px;
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
  padding: 4px 8px;
39
39
  height: 24px;
40
40
  }
@@ -232,7 +232,7 @@
232
232
  font-weight: 600;
233
233
  font-size: 14px;
234
234
  line-height: 20px;
235
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
235
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
236
236
  color: var(--semi-color-text-2);
237
237
  flex-shrink: 0;
238
238
  white-space: nowrap;
@@ -248,7 +248,7 @@
248
248
  white-space: nowrap;
249
249
  font-size: 14px;
250
250
  line-height: 20px;
251
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
251
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
252
252
  }
253
253
  .semi-tagInput-prefix-icon, .semi-tagInput-suffix-icon {
254
254
  color: var(--semi-color-text-2);
@@ -79,7 +79,7 @@
79
79
  .semi-timepicker .semi-timepicker-input {
80
80
  font-size: 14px;
81
81
  line-height: 20px;
82
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
82
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
83
83
  border-radius: var(--semi-border-radius-small);
84
84
  align-items: center;
85
85
  }
@@ -77,7 +77,7 @@
77
77
  .semi-timeline-item-content {
78
78
  font-size: 14px;
79
79
  line-height: 20px;
80
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
80
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
81
81
  position: relative;
82
82
  margin: 0 0 0 25px;
83
83
  word-break: break-word;
@@ -86,7 +86,7 @@
86
86
  .semi-timeline-item-content-extra, .semi-timeline-item-content-time {
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
  color: var(--semi-color-text-2);
91
91
  margin-top: 4px;
92
92
  }
@@ -34,7 +34,7 @@
34
34
  box-shadow: var(--semi-shadow-elevated);
35
35
  font-size: 14px;
36
36
  line-height: 20px;
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
  background-color: var(--semi-color-bg-3);
39
39
  border-radius: var(--semi-border-radius-medium);
40
40
  padding: 12px 8px 12px 8px;
@@ -326,7 +326,7 @@ export default class Tooltip extends BaseFoundation {
326
326
  switch (types) {
327
327
  case 'focus':
328
328
  triggerEventSet[eventNames.focus] = () => {
329
- this.delayShow();
329
+ this.getProp('condition') !== false && this.delayShow();
330
330
  };
331
331
  triggerEventSet[eventNames.blur] = () => {
332
332
  this.delayHide();
@@ -336,7 +336,7 @@ export default class Tooltip extends BaseFoundation {
336
336
  case 'click':
337
337
  triggerEventSet[eventNames.click] = () => {
338
338
  // this.delayShow();
339
- this.show();
339
+ this.getProp('condition') !== false && this.show();
340
340
  };
341
341
  portalEventSet = {};
342
342
  // Click outside needs special treatment, can not be directly tied to the trigger Element, need to be bound to the document
@@ -345,7 +345,7 @@ export default class Tooltip extends BaseFoundation {
345
345
  triggerEventSet[eventNames.mouseEnter] = () => {
346
346
  // console.log(e);
347
347
  this.setCache('isClickToHide', false);
348
- this.delayShow();
348
+ this.getProp('condition') !== false && this.delayShow();
349
349
  // this.show('trigger');
350
350
  };
351
351
  triggerEventSet[eventNames.mouseLeave] = () => {
@@ -358,7 +358,7 @@ export default class Tooltip extends BaseFoundation {
358
358
  const {
359
359
  disableFocusListener
360
360
  } = this.getProps();
361
- !disableFocusListener && this.delayShow();
361
+ this.getProp('condition') !== false && !disableFocusListener && this.delayShow();
362
362
  };
363
363
  triggerEventSet[eventNames.blur] = () => {
364
364
  const {
@@ -376,7 +376,7 @@ export default class Tooltip extends BaseFoundation {
376
376
  if (this.getCache('isClickToHide')) {
377
377
  return;
378
378
  }
379
- this.delayShow();
379
+ this.getProp('condition') !== false && this.delayShow();
380
380
  };
381
381
  }
382
382
  break;
@@ -386,6 +386,9 @@ export default class Tooltip extends BaseFoundation {
386
386
  break;
387
387
  case 'contextMenu':
388
388
  triggerEventSet[eventNames.contextMenu] = e => {
389
+ if (this.getProp('condition') === false) {
390
+ return;
391
+ }
389
392
  e.preventDefault();
390
393
  this.show();
391
394
  };
@@ -54,7 +54,7 @@
54
54
  overflow-wrap: break-word;
55
55
  font-size: 14px;
56
56
  line-height: 20px;
57
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
57
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
58
58
  opacity: 0;
59
59
  max-width: 240px;
60
60
  }
@@ -6,5 +6,7 @@ declare const strings: {
6
6
  TYPE_LIST: string;
7
7
  TYPE_TREE_TO_LIST: string;
8
8
  };
9
- declare const numbers: {};
9
+ declare const numbers: {
10
+ DEFAULT_PAGE_SIZE: number;
11
+ };
10
12
  export { cssClasses, strings, numbers };
@@ -7,5 +7,7 @@ const strings = {
7
7
  TYPE_LIST: 'list',
8
8
  TYPE_TREE_TO_LIST: 'treeList'
9
9
  };
10
- const numbers = {};
10
+ const numbers = {
11
+ DEFAULT_PAGE_SIZE: 10
12
+ };
11
13
  export { cssClasses, strings, numbers };
@@ -31,6 +31,8 @@ export interface TransferAdapter<P = Record<string, any>, S = Record<string, any
31
31
  updateInput: (input: string) => void;
32
32
  updateSearchResult: (searchResult: Set<number | string>) => void;
33
33
  searchTree: (keyword: string) => void;
34
+ updateCurrentPage: (currentPage: number) => void;
35
+ notifyPageChange: (currentPage: number) => void;
34
36
  }
35
37
  export default class TransferFoundation<P = Record<string, any>, S = Record<string, any>> extends BaseFoundation<TransferAdapter<P, S>> {
36
38
  constructor(adapter: TransferAdapter<P, S>);
@@ -59,4 +61,5 @@ export default class TransferFoundation<P = Record<string, any>, S = Record<stri
59
61
  };
60
62
  _notifyChange(selectedItems: DataItemMap): void;
61
63
  handleSortEnd(callbackProps: OnSortEndProps): void;
64
+ handlePageChange(currentPage: number): void;
62
65
  }
@@ -227,4 +227,8 @@ export default class TransferFoundation extends BaseFoundation {
227
227
  this._adapter.updateSelected(newSelectedItems);
228
228
  this._notifyChange(newSelectedItems);
229
229
  }
230
+ handlePageChange(currentPage) {
231
+ this._adapter.updateCurrentPage(currentPage);
232
+ this._adapter.notifyPageChange(currentPage);
233
+ }
230
234
  }
@@ -35,7 +35,7 @@
35
35
  .semi-transfer-header {
36
36
  font-size: 12px;
37
37
  line-height: 16px;
38
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
38
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
39
39
  display: flex;
40
40
  align-items: center;
41
41
  height: 24px;
@@ -53,7 +53,7 @@
53
53
  .semi-transfer-header .semi-button {
54
54
  font-size: 12px;
55
55
  line-height: 16px;
56
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
56
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
57
57
  }
58
58
  .semi-transfer-item {
59
59
  min-height: 36px;
@@ -65,7 +65,7 @@
65
65
  user-select: none;
66
66
  font-size: 14px;
67
67
  line-height: 20px;
68
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
68
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
69
69
  display: flex;
70
70
  align-items: center;
71
71
  justify-content: space-between;
@@ -102,6 +102,15 @@
102
102
  overflow: auto;
103
103
  flex-grow: 1;
104
104
  }
105
+ .semi-transfer-left-pagination {
106
+ padding-top: 12px;
107
+ padding-bottom: 12px;
108
+ padding-left: 12px;
109
+ padding-right: 12px;
110
+ flex-shrink: 0;
111
+ display: flex;
112
+ justify-content: center;
113
+ }
105
114
  .semi-transfer-left-empty {
106
115
  height: 36px;
107
116
  }
@@ -163,7 +172,7 @@
163
172
  align-items: center;
164
173
  font-size: 12px;
165
174
  line-height: 16px;
166
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
175
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
167
176
  color: var(--semi-color-text-2);
168
177
  }
169
178
  .semi-transfer-filter {
@@ -177,7 +186,7 @@
177
186
  padding-left: 12px;
178
187
  font-size: 12px;
179
188
  line-height: 16px;
180
- font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif;
189
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Segoe UI", "Helvetica Neue", Helvetica, Arial, sans-serif;
181
190
  height: 28px;
182
191
  display: flex;
183
192
  align-items: center;
@@ -118,6 +118,16 @@ $module: #{$prefix}-transfer;
118
118
  flex-grow: 1;
119
119
  }
120
120
 
121
+ &-pagination {
122
+ padding-top: $spacing-base-tight;
123
+ padding-bottom: $spacing-base-tight;
124
+ padding-left: $spacing-base-tight;
125
+ padding-right: $spacing-base-tight;
126
+ flex-shrink: 0;
127
+ display: flex;
128
+ justify-content: center;
129
+ }
130
+
121
131
  &-empty {
122
132
  height: $height-transfer_left_empty;
123
133
  }
@@ -2,6 +2,7 @@
2
2
  * The drag and drop handler implementation is referenced from rc-tree
3
3
  * https://github.com/react-component/tree
4
4
  */
5
+ import { throttle } from 'lodash';
5
6
  import BaseFoundation, { DefaultAdapter } from '../base/foundation';
6
7
  import type { KeyMapProps } from './treeUtil';
7
8
  export type { KeyMapProps };
@@ -241,7 +242,9 @@ export interface TreeAdapter extends DefaultAdapter<BasicTreeProps, BasicTreeInn
241
242
  }
242
243
  export default class TreeFoundation extends BaseFoundation<TreeAdapter, BasicTreeProps, BasicTreeInnerData> {
243
244
  delayedDragEnterLogic: any;
245
+ throttledDragOverUpdate: ReturnType<typeof throttle>;
244
246
  constructor(adapter: TreeAdapter);
247
+ destroy(): void;
245
248
  _isMultiple(): any;
246
249
  _isAnimated(): any;
247
250
  _isDisabled(treeNode?: BasicTreeNodeProps): any;