@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
@@ -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>;
@@ -167,8 +167,8 @@ Banner.propTypes = {
167
167
  type: _propTypes.default.oneOf(types),
168
168
  title: _propTypes.default.node,
169
169
  description: _propTypes.default.node,
170
- icon: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]),
171
- closeIcon: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]),
170
+ icon: _propTypes.default.node,
171
+ closeIcon: _propTypes.default.node,
172
172
  children: _propTypes.default.node,
173
173
  style: _propTypes.default.object,
174
174
  className: _propTypes.default.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
  };
@@ -188,7 +188,7 @@ BreadcrumbItem.propTypes = {
188
188
  children: _propTypes.default.node,
189
189
  active: _propTypes.default.bool,
190
190
  shouldRenderSeparator: _propTypes.default.bool,
191
- icon: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.node]),
191
+ icon: _propTypes.default.node,
192
192
  separator: _propTypes.default.node,
193
193
  noLink: _propTypes.default.bool
194
194
  };
@@ -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>>;
@@ -125,7 +125,8 @@ class DayCalendar extends _baseComponent.default {
125
125
  height,
126
126
  width,
127
127
  style,
128
- header
128
+ header,
129
+ minEventHeight
129
130
  } = this.props;
130
131
  const dayCls = (0, _classnames.default)(prefixCls, className);
131
132
  const dayStyle = Object.assign({
@@ -158,6 +159,7 @@ class DayCalendar extends _baseComponent.default {
158
159
  handleClick: this.handleClick,
159
160
  showCurrTime: showCurrTime,
160
161
  isWeekend: this.isWeekend,
162
+ minEventHeight: minEventHeight,
161
163
  dateGridRender: dateGridRender
162
164
  }))));
163
165
  }
