@douyinfe/semi-ui 2.51.3 → 2.52.0-beta.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 (51) hide show
  1. package/dist/css/semi.css +285 -0
  2. package/dist/css/semi.min.css +1 -1
  3. package/dist/umd/semi-ui.js +434 -111
  4. package/dist/umd/semi-ui.js.map +1 -1
  5. package/dist/umd/semi-ui.min.js +1 -1
  6. package/dist/umd/semi-ui.min.js.map +1 -1
  7. package/lib/cjs/_utils/index.d.ts +2 -1
  8. package/lib/cjs/_utils/index.js +0 -5
  9. package/lib/cjs/avatar/TopSlotSvg.d.ts +5 -0
  10. package/lib/cjs/avatar/TopSlotSvg.js +74 -0
  11. package/lib/cjs/avatar/index.d.ts +25 -0
  12. package/lib/cjs/avatar/index.js +126 -8
  13. package/lib/cjs/avatar/interface.d.ts +24 -1
  14. package/lib/cjs/dropdown/dropdownItem.js +2 -1
  15. package/lib/cjs/input/index.d.ts +1 -0
  16. package/lib/cjs/input/index.js +12 -4
  17. package/lib/cjs/modal/Modal.d.ts +1 -0
  18. package/lib/cjs/modal/Modal.js +11 -3
  19. package/lib/cjs/modal/confirm.d.ts +5 -0
  20. package/lib/cjs/slider/index.js +33 -1
  21. package/lib/cjs/table/ColumnFilter.d.ts +34 -18
  22. package/lib/cjs/table/ColumnFilter.js +134 -73
  23. package/lib/cjs/table/Table.d.ts +5 -5
  24. package/lib/cjs/table/Table.js +38 -13
  25. package/lib/cjs/table/index.d.ts +1 -1
  26. package/lib/cjs/table/interface.d.ts +30 -10
  27. package/lib/cjs/treeSelect/index.d.ts +2 -0
  28. package/lib/cjs/treeSelect/index.js +4 -0
  29. package/lib/es/_utils/index.d.ts +2 -1
  30. package/lib/es/_utils/index.js +0 -5
  31. package/lib/es/avatar/TopSlotSvg.d.ts +5 -0
  32. package/lib/es/avatar/TopSlotSvg.js +66 -0
  33. package/lib/es/avatar/index.d.ts +25 -0
  34. package/lib/es/avatar/index.js +126 -8
  35. package/lib/es/avatar/interface.d.ts +24 -1
  36. package/lib/es/dropdown/dropdownItem.js +2 -1
  37. package/lib/es/input/index.d.ts +1 -0
  38. package/lib/es/input/index.js +12 -4
  39. package/lib/es/modal/Modal.d.ts +1 -0
  40. package/lib/es/modal/Modal.js +11 -3
  41. package/lib/es/modal/confirm.d.ts +5 -0
  42. package/lib/es/slider/index.js +33 -1
  43. package/lib/es/table/ColumnFilter.d.ts +34 -18
  44. package/lib/es/table/ColumnFilter.js +135 -74
  45. package/lib/es/table/Table.d.ts +5 -5
  46. package/lib/es/table/Table.js +38 -13
  47. package/lib/es/table/index.d.ts +1 -1
  48. package/lib/es/table/interface.d.ts +30 -10
  49. package/lib/es/treeSelect/index.d.ts +2 -0
  50. package/lib/es/treeSelect/index.js +4 -0
  51. package/package.json +8 -8
@@ -4,7 +4,9 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = ColumnFilter;
7
+ var _pick2 = _interopRequireDefault(require("lodash/pick"));
7
8
  var _noop2 = _interopRequireDefault(require("lodash/noop"));
9
+ var _isEqual2 = _interopRequireDefault(require("lodash/isEqual"));
8
10
  var _react = _interopRequireWildcard(require("react"));
9
11
  var _classnames = _interopRequireDefault(require("classnames"));
10
12
  var _semiIcons = require("@douyinfe/semi-icons");
