@douyinfe/semi-ui 2.35.0 → 2.36.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 +142 -17
  2. package/dist/css/semi.min.css +1 -1
  3. package/dist/umd/semi-ui.js +193 -106
  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/anchor/index.d.ts +2 -1
  8. package/lib/cjs/anchor/link.js +13 -6
  9. package/lib/cjs/calendar/dayCalendar.d.ts +2 -1
  10. package/lib/cjs/calendar/dayCalendar.js +7 -2
  11. package/lib/cjs/calendar/index.d.ts +1 -0
  12. package/lib/cjs/calendar/index.js +1 -0
  13. package/lib/cjs/calendar/interface.d.ts +2 -0
  14. package/lib/cjs/calendar/monthCalendar.d.ts +1 -1
  15. package/lib/cjs/calendar/monthCalendar.js +12 -4
  16. package/lib/cjs/calendar/rangeCalendar.d.ts +3 -1
  17. package/lib/cjs/calendar/rangeCalendar.js +23 -9
  18. package/lib/cjs/calendar/weekCalendar.d.ts +3 -1
  19. package/lib/cjs/calendar/weekCalendar.js +23 -9
  20. package/lib/cjs/datePicker/datePicker.js +12 -4
  21. package/lib/cjs/datePicker/monthsGrid.js +6 -2
  22. package/lib/cjs/datePicker/yearAndMonth.d.ts +2 -0
  23. package/lib/cjs/datePicker/yearAndMonth.js +4 -2
  24. package/lib/cjs/input/textarea.d.ts +1 -1
  25. package/lib/cjs/navigation/Footer.d.ts +3 -0
  26. package/lib/cjs/navigation/Footer.js +19 -9
  27. package/lib/cjs/navigation/SubNav.d.ts +1 -13
  28. package/lib/cjs/navigation/SubNav.js +4 -19
  29. package/lib/cjs/navigation/index.d.ts +4 -1
  30. package/lib/cjs/navigation/index.js +7 -1
  31. package/lib/cjs/select/index.d.ts +2 -1
  32. package/lib/cjs/select/index.js +4 -0
  33. package/lib/cjs/table/Body/index.d.ts +1 -1
  34. package/lib/cjs/table/ResizableTable.d.ts +1 -1
  35. package/lib/cjs/table/TableHeaderRow.js +22 -14
  36. package/lib/cjs/table/interface.d.ts +5 -1
  37. package/lib/cjs/typography/base.d.ts +1 -0
  38. package/lib/cjs/typography/base.js +28 -14
  39. package/lib/cjs/typography/title.d.ts +2 -0
  40. package/lib/cjs/typography/title.js +2 -1
  41. package/lib/es/anchor/index.d.ts +2 -1
  42. package/lib/es/anchor/link.js +12 -6
  43. package/lib/es/calendar/dayCalendar.d.ts +2 -1
  44. package/lib/es/calendar/dayCalendar.js +7 -2
  45. package/lib/es/calendar/index.d.ts +1 -0
  46. package/lib/es/calendar/index.js +1 -0
  47. package/lib/es/calendar/interface.d.ts +2 -0
  48. package/lib/es/calendar/monthCalendar.d.ts +1 -1
  49. package/lib/es/calendar/monthCalendar.js +12 -4
  50. package/lib/es/calendar/rangeCalendar.d.ts +3 -1
  51. package/lib/es/calendar/rangeCalendar.js +19 -9
  52. package/lib/es/calendar/weekCalendar.d.ts +3 -1
  53. package/lib/es/calendar/weekCalendar.js +19 -9
  54. package/lib/es/datePicker/datePicker.js +12 -4
  55. package/lib/es/datePicker/monthsGrid.js +6 -2
  56. package/lib/es/datePicker/yearAndMonth.d.ts +2 -0
  57. package/lib/es/datePicker/yearAndMonth.js +4 -2
  58. package/lib/es/input/textarea.d.ts +1 -1
  59. package/lib/es/navigation/Footer.d.ts +3 -0
  60. package/lib/es/navigation/Footer.js +16 -7
  61. package/lib/es/navigation/SubNav.d.ts +1 -13
  62. package/lib/es/navigation/SubNav.js +5 -20
  63. package/lib/es/navigation/index.d.ts +4 -1
  64. package/lib/es/navigation/index.js +7 -1
  65. package/lib/es/select/index.d.ts +2 -1
  66. package/lib/es/select/index.js +4 -0
  67. package/lib/es/table/Body/index.d.ts +1 -1
  68. package/lib/es/table/ResizableTable.d.ts +1 -1
  69. package/lib/es/table/TableHeaderRow.js +22 -14
  70. package/lib/es/table/interface.d.ts +5 -1
  71. package/lib/es/typography/base.d.ts +1 -0
  72. package/lib/es/typography/base.js +28 -14
  73. package/lib/es/typography/title.d.ts +2 -0
  74. package/lib/es/typography/title.js +2 -1
  75. package/package.json +8 -9
