@douyinfe/semi-ui 2.48.0 → 2.49.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 (75) hide show
  1. package/dist/css/semi.css +4 -0
  2. package/dist/css/semi.min.css +1 -1
  3. package/dist/umd/semi-ui.js +71 -44
  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/banner/index.d.ts +2 -2
  8. package/lib/cjs/banner/index.js +2 -2
  9. package/lib/cjs/breadcrumb/item.d.ts +1 -1
  10. package/lib/cjs/breadcrumb/item.js +1 -1
  11. package/lib/cjs/calendar/dayCalendar.d.ts +1 -0
  12. package/lib/cjs/calendar/dayCalendar.js +4 -1
  13. package/lib/cjs/calendar/dayCol.d.ts +2 -0
  14. package/lib/cjs/calendar/dayCol.js +6 -6
  15. package/lib/cjs/calendar/index.d.ts +1 -0
  16. package/lib/cjs/calendar/index.js +1 -0
  17. package/lib/cjs/calendar/interface.d.ts +2 -1
  18. package/lib/cjs/calendar/rangeCalendar.js +4 -2
  19. package/lib/cjs/calendar/weekCalendar.js +4 -2
  20. package/lib/cjs/modal/Modal.d.ts +1 -1
  21. package/lib/cjs/modal/Modal.js +1 -1
  22. package/lib/cjs/navigation/SubNav.d.ts +1 -1
  23. package/lib/cjs/navigation/SubNav.js +1 -1
  24. package/lib/cjs/popconfirm/index.d.ts +1 -1
  25. package/lib/cjs/popconfirm/index.js +1 -1
  26. package/lib/cjs/sideSheet/SideSheetContent.d.ts +3 -1
  27. package/lib/cjs/sideSheet/SideSheetContent.js +6 -3
  28. package/lib/cjs/table/Body/BaseRow.d.ts +3 -0
  29. package/lib/cjs/table/Body/BaseRow.js +4 -1
  30. package/lib/cjs/table/Body/ExpandedRow.d.ts +1 -0
  31. package/lib/cjs/table/Body/ExpandedRow.js +4 -2
  32. package/lib/cjs/table/Body/index.d.ts +3 -0
  33. package/lib/cjs/table/Body/index.js +18 -10
  34. package/lib/cjs/table/interface.d.ts +1 -0
  35. package/lib/cjs/timePicker/TimePicker.d.ts +3 -0
  36. package/lib/cjs/timePicker/TimePicker.js +7 -3
  37. package/lib/cjs/timePicker/index.d.ts +2 -0
  38. package/lib/cjs/toast/toast.d.ts +1 -1
  39. package/lib/cjs/toast/toast.js +1 -1
  40. package/lib/cjs/typography/util.js +5 -6
  41. package/lib/es/banner/index.d.ts +2 -2
  42. package/lib/es/banner/index.js +2 -2
  43. package/lib/es/breadcrumb/item.d.ts +1 -1
  44. package/lib/es/breadcrumb/item.js +1 -1
  45. package/lib/es/calendar/dayCalendar.d.ts +1 -0
  46. package/lib/es/calendar/dayCalendar.js +4 -1
  47. package/lib/es/calendar/dayCol.d.ts +2 -0
  48. package/lib/es/calendar/dayCol.js +6 -6
  49. package/lib/es/calendar/index.d.ts +1 -0
  50. package/lib/es/calendar/index.js +1 -0
  51. package/lib/es/calendar/interface.d.ts +2 -1
  52. package/lib/es/calendar/rangeCalendar.js +4 -2
  53. package/lib/es/calendar/weekCalendar.js +4 -2
  54. package/lib/es/modal/Modal.d.ts +1 -1
  55. package/lib/es/modal/Modal.js +1 -1
  56. package/lib/es/navigation/SubNav.d.ts +1 -1
  57. package/lib/es/navigation/SubNav.js +1 -1
  58. package/lib/es/popconfirm/index.d.ts +1 -1
  59. package/lib/es/popconfirm/index.js +1 -1
  60. package/lib/es/sideSheet/SideSheetContent.d.ts +3 -1
  61. package/lib/es/sideSheet/SideSheetContent.js +6 -3
  62. package/lib/es/table/Body/BaseRow.d.ts +3 -0
  63. package/lib/es/table/Body/BaseRow.js +4 -1
  64. package/lib/es/table/Body/ExpandedRow.d.ts +1 -0
  65. package/lib/es/table/Body/ExpandedRow.js +4 -2
  66. package/lib/es/table/Body/index.d.ts +3 -0
  67. package/lib/es/table/Body/index.js +18 -10
  68. package/lib/es/table/interface.d.ts +1 -0
  69. package/lib/es/timePicker/TimePicker.d.ts +3 -0
  70. package/lib/es/timePicker/TimePicker.js +7 -3
  71. package/lib/es/timePicker/index.d.ts +2 -0
  72. package/lib/es/toast/toast.d.ts +1 -1
  73. package/lib/es/toast/toast.js +1 -1
  74. package/lib/es/typography/util.js +5 -6
  75. package/package.json +8 -8
