@douyinfe/semi-ui 2.44.0 → 2.45.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 (49) hide show
  1. package/dist/css/semi.css +8 -0
  2. package/dist/css/semi.min.css +1 -1
  3. package/dist/umd/semi-ui.js +113 -65
  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/datePicker/datePicker.d.ts +1 -1
  8. package/lib/cjs/datePicker/datePicker.js +1 -1
  9. package/lib/cjs/dropdown/index.d.ts +1 -1
  10. package/lib/cjs/dropdown/index.js +1 -1
  11. package/lib/cjs/form/arrayField.d.ts +1 -1
  12. package/lib/cjs/form/arrayField.js +2 -2
  13. package/lib/cjs/form/baseForm.d.ts +1 -1
  14. package/lib/cjs/form/field.d.ts +1 -1
  15. package/lib/cjs/input/textarea.d.ts +5 -1
  16. package/lib/cjs/input/textarea.js +4 -2
  17. package/lib/cjs/notification/index.d.ts +9 -7
  18. package/lib/cjs/notification/index.js +27 -8
  19. package/lib/cjs/popover/index.d.ts +5 -2
  20. package/lib/cjs/popover/index.js +3 -2
  21. package/lib/cjs/select/index.d.ts +2 -2
  22. package/lib/cjs/select/index.js +2 -2
  23. package/lib/cjs/toast/index.js +0 -3
  24. package/lib/cjs/tooltip/index.d.ts +5 -2
  25. package/lib/cjs/tooltip/index.js +1 -1
  26. package/lib/cjs/tree/index.js +5 -3
  27. package/lib/cjs/treeSelect/index.js +7 -5
  28. package/lib/es/datePicker/datePicker.d.ts +1 -1
  29. package/lib/es/datePicker/datePicker.js +1 -1
  30. package/lib/es/dropdown/index.d.ts +1 -1
  31. package/lib/es/dropdown/index.js +1 -1
  32. package/lib/es/form/arrayField.d.ts +1 -1
  33. package/lib/es/form/arrayField.js +2 -2
  34. package/lib/es/form/baseForm.d.ts +1 -1
  35. package/lib/es/form/field.d.ts +1 -1
  36. package/lib/es/input/textarea.d.ts +5 -1
  37. package/lib/es/input/textarea.js +4 -2
  38. package/lib/es/notification/index.d.ts +9 -7
  39. package/lib/es/notification/index.js +27 -8
  40. package/lib/es/popover/index.d.ts +5 -2
  41. package/lib/es/popover/index.js +3 -2
  42. package/lib/es/select/index.d.ts +2 -2
  43. package/lib/es/select/index.js +2 -2
  44. package/lib/es/toast/index.js +0 -3
  45. package/lib/es/tooltip/index.d.ts +5 -2
  46. package/lib/es/tooltip/index.js +1 -1
  47. package/lib/es/tree/index.js +5 -3
  48. package/lib/es/treeSelect/index.js +7 -5
  49. package/package.json +8 -8
