@douyinfe/semi-ui 2.49.1 → 2.50.0-alpha.1

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 (61) hide show
  1. package/dist/css/semi.css +74 -161
  2. package/dist/css/semi.min.css +1 -1
  3. package/dist/umd/semi-ui.js +465 -389
  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/image/interface.d.ts +3 -3
  8. package/lib/cjs/image/previewFooter.js +8 -5
  9. package/lib/cjs/image/previewHeader.d.ts +2 -2
  10. package/lib/cjs/image/previewHeader.js +8 -9
  11. package/lib/cjs/image/previewImage.d.ts +12 -1
  12. package/lib/cjs/image/previewImage.js +83 -23
  13. package/lib/cjs/image/previewInner.d.ts +2 -11
  14. package/lib/cjs/image/previewInner.js +42 -60
  15. package/lib/cjs/index.d.ts +0 -2
  16. package/lib/cjs/index.js +0 -14
  17. package/lib/cjs/modal/confirm.d.ts +6 -6
  18. package/lib/cjs/notification/index.d.ts +8 -8
  19. package/lib/cjs/notification/notice.d.ts +1 -1
  20. package/lib/cjs/notification/notice.js +1 -1
  21. package/lib/cjs/table/ColumnSorter.d.ts +3 -1
  22. package/lib/cjs/table/ColumnSorter.js +26 -15
  23. package/lib/cjs/table/Table.js +1 -0
  24. package/lib/cjs/table/interface.d.ts +4 -0
  25. package/lib/cjs/tree/indent.d.ts +9 -0
  26. package/lib/cjs/tree/indent.js +37 -0
  27. package/lib/cjs/tree/index.d.ts +2 -0
  28. package/lib/cjs/tree/index.js +8 -3
  29. package/lib/cjs/tree/interface.d.ts +2 -0
  30. package/lib/cjs/tree/treeNode.d.ts +3 -0
  31. package/lib/cjs/tree/treeNode.js +34 -6
  32. package/lib/cjs/treeSelect/index.d.ts +2 -1
  33. package/lib/cjs/treeSelect/index.js +7 -2
  34. package/lib/es/image/interface.d.ts +3 -3
  35. package/lib/es/image/previewFooter.js +8 -5
  36. package/lib/es/image/previewHeader.d.ts +2 -2
  37. package/lib/es/image/previewHeader.js +3 -4
  38. package/lib/es/image/previewImage.d.ts +12 -1
  39. package/lib/es/image/previewImage.js +83 -23
  40. package/lib/es/image/previewInner.d.ts +2 -11
  41. package/lib/es/image/previewInner.js +42 -60
  42. package/lib/es/index.d.ts +0 -2
  43. package/lib/es/index.js +0 -2
  44. package/lib/es/modal/confirm.d.ts +6 -6
  45. package/lib/es/notification/index.d.ts +8 -8
  46. package/lib/es/notification/notice.d.ts +1 -1
  47. package/lib/es/notification/notice.js +1 -1
  48. package/lib/es/table/ColumnSorter.d.ts +3 -1
  49. package/lib/es/table/ColumnSorter.js +26 -15
  50. package/lib/es/table/Table.js +1 -0
  51. package/lib/es/table/interface.d.ts +4 -0
  52. package/lib/es/tree/indent.d.ts +9 -0
  53. package/lib/es/tree/indent.js +27 -0
  54. package/lib/es/tree/index.d.ts +2 -0
  55. package/lib/es/tree/index.js +8 -3
  56. package/lib/es/tree/interface.d.ts +2 -0
  57. package/lib/es/tree/treeNode.d.ts +3 -0
  58. package/lib/es/tree/treeNode.js +34 -6
  59. package/lib/es/treeSelect/index.d.ts +2 -1
  60. package/lib/es/treeSelect/index.js +7 -2
  61. package/package.json +8 -8
@@ -53,8 +53,6 @@ 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;
58
56
  renderHeader?: (info: any) => ReactNode;
59
57
  renderPreviewMenu?: (props: MenuProps) => ReactNode;
60
58
  getPopupContainer?: () => HTMLElement;
@@ -140,12 +138,14 @@ export interface FooterProps extends SliderProps {
140
138
  onRotate?: (direction: string) => void;
141
139
  onDownload?: () => void;
142
140
  renderPreviewMenu?: (props: MenuProps) => ReactNode;
143
- forwardRef?: React.RefObject<HTMLElement>;
144
141
  }
