@douyinfe/semi-ui 2.17.0 → 2.19.0-alpha.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 (179) hide show
  1. package/anchor/index.tsx +1 -1
  2. package/anchor/link.tsx +3 -4
  3. package/autoComplete/__test__/autoComplete.test.js +6 -6
  4. package/autoComplete/index.tsx +3 -1
  5. package/autoComplete/option.tsx +164 -0
  6. package/calendar/__test__/calendar.test.js +21 -2
  7. package/calendar/_story/calendar.stories.js +31 -0
  8. package/calendar/index.tsx +3 -1
  9. package/calendar/interface.ts +2 -1
  10. package/carousel/index.tsx +5 -5
  11. package/checkbox/checkbox.tsx +10 -2
  12. package/dist/css/semi.css +174 -29
  13. package/dist/css/semi.min.css +1 -1
  14. package/dist/umd/semi-ui.js +4190 -5430
  15. package/dist/umd/semi-ui.js.map +1 -1
  16. package/dist/umd/semi-ui.min.js +1 -1
  17. package/dist/umd/semi-ui.min.js.map +1 -1
  18. package/form/_story/FieldProps/labelOptional.jsx +30 -0
  19. package/form/_story/form.stories.js +7 -0
  20. package/form/hoc/withField.tsx +1 -0
  21. package/form/label.tsx +21 -7
  22. package/gulpfile.js +3 -1
  23. package/lib/cjs/_base/base.css +35 -0
  24. package/lib/cjs/anchor/index.js +2 -1
  25. package/lib/cjs/anchor/link.d.ts +1 -1
  26. package/lib/cjs/anchor/link.js +9 -5
  27. package/lib/cjs/autoComplete/index.d.ts +1 -1
  28. package/lib/cjs/autoComplete/index.js +6 -3
  29. package/lib/cjs/autoComplete/option.d.ts +50 -0
  30. package/lib/cjs/autoComplete/option.js +218 -0
  31. package/lib/cjs/calendar/index.d.ts +2 -0
  32. package/lib/cjs/calendar/index.js +3 -1
  33. package/lib/cjs/calendar/interface.d.ts +2 -1
  34. package/lib/cjs/carousel/index.js +2 -2
  35. package/lib/cjs/checkbox/checkbox.d.ts +4 -0
  36. package/lib/cjs/checkbox/checkbox.js +9 -3
  37. package/lib/cjs/form/hoc/withField.js +2 -1
  38. package/lib/cjs/form/label.d.ts +8 -5
  39. package/lib/cjs/form/label.js +15 -4
  40. package/lib/cjs/locale/interface.d.ts +3 -0
  41. package/lib/cjs/locale/source/ar.js +3 -0
  42. package/lib/cjs/locale/source/de.js +3 -0
  43. package/lib/cjs/locale/source/en_GB.js +3 -0
  44. package/lib/cjs/locale/source/en_US.js +3 -0
  45. package/lib/cjs/locale/source/es.js +3 -0
  46. package/lib/cjs/locale/source/fr.js +3 -0
  47. package/lib/cjs/locale/source/id_ID.js +3 -0
  48. package/lib/cjs/locale/source/it.js +3 -0
  49. package/lib/cjs/locale/source/ja_JP.js +3 -0
  50. package/lib/cjs/locale/source/ko_KR.js +3 -0
  51. package/lib/cjs/locale/source/ms_MY.js +3 -0
  52. package/lib/cjs/locale/source/pt_BR.js +3 -0
  53. package/lib/cjs/locale/source/ru_RU.js +3 -0
  54. package/lib/cjs/locale/source/th_TH.js +3 -0
  55. package/lib/cjs/locale/source/tr_TR.js +3 -0
  56. package/lib/cjs/locale/source/vi_VN.js +3 -0
  57. package/lib/cjs/locale/source/zh_CN.js +3 -0
  58. package/lib/cjs/locale/source/zh_TW.js +3 -0
  59. package/lib/cjs/modal/Modal.js +0 -8
  60. package/lib/cjs/modal/ModalContent.js +4 -1
  61. package/lib/cjs/radio/radio.d.ts +2 -0
  62. package/lib/cjs/radio/radio.js +33 -8
  63. package/lib/cjs/table/ColumnFilter.js +4 -2
  64. package/lib/cjs/table/ColumnSorter.d.ts +1 -0
  65. package/lib/cjs/table/ColumnSorter.js +9 -6
  66. package/lib/cjs/table/Table.js +11 -4
  67. package/lib/cjs/tag/group.d.ts +3 -0
  68. package/lib/cjs/tag/group.js +24 -6
  69. package/lib/cjs/tag/index.d.ts +2 -1
  70. package/lib/cjs/tag/index.js +7 -5
  71. package/lib/cjs/tag/interface.d.ts +2 -1
  72. package/lib/cjs/tree/index.d.ts +3 -1
  73. package/lib/cjs/tree/index.js +23 -0
  74. package/lib/cjs/tree/interface.d.ts +4 -0
  75. package/lib/cjs/tree/treeNode.d.ts +4 -1
  76. package/lib/cjs/tree/treeNode.js +13 -4
  77. package/lib/es/_base/base.css +35 -0
  78. package/lib/es/anchor/index.js +2 -1
  79. package/lib/es/anchor/link.d.ts +1 -1
  80. package/lib/es/anchor/link.js +9 -5
  81. package/lib/es/autoComplete/index.d.ts +1 -1
  82. package/lib/es/autoComplete/index.js +6 -3
  83. package/lib/es/autoComplete/option.d.ts +50 -0
  84. package/lib/es/autoComplete/option.js +188 -0
  85. package/lib/es/calendar/index.d.ts +2 -0
  86. package/lib/es/calendar/index.js +3 -1
  87. package/lib/es/calendar/interface.d.ts +2 -1
  88. package/lib/es/carousel/index.js +2 -2
  89. package/lib/es/checkbox/checkbox.d.ts +4 -0
  90. package/lib/es/checkbox/checkbox.js +10 -4
  91. package/lib/es/form/hoc/withField.js +2 -1
  92. package/lib/es/form/label.d.ts +8 -5
  93. package/lib/es/form/label.js +13 -4
  94. package/lib/es/locale/interface.d.ts +3 -0
  95. package/lib/es/locale/source/ar.js +3 -0
  96. package/lib/es/locale/source/de.js +3 -0
  97. package/lib/es/locale/source/en_GB.js +3 -0
  98. package/lib/es/locale/source/en_US.js +3 -0
  99. package/lib/es/locale/source/es.js +3 -0
  100. package/lib/es/locale/source/fr.js +3 -0
  101. package/lib/es/locale/source/id_ID.js +3 -0
  102. package/lib/es/locale/source/it.js +3 -0
  103. package/lib/es/locale/source/ja_JP.js +3 -0
  104. package/lib/es/locale/source/ko_KR.js +3 -0
  105. package/lib/es/locale/source/ms_MY.js +3 -0
  106. package/lib/es/locale/source/pt_BR.js +3 -0
  107. package/lib/es/locale/source/ru_RU.js +3 -0
  108. package/lib/es/locale/source/th_TH.js +3 -0
  109. package/lib/es/locale/source/tr_TR.js +3 -0
  110. package/lib/es/locale/source/vi_VN.js +3 -0
  111. package/lib/es/locale/source/zh_CN.js +3 -0
  112. package/lib/es/locale/source/zh_TW.js +3 -0
  113. package/lib/es/modal/Modal.js +0 -8
  114. package/lib/es/modal/ModalContent.js +4 -1
  115. package/lib/es/radio/radio.d.ts +2 -0
  116. package/lib/es/radio/radio.js +31 -8
  117. package/lib/es/table/ColumnFilter.js +4 -2
  118. package/lib/es/table/ColumnSorter.d.ts +1 -0
  119. package/lib/es/table/ColumnSorter.js +9 -6
  120. package/lib/es/table/Table.js +10 -4
  121. package/lib/es/tag/group.d.ts +3 -0
  122. package/lib/es/tag/group.js +24 -6
  123. package/lib/es/tag/index.d.ts +2 -1
  124. package/lib/es/tag/index.js +7 -5
  125. package/lib/es/tag/interface.d.ts +2 -1
  126. package/lib/es/tree/index.d.ts +3 -1
  127. package/lib/es/tree/index.js +22 -0
  128. package/lib/es/tree/interface.d.ts +4 -0
  129. package/lib/es/tree/treeNode.d.ts +4 -1
  130. package/lib/es/tree/treeNode.js +13 -4
  131. package/locale/interface.ts +3 -0
  132. package/locale/source/ar.ts +3 -0
  133. package/locale/source/de.ts +3 -0
  134. package/locale/source/en_GB.ts +3 -0
  135. package/locale/source/en_US.ts +3 -0
  136. package/locale/source/es.ts +3 -0
  137. package/locale/source/fr.ts +3 -0
  138. package/locale/source/id_ID.ts +3 -0
  139. package/locale/source/it.ts +3 -0
  140. package/locale/source/ja_JP.ts +3 -0
  141. package/locale/source/ko_KR.ts +3 -0
  142. package/locale/source/ms_MY.ts +3 -0
  143. package/locale/source/pt_BR.ts +3 -0
  144. package/locale/source/ru_RU.ts +3 -0
  145. package/locale/source/th_TH.ts +3 -0
  146. package/locale/source/tr_TR.ts +4 -1
  147. package/locale/source/vi_VN.ts +3 -0
  148. package/locale/source/zh_CN.ts +3 -0
  149. package/locale/source/zh_TW.ts +3 -0
  150. package/modal/Modal.tsx +0 -6
  151. package/modal/ModalContent.tsx +4 -1
  152. package/modal/__test__/modal.test.js +1 -1
  153. package/modal/_story/__snapshots__/modal.stories.tsx.snap +203 -0
  154. package/package.json +7 -7
  155. package/radio/_story/radio.stories.js +2 -2
  156. package/radio/radio.tsx +27 -5
  157. package/rating/__test__/rating.test.js +1 -1
  158. package/select/__test__/select.test.js +11 -17
  159. package/select/_story/select.stories.js +6 -6
  160. package/steps/_story/steps.stories.js +3 -3
  161. package/switch/_story/switch.stories.js +4 -4
  162. package/switch/_story/switch.stories.tsx +4 -4
  163. package/table/ColumnFilter.tsx +2 -1
  164. package/table/ColumnSorter.tsx +16 -10
  165. package/table/Table.tsx +7 -4
  166. package/table/_story/v2/FixedFilter/index.tsx +106 -0
  167. package/table/_story/v2/FixedSorter/index.tsx +102 -0
  168. package/table/_story/v2/index.js +4 -2
  169. package/tag/_story/tag.stories.js +57 -1
  170. package/tag/group.tsx +20 -3
  171. package/tag/index.tsx +6 -5
  172. package/tag/interface.ts +2 -1
  173. package/transfer/_story/transfer.stories.js +2 -2
  174. package/tree/_story/tree.stories.js +152 -3
  175. package/tree/index.tsx +16 -1
  176. package/tree/interface.ts +6 -0
  177. package/tree/treeNode.tsx +11 -5
  178. package/upload/_story/upload.stories.js +2 -2
  179. package/webpack.config.js +13 -3
