@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.
- package/dist/css/semi.css +74 -161
- package/dist/css/semi.min.css +1 -1
- package/dist/umd/semi-ui.js +465 -389
- package/dist/umd/semi-ui.js.map +1 -1
- package/dist/umd/semi-ui.min.js +1 -1
- package/dist/umd/semi-ui.min.js.map +1 -1
- package/lib/cjs/image/interface.d.ts +3 -3
- package/lib/cjs/image/previewFooter.js +8 -5
- package/lib/cjs/image/previewHeader.d.ts +2 -2
- package/lib/cjs/image/previewHeader.js +8 -9
- package/lib/cjs/image/previewImage.d.ts +12 -1
- package/lib/cjs/image/previewImage.js +83 -23
- package/lib/cjs/image/previewInner.d.ts +2 -11
- package/lib/cjs/image/previewInner.js +42 -60
- package/lib/cjs/index.d.ts +0 -2
- package/lib/cjs/index.js +0 -14
- package/lib/cjs/modal/confirm.d.ts +6 -6
- package/lib/cjs/notification/index.d.ts +8 -8
- package/lib/cjs/notification/notice.d.ts +1 -1
- package/lib/cjs/notification/notice.js +1 -1
- package/lib/cjs/table/ColumnSorter.d.ts +3 -1
- package/lib/cjs/table/ColumnSorter.js +26 -15
- package/lib/cjs/table/Table.js +1 -0
- package/lib/cjs/table/interface.d.ts +4 -0
- package/lib/cjs/tree/indent.d.ts +9 -0
- package/lib/cjs/tree/indent.js +37 -0
- package/lib/cjs/tree/index.d.ts +2 -0
- package/lib/cjs/tree/index.js +8 -3
- package/lib/cjs/tree/interface.d.ts +2 -0
- package/lib/cjs/tree/treeNode.d.ts +3 -0
- package/lib/cjs/tree/treeNode.js +34 -6
- package/lib/cjs/treeSelect/index.d.ts +2 -1
- package/lib/cjs/treeSelect/index.js +7 -2
- package/lib/es/image/interface.d.ts +3 -3
- package/lib/es/image/previewFooter.js +8 -5
- package/lib/es/image/previewHeader.d.ts +2 -2
- package/lib/es/image/previewHeader.js +3 -4
- package/lib/es/image/previewImage.d.ts +12 -1
- package/lib/es/image/previewImage.js +83 -23
- package/lib/es/image/previewInner.d.ts +2 -11
- package/lib/es/image/previewInner.js +42 -60
- package/lib/es/index.d.ts +0 -2
- package/lib/es/index.js +0 -2
- package/lib/es/modal/confirm.d.ts +6 -6
- package/lib/es/notification/index.d.ts +8 -8
- package/lib/es/notification/notice.d.ts +1 -1
- package/lib/es/notification/notice.js +1 -1
- package/lib/es/table/ColumnSorter.d.ts +3 -1
- package/lib/es/table/ColumnSorter.js +26 -15
- package/lib/es/table/Table.js +1 -0
- package/lib/es/table/interface.d.ts +4 -0
- package/lib/es/tree/indent.d.ts +9 -0
- package/lib/es/tree/indent.js +27 -0
- package/lib/es/tree/index.d.ts +2 -0
- package/lib/es/tree/index.js +8 -3
- package/lib/es/tree/interface.d.ts +2 -0
- package/lib/es/tree/treeNode.d.ts +3 -0
- package/lib/es/tree/treeNode.js +34 -6
- package/lib/es/treeSelect/index.d.ts +2 -1
- package/lib/es/treeSelect/index.js +7 -2
- 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.
|
|
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
|
|
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 =
|
|
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__*/
|
|
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__*/
|
|
33
|
-
ref: ref,
|
|
32
|
+
return /*#__PURE__*/React.createElement("section", {
|
|
34
33
|
className: (0, _classnames.default)(prefixCls, className)
|
|
35
|
-
}, /*#__PURE__*/
|
|
34
|
+
}, /*#__PURE__*/React.createElement("section", {
|
|
36
35
|
className: `${prefixCls}-title`,
|
|
37
36
|
style: titleStyle
|
|
38
|
-
}, renderHeader ? renderHeader(title) : title), /*#__PURE__*/
|
|
37
|
+
}, renderHeader ? renderHeader(title) : title), /*#__PURE__*/React.createElement("section", {
|
|
39
38
|
className: `${prefixCls}-close`,
|
|
40
39
|
onMouseUp: onClose
|
|
41
|
-
}, /*#__PURE__*/
|
|
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:
|
|
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
|
|
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.
|
|
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 =
|
|
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
|
-
|
|
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 (
|
|
87
|
-
this.
|
|
138
|
+
if ("zoom" in this.props && this.props.zoom !== prevStates.currZoom) {
|
|
139
|
+
this.handleZoomChange(this.props.zoom, null);
|
|
88
140
|
}
|
|
89
|
-
if
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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.
|
|
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
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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
|
-
|
|
162
|
-
|
|
163
|
-
|
|
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 (
|
|
250
|
-
|
|
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
|
-
|
|
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
|
-
|
|
328
|
-
|
|
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
|
};
|
package/lib/cjs/index.d.ts
CHANGED
|
@@ -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"));
|