145
142
  export interface PreviewImageProps {
146
143
  src?: string;
147
144
  rotation?: number;
148
145
  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,9 +19,14 @@ 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;
22
23
  class Footer extends _baseComponent.default {
23
24
  get adapter() {
24
- return Object.assign({}, super.adapter);
25
+ return Object.assign(Object.assign({}, super.adapter), {
26
+ setStartMouseOffset: time => {
27
+ mouseActiveTime = time;
28
+ }
29
+ });
25
30
  }
26
31
  constructor(props) {
27
32
  super(props);
@@ -261,15 +266,13 @@ class Footer extends _baseComponent.default {
261
266
  render() {
262
267
  const {
263
268
  className,
264
- renderPreviewMenu,
265
- forwardRef
269
+ renderPreviewMenu
266
270
  } = this.props;
267
271
  const menuCls = (0, _classnames.default)(footerPrefixCls, `${footerPrefixCls}-wrapper`, className, {
268
272
  [`${footerPrefixCls}-content`]: !Boolean(renderPreviewMenu)
269
273
  });
270
274
  return /*#__PURE__*/_react.default.createElement("section", {
271
- className: menuCls,
272
- ref: forwardRef
275
+ className: menuCls
273
276
  }, renderPreviewMenu ? this.customRenderViewMenu() : this.getFooterMenu());
274
277
  }
275
278
  }
@@ -1,4 +1,4 @@
1
- import React from "react";
1
+ import * as React from "react";
2
2
  import { HeaderProps } from "./interface";
3
- declare const Header: React.ForwardRefExoticComponent<HeaderProps & React.RefAttributes<HTMLElement>>;
3
+ declare const Header: React.FC<HeaderProps>;
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 = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
16
+ const Header = _ref => {
17
17
  let {
18
18
  onClose,
19
19
  titleStyle,
20
20
  className,
21
21
  renderHeader
22
22
  } = _ref;
23
- return /*#__PURE__*/_react.default.createElement(_previewContext.PreviewContext.Consumer, null, _ref2 => {
23
+ return /*#__PURE__*/React.createElement(_previewContext.PreviewContext.Consumer, null, _ref2 => {
24
24
  let {
25
25
  currentIndex,
26
26
  titles
@@ -29,17 +29,16 @@ const Header = /*#__PURE__*/(0, _react.forwardRef)((_ref, ref) => {
29
29
  if (titles && typeof currentIndex === "number") {
30
30
  title = titles[currentIndex];
31
31
  }
32
- return /*#__PURE__*/_react.default.createElement("section", {
33
- ref: ref,
32
+ return /*#__PURE__*/React.createElement("section", {
34
33
  className: (0, _classnames.default)(prefixCls, className)
35
- }, /*#__PURE__*/_react.default.createElement("section", {
34
+ }, /*#__PURE__*/React.createElement("section", {
36
35
  className: `${prefixCls}-title`,
37
36
  style: titleStyle
38
- }, renderHeader ? renderHeader(title) : title), /*#__PURE__*/_react.default.createElement("section", {
37
+ }, renderHeader ? renderHeader(title) : title), /*#__PURE__*/React.createElement("section", {
39
38
  className: `${prefixCls}-close`,
40
39
  onMouseUp: onClose
41
- }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconClose, null)));
40
+ }, /*#__PURE__*/React.createElement(_semiIcons.IconClose, null)));
42
41
  });
43
- });
42
+ };
44
43
  var _default = Header;
45
44
  exports.default = _default;
@@ -8,6 +8,9 @@ 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>;
11
14
  zoom: PropTypes.Requireable<number>;
12
15
  ratio: PropTypes.Requireable<string>;
13
16
  disableDownload: PropTypes.Requireable<boolean>;
@@ -18,21 +21,29 @@ export default class PreviewImage extends BaseComponent<PreviewImageProps, Previ
18
21
  onError: PropTypes.Requireable<(...args: any[]) => any>;
19
22
  };
20
23
  static defaultProps: {
24
+ maxZoom: number;
25
+ minZoom: number;
26
+ zoomStep: number;
21
27
  zoom: any;
22
28
  };
23
29
  get adapter(): PreviewImageAdapter<PreviewImageProps, PreviewImageStates>;
24
30
  containerRef: React.RefObject<HTMLDivElement>;
25
- imageRef: React.RefObject<HTMLImageElement>;
31
+ imageRef: HTMLImageElement | null;
26
32
  foundation: PreviewImageFoundation;
27
33
  constructor(props: any);
28
34
  componentDidMount(): void;
29
35
  componentWillUnmount(): void;
30
36
  componentDidUpdate(prevProps: PreviewImageProps, prevStates: PreviewImageStates): void;
31
37
  onWindowResize: () => void;
38
+ handleZoomChange: (newZoom: any, e: any) => void;
32
39
  handleRightClickImage: (e: any) => void;
40
+ handleWheel: (e: any) => void;
33
41
  handleLoad: (e: any) => void;
34
42
  handleError: (e: any) => void;
43
+ resizeImage: () => void;
35
44
  handleMoveImage: (e: any) => void;
45
+ registryImageRef: (ref: any) => void;
36
46
  onImageMouseDown: (e: React.MouseEvent<HTMLImageElement>) => void;
47
+ onImageMouseUp: () => void;
37
48
  render(): JSX.Element;
38
49
  }
@@ -13,14 +13,38 @@ 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
+ };
16
24
  class PreviewImage extends _baseComponent.default {
17
25
  get adapter() {
18
26
  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
+ },
19
35
  getContainer: () => {
20
36
  return this.containerRef.current;
21
37
  },
22
38
  getImage: () => {
23
- return this.imageRef.current;
39
+ return this.imageRef;
40
+ },
41
+ getMouseMove: () => startMouseMove,
42
+ setStartMouseMove: move => {
43
+ startMouseMove = move;
44
+ },
45
+ getMouseOffset: () => startMouseOffset,
46
+ setStartMouseOffset: offset => {
47
+ startMouseOffset = offset;
24
48
  },
25
49
  setLoading: loading => {
26
50
  this.setState({
@@ -28,7 +52,7 @@ class PreviewImage extends _baseComponent.default {
28
52
  });
29
53
  },
30
54
  setImageCursor: canDrag => {
31
- this.imageRef.current.style.cursor = canDrag ? "grab" : "default";
55
+ this.imageRef.style.cursor = canDrag ? "grab" : "default";
32
56
  }
33
57
  });
34
58
  }
@@ -37,22 +61,52 @@ class PreviewImage extends _baseComponent.default {
37
61
  this.onWindowResize = () => {
38
62
  this.foundation.handleWindowResize();
39
63
  };
64
+ this.handleZoomChange = (newZoom, e) => {
65
+ this.foundation.handleZoomChange(newZoom, e);
66
+ };
40
67
  // Determine the response method of right click according to the disableDownload parameter in props
41
68
  this.handleRightClickImage = e => {
42
69
  this.foundation.handleRightClickImage(e);
43
70
  };
71
+ this.handleWheel = e => {
72
+ this.foundation.handleWheel(e);
73
+ };
44
74
  this.handleLoad = e => {
45
75
  this.foundation.handleLoad(e);
46
76
  };
47
77
  this.handleError = e => {
48
78
  this.foundation.handleError(e);
49
79
  };
80
+ this.resizeImage = () => {
81
+ this.foundation.handleResizeImage();
82
+ };
50
83
  this.handleMoveImage = e => {
51
84
  this.foundation.handleMoveImage(e);
52
85
  };
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
+ };
53
104
  this.onImageMouseDown = e => {
54
105
  this.foundation.handleImageMouseDown(e);
55
106
  };
107
+ this.onImageMouseUp = () => {
108
+ this.foundation.handleImageMouseUp();
109
+ };
56
110
  this.state = {
57
111
  width: 0,
58
112
  height: 0,
@@ -66,7 +120,7 @@ class PreviewImage extends _baseComponent.default {
66
120
  left: 0
67
121
  };
68
122
  this.containerRef = /*#__PURE__*/_react.default.createRef();
69
- this.imageRef = /*#__PURE__*/_react.default.createRef();
123
+ this.imageRef = null;
70
124
  this.foundation = new _previewImageFoundation.default(this.adapter);
71
125
  }
72
126
  componentDidMount() {
@@ -77,23 +131,28 @@ class PreviewImage extends _baseComponent.default {
77
131
  }
78
132
  componentDidUpdate(prevProps, prevStates) {
79
133
  // If src changes, start a new loading
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) {
134
+ if (this.props.src && this.props.src !== prevProps.src) {
83
135
  this.foundation.setLoading(true);
84
136
  }
85
137
  // If the incoming zoom changes, other content changes are determined based on the new zoom value
86
- if (zoomChange) {
87
- this.foundation.calculatePreviewImage(this.props.zoom, null);
138
+ if ("zoom" in this.props && this.props.zoom !== prevStates.currZoom) {
139
+ this.handleZoomChange(this.props.zoom, null);
88
140
  }
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();
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
+ }
95
150
  }
96
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
+ }
97
156
  }