@@ -180,7 +180,8 @@ class SubNav extends _baseComponent.default {
180
180
  itemKey,
181
181
  indent,
182
182
  disabled,
183
- level
183
+ level,
184
+ expandIcon
184
185
  } = this.props;
185
186
  const {
186
187
  mode,
@@ -210,7 +211,7 @@ class SubNav extends _baseComponent.default {
210
211
  "aria-hidden": true
211
212
  });
212
213
  } else {
213
- toggleIconType = /*#__PURE__*/_react.default.createElement(_semiIcons.IconChevronDown, {
214
+ toggleIconType = expandIcon ? expandIcon : /*#__PURE__*/_react.default.createElement(_semiIcons.IconChevronDown, {
214
215
  "aria-hidden": true
215
216
  }); // Horizontal mode does not require animation fix#1198
216
217
  // withTransition = true;
@@ -220,7 +221,7 @@ class SubNav extends _baseComponent.default {
220
221
  withTransition = true;
221
222
  }
222
223
 
223
- toggleIconType = /*#__PURE__*/_react.default.createElement(_semiIcons.IconChevronDown, {
224
+ toggleIconType = expandIcon ? expandIcon : /*#__PURE__*/_react.default.createElement(_semiIcons.IconChevronDown, {
224
225
  "aria-hidden": true
225
226
  });
226
227
  }
@@ -410,14 +411,6 @@ SubNav.propTypes = {
410
411
  * Nested child elements
411
412
  */
412
413
  children: _propTypes.default.node,
413
-
414
- /**
415
- * The icon name of the right control switch (on and off status)
416
- */
417
- toggleIcon: _propTypes.default.oneOfType([_propTypes.default.any, _propTypes.default.shape({
418
- open: _propTypes.default.string,
419
- closed: _propTypes.default.string
420
- })]),
421
414
  style: _propTypes.default.object,
422
415
 
423
416
  /**
@@ -441,13 +434,5 @@ SubNav.defaultProps = {
441
434
  isCollapsed: false,
442
435
  isOpen: false,
443
436
  maxHeight: _constants.numbers.DEFAULT_SUBNAV_MAX_HEIGHT,
444
- toggleIcon: {
445
- open: /*#__PURE__*/_react.default.createElement(_semiIcons.IconChevronUp, {
446
- "aria-hidden": true
447
- }),
448
- closed: /*#__PURE__*/_react.default.createElement(_semiIcons.IconChevronDown, {
449
- "aria-hidden": true
450
- })
451
- },
452
437
  disabled: false
453
438
  };
@@ -11,7 +11,7 @@ export type { CollapseButtonProps } from './CollapseButton';
11
11
  export type { NavFooterProps } from './Footer';
12
12
  export type { NavHeaderProps } from './Header';
13
13
  export type { NavItemProps } from './Item';
14
- export type { ToggleIcon, SubNavProps } from './SubNav';
14
+ export type { SubNavProps } from './SubNav';
15
15
  export declare type Mode = 'vertical' | 'horizontal';
16
16
  export interface OnSelectedData {
17
17
  itemKey: React.ReactText;
@@ -33,6 +33,7 @@ export interface NavProps extends BaseProps {
33
33
  defaultIsCollapsed?: boolean;
34
34
  defaultOpenKeys?: React.ReactText[];
35
35
  defaultSelectedKeys?: React.ReactText[];
36
+ expandIcon?: React.ReactNode;
36
37
  footer?: React.ReactNode | NavFooterProps;
37
38
  header?: React.ReactNode | NavHeaderProps;
38
39
  isCollapsed?: boolean;
@@ -86,9 +87,11 @@ declare class Nav extends BaseComponent<NavProps, NavState> {
86
87
  static Header: typeof Header;
87
88
  static Footer: typeof Footer;
88
89
  static propTypes: {
90
+ collapseIcon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
89
91
  defaultOpenKeys: PropTypes.Requireable<NonNullable<string | number>[]>;
90
92
  openKeys: PropTypes.Requireable<NonNullable<string | number>[]>;
91
93
  defaultSelectedKeys: PropTypes.Requireable<NonNullable<string | number>[]>;
94
+ expandIcon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
92
95
  selectedKeys: PropTypes.Requireable<NonNullable<string | number>[]>;
93
96
  mode: PropTypes.Requireable<string>;
94
97
  onSelect: PropTypes.Requireable<(...args: any[]) => any>;
@@ -195,13 +195,17 @@ class Nav extends _baseComponent.default {
195
195
  renderItems() {
196
196
  let items = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
197
197
  let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
198
+ const {
199
+ expandIcon
200
+ } = this.props;
198
201
 
199
202
  const finalDom = /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, items.map((item, idx) => {
200
203
  if (Array.isArray(item.items) && item.items.length) {
201
204
  return /*#__PURE__*/_react.default.createElement(_SubNav.default, Object.assign({
202
205
  key: item.itemKey || String(level) + idx
203
206
  }, item, {
204
- level: level
207
+ level: level,
208
+ expandIcon: expandIcon
205
209
  }), this.renderItems(item.items, level + 1));
206
210
  } else {
207
211
  return /*#__PURE__*/_react.default.createElement(_Item.default, Object.assign({
@@ -371,11 +375,13 @@ Nav.Item = _Item.default;
371
375
  Nav.Header = _Header.default;
372
376
  Nav.Footer = _Footer.default;
373
377
  Nav.propTypes = {
378
+ collapseIcon: _propTypes.default.node,
374
379
  // Initial expanded SubNav navigation key array
375
380
  defaultOpenKeys: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])),
376
381
  openKeys: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])),
377
382
  // Initial selected navigation key array
378
383
  defaultSelectedKeys: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])),
384
+ expandIcon: _propTypes.default.node,
379
385
  selectedKeys: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number])),
380
386
  // Navigation type, now supports vertical, horizontal
381
387
  mode: _propTypes.default.oneOf([..._constants.strings.MODE]),
@@ -271,7 +271,7 @@ declare class Select extends BaseComponent<SelectProps, SelectState> {
271
271
  componentDidMount(): void;
272
272
  componentWillUnmount(): void;
273
273
  componentDidUpdate(prevProps: SelectProps, prevState: SelectState): void;
274
- handleInputChange: (value: string, event: React.KeyboardEvent) => void;
274
+ handleInputChange: (value: string, event: React.ChangeEvent<HTMLInputElement>) => void;
275
275
  renderInput(): JSX.Element;
276
276
  close(): void;
277
277
  open(): void;
@@ -281,6 +281,7 @@ declare class Select extends BaseComponent<SelectProps, SelectState> {
281
281
  focus(): void;
282
282
  onSelect(option: OptionProps, optionIndex: number, e: any): void;
283
283
  onClear(e: React.MouseEvent): void;
284
+ search(value: string, event: React.ChangeEvent<HTMLInputElement>): void;
284
285
  renderEmpty(): JSX.Element;
285
286
  renderLoading(): JSX.Element;
286
287
  renderOption(option: OptionProps, optionIndex: number, style?: React.CSSProperties): any;
@@ -562,6 +562,10 @@ class Select extends _baseComponent.default {
562
562
  this.foundation.handleClearClick(e);
563
563
  }
564
564
 
565
+ search(value, event) {
566
+ this.handleInputChange(value, event);
567
+ }
568
+
565
569
  renderEmpty() {
566
570
  return /*#__PURE__*/_react.default.createElement(_option.default, {
567
571
  empty: true,
@@ -2,7 +2,7 @@ import React, { ReactNode } from 'react';
2
2
  import { FlattenData, GroupFlattenData } from '@douyinfe/semi-foundation/lib/cjs/table/bodyFoundation';
3
3
  import Store from '@douyinfe/semi-foundation/lib/cjs/utils/Store';
4
4
  import { BaseProps } from '../../_base/baseComponent';
5
- import { ExpandedRowRender, Virtualized, GetVirtualizedListRef, ColumnProps, Size, BodyScrollEvent, Scroll, Fixed, TableComponents, RowExpandable, VirtualizedOnScroll, RowKey } from '../interface';
5
+ import type { ExpandedRowRender, Virtualized, GetVirtualizedListRef, ColumnProps, Size, BodyScrollEvent, Scroll, Fixed, TableComponents, RowExpandable, VirtualizedOnScroll, RowKey } from '../interface';
6
6
  export interface BodyProps extends BaseProps {
7
7
  tableLayout?: 'fixed' | 'auto';
8
8
  anyColumnFixed?: boolean;
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
2
  import Table from './Table';
3
- import { TableProps } from './interface';
3
+ import type { TableProps } from './interface';
4
4
  declare const _default: React.ForwardRefExoticComponent<TableProps<any> & React.RefAttributes<Table<any>>>;
5
5
  export default _default;
@@ -183,21 +183,29 @@ class TableHeaderRow extends _baseComponent.default {
183
183
  return null;
184
184
  }
185
185
 
186
- return /*#__PURE__*/_react.default.createElement(HeaderCell, Object.assign({
187
- role: "columnheader",
188
- "aria-colindex": cellIndex + 1
189
- }, props, {
190
- style: cellStyle,
191
- key: column.key || column.dataIndex || cellIndex
192
- }));
186
+ return (
187
+ /*#__PURE__*/
188
+ // @ts-ignore no need to do complex ts type checking and qualification
189
+ _react.default.createElement(HeaderCell, Object.assign({
190
+ role: "columnheader",
191
+ "aria-colindex": cellIndex + 1
192
+ }, props, {
193
+ style: cellStyle,
194
+ key: column.key || column.dataIndex || cellIndex
195
+ }))
196
+ );
193
197
  });
194
- return /*#__PURE__*/_react.default.createElement(HeaderRow, Object.assign({
195
- role: "row",
196
- "aria-rowindex": index + 1
197
- }, rowProps, {
198
- style: style,
199
- ref: this.cacheRef
200
- }), cells);
198
+ return (
199
+ /*#__PURE__*/
200
+ // @ts-ignore no need to do complex ts type checking and qualification
201
+ _react.default.createElement(HeaderRow, Object.assign({
202
+ role: "row",
203
+ "aria-rowindex": index + 1
204
+ }, rowProps, {
205
+ style: style,
206
+ ref: this.cacheRef
207
+ }), cells)
208
+ );
201
209
  }
202
210
 
203
211
  }
@@ -262,8 +262,12 @@ export declare type VirtualizedOnScrollArgs = {
262
262
  scrollOffset?: number;
263
263
  scrollUpdateWasRequested?: boolean;
264
264
  };
265
+ export declare type VirtualizeItemSizeRow = {
266
+ sectionRow?: boolean;
267
+ expandedRow?: boolean;
268
+ };
265
269
  export declare type VirtualizedMode = 'list' | 'grid';
266
- export declare type VirtualizedItemSizeFn = (index?: number) => number;
270
+ export declare type VirtualizedItemSizeFn = (index?: number, row?: VirtualizeItemSizeRow) => number;
267
271
  export declare type VirtualizedItemSize = number | VirtualizedItemSizeFn;
268
272
  export declare type VirtualizedOnScroll = (object: VirtualizedOnScrollArgs) => void;
269
273
  export interface VirtualizedProps {
@@ -22,6 +22,7 @@ export interface BaseTypographyProps extends BaseProps {
22
22
  component?: React.ElementType;
23
23
  spacing?: string;
24
24
  heading?: string;
25
+ weight?: string | number;
25
26
  }
26
27
  interface BaseTypographyState {
27
28
  editable: boolean;
@@ -107,7 +107,7 @@ class Base extends _react.Component {
107
107
  }
108
108
 
109
109
  this.rafId = window.requestAnimationFrame(this.getEllipsisState.bind(this));
110
- }; // if need to use js overflowed:
110
+ }; // if it needs to use js overflowed:
111
111
  // 1. text is expandable 2. expandText need to be shown 3. has extra operation 4. text need to ellipse from mid
112
112
 
113
113
 
@@ -445,10 +445,7 @@ class Base extends _react.Component {
445
445
  const {
446
446
  expanded
447
447
  } = this.state;
448
- const canUseCSSEllipsis = this.canUseCSSEllipsis(); // Currently only text truncation is supported, if there is non-text,
449
- // both css truncation and js truncation should throw a warning
450
-
451
- (0, _warning.default)('children' in this.props && typeof children !== 'string', "[Semi Typography] 'Only children with pure text could be used with ellipsis at this moment."); // If children is null, css/js truncated flag isTruncate is false
448
+ const canUseCSSEllipsis = this.canUseCSSEllipsis(); // If children is null, css/js truncated flag isTruncate is false
452
449
 
453
450
  if ((0, _isNull2.default)(children)) {
454
451
  this.setState({
@@ -456,7 +453,11 @@ class Base extends _react.Component {
456
453
  isOverflowed: false
457
454
  });
458
455
  return undefined;
459
- }
456
+ } // Currently only text truncation is supported, if there is non-text,
457
+ // both css truncation and js truncation should throw a warning
458
+
459
+
460
+ (0, _warning.default)('children' in this.props && typeof children !== 'string', "[Semi Typography] Only children with pure text could be used with ellipsis at this moment.");
460
461
 
461
462
  if (!rows || rows < 0 || expanded) {
462
463
  return undefined;
@@ -565,9 +566,10 @@ class Base extends _react.Component {
565
566
  icon,
566
567
  size,
567
568
  link,
568
- heading
569
+ heading,
570
+ weight
569
571
  } = _a,
570
- rest = __rest(_a, ["component", "children", "className", "type", "spacing", "disabled", "style", "ellipsis", "icon", "size", "link", "heading"]);
572
+ rest = __rest(_a, ["component", "children", "className", "type", "spacing", "disabled", "style", "ellipsis", "icon", "size", "link", "heading", "weight"]);
571
573
 
572
574
  const textProps = (0, _omit2.default)(rest, ['strong', 'editable', 'mark', 'copyable', 'underline', 'code', // 'link',
573
575
  'delete']);
@@ -586,6 +588,7 @@ class Base extends _react.Component {
586
588
  className: linkCls
587
589
  }, textNode) : textNode));
588
590
  const hTagReg = /^h[1-6]$/;
591
+ const isHeader = (0, _isString2.default)(heading) && hTagReg.test(heading);
589
592
  const wrapperCls = (0, _classnames.default)(className, ellipsisCls, {
590
593
  // [`${prefixCls}-primary`]: !type || type === 'primary',
591
594
  [`${prefixCls}-${type}`]: type && !link,
@@ -593,11 +596,15 @@ class Base extends _react.Component {
593
596
  [`${prefixCls}-link`]: link,
594
597
  [`${prefixCls}-disabled`]: disabled,
595
598
  [`${prefixCls}-${spacing}`]: spacing,
596
- [`${prefixCls}-${heading}`]: (0, _isString2.default)(heading) && hTagReg.test(heading)
599
+ [`${prefixCls}-${heading}`]: isHeader,
600
+ [`${prefixCls}-${heading}-weight-${weight}`]: isHeader && isNaN(Number(weight))
597
601
  });
602
+ const textStyle = Object.assign(Object.assign({}, isNaN(Number(weight)) ? {} : {
603
+ fontWeight: weight
604
+ }), style);
598
605
  return /*#__PURE__*/_react.default.createElement(_typography.default, Object.assign({
599
606
  className: wrapperCls,
600
- style: Object.assign(Object.assign({}, style), ellipsisStyle),
607
+ style: Object.assign(Object.assign({}, textStyle), ellipsisStyle),
601
608
  component: component,
602
609
  forwardRef: this.wrapperRef
603
610
  }, textProps), textNode, this.renderOperations());
@@ -633,15 +640,22 @@ class Base extends _react.Component {
633
640
  }
634
641
 
635
642
  render() {
636
- return /*#__PURE__*/_react.default.createElement(_resizeObserver.default, {
637
- onResize: this.onResize
638
- }, /*#__PURE__*/_react.default.createElement(_localeConsumer.default, {
643
+ const content = /*#__PURE__*/_react.default.createElement(_localeConsumer.default, {
639
644
  componentName: "Typography"
640
645
  }, locale => {
641
646
  this.expandStr = locale.expand;
642
647
  this.collapseStr = locale.collapse;
643
648
  return this.renderTipWrapper();
644
- }));
649
+ });
650
+
651
+ if (this.props.ellipsis) {
652
+ return /*#__PURE__*/_react.default.createElement(_resizeObserver.default, {
653
+ onResize: this.onResize,
654
+ observeParent: true
655
+ }, content);
656
+ }
657
+
658
+ return content;
645
659
  }
646
660
 
647
661
  }
@@ -26,6 +26,7 @@ export interface TitleProps extends Omit<React.HTMLAttributes<HTMLHeadingElement
26
26
  style?: React.CSSProperties;
27
27
  type?: TypographyBaseType;
28
28
  underline?: boolean;
29
+ weight?: ArrayElement<typeof strings.WEIGHT> | number;
29
30
  }
30
31
  export default class Title extends PureComponent<TitleProps> {
31
32
  static propTypes: {
@@ -42,6 +43,7 @@ export default class Title extends PureComponent<TitleProps> {
42
43
  style: PropTypes.Requireable<object>;
43
44
  className: PropTypes.Requireable<string>;
44
45
  component: PropTypes.Requireable<string>;
46
+ weight: PropTypes.Requireable<NonNullable<number | "default" | "bold" | "medium" | "light" | "regular" | "semibold">>;
45
47
  };
46
48
  static defaultProps: {
47
49
  copyable: boolean;
@@ -63,7 +63,8 @@ Title.propTypes = {
63
63
  heading: _propTypes.default.oneOf(_constants.strings.HEADING),
64
64
  style: _propTypes.default.object,
65
65
  className: _propTypes.default.string,
66
- component: _propTypes.default.string
66
+ component: _propTypes.default.string,
67
+ weight: _propTypes.default.oneOfType([_propTypes.default.oneOf(_constants.strings.WEIGHT), _propTypes.default.number])
67
68
  };
68
69
  Title.defaultProps = {
69
70
  copyable: false,
@@ -7,6 +7,7 @@ import Link from './link';
7
7
  import '@douyinfe/semi-foundation/lib/es/anchor/anchor.css';
8
8
  import { ArrayElement } from '../_base/base';
9
9
  import { ContextValue } from '../configProvider/context';
10
+ import { ShowTooltip } from '../typography/interface';
10
11
  export type { LinkProps } from './link';
11
12
  export interface AnchorProps {
12
13
  autoCollapse?: boolean;
@@ -20,7 +21,7 @@ export interface AnchorProps {
20
21
  position?: ArrayElement<typeof strings.POSITION_SET>;
21
22
  railTheme?: ArrayElement<typeof strings.SLIDE_COLOR>;
22
23
  scrollMotion?: boolean;
23
- showTooltip?: boolean;
24
+ showTooltip?: boolean | ShowTooltip;
24
25
  size?: ArrayElement<typeof strings.SIZE>;
25
26
  style?: React.CSSProperties;
26
27
  targetOffset?: number;
@@ -1,3 +1,4 @@
1
+ import _isObject from "lodash/isObject";
1
2
  import React from 'react';
2
3
  import cls from 'classnames';
3
4
  import PropTypes from 'prop-types';
@@ -30,17 +31,22 @@ export default class Link extends BaseComponent {
30
31
  [`${prefixCls}-link-tooltip-active`]: active,
31
32
  [`${prefixCls}-link-tooltip-disabled`]: disabled
32
33
  });
33
- const toolTipOpt = position ? {
34
- position
35
- } : {};
36
34
 
37
35
  if (showTooltip) {
36
+ const showTooltipObj = _isObject(showTooltip) ? Object.assign({
37
+ opts: {}
38
+ }, showTooltip) : {
39
+ opts: {}
40
+ }; // The position can be set through showTooltip, here it is compatible with the position API
41
+
42
+ if (position) {
43
+ showTooltipObj.opts['position'] = position;
44
+ }
45
+
38
46
  return /*#__PURE__*/React.createElement(Typography.Text, {
39
47
  size: size === 'default' ? 'normal' : 'small',
40
48
  ellipsis: {
41
- showTooltip: {
42
- opts: Object.assign({}, toolTipOpt)
43
- }
49
+ showTooltip: showTooltipObj
44
50
  },
45
51
  type: 'tertiary',
46
52
  className: linkTitleCls
@@ -26,6 +26,7 @@ export default class DayCalendar extends BaseComponent<DayCalendarProps, DayCale
26
26
  style: PropTypes.Requireable<object>;
27
27
  className: PropTypes.Requireable<string>;
28
28
  dateGridRender: PropTypes.Requireable<(...args: any[]) => any>;
29
+ allDayEventsRender: PropTypes.Requireable<(...args: any[]) => any>;
29
30
  };
30
31
  static defaultProps: {
31
32
  events: import("@douyinfe/semi-foundation/lib/es/calendar/foundation").EventObject[];
@@ -43,7 +44,7 @@ export default class DayCalendar extends BaseComponent<DayCalendarProps, DayCale
43
44
  componentDidUpdate(prevProps: DayCalendarProps, prevState: DayCalendarState): void;
44
45
  componentWillUnmount(): void;
45
46
  checkWeekend: (val: Date) => boolean;
46
- renderAllDayEvents: (events: ParsedEventsWithArray['allDay']) => JSX.Element[];
47
+ renderAllDayEvents: (events: ParsedEventsWithArray['allDay']) => string | number | boolean | React.ReactElement<any, string | React.JSXElementConstructor<any>> | React.ReactFragment | JSX.Element[];
47
48
  handleClick: (e: React.MouseEvent, val: [Date, number, number, number]) => void;
48
49
  renderAllDay: (events: ParsedEventsWithArray['allDay']) => JSX.Element;
49
50
  render(): JSX.Element;
@@ -18,6 +18,10 @@ export default class DayCalendar extends BaseComponent {
18
18
  this.checkWeekend = val => this.foundation.checkWeekend(val);
19
19
 
20
20
  this.renderAllDayEvents = events => {
21
+ if (this.props.allDayEventsRender) {
22
+ return this.props.allDayEventsRender(this.props.events);
23
+ }
24
+
21
25
  const list = events.map((event, ind) => {
22
26
  const {
23
27
  children,
@@ -110,7 +114,7 @@ export default class DayCalendar extends BaseComponent {
110
114
  const prevEventKeys = prevState.cachedKeys;
111
115
  const nowEventKeys = this.props.events.map(event => event.key);
112
116
 
113
- if (!_isEqual(prevEventKeys, nowEventKeys)) {
117
+ if (!_isEqual(prevEventKeys, nowEventKeys) || !_isEqual(prevProps.displayValue, this.props.displayValue)) {
114
118
  this.foundation.parseDailyEvents();
115
119
  }
116
120
  }
@@ -183,7 +187,8 @@ DayCalendar.propTypes = {
183
187
  height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
184
188
  style: PropTypes.object,
185
189
  className: PropTypes.string,
186
- dateGridRender: PropTypes.func
190
+ dateGridRender: PropTypes.func,
191
+ allDayEventsRender: PropTypes.func
187
192
  };
188
193
  DayCalendar.defaultProps = {
189
194
  events: [],
@@ -22,6 +22,7 @@ declare class Calendar extends BaseComponent<CalendarProps, {}> {
22
22
  scrollTop: PropTypes.Requireable<number>;
23
23
  onClick: PropTypes.Requireable<(...args: any[]) => any>;
24
24
  renderTimeDisplay: PropTypes.Requireable<(...args: any[]) => any>;
25
+ renderDateDisplay: PropTypes.Requireable<(...args: any[]) => any>;
25
26
  markWeekend: PropTypes.Requireable<boolean>;
26
27
  width: PropTypes.Requireable<NonNullable<string | number>>;
27
28
  height: PropTypes.Requireable<NonNullable<string | number>>;
@@ -54,6 +54,7 @@ Calendar.propTypes = {
54
54
  scrollTop: PropTypes.number,
55
55
  onClick: PropTypes.func,
56
56
  renderTimeDisplay: PropTypes.func,
57
+ renderDateDisplay: PropTypes.func,
57
58
  markWeekend: PropTypes.bool,
58
59
  width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
59
60
  height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
@@ -18,7 +18,9 @@ export interface CalendarProps extends BaseProps {
18
18
  markWeekend?: boolean;
19
19
  width?: number | string;
20
20
  height?: number | string;
21
+ renderDateDisplay?: (date: Date) => React.ReactNode;
21
22
  dateGridRender?: (dateString?: string, date?: Date) => React.ReactNode;
23
+ allDayEventsRender?: (events: EventObject[]) => React.ReactNode;
22
24
  }
23
25
  export declare type DayCalendarProps = Omit<CalendarProps, 'mode'>;
24
26
  declare type DayCalendarPropsKeys = 'events' | 'displayValue' | 'showCurrTime' | 'mode' | 'dateGridRender';
@@ -51,7 +51,7 @@ export default class monthCalendar extends BaseComponent<MonthCalendarProps, Mon
51
51
  renderHeader: (dateFnsLocale: Locale['dateFnsLocale']) => JSX.Element;
52
52
  renderEvents: (events: ParsedRangeEvent[]) => JSX.Element[];
53
53
  renderCollapsed: (events: MonthlyEvent['day'][number], itemInfo: DateObj, listCls: string, month: string) => JSX.Element;
54
- formatDayString: (month: string, date: string) => JSX.Element;
54
+ formatDayString: (dateObj: Date, month: string, date: string) => string | number | boolean | React.ReactFragment | JSX.Element;
55
55
  renderCusDateGrid: (date: Date) => React.ReactNode;
56
56
  renderWeekRow: (index: number | string, weekDay: MonthData[number], events?: MonthlyEvent) => JSX.Element;
57
57
  renderMonthGrid: () => JSX.Element;
@@ -173,10 +173,18 @@ export default class monthCalendar extends BaseComponent {
173
173
  key: date,
174
174
  className: listCls,
175
175
  onClick: e => this.handleClick(e, [date])
176
- }, this.formatDayString(month, dayString), shouldRenderCard ? text : null, this.renderCusDateGrid(date)));
176
+ }, this.formatDayString(date, month, dayString), shouldRenderCard ? text : null, this.renderCusDateGrid(date)));
177
177
  };
178
178
 
179
- this.formatDayString = (month, date) => {
179
+ this.formatDayString = (dateObj, month, date) => {
180
+ const {
181
+ renderDateDisplay
182
+ } = this.props;
183
+
184
+ if (renderDateDisplay) {
185
+ return renderDateDisplay(dateObj);
186
+ }
187
+
180
188
  if (date === '1') {
181
189
  return /*#__PURE__*/React.createElement(LocaleConsumer, {
182
190
  componentName: "Calendar"
@@ -253,7 +261,7 @@ export default class monthCalendar extends BaseComponent {
253
261
  key: `${date}-weeksk`,
254
262
  className: listCls,
255
263
  onClick: e => _this.handleClick(e, [date])
256
- }, _this.formatDayString(month, dayString), _this.renderCusDateGrid(date));
264
+ }, _this.formatDayString(date, month, dayString), _this.renderCusDateGrid(date));
257
265
 
258
266
  if (!shouldRenderCollapsed) {
259
267
  return inner;
@@ -373,7 +381,7 @@ export default class monthCalendar extends BaseComponent {
373
381
  }
374
382
  }
375
383
 
376
- if (!_isEqual(prevEventKeys, nowEventKeys) || itemLimitUpdate) {
384
+ if (!_isEqual(prevEventKeys, nowEventKeys) || itemLimitUpdate || !_isEqual(prevProps.displayValue, this.props.displayValue)) {
377
385
  this.foundation.parseMonthlyEvents(itemLimit || this.props.events);
378
386
  }
379
387
  }
@@ -20,7 +20,9 @@ export default class RangeCalendar extends BaseComponent<RangeCalendarProps, Ran
20
20
  markWeekend: PropTypes.Requireable<boolean>;
21
21
  scrollTop: PropTypes.Requireable<number>;
22
22
  renderTimeDisplay: PropTypes.Requireable<(...args: any[]) => any>;
23
+ renderDateDisplay: PropTypes.Requireable<(...args: any[]) => any>;
23
24
  dateGridRender: PropTypes.Requireable<(...args: any[]) => any>;
25
+ allDayEventsRender: PropTypes.Requireable<(...args: any[]) => any>;
24
26
  width: PropTypes.Requireable<NonNullable<string | number>>;
25
27
  height: PropTypes.Requireable<NonNullable<string | number>>;
26
28
  style: PropTypes.Requireable<object>;
@@ -45,7 +47,7 @@ export default class RangeCalendar extends BaseComponent<RangeCalendarProps, Ran
45
47
  handleClick: (e: React.MouseEvent, val: [Date, number, number, number]) => void;
46
48
  renderDayGrid: () => JSX.Element[];
47
49
  renderHeader: (dateFnsLocale: Locale['dateFnsLocale']) => JSX.Element;
48
- renderAllDayEvents: (events: Array<ParsedRangeEvent>) => JSX.Element[];
50
+ renderAllDayEvents: (events: Array<ParsedRangeEvent>) => string | number | boolean | React.ReactElement<any, string | React.JSXElementConstructor<any>> | React.ReactFragment | JSX.Element[];
49
51
  renderAllDay: (locale: Locale['Calendar']) => JSX.Element;
50
52
  render(): JSX.Element;
51
53
  }
@@ -1,5 +1,5 @@
1
1
  import _isEqual from "lodash/isEqual";
2
- import React from 'react';
2
+ import React, { Fragment } from 'react';
3
3
  import cls from 'classnames';
4
4
  import PropTypes from 'prop-types'; // eslint-disable-next-line max-len
5
5
 
@@ -65,7 +65,8 @@ export default class RangeCalendar extends BaseComponent {
65
65
  this.renderHeader = dateFnsLocale => {
66
66
  const {
67
67
  markWeekend,
68
- range
68
+ range,
69
+ renderDateDisplay
69
70
  } = this.props;
70
71
  const {
71
72
  month,
@@ -91,16 +92,21 @@ export default class RangeCalendar extends BaseComponent {
91
92
  [`${cssClasses.PREFIX}-today`]: isToday,
92
93
  [`${cssClasses.PREFIX}-weekend`]: markWeekend && day.isWeekend
93
94
  });
95
+ const dateContent = renderDateDisplay ? renderDateDisplay(date) : /*#__PURE__*/React.createElement(Fragment, null, /*#__PURE__*/React.createElement("span", {
96
+ className: `${cssClasses.PREFIX}-today-date`
97
+ }, dayString), /*#__PURE__*/React.createElement("span", null, weekday));
94
98
  return /*#__PURE__*/React.createElement("li", {
95
99
  key: `${date.toString()}-weekheader`,
96
100
  className: listCls
97
- }, /*#__PURE__*/React.createElement("span", {
98
- className: `${cssClasses.PREFIX}-today-date`
99
- }, dayString), /*#__PURE__*/React.createElement("span", null, weekday));
101
+ }, dateContent);
100
102
  }))));
101
103
  };
102
104
 
103
105
  this.renderAllDayEvents = events => {
106
+ if (this.props.allDayEventsRender) {
107
+ return this.props.allDayEventsRender(this.props.events);
108
+ }
109
+
104
110
  const list = events.map((event, ind) => {
105
111
  const {
106
112
  leftPos,
@@ -124,13 +130,15 @@ export default class RangeCalendar extends BaseComponent {
124
130
  };
125
131
 
126
132
  this.renderAllDay = locale => {
133
+ const {
134
+ allDayEventsRender
135
+ } = this.props;
127
136
  const {
128
137
  allDay
129
138
  } = this.state.parsedEvents;
130
139
  const parsed = this.foundation.parseRangeAllDayEvents(allDay);
131
- const maxRowHeight = calcRowHeight(parsed);
132
- const style = {
133
- height: `${maxRowHeight}em`
140
+ const style = allDayEventsRender ? null : {
141
+ height: `${calcRowHeight(parsed)}em`
134
142
  };
135
143
  const {
136
144
  markWeekend
@@ -214,7 +222,7 @@ export default class RangeCalendar extends BaseComponent {
214
222
  const prevEventKeys = prevState.cachedKeys;
215
223
  const nowEventKeys = this.props.events.map(event => event.key);
216
224
 
217
- if (!_isEqual(prevEventKeys, nowEventKeys)) {
225
+ if (!_isEqual(prevEventKeys, nowEventKeys) || !_isEqual(prevProps.range, this.props.range)) {
218
226
  this.foundation.parseRangeEvents();
219
227
  }
220
228
  }
@@ -267,7 +275,9 @@ RangeCalendar.propTypes = {
267
275
  markWeekend: PropTypes.bool,
268
276
  scrollTop: PropTypes.number,
269
277
  renderTimeDisplay: PropTypes.func,
278
+ renderDateDisplay: PropTypes.func,
270
279
  dateGridRender: PropTypes.func,
280
+ allDayEventsRender: PropTypes.func,
271
281
  width: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
272
282
  height: PropTypes.oneOfType([PropTypes.number, PropTypes.string]),
273
283
  style: PropTypes.object,