@@ -15,8 +17,7 @@ var _checkbox = require("../checkbox");
15
17
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
16
18
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
17
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
- function renderDropdown() {
19
- let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
20
+ function renderDropdown(props) {
20
21
  let nestedElem = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null;
21
22
  let level = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;
22
23
  const {
@@ -28,77 +29,80 @@ function renderDropdown() {
28
29
  onFilterDropdownVisibleChange = _noop2.default,
29
30
  trigger = 'click',
30
31
  position = 'bottom',
32
+ renderFilterDropdown,
31
33
  renderFilterDropdownItem
32
- } = props;
34
+ } = props !== null && props !== void 0 ? props : {};
35
+ const renderFilterDropdownProps = (0, _pick2.default)(props, ['tempFilteredValue', 'setTempFilteredValue', 'confirm', 'clear', 'close', 'filters']);
36
+ const render = typeof renderFilterDropdown === 'function' ? renderFilterDropdown(renderFilterDropdownProps) : /*#__PURE__*/_react.default.createElement(_dropdown.default.Menu, null, Array.isArray(filters) && filters.map((filter, index) => {
37
+ const changeFn = e => {
38
+ const domEvent = e && e.nativeEvent;
39
+ if (domEvent) {
40
+ // Block this event to prevent the pop-up layer from closing
41
+ domEvent.stopImmediatePropagation();
42
+ // Prevent bubbling and default events to prevent label click events from triggering twice
43
+ domEvent.stopPropagation();
44
+ domEvent.preventDefault();
45
+ }
46
+ let values = [...filteredValue];
47
+ const included = values.includes(filter.value);
48
+ const idx = values.indexOf(filter.value);
49
+ if (idx > -1) {
50
+ values.splice(idx, 1);
51
+ } else if (filterMultiple) {
52
+ values.push(filter.value);
53
+ } else {
54
+ values = [filter.value];
55
+ }
56
+ return onSelect({
57
+ value: filter.value,
58
+ filteredValue: values,
59
+ included: !included,
60
+ domEvent
61
+ });
62
+ };
63
+ const checked = filteredValue.includes(filter.value);
64
+ const {
65
+ text
66
+ } = filter;
67
+ const {
68
+ value
69
+ } = filter;
70
+ const key = `${level}_${index}`;
71
+ const dropdownItem = typeof renderFilterDropdownItem === 'function' ? renderFilterDropdownItem({
72
+ onChange: changeFn,
73
+ filterMultiple,
74
+ value,
75
+ text,
76
+ checked,
77
+ filteredValue,
78
+ level
79
+ }) : null;
80
+ let item = dropdownItem && /*#__PURE__*/_react.default.isValidElement(dropdownItem) ? /*#__PURE__*/_react.default.cloneElement(dropdownItem, {
81
+ key
82
+ }) : /*#__PURE__*/_react.default.createElement(_dropdown.default.Item, {
83
+ key: key,
84
+ onClick: changeFn
85
+ }, filterMultiple ? /*#__PURE__*/_react.default.createElement(_checkbox.Checkbox, {
86
+ checked: checked
87
+ }, text) : /*#__PURE__*/_react.default.createElement(_radio.Radio, {
88
+ checked: checked
89
+ }, text));
90
+ if (Array.isArray(filter.children) && filter.children.length) {
91
+ const childrenDropdownProps = Object.assign(Object.assign({}, props), {
92
+ filters: filter.children,
93
+ trigger: 'hover',
94
+ position: 'right'
95
+ });
96
+ delete childrenDropdownProps.filterDropdownVisible;
97
+ item = renderDropdown(childrenDropdownProps, item, level + 1);
98
+ }
99
+ return item;
100
+ }));
33
101
  const dropdownProps = Object.assign(Object.assign({}, props), {
34
102
  onVisibleChange: visible => onFilterDropdownVisibleChange(visible),
35
103
  trigger,
36
104
  position,
37
- render: /*#__PURE__*/_react.default.createElement(_dropdown.default.Menu, null, Array.isArray(filters) && filters.map((filter, index) => {
38
- const changeFn = e => {
39
- const domEvent = e && e.nativeEvent;
40
- if (domEvent) {
41
- // Block this event to prevent the pop-up layer from closing
42
- domEvent.stopImmediatePropagation();
43
- // Prevent bubbling and default events to prevent label click events from triggering twice
44
- domEvent.stopPropagation();
45
- domEvent.preventDefault();
46
- }
47
- let values = [...filteredValue];
48
- const included = values.includes(filter.value);
49
- const idx = values.indexOf(filter.value);
50
- if (idx > -1) {
51
- values.splice(idx, 1);
52
- } else if (filterMultiple) {
53
- values.push(filter.value);
54
- } else {
55
- values = [filter.value];
56
- }
57
- return onSelect({
58
- value: filter.value,
59
- filteredValue: values,
60
- included: !included,
61
- domEvent
62
- });
63
- };
64
- const checked = filteredValue.includes(filter.value);
65
- const {
66
- text
67
- } = filter;
68
- const {
69
- value
70
- } = filter;
71
- const key = `${level}_${index}`;
72
- const dropdownItem = typeof renderFilterDropdownItem === 'function' ? renderFilterDropdownItem({
73
- onChange: changeFn,
74
- filterMultiple,
75
- value,
76
- text,
77
- checked,
78
- filteredValue,
79
- level
80
- }) : null;
81
- let item = dropdownItem && /*#__PURE__*/_react.default.isValidElement(dropdownItem) ? /*#__PURE__*/_react.default.cloneElement(dropdownItem, {
82
- key
83
- }) : /*#__PURE__*/_react.default.createElement(_dropdown.default.Item, {
84
- key: key,
85
- onClick: changeFn
86
- }, filterMultiple ? /*#__PURE__*/_react.default.createElement(_checkbox.Checkbox, {
87
- checked: checked
88
- }, text) : /*#__PURE__*/_react.default.createElement(_radio.Radio, {
89
- checked: checked
90
- }, text));
91
- if (Array.isArray(filter.children) && filter.children.length) {
92
- const childrenDropdownProps = Object.assign(Object.assign({}, props), {
93
- filters: filter.children,
94
- trigger: 'hover',
95
- position: 'right'
96
- });
97
- delete childrenDropdownProps.filterDropdownVisible;
98
- item = renderDropdown(childrenDropdownProps, item, level + 1);
99
- }
100
- return item;
101
- }))
105
+ render
102
106
  });
103
107
  if (filterDropdownVisible != null) {
104
108
  dropdownProps.visible = filterDropdownVisible;
@@ -114,12 +118,68 @@ function ColumnFilter() {
114
118
  prefixCls = _constants.cssClasses.PREFIX,
115
119
  filteredValue,
116
120
  filterIcon = 'filter',
121
+ filterDropdownProps,
122
+ onSelect,
123
+ filterDropdownVisible,
117
124
  renderFilterDropdown,
118
- filterDropdownProps
125
+ onFilterDropdownVisibleChange
119
126
  } = props;
120
127
  let {
121
128
  filterDropdown = null
122
129
  } = props;
130
+ // custom filter related status
131
+ const isFilterDropdownVisibleControlled = typeof filterDropdownVisible !== 'undefined';
132
+ const isCustomFilterDropdown = typeof renderFilterDropdown === 'function';
133
+ const isCustomDropdownVisible = !isFilterDropdownVisibleControlled && isCustomFilterDropdown;
134
+ const [tempFilteredValue, setTempFilteredValue] = (0, _react.useState)(filteredValue);
135
+ const dropdownVisibleInitValue = isCustomDropdownVisible ? false : filterDropdownVisible;
136
+ const [dropdownVisible, setDropdownVisible] = (0, _react.useState)(dropdownVisibleInitValue);
137
+ (0, _react.useEffect)(() => {
138
+ if (typeof filterDropdownVisible !== 'undefined') {
139
+ setDropdownVisible(filterDropdownVisible);
140
+ }
141
+ }, [filterDropdownVisible]);
142
+ (0, _react.useEffect)(() => {
143
+ setTempFilteredValue(filteredValue);
144
+ }, [filteredValue]);
145
+ const confirm = function () {
146
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
147
+ const newFilteredValue = (props === null || props === void 0 ? void 0 : props.filteredValue) || tempFilteredValue;
148
+ if (!(0, _isEqual2.default)(newFilteredValue, filteredValue)) {
149
+ onSelect({
150
+ filteredValue: newFilteredValue
151
+ });
152
+ }
153
+ if (props.closeDropdown) {
154
+ setDropdownVisible(false);
155
+ }
156
+ };
157
+ const clear = function () {
158
+ let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
159
+ setTempFilteredValue([]);
160
+ onSelect({
161
+ filteredValue: []
162
+ });
163
+ if (props.closeDropdown) {
164
+ setDropdownVisible(false);
165
+ }
166
+ };
167
+ const close = () => {
168
+ setDropdownVisible(false);
169
+ };
170
+ const handleFilterDropdownVisibleChange = visible => {
171
+ if (isCustomDropdownVisible) {
172
+ setDropdownVisible(visible);
173
+ }
174
+ onFilterDropdownVisibleChange(visible);
175
+ };
176
+ const renderFilterDropdownProps = {
177
+ tempFilteredValue,
178
+ setTempFilteredValue,
179
+ confirm,
180
+ clear,
181
+ close
182
+ };
123
183
  const finalCls = (0, _classnames.default)(`${prefixCls}-column-filter`, {
124
184
  on: Array.isArray(filteredValue) && filteredValue.length
125
185
  });
@@ -139,9 +199,10 @@ function ColumnFilter() {
139
199
  size: "default"
140
200
  }));
141
201
  }
