@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
|
@@ -14,14 +14,6 @@ import PreviewInnerFoundation from '@douyinfe/semi-foundation/lib/es/image/previ
|
|
|
14
14
|
import { PreviewContext } from "./previewContext";
|
|
15
15
|
import { getScrollbarWidth } from "../_utils";
|
|
16
16
|
const prefixCls = cssClasses.PREFIX;
|
|
17
|
-
let startMouseDown = {
|
|
18
|
-
x: 0,
|
|
19
|
-
y: 0
|
|
20
|
-
};
|
|
21
|
-
let mouseActiveTime = null;
|
|
22
|
-
let stopTiming = false;
|
|
23
|
-
let timer = null;
|
|
24
|
-
// let bodyOverflowValue = document.body.style.overflow;
|
|
25
17
|
export default class PreviewInner extends BaseComponent {
|
|
26
18
|
get adapter() {
|
|
27
19
|
return Object.assign(Object.assign({}, super.adapter), {
|
|
@@ -105,30 +97,22 @@ export default class PreviewInner extends BaseComponent {
|
|
|
105
97
|
unregisterKeyDownListener: () => {
|
|
106
98
|
window && window.removeEventListener("keydown", this.handleKeyDown);
|
|
107
99
|
},
|
|
108
|
-
getMouseActiveTime: () => {
|
|
109
|
-
return mouseActiveTime;
|
|
110
|
-
},
|
|
111
|
-
getStopTiming: () => {
|
|
112
|
-
return stopTiming;
|
|
113
|
-
},
|
|
114
|
-
setStopTiming: value => {
|
|
115
|
-
stopTiming = value;
|
|
116
|
-
},
|
|
117
|
-
getStartMouseDown: () => {
|
|
118
|
-
return startMouseDown;
|
|
119
|
-
},
|
|
120
|
-
setStartMouseDown: (x, y) => {
|
|
121
|
-
startMouseDown = {
|
|
122
|
-
x,
|
|
123
|
-
y
|
|
124
|
-
};
|
|
125
|
-
},
|
|
126
|
-
setMouseActiveTime: time => {
|
|
127
|
-
mouseActiveTime = time;
|
|
128
|
-
},
|
|
129
100
|
getSetDownloadFunc: () => {
|
|
130
101
|
var _a, _b;
|
|
131
102
|
return (_b = (_a = this.context) === null || _a === void 0 ? void 0 : _a.setDownloadName) !== null && _b !== void 0 ? _b : this.props.setDownloadName;
|
|
103
|
+
},
|
|
104
|
+
isValidTarget: e => {
|
|
105
|
+
const headerDom = this.headerRef && this.headerRef.current;
|
|
106
|
+
const footerDom = this.footerRef && this.footerRef.current;
|
|
107
|
+
const leftIconDom = this.leftIconRef && this.leftIconRef.current;
|
|
108
|
+
const rightIconDom = this.rightIconRef && this.rightIconRef.current;
|
|
109
|
+
const target = e.target;
|
|
110
|
+
if (headerDom && headerDom.contains(target) || footerDom && footerDom.contains(target) || leftIconDom && leftIconDom.contains(target) || rightIconDom && rightIconDom.contains(target)) {
|
|
111
|
+
// Move in the operation area, return false
|
|
112
|
+
return false;
|
|
113
|
+
}
|
|
114
|
+
// Move in the preview area except the operation area, return true
|
|
115
|
+
return true;
|
|
132
116
|
}
|
|
133
117
|
});
|
|
134
118
|
}
|
|
@@ -161,9 +145,6 @@ export default class PreviewInner extends BaseComponent {
|
|
|
161
145
|
this.handleMouseMove = e => {
|
|
162
146
|
this.foundation.handleMouseMove(e);
|
|
163
147
|
};
|
|
164
|
-
this.handleMouseEvent = (e, event) => {
|
|
165
|
-
this.foundation.handleMouseMoveEvent(e, event);
|
|
166
|
-
};
|
|
167
148
|
this.handleKeyDown = e => {
|
|
168
149
|
this.foundation.handleKeyDown(e);
|
|
169
150
|
};
|
|
@@ -176,6 +157,31 @@ export default class PreviewInner extends BaseComponent {
|
|
|
176
157
|
this.handleMouseDown = e => {
|
|
177
158
|
this.foundation.handleMouseDown(e);
|
|
178
159
|
};
|
|
160
|
+
this.handleWheel = e => {
|
|
161
|
+
this.foundation.handleWheel(e);
|
|
162
|
+
};
|
|
163
|
+
// 为什么通过 addEventListener 注册 wheel 事件而不是使用 onWheel 事件?
|
|
164
|
+
// 因为 Passive Event Listeners(https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#improving_scrolling_performance_with_passive_listeners)
|
|
165
|
+
// Passive Event Listeners 是一种优化技术,用于提高滚动性能。在默认情况下,浏览器会假设事件的监听器不会调用
|
|
166
|
+
// preventDefault() 方法来阻止事件的默认行为,从而允许进行一些优化操作,例如滚动平滑。
|
|
167
|
+
// 对于 Image 而言,如果使用触控板,双指朝不同方向分开放大图片,则需要 preventDefault 防止页面整体放大。
|
|
168
|
+
// Why register wheel event through addEventListener instead of using onWheel event?
|
|
169
|
+
// Because of Passive Event Listeners(an optimization technique used to improve scrolling performance. By default,
|
|
170
|
+
// the browser will assume that event listeners will not call preventDefault() method to prevent the default behavior of the event,
|
|
171
|
+
// allowing some optimization operations such as scroll smoothing.)
|
|
172
|
+
// For Image, if we use the trackpad and spread your fingers in different directions to enlarge the image, we need to preventDefault
|
|
173
|
+
// to prevent the page from being enlarged as a whole.
|
|
174
|
+
this.registryImageWrapRef = ref => {
|
|
175
|
+
if (this.imageWrapRef) {
|
|
176
|
+
this.imageWrapRef.removeEventListener("wheel", this.handleWheel);
|
|
177
|
+
}
|
|
178
|
+
if (ref) {
|
|
179
|
+
ref.addEventListener("wheel", this.handleWheel, {
|
|
180
|
+
passive: false
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
this.imageWrapRef = ref;
|
|
184
|
+
};
|
|
179
185
|
this.state = {
|
|
180
186
|
imgSrc: [],
|
|
181
187
|
imgLoadStatus: new Map(),
|
|
@@ -192,6 +198,11 @@ export default class PreviewInner extends BaseComponent {
|
|
|
192
198
|
this.bodyOverflow = '';
|
|
193
199
|
this.originBodyWidth = '100%';
|
|
194
200
|
this.scrollBarWidth = 0;
|
|
201
|
+
this.imageWrapRef = null;
|
|
202
|
+
this.headerRef = /*#__PURE__*/React.createRef();
|
|
203
|
+
this.footerRef = /*#__PURE__*/React.createRef();
|
|
204
|
+
this.leftIconRef = /*#__PURE__*/React.createRef();
|
|
205
|
+
this.rightIconRef = /*#__PURE__*/React.createRef();
|
|
195
206
|
}
|
|
196
207
|
static getDerivedStateFromProps(props, state) {
|
|
197
208
|
const willUpdateStates = {};
|
|
@@ -207,6 +218,9 @@ export default class PreviewInner extends BaseComponent {
|
|
|
207
218
|
willUpdateStates.visible = props.visible;
|
|
208
219
|
if (props.visible) {
|
|
209
220
|
willUpdateStates.preloadAfterVisibleChange = true;
|
|
221
|
+
willUpdateStates.viewerVisible = true;
|
|
222
|
+
willUpdateStates.rotation = 0;
|
|
223
|
+
willUpdateStates.ratio = 'adaptation';
|
|
210
224
|
}
|
|
211
225
|
}
|
|
212
226
|
if ("currentIndex" in props && props.currentIndex !== state.currentIndex) {
|
|
@@ -225,10 +239,8 @@ export default class PreviewInner extends BaseComponent {
|
|
|
225
239
|
}
|
|
226
240
|
}
|
|
227
241
|
componentDidUpdate(prevProps, prevState) {
|
|
228
|
-
if (
|
|
229
|
-
|
|
230
|
-
timer && clearInterval(timer);
|
|
231
|
-
timer = setInterval(this.viewVisibleChange, 1000);
|
|
242
|
+
if (prevProps.src !== this.props.src) {
|
|
243
|
+
this.foundation.updateTimer();
|
|
232
244
|
}
|
|
233
245
|
// hide => show
|
|
234
246
|
if (!prevProps.visible && this.props.visible) {
|
|
@@ -240,7 +252,7 @@ export default class PreviewInner extends BaseComponent {
|
|
|
240
252
|
}
|
|
241
253
|
}
|
|
242
254
|
componentWillUnmount() {
|
|
243
|
-
|
|
255
|
+
this.foundation.clearTimer();
|
|
244
256
|
}
|
|
245
257
|
isInGroup() {
|
|
246
258
|
return Boolean(this.context && this.context.isGroup);
|
|
@@ -305,10 +317,10 @@ export default class PreviewInner extends BaseComponent {
|
|
|
305
317
|
style: style,
|
|
306
318
|
onMouseDown: this.handleMouseDown,
|
|
307
319
|
onMouseUp: this.handleMouseUp,
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
onMouseOut: e => this.handleMouseEvent(e.nativeEvent, "out")
|
|
320
|
+
ref: this.registryImageWrapRef,
|
|
321
|
+
onMouseMove: this.handleMouseMove
|
|
311
322
|
}, /*#__PURE__*/React.createElement(Header, {
|
|
323
|
+
ref: this.headerRef,
|
|
312
324
|
className: cls(hideViewerCls),
|
|
313
325
|
onClose: this.handlePreviewClose,
|
|
314
326
|
renderHeader: renderHeader
|
|
@@ -319,7 +331,6 @@ export default class PreviewInner extends BaseComponent {
|
|
|
319
331
|
setRatio: this.handleAdjustRatio,
|
|
320
332
|
zoom: zoom,
|
|
321
333
|
ratio: ratio,
|
|
322
|
-
zoomStep: zoomStep,
|
|
323
334
|
rotation: rotation,
|
|
324
335
|
crossOrigin: crossOrigin,
|
|
325
336
|
onError: this.onImageError,
|
|
@@ -328,6 +339,7 @@ export default class PreviewInner extends BaseComponent {
|
|
|
328
339
|
/*#__PURE__*/
|
|
329
340
|
// eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
|
|
330
341
|
React.createElement("div", {
|
|
342
|
+
ref: this.leftIconRef,
|
|
331
343
|
className: cls(`${previewPrefixCls}-icon`, `${previewPrefixCls}-prev`, hideViewerCls),
|
|
332
344
|
onClick: () => this.handleSwitchImage("prev")
|
|
333
345
|
}, /*#__PURE__*/React.createElement(IconArrowLeft, {
|
|
@@ -336,11 +348,13 @@ export default class PreviewInner extends BaseComponent {
|
|
|
336
348
|
/*#__PURE__*/
|
|
337
349
|
// eslint-disable-next-line jsx-a11y/click-events-have-key-events,jsx-a11y/no-static-element-interactions
|
|
338
350
|
React.createElement("div", {
|
|
351
|
+
ref: this.rightIconRef,
|
|
339
352
|
className: cls(`${previewPrefixCls}-icon`, `${previewPrefixCls}-next`, hideViewerCls),
|
|
340
353
|
onClick: () => this.handleSwitchImage("next")
|
|
341
354
|
}, /*#__PURE__*/React.createElement(IconArrowRight, {
|
|
342
355
|
size: "large"
|
|
343
356
|
})), /*#__PURE__*/React.createElement(Footer, {
|
|
357
|
+
forwardRef: this.footerRef,
|
|
344
358
|
className: hideViewerCls,
|
|
345
359
|
totalNum: total,
|
|
346
360
|
curPage: currentIndex + 1,
|
|
@@ -398,6 +412,8 @@ PreviewInner.propTypes = {
|
|
|
398
412
|
disableDownload: PropTypes.bool,
|
|
399
413
|
viewerVisibleDelay: PropTypes.number,
|
|
400
414
|
zIndex: PropTypes.number,
|
|
415
|
+
maxZoom: PropTypes.number,
|
|
416
|
+
minZoom: PropTypes.number,
|
|
401
417
|
renderHeader: PropTypes.func,
|
|
402
418
|
renderPreviewMenu: PropTypes.func,
|
|
403
419
|
getPopupContainer: PropTypes.func,
|
|
@@ -422,5 +438,7 @@ PreviewInner.defaultProps = {
|
|
|
422
438
|
preLoadGap: 2,
|
|
423
439
|
zIndex: 1000,
|
|
424
440
|
maskClosable: true,
|
|
425
|
-
viewerVisibleDelay: 10000
|
|
441
|
+
viewerVisibleDelay: 10000,
|
|
442
|
+
maxZoom: 5,
|
|
443
|
+
minZoom: 0.1
|
|
426
444
|
};
|
package/lib/es/modal/Modal.d.ts
CHANGED
|
@@ -59,7 +59,7 @@ declare class Modal extends BaseComponent<ModalReactProps, ModalState> {
|
|
|
59
59
|
getPopupContainer: PropTypes.Requireable<(...args: any[]) => any>;
|
|
60
60
|
getContainerContext: PropTypes.Requireable<(...args: any[]) => any>;
|
|
61
61
|
maskFixed: PropTypes.Requireable<boolean>;
|
|
62
|
-
closeIcon: PropTypes.Requireable<
|
|
62
|
+
closeIcon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
63
63
|
closeOnEsc: PropTypes.Requireable<boolean>;
|
|
64
64
|
size: PropTypes.Requireable<string>;
|
|
65
65
|
keepDOM: PropTypes.Requireable<boolean>;
|
package/lib/es/modal/Modal.js
CHANGED
|
@@ -293,7 +293,7 @@ Modal.propTypes = {
|
|
|
293
293
|
getPopupContainer: PropTypes.func,
|
|
294
294
|
getContainerContext: PropTypes.func,
|
|
295
295
|
maskFixed: PropTypes.bool,
|
|
296
|
-
closeIcon: PropTypes.
|
|
296
|
+
closeIcon: PropTypes.node,
|
|
297
297
|
closeOnEsc: PropTypes.bool,
|
|
298
298
|
size: PropTypes.oneOf(strings.SIZE),
|
|
299
299
|
keepDOM: PropTypes.bool,
|
|
@@ -53,7 +53,7 @@ export default class SubNav extends BaseComponent<SubNavProps, SubNavState> {
|
|
|
53
53
|
/**
|
|
54
54
|
* Icon name on the left
|
|
55
55
|
*/
|
|
56
|
-
icon: PropTypes.Requireable<
|
|
56
|
+
icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
57
57
|
/**
|
|
58
58
|
* Maximum height (for animation)
|
|
59
59
|
*/
|
|
@@ -46,7 +46,7 @@ export default class Popconfirm extends BaseComponent<PopconfirmProps, Popconfir
|
|
|
46
46
|
prefixCls: PropTypes.Requireable<string>;
|
|
47
47
|
className: PropTypes.Requireable<string>;
|
|
48
48
|
style: PropTypes.Requireable<object>;
|
|
49
|
-
icon: PropTypes.Requireable<
|
|
49
|
+
icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
50
50
|
okText: PropTypes.Requireable<string>;
|
|
51
51
|
okType: PropTypes.Requireable<string>;
|
|
52
52
|
cancelText: PropTypes.Requireable<string>;
|
|
@@ -233,7 +233,7 @@ Popconfirm.propTypes = {
|
|
|
233
233
|
prefixCls: PropTypes.string,
|
|
234
234
|
className: PropTypes.string,
|
|
235
235
|
style: PropTypes.object,
|
|
236
|
-
icon: PropTypes.
|
|
236
|
+
icon: PropTypes.node,
|
|
237
237
|
okText: PropTypes.string,
|
|
238
238
|
okType: PropTypes.string,
|
|
239
239
|
cancelText: PropTypes.string,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
import React, { CSSProperties } from 'react';
|
|
1
|
+
import React, { CSSProperties, ReactNode } from 'react';
|
|
2
2
|
import PropTypes from 'prop-types';
|
|
3
3
|
import { SideSheetProps } from '@douyinfe/semi-foundation/lib/es/sideSheet/sideSheetFoundation';
|
|
4
4
|
export interface SideSheetContentProps {
|
|
5
5
|
onClose?: (e: React.MouseEvent) => void;
|
|
6
|
+
closeIcon?: ReactNode;
|
|
6
7
|
mask?: boolean;
|
|
7
8
|
maskStyle?: CSSProperties;
|
|
8
9
|
maskClosable?: boolean;
|
|
@@ -30,6 +31,7 @@ export interface SideSheetContentProps {
|
|
|
30
31
|
export default class SideSheetContent extends React.PureComponent<SideSheetContentProps> {
|
|
31
32
|
static propTypes: {
|
|
32
33
|
onClose: PropTypes.Requireable<(...args: any[]) => any>;
|
|
34
|
+
closeIcon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
33
35
|
};
|
|
34
36
|
static defaultProps: {
|
|
35
37
|
onClose: (...args: any[]) => void;
|
|
@@ -59,7 +59,8 @@ export default class SideSheetContent extends React.PureComponent {
|
|
|
59
59
|
const {
|
|
60
60
|
title,
|
|
61
61
|
closable,
|
|
62
|
-
headerStyle
|
|
62
|
+
headerStyle,
|
|
63
|
+
closeIcon
|
|
63
64
|
} = this.props;
|
|
64
65
|
let header, closer;
|
|
65
66
|
if (title) {
|
|
@@ -69,12 +70,13 @@ export default class SideSheetContent extends React.PureComponent {
|
|
|
69
70
|
}, this.props.title);
|
|
70
71
|
}
|
|
71
72
|
if (closable) {
|
|
73
|
+
const iconType = closeIcon || /*#__PURE__*/React.createElement(IconClose, null);
|
|
72
74
|
closer = /*#__PURE__*/React.createElement(Button, {
|
|
73
75
|
className: `${prefixCls}-close`,
|
|
74
76
|
key: "close-btn",
|
|
75
77
|
onClick: this.close,
|
|
76
78
|
type: "tertiary",
|
|
77
|
-
icon:
|
|
79
|
+
icon: iconType,
|
|
78
80
|
theme: "borderless",
|
|
79
81
|
size: "small"
|
|
80
82
|
});
|
|
@@ -160,7 +162,8 @@ export default class SideSheetContent extends React.PureComponent {
|
|
|
160
162
|
}
|
|
161
163
|
}
|
|
162
164
|
SideSheetContent.propTypes = {
|
|
163
|
-
onClose: PropTypes.func
|
|
165
|
+
onClose: PropTypes.func,
|
|
166
|
+
closeIcon: PropTypes.node
|
|
164
167
|
};
|
|
165
168
|
SideSheetContent.defaultProps = {
|
|
166
169
|
onClose: _noop
|
|
@@ -43,6 +43,8 @@ export interface BaseRowProps {
|
|
|
43
43
|
style?: React.CSSProperties;
|
|
44
44
|
virtualized?: Virtualized;
|
|
45
45
|
visible: boolean;
|
|
46
|
+
/** whether display none */
|
|
47
|
+
displayNone?: boolean;
|
|
46
48
|
}
|
|
47
49
|
export default class TableRow extends BaseComponent<BaseRowProps, Record<string, any>> {
|
|
48
50
|
static propTypes: {
|
|
@@ -55,6 +57,7 @@ export default class TableRow extends BaseComponent<BaseRowProps, Record<string,
|
|
|
55
57
|
expandIcon: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike | ((...args: any[]) => any)>>;
|
|
56
58
|
expandableRow: PropTypes.Requireable<boolean>;
|
|
57
59
|
expanded: PropTypes.Requireable<boolean>;
|
|
60
|
+
displayNone: PropTypes.Requireable<boolean>;
|
|
58
61
|
expandedRow: PropTypes.Requireable<boolean>;
|
|
59
62
|
fixed: PropTypes.Requireable<NonNullable<string | boolean>>;
|
|
60
63
|
height: PropTypes.Requireable<NonNullable<string | number>>;
|
|
@@ -212,6 +212,7 @@ export default class TableRow extends BaseComponent {
|
|
|
212
212
|
record,
|
|
213
213
|
hovered,
|
|
214
214
|
expanded,
|
|
215
|
+
displayNone,
|
|
215
216
|
expandableRow,
|
|
216
217
|
level,
|
|
217
218
|
expandedRow,
|
|
@@ -229,7 +230,8 @@ export default class TableRow extends BaseComponent {
|
|
|
229
230
|
const rowCls = typeof replaceClassName === 'string' && replaceClassName.length ? replaceClassName : classnames(className, `${prefixCls}-row`, {
|
|
230
231
|
[`${prefixCls}-row-selected`]: selected,
|
|
231
232
|
[`${prefixCls}-row-expanded`]: expanded,
|
|
232
|
-
[`${prefixCls}-row-hovered`]: hovered
|
|
233
|
+
[`${prefixCls}-row-hovered`]: hovered,
|
|
234
|
+
[`${prefixCls}-row-hidden`]: displayNone
|
|
233
235
|
}, customClassName);
|
|
234
236
|
const ariaProps = {};
|
|
235
237
|
if (typeof index === 'number') {
|
|
@@ -270,6 +272,7 @@ TableRow.propTypes = {
|
|
|
270
272
|
expandIcon: PropTypes.oneOfType([PropTypes.bool, PropTypes.func, PropTypes.node]),
|
|
271
273
|
expandableRow: PropTypes.bool,
|
|
272
274
|
expanded: PropTypes.bool,
|
|
275
|
+
displayNone: PropTypes.bool,
|
|
273
276
|
expandedRow: PropTypes.bool,
|
|
274
277
|
fixed: PropTypes.oneOfType([PropTypes.string, PropTypes.bool]),
|
|
275
278
|
height: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
|
|
@@ -36,7 +36,8 @@ export default class TableExpandedRow extends PureComponent {
|
|
|
36
36
|
style,
|
|
37
37
|
virtualized,
|
|
38
38
|
indentSize,
|
|
39
|
-
cellWidths
|
|
39
|
+
cellWidths,
|
|
40
|
+
displayNone
|
|
40
41
|
} = this.props;
|
|
41
42
|
const {
|
|
42
43
|
tableWidth,
|
|
@@ -95,7 +96,8 @@ export default class TableExpandedRow extends PureComponent {
|
|
|
95
96
|
store: store,
|
|
96
97
|
virtualized: virtualized,
|
|
97
98
|
indentSize: indentSize,
|
|
98
|
-
cellWidths: baseRowCellWidths
|
|
99
|
+
cellWidths: baseRowCellWidths,
|
|
100
|
+
displayNone: displayNone
|
|
99
101
|
});
|
|
100
102
|
}
|
|
101
103
|
}
|
|
@@ -32,6 +32,7 @@ export interface BodyProps extends BaseProps {
|
|
|
32
32
|
renderExpandIcon: (record: Record<string, any>, isNested: boolean) => ReactNode | null;
|
|
33
33
|
headerRef?: React.MutableRefObject<HTMLDivElement> | ((instance: any) => void);
|
|
34
34
|
onScroll?: VirtualizedOnScroll;
|
|
35
|
+
keepDOM?: boolean;
|
|
35
36
|
}
|
|
36
37
|
export interface BodyState {
|
|
37
38
|
virtualizedData?: Array<FlattenData | GroupFlattenData>;
|
|
@@ -61,6 +62,8 @@ export interface RenderExpandedRowProps {
|
|
|
61
62
|
rowKey?: RowKey<Record<string, any>>;
|
|
62
63
|
virtualized?: Virtualized;
|
|
63
64
|
level?: number;
|
|
65
|
+
keepDOM?: boolean;
|
|
66
|
+
displayNone?: boolean;
|
|
64
67
|
}
|
|
65
68
|
export interface RenderSectionRowProps {
|
|
66
69
|
dataSource?: Record<string, any>[];
|
|
@@ -301,7 +301,8 @@ class Body extends BaseComponent {
|
|
|
301
301
|
expanded,
|
|
302
302
|
index,
|
|
303
303
|
rowKey,
|
|
304
|
-
virtualized
|
|
304
|
+
virtualized,
|
|
305
|
+
displayNone
|
|
305
306
|
} = props;
|
|
306
307
|
let key = getRecordKey(record, rowKey);
|
|
307
308
|
if (key == null) {
|
|
@@ -327,7 +328,8 @@ class Body extends BaseComponent {
|
|
|
327
328
|
index: index,
|
|
328
329
|
virtualized: virtualized,
|
|
329
330
|
key: genExpandedRowKey(key),
|
|
330
|
-
cellWidths: _this.cellWidths
|
|
331
|
+
cellWidths: _this.cellWidths,
|
|
332
|
+
displayNone: displayNone
|
|
331
333
|
});
|
|
332
334
|
};
|
|
333
335
|
/**
|
|
@@ -339,7 +341,8 @@ class Body extends BaseComponent {
|
|
|
339
341
|
groups,
|
|
340
342
|
dataSource: data,
|
|
341
343
|
rowKey,
|
|
342
|
-
expandedRowKeys
|
|
344
|
+
expandedRowKeys,
|
|
345
|
+
keepDOM
|
|
343
346
|
} = this.props;
|
|
344
347
|
const {
|
|
345
348
|
flattenedColumns
|
|
@@ -374,7 +377,7 @@ class Body extends BaseComponent {
|
|
|
374
377
|
expanded
|
|
375
378
|
})));
|
|
376
379
|
// Render the grouped content when the group is expanded
|
|
377
|
-
if (expanded) {
|
|
380
|
+
if (expanded || keepDOM) {
|
|
378
381
|
const dataInGroup = [];
|
|
379
382
|
group.forEach(recordKey => {
|
|
380
383
|
const record = getRecord(data, recordKey, rowKey);
|
|
@@ -385,7 +388,7 @@ class Body extends BaseComponent {
|
|
|
385
388
|
/**
|
|
386
389
|
* Render the contents of the group row
|
|
387
390
|
*/
|
|
388
|
-
renderedRows.push(this.renderBodyRows(dataInGroup));
|
|
391
|
+
renderedRows.push(this.renderBodyRows(dataInGroup, undefined, [], !expanded));
|
|
389
392
|
}
|
|
390
393
|
});
|
|
391
394
|
return renderedRows;
|
|
@@ -629,12 +632,14 @@ class Body extends BaseComponent {
|
|
|
629
632
|
let data = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
630
633
|
let level = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
|
|
631
634
|
let renderedRows = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : [];
|
|
635
|
+
let displayNone = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
|
632
636
|
const {
|
|
633
637
|
rowKey,
|
|
634
638
|
expandedRowRender,
|
|
635
639
|
expandedRowKeys,
|
|
636
640
|
childrenRecordName,
|
|
637
|
-
rowExpandable
|
|
641
|
+
rowExpandable,
|
|
642
|
+
keepDOM
|
|
638
643
|
} = this.props;
|
|
639
644
|
const hasExpandedRowRender = typeof expandedRowRender === 'function';
|
|
640
645
|
const expandBtnShouldInRow = this.state.cachedExpandBtnShouldInRow;
|
|
@@ -651,6 +656,7 @@ class Body extends BaseComponent {
|
|
|
651
656
|
renderedRows.push(this.renderBaseRow(Object.assign(Object.assign({}, this.props), {
|
|
652
657
|
columns: flattenedColumns,
|
|
653
658
|
expandBtnShouldInRow,
|
|
659
|
+
displayNone,
|
|
654
660
|
record,
|
|
655
661
|
key,
|
|
656
662
|
level,
|
|
@@ -658,13 +664,15 @@ class Body extends BaseComponent {
|
|
|
658
664
|
})));
|
|
659
665
|
// render expand row
|
|
660
666
|
const expanded = isExpanded(expandedRowKeys, key);
|
|
661
|
-
|
|
667
|
+
const shouldRenderExpandedRows = expanded || keepDOM;
|
|
668
|
+
if (hasExpandedRowRender && rowExpandable && rowExpandable(record) && shouldRenderExpandedRows) {
|
|
662
669
|
const currentExpandRow = this.renderExpandedRow(Object.assign(Object.assign({}, this.props), {
|
|
663
670
|
columns: flattenedColumns,
|
|
664
671
|
level,
|
|
665
672
|
index,
|
|
666
673
|
record,
|
|
667
|
-
expanded
|
|
674
|
+
expanded,
|
|
675
|
+
displayNone: displayNone || !expanded
|
|
668
676
|
}));
|
|
669
677
|
/**
|
|
670
678
|
* If expandedRowRender returns falsy, this expanded row will not be rendered
|
|
@@ -675,8 +683,8 @@ class Body extends BaseComponent {
|
|
|
675
683
|
}
|
|
676
684
|
}
|
|
677
685
|
// render tree data
|
|
678
|
-
if (recordHasChildren &&
|
|
679
|
-
const nestedRows = this.renderBodyRows(recordChildren, level + 1);
|
|
686
|
+
if (recordHasChildren && shouldRenderExpandedRows) {
|
|
687
|
+
const nestedRows = this.renderBodyRows(recordChildren, level + 1, [], displayNone || !expanded);
|
|
680
688
|
renderedRows.push(...nestedRows);
|
|
681
689
|
}
|
|
682
690
|
});
|
|
@@ -63,6 +63,7 @@ export type TimePickerProps = {
|
|
|
63
63
|
secondStep?: number;
|
|
64
64
|
showClear?: boolean;
|
|
65
65
|
size?: InputSize;
|
|
66
|
+
stopPropagation: boolean;
|
|
66
67
|
style?: React.CSSProperties;
|
|
67
68
|
timeZone?: string | number;
|
|
68
69
|
triggerRender?: (props?: any) => React.ReactNode;
|
|
@@ -133,6 +134,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
|
|
|
133
134
|
focusOnOpen: PropTypes.Requireable<boolean>;
|
|
134
135
|
autoFocus: PropTypes.Requireable<boolean>;
|
|
135
136
|
size: PropTypes.Requireable<"default" | "small" | "large">;
|
|
137
|
+
stopPropagation: PropTypes.Requireable<boolean>;
|
|
136
138
|
panels: PropTypes.Requireable<PropTypes.InferProps<{
|
|
137
139
|
panelHeader: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
|
|
138
140
|
panelFooter: PropTypes.Requireable<NonNullable<PropTypes.ReactNodeLike>>;
|
|
@@ -166,6 +168,7 @@ export default class TimePicker extends BaseComponent<TimePickerProps, TimePicke
|
|
|
166
168
|
prefixCls: string;
|
|
167
169
|
inputReadOnly: boolean;
|
|
168
170
|
style: {};
|
|
171
|
+
stopPropagation: boolean;
|
|
169
172
|
className: string;
|
|
170
173
|
popupClassName: string;
|
|
171
174
|
popupStyle: {
|
|
@@ -262,9 +262,10 @@ export default class TimePicker extends BaseComponent {
|
|
|
262
262
|
scrollItemProps,
|
|
263
263
|
triggerRender,
|
|
264
264
|
motion,
|
|
265
|
-
autoAdjustOverflow
|
|
265
|
+
autoAdjustOverflow,
|
|
266
|
+
stopPropagation
|
|
266
267
|
} = _a,
|
|
267
|
-
rest = __rest(_a, ["prefixCls", "placeholder", "disabled", "defaultValue", "dropdownMargin", "className", "popupStyle", "size", "style", "locale", "localeCode", "zIndex", "getPopupContainer", "insetLabel", "insetLabelId", "inputStyle", "showClear", "panelHeader", "panelFooter", "rangeSeparator", "onOpenChange", "onChangeWithDateFirst", "popupClassName", "hideDisabledOptions", "use12Hours", "minuteStep", "hourStep", "secondStep", "scrollItemProps", "triggerRender", "motion", "autoAdjustOverflow"]);
|
|
268
|
+
rest = __rest(_a, ["prefixCls", "placeholder", "disabled", "defaultValue", "dropdownMargin", "className", "popupStyle", "size", "style", "locale", "localeCode", "zIndex", "getPopupContainer", "insetLabel", "insetLabelId", "inputStyle", "showClear", "panelHeader", "panelFooter", "rangeSeparator", "onOpenChange", "onChangeWithDateFirst", "popupClassName", "hideDisabledOptions", "use12Hours", "minuteStep", "hourStep", "secondStep", "scrollItemProps", "triggerRender", "motion", "autoAdjustOverflow", "stopPropagation"]);
|
|
268
269
|
const format = this.foundation.getDefaultFormatIfNeed();
|
|
269
270
|
const position = this.foundation.getPosition();
|
|
270
271
|
const useCustomTrigger = typeof triggerRender === 'function';
|
|
@@ -322,7 +323,8 @@ export default class TimePicker extends BaseComponent {
|
|
|
322
323
|
visible: disabled ? false : Boolean(open),
|
|
323
324
|
motion: motion,
|
|
324
325
|
margin: dropdownMargin,
|
|
325
|
-
autoAdjustOverflow: autoAdjustOverflow
|
|
326
|
+
autoAdjustOverflow: autoAdjustOverflow,
|
|
327
|
+
stopPropagation: stopPropagation
|
|
326
328
|
}, useCustomTrigger ? /*#__PURE__*/React.createElement(Trigger, {
|
|
327
329
|
triggerRender: triggerRender,
|
|
328
330
|
disabled: disabled,
|
|
@@ -377,6 +379,7 @@ TimePicker.propTypes = Object.assign(Object.assign({
|
|
|
377
379
|
focusOnOpen: PropTypes.bool,
|
|
378
380
|
autoFocus: PropTypes.bool,
|
|
379
381
|
size: PropTypes.oneOf(strings.SIZE),
|
|
382
|
+
stopPropagation: PropTypes.bool,
|
|
380
383
|
panels: PropTypes.arrayOf(PropTypes.shape(PanelShape)),
|
|
381
384
|
onFocus: PropTypes.func,
|
|
382
385
|
onBlur: PropTypes.func,
|
|
@@ -410,6 +413,7 @@ TimePicker.defaultProps = Object.assign({
|
|
|
410
413
|
prefixCls: cssClasses.PREFIX,
|
|
411
414
|
inputReadOnly: false,
|
|
412
415
|
style: {},
|
|
416
|
+
stopPropagation: true,
|
|
413
417
|
className: '',
|
|
414
418
|
popupClassName: '',
|
|
415
419
|
popupStyle: {
|
|
@@ -50,6 +50,7 @@ export default class LocaleTimePicker extends React.PureComponent<LocalePickerPr
|
|
|
50
50
|
focusOnOpen: import("prop-types").Requireable<boolean>;
|
|
51
51
|
autoFocus: import("prop-types").Requireable<boolean>;
|
|
52
52
|
size: import("prop-types").Requireable<"default" | "small" | "large">;
|
|
53
|
+
stopPropagation: import("prop-types").Requireable<boolean>;
|
|
53
54
|
panels: import("prop-types").Requireable<import("prop-types").InferProps<{
|
|
54
55
|
panelHeader: import("prop-types").Requireable<NonNullable<import("prop-types").ReactNodeLike>>;
|
|
55
56
|
panelFooter: import("prop-types").Requireable<NonNullable<import("prop-types").ReactNodeLike>>;
|
|
@@ -83,6 +84,7 @@ export default class LocaleTimePicker extends React.PureComponent<LocalePickerPr
|
|
|
83
84
|
prefixCls: string;
|
|
84
85
|
inputReadOnly: boolean;
|
|
85
86
|
style: {};
|
|
87
|
+
stopPropagation: boolean;
|
|
86
88
|
className: string;
|
|
87
89
|
popupClassName: string;
|
|
88
90
|
popupStyle: {
|
package/lib/es/toast/toast.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ declare class Toast extends BaseComponent<ToastReactProps, ToastState> {
|
|
|
32
32
|
showClose: PropTypes.Requireable<boolean>;
|
|
33
33
|
stack: PropTypes.Requireable<boolean>;
|
|
34
34
|
stackExpanded: PropTypes.Requireable<boolean>;
|
|
35
|
-
icon: PropTypes.Requireable<
|
|
35
|
+
icon: PropTypes.Requireable<PropTypes.ReactNodeLike>;
|
|
36
36
|
direction: PropTypes.Requireable<string>;
|
|
37
37
|
};
|
|
38
38
|
static defaultProps: {
|
package/lib/es/toast/toast.js
CHANGED
|
@@ -150,7 +150,7 @@ Toast.propTypes = {
|
|
|
150
150
|
showClose: PropTypes.bool,
|
|
151
151
|
stack: PropTypes.bool,
|
|
152
152
|
stackExpanded: PropTypes.bool,
|
|
153
|
-
icon: PropTypes.
|
|
153
|
+
icon: PropTypes.node,
|
|
154
154
|
direction: PropTypes.oneOf(strings.directions)
|
|
155
155
|
};
|
|
156
156
|
Toast.defaultProps = {
|
|
@@ -42,7 +42,6 @@ const getRenderText = function (originEle, rows) {
|
|
|
42
42
|
const lineHeight = pxToNumber(originStyle.lineHeight);
|
|
43
43
|
const maxHeight = Math.round(lineHeight * (rows + 1) + pxToNumber(originStyle.paddingTop) + pxToNumber(originStyle.paddingBottom));
|
|
44
44
|
// Set shadow
|
|
45
|
-
const maxWidth = parseInt(originStyle.width);
|
|
46
45
|
ellipsisContainer.setAttribute('style', originCSS);
|
|
47
46
|
ellipsisContainer.style.position = 'fixed';
|
|
48
47
|
ellipsisContainer.style.left = '0';
|
|
@@ -54,12 +53,12 @@ const getRenderText = function (originEle, rows) {
|
|
|
54
53
|
ellipsisContainer.style.webkitLineClamp = 'none';
|
|
55
54
|
// Render fake container
|
|
56
55
|
ReactDOM.render( /*#__PURE__*/React.createElement(React.Fragment, null), ellipsisContainer);
|
|
57
|
-
// Check if ellipsis in measure div is
|
|
56
|
+
// Check if ellipsis in measure div is enough for content
|
|
58
57
|
function inRange() {
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
return
|
|
58
|
+
// If content does not wrap due to line break strategy, width should be judged to determine whether it's in range
|
|
59
|
+
const widthInRange = ellipsisContainer.scrollWidth <= ellipsisContainer.offsetWidth;
|
|
60
|
+
const heightInRange = ellipsisContainer.scrollHeight < maxHeight;
|
|
61
|
+
return rows === 1 ? widthInRange && heightInRange : heightInRange;
|
|
63
62
|
}
|
|
64
63
|
// ========================= Find match ellipsis content =========================
|
|
65
64
|
// Create origin content holder
|