@douyinfe/semi-ui 2.51.4 → 2.52.0-beta.1

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 (65) 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 +488 -214
  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/cascader/index.d.ts +2 -3
  15. package/lib/cjs/cascader/index.js +19 -28
  16. package/lib/cjs/datePicker/datePicker.js +1 -1
  17. package/lib/cjs/datePicker/yearAndMonth.js +16 -20
  18. package/lib/cjs/dropdown/dropdownItem.js +2 -1
  19. package/lib/cjs/form/hoc/withField.d.ts +3 -3
  20. package/lib/cjs/input/index.d.ts +1 -0
  21. package/lib/cjs/input/index.js +12 -4
  22. package/lib/cjs/modal/Modal.d.ts +1 -0
  23. package/lib/cjs/modal/Modal.js +13 -5
  24. package/lib/cjs/modal/confirm.d.ts +5 -0
  25. package/lib/cjs/select/option.js +1 -2
  26. package/lib/cjs/slider/index.js +33 -1
  27. package/lib/cjs/table/ColumnFilter.d.ts +34 -18
  28. package/lib/cjs/table/ColumnFilter.js +134 -73
  29. package/lib/cjs/table/ResizableTable.js +1 -1
  30. package/lib/cjs/table/Table.d.ts +5 -5
  31. package/lib/cjs/table/Table.js +38 -13
  32. package/lib/cjs/table/index.d.ts +1 -1
  33. package/lib/cjs/table/interface.d.ts +30 -10
  34. package/lib/cjs/treeSelect/index.d.ts +2 -0
  35. package/lib/cjs/treeSelect/index.js +4 -0
  36. package/lib/es/_utils/index.d.ts +2 -1
  37. package/lib/es/_utils/index.js +0 -5
  38. package/lib/es/avatar/TopSlotSvg.d.ts +5 -0
  39. package/lib/es/avatar/TopSlotSvg.js +66 -0
  40. package/lib/es/avatar/index.d.ts +25 -0
  41. package/lib/es/avatar/index.js +126 -8
  42. package/lib/es/avatar/interface.d.ts +24 -1
  43. package/lib/es/cascader/index.d.ts +2 -3
  44. package/lib/es/cascader/index.js +19 -28
  45. package/lib/es/datePicker/datePicker.js +1 -1
  46. package/lib/es/datePicker/yearAndMonth.js +16 -20
  47. package/lib/es/dropdown/dropdownItem.js +2 -1
  48. package/lib/es/form/hoc/withField.d.ts +3 -3
  49. package/lib/es/input/index.d.ts +1 -0
  50. package/lib/es/input/index.js +12 -4
  51. package/lib/es/modal/Modal.d.ts +1 -0
  52. package/lib/es/modal/Modal.js +13 -5
  53. package/lib/es/modal/confirm.d.ts +5 -0
  54. package/lib/es/select/option.js +1 -2
  55. package/lib/es/slider/index.js +33 -1
  56. package/lib/es/table/ColumnFilter.d.ts +34 -18
  57. package/lib/es/table/ColumnFilter.js +135 -74
  58. package/lib/es/table/ResizableTable.js +1 -1
  59. package/lib/es/table/Table.d.ts +5 -5
  60. package/lib/es/table/Table.js +38 -13
  61. package/lib/es/table/index.d.ts +1 -1
  62. package/lib/es/table/interface.d.ts +30 -10
  63. package/lib/es/treeSelect/index.d.ts +2 -0
  64. package/lib/es/treeSelect/index.js +4 -0
  65. package/package.json +8 -8