142
- const renderProps = Object.assign(Object.assign({}, props), filterDropdownProps);
143
- filterDropdown = /*#__PURE__*/_react.default.isValidElement(filterDropdown) ? filterDropdown : typeof renderFilterDropdown === 'function' ? renderFilterDropdown(renderProps, {
144
- iconElem
145
- }) : renderDropdown(renderProps, iconElem);
202
+ const renderProps = Object.assign(Object.assign(Object.assign(Object.assign({}, props), filterDropdownProps), renderFilterDropdownProps), {
203
+ filterDropdownVisible: isFilterDropdownVisibleControlled ? filterDropdownVisible : dropdownVisible,
204
+ onFilterDropdownVisibleChange: handleFilterDropdownVisibleChange
205
+ });
206
+ filterDropdown = /*#__PURE__*/_react.default.isValidElement(filterDropdown) ? filterDropdown : renderDropdown(renderProps, iconElem);
146
207
  return filterDropdown;
147
208
  }
@@ -1,7 +1,7 @@
1
1
  import React, { ReactNode } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import Store from '@douyinfe/semi-foundation/lib/cjs/utils/Store';
4
- import TableFoundation, { TableAdapter, BaseRowKeyType, BaseHeadWidth } from '@douyinfe/semi-foundation/lib/cjs/table/foundation';
4
+ import TableFoundation, { TableAdapter, BasePageData, BaseRowKeyType, BaseHeadWidth } from '@douyinfe/semi-foundation/lib/cjs/table/foundation';
5
5
  import { TableSelectionCellEvent } from '@douyinfe/semi-foundation/lib/cjs/table/tableSelectionCellFoundation';
