@douyinfe/semi-ui 2.48.0 → 2.49.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 (91) 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 +319 -293
  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/image/interface.d.ts +3 -3
  21. package/lib/cjs/image/previewFooter.js +5 -8
  22. package/lib/cjs/image/previewHeader.d.ts +2 -2
  23. package/lib/cjs/image/previewHeader.js +9 -8
  24. package/lib/cjs/image/previewImage.d.ts +1 -12
  25. package/lib/cjs/image/previewImage.js +23 -83
  26. package/lib/cjs/image/previewInner.d.ts +11 -2
  27. package/lib/cjs/image/previewInner.js +60 -42
  28. package/lib/cjs/modal/Modal.d.ts +1 -1
  29. package/lib/cjs/modal/Modal.js +1 -1
  30. package/lib/cjs/navigation/SubNav.d.ts +1 -1
  31. package/lib/cjs/navigation/SubNav.js +1 -1
  32. package/lib/cjs/popconfirm/index.d.ts +1 -1
  33. package/lib/cjs/popconfirm/index.js +1 -1
  34. package/lib/cjs/sideSheet/SideSheetContent.d.ts +3 -1
  35. package/lib/cjs/sideSheet/SideSheetContent.js +6 -3
  36. package/lib/cjs/table/Body/BaseRow.d.ts +3 -0
  37. package/lib/cjs/table/Body/BaseRow.js +4 -1
  38. package/lib/cjs/table/Body/ExpandedRow.d.ts +1 -0
  39. package/lib/cjs/table/Body/ExpandedRow.js +4 -2
  40. package/lib/cjs/table/Body/index.d.ts +3 -0
  41. package/lib/cjs/table/Body/index.js +18 -10
  42. package/lib/cjs/table/interface.d.ts +1 -0
  43. package/lib/cjs/timePicker/TimePicker.d.ts +3 -0
  44. package/lib/cjs/timePicker/TimePicker.js +7 -3
  45. package/lib/cjs/timePicker/index.d.ts +2 -0
  46. package/lib/cjs/toast/toast.d.ts +1 -1
  47. package/lib/cjs/toast/toast.js +1 -1
  48. package/lib/cjs/typography/util.js +5 -6
  49. package/lib/es/banner/index.d.ts +2 -2
  50. package/lib/es/banner/index.js +2 -2
  51. package/lib/es/breadcrumb/item.d.ts +1 -1
  52. package/lib/es/breadcrumb/item.js +1 -1
  53. package/lib/es/calendar/dayCalendar.d.ts +1 -0
  54. package/lib/es/calendar/dayCalendar.js +4 -1
  55. package/lib/es/calendar/dayCol.d.ts +2 -0
  56. package/lib/es/calendar/dayCol.js +6 -6
  57. package/lib/es/calendar/index.d.ts +1 -0
  58. package/lib/es/calendar/index.js +1 -0
  59. package/lib/es/calendar/interface.d.ts +2 -1
  60. package/lib/es/calendar/rangeCalendar.js +4 -2
  61. package/lib/es/calendar/weekCalendar.js +4 -2
  62. package/lib/es/image/interface.d.ts +3 -3
  63. package/lib/es/image/previewFooter.js +5 -8
  64. package/lib/es/image/previewHeader.d.ts +2 -2
  65. package/lib/es/image/previewHeader.js +4 -3
  66. package/lib/es/image/previewImage.d.ts +1 -12
  67. package/lib/es/image/previewImage.js +23 -83
  68. package/lib/es/image/previewInner.d.ts +11 -2
  69. package/lib/es/image/previewInner.js +60 -42
  70. package/lib/es/modal/Modal.d.ts +1 -1
  71. package/lib/es/modal/Modal.js +1 -1
  72. package/lib/es/navigation/SubNav.d.ts +1 -1
  73. package/lib/es/navigation/SubNav.js +1 -1
  74. package/lib/es/popconfirm/index.d.ts +1 -1
  75. package/lib/es/popconfirm/index.js +1 -1
  76. package/lib/es/sideSheet/SideSheetContent.d.ts +3 -1
  77. package/lib/es/sideSheet/SideSheetContent.js +6 -3
  78. package/lib/es/table/Body/BaseRow.d.ts +3 -0
  79. package/lib/es/table/Body/BaseRow.js +4 -1
  80. package/lib/es/table/Body/ExpandedRow.d.ts +1 -0
  81. package/lib/es/table/Body/ExpandedRow.js +4 -2
  82. package/lib/es/table/Body/index.d.ts +3 -0
  83. package/lib/es/table/Body/index.js +18 -10
  84. package/lib/es/table/interface.d.ts +1 -0
  85. package/lib/es/timePicker/TimePicker.d.ts +3 -0
  86. package/lib/es/timePicker/TimePicker.js +7 -3
  87. package/lib/es/timePicker/index.d.ts +2 -0
  88. package/lib/es/toast/toast.d.ts +1 -1
  89. package/lib/es/toast/toast.js +1 -1
  90. package/lib/es/typography/util.js +5 -6
  91. package/package.json +8 -8