@@ -49,7 +49,6 @@ const getRenderText = function (originEle, rows) {
49
49
  const lineHeight = pxToNumber(originStyle.lineHeight);
50
50
  const maxHeight = Math.round(lineHeight * (rows + 1) + pxToNumber(originStyle.paddingTop) + pxToNumber(originStyle.paddingBottom));
51
51
  // Set shadow
52
- const maxWidth = parseInt(originStyle.width);
53
52
  ellipsisContainer.setAttribute('style', originCSS);
54
53
  ellipsisContainer.style.position = 'fixed';
55
54
  ellipsisContainer.style.left = '0';
@@ -61,12 +60,12 @@ const getRenderText = function (originEle, rows) {
61
60
  ellipsisContainer.style.webkitLineClamp = 'none';
62
61
  // Render fake container
63
62
  _reactDom.default.render( /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null), ellipsisContainer);
64
- // Check if ellipsis in measure div is height enough for content
63
+ // Check if ellipsis in measure div is enough for content
65
64
  function inRange() {
66
- if (originStyle.whiteSpace === 'nowrap') {
67
- return ellipsisContainer.scrollWidth <= maxWidth;
68
- }
69
- return ellipsisContainer.scrollHeight < maxHeight;
65
+ // If content does not wrap due to line break strategy, width should be judged to determine whether it's in range
66
+ const widthInRange = ellipsisContainer.scrollWidth <= ellipsisContainer.offsetWidth;
67
+ const heightInRange = ellipsisContainer.scrollHeight < maxHeight;
68
+ return rows === 1 ? widthInRange && heightInRange : heightInRange;
70
69
  }
71
70
  // ========================= Find match ellipsis content =========================
72
71
  // Create origin content holder
@@ -26,8 +26,8 @@ export default class Banner extends BaseComponent<BannerProps, BannerState> {
26
26
  type: PropTypes.Requireable<string>;
27
27
  title: PropTypes.Requireable<PropTypes.ReactNodeLike>;
28
28
  description: PropTypes.Requireable<PropTypes.ReactNodeLike>;
29
- icon: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
30
- closeIcon: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
29
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
30
+ closeIcon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
31
31
  children: PropTypes.Requireable<PropTypes.ReactNodeLike>;
32
32
  style: PropTypes.Requireable<object>;
33
33
  className: PropTypes.Requireable<string>;
@@ -159,8 +159,8 @@ Banner.propTypes = {
159
159
  type: PropTypes.oneOf(types),
160
160
  title: PropTypes.node,
161
161
  description: PropTypes.node,
162
- icon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
163
- closeIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
162
+ icon: PropTypes.node,
163
+ closeIcon: PropTypes.node,
164
164
  children: PropTypes.node,
165
165
  style: PropTypes.object,
166
166
  className: PropTypes.string,
@@ -29,7 +29,7 @@ export default class BreadcrumbItem extends BaseComponent<BreadcrumbItemProps, B
29
29
  children: propTypes.Requireable<propTypes.ReactNodeLike>;
30
30
  active: propTypes.Requireable<boolean>;
31
31
  shouldRenderSeparator: propTypes.Requireable<boolean>;
32
- icon: propTypes.Requireable<NonNullable<propTypes.ReactNodeLike>>;
32
+ icon: propTypes.Requireable<propTypes.ReactNodeLike>;
33
33
  separator: propTypes.Requireable<propTypes.ReactNodeLike>;
34
34
  noLink: propTypes.Requireable<boolean>;
35
35
  };
@@ -178,7 +178,7 @@ BreadcrumbItem.propTypes = {
178
178
  children: propTypes.node,
179
179
  active: propTypes.bool,
180
180
  shouldRenderSeparator: propTypes.bool,
181
- icon: propTypes.oneOfType([propTypes.string, propTypes.node]),
181
+ icon: propTypes.node,
182
182
  separator: propTypes.node,
183
183
  noLink: propTypes.bool
184
184
  };
@@ -20,6 +20,7 @@ export default class DayCalendar extends BaseComponent<DayCalendarProps, DayCale
20
20
  mode: PropTypes.Requireable<string>;
21
21
  renderTimeDisplay: PropTypes.Requireable<(...args: any[]) => any>;
22
22
  markWeekend: PropTypes.Requireable<boolean>;
23
+ minEventHeight: PropTypes.Requireable<number>;
23
24
  scrollTop: PropTypes.Requireable<number>;
24
25
  width: PropTypes.Requireable<NonNullable<string | number>>;
25
26
  height: PropTypes.Requireable<NonNullable<string | number>>;
@@ -118,7 +118,8 @@ export default class DayCalendar extends BaseComponent {
118
118
  height,
119
119
  width,
120
120
  style,
121
- header
121
+ header,
122
+ minEventHeight
122
123
  } = this.props;
123
124
  const dayCls = cls(prefixCls, className);
124
125
  const dayStyle = Object.assign({
@@ -151,6 +152,7 @@ export default class DayCalendar extends BaseComponent {
151
152
  handleClick: this.handleClick,
152
153
  showCurrTime: showCurrTime,
153
154
  isWeekend: this.isWeekend,
155
+ minEventHeight: minEventHeight,
154
156
  dateGridRender: dateGridRender
155
157
  }))));