@@ -12,9 +12,10 @@ export default class ColumnSorter extends PureComponent {
12
12
  prefixCls,
13
13
  onClick,
14
14
  sortOrder,
15
- style
15
+ style,
16
+ title
16
17
  } = this.props;
17
- const iconBtnSize = 'small';
18
+ const iconBtnSize = 'default';
18
19
  const upCls = cls("".concat(prefixCls, "-column-sorter-up"), {
19
20
  on: sortOrder === strings.SORT_DIRECTIONS[0]
20
21
  });
@@ -33,11 +34,13 @@ export default class ColumnSorter extends PureComponent {
33
34
  role: 'button'
34
35
  }, ariaProps, {
35
36
  tabIndex: -1,
36
- style: style,
37
- className: "".concat(prefixCls, "-column-sorter"),
37
+ className: "".concat(prefixCls, "-column-sorter-wrapper"),
38
38
  onClick: onClick,
39
39
  onKeyPress: e => isEnterPress(e) && onClick(e)
40
- }), /*#__PURE__*/React.createElement("span", {
40
+ }), title, /*#__PURE__*/React.createElement("div", {
41
+ style: style,
42
+ className: "".concat(prefixCls, "-column-sorter")
43
+ }, /*#__PURE__*/React.createElement("span", {
41
44
  className: "".concat(upCls)
42
45
  }, /*#__PURE__*/React.createElement(IconCaretup, {
43
46
  size: iconBtnSize
@@ -45,7 +48,7 @@ export default class ColumnSorter extends PureComponent {
45
48
  className: "".concat(downCls)
46
49
  }, /*#__PURE__*/React.createElement(IconCaretdown, {
47
50
  size: iconBtnSize
48
- })));
51
+ }))));
49
52
  }
