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