@@ -26,12 +26,17 @@ class NotificationList extends BaseComponent {
26
26
  super(props);
27
27
  _this = this;
28
28
  this.add = noticeOpts => this.foundation.addNotice(noticeOpts);
29
+ this.has = id => this.foundation.has(id);
29
30
  this.remove = id => {
30
31
  this.foundation.removeNotice(String(id));
31
32
  };
33
+ this.update = (id, opts) => {
34
+ return this.foundation.update(id, opts);
35
+ };
32
36
  this.destroyAll = () => this.foundation.destroyAll();
33
37
  this.renderNoticeInPosition = function (notices, position) {
34
38
  let removedItems = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
39
+ let updatedItems = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : [];
35
40
  const className = cls(cssClasses.LIST);
36
41
  // TODO notifyOnClose
37
42
  if (notices.length) {
@@ -57,6 +62,11 @@ class NotificationList extends BaseComponent {
57
62
  isAnimating
58
63
  } = _ref;
59
64
  return isRemoved && !isAnimating ? null : /*#__PURE__*/React.createElement(Notice, Object.assign({}, notice, {
65
+ ref: notice => {
66
+ if (notice && updatedItems.some(item => item.id === notice.props.id)) {
67
+ notice.foundation.restartCloseTimer();
68
+ }
69
+ },
60
70
  className: cls({
61
71
  [notice.className]: Boolean(notice.className),
62
72
  [animationClassName]: true
@@ -73,7 +83,8 @@ class NotificationList extends BaseComponent {
73
83
  };
74
84
  this.state = {
75
85
  notices: [],
76
- removedItems: []
86
+ removedItems: [],
87
+ updatedItems: []
77
88
  };
78
89
  this.noticeStorage = [];
79
90
  this.removeItemStorage = [];
@@ -84,19 +95,22 @@ class NotificationList extends BaseComponent {
84
95
  return Object.assign(Object.assign({}, super.adapter), {
85
96
  updateNotices: function (notices) {
86
97
  let removedItems = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
98
+ let updatedItems = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
87
99
  _this2.noticeStorage = [...notices];
88
100
  _this2.removeItemStorage = [...removedItems];
89
101
  // setState is async sometimes and react often merges state, so use "this" , make sure other code always get right data.
90
102
  _this2.setState({
91
103
  notices,
92
- removedItems
104
+ removedItems,
105
+ updatedItems
93
106
  });
94
107
  },
95
108
  getNotices: () => this.noticeStorage
96
109
  });
97
110
  }
98
111
  static addNotice(notice) {
99
- const id = getUuid('notification');
112
+ var _a;
113
+ const id = (_a = notice.id) !== null && _a !== void 0 ? _a : getUuid('notification');
100
114
  if (!ref) {
101
115
  const {
102
116
  getPopupContainer
@@ -122,9 +136,13 @@ class NotificationList extends BaseComponent {
122
136
  }));
123
137
  });
124
138
  } else {
125
- ref.add(Object.assign(Object.assign({}, notice), {
126
- id
127
- }));
139
+ if (ref.has(`${id}`)) {
140
+ ref.update(id, notice);
141
+ } else {
142
+ ref.add(Object.assign(Object.assign({}, notice), {
143
+ id
144
+ }));
145
+ }
128
146
  }
129
147
  return id;
130
148
  }
@@ -203,7 +221,8 @@ class NotificationList extends BaseComponent {
203
221
  notices
204
222
  } = this.state;
205
223
  const {
206
- removedItems
224
+ removedItems,
225
+ updatedItems
207
226
  } = this.state;
208
227
  notices = Array.from(new Set([...notices, ...removedItems]));
209
228
  const noticesInPosition = {
@@ -223,7 +242,7 @@ class NotificationList extends BaseComponent {
223
242
  const noticesList = Object.entries(noticesInPosition).map(obj => {
224
243
  const pos = obj[0];
225
244
  const noticesInPos = obj[1];
226
- return this.renderNoticeInPosition(noticesInPos, pos, removedItems);
245
+ return this.renderNoticeInPosition(noticesInPos, pos, removedItems, updatedItems);
227
246
  });
228
247
  return /*#__PURE__*/React.createElement(React.Fragment, null, noticesList);
229
248
  }
@@ -26,7 +26,10 @@ export interface PopoverProps extends BaseProps {
26
26
  onVisibleChange?: (visible: boolean) => void;
27
27
  onClickOutSide?: (e: React.MouseEvent) => void;
28
28
  showArrow?: boolean;
29
- spacing?: number;
29
+ spacing?: number | {
30
+ x: number;
31
+ y: number;
32
+ };
30
33
  stopPropagation?: boolean | string;
31
34
  arrowStyle?: ArrowStyle;
32
35
  arrowBounding?: ArrowBounding;
@@ -64,7 +67,7 @@ declare class Popover extends React.PureComponent<PopoverProps, PopoverState> {
64
67
  onVisibleChange: PropTypes.Requireable<(...args: any[]) => any>;
65
68
  onClickOutSide: PropTypes.Requireable<(...args: any[]) => any>;
66
69
  style: PropTypes.Requireable<object>;
67
- spacing: PropTypes.Requireable<number>;
70
+ spacing: PropTypes.Requireable<NonNullable<number | object>>;
68
71
  zIndex: PropTypes.Requireable<number>;
69
72
  showArrow: PropTypes.Requireable<boolean>;
70
73
  arrowStyle: PropTypes.Requireable<PropTypes.InferProps<{
@@ -16,6 +16,7 @@ import { cssClasses, strings, numbers } from '@douyinfe/semi-foundation/lib/es/p
16
16
  import Tooltip from '../tooltip/index';
17
17
  import Arrow from './Arrow';
18
18
  import '@douyinfe/semi-foundation/lib/es/popover/popover.css';
19
+ import isNullOrUndefined from '@douyinfe/semi-foundation/lib/es/utils/isNullOrUndefined';
19
20
  const positionSet = strings.POSITION_SET;
20
21
  const triggerSet = strings.TRIGGER_SET;
21
22
  class Popover extends React.PureComponent {
@@ -88,7 +89,7 @@ class Popover extends React.PureComponent {
88
89
  arrowStyle
89
90
  };
90
91
  const arrow = showArrow ? /*#__PURE__*/React.createElement(Arrow, Object.assign({}, arrowProps)) : false;
91
- if (typeof spacing !== 'number') {
92
+ if (isNullOrUndefined(spacing)) {
92
93
  spacing = showArrow ? numbers.SPACING_WITH_ARROW : numbers.SPACING;
93
94
  }
94
95
  const role = trigger === 'click' || trigger === 'custom' ? 'dialog' : 'tooltip';
@@ -125,7 +126,7 @@ Popover.propTypes = {
125
126
  onVisibleChange: PropTypes.func,
126
127
  onClickOutSide: PropTypes.func,
127
128
  style: PropTypes.object,
128
- spacing: PropTypes.number,
129
+ spacing: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),
129
130
  zIndex: PropTypes.number,
130
131
  showArrow: PropTypes.bool,
131
132
  arrowStyle: PropTypes.shape({
@@ -128,7 +128,7 @@ export type SelectProps = {
128
128
  showClear?: boolean;
129
129
  showArrow?: boolean;
130
130
  renderSelectedItem?: RenderSelectedItemFn;
131
- renderCreateItem?: (inputValue: OptionProps['value'], focus: boolean) => React.ReactNode;
131
+ renderCreateItem?: (inputValue: OptionProps['value'], focus: boolean, style?: React.CSSProperties) => React.ReactNode;
132
132
  renderOptionItem?: (props: optionRenderProps) => React.ReactNode;
133
133
  onMouseEnter?: (e: React.MouseEvent) => any;
134
134
  onMouseLeave?: (e: React.MouseEvent) => any;
@@ -241,7 +241,7 @@ declare class Select extends BaseComponent<SelectProps, SelectState> {
241
241
  autoAdjustOverflow: PropTypes.Requireable<boolean>;
242
242
  mouseEnterDelay: PropTypes.Requireable<number>;
243
243
  mouseLeaveDelay: PropTypes.Requireable<number>;
244
- spacing: PropTypes.Requireable<number>;
244
+ spacing: PropTypes.Requireable<NonNullable<number | object>>;
245
245
  onBlur: PropTypes.Requireable<(...args: any[]) => any>;
246
246
  onFocus: PropTypes.Requireable<(...args: any[]) => any>;
247
247
  onClear: PropTypes.Requireable<(...args: any[]) => any>;
@@ -550,7 +550,7 @@ class Select extends BaseComponent {
550
550
  }, locale.createText), option.value)));
551
551
  return defaultCreateItem;
552
552
  }
553
- const customCreateItem = renderCreateItem(option.value, isFocused);
553
+ const customCreateItem = renderCreateItem(option.value, isFocused, style);
554
554
  return (
555
555
  /*#__PURE__*/
556
556
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/interactive-supports-focus
@@ -1271,7 +1271,7 @@ Select.propTypes = {
1271
1271
  autoAdjustOverflow: PropTypes.bool,
1272
1272
  mouseEnterDelay: PropTypes.number,
1273
1273
  mouseLeaveDelay: PropTypes.number,
1274
- spacing: PropTypes.number,
1274
+ spacing: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),
1275
1275
  onBlur: PropTypes.func,
1276
1276
  onFocus: PropTypes.func,
1277
1277
  onClear: PropTypes.func,
@@ -221,9 +221,6 @@ const createBaseToast = () => {
221
221
  const refFn = toast => {
222
222
  var _a;
223
223
  if (((_a = toast === null || toast === void 0 ? void 0 : toast.foundation) === null || _a === void 0 ? void 0 : _a._id) && updatedIds.includes(toast.foundation._id)) {
224
- toast.foundation.setState({
225
- duration: toast.props.duration
226
- });
227
224
  toast.foundation.restartCloseTimer();
228
225
  }
229
226
  };
@@ -36,7 +36,10 @@ export interface TooltipProps extends BaseProps {
36
36
  prefixCls?: string;
37
37
  onVisibleChange?: (visible: boolean) => void;
38
38
  onClickOutSide?: (e: React.MouseEvent) => void;
39
- spacing?: number;
39
+ spacing?: number | {
40
+ x: number;
41
+ y: number;
42
+ };
40
43
  margin?: number | {
41
44
  marginLeft: number;
42
45
  marginTop: number;
@@ -103,7 +106,7 @@ export default class Tooltip extends BaseComponent<TooltipProps, TooltipState> {
103
106
  prefixCls: PropTypes.Requireable<string>;
104
107
  onVisibleChange: PropTypes.Requireable<(...args: any[]) => any>;
105
108
  onClickOutSide: PropTypes.Requireable<(...args: any[]) => any>;
106
- spacing: PropTypes.Requireable<number>;
109
+ spacing: PropTypes.Requireable<NonNullable<number | object>>;
107
110
  margin: PropTypes.Requireable<NonNullable<number | object>>;
108
111
  showArrow: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
109
112
  zIndex: PropTypes.Requireable<number>;
@@ -655,7 +655,7 @@ Tooltip.propTypes = {
655
655
  prefixCls: PropTypes.string,
656
656
  onVisibleChange: PropTypes.func,
657
657
  onClickOutSide: PropTypes.func,
658
- spacing: PropTypes.number,
658
+ spacing: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),
659
659
  margin: PropTypes.oneOfType([PropTypes.number, PropTypes.object]),
660
660
  showArrow: PropTypes.oneOfType([PropTypes.bool, PropTypes.node]),
661
661
  zIndex: PropTypes.number,
@@ -233,8 +233,10 @@ class Tree extends BaseComponent {
233
233
  const treeDataHasChange = prevProps && prevProps.treeData !== props.treeData;
234
234
  return firstInProps || treeDataHasChange;
235
235
  };
236
+ const needUpdateTreeData = needUpdate('treeData');
237
+ const needUpdateSimpleJson = needUpdate('treeDataSimpleJson');
236
238
  // Update the data of tree in state
237
- if (needUpdate('treeData') || props.draggable && needUpdateData()) {
239
+ if (needUpdateTreeData || props.draggable && needUpdateData()) {
238
240
  treeData = props.treeData;
239
241
  newState.treeData = treeData;
240
242
  const entitiesMap = convertDataToEntities(treeData);
@@ -242,7 +244,7 @@ class Tree extends BaseComponent {
242
244
  keyEntities = newState.keyEntities;
243
245
  newState.cachedKeyValuePairs = Object.assign({}, entitiesMap.valueEntities);
244
246
  valueEntities = newState.cachedKeyValuePairs;
245
- } else if (needUpdate('treeDataSimpleJson')) {
247
+ } else if (needUpdateSimpleJson) {
246
248
  // Convert treeDataSimpleJson to treeData
247
249
  treeData = convertJsonToData(props.treeDataSimpleJson);
248
250
  newState.treeData = treeData;
@@ -259,7 +261,7 @@ class Tree extends BaseComponent {
259
261
  newState.motionType = null;
260
262
  }
261
263
  }
262
- const dataUpdated = needUpdate('treeDataSimpleJson') || needUpdate('treeData');
264
+ const dataUpdated = needUpdateSimpleJson || needUpdateTreeData;
263
265
  const expandAllWhenDataChange = dataUpdated && props.expandAll;
264
266
  if (!isSeaching) {
265
267
  // Update expandedKeys
@@ -886,8 +886,10 @@ class TreeSelect extends BaseComponent {
886
886
  const newState = {
887
887
  prevProps: props
888
888
  };
889
+ const needUpdateTreeData = needUpdate('treeData');
890
+ const needUpdateExpandedKeys = needUpdate('expandedKeys');
889
891
  // TreeNode
890
- if (needUpdate('treeData')) {
892
+ if (needUpdateTreeData) {
891
893
  treeData = props.treeData;
892
894
  newState.treeData = treeData;
893
895
  const entitiesMap = convertDataToEntities(treeData);
@@ -903,9 +905,9 @@ class TreeSelect extends BaseComponent {
903
905
  newState.motionType = null;
904
906
  }
905
907
  }
906
- const expandAllWhenDataChange = needUpdate('treeData') && props.expandAll;
908
+ const expandAllWhenDataChange = needUpdateTreeData && props.expandAll;
907
909
  // expandedKeys
908
- if (needUpdate('expandedKeys') || prevProps && needUpdate('autoExpandParent')) {
910
+ if (needUpdateExpandedKeys || prevProps && needUpdate('autoExpandParent')) {
909
911
  newState.expandedKeys = calcExpandedKeys(props.expandedKeys, keyEntities, props.autoExpandParent || !prevProps);
910
912
  // only show animation when treeData does not change
911
913
  if (prevProps && props.motion && !treeData) {
@@ -926,7 +928,7 @@ class TreeSelect extends BaseComponent {
926
928
  newState.expandedKeys = calcExpandedKeysForValues(normalizeValue(props.value, withObject), keyEntities, props.multiple, valueEntities);
927
929
  }
928
930
  // flattenNodes
929
- if (treeData || needUpdate('expandedKeys')) {
931
+ if (treeData || needUpdateExpandedKeys) {
930
932
  const flattenNodes = flattenTreeData(treeData || prevState.treeData, newState.expandedKeys || prevState.expandedKeys);
931
933
  newState.flattenNodes = flattenNodes;
932
934
  }
@@ -978,7 +980,7 @@ class TreeSelect extends BaseComponent {
978
980
  newState.loadedKeys = new Set(props.loadedKeys);
979
981
  }
980
982
  // ================== rePosKey ==================
981
- if (needUpdate('treeData') || needUpdate('value')) {
983
+ if (needUpdateTreeData || needUpdate('value')) {
982
984
  newState.rePosKey = rePosKey + 1;
983
985
  }
984
986
  // ================ disableStrictly =================
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@douyinfe/semi-ui",
3
- "version": "2.44.0",
3
+ "version": "2.45.0-beta.0",
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.44.0",
24
- "@douyinfe/semi-animation-react": "2.44.0",
25
- "@douyinfe/semi-foundation": "2.44.0",
26
- "@douyinfe/semi-icons": "2.44.0",
27
- "@douyinfe/semi-illustrations": "2.44.0",
28
- "@douyinfe/semi-theme-default": "2.44.0",
23
+ "@douyinfe/semi-animation": "2.45.0-beta.0",
24
+ "@douyinfe/semi-animation-react": "2.45.0-beta.0",
25
+ "@douyinfe/semi-foundation": "2.45.0-beta.0",
26
+ "@douyinfe/semi-icons": "2.45.0-beta.0",
27
+ "@douyinfe/semi-illustrations": "2.45.0-beta.0",
28
+ "@douyinfe/semi-theme-default": "2.45.0-beta.0",
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": "d683a25e4dd9c5fb8dbb069d83ffd24998b14191",
78
+ "gitHead": "7a93b57c88a43db5c47b649741a9b6ba861560f4",
79
79
  "devDependencies": {
80
80
  "@babel/plugin-proposal-decorators": "^7.15.8",
81
81
  "@babel/plugin-transform-runtime": "^7.15.8",