156
158
  }
@@ -164,6 +166,7 @@ DayCalendar.propTypes = {
164
166
  mode: PropTypes.string,
165
167
  renderTimeDisplay: PropTypes.func,
166
168
  markWeekend: PropTypes.bool,
169
+ minEventHeight: PropTypes.number,
167
170
  scrollTop: PropTypes.number,
168
171
  width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
169
172
  height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -17,6 +17,7 @@ export default class DayCol extends BaseComponent<DayColProps, DayColState> {
17
17
  currPos: PropTypes.Requireable<number>;
18
18
  handleClick: PropTypes.Requireable<(...args: any[]) => any>;
19
19
  mode: PropTypes.Requireable<string>;
20
+ minEventHeight: PropTypes.Requireable<number>;
20
21
  isWeekend: PropTypes.Requireable<boolean>;
21
22
  dateGridRender: PropTypes.Requireable<(...args: any[]) => any>;
22
23
  };
@@ -26,6 +27,7 @@ export default class DayCol extends BaseComponent<DayColProps, DayColState> {
26
27
  scrollHeight: number;
27
28
  currPos: number;
28
29
  mode: string;
30
+ minEventHeight: number;
29
31
  };
30
32
  static contextType: React.Context<import("../locale/interface").Locale>;
31
33
  foundation: CalendarFoundation;
@@ -17,7 +17,8 @@ export default class DayCol extends BaseComponent {
17
17
  this.renderEvents = () => {
18
18
  const {
19
19
  events,
20
- scrollHeight
20
+ scrollHeight,
21
+ minEventHeight
21
22
  } = this.props;
22
23
  const list = events.map((event, ind) => {
23
24
  const {
@@ -28,12 +29,9 @@ export default class DayCol extends BaseComponent {
28
29
  } = event;
29
30
  const top = startPos * scrollHeight;
30
31
  const height = (endPos - startPos) * scrollHeight;
31
- if (!height) {
32
- return undefined;
33
- }
34
32
  const style = {
35
33
  top: `${top}px`,
36
- height: `${height}px`
34
+ height: `${Math.max(minEventHeight, height)}px`
37
35
  };
38
36
  return /*#__PURE__*/React.createElement("li", {
39
37
  className: `${cssClasses.PREFIX}-event-item ${cssClasses.PREFIX}-event-day`,
@@ -147,6 +145,7 @@ DayCol.propTypes = {
147
145
  currPos: PropTypes.number,
148
146
  handleClick: PropTypes.func,
149
147
  mode: PropTypes.string,
148
+ minEventHeight: PropTypes.number,
150
149
  isWeekend: PropTypes.bool,
151
150
  dateGridRender: PropTypes.func
152
151
  };
@@ -155,6 +154,7 @@ DayCol.defaultProps = {
155
154
  showCurrTime: true,
156
155
  scrollHeight: 0,
157
156
  currPos: 0,
158
- mode: 'dayCol'
157
+ mode: 'dayCol',
158
+ minEventHeight: Number.MIN_SAFE_INTEGER
159
159
  };
160
160
  DayCol.contextType = localeContext;
@@ -24,6 +24,7 @@ declare class Calendar extends BaseComponent<CalendarProps, {}> {
24
24
  renderTimeDisplay: PropTypes.Requireable<(...args: any[]) => any>;
25
25
  renderDateDisplay: PropTypes.Requireable<(...args: any[]) => any>;
26
26
  markWeekend: PropTypes.Requireable<boolean>;
27
+ minEventHeight: PropTypes.Requireable<number>;
27
28
  width: PropTypes.Requireable<NonNullable<string | number>>;
28
29
  height: PropTypes.Requireable<NonNullable<string | number>>;
29
30
  style: PropTypes.Requireable<object>;
@@ -50,6 +50,7 @@ Calendar.propTypes = {
50
50
  renderTimeDisplay: PropTypes.func,
51
51
  renderDateDisplay: PropTypes.func,
52
52
  markWeekend: PropTypes.bool,
53
+ minEventHeight: PropTypes.number,
53
54
  width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
54
55
  height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
55
56
  style: PropTypes.object,
@@ -16,6 +16,7 @@ export interface CalendarProps extends BaseProps {
16
16
  onClose?: (e: React.MouseEvent) => void;
17
17
  renderTimeDisplay?: (time: number) => React.ReactNode;
18
18
  markWeekend?: boolean;
19
+ minEventHeight?: number;
19
20
  width?: number | string;
20
21
  height?: number | string;
21
22
  renderDateDisplay?: (date: Date) => React.ReactNode;
@@ -23,7 +24,7 @@ export interface CalendarProps extends BaseProps {
23
24
  allDayEventsRender?: (events: EventObject[]) => React.ReactNode;
24
25
  }
25
26
  export type DayCalendarProps = Omit<CalendarProps, 'mode'>;
26
- type DayCalendarPropsKeys = 'events' | 'displayValue' | 'showCurrTime' | 'mode' | 'dateGridRender';
27
+ type DayCalendarPropsKeys = 'events' | 'displayValue' | 'showCurrTime' | 'mode' | 'dateGridRender' | 'minEventHeight';
27
28
  export interface DayColProps extends Pick<CalendarProps, DayCalendarPropsKeys>, BaseProps {
28
29
  scrollHeight: number;
29
30
  currPos: number;
@@ -37,7 +37,8 @@ export default class RangeCalendar extends BaseComponent {
37
37
  } = this.RangeData;
38
38
  const {
39
39
  markWeekend,
40
- dateGridRender
40
+ dateGridRender,
41
+ minEventHeight
41
42
  } = this.props;
42
43
  const inner = week.map(day => {
43
44
  const dateString = day.date.toString();
@@ -51,7 +52,8 @@ export default class RangeCalendar extends BaseComponent {
51
52
  events: parsed.day,
52
53
  showCurrTime: this.props.showCurrTime,
53
54
  isWeekend: markWeekend && day.isWeekend,
54
- dateGridRender: dateGridRender
55
+ dateGridRender: dateGridRender,
56
+ minEventHeight: minEventHeight
55
57
  });
56
58
  });
57
59
  return inner;
@@ -38,7 +38,8 @@ export default class WeekCalendar extends BaseComponent {
38
38
  } = this.weeklyData;
39
39
  const {
40
40
  markWeekend,
41
- dateGridRender
41
+ dateGridRender,
42
+ minEventHeight
42
43
  } = this.props;
43
44
  const inner = week.map(day => {
44
45
  const dateString = day.date.toString();
@@ -52,7 +53,8 @@ export default class WeekCalendar extends BaseComponent {
52
53
  events: parsed.day,
53
54
  showCurrTime: this.props.showCurrTime,
54
55
  isWeekend: markWeekend && day.isWeekend,
55
- dateGridRender: dateGridRender
56
+ dateGridRender: dateGridRender,
57
+ minEventHeight: minEventHeight
56
58
  });
57
59
  });
58
60
  return inner;
@@ -59,7 +59,7 @@ declare class Modal extends BaseComponent<ModalReactProps, ModalState> {
59
59
  getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
60
60
  getContainerContext: PropTypes.Requireable<(...args: any[]) => any>;
61
61
  maskFixed: PropTypes.Requireable<boolean>;
62
- closeIcon: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
62
+ closeIcon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
63
63
  closeOnEsc: PropTypes.Requireable<boolean>;
64
64
  size: PropTypes.Requireable<string>;
65
65
  keepDOM: PropTypes.Requireable<boolean>;
@@ -293,7 +293,7 @@ Modal.propTypes = {
293
293
  getPopupContainer: PropTypes.func,
294
294
  getContainerContext: PropTypes.func,
295
295
  maskFixed: PropTypes.bool,
296
- closeIcon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
296
+ closeIcon: PropTypes.node,
297
297
  closeOnEsc: PropTypes.bool,
298
298
  size: PropTypes.oneOf(strings.SIZE),
299
299
  keepDOM: PropTypes.bool,
@@ -53,7 +53,7 @@ export default class SubNav extends BaseComponent<SubNavProps, SubNavState> {
53
53
  /**
54
54
  * Icon name on the left
55
55
  */
56
- icon: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
56
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
57
57
  /**
58
58
  * Maximum height (for animation)
59
59
  */
@@ -346,7 +346,7 @@ SubNav.propTypes = {
346
346
  /**
347
347
  * Icon name on the left
348
348
  */
349
- icon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
349
+ icon: PropTypes.node,
350
350
  /**
351
351
  * Maximum height (for animation)
352
352
  */
@@ -46,7 +46,7 @@ export default class Popconfirm extends BaseComponent<PopconfirmProps, Popconfir
46
46
  prefixCls: PropTypes.Requireable<string>;
47
47
  className: PropTypes.Requireable<string>;
48
48
  style: PropTypes.Requireable<object>;
49
- icon: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
49
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
50
50
  okText: PropTypes.Requireable<string>;
51
51
  okType: PropTypes.Requireable<string>;
52
52
  cancelText: PropTypes.Requireable<string>;
@@ -233,7 +233,7 @@ Popconfirm.propTypes = {
233
233
  prefixCls: PropTypes.string,
234
234
  className: PropTypes.string,
235
235
  style: PropTypes.object,
236
- icon: PropTypes.oneOfType([PropTypes.string, PropTypes.node]),
236
+ icon: PropTypes.node,
237
237
  okText: PropTypes.string,
238
238
  okType: PropTypes.string,
239
239
  cancelText: PropTypes.string,
@@ -1,8 +1,9 @@
1
- import React, { CSSProperties } from 'react';
1
+ import React, { CSSProperties, ReactNode } from 'react';
2
2
  import PropTypes from 'prop-types';
3
3
  import { SideSheetProps } from '@douyinfe/semi-foundation/lib/es/sideSheet/sideSheetFoundation';
4
4
  export interface SideSheetContentProps {
5
5
  onClose?: (e: React.MouseEvent) => void;
6
+ closeIcon?: ReactNode;
6
7
  mask?: boolean;
7
8
  maskStyle?: CSSProperties;
8
9
  maskClosable?: boolean;
@@ -30,6 +31,7 @@ export interface SideSheetContentProps {
30
31
  export default class SideSheetContent extends React.PureComponent<SideSheetContentProps> {
31
32
  static propTypes: {
32
33
  onClose: PropTypes.Requireable<(...args: any[]) => any>;
34
+ closeIcon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
33
35
  };
34
36
  static defaultProps: {
35
37
  onClose: (...args: any[]) => void;
@@ -59,7 +59,8 @@ export default class SideSheetContent extends React.PureComponent {
59
59
  const {
60
60
  title,
61
61
  closable,
62
- headerStyle
62
+ headerStyle,
63
+ closeIcon
63
64
  } = this.props;
64
65
  let header, closer;
65
66
  if (title) {
@@ -69,12 +70,13 @@ export default class SideSheetContent extends React.PureComponent {
69
70
  }, this.props.title);
70
71
  }
71
72
  if (closable) {
73
+ const iconType = closeIcon || /*#__PURE__*/React.createElement(IconClose, null);
72
74
  closer = /*#__PURE__*/React.createElement(Button, {
73
75
  className: `${prefixCls}-close`,
74
76
  key: "close-btn",
75
77
  onClick: this.close,
76
78
  type: "tertiary",
77
- icon: /*#__PURE__*/React.createElement(IconClose, null),
79
+ icon: iconType,
78
80
  theme: "borderless",
79
81
  size: "small"
80
82
  });
@@ -160,7 +162,8 @@ export default class SideSheetContent extends React.PureComponent {
160
162
  }
161
163
  }
162
164
  SideSheetContent.propTypes = {
163
- onClose: PropTypes.func
165
+ onClose: PropTypes.func,
166
+ closeIcon: PropTypes.node
164
167
  };
165
168
  SideSheetContent.defaultProps = {
166
169
  onClose: _noop
@@ -43,6 +43,8 @@ export interface BaseRowProps {
43
43
  style?: React.CSSProperties;
44
44
  virtualized?: Virtualized;
45
45
  visible: boolean;
46
+ /** whether display none */
47
+ displayNone?: boolean;
46
48
  }
47
49
  export default class TableRow extends BaseComponent<BaseRowProps, Record<string, any>> {
48
50
  static propTypes: {
@@ -55,6 +57,7 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
55
57
  expandIcon: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike | ((...args: any[]) => any)>>;
56
58
  expandableRow: PropTypes.Requireable<boolean>;
57
59
  expanded: PropTypes.Requireable<boolean>;
60
+ displayNone: PropTypes.Requireable<boolean>;
58
61
  expandedRow: PropTypes.Requireable<boolean>;
59
62
  fixed: PropTypes.Requireable<NonNullable<string | boolean>>;
60
63
  height: PropTypes.Requireable<NonNullable<string | number>>;
@@ -212,6 +212,7 @@ export default class TableRow extends BaseComponent {
212
212
  record,
213
213
  hovered,
214
214
  expanded,
215
+ displayNone,
215
216
  expandableRow,
216
217
  level,
217
218
  expandedRow,
@@ -229,7 +230,8 @@ export default class TableRow extends BaseComponent {
229
230
  const rowCls = typeof replaceClassName === 'string' && replaceClassName.length ? replaceClassName : classnames(className, `${prefixCls}-row`, {
230
231
  [`${prefixCls}-row-selected`]: selected,
231
232
  [`${prefixCls}-row-expanded`]: expanded,
232
- [`${prefixCls}-row-hovered`]: hovered
233
+ [`${prefixCls}-row-hovered`]: hovered,
234
+ [`${prefixCls}-row-hidden`]: displayNone
233
235
  }, customClassName);
234
236
  const ariaProps = {};
235
237
  if (typeof index === 'number') {
@@ -270,6 +272,7 @@ TableRow.propTypes = {
270
272
  expandIcon: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.node]),
271
273
  expandableRow: PropTypes.bool,
272
274
  expanded: PropTypes.bool,
275
+ displayNone: PropTypes.bool,
273
276
  expandedRow: PropTypes.bool,
274
277
  fixed: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
275
278
  height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
@@ -23,6 +23,7 @@ export interface TableExpandedRowProps {
23
23
  store?: Store;
24
24
  style?: React.CSSProperties;
25
25
  virtualized?: Virtualized;
26
+ displayNone?: boolean;
26
27
  }
27
28
  /**
28
29
  * Render expanded row
@@ -36,7 +36,8 @@ export default class TableExpandedRow extends PureComponent {
36
36
  style,
37
37
  virtualized,
38
38
  indentSize,
39
- cellWidths
39
+ cellWidths,
40
+ displayNone
40
41
  } = this.props;
41
42
  const {
42
43
  tableWidth,
@@ -95,7 +96,8 @@ export default class TableExpandedRow extends PureComponent {
95
96
  store: store,
96
97
  virtualized: virtualized,
97
98
  indentSize: indentSize,
98
- cellWidths: baseRowCellWidths
99
+ cellWidths: baseRowCellWidths,
100
+ displayNone: displayNone
99
101
  });
100
102
  }
101
103
  }
@@ -32,6 +32,7 @@ export interface BodyProps extends BaseProps {
32
32
  renderExpandIcon: (record: Record<string, any>, isNested: boolean) => ReactNode | null;
33
33
  headerRef?: React.MutableRefObject<HTMLDivElement> | ((instance: any) => void);
34
34
  onScroll?: VirtualizedOnScroll;
35
+ keepDOM?: boolean;
35
36
  }
36
37
  export interface BodyState {
37
38
  virtualizedData?: Array<FlattenData | GroupFlattenData>;
@@ -61,6 +62,8 @@ export interface RenderExpandedRowProps {
61
62
  rowKey?: RowKey<Record<string, any>>;
62
63
  virtualized?: Virtualized;
63
64
  level?: number;
65
+ keepDOM?: boolean;
66
+ displayNone?: boolean;
64
67
  }
65
68
  export interface RenderSectionRowProps {
66
69
  dataSource?: Record<string, any>[];
@@ -301,7 +301,8 @@ class Body extends BaseComponent {
301
301
  expanded,
302
302
  index,
303
303
  rowKey,
304
- virtualized
304
+ virtualized,
305
+ displayNone
305
306
  } = props;
306
307
  let key = getRecordKey(record, rowKey);
307
308
  if (key == null) {
@@ -327,7 +328,8 @@ class Body extends BaseComponent {
327
328
  index: index,
328
329
  virtualized: virtualized,
329
330
  key: genExpandedRowKey(key),
330
- cellWidths: _this.cellWidths
331
+ cellWidths: _this.cellWidths,
332
+ displayNone: displayNone
331
333
  });
332
334
  };
333
335
  /**
@@ -339,7 +341,8 @@ class Body extends BaseComponent {
339
341
  groups,
340
342
  dataSource: data,
341
343
  rowKey,
342
- expandedRowKeys
344
+ expandedRowKeys,
345
+ keepDOM
343
346
  } = this.props;
344
347
  const {
345
348
  flattenedColumns
@@ -374,7 +377,7 @@ class Body extends BaseComponent {
374
377
  expanded
375
378
  })));
376
379
  // Render the grouped content when the group is expanded
377
- if (expanded) {
380
+ if (expanded || keepDOM) {
378
381
  const dataInGroup = [];
379
382
  group.forEach(recordKey => {
380
383
  const record = getRecord(data, recordKey, rowKey);
@@ -385,7 +388,7 @@ class Body extends BaseComponent {
385
388
  /**
386
389
  * Render the contents of the group row
387
390
  */
388
- renderedRows.push(this.renderBodyRows(dataInGroup));
391
+ renderedRows.push(this.renderBodyRows(dataInGroup, undefined, [], !expanded));
389
392
  }
390
393
  });
391
394
  return renderedRows;
@@ -629,12 +632,14 @@ class Body extends BaseComponent {
629
632
  let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
630
633
  let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
631
634
  let renderedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
635
+ let displayNone = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
632
636
  const {
633
637
  rowKey,
634
638
  expandedRowRender,
635
639
  expandedRowKeys,
636
640
  childrenRecordName,
637
- rowExpandable
641
+ rowExpandable,
642
+ keepDOM
638
643
  } = this.props;
639
644
  const hasExpandedRowRender = typeof expandedRowRender === 'function';
640
645
  const expandBtnShouldInRow = this.state.cachedExpandBtnShouldInRow;
@@ -651,6 +656,7 @@ class Body extends BaseComponent {
651
656
  renderedRows.push(this.renderBaseRow(Object.assign(Object.assign({}, this.props), {
652
657
  columns: flattenedColumns,
653
658
  expandBtnShouldInRow,
659
+ displayNone,
654
660
  record,
655
661
  key,
656
662
  level,
@@ -658,13 +664,15 @@ class Body extends BaseComponent {
658
664
  })));
659
665
  // render expand row
660
666
  const expanded = isExpanded(expandedRowKeys, key);
661
- if (hasExpandedRowRender && rowExpandable && rowExpandable(record) && expanded) {
667
+ const shouldRenderExpandedRows = expanded || keepDOM;
668
+ if (hasExpandedRowRender && rowExpandable && rowExpandable(record) && shouldRenderExpandedRows) {
662
669
  const currentExpandRow = this.renderExpandedRow(Object.assign(Object.assign({}, this.props), {
663
670
  columns: flattenedColumns,
664
671
  level,
665
672
  index,
666
673
  record,
667
- expanded
674
+ expanded,
675
+ displayNone: displayNone || !expanded
668
676
  }));
669
677
  /**
670
678
  * If expandedRowRender returns falsy, this expanded row will not be rendered
@@ -675,8 +683,8 @@ class Body extends BaseComponent {
675
683
  }
676
684
  }
677
685
  // render tree data
678
- if (recordHasChildren && expanded) {
679
- const nestedRows = this.renderBodyRows(recordChildren, level + 1);
686
+ if (recordHasChildren && shouldRenderExpandedRows) {
687
+ const nestedRows = this.renderBodyRows(recordChildren, level + 1, [], displayNone || !expanded);
680
688
  renderedRows.push(...nestedRows);
681
689
  }
682
690
  });
@@ -34,6 +34,7 @@ export interface TableProps<RecordType extends Record<string, any> = any> extend
34
34
  hideExpandedColumn?: boolean;
35
35
  id?: string;
36
36
  indentSize?: number;
37
+ keepDOM?: boolean;
37
38
  loading?: boolean;
38
39
  pagination?: TablePagination;
39
40
  prefixCls?: string;
@@ -63,6 +63,7 @@ export type TimePickerProps = {
63
63
  secondStep?: number;
64
64
  showClear?: boolean;
65
65
  size?: InputSize;
66
+ stopPropagation: boolean;
66
67
  style?: React.CSSProperties;
67
68
  timeZone?: string | number;
68
69
  triggerRender?: (props?: any) => React.ReactNode;
@@ -133,6 +134,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
133
134
  focusOnOpen: PropTypes.Requireable<boolean>;
134
135
  autoFocus: PropTypes.Requireable<boolean>;
135
136
  size: PropTypes.Requireable<"default" | "small" | "large">;
137
+ stopPropagation: PropTypes.Requireable<boolean>;
136
138
  panels: PropTypes.Requireable<PropTypes.InferProps<{
137
139
  panelHeader: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
138
140
  panelFooter: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
@@ -166,6 +168,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
166
168
  prefixCls: string;
167
169
  inputReadOnly: boolean;
168
170
  style: {};
171
+ stopPropagation: boolean;
169
172
  className: string;
170
173
  popupClassName: string;
171
174
  popupStyle: {
@@ -262,9 +262,10 @@ export default class TimePicker extends BaseComponent {
262
262
  scrollItemProps,
263
263
  triggerRender,
264
264
  motion,
265
- autoAdjustOverflow
265
+ autoAdjustOverflow,
266
+ stopPropagation
266
267
  } = _a,
267
- rest = __rest(_a, ["prefixCls", "placeholder", "disabled", "defaultValue", "dropdownMargin", "className", "popupStyle", "size", "style", "locale", "localeCode", "zIndex", "getPopupContainer", "insetLabel", "insetLabelId", "inputStyle", "showClear", "panelHeader", "panelFooter", "rangeSeparator", "onOpenChange", "onChangeWithDateFirst", "popupClassName", "hideDisabledOptions", "use12Hours", "minuteStep", "hourStep", "secondStep", "scrollItemProps", "triggerRender", "motion", "autoAdjustOverflow"]);
268
+ rest = __rest(_a, ["prefixCls", "placeholder", "disabled", "defaultValue", "dropdownMargin", "className", "popupStyle", "size", "style", "locale", "localeCode", "zIndex", "getPopupContainer", "insetLabel", "insetLabelId", "inputStyle", "showClear", "panelHeader", "panelFooter", "rangeSeparator", "onOpenChange", "onChangeWithDateFirst", "popupClassName", "hideDisabledOptions", "use12Hours", "minuteStep", "hourStep", "secondStep", "scrollItemProps", "triggerRender", "motion", "autoAdjustOverflow", "stopPropagation"]);
268
269
  const format = this.foundation.getDefaultFormatIfNeed();
269
270
  const position = this.foundation.getPosition();
270
271
  const useCustomTrigger = typeof triggerRender === 'function';
@@ -322,7 +323,8 @@ export default class TimePicker extends BaseComponent {
322
323
  visible: disabled ? false : Boolean(open),
323
324
  motion: motion,
324
325
  margin: dropdownMargin,
325
- autoAdjustOverflow: autoAdjustOverflow
326
+ autoAdjustOverflow: autoAdjustOverflow,
327
+ stopPropagation: stopPropagation
326
328
  }, useCustomTrigger ? /*#__PURE__*/React.createElement(Trigger, {
327
329
  triggerRender: triggerRender,
328
330
  disabled: disabled,
@@ -377,6 +379,7 @@ TimePicker.propTypes = Object.assign(Object.assign({
377
379
  focusOnOpen: PropTypes.bool,
378
380
  autoFocus: PropTypes.bool,
379
381
  size: PropTypes.oneOf(strings.SIZE),
382
+ stopPropagation: PropTypes.bool,
380
383
  panels: PropTypes.arrayOf(PropTypes.shape(PanelShape)),
381
384
  onFocus: PropTypes.func,
382
385
  onBlur: PropTypes.func,
@@ -410,6 +413,7 @@ TimePicker.defaultProps = Object.assign({
410
413
  prefixCls: cssClasses.PREFIX,
411
414
  inputReadOnly: false,
412
415
  style: {},
416
+ stopPropagation: true,
413
417
  className: '',
414
418
  popupClassName: '',
415
419
  popupStyle: {
@@ -50,6 +50,7 @@ export default class LocaleTimePicker extends React.PureComponent<LocalePickerPr
50
50
  focusOnOpen: import("prop-types").Requireable<boolean>;
51
51
  autoFocus: import("prop-types").Requireable<boolean>;
52
52
  size: import("prop-types").Requireable<"default" | "small" | "large">;
53
+ stopPropagation: import("prop-types").Requireable<boolean>;
53
54
  panels: import("prop-types").Requireable<import("prop-types").InferProps<{
54
55
  panelHeader: import("prop-types").Requireable<NonNullable<import("prop-types").ReactNodeLike>>;
55
56
  panelFooter: import("prop-types").Requireable<NonNullable<import("prop-types").ReactNodeLike>>;
@@ -83,6 +84,7 @@ export default class LocaleTimePicker extends React.PureComponent<LocalePickerPr
83
84
  prefixCls: string;
84
85
  inputReadOnly: boolean;
85
86
  style: {};
87
+ stopPropagation: boolean;
86
88
  className: string;
87
89
  popupClassName: string;
88
90
  popupStyle: {
@@ -32,7 +32,7 @@ declare class Toast extends BaseComponent<ToastReactProps, ToastState> {
32
32
  showClose: PropTypes.Requireable<boolean>;
33
33
  stack: PropTypes.Requireable<boolean>;
34
34
  stackExpanded: PropTypes.Requireable<boolean>;
35
- icon: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
35
+ icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
36
36
  direction: PropTypes.Requireable<string>;
37
37
  };
38
38
  static defaultProps: {