6
6
  import { strings } from '@douyinfe/semi-foundation/lib/cjs/table/constants';
7
7
  import '@douyinfe/semi-foundation/lib/cjs/table/table.css';
@@ -185,7 +185,7 @@ declare class Table<RecordType extends Record<string, any>> extends BaseComponen
185
185
  _invokeRowSelection: (funcName: string, ...args: any[]) => void;
186
186
  _invokeColumnFn: (key: string, funcName: string, ...args: any[]) => void;
187
187
  _cacheHeaderRef: (node: HTMLDivElement) => void;
188
- getCurrentPageData: () => any;
188
+ getCurrentPageData: () => Pick<BasePageData<RecordType>, "dataSource" | "groups">;
189
189
  getColumns: (columns: ColumnProps<RecordType>[], children: ReactNode) => ColumnProps<RecordType>[];
190
190
  getCellWidths: (...args: any[]) => number[];
191
191
  setHeadWidths: (...args: any[]) => void;
@@ -200,8 +200,8 @@ declare class Table<RecordType extends Record<string, any>> extends BaseComponen
200
200
  setScrollPosition: (position: BodyScrollPosition) => void;
201
201
  setScrollPositionClassName: () => void;
202
202
  syncTableWidth: () => void;
203
- renderSelection: (record?: any, inHeader?: boolean) => React.ReactNode;
204
- renderRowSelectionCallback: (text: string, record?: RecordType) => React.ReactNode;
203
+ renderSelection: (record?: any, inHeader?: boolean, index?: number) => React.ReactNode;
204
+ renderRowSelectionCallback: (text: string, record: RecordType, index: number) => React.ReactNode;
205
205
  renderTitleSelectionCallback: () => React.ReactNode;