50
53
 
51
54
  }
@@ -494,15 +494,23 @@ class Table extends BaseComponent {
494
494
  const defaultSortOrder = _get(curQuery, 'defaultSortOrder', false);
495
495
 
496
496
  const sortOrder = _this.foundation.isSortOrderValid(stateSortOrder) ? stateSortOrder : defaultSortOrder;
497
+ const TitleNode = typeof rawTitle !== 'function' && /*#__PURE__*/React.createElement(React.Fragment, {
498
+ key: strings.DEFAULT_KEY_COLUMN_TITLE
499
+ }, rawTitle);
497
500
 
498
501
  if (typeof column.sorter === 'function' || column.sorter === true) {
502
+ // In order to increase the click hot area of ​​sorting, when sorting is required & useFullRender is false,
503
+ // both the title and sorting areas are used as the click hot area for sorting。
499
504
  const sorter = /*#__PURE__*/React.createElement(ColumnSorter, {
500
505
  key: strings.DEFAULT_KEY_COLUMN_SORTER,
501
506
  sortOrder: sortOrder,
502
- onClick: e => _this.foundation.handleSort(column, e)
507
+ onClick: e => _this.foundation.handleSort(column, e),
508
+ title: TitleNode
503
509
  });
504
510
  useFullRender && (titleMap.sorter = sorter);
505
511
  titleArr.push(sorter);
512
+ } else {
513
+ titleArr.push(TitleNode);
506
514
  }
507
515
 
508
516
  const stateFilteredValue = _get(curQuery, 'filteredValue');
@@ -523,9 +531,7 @@ class Table extends BaseComponent {
523
531
  titleArr.push(filter);
524
532
  }
525
533
 
526
- const newTitle = typeof rawTitle === 'function' ? () => rawTitle(titleMap) : titleArr.unshift( /*#__PURE__*/React.createElement(React.Fragment, {
527
- key: strings.DEFAULT_KEY_COLUMN_TITLE
528
- }, rawTitle)) && titleArr;
534
+ const newTitle = typeof rawTitle === 'function' ? () => rawTitle(titleMap) : titleArr;
529
535
  column = _Object$assign(_Object$assign({}, column), {
530
536
  title: newTitle
531
537
  });
@@ -14,6 +14,7 @@ export interface TagGroupProps<T> {
14
14
  popoverProps?: PopoverProps;
15
15
  avatarShape?: AvatarShape;
16
16
  mode?: string;
17
+ onTagClose: (tagChildren: React.ReactNode, event: React.MouseEvent<HTMLElement>, tagKey: string | number) => void;
17
18
  }
18
19
  export default class TagGroup<T> extends PureComponent<TagGroupProps<T>> {
19
20
  static defaultProps: {
@@ -21,6 +22,7 @@ export default class TagGroup<T> extends PureComponent<TagGroupProps<T>> {
21
22
  className: string;
22
23
  size: string;
23
24
  avatarShape: string;
25
+ onTagClose: () => any;
24
26
  };
25
27
  static propTypes: {
26
28
  children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
@@ -31,6 +33,7 @@ export default class TagGroup<T> extends PureComponent<TagGroupProps<T>> {
31
33
  tagList: PropTypes.Requireable<any[]>;
32
34
  size: PropTypes.Requireable<string>;
33
35
  mode: PropTypes.Requireable<string>;
36
+ onTagClose: PropTypes.Requireable<(...args: any[]) => any>;
34
37
  showPopover: PropTypes.Requireable<boolean>;
35
38
  popoverProps: PropTypes.Requireable<object>;
36
39
  avatarShape: PropTypes.Requireable<string>;
@@ -72,10 +72,11 @@ export default class TagGroup extends PureComponent {
72
72
  tagList,
73
73
  size,
74
74
  mode,
75
- avatarShape
75
+ avatarShape,
76
+ onTagClose
76
77
  } = this.props;
77
78
 
78
- const renderTags = _mapInstanceProperty(tagList).call(tagList, (tag, index) => {
79
+ const renderTags = _mapInstanceProperty(tagList).call(tagList, tag => {
79
80
  if (mode === 'custom') {
80
81
  return tag;
81
82
  }
@@ -88,9 +89,24 @@ export default class TagGroup extends PureComponent {
88
89
  tag.avatarShape = avatarShape;
89
90
  }
90
91
 
91
- return /*#__PURE__*/React.createElement(Tag, _Object$assign({
92
- key: "".concat(index, "-tag")
93
- }, tag));
92
+ if (!tag.tagKey) {
93
+ if (typeof tag.children === 'string' || typeof tag.children === 'number') {
94
+ tag.tagKey = tag.children;
95
+ } else {
96
+ tag.tagKey = Math.random();
97
+ }
98
+ }
99
+
100
+ return /*#__PURE__*/React.createElement(Tag, _Object$assign({}, tag, {
101
+ key: tag.tagKey,
102
+ onClose: (tagChildren, e, tagKey) => {
103
+ if (tag.onClose) {
104
+ tag.onClose(tagChildren, e, tagKey);
105
+ }
106
+
107
+ onTagClose && onTagClose(tagChildren, e, tagKey);
108
+ }
109
+ }));
94
110
  });
95
111
 
96
112
  return renderTags;
@@ -122,7 +138,8 @@ TagGroup.defaultProps = {
122
138
  style: {},
123
139
  className: '',
124
140
  size: tagSize[0],
125
- avatarShape: 'square'
141
+ avatarShape: 'square',
142
+ onTagClose: () => undefined
126
143
  };
127
144
  TagGroup.propTypes = {
128
145
  children: PropTypes.node,
@@ -133,6 +150,7 @@ TagGroup.propTypes = {
133
150
  tagList: PropTypes.array,
134
151
  size: PropTypes.oneOf(tagSize),
135
152
  mode: PropTypes.string,
153
+ onTagClose: PropTypes.func,
136
154
  showPopover: PropTypes.bool,
137
155
  popoverProps: PropTypes.object,
138
156
  avatarShape: PropTypes.oneOf(avatarShapeSet)
@@ -10,6 +10,7 @@ export default class Tag extends Component<TagProps, TagState> {
10
10
  static defaultProps: TagProps;
11
11
  static propTypes: {
12
12
  children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
13
+ tagKey: PropTypes.Requireable<PropTypes.Requireable<string> | PropTypes.Requireable<number>>;
13
14
  size: PropTypes.Requireable<string>;
14
15
  color: PropTypes.Requireable<string>;
15
16
  type: PropTypes.Requireable<string>;
@@ -28,7 +29,7 @@ export default class Tag extends Component<TagProps, TagState> {
28
29
  visible: boolean;
29
30
  };
30
31
  setVisible(visible: boolean): void;
31
- close(e: React.MouseEvent<HTMLElement>, value: React.ReactNode): void;
32
+ close(e: React.MouseEvent<HTMLElement>, value: React.ReactNode, tagKey: string | number): void;
32
33
  handleKeyDown(event: any): void;
33
34
  renderAvatar(): JSX.Element;
34
35
  render(): JSX.Element;
@@ -63,13 +63,13 @@ export default class Tag extends Component {
63
63
  }
64
64
  }
65
65
 
66
- close(e, value) {
66
+ close(e, value, tagKey) {
67
67
  const {
68
68
  onClose
69
69
  } = this.props;
70
70
  e.stopPropagation();
71
71
  e.nativeEvent.stopImmediatePropagation();
72
- onClose && onClose(value, e); // when user call e.preventDefault() in onClick callback, tag will not hidden
72
+ onClose && onClose(value, e, tagKey); // when user call e.preventDefault() in onClick callback, tag will not hidden
73
73
 
74
74
  if (e.defaultPrevented) {
75
75
  return;
@@ -88,7 +88,7 @@ export default class Tag extends Component {
88
88
  switch (event.key) {
89
89
  case "Backspace":
90
90
  case "Delete":
91
- closable && this.close(event, this.props.children);
91
+ closable && this.close(event, this.props.children, this.props.tagKey);
92
92
  handlePrevent(event);
93
93
  break;
94
94
 
@@ -125,6 +125,7 @@ export default class Tag extends Component {
125
125
 
126
126
  const _a = this.props,
127
127
  {
128
+ tagKey,
128
129
  children,
129
130
  size,
130
131
  color,
@@ -138,7 +139,7 @@ export default class Tag extends Component {
138
139
  avatarShape,
139
140
  tabIndex
140
141
  } = _a,
141
- attr = __rest(_a, ["children", "size", "color", "closable", "visible", "onClose", "onClick", "className", "type", "avatarSrc", "avatarShape", "tabIndex"]);
142
+ attr = __rest(_a, ["tagKey", "children", "size", "color", "closable", "visible", "onClose", "onClick", "className", "type", "avatarSrc", "avatarShape", "tabIndex"]);
142
143
 
143
144
  const {
144
145
  visible: isVisible
@@ -171,7 +172,7 @@ export default class Tag extends Component {
171
172
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events
172
173
  React.createElement("div", {
173
174
  className: "".concat(prefixCls, "-close"),
174
- onClick: e => this.close(e, children)
175
+ onClick: e => this.close(e, children, tagKey)
175
176
  }, /*#__PURE__*/React.createElement(IconClose, {
176
177
  size: "small"
177
178
  })) : null;
@@ -197,6 +198,7 @@ Tag.defaultProps = {
197
198
  };
198
199
  Tag.propTypes = {
199
200
  children: PropTypes.node,
201
+ tagKey: PropTypes.oneOf([PropTypes.string, PropTypes.number]),
200
202
  size: PropTypes.oneOf(tagSize),
201
203
  color: PropTypes.oneOf(tagColors),
202
204
  type: PropTypes.oneOf(tagType),
@@ -5,12 +5,13 @@ export declare type TagSize = 'default' | 'small' | 'large';
5
5
  export declare type AvatarShape = 'circle' | 'square';
6
6
  export interface TagProps {
7
7
  children?: React.ReactNode;
8
+ tagKey?: string | number;
8
9
  size?: TagSize;
9
10
  color?: TagColor;
10
11
  type?: TagType;
11
12
  closable?: boolean;
12
13
  visible?: boolean;
13
- onClose?: (tagChildren: React.ReactNode, event: React.MouseEvent<HTMLElement>) => void;
14
+ onClose?: (tagChildren: React.ReactNode, event: React.MouseEvent<HTMLElement>, tagKey: string | number) => void;
14
15
  onClick?: React.MouseEventHandler<HTMLDivElement>;
15
16
  style?: React.CSSProperties;
16
17
  className?: string;
@@ -6,7 +6,7 @@ import BaseComponent from '../_base/baseComponent';
6
6
  import Input from '../input/index';
7
7
  import TreeNode from './treeNode';
8
8
  import '@douyinfe/semi-foundation/lib/es/tree/tree.css';
9
- import { TreeProps, TreeState, TreeNodeProps, TreeNodeData, FlattenNode, KeyEntity } from './interface';
9
+ import { TreeProps, TreeState, TreeNodeProps, TreeNodeData, FlattenNode, KeyEntity, ScrollData } from './interface';
10
10
  export * from './interface';
11
11
  export { AutoSizerProps } from './autoSizer';
12
12
  declare class Tree extends BaseComponent<TreeProps, TreeState> {
@@ -102,6 +102,7 @@ declare class Tree extends BaseComponent<TreeProps, TreeState> {
102
102
  onNodeClick: any;
103
103
  onMotionEnd: any;
104
104
  context: ContextValue;
105
+ virtualizedListRef: React.RefObject<any>;
105
106
  constructor(props: TreeProps);
106
107
  /**
107
108
  * Process of getDerivedStateFromProps was inspired by rc-tree
@@ -110,6 +111,7 @@ declare class Tree extends BaseComponent<TreeProps, TreeState> {
110
111
  static getDerivedStateFromProps(props: TreeProps, prevState: TreeState): Partial<TreeState>;
111
112
  get adapter(): TreeAdapter;
112
113
  search: (value: string) => void;
114
+ scrollTo: (scrollData: ScrollData) => void;
113
115
  renderInput(): JSX.Element;
114
116
  renderEmpty: () => JSX.Element;
115
117
  onNodeSelect: (e: MouseEvent | KeyboardEvent, treeNode: TreeNodeProps) => void;
@@ -2,6 +2,7 @@ import _isFunction from "lodash/isFunction";
2
2
  import _get from "lodash/get";
3
3
  import _isEqual from "lodash/isEqual";
4
4
  import _isEmpty from "lodash/isEmpty";
5
+ import _findIndexInstanceProperty from "@babel/runtime-corejs3/core-js-stable/instance/find-index";
5
6
  import _Promise from "@babel/runtime-corejs3/core-js-stable/promise";
6
7
  import _Set from "@babel/runtime-corejs3/core-js-stable/set";
7
8
  import _Object$assign from "@babel/runtime-corejs3/core-js-stable/object/assign";
@@ -40,6 +41,25 @@ class Tree extends BaseComponent {
40
41
  this.foundation.handleInputChange(value);
41
42
  };
42
43
 
44
+ this.scrollTo = scrollData => {
45
+ var _a;
46
+
47
+ const {
48
+ key,
49
+ align = 'center'
50
+ } = scrollData;
51
+ const {
52
+ flattenNodes
53
+ } = this.state;
54
+
55
+ if (key) {
56
+ const index = flattenNodes === null || flattenNodes === void 0 ? void 0 : _findIndexInstanceProperty(flattenNodes).call(flattenNodes, node => {
57
+ return node.key === key;
58
+ });
59
+ index >= 0 && ((_a = this.virtualizedListRef.current) === null || _a === void 0 ? void 0 : _a.scrollToItem(index, align));
60
+ }
61
+ };
62
+
43
63
  this.renderEmpty = () => {
44
64
  const {
45
65
  emptyContent
@@ -201,6 +221,7 @@ class Tree extends BaseComponent {
201
221
  this.optionsRef = /*#__PURE__*/React.createRef();
202
222
  this.foundation = new TreeFoundation(this.adapter);
203
223
  this.dragNode = null;
224
+ this.virtualizedListRef = /*#__PURE__*/React.createRef();
204
225
  }
205
226
  /**
206
227
  * Process of getDerivedStateFromProps was inspired by rc-tree
@@ -573,6 +594,7 @@ class Tree extends BaseComponent {
573
594
  width
574
595
  } = _ref4;
575
596
  return /*#__PURE__*/React.createElement(VirtualList, {
597
+ ref: this.virtualizedListRef,
576
598
  itemCount: flattenNodes.length,
577
599
  itemSize: virtualize.itemSize,
578
600
  height: height,
@@ -118,3 +118,7 @@ export interface NodeListState {
118
118
  cachedMotionKeys?: Set<string>;
119
119
  cachedData?: FlattenNode[];
120
120
  }
121
+ export interface ScrollData {
122
+ key: string;
123
+ align?: 'center' | 'start' | 'end' | 'smart' | 'auto';
124
+ }
@@ -55,7 +55,10 @@ export default class TreeNode extends PureComponent<TreeNodeProps, TreeNodeState
55
55
  isLeaf: () => boolean;
56
56
  isDisabled: () => boolean;
57
57
  renderArrow(): JSX.Element;
58
- renderCheckbox(): JSX.Element;
58
+ renderCheckbox(options: {
59
+ label: React.ReactNode;
60
+ icon: React.ReactNode;
61
+ }): JSX.Element;
59
62
  renderIcon(): any;
60
63
  renderEmptyNode(): JSX.Element;
61
64
  renderRealLabel: () => any;
@@ -300,7 +300,11 @@ export default class TreeNode extends PureComponent {
300
300
  });
301
301
  }
302
302
 
303
- renderCheckbox() {
303
+ renderCheckbox(options) {
304
+ const {
305
+ label,
306
+ icon
307
+ } = options;
304
308
  const {
305
309
  checked,
306
310
  halfChecked,
@@ -317,7 +321,7 @@ export default class TreeNode extends PureComponent {
317
321
  indeterminate: halfChecked,
318
322
  checked: checked,
319
323
  disabled: Boolean(disabled)
320
- }));
324
+ }, icon, label));
321
325
  }
322
326
 
323
327
  renderIcon() {
@@ -487,6 +491,8 @@ export default class TreeNode extends PureComponent {
487
491
  const setsize = _get(rest, ['data', 'children', 'length']);
488
492
 
489
493
  const posinset = _isString(rest.pos) ? Number(rest.pos.split('-')[level + 1]) + 1 : 1;
494
+ const label = this.renderRealLabel();
495
+ const icon = this.renderIcon();
490
496
  return /*#__PURE__*/React.createElement("li", _Object$assign({
491
497
  className: nodeCls,
492
498
  role: "treeitem",
@@ -506,9 +512,12 @@ export default class TreeNode extends PureComponent {
506
512
  style: style
507
513
  }, dragProps), this.renderArrow(), /*#__PURE__*/React.createElement("span", {
508
514
  className: labelCls
509
- }, multiple ? this.renderCheckbox() : null, this.renderIcon(), /*#__PURE__*/React.createElement("span", {
515
+ }, multiple ? this.renderCheckbox({
516
+ label,
517
+ icon
518
+ }) : null, !multiple && icon, !multiple && /*#__PURE__*/React.createElement("span", {
510
519
  className: "".concat(prefixcls, "-label-text")
511
- }, this.renderRealLabel())));
520
+ }, label)));
512
521
  }
513
522
 
514
523
  }
@@ -149,4 +149,7 @@ export interface Locale {
149
149
  total: string;
150
150
  selected: string;
151
151
  };
152
+ Form: {
153
+ optional: string;
154
+ }
152
155
  }
@@ -150,6 +150,9 @@ const local: Locale = {
150
150
  total: 'مجموع ${total} العناصر',
151
151
  selected: '${total} العناصر المحدد',
152
152
  },
153
+ Form: {
154
+ optional: '(اختياري)',
155
+ },
153
156
  };
154
157
 
155
158
  // [i18n-Arabic]
@@ -150,6 +150,9 @@ const local: Locale = {
150
150
  total: 'Gesamt ${total} Artikel',
151
151
  selected: '${total} ausgewählte Artikel',
152
152
  },
153
+ Form: {
154
+ optional: '(Optional)',
155
+ },
153
156
  };
154
157
 
155
158
  // [i18n-German]
@@ -150,6 +150,9 @@ const local: Locale = {
150
150
  total: 'Total ${total} items',
151
151
  selected: '${total} items selected',
152
152
  },
153
+ Form: {
154
+ optional: '(optional)',
155
+ },
153
156
  };
154
157
 
155
158
  // [i18n-English(GB)]
@@ -150,6 +150,9 @@ const local: Locale = {
150
150
  total: 'Total ${total} items',
151
151
  selected: '${total} items selected',
152
152
  },
153
+ Form: {
154
+ optional: '(optional)',
155
+ },
153
156
  };
154
157
 
155
158
  // [i18n-English(US)]
@@ -155,6 +155,9 @@ const locale: Locale = {
155
155
  total: 'Total ${total} objetos',
156
156
  selected: '${total} objetos seleccionados',
157
157
  },
158
+ Form: {
159
+ optional: '(opcional)',
160
+ },
158
161
  };
159
162
 
160
163
  export default locale;
@@ -150,6 +150,9 @@ const local: Locale = {
150
150
  total: 'Totale ${total} articles',
151
151
  selected: '${total} articles sélectionnés',
152
152
  },
153
+ Form: {
154
+ optional: '(optionnel)',
155
+ },
153
156
  };
154
157
 
155
158
  // [i18n-French]
@@ -150,6 +150,9 @@ const local: Locale = {
150
150
  total: 'Total ${total} proyek',
151
151
  selected: '${total} item dipilih',
152
152
  },
153
+ Form: {
154
+ optional: '(opsional)',
155
+ },
153
156
  };
154
157
 
155
158
  // [i18n-Indonesia(ID)]
@@ -150,6 +150,9 @@ const local: Locale = {
150
150
  total: 'Totale ${total} elementi',
151
151
  selected: '${total} elementi selezionati',
152
152
  },
153
+ Form: {
154
+ optional: '(opzionale)',
155
+ },
153
156
  };
154
157
 
155
158
  // [i18n-Italian]
@@ -151,6 +151,9 @@ const local: Locale = {
151
151
  total: '合計 ${total} アイテム',
152
152
  selected: '選択済み ${total} アイテム',
153
153
  },
154
+ Form: {
155
+ optional: '(オプション)',
156
+ },
154
157
  };
155
158
 
156
159
  // [i18n-Japan]
@@ -151,6 +151,9 @@ const local: Locale = {
151
151
  total: '총 {total} 개 항목',
152
152
  selected: '선택된 {Total} 개 항목',
153
153
  },
154
+ Form: {
155
+ optional: '(선택 과목)',
156
+ },
154
157
  };
155
158
 
156
159
  // [i18n-Korea]
@@ -150,6 +150,9 @@ const local: Locale = {
150
150
  total: 'Jumlah ${total} item',
151
151
  selected: '${total} projek dipilih',
152
152
  },
153
+ Form: {
154
+ optional: '(pilihan)',
155
+ },
153
156
  };
154
157
 
155
158
  // [i18n-Malaysia(MY)]
@@ -158,6 +158,9 @@ const local: Locale = {
158
158
  total: 'Total de ${total} itens',
159
159
  selected: '${total} itens selecionados',
160
160
  },
161
+ Form: {
162
+ optional: '(opcional)',
163
+ },
161
164
  };
162
165
 
163
166
  // 葡萄牙语
@@ -153,6 +153,9 @@ const local: Locale = {
153
153
  total: 'Всего ${total} элементов',
154
154
  selected: 'Выбрано ${total} элементов',
155
155
  },
156
+ Form: {
157
+ optional: '(по желанию)',
158
+ },
156
159
  };
157
160
 
158
161
  // [i18n-Russia] 俄罗斯语
@@ -154,6 +154,9 @@ const local: Locale = {
154
154
  total: 'รวม ${total} รายการ',
155
155
  selected: 'เลือก ${total} รายการ',
156
156
  },
157
+ Form: {
158
+ optional: '(ไม่จำเป็น)',
159
+ },
157
160
  };
158
161
 
159
162
  // [i18n-Thai]
@@ -149,7 +149,10 @@ const local: Locale = {
149
149
  clearSelectAll: 'Tümünün seçimini kaldır',
150
150
  total: 'Toplam ${total} öğe',
151
151
  selected: '${total} öğe seçildi'
152
- }
152
+ },
153
+ Form: {
154
+ optional: '(isteğe bağlı)',
155
+ },
153
156
  };