@@ -468,6 +468,7 @@ class Table extends BaseComponent {
468
468
  this.renderSelection = function () {
469
469
  let record = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
470
470
  let inHeader = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
471
+ let index = arguments.length > 2 ? arguments[2] : undefined;
471
472
  const {
472
473
  rowSelection,
473
474
  allDisabledRowKeysSet
@@ -477,43 +478,67 @@ class Table extends BaseComponent {
477
478
  selectedRowKeys = [],
478
479
  selectedRowKeysSet = new Set(),
479
480
  getCheckboxProps,
480
- disabled
481
+ disabled,
482
+ renderCell
481
483
  } = rowSelection;
484
+ const allRowKeys = _this2.cachedFilteredSortedRowKeys;
485
+ const allRowKeysSet = _this2.cachedFilteredSortedRowKeysSet;
486
+ const allIsSelected = _this2.foundation.allIsSelected(selectedRowKeysSet, allDisabledRowKeysSet, allRowKeys);
487
+ const hasRowSelected = _this2.foundation.hasRowSelected(selectedRowKeys, allRowKeysSet);
488
+ const indeterminate = hasRowSelected && !allIsSelected;
482
489
  if (inHeader) {
483
490
  const columnKey = _get(rowSelection, 'key', strings.DEFAULT_KEY_COLUMN_SELECTION);
484
- const allRowKeys = _this2.cachedFilteredSortedRowKeys;
485
- const allRowKeysSet = _this2.cachedFilteredSortedRowKeysSet;
486
- const allIsSelected = _this2.foundation.allIsSelected(selectedRowKeysSet, allDisabledRowKeysSet, allRowKeys);
487
- const hasRowSelected = _this2.foundation.hasRowSelected(selectedRowKeys, allRowKeysSet);
488
- return /*#__PURE__*/React.createElement(ColumnSelection, {
491
+ const originNode = /*#__PURE__*/React.createElement(ColumnSelection, {
489
492
  "aria-label": `${allIsSelected ? 'Deselect' : 'Select'} all rows`,
490
493
  disabled: disabled,
491
494
  key: columnKey,
492
495
  selected: allIsSelected,
493
- indeterminate: hasRowSelected && !allIsSelected,
496
+ indeterminate: indeterminate,
494
497
  onChange: (selected, e) => {
495
498
  _this2.toggleSelectAllRow(selected, e);
496
499
  }
497
500
  });
501
+ const selectAll = (selected, e) => _this2.toggleSelectAllRow(selected, e);
502
+ return _isFunction(renderCell) ? renderCell({
503
+ selected: allIsSelected,
504
+ record,
505
+ originNode,
506
+ inHeader,
507
+ disabled,
508
+ indeterminate,
509
+ selectAll
510
+ }) : originNode;
498
511
  } else {
499
512
  const key = _this2.foundation.getRecordKey(record);
500
513
  const selected = selectedRowKeysSet.has(key);
501
514
  const checkboxPropsFn = () => typeof getCheckboxProps === 'function' ? getCheckboxProps(record) : {};
502
- return /*#__PURE__*/React.createElement(ColumnSelection, {
515
+ const originNode = /*#__PURE__*/React.createElement(ColumnSelection, {
503
516
  "aria-label": `${selected ? 'Deselect' : 'Select'} this row`,
504
517
  getCheckboxProps: checkboxPropsFn,
505
518
  selected: selected,
506
519
  onChange: (status, e) => _this2.toggleSelectRow(status, key, e)
507
520
  });
521
+ const selectRow = (selected, e) => _this2.toggleSelectRow(selected, key, e);
522
+ return _isFunction(renderCell) ? renderCell({
523
+ selected,
524
+ record,
525
+ index,
526
+ originNode,
527
+ inHeader: false,
528
+ disabled,
529
+ indeterminate,
530
+ selectRow
531
+ }) : originNode;
508
532
  }
509
533
  }
510
534
  return null;
511
535
  };
512
536
  this.renderRowSelectionCallback = function (text) {
513
537
  let record = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
514
- return _this2.renderSelection(record);
538
+ let index = arguments.length > 2 ? arguments[2] : undefined;
539
+ return _this2.renderSelection(record, false, index);
515
540
  };
516
- this.renderTitleSelectionCallback = () => this.renderSelection(null, true);
541
+ this.renderTitleSelectionCallback = () => this.renderSelection(undefined, true);
517
542
  this.normalizeSelectionColumn = function () {
518
543
  let props = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
519
544
  const {
@@ -608,7 +633,7 @@ class Table extends BaseComponent {
608
633
  const {
609
634
  prefixCls
610
635
  } = _this2.props;
611
- if (column && (column.sorter || column.filters || column.useFullRender)) {
636
+ if (column && (column.sorter || column.filters || column.onFilter || column.useFullRender)) {
612
637
  let hasSorterOrFilter = false;
613
638
  const {
614
639
  dataIndex,
@@ -650,10 +675,10 @@ class Table extends BaseComponent {
650
675
  const stateFilteredValue = _get(curQuery, 'filteredValue');
651
676
  const defaultFilteredValue = _get(curQuery, 'defaultFilteredValue');
652
677
  const filteredValue = stateFilteredValue ? stateFilteredValue : defaultFilteredValue;
653
- if (Array.isArray(column.filters) && column.filters.length || /*#__PURE__*/isValidElement(column.filterDropdown)) {
678
+ if (Array.isArray(column.filters) && column.filters.length || /*#__PURE__*/isValidElement(column.filterDropdown) || typeof column.renderFilterDropdown === 'function') {
654
679
  const filter = /*#__PURE__*/React.createElement(ColumnFilter, Object.assign({
655
680
  key: strings.DEFAULT_KEY_COLUMN_FILTER
656
- }, curQuery, {
681
+ }, _omit(curQuery, 'children'), {
657
682
  filteredValue: filteredValue,
658
683
  onFilterDropdownVisibleChange: visible => _this2.foundation.toggleShowFilter(dataIndex, visible),
659
684
  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/es/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/es/table/constants';
9
- import { BaseRowKeyType, BaseSortOrder, BaseGroupBy, BaseGroupByFn, BaseFixed, BaseAlign, BaseChangeInfoSorter, BaseSorter, BaseFilter, BaseChangeInfoFilter, BaseIncludeGroupRecord, BaseEllipsis } from '@douyinfe/semi-foundation/lib/es/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/es/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>;
@@ -1146,6 +1146,9 @@ class TreeSelect extends BaseComponent {
1146
1146
  onLoad
1147
1147
  } = this.props;
1148
1148
  _isFunction(onLoad) && onLoad(newLoadedKeys, data);
1149
+ },
1150
+ notifyClear: e => {
1151
+ this.props.onClear && this.props.onClear(e);
1149
1152
  }
1150
1153
  };
1151
1154
  return Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({}, super.adapter), filterAdapter), treeSelectAdapter), treeAdapter), {
@@ -1317,6 +1320,7 @@ TreeSelect.propTypes = {
1317
1320
  virtualize: PropTypes.object,
1318
1321
  treeNodeFilterProp: PropTypes.string,
1319
1322
  onChange: PropTypes.func,
1323
+ onClear: PropTypes.func,
1320
1324
  onSearch: PropTypes.func,
1321
1325
  onSelect: PropTypes.func,
1322
1326
  onExpand: PropTypes.func,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@douyinfe/semi-ui",
3
- "version": "2.51.4",
3
+ "version": "2.52.0-beta.1",
4
4
  "description": "A modern, comprehensive, flexible design system and UI library. Connect DesignOps & DevOps. Quickly build beautiful React apps. Maintained by Douyin-fe team.",
5
5
  "main": "lib/cjs/index.js",
6
6
  "module": "lib/es/index.js",
@@ -20,12 +20,12 @@
20
20
  "@dnd-kit/core": "^6.0.8",
21
21
  "@dnd-kit/sortable": "^7.0.2",
22
22
  "@dnd-kit/utilities": "^3.2.1",
23
- "@douyinfe/semi-animation": "2.51.4",
24
- "@douyinfe/semi-animation-react": "2.51.4",
25
- "@douyinfe/semi-foundation": "2.51.4",
26
- "@douyinfe/semi-icons": "2.51.4",
27
- "@douyinfe/semi-illustrations": "2.51.4",
28
- "@douyinfe/semi-theme-default": "2.51.4",
23
+ "@douyinfe/semi-animation": "2.52.0-beta.1",
24
+ "@douyinfe/semi-animation-react": "2.52.0-beta.1",
25
+ "@douyinfe/semi-foundation": "2.52.0-beta.1",
26
+ "@douyinfe/semi-icons": "2.52.0-beta.1",
27
+ "@douyinfe/semi-illustrations": "2.52.0-beta.1",
28
+ "@douyinfe/semi-theme-default": "2.52.0-beta.1",
29
29
  "async-validator": "^3.5.0",
30
30
  "classnames": "^2.2.6",
31
31
  "copy-text-to-clipboard": "^2.1.1",
@@ -75,7 +75,7 @@
75
75
  ],
76
76
  "author": "",
77
77
  "license": "MIT",
78
- "gitHead": "b8cad87796be9b6b10409a95d3a5b4cb8b9592e6",
78
+ "gitHead": "f06aca5797fda6a3f03a003ddd24591da9a4e6d4",
79
79
  "devDependencies": {
80
80
  "@babel/plugin-proposal-decorators": "^7.15.8",
81
81
  "@babel/plugin-transform-runtime": "^7.15.8",