206
206
  normalizeSelectionColumn: (props?: {
207
207
  rowSelection?: TableStateRowSelection<RecordType>;
@@ -283,7 +283,7 @@ declare class Table<RecordType extends Record<string, any>> extends BaseComponen
283
283
  * @param {ReactNode} children
284
284
  * @returns {Array}
285
285
  */
286
- normalizeColumns: (columns: ColumnProps<RecordType>[], children: ReactNode) => any;
286
+ normalizeColumns: (columns: ColumnProps<RecordType>[], children: ReactNode) => ColumnProps<RecordType>[];
287
287
  /**
288
288
  * Combine pagination and table paging processing functions
289
289
  */
@@ -478,6 +478,7 @@ class Table extends _baseComponent.default {
478
478
  this.renderSelection = function () {
479
479
  let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
480
480
  let inHeader = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
481
+ let index = arguments.length > 2 ? arguments[2] : undefined;
481
482
  const {
482
483
  rowSelection,
483
484
  allDisabledRowKeysSet
@@ -487,43 +488,67 @@ class Table extends _baseComponent.default {
487
488
  selectedRowKeys = [],
488
489
  selectedRowKeysSet = new Set(),
489
490
  getCheckboxProps,
490
- disabled
491
+ disabled,
492
+ renderCell
491
493
  } = rowSelection;
494
+ const allRowKeys = _this2.cachedFilteredSortedRowKeys;
495
+ const allRowKeysSet = _this2.cachedFilteredSortedRowKeysSet;
496
+ const allIsSelected = _this2.foundation.allIsSelected(selectedRowKeysSet, allDisabledRowKeysSet, allRowKeys);
497
+ const hasRowSelected = _this2.foundation.hasRowSelected(selectedRowKeys, allRowKeysSet);
498
+ const indeterminate = hasRowSelected && !allIsSelected;
492
499
  if (inHeader) {
493
500
  const columnKey = (0, _get2.default)(rowSelection, 'key', _constants.strings.DEFAULT_KEY_COLUMN_SELECTION);
494
- const allRowKeys = _this2.cachedFilteredSortedRowKeys;
495
- const allRowKeysSet = _this2.cachedFilteredSortedRowKeysSet;
496
- const allIsSelected = _this2.foundation.allIsSelected(selectedRowKeysSet, allDisabledRowKeysSet, allRowKeys);
497
- const hasRowSelected = _this2.foundation.hasRowSelected(selectedRowKeys, allRowKeysSet);
498
- return /*#__PURE__*/_react.default.createElement(_ColumnSelection.default, {
501
+ const originNode = /*#__PURE__*/_react.default.createElement(_ColumnSelection.default, {
499
502
  "aria-label": `${allIsSelected ? 'Deselect' : 'Select'} all rows`,
500
503
  disabled: disabled,
501
504
  key: columnKey,
502
505
  selected: allIsSelected,
503
- indeterminate: hasRowSelected && !allIsSelected,
506
+ indeterminate: indeterminate,
504
507
  onChange: (selected, e) => {
505
508
  _this2.toggleSelectAllRow(selected, e);
506
509
  }
507
510
  });
511
+ const selectAll = (selected, e) => _this2.toggleSelectAllRow(selected, e);
512
+ return (0, _isFunction2.default)(renderCell) ? renderCell({
513
+ selected: allIsSelected,
514
+ record,
515
+ originNode,
516
+ inHeader,
517
+ disabled,
518
+ indeterminate,
519
+ selectAll
520
+ }) : originNode;
508
521
  } else {
509
522
  const key = _this2.foundation.getRecordKey(record);
510
523
  const selected = selectedRowKeysSet.has(key);
511
524
  const checkboxPropsFn = () => typeof getCheckboxProps === 'function' ? getCheckboxProps(record) : {};
512
- return /*#__PURE__*/_react.default.createElement(_ColumnSelection.default, {
525
+ const originNode = /*#__PURE__*/_react.default.createElement(_ColumnSelection.default, {
513
526
  "aria-label": `${selected ? 'Deselect' : 'Select'} this row`,
514
527
  getCheckboxProps: checkboxPropsFn,
515
528
  selected: selected,
516
529
  onChange: (status, e) => _this2.toggleSelectRow(status, key, e)
517
530
  });
531
+ const selectRow = (selected, e) => _this2.toggleSelectRow(selected, key, e);
532
+ return (0, _isFunction2.default)(renderCell) ? renderCell({
533
+ selected,
534
+ record,
535
+ index,
536
+ originNode,
537
+ inHeader: false,
538
+ disabled,
539
+ indeterminate,
540
+ selectRow
541
+ }) : originNode;
518
542
  }
519
543
  }
520
544
  return null;
521
545
  };
522
546
  this.renderRowSelectionCallback = function (text) {
523
547
  let record = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
524
- return _this2.renderSelection(record);
548
+ let index = arguments.length > 2 ? arguments[2] : undefined;
549
+ return _this2.renderSelection(record, false, index);
525
550
  };
526
- this.renderTitleSelectionCallback = () => this.renderSelection(null, true);
551
+ this.renderTitleSelectionCallback = () => this.renderSelection(undefined, true);
527
552
  this.normalizeSelectionColumn = function () {
528
553
  let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
529
554
  const {
@@ -618,7 +643,7 @@ class Table extends _baseComponent.default {
618
643
  const {
619
644
  prefixCls
620
645
  } = _this2.props;
621
- if (column && (column.sorter || column.filters || column.useFullRender)) {
646
+ if (column && (column.sorter || column.filters || column.onFilter || column.useFullRender)) {
622
647
  let hasSorterOrFilter = false;
623
648
  const {
624
649
  dataIndex,
@@ -660,10 +685,10 @@ class Table extends _baseComponent.default {
660
685
  const stateFilteredValue = (0, _get2.default)(curQuery, 'filteredValue');
661
686
  const defaultFilteredValue = (0, _get2.default)(curQuery, 'defaultFilteredValue');
662
687
  const filteredValue = stateFilteredValue ? stateFilteredValue : defaultFilteredValue;
663
- if (Array.isArray(column.filters) && column.filters.length || /*#__PURE__*/(0, _react.isValidElement)(column.filterDropdown)) {
688
+ if (Array.isArray(column.filters) && column.filters.length || /*#__PURE__*/(0, _react.isValidElement)(column.filterDropdown) || typeof column.renderFilterDropdown === 'function') {
664
689
  const filter = /*#__PURE__*/_react.default.createElement(_ColumnFilter.default, Object.assign({
665
690
  key: _constants.strings.DEFAULT_KEY_COLUMN_FILTER
666
- }, curQuery, {
691
+ }, (0, _omit2.default)(curQuery, 'children'), {
667
692
  filteredValue: filteredValue,
668
693
  onFilterDropdownVisibleChange: visible => _this2.foundation.toggleShowFilter(dataIndex, visible),
669
694
  onSelect: data => _this2.foundation.handleFilterSelect(dataIndex, data)
@@ -96,7 +96,7 @@ declare class Table<RecordType extends Record<string, any> = Data> extends React
96
96
  tableRef: React.RefObject<NormalTable<RecordType>>;
97
97
  context: ContextValue;
98
98
  constructor(props: TableProps);
99
- getCurrentPageData: () => any;
99
+ getCurrentPageData: () => Pick<import("@douyinfe/semi-foundation/lib/cjs/table/foundation").BasePageData<RecordType>, "dataSource" | "groups">;
100
100
  render(): JSX.Element;
101
101
  }
102
102
  export * from './interface';
@@ -1,13 +1,13 @@
1
1
  import React, { ReactNode, MutableRefObject } from 'react';
2
- import { BaseProps } from '../_base/baseComponent';
3
- import { PaginationProps } from '../pagination';
4
- import { CheckboxProps } from '../checkbox';
5
- import { DropdownProps } from '../dropdown';
6
- import { Locale } from '../locale/interface';
7
- import { ArrayElement } from '../_base/base';
2
+ import type { BaseProps } from '../_base/baseComponent';
3
+ import type { PaginationProps } from '../pagination';
4
+ import type { CheckboxProps } from '../checkbox';
5
+ import type { Locale } from '../locale/interface';
6
+ import type { ArrayElement } from '../_base/base';
8
7
  import { strings } from '@douyinfe/semi-foundation/lib/cjs/table/constants';
9
- import { BaseRowKeyType, BaseSortOrder, BaseGroupBy, BaseGroupByFn, BaseFixed, BaseAlign, BaseChangeInfoSorter, BaseSorter, BaseFilter, BaseChangeInfoFilter, BaseIncludeGroupRecord, BaseEllipsis } from '@douyinfe/semi-foundation/lib/cjs/table/foundation';
10
- import { ScrollDirection, CSSDirection } from 'react-window';
8
+ import type { BaseRowKeyType, BaseSortOrder, BaseGroupBy, BaseGroupByFn, BaseFixed, BaseAlign, BaseChangeInfoSorter, BaseSorter, BaseFilter, BaseChangeInfoFilter, BaseIncludeGroupRecord, BaseEllipsis } from '@douyinfe/semi-foundation/lib/cjs/table/foundation';
9
+ import type { ScrollDirection, CSSDirection } from 'react-window';
10
+ import type { ColumnFilterProps } from './ColumnFilter';
11
11
  export interface TableProps<RecordType extends Record<string, any> = any> extends BaseProps {
12
12
  bordered?: boolean;
13
13
  children?: ReactNode;
@@ -65,29 +65,37 @@ export interface ColumnProps<RecordType extends Record<string, any> = any> {
65
65
  children?: Array<ColumnProps<RecordType>>;
66
66
  className?: string;
67
67
  colSpan?: number;
68
+ /** use `dataIndex` to get current column data item from record. If you use `sorter` or `onFilter`, a unique `dataIndex` is required */
68
69
  dataIndex?: string;
69
70
  defaultFilteredValue?: any[];
70
71
  defaultSortOrder?: SortOrder;
71
72
  filterChildrenRecord?: boolean;
72
- filterDropdown?: React.ReactNode;
73
- filterDropdownProps?: DropdownProps;
73
+ filterDropdown?: ColumnFilterProps['filterDropdown'];
74
+ /** render filter Dropdown panel content */
75
+ renderFilterDropdown?: ColumnFilterProps['renderFilterDropdown'];
76
+ /** filter Dropdown props */
77
+ filterDropdownProps?: ColumnFilterProps['filterDropdownProps'];
74
78
  filterDropdownVisible?: boolean;
75
79
  filterIcon?: FilterIcon;
76
80
  filterMultiple?: boolean;
77
81
  filteredValue?: any[];
82
+ /** `filters` is not required if you use `renderFilterDropdown` */
78
83
  filters?: Filter[];
79
84
  fixed?: Fixed;
85
+ /** the key required by React. If you have already set the `dataIndex`, the key does not need to be set again. */
80
86
  key?: string | number;
81
87
  render?: ColumnRender<RecordType>;
82
88
  renderFilterDropdownItem?: RenderFilterDropdownItem;
83
89
  sortChildrenRecord?: boolean;
84
90
  sortOrder?: SortOrder;
91
+ /** enable sorting, `dataIndex` is required at the same time */
85
92
  sorter?: Sorter<RecordType>;
86
93
  sortIcon?: SortIcon;
87
94
  title?: ColumnTitle;
88
95
  useFullRender?: boolean;
89
96
  width?: string | number;
90
97
  onCell?: OnCell<RecordType>;
98
+ /** enable filtering, `dataIndex` is required at the same time */
91
99
  onFilter?: OnFilter<RecordType>;
92
100
  onFilterDropdownVisibleChange?: OnFilterDropdownVisibleChange;
93
101
  onHeaderCell?: OnHeaderCell<RecordType>;
@@ -217,7 +225,19 @@ export interface RowSelectionProps<RecordType> {
217
225
  onChange?: RowSelectionOnChange<RecordType>;
218
226
  onSelect?: RowSelectionOnSelect<RecordType>;
219
227
  onSelectAll?: RowSelectionOnSelectAll<RecordType>;
228
+ renderCell?: RowSelectionRenderCell<RecordType>;
220
229
  }
230
+ export type RowSelectionRenderCell<RecordType> = (renderCellArgs: {
231
+ selected: boolean;
232
+ record: RecordType;
233
+ originNode: JSX.Element;
234
+ inHeader: boolean;
235
+ disabled: boolean;
236
+ indeterminate: boolean;
237
+ index?: number;
238
+ selectRow?: (selected: boolean, e: Event) => void;
239
+ selectAll?: (selected: boolean, e: Event) => void;
240
+ }) => ReactNode;
221
241
  export type GetCheckboxProps<RecordType> = (record: RecordType) => CheckboxProps;
222
242
  export type RowSelectionOnChange<RecordType> = (selectedRowKeys?: (string | number)[], selectedRows?: RecordType[]) => void;
223
243
  export type RowSelectionOnSelect<RecordType> = (record?: RecordType, selected?: boolean, selectedRows?: RecordType[], nativeEvent?: React.MouseEvent) => void;
@@ -82,6 +82,7 @@ export interface TreeSelectProps extends Omit<BasicTreeSelectProps, OverrideComm
82
82
  onChange?: OnChange;
83
83
  onFocus?: (e: React.MouseEvent) => void;
84
84
  onVisibleChange?: (isVisible: boolean) => void;
85
+ onClear?: (e: React.MouseEvent | React.KeyboardEvent<HTMLDivElement>) => void;
85
86
  }
86
87
  export type OverrideCommonState = 'keyEntities' | 'treeData' | 'disabledKeys' | 'flattenNodes';
87
88
  export interface TreeSelectState extends Omit<BasicTreeSelectInnerData, OverrideCommonState | 'prevProps'>, Pick<TreeState, OverrideCommonState> {
@@ -121,6 +122,7 @@ declare class TreeSelect extends BaseComponent<TreeSelectProps, TreeSelectState>
121
122
  virtualize: PropTypes.Requireable<object>;
122
123
  treeNodeFilterProp: PropTypes.Requireable<string>;
123
124
  onChange: PropTypes.Requireable<(...args: any[]) => any>;
125
+ onClear: PropTypes.Requireable<(...args: any[]) => any>;
124
126
  onSearch: PropTypes.Requireable<(...args: any[]) => any>;
125
127
  onSelect: PropTypes.Requireable<(...args: any[]) => any>;
126
128
  onExpand: PropTypes.Requireable<(...args: any[]) => any>;
@@ -1155,6 +1155,9 @@ class TreeSelect extends _baseComponent.default {
1155
1155
  onLoad
1156
1156
  } = this.props;
1157
1157
  (0, _isFunction2.default)(onLoad) && onLoad(newLoadedKeys, data);
1158
+ },
1159
+ notifyClear: e => {
1160
+ this.props.onClear && this.props.onClear(e);
1158
1161
  }
1159
1162
  };
1160
1163
  return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, super.adapter), filterAdapter), treeSelectAdapter), treeAdapter), {
@@ -1326,6 +1329,7 @@ TreeSelect.propTypes = {
1326
1329
  virtualize: _propTypes.default.object,
1327
1330
  treeNodeFilterProp: _propTypes.default.string,
1328
1331
  onChange: _propTypes.default.func,
1332
+ onClear: _propTypes.default.func,
1329
1333
  onSearch: _propTypes.default.func,
1330
1334
  onSelect: _propTypes.default.func,
1331
1335
  onExpand: _propTypes.default.func,
@@ -11,7 +11,8 @@ export declare function stopPropagation(e: React.MouseEvent | React.FocusEvent<H
11
11
  *
12
12
  * skip clone function and react element
13
13
  */
14
- export declare function cloneDeep(value: any, customizer?: (value: any) => void): any;
14
+ export declare function cloneDeep<T>(value: T): T;
15
+ export declare function cloneDeep<T>(value: T, customizer: (value: any) => any): any;
15
16
  /**
16
17
  * [getHighLightTextHTML description]
17
18
  *
@@ -19,11 +19,6 @@ export function stopPropagation(e, noImmediate) {
19
19
  e.nativeEvent.stopImmediatePropagation();
20
20
  }
21
21
  }
22
- /**
23
- * use in Table, Form, Navigation
24
- *
25
- * skip clone function and react element
26
- */
27
22
  export function cloneDeep(value, customizer) {
28
23
  return _cloneDeepWith(value, v => {
29
24
  if (typeof customizer === 'function') {
@@ -0,0 +1,5 @@
1
+ declare const TopSlotSvg: ({ gradientStart, gradientEnd }: {
2
+ gradientStart: string;
3
+ gradientEnd: string;
4
+ }) => JSX.Element;
5
+ export default TopSlotSvg;
@@ -0,0 +1,66 @@
1
+ import { getUuidShort } from '@douyinfe/semi-foundation/lib/es/utils/uuid';
2
+ import React from 'react';
3
+ const TopSlotSvg = _ref => {
4
+ let {
5
+ gradientStart,
6
+ gradientEnd
7
+ } = _ref;
8
+ const id = getUuidShort();
9
+ return /*#__PURE__*/React.createElement("svg", {
10
+ xmlns: "http://www.w3.org/2000/svg",
11
+ width: "51",
12
+ height: "52",
13
+ viewBox: "0 0 51 52",
14
+ fill: "none"
15
+ }, /*#__PURE__*/React.createElement("g", {
16
+ filter: "url(#filter0_d_6_2)"
17
+ }, /*#__PURE__*/React.createElement("path", {
18
+ d: "M40.4918 46.5592C44.6795 43.176 46.261 34.1333 47.5301 25.6141C49.5854 11.8168 39.6662 1 25.8097 1C11.2857 1 3 11.4279 3 25.3518C3 33.7866 6.29361 43.8947 10.4602 46.5592C12.5868 47.9192 12.5868 47.9051 25.8097 47.9192C38.3651 47.9282 38.5352 48.14 40.4918 46.5592Z",
19
+ fill: `url(#${id})`
20
+ })), /*#__PURE__*/React.createElement("defs", null, /*#__PURE__*/React.createElement("filter", {
21
+ id: "filter0_d_6_2",
22
+ x: "0.789215",
23
+ y: "0.447304",
24
+ width: "49.2216",
25
+ height: "51.3549",
26
+ filterUnits: "userSpaceOnUse",
27
+ colorInterpolationFilters: "sRGB"
28
+ }, /*#__PURE__*/React.createElement("feFlood", {
29
+ floodOpacity: "0",
30
+ result: "BackgroundImageFix"
31
+ }), /*#__PURE__*/React.createElement("feColorMatrix", {
32
+ in: "SourceAlpha",
33
+ type: "matrix",
34
+ values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0",
35
+ result: "hardAlpha"
36
+ }), /*#__PURE__*/React.createElement("feOffset", {
37
+ dy: "1.65809"
38
+ }), /*#__PURE__*/React.createElement("feGaussianBlur", {
39
+ stdDeviation: "1.10539"
40
+ }), /*#__PURE__*/React.createElement("feColorMatrix", {
41
+ type: "matrix",
42
+ values: "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.3 0"
43
+ }), /*#__PURE__*/React.createElement("feBlend", {
44
+ mode: "normal",
45
+ in2: "BackgroundImageFix",
46
+ result: "effect1_dropShadow_6_2"
47
+ }), /*#__PURE__*/React.createElement("feBlend", {
48
+ mode: "normal",
49
+ in: "SourceGraphic",
50
+ in2: "effect1_dropShadow_6_2",
51
+ result: "shape"
52
+ })), /*#__PURE__*/React.createElement("linearGradient", {
53
+ id: id,
54
+ x1: "17.671",
55
+ y1: "31.7392",
56
+ x2: "17.671",
57
+ y2: "47.9333",
58
+ gradientUnits: "userSpaceOnUse"
59
+ }, /*#__PURE__*/React.createElement("stop", {
60
+ stopColor: gradientStart
61
+ }), /*#__PURE__*/React.createElement("stop", {
62
+ offset: "1",
63
+ stopColor: gradientEnd
64
+ }))));
65
+ };
66
+ export default TopSlotSvg;
@@ -40,6 +40,29 @@ export default class Avatar extends BaseComponent<AvatarProps, AvatarState> {
40
40
  onClick: PropTypes.Requireable<(...args: any[]) => any>;
41
41
  onMouseEnter: PropTypes.Requireable<(...args: any[]) => any>;
42
42
  onMouseLeave: PropTypes.Requireable<(...args: any[]) => any>;
43
+ bottomSlot: PropTypes.Requireable<PropTypes.InferProps<{
44
+ render: PropTypes.Requireable<(...args: any[]) => any>;
45
+ shape: PropTypes.Requireable<string>;
46
+ text: PropTypes.Requireable<PropTypes.ReactNodeLike>;
47
+ bgColor: PropTypes.Requireable<string>;
48
+ textColor: PropTypes.Requireable<string>;
49
+ className: PropTypes.Requireable<string>;
50
+ style: PropTypes.Requireable<object>;
51
+ }>>;
52
+ topSlot: PropTypes.Requireable<PropTypes.InferProps<{
53
+ render: PropTypes.Requireable<(...args: any[]) => any>;
54
+ gradientStart: PropTypes.Requireable<string>;
55
+ gradientEnd: PropTypes.Requireable<string>;
56
+ text: PropTypes.Requireable<PropTypes.ReactNodeLike>;
57
+ textColor: PropTypes.Requireable<string>;
58
+ className: PropTypes.Requireable<string>;
59
+ style: PropTypes.Requireable<object>;
60
+ }>>;
61
+ border: PropTypes.Requireable<NonNullable<boolean | PropTypes.InferProps<{
62
+ color: PropTypes.Requireable<string>;
63
+ motion: PropTypes.Requireable<boolean>;
64
+ }>>>;
65
+ contentMotion: PropTypes.Requireable<boolean>;
43
66
  };
44
67
  foundation: AvatarFoundation;
45
68
  avatarRef: React.RefObject<HTMLElement | null>;
@@ -55,5 +78,7 @@ export default class Avatar extends BaseComponent<AvatarProps, AvatarState> {
55
78
  handleFocusVisible: (event: React.FocusEvent) => void;
56
79
  handleBlur: (event: React.FocusEvent) => void;
57
80
  getContent: () => React.ReactNode;
81
+ renderBottomSlot: () => string | number | boolean | React.ReactFragment | JSX.Element;
82
+ renderTopSlot: () => string | number | boolean | React.ReactFragment | JSX.Element;
58
83
  render(): JSX.Element;
59
84
  }