98
157
  render() {
99
158
  const {
@@ -114,20 +173,21 @@ class PreviewImage extends _baseComponent.default {
114
173
  transform: `rotate(${-rotation}deg)`,
115
174
  top,
116
175
  left,
117
- width,
118
- height
176
+ width: loading ? "auto" : `${width}px`,
177
+ height: loading ? "auto" : `${height}px`
119
178
  };
120
179
  return /*#__PURE__*/_react.default.createElement("div", {
121
180
  className: `${preViewImgPrefixCls}`,
122
181
  ref: this.containerRef
123
182
  }, /*#__PURE__*/_react.default.createElement("img", {
124
- ref: this.imageRef,
183
+ ref: this.registryImageRef,
125
184
  src: src,
126
185
  alt: "previewImag",
127
186
  className: `${preViewImgPrefixCls}-img`,
128
187
  key: src,
129
188
  onMouseMove: this.handleMoveImage,
130
189
  onMouseDown: this.onImageMouseDown,
190
+ onMouseUp: this.onImageMouseUp,
131
191
  onContextMenu: this.handleRightClickImage,
132
192
  onDragStart: e => e.preventDefault(),
133
193
  onLoad: this.handleLoad,
@@ -145,9 +205,9 @@ PreviewImage.propTypes = {
145
205
  src: _propTypes.default.string,
146
206
  rotation: _propTypes.default.number,
147
207
  style: _propTypes.default.object,
148
- // maxZoom: PropTypes.number,
149
- // minZoom: PropTypes.number,
150
- // zoomStep: PropTypes.number,
208
+ maxZoom: _propTypes.default.number,
209
+ minZoom: _propTypes.default.number,
210
+ zoomStep: _propTypes.default.number,
151
211
  zoom: _propTypes.default.number,
152
212
  ratio: _propTypes.default.string,
153
213
  disableDownload: _propTypes.default.bool,
@@ -158,8 +218,8 @@ PreviewImage.propTypes = {
158
218
  onError: _propTypes.default.func
159
219
  };
160
220
  PreviewImage.defaultProps = {
161
- // maxZoom: 5,
162
- // minZoom: 0.1,
163
- // zoomStep: 0.1,
221
+ maxZoom: 5,
222
+ minZoom: 0.1,
223
+ zoomStep: 0.1,
164
224
  zoom: undefined
165
225
  };
@@ -33,8 +33,6 @@ 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>;
38
36
  renderHeader: PropTypes.Requireable<(...args: any[]) => any>;
39
37
  renderPreviewMenu: PropTypes.Requireable<(...args: any[]) => any>;
40
38
  getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
@@ -60,20 +58,14 @@ export default class PreviewInner extends BaseComponent<PreviewInnerProps, Previ
60
58
  zIndex: number;
61
59
  maskClosable: boolean;
62
60
  viewerVisibleDelay: number;
63
- maxZoom: number;
64
- minZoom: number;
65
61
  };
66
62
  private bodyOverflow;
67
63
  private scrollBarWidth;
68
64
  private originBodyWidth;
69
65
  get adapter(): PreviewInnerAdapter<PreviewInnerProps, PreviewInnerStates>;
66
+ timer: any;
70
67
  context: PreviewContextProps;
71
68
  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>;
77
69
  constructor(props: PreviewInnerProps);
78
70
  static getDerivedStateFromProps(props: PreviewInnerProps, state: PreviewInnerStates): Partial<PreviewInnerStates>;
79
71
  componentDidMount(): void;
@@ -89,11 +81,10 @@ export default class PreviewInner extends BaseComponent<PreviewInnerProps, Previ
89
81
  handleZoomImage: (newZoom: number) => void;
90
82
  handleMouseUp: (e: any) => void;
91
83
  handleMouseMove: (e: any) => void;
84
+ handleMouseEvent: (e: any, event: string) => void;
92
85
  handleKeyDown: (e: KeyboardEvent) => void;
93
86
  onImageError: () => void;
94
87
  onImageLoad: (src: any) => void;
95
88
  handleMouseDown: (e: any) => void;
96
- handleWheel: (e: any) => void;
97
- registryImageWrapRef: (ref: any) => void;
98
89
  render(): JSX.Element;
99
90
  }
@@ -21,6 +21,14 @@ var _previewContext = require("./previewContext");
21
21
  var _utils = require("../_utils");
22
22
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
23
23
  const prefixCls = _constants.cssClasses.PREFIX;
24
+ let startMouseDown = {
25
+ x: 0,
26
+ y: 0
27
+ };
28
+ let mouseActiveTime = null;
29
+ let stopTiming = false;
30
+ let timer = null;
31
+ // let bodyOverflowValue = document.body.style.overflow;
24
32
  class PreviewInner extends _baseComponent.default {
25
33
  get adapter() {
26
34
  return Object.assign(Object.assign({}, super.adapter), {
@@ -104,22 +112,30 @@ class PreviewInner extends _baseComponent.default {
104
112
  unregisterKeyDownListener: () => {
105
113
  window && window.removeEventListener("keydown", this.handleKeyDown);
106
114
  },
115
+ getMouseActiveTime: () => {
116
+ return mouseActiveTime;
117
+ },
118
+ getStopTiming: () => {
119
+ return stopTiming;
120
+ },
121
+ setStopTiming: value => {
122
+ stopTiming = value;
123
+ },
124
+ getStartMouseDown: () => {
125
+ return startMouseDown;
126
+ },
127
+ setStartMouseDown: (x, y) => {
128
+ startMouseDown = {
129
+ x,
130
+ y
131
+ };
132
+ },
133
+ setMouseActiveTime: time => {
134
+ mouseActiveTime = time;
135
+ },
107
136
  getSetDownloadFunc: () => {
108
137
  var _a, _b;
109
138
  return (_b = (_a = this.context) === null || _a === void 0 ? void 0 : _a.setDownloadName) !== null && _b !== void 0 ? _b : this.props.setDownloadName;
110
- },
111
- isValidTarget: e => {
112
- const headerDom = this.headerRef && this.headerRef.current;
113
- const footerDom = this.footerRef && this.footerRef.current;
114
- const leftIconDom = this.leftIconRef && this.leftIconRef.current;
115
- const rightIconDom = this.rightIconRef && this.rightIconRef.current;
116
- const target = e.target;
117
- if (headerDom && headerDom.contains(target) || footerDom && footerDom.contains(target) || leftIconDom && leftIconDom.contains(target) || rightIconDom && rightIconDom.contains(target)) {
118
- // Move in the operation area, return false
119
- return false;
120
- }
121
- // Move in the preview area except the operation area, return true
122
- return true;
123
139
  }
124
140
  });
125
141
  }
@@ -152,6 +168,9 @@ class PreviewInner extends _baseComponent.default {
152
168
  this.handleMouseMove = e => {
153
169
  this.foundation.handleMouseMove(e);
154
170
  };
171
+ this.handleMouseEvent = (e, event) => {
172
+ this.foundation.handleMouseMoveEvent(e, event);
173
+ };
155
174
  this.handleKeyDown = e => {
156
175
  this.foundation.handleKeyDown(e);
157
176
  };
@@ -164,31 +183,6 @@ class PreviewInner extends _baseComponent.default {
164
183
  this.handleMouseDown = e => {
165
184
  this.foundation.handleMouseDown(e);
166
185
  };
167
- this.handleWheel = e => {
168
- this.foundation.handleWheel(e);
169
- };
170
- // 为什么通过 addEventListener 注册 wheel 事件而不是使用 onWheel 事件?
171
- // 因为 Passive Event Listeners(https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners)
172
- // Passive Event Listeners 是一种优化技术,用于提高滚动性能。在默认情况下,浏览器会假设事件的监听器不会调用
173
- // preventDefault() 方法来阻止事件的默认行为,从而允许进行一些优化操作,例如滚动平滑。
174
- // 对于 Image 而言,如果使用触控板,双指朝不同方向分开放大图片,则需要 preventDefault 防止页面整体放大。
175
- // Why register wheel event through addEventListener instead of using onWheel event?
176
- // Because of Passive Event Listeners(an optimization technique used to improve scrolling performance. By default,
177
- // the browser will assume that event listeners will not call preventDefault() method to prevent the default behavior of the event,
178
- // allowing some optimization operations such as scroll smoothing.)
179
- // For Image, if we use the trackpad and spread your fingers in different directions to enlarge the image, we need to preventDefault
180
- // to prevent the page from being enlarged as a whole.
181
- this.registryImageWrapRef = ref => {
182
- if (this.imageWrapRef) {
183
- this.imageWrapRef.removeEventListener("wheel", this.handleWheel);
184
- }
185
- if (ref) {
186
- ref.addEventListener("wheel", this.handleWheel, {
187
- passive: false
188
- });
189
- }
190
- this.imageWrapRef = ref;
191
- };
192
186
  this.state = {
193
187
  imgSrc: [],
194
188
  imgLoadStatus: new Map(),
@@ -205,11 +199,6 @@ class PreviewInner extends _baseComponent.default {
205
199
  this.bodyOverflow = '';
206
200
  this.originBodyWidth = '100%';
207
201
  this.scrollBarWidth = 0;
208
- this.imageWrapRef = null;
209
- this.headerRef = /*#__PURE__*/_react.default.createRef();
210
- this.footerRef = /*#__PURE__*/_react.default.createRef();
211
- this.leftIconRef = /*#__PURE__*/_react.default.createRef();
212
- this.rightIconRef = /*#__PURE__*/_react.default.createRef();
213
202
  }
214
203
  static getDerivedStateFromProps(props, state) {
215
204
  const willUpdateStates = {};
@@ -225,9 +214,6 @@ class PreviewInner extends _baseComponent.default {
225
214
  willUpdateStates.visible = props.visible;
226
215
  if (props.visible) {
227
216
  willUpdateStates.preloadAfterVisibleChange = true;
228
- willUpdateStates.viewerVisible = true;
229
- willUpdateStates.rotation = 0;
230
- willUpdateStates.ratio = 'adaptation';
231
217
  }
232
218
  }
233
219
  if ("currentIndex" in props && props.currentIndex !== state.currentIndex) {
@@ -246,8 +232,10 @@ class PreviewInner extends _baseComponent.default {
246
232
  }
247
233
  }
248
234
  componentDidUpdate(prevProps, prevState) {
249
- if (prevProps.src !== this.props.src) {
250
- this.foundation.updateTimer();
235
+ if (prevState.visible !== this.props.visible && this.props.visible) {
236
+ mouseActiveTime = new Date().getTime();
237
+ timer && clearInterval(timer);
238
+ timer = setInterval(this.viewVisibleChange, 1000);
251
239
  }
252
240
  // hide => show
253
241
  if (!prevProps.visible && this.props.visible) {
@@ -259,7 +247,7 @@ class PreviewInner extends _baseComponent.default {
259
247
  }
260
248
  }
261
249
  componentWillUnmount() {
262
- this.foundation.clearTimer();
250
+ timer && clearInterval(timer);
263
251
  }
264
252
  isInGroup() {
265
253
  return Boolean(this.context && this.context.isGroup);
@@ -324,10 +312,10 @@ class PreviewInner extends _baseComponent.default {
324
312
  style: style,
325
313
  onMouseDown: this.handleMouseDown,
326
314
  onMouseUp: this.handleMouseUp,
327
- ref: this.registryImageWrapRef,
328
- onMouseMove: this.handleMouseMove
315
+ onMouseMove: this.handleMouseMove,
316
+ onMouseOver: e => this.handleMouseEvent(e.nativeEvent, "over"),
317
+ onMouseOut: e => this.handleMouseEvent(e.nativeEvent, "out")
329
318
  }, /*#__PURE__*/_react.default.createElement(_previewHeader.default, {
330
- ref: this.headerRef,
331
319
  className: (0, _classnames.default)(hideViewerCls),
332
320
  onClose: this.handlePreviewClose,
333
321
  renderHeader: renderHeader
@@ -338,6 +326,7 @@ class PreviewInner extends _baseComponent.default {
338
326
  setRatio: this.handleAdjustRatio,
339
327
  zoom: zoom,
340
328
  ratio: ratio,
329
+ zoomStep: zoomStep,
341
330
  rotation: rotation,
342
331
  crossOrigin: crossOrigin,
343
332
  onError: this.onImageError,
@@ -346,7 +335,6 @@ class PreviewInner extends _baseComponent.default {
346
335
  /*#__PURE__*/
347
336
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
348
337
  _react.default.createElement("div", {
349
- ref: this.leftIconRef,
350
338
  className: (0, _classnames.default)(`${previewPrefixCls}-icon`, `${previewPrefixCls}-prev`, hideViewerCls),
351
339
  onClick: () => this.handleSwitchImage("prev")
352
340
  }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconArrowLeft, {
@@ -355,13 +343,11 @@ class PreviewInner extends _baseComponent.default {
355
343
  /*#__PURE__*/
356
344
  // eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
357
345
  _react.default.createElement("div", {
358
- ref: this.rightIconRef,
359
346
  className: (0, _classnames.default)(`${previewPrefixCls}-icon`, `${previewPrefixCls}-next`, hideViewerCls),
360
347
  onClick: () => this.handleSwitchImage("next")
361
348
  }, /*#__PURE__*/_react.default.createElement(_semiIcons.IconArrowRight, {
362
349
  size: "large"
363
350
  })), /*#__PURE__*/_react.default.createElement(_previewFooter.default, {
364
- forwardRef: this.footerRef,
365
351
  className: hideViewerCls,
366
352
  totalNum: total,
367
353
  curPage: currentIndex + 1,
@@ -420,8 +406,6 @@ PreviewInner.propTypes = {
420
406
  disableDownload: _propTypes.default.bool,
421
407
  viewerVisibleDelay: _propTypes.default.number,
422
408
  zIndex: _propTypes.default.number,
423
- maxZoom: _propTypes.default.number,
424
- minZoom: _propTypes.default.number,
425
409
  renderHeader: _propTypes.default.func,
426
410
  renderPreviewMenu: _propTypes.default.func,
427
411
  getPopupContainer: _propTypes.default.func,
@@ -446,7 +430,5 @@ PreviewInner.defaultProps = {
446
430
  preLoadGap: 2,
447
431
  zIndex: 1000,
448
432
  maskClosable: true,
449
- viewerVisibleDelay: 10000,
450
- maxZoom: 5,
451
- minZoom: 0.1
433
+ viewerVisibleDelay: 10000
452
434
  };
@@ -1,6 +1,4 @@
1
1
  import './_base/base.css';
2
- export { default as BaseFoundation } from '@douyinfe/semi-foundation/lib/cjs/base/foundation';
3
- export { default as BaseComponent } from "./_base/baseComponent";
4
2
  export { default as Anchor } from './anchor';
5
3
  export { default as AutoComplete } from './autoComplete';
6
4
  export { default as Avatar } from './avatar';
package/lib/cjs/index.js CHANGED
@@ -51,18 +51,6 @@ Object.defineProperty(exports, "Banner", {
51
51
  return _banner.default;
52
52
  }
53
53
  });
54
- Object.defineProperty(exports, "BaseComponent", {
55
- enumerable: true,
56
- get: function () {
57
- return _baseComponent.default;
58
- }
59
- });
60
- Object.defineProperty(exports, "BaseFoundation", {
61
- enumerable: true,
62
- get: function () {
63
- return _foundation.default;
64
- }
65
- });
66
54
  Object.defineProperty(exports, "Breadcrumb", {
67
55
  enumerable: true,
68
56
  get: function () {
@@ -574,8 +562,6 @@ Object.defineProperty(exports, "withFormState", {
574
562
  }
575
563
  });
576
564
  require("./_base/base.css");
577
- var _foundation = _interopRequireDefault(require("@douyinfe/semi-foundation/lib/cjs/base/foundation"));
578
- var _baseComponent = _interopRequireDefault(require("./_base/baseComponent"));
579
565
  var _anchor = _interopRequireDefault(require("./anchor"));
580
566
  var _autoComplete = _interopRequireDefault(require("./autoComplete"));
581
567
  var _avatar = _interopRequireDefault(require("./avatar"));