154
157
 
155
158
  // [i18n-Turkish]
@@ -153,6 +153,9 @@ const local: Locale = {
153
153
  total: 'Tổng số ${total} mặt hàng',
154
154
  selected: '${total} mục được chọn',
155
155
  },
156
+ Form: {
157
+ optional: '(không bắt buộc)',
158
+ },
156
159
  };
157
160
 
158
161
  // [i18n-Vietnam] 越南语
@@ -151,6 +151,9 @@ const local: Locale = {
151
151
  total: '共 ${total} 项',
152
152
  selected: '已选 ${total} 项',
153
153
  },
154
+ Form: {
155
+ optional: '(可选)',
156
+ },
154
157
  };
155
158
 
156
159
  // 中文
@@ -151,6 +151,9 @@ const local: Locale = {
151
151
  total: '共 ${total} 項',
152
152
  selected: '已選 ${total} 項',
153
153
  },
154
+ Form: {
155
+ optional: '(可選)',
156
+ },
154
157
  };
155
158
 
156
159
  // 中文
package/modal/Modal.tsx CHANGED
@@ -347,12 +347,6 @@ class Modal extends BaseComponent<ModalReactProps, ModalState> {
347
347
  let style = styleFromProps;
348
348
  const maskStyle = maskStyleFromProps;
349
349
  const renderFooter = 'footer' in this.props ? footer : this.renderFooter();
350
- if (this.props.centered) {
351
- style = {
352
- transform: 'translateY(-50%)',
353
- top: '50%', ...style,
354
- };
355
- }
356
350
  let wrapperStyle: {
357
351
  zIndex?: CSSProperties['zIndex'];
358
352
  position?: CSSProperties['position'];
@@ -318,7 +318,10 @@ export default class ModalContent extends BaseComponent<ModalContentReactProps,
318
318
  <div
319
319
  role="none"
320
320
  tabIndex={-1}
321
- className={`${cssClasses.DIALOG}-wrap`}
321
+ className={cls({
322
+ [`${cssClasses.DIALOG}-wrap`]:true,
323
+ [`${cssClasses.DIALOG}-wrap-center`]:this.props.centered
324
+ })}
322
325
  onClick={maskClosable ? this.onMaskClick : null}
323
326
  onMouseUp={maskClosable ? this.onMaskMouseUp : null}
324
327
  >
@@ -287,7 +287,7 @@ describe('modal', () => {
287
287
  it('centered without motion', () => {
288
288
  let com = getModal({ centered: true, visible: true, motion: false });
289
289
  let modal = mount(com, { attachTo: document.getElementById('container') });
290
- expect(modal.find(`div.${BASE_CLASS_PREFIX}-modal`)).toHaveStyle({ transform: 'translateY(-50%)', top: '50%' });
290
+ expect(modal.find(`div.${BASE_CLASS_PREFIX}-modal-wrap`)).toHaveClassName(`${BASE_CLASS_PREFIX}-modal-wrap-center`)
291
291
  });
292
292
 
293
293
  it('keepDOM', () => {