@@ -172,6 +174,7 @@ DayCalendar.propTypes = {
172
174
  mode: _propTypes.default.string,
173
175
  renderTimeDisplay: _propTypes.default.func,
174
176
  markWeekend: _propTypes.default.bool,
177
+ minEventHeight: _propTypes.default.number,
175
178
  scrollTop: _propTypes.default.number,
176
179
  width: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
177
180
  height: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.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;
@@ -25,7 +25,8 @@ class DayCol extends _baseComponent.default {
25
25
  this.renderEvents = () => {
26
26
  const {
27
27
  events,
28
- scrollHeight
28
+ scrollHeight,
29
+ minEventHeight
29
30
  } = this.props;
30
31
  const list = events.map((event, ind) => {
31
32
  const {
@@ -36,12 +37,9 @@ class DayCol extends _baseComponent.default {
36
37
  } = event;
37
38
  const top = startPos * scrollHeight;
38
39
  const height = (endPos - startPos) * scrollHeight;
39
- if (!height) {
40
- return undefined;
41
- }
42
40
  const style = {
43
41
  top: `${top}px`,
44
- height: `${height}px`
42
+ height: `${Math.max(minEventHeight, height)}px`
45
43
  };
46
44
  return /*#__PURE__*/_react.default.createElement("li", {
47
45
  className: `${_constants.cssClasses.PREFIX}-event-item ${_constants.cssClasses.PREFIX}-event-day`,
@@ -156,6 +154,7 @@ DayCol.propTypes = {
156
154
  currPos: _propTypes.default.number,
157
155
  handleClick: _propTypes.default.func,
158
156
  mode: _propTypes.default.string,
157
+ minEventHeight: _propTypes.default.number,
159
158
  isWeekend: _propTypes.default.bool,
160
159
  dateGridRender: _propTypes.default.func
161
160
  };
@@ -164,6 +163,7 @@ DayCol.defaultProps = {
164
163
  showCurrTime: true,
165
164
  scrollHeight: 0,
166
165
  currPos: 0,
167
- mode: 'dayCol'
166
+ mode: 'dayCol',
167
+ minEventHeight: Number.MIN_SAFE_INTEGER
168
168
  };
169
169
  DayCol.contextType = _context.default;
@@ -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>;
@@ -69,6 +69,7 @@ Calendar.propTypes = {
69
69
  renderTimeDisplay: _propTypes.default.func,
70
70
  renderDateDisplay: _propTypes.default.func,
71
71
  markWeekend: _propTypes.default.bool,
72
+ minEventHeight: _propTypes.default.number,
72
73
  width: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
73
74
  height: _propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string]),
74
75
  style: _propTypes.default.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;
@@ -46,7 +46,8 @@ class RangeCalendar extends _baseComponent.default {
46
46
  } = this.RangeData;
47
47
  const {
48
48
  markWeekend,
49
- dateGridRender
49
+ dateGridRender,
50
+ minEventHeight
50
51
  } = this.props;
51
52
  const inner = week.map(day => {
52
53
  const dateString = day.date.toString();
@@ -60,7 +61,8 @@ class RangeCalendar extends _baseComponent.default {
60
61
  events: parsed.day,
61
62
  showCurrTime: this.props.showCurrTime,
62
63
  isWeekend: markWeekend && day.isWeekend,
63
- dateGridRender: dateGridRender
64
+ dateGridRender: dateGridRender,
65
+ minEventHeight: minEventHeight
64
66
  });
65
67
  });
66
68
  return inner;
@@ -47,7 +47,8 @@ class WeekCalendar extends _baseComponent.default {
47
47
  } = this.weeklyData;
48
48
  const {
49
49
  markWeekend,
50
- dateGridRender
50
+ dateGridRender,
51
+ minEventHeight
51
52
  } = this.props;
52
53
  const inner = week.map(day => {
53
54
  const dateString = day.date.toString();
@@ -61,7 +62,8 @@ class WeekCalendar extends _baseComponent.default {
61
62
  events: parsed.day,
62
63
  showCurrTime: this.props.showCurrTime,
63
64
  isWeekend: markWeekend && day.isWeekend,
64
- dateGridRender: dateGridRender
65
+ dateGridRender: dateGridRender,
66
+ minEventHeight: minEventHeight
65
67
  });
66
68
  });
67
69
  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;
@@ -19,14 +19,9 @@ var _localeConsumer = _interopRequireDefault(require("../locale/localeConsumer")
19
19
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
20
20
  const prefixCls = _constants.cssClasses.PREFIX;
21
21
  const footerPrefixCls = `${_constants.cssClasses.PREFIX}-preview-footer`;
22
- let mouseActiveTime = 0;
23
22
  class Footer extends _baseComponent.default {
24
23
  get adapter() {
25
- return Object.assign(Object.assign({}, super.adapter), {
26
- setStartMouseOffset: time => {
27
- mouseActiveTime = time;
28
- }
29
- });
24
+ return Object.assign({}, super.adapter);
30
25
  }
31
26
  constructor(props) {
32
27
  super(props);
@@ -266,13 +261,15 @@ class Footer extends _baseComponent.default {
266
261
  render() {
267
262
  const {
268
263
  className,
269
- renderPreviewMenu
264
+ renderPreviewMenu,
265
+ forwardRef
270
266
  } = this.props;
271
267
  const menuCls = (0, _classnames.default)(footerPrefixCls, `${footerPrefixCls}-wrapper`, className, {
272
268
  [`${footerPrefixCls}-content`]: !Boolean(renderPreviewMenu)
273
269
  });
274
270
  return /*#__PURE__*/_react.default.createElement("section", {
275
- className: menuCls
271
+ className: menuCls,
272
+ ref: forwardRef
276
273
  }, renderPreviewMenu ? this.customRenderViewMenu() : this.getFooterMenu());
277
274
  }
278
275
  }
@@ -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;
@@ -4,7 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.default = void 0;
7
- var React = _interopRequireWildcard(require("react"));
7
+ var _react = _interopRequireWildcard(require("react"));
8
8
  var _semiIcons = require("@douyinfe/semi-icons");
9
9
  var _constants = require("@douyinfe/semi-foundation/lib/cjs/image/constants");
10
10
  var _classnames = _interopRequireDefault(require("classnames"));
@@ -13,14 +13,14 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de
13
13
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
14
14
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
15
15
  const prefixCls = `${_constants.cssClasses.PREFIX}-preview-header`;
16
- const Header = _ref => {
16
+ const Header = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
17
17
  let {
18
18
  onClose,
19
19
  titleStyle,
20
20
  className,
21
21
  renderHeader
22
22
  } = _ref;
23
- return /*#__PURE__*/React.createElement(_previewContext.PreviewContext.Consumer, null, _ref2 => {
23
+ return /*#__PURE__*/_react.default.createElement(_previewContext.PreviewContext.Consumer, null, _ref2 => {
24
24
  let {
25
25
  currentIndex,
26
26
  titles
@@ -29,16 +29,17 @@ const Header = _ref => {
29
29
  if (titles && typeof currentIndex === "number") {
30
30
  title = titles[currentIndex];
31
31
  }
32
- return /*#__PURE__*/React.createElement("section", {
32
+ return /*#__PURE__*/_react.default.createElement("section", {
33
+ ref: ref,
33
34
  className: (0, _classnames.default)(prefixCls, className)
34
- }, /*#__PURE__*/React.createElement("section", {
35
+ }, /*#__PURE__*/_react.default.createElement("section", {
35
36
  className: `${prefixCls}-title`,
36
37
  style: titleStyle
37
- }, renderHeader ? renderHeader(title) : title), /*#__PURE__*/React.createElement("section", {
38
+ }, renderHeader ? renderHeader(title) : title), /*#__PURE__*/_react.default.createElement("section", {
38
39
  className: `${prefixCls}-close`,
39
40
  onMouseUp: onClose
40
- }, /*#__PURE__*/React.createElement(_semiIcons.IconClose, null)));
41
+ }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClose, null)));
41
42
  });
42
- };
43
+ });
43
44
  var _default = Header;
44
45
  exports.default = _default;
@@ -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
  }
@@ -13,38 +13,14 @@ var _previewImageFoundation = _interopRequireDefault(require("@douyinfe/semi-fou
13
13
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
14
14
  const prefixCls = _constants.cssClasses.PREFIX;
15
15
  const preViewImgPrefixCls = `${prefixCls}-preview-image`;
16
- let originImageWidth = null;
17
- let originImageHeight = null;
18
- let startMouseMove = false;
19
- // startMouseOffset:The offset of the mouse relative to the left and top of the picture
20
- let startMouseOffset = {
21
- x: 0,
22
- y: 0
23
- };
24
16
  class PreviewImage extends _baseComponent.default {
25
17
  get adapter() {
26
18
  return Object.assign(Object.assign({}, super.adapter), {
27
- getOriginImageSize: () => ({
28
- originImageWidth,
29
- originImageHeight
30
- }),
31
- setOriginImageSize: size => {
32
- originImageWidth = size.originImageWidth;
33
- originImageHeight = size.originImageHeight;
34
- },
35
19
  getContainer: () => {
36
20
  return this.containerRef.current;
37
21
  },
38
22
  getImage: () => {
39
- return this.imageRef;
40
- },
41
- getMouseMove: () => startMouseMove,
42
- setStartMouseMove: move => {
43
- startMouseMove = move;
44
- },
45
- getMouseOffset: () => startMouseOffset,
46
- setStartMouseOffset: offset => {
47
- startMouseOffset = offset;
23
+ return this.imageRef.current;
48
24
  },
49
25
  setLoading: loading => {
50
26
  this.setState({
@@ -52,7 +28,7 @@ class PreviewImage extends _baseComponent.default {
52
28
  });
53
29
  },
54
30
  setImageCursor: canDrag => {
55
- this.imageRef.style.cursor = canDrag ? "grab" : "default";
31
+ this.imageRef.current.style.cursor = canDrag ? "grab" : "default";
56
32
  }
57
33
  });
58
34
  }
@@ -61,52 +37,22 @@ class PreviewImage extends _baseComponent.default {
61
37
  this.onWindowResize = () => {
62
38
  this.foundation.handleWindowResize();
63
39
  };
64
- this.handleZoomChange = (newZoom, e) => {
65
- this.foundation.handleZoomChange(newZoom, e);
66
- };
67
40
  // Determine the response method of right click according to the disableDownload parameter in props
68
41
  this.handleRightClickImage = e => {
69
42
  this.foundation.handleRightClickImage(e);
70
43
  };
71
- this.handleWheel = e => {
72
- this.foundation.handleWheel(e);
73
- };
74
44
  this.handleLoad = e => {
75
45
  this.foundation.handleLoad(e);
76
46
  };
77
47
  this.handleError = e => {
78
48
  this.foundation.handleError(e);
79
49
  };
80
- this.resizeImage = () => {
81
- this.foundation.handleResizeImage();
82
- };
83
50
  this.handleMoveImage = e => {
84
51
  this.foundation.handleMoveImage(e);
85
52
  };
86
- // 为什么通过ref注册wheel而不是使用onWheel事件?
87
- // 因为对于wheel事件,浏览器将 addEventListener 的 passive 默认值更改为 true。如此,事件监听器便不能取消事件,也不会在用户滚动页面时阻止页面呈现。
88
- // 这里我们需要保持页面不动,仅放大图片,因此此处需要将 passive 更改设置为 false。
89
- // Why register wheel via ref instead of using onWheel event?
90
- // 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.
91
- // 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.
92
- // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners。
93
- this.registryImageRef = ref => {
94
- if (this.imageRef) {
95
- this.imageRef.removeEventListener("wheel", this.handleWheel);
96
- }
97
- if (ref) {
98
- ref.addEventListener("wheel", this.handleWheel, {
99
- passive: false
100
- });
101
- }
102
- this.imageRef = ref;
103
- };
104
53
  this.onImageMouseDown = e => {
105
54
  this.foundation.handleImageMouseDown(e);
106
55
  };
107
- this.onImageMouseUp = () => {
108
- this.foundation.handleImageMouseUp();
109
- };
110
56
  this.state = {
111
57
  width: 0,
112
58
  height: 0,
@@ -120,7 +66,7 @@ class PreviewImage extends _baseComponent.default {
120
66
  left: 0
121
67
  };
122
68
  this.containerRef = /*#__PURE__*/_react.default.createRef();
123
- this.imageRef = null;
69
+ this.imageRef = /*#__PURE__*/_react.default.createRef();
124
70
  this.foundation = new _previewImageFoundation.default(this.adapter);
125
71
  }
126
72
  componentDidMount() {
@@ -131,27 +77,22 @@ class PreviewImage extends _baseComponent.default {
131
77
  }
132
78
  componentDidUpdate(prevProps, prevStates) {
133
79
  // If src changes, start a new loading
134
- if (this.props.src && this.props.src !== prevProps.src) {
80
+ const zoomChange = "zoom" in this.props && this.props.zoom !== this.state.currZoom;
81
+ const srcChange = this.props.src && this.props.src !== prevProps.src;
82
+ if (srcChange) {
135
83
  this.foundation.setLoading(true);
136
84
  }
137
85
  // If the incoming zoom changes, other content changes are determined based on the new zoom value
138
- if ("zoom" in this.props && this.props.zoom !== prevStates.currZoom) {
139
- this.handleZoomChange(this.props.zoom, null);
86
+ if (zoomChange) {
87
+ this.foundation.calculatePreviewImage(this.props.zoom, null);
140
88
  }
141
- // When the incoming ratio is changed, if it"s adaptation, then resizeImage is triggered to make the image adapt to the page
142
- // else if it"s adaptation is realSize, then onZoom(1) is called to make the image size the original size;
143
- if ("ratio" in this.props && this.props.ratio !== prevProps.ratio) {
144
- if (originImageWidth && originImageHeight) {
145
- if (this.props.ratio === "adaptation") {
146
- this.resizeImage();
147
- } else {
148
- this.props.onZoom(1);
149
- }
89
+ if (!zoomChange && !srcChange && prevProps) {
90
+ if ("ratio" in this.props && this.props.ratio !== prevProps.ratio) {
91
+ this.foundation.handleRatioChange();
92
+ }
93
+ if ("rotation" in this.props && this.props.rotation !== prevProps.rotation) {
94
+ this.onWindowResize();
150
95
  }
151
- }
152
- // When the incoming rotation angle of the image changes, it needs to be resized to make the image fit on the page
153
- if ("rotation" in this.props && this.props.rotation !== prevProps.rotation) {
154
- this.onWindowResize();
155
96
  }
156
97
  }
157
98
  render() {
@@ -173,21 +114,20 @@ class PreviewImage extends _baseComponent.default {
173
114
  transform: `rotate(${-rotation}deg)`,
174
115
  top,
175
116
  left,
176
- width: loading ? "auto" : `${width}px`,
177
- height: loading ? "auto" : `${height}px`
117
+ width,
118
+ height
178
119
  };
179
120
  return /*#__PURE__*/_react.default.createElement("div", {
180
121
  className: `${preViewImgPrefixCls}`,
181
122
  ref: this.containerRef
182
123
  }, /*#__PURE__*/_react.default.createElement("img", {
183
- ref: this.registryImageRef,
124
+ ref: this.imageRef,
184
125
  src: src,
185
126
  alt: "previewImag",
186
127
  className: `${preViewImgPrefixCls}-img`,
187
128
  key: src,
188
129
  onMouseMove: this.handleMoveImage,
189
130
  onMouseDown: this.onImageMouseDown,
190
- onMouseUp: this.onImageMouseUp,
191
131
  onContextMenu: this.handleRightClickImage,
192
132
  onDragStart: e => e.preventDefault(),
193
133
  onLoad: this.handleLoad,
@@ -205,9 +145,9 @@ PreviewImage.propTypes = {
205
145
  src: _propTypes.default.string,
206
146
  rotation: _propTypes.default.number,
207
147
  style: _propTypes.default.object,
208
- maxZoom: _propTypes.default.number,
209
- minZoom: _propTypes.default.number,
210
- zoomStep: _propTypes.default.number,
148
+ // maxZoom: PropTypes.number,
149
+ // minZoom: PropTypes.number,
150
+ // zoomStep: PropTypes.number,
211
151
  zoom: _propTypes.default.number,
212
152
  ratio: _propTypes.default.string,
213
153
  disableDownload: _propTypes.default.bool,
@@ -218,8 +158,8 @@ PreviewImage.propTypes = {
218
158
  onError: _propTypes.default.func
219
159
  };
220
160
  PreviewImage.defaultProps = {
221
- maxZoom: 5,
222
- minZoom: 0.1,
223
- zoomStep: 0.1,
161
+ // maxZoom: 5,
162
+ // minZoom: 0.1,
163
+ // zoomStep: 0.1,
224
164
  zoom: undefined
225
165
  };
@@ -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
  }