@@ -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;
@@ -53,6 +53,8 @@ export interface PreviewProps extends BaseProps {
53
53
  zIndex?: number;
54
54
  children?: ReactNode;
55
55
  crossOrigin?: "anonymous" | "use-credentials";
56
+ maxZoom?: number;
57
+ minZoom?: number;
56
58
  renderHeader?: (info: any) => ReactNode;
57
59
  renderPreviewMenu?: (props: MenuProps) => ReactNode;
58
60
  getPopupContainer?: () => HTMLElement;
@@ -138,14 +140,12 @@ export interface FooterProps extends SliderProps {
138
140
  onRotate?: (direction: string) => void;
139
141
  onDownload?: () => void;
140
142
  renderPreviewMenu?: (props: MenuProps) => ReactNode;
143
+ forwardRef?: React.RefObject<HTMLElement>;
141
144
  }
142
145
  export interface PreviewImageProps {
143
146
  src?: string;
144
147
  rotation?: number;
145
148
  style?: React.CSSProperties;
146
- maxZoom?: number;
147
- minZoom?: number;
148
- zoomStep?: number;
149
149
  zoom?: number;
150
150
  ratio?: RatioType;
151
151
  disableDownload?: boolean;
@@ -12,14 +12,9 @@ import PreviewFooterFoundation from '@douyinfe/semi-foundation/lib/es/image/prev
12
12
  import LocaleConsumer from "../locale/localeConsumer";
13
13
  const prefixCls = cssClasses.PREFIX;
14
14
  const footerPrefixCls = `${cssClasses.PREFIX}-preview-footer`;
15
- let mouseActiveTime = 0;
16
15
  export default class Footer extends BaseComponent {
17
16
  get adapter() {
18
- return Object.assign(Object.assign({}, super.adapter), {
19
- setStartMouseOffset: time => {
20
- mouseActiveTime = time;
21
- }
22
- });
17
+ return Object.assign({}, super.adapter);
23
18
  }
24
19
  constructor(props) {
25
20
  super(props);
@@ -259,13 +254,15 @@ export default class Footer extends BaseComponent {
259
254
  render() {
260
255
  const {
261
256
  className,
262
- renderPreviewMenu
257
+ renderPreviewMenu,
258
+ forwardRef
263
259
  } = this.props;
264
260
  const menuCls = cls(footerPrefixCls, `${footerPrefixCls}-wrapper`, className, {
265
261
  [`${footerPrefixCls}-content`]: !Boolean(renderPreviewMenu)
266
262
  });
267
263
  return /*#__PURE__*/React.createElement("section", {
268
- className: menuCls
264
+ className: menuCls,
265
+ ref: forwardRef
269
266
  }, renderPreviewMenu ? this.customRenderViewMenu() : this.getFooterMenu());
270
267
  }
271
268
  }
@@ -1,4 +1,4 @@
1
- import * as React from "react";
1
+ import React from "react";
2
2
  import { HeaderProps } from "./interface";
3
- declare const Header: React.FC<HeaderProps>;
3
+ declare const Header: React.ForwardRefExoticComponent<HeaderProps & React.RefAttributes<HTMLElement>>;
4
4
  export default Header;
@@ -1,10 +1,10 @@
1
- import * as React from "react";
1
+ import React, { forwardRef } from "react";
2
2
  import { IconClose } from "@douyinfe/semi-icons";
3
3
  import { cssClasses } from '@douyinfe/semi-foundation/lib/es/image/constants';
4
4
  import cls from "classnames";
5
5
  import { PreviewContext } from "./previewContext";
6
6
  const prefixCls = `${cssClasses.PREFIX}-preview-header`;
7
- const Header = _ref => {
7
+ const Header = /*#__PURE__*/forwardRef((_ref, ref) => {
8
8
  let {
9
9
  onClose,
10
10
  titleStyle,
@@ -21,6 +21,7 @@ const Header = _ref => {
21
21
  title = titles[currentIndex];
22
22
  }
23
23
  return /*#__PURE__*/React.createElement("section", {
24
+ ref: ref,
24
25
  className: cls(prefixCls, className)
25
26
  }, /*#__PURE__*/React.createElement("section", {
26
27
  className: `${prefixCls}-title`,
@@ -30,5 +31,5 @@ const Header = _ref => {
30
31
  onMouseUp: onClose
31
32
  }, /*#__PURE__*/React.createElement(IconClose, null)));
32
33
  });
33
- };
34
+ });
34
35
  export default Header;
@@ -8,9 +8,6 @@ export default class PreviewImage extends BaseComponent<PreviewImageProps, Previ
8
8
  src: PropTypes.Requireable<string>;
9
9
  rotation: PropTypes.Requireable<number>;
10
10
  style: PropTypes.Requireable<object>;
11
- maxZoom: PropTypes.Requireable<number>;
12
- minZoom: PropTypes.Requireable<number>;
13
- zoomStep: PropTypes.Requireable<number>;
14
11
  zoom: PropTypes.Requireable<number>;
15
12
  ratio: PropTypes.Requireable<string>;
16
13
  disableDownload: PropTypes.Requireable<boolean>;
@@ -21,29 +18,21 @@ export default class PreviewImage extends BaseComponent<PreviewImageProps, Previ
21
18
  onError: PropTypes.Requireable<(...args: any[]) => any>;
22
19
  };
23
20
  static defaultProps: {
24
- maxZoom: number;
25
- minZoom: number;
26
- zoomStep: number;
27
21
  zoom: any;
28
22
  };
29
23
  get adapter(): PreviewImageAdapter<PreviewImageProps, PreviewImageStates>;
30
24
  containerRef: React.RefObject<HTMLDivElement>;
31
- imageRef: HTMLImageElement | null;
25
+ imageRef: React.RefObject<HTMLImageElement>;
32
26
  foundation: PreviewImageFoundation;
33
27
  constructor(props: any);
34
28
  componentDidMount(): void;
35
29
  componentWillUnmount(): void;
36
30
  componentDidUpdate(prevProps: PreviewImageProps, prevStates: PreviewImageStates): void;
37
31
  onWindowResize: () => void;
38
- handleZoomChange: (newZoom: any, e: any) => void;
39
32
  handleRightClickImage: (e: any) => void;
40
- handleWheel: (e: any) => void;
41
33
  handleLoad: (e: any) => void;
42
34
  handleError: (e: any) => void;
43
- resizeImage: () => void;
44
35
  handleMoveImage: (e: any) => void;
45
- registryImageRef: (ref: any) => void;
46
36
  onImageMouseDown: (e: React.MouseEvent<HTMLImageElement>) => void;
47
- onImageMouseUp: () => void;
48
37
  render(): JSX.Element;
49
38
  }
@@ -6,38 +6,14 @@ import Spin from "../spin";
6
6
  import PreviewImageFoundation from '@douyinfe/semi-foundation/lib/es/image/previewImageFoundation';
7
7
  const prefixCls = cssClasses.PREFIX;
8
8
  const preViewImgPrefixCls = `${prefixCls}-preview-image`;
9
- let originImageWidth = null;
10
- let originImageHeight = null;
11
- let startMouseMove = false;
12
- // startMouseOffset:The offset of the mouse relative to the left and top of the picture
13
- let startMouseOffset = {
14
- x: 0,
15
- y: 0
16
- };
17
9
  export default class PreviewImage extends BaseComponent {
18
10
  get adapter() {
19
11
  return Object.assign(Object.assign({}, super.adapter), {
20
- getOriginImageSize: () => ({
21
- originImageWidth,
22
- originImageHeight
23
- }),
24
- setOriginImageSize: size => {
25
- originImageWidth = size.originImageWidth;
26
- originImageHeight = size.originImageHeight;
27
- },
28
12
  getContainer: () => {
29
13
  return this.containerRef.current;
30
14
  },
31
15
  getImage: () => {
32
- return this.imageRef;
33
- },
34
- getMouseMove: () => startMouseMove,
35
- setStartMouseMove: move => {
36
- startMouseMove = move;
37
- },
38
- getMouseOffset: () => startMouseOffset,
39
- setStartMouseOffset: offset => {
40
- startMouseOffset = offset;
16
+ return this.imageRef.current;
41
17
  },
42
18
  setLoading: loading => {
43
19
  this.setState({
@@ -45,7 +21,7 @@ export default class PreviewImage extends BaseComponent {
45
21
  });
46
22
  },
47
23
  setImageCursor: canDrag => {
48
- this.imageRef.style.cursor = canDrag ? "grab" : "default";
24
+ this.imageRef.current.style.cursor = canDrag ? "grab" : "default";
49
25
  }
50
26
  });
51
27
  }
@@ -54,52 +30,22 @@ export default class PreviewImage extends BaseComponent {
54
30
  this.onWindowResize = () => {
55
31
  this.foundation.handleWindowResize();
56
32
  };
57
- this.handleZoomChange = (newZoom, e) => {
58
- this.foundation.handleZoomChange(newZoom, e);
59
- };
60
33
  // Determine the response method of right click according to the disableDownload parameter in props
61
34
  this.handleRightClickImage = e => {
62
35
  this.foundation.handleRightClickImage(e);
63
36
  };
64
- this.handleWheel = e => {
65
- this.foundation.handleWheel(e);
66
- };
67
37
  this.handleLoad = e => {
68
38
  this.foundation.handleLoad(e);
69
39
  };
70
40
  this.handleError = e => {
71
41
  this.foundation.handleError(e);
72
42
  };
73
- this.resizeImage = () => {
74
- this.foundation.handleResizeImage();
75
- };
76
43
  this.handleMoveImage = e => {
77
44
  this.foundation.handleMoveImage(e);
78
45
  };
79
- // 为什么通过ref注册wheel而不是使用onWheel事件?
80
- // 因为对于wheel事件,浏览器将 addEventListener 的 passive 默认值更改为 true。如此,事件监听器便不能取消事件,也不会在用户滚动页面时阻止页面呈现。
81
- // 这里我们需要保持页面不动,仅放大图片,因此此处需要将 passive 更改设置为 false。
82
- // Why register wheel via ref instead of using onWheel event?
83
- // Because for wheel events, the browser changes the passive default of addEventListener to true. This way, the event listener cannot cancel the event, nor prevent the page from rendering when the user scrolls.
84
- // Here we need to keep the page still and only zoom in on the image, so here we need to set the passive change to false.
85
- // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners。
86
- this.registryImageRef = ref => {
87
- if (this.imageRef) {
88
- this.imageRef.removeEventListener("wheel", this.handleWheel);
89
- }
90
- if (ref) {
91
- ref.addEventListener("wheel", this.handleWheel, {
92
- passive: false
93
- });
94
- }
95
- this.imageRef = ref;
96
- };
97
46
  this.onImageMouseDown = e => {
98
47
  this.foundation.handleImageMouseDown(e);
99
48
  };
100
- this.onImageMouseUp = () => {
101
- this.foundation.handleImageMouseUp();
102
- };
103
49
  this.state = {
104
50
  width: 0,
105
51
  height: 0,
@@ -113,7 +59,7 @@ export default class PreviewImage extends BaseComponent {
113
59
  left: 0
114
60
  };
115
61
  this.containerRef = /*#__PURE__*/React.createRef();
116
- this.imageRef = null;
62
+ this.imageRef = /*#__PURE__*/React.createRef();
117
63
  this.foundation = new PreviewImageFoundation(this.adapter);
118
64
  }
119
65
  componentDidMount() {
@@ -124,27 +70,22 @@ export default class PreviewImage extends BaseComponent {
124
70
  }
125
71
  componentDidUpdate(prevProps, prevStates) {
126
72
  // If src changes, start a new loading
127
- if (this.props.src && this.props.src !== prevProps.src) {
73
+ const zoomChange = "zoom" in this.props && this.props.zoom !== this.state.currZoom;
74
+ const srcChange = this.props.src && this.props.src !== prevProps.src;
75
+ if (srcChange) {
128
76
  this.foundation.setLoading(true);
129
77
  }
130
78
  // If the incoming zoom changes, other content changes are determined based on the new zoom value
131
- if ("zoom" in this.props && this.props.zoom !== prevStates.currZoom) {
132
- this.handleZoomChange(this.props.zoom, null);
79
+ if (zoomChange) {
80
+ this.foundation.calculatePreviewImage(this.props.zoom, null);
133
81
  }
134
- // When the incoming ratio is changed, if it"s adaptation, then resizeImage is triggered to make the image adapt to the page
135
- // else if it"s adaptation is realSize, then onZoom(1) is called to make the image size the original size;
136
- if ("ratio" in this.props && this.props.ratio !== prevProps.ratio) {
137
- if (originImageWidth && originImageHeight) {
138
- if (this.props.ratio === "adaptation") {
139
- this.resizeImage();
140
- } else {
141
- this.props.onZoom(1);
142
- }
82
+ if (!zoomChange && !srcChange && prevProps) {
83
+ if ("ratio" in this.props && this.props.ratio !== prevProps.ratio) {
84
+ this.foundation.handleRatioChange();
85
+ }
86
+ if ("rotation" in this.props && this.props.rotation !== prevProps.rotation) {
87
+ this.onWindowResize();
143
88
  }
144
- }
145
- // When the incoming rotation angle of the image changes, it needs to be resized to make the image fit on the page
146
- if ("rotation" in this.props && this.props.rotation !== prevProps.rotation) {
147
- this.onWindowResize();
148
89
  }
149
90
  }
150
91
  render() {
@@ -166,21 +107,20 @@ export default class PreviewImage extends BaseComponent {
166
107
  transform: `rotate(${-rotation}deg)`,
167
108
  top,
168
109
  left,
169
- width: loading ? "auto" : `${width}px`,
170
- height: loading ? "auto" : `${height}px`
110
+ width,
111
+ height
171
112
  };
172
113
  return /*#__PURE__*/React.createElement("div", {
173
114
  className: `${preViewImgPrefixCls}`,
174
115
  ref: this.containerRef
175
116
  }, /*#__PURE__*/React.createElement("img", {
176
- ref: this.registryImageRef,
117
+ ref: this.imageRef,
177
118
  src: src,
178
119
  alt: "previewImag",
179
120
  className: `${preViewImgPrefixCls}-img`,
180
121
  key: src,
181
122
  onMouseMove: this.handleMoveImage,
182
123
  onMouseDown: this.onImageMouseDown,
183
- onMouseUp: this.onImageMouseUp,
184
124
  onContextMenu: this.handleRightClickImage,
185
125
  onDragStart: e => e.preventDefault(),
186
126
  onLoad: this.handleLoad,
@@ -197,9 +137,9 @@ PreviewImage.propTypes = {
197
137
  src: PropTypes.string,
198
138
  rotation: PropTypes.number,
199
139
  style: PropTypes.object,
200
- maxZoom: PropTypes.number,
201
- minZoom: PropTypes.number,
202
- zoomStep: PropTypes.number,
140
+ // maxZoom: PropTypes.number,
141
+ // minZoom: PropTypes.number,
142
+ // zoomStep: PropTypes.number,
203
143
  zoom: PropTypes.number,
204
144
  ratio: PropTypes.string,
205
145
  disableDownload: PropTypes.bool,
@@ -210,8 +150,8 @@ PreviewImage.propTypes = {
210
150
  onError: PropTypes.func
211
151
  };
212
152
  PreviewImage.defaultProps = {
213
- maxZoom: 5,
214
- minZoom: 0.1,
215
- zoomStep: 0.1,
153
+ // maxZoom: 5,
154
+ // minZoom: 0.1,
155
+ // zoomStep: 0.1,
216
156
  zoom: undefined
217
157
  };
@@ -33,6 +33,8 @@ export default class PreviewInner extends BaseComponent<PreviewInnerProps, Previ
33
33
  disableDownload: PropTypes.Requireable<boolean>;
34
34
  viewerVisibleDelay: PropTypes.Requireable<number>;
35
35
  zIndex: PropTypes.Requireable<number>;
36
+ maxZoom: PropTypes.Requireable<number>;
37
+ minZoom: PropTypes.Requireable<number>;
36
38
  renderHeader: PropTypes.Requireable<(...args: any[]) => any>;
37
39
  renderPreviewMenu: PropTypes.Requireable<(...args: any[]) => any>;
38
40
  getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
@@ -58,14 +60,20 @@ export default class PreviewInner extends BaseComponent<PreviewInnerProps, Previ
58
60
  zIndex: number;
59
61
  maskClosable: boolean;
60
62
  viewerVisibleDelay: number;
63
+ maxZoom: number;
64
+ minZoom: number;
61
65
  };
62
66
  private bodyOverflow;
63
67
  private scrollBarWidth;
64
68
  private originBodyWidth;
65
69
  get adapter(): PreviewInnerAdapter<PreviewInnerProps, PreviewInnerStates>;
66
- timer: any;
67
70
  context: PreviewContextProps;
68
71
  foundation: PreviewInnerFoundation;
72
+ imageWrapRef: React.RefObject<HTMLDivElement>;
73
+ headerRef: React.RefObject<HTMLElement>;
74
+ footerRef: React.RefObject<HTMLElement>;
75
+ leftIconRef: React.RefObject<HTMLDivElement>;
76
+ rightIconRef: React.RefObject<HTMLDivElement>;
69
77
  constructor(props: PreviewInnerProps);
70
78
  static getDerivedStateFromProps(props: PreviewInnerProps, state: PreviewInnerStates): Partial<PreviewInnerStates>;
71
79
  componentDidMount(): void;
@@ -81,10 +89,11 @@ export default class PreviewInner extends BaseComponent<PreviewInnerProps, Previ
81
89
  handleZoomImage: (newZoom: number) => void;
82
90
  handleMouseUp: (e: any) => void;
83
91
  handleMouseMove: (e: any) => void;
84
- handleMouseEvent: (e: any, event: string) => void;
85
92
  handleKeyDown: (e: KeyboardEvent) => void;
86
93
  onImageError: () => void;
87
94
  onImageLoad: (src: any) => void;
88
95
  handleMouseDown: (e: any) => void;
96
+ handleWheel: (e: any) => void;
97
+ registryImageWrapRef: (ref: any) => void;
89
98
  render(): JSX.Element;
90
99
  }