@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.
- package/codeHighlight/codeHighlight.scss +1 -1
- package/datePicker/foundation.ts +7 -0
- package/datePicker/inputFoundation.ts +5 -0
- package/form/foundation.ts +48 -4
- package/inputNumber/foundation.ts +119 -3
- package/jsonViewer/jsonViewer.scss +2 -2
- package/lib/cjs/aiChatInput/aiChatInput.css +7 -7
- package/lib/cjs/anchor/anchor.css +3 -3
- package/lib/cjs/autoComplete/autoComplete.css +1 -1
- package/lib/cjs/avatar/avatar.css +5 -5
- package/lib/cjs/badge/badge.css +1 -1
- package/lib/cjs/breadcrumb/breadcrumb.css +2 -2
- package/lib/cjs/calendar/calendar.css +9 -9
- package/lib/cjs/cascader/cascader.css +6 -6
- package/lib/cjs/checkbox/checkbox.css +2 -2
- package/lib/cjs/codeHighlight/codeHighlight.css +1 -1
- package/lib/cjs/codeHighlight/codeHighlight.scss +1 -1
- package/lib/cjs/collapse/collapse.css +2 -2
- package/lib/cjs/datePicker/datePicker.css +8 -8
- package/lib/cjs/datePicker/foundation.d.ts +5 -0
- package/lib/cjs/datePicker/foundation.js +2 -0
- package/lib/cjs/datePicker/inputFoundation.d.ts +5 -0
- package/lib/cjs/descriptions/descriptions.css +6 -6
- package/lib/cjs/dropdown/dropdown.css +2 -2
- package/lib/cjs/form/form.css +4 -4
- package/lib/cjs/form/foundation.js +49 -3
- package/lib/cjs/hotKeys/hotKeys.css +2 -2
- package/lib/cjs/image/image.css +2 -2
- package/lib/cjs/input/input.css +8 -8
- package/lib/cjs/input/textarea.css +2 -2
- package/lib/cjs/inputNumber/foundation.d.ts +15 -0
- package/lib/cjs/inputNumber/foundation.js +113 -3
- package/lib/cjs/jsonViewer/jsonViewer.css +2 -2
- package/lib/cjs/jsonViewer/jsonViewer.scss +2 -2
- package/lib/cjs/list/list.css +1 -1
- package/lib/cjs/modal/modal.css +1 -1
- package/lib/cjs/navigation/navigation.css +2 -2
- package/lib/cjs/notification/notification.css +4 -4
- package/lib/cjs/pagination/pagination.css +5 -5
- package/lib/cjs/popconfirm/popconfirm.css +1 -1
- package/lib/cjs/popover/popover.css +1 -1
- package/lib/cjs/radio/radio.css +2 -2
- package/lib/cjs/scrollList/itemFoundation.js +12 -0
- package/lib/cjs/scrollList/scrollList.css +2 -2
- package/lib/cjs/select/select.css +6 -6
- package/lib/cjs/sideSheet/sideSheet.css +2 -2
- package/lib/cjs/sidebar/sidebar.css +11 -11
- package/lib/cjs/slider/foundation.js +46 -12
- package/lib/cjs/slider/rtl.scss +62 -0
- package/lib/cjs/slider/slider.css +45 -0
- package/lib/cjs/slider/slider.scss +2 -0
- package/lib/cjs/steps/steps.css +11 -11
- package/lib/cjs/table/foundation.d.ts +36 -0
- package/lib/cjs/table/foundation.js +162 -28
- package/lib/cjs/table/table.css +10 -2
- package/lib/cjs/table/table.scss +17 -0
- package/lib/cjs/tabs/tabs.css +2 -2
- package/lib/cjs/tag/tag.css +2 -2
- package/lib/cjs/tagInput/tagInput.css +2 -2
- package/lib/cjs/timePicker/timePicker.css +1 -1
- package/lib/cjs/timeline/timeline.css +2 -2
- package/lib/cjs/toast/toast.css +1 -1
- package/lib/cjs/tooltip/foundation.js +8 -5
- package/lib/cjs/tooltip/tooltip.css +1 -1
- package/lib/cjs/transfer/constants.d.ts +3 -1
- package/lib/cjs/transfer/constants.js +3 -1
- package/lib/cjs/transfer/foundation.d.ts +3 -0
- package/lib/cjs/transfer/foundation.js +4 -0
- package/lib/cjs/transfer/transfer.css +14 -5
- package/lib/cjs/transfer/transfer.scss +10 -0
- package/lib/cjs/tree/foundation.d.ts +3 -0
- package/lib/cjs/tree/foundation.js +31 -4
- package/lib/cjs/tree/tree.css +1 -1
- package/lib/cjs/treeSelect/foundation.d.ts +1 -0
- package/lib/cjs/treeSelect/foundation.js +8 -1
- package/lib/cjs/treeSelect/treeSelect.css +36 -4
- package/lib/cjs/treeSelect/treeSelect.scss +49 -1
- package/lib/cjs/typography/typography.css +8 -8
- package/lib/cjs/upload/upload.css +8 -8
- package/lib/cjs/utils/Store.d.ts +1 -1
- package/lib/cjs/utils/Store.js +1 -0
- package/lib/es/aiChatInput/aiChatInput.css +7 -7
- package/lib/es/anchor/anchor.css +3 -3
- package/lib/es/autoComplete/autoComplete.css +1 -1
- package/lib/es/avatar/avatar.css +5 -5
- package/lib/es/badge/badge.css +1 -1
- package/lib/es/breadcrumb/breadcrumb.css +2 -2
- package/lib/es/calendar/calendar.css +9 -9
- package/lib/es/cascader/cascader.css +6 -6
- package/lib/es/checkbox/checkbox.css +2 -2
- package/lib/es/codeHighlight/codeHighlight.css +1 -1
- package/lib/es/codeHighlight/codeHighlight.scss +1 -1
- package/lib/es/collapse/collapse.css +2 -2
- package/lib/es/datePicker/datePicker.css +8 -8
- package/lib/es/datePicker/foundation.d.ts +5 -0
- package/lib/es/datePicker/foundation.js +2 -0
- package/lib/es/datePicker/inputFoundation.d.ts +5 -0
- package/lib/es/descriptions/descriptions.css +6 -6
- package/lib/es/dropdown/dropdown.css +2 -2
- package/lib/es/form/form.css +4 -4
- package/lib/es/form/foundation.js +49 -3
- package/lib/es/hotKeys/hotKeys.css +2 -2
- package/lib/es/image/image.css +2 -2
- package/lib/es/input/input.css +8 -8
- package/lib/es/input/textarea.css +2 -2
- package/lib/es/inputNumber/foundation.d.ts +15 -0
- package/lib/es/inputNumber/foundation.js +113 -3
- package/lib/es/jsonViewer/jsonViewer.css +2 -2
- package/lib/es/jsonViewer/jsonViewer.scss +2 -2
- package/lib/es/list/list.css +1 -1
- package/lib/es/modal/modal.css +1 -1
- package/lib/es/navigation/navigation.css +2 -2
- package/lib/es/notification/notification.css +4 -4
- package/lib/es/pagination/pagination.css +5 -5
- package/lib/es/popconfirm/popconfirm.css +1 -1
- package/lib/es/popover/popover.css +1 -1
- package/lib/es/radio/radio.css +2 -2
- package/lib/es/scrollList/itemFoundation.js +12 -0
- package/lib/es/scrollList/scrollList.css +2 -2
- package/lib/es/select/select.css +6 -6
- package/lib/es/sideSheet/sideSheet.css +2 -2
- package/lib/es/sidebar/sidebar.css +11 -11
- package/lib/es/slider/foundation.js +46 -12
- package/lib/es/slider/rtl.scss +62 -0
- package/lib/es/slider/slider.css +45 -0
- package/lib/es/slider/slider.scss +2 -0
- package/lib/es/steps/steps.css +11 -11
- package/lib/es/table/foundation.d.ts +36 -0
- package/lib/es/table/foundation.js +162 -28
- package/lib/es/table/table.css +10 -2
- package/lib/es/table/table.scss +17 -0
- package/lib/es/tabs/tabs.css +2 -2
- package/lib/es/tag/tag.css +2 -2
- package/lib/es/tagInput/tagInput.css +2 -2
- package/lib/es/timePicker/timePicker.css +1 -1
- package/lib/es/timeline/timeline.css +2 -2
- package/lib/es/toast/toast.css +1 -1
- package/lib/es/tooltip/foundation.js +8 -5
- package/lib/es/tooltip/tooltip.css +1 -1
- package/lib/es/transfer/constants.d.ts +3 -1
- package/lib/es/transfer/constants.js +3 -1
- package/lib/es/transfer/foundation.d.ts +3 -0
- package/lib/es/transfer/foundation.js +4 -0
- package/lib/es/transfer/transfer.css +14 -5
- package/lib/es/transfer/transfer.scss +10 -0
- package/lib/es/tree/foundation.d.ts +3 -0
- package/lib/es/tree/foundation.js +31 -4
- package/lib/es/tree/tree.css +1 -1
- package/lib/es/treeSelect/foundation.d.ts +1 -0
- package/lib/es/treeSelect/foundation.js +8 -1
- package/lib/es/treeSelect/treeSelect.css +36 -4
- package/lib/es/treeSelect/treeSelect.scss +49 -1
- package/lib/es/typography/typography.css +8 -8
- package/lib/es/upload/upload.css +8 -8
- package/lib/es/utils/Store.d.ts +1 -1
- package/lib/es/utils/Store.js +1 -0
- package/package.json +19 -4
- package/scrollList/itemFoundation.ts +12 -0
- package/slider/foundation.ts +55 -15
- package/slider/rtl.scss +62 -0
- package/slider/slider.scss +2 -0
- package/table/foundation.ts +197 -29
- package/table/table.scss +17 -0
- package/tooltip/foundation.ts +8 -5
- package/transfer/constants.ts +3 -1
- package/transfer/foundation.ts +8 -1
- package/transfer/transfer.scss +10 -0
- package/tree/foundation.ts +34 -5
- package/treeSelect/foundation.ts +10 -1
- package/treeSelect/treeSelect.scss +49 -1
- 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 (
|
|
598
|
-
|
|
599
|
-
|
|
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(
|
|
677
|
+
this._adapter.setSelectedRowKeys(newSelectedRowKeys);
|
|
602
678
|
}
|
|
603
679
|
this._adapter.notifySelect(selectedRow, selected, selectedRows, e);
|
|
604
|
-
this._adapter.notifySelectionChange(
|
|
605
|
-
} else
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
this.
|
|
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
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
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
|
-
|
|
639
|
-
|
|
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
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
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
|
/**
|
package/lib/es/table/table.css
CHANGED
|
@@ -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, "
|
|
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, "
|
|
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);
|
package/lib/es/table/table.scss
CHANGED
|
@@ -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\
|
package/lib/es/tabs/tabs.css
CHANGED
|
@@ -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, "
|
|
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, "
|
|
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;
|
package/lib/es/tag/tag.css
CHANGED
|
@@ -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, "
|
|
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, "
|
|
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, "
|
|
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, "
|
|
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, "
|
|
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, "
|
|
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, "
|
|
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
|
}
|
package/lib/es/toast/toast.css
CHANGED
|
@@ -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, "
|
|
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, "
|
|
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
|
}
|
|
@@ -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, "
|
|
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, "
|
|
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, "
|
|
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, "
|
|
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, "
|
|
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;
|