@rc-component/dialog 1.0.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/LICENSE.md +9 -0
- package/README.md +108 -0
- package/assets/bootstrap.css +177 -0
- package/assets/index.css +174 -0
- package/es/Dialog/Content/MemoChildren.d.ts +7 -0
- package/es/Dialog/Content/MemoChildren.js +8 -0
- package/es/Dialog/Content/Panel.d.ts +15 -0
- package/es/Dialog/Content/Panel.js +149 -0
- package/es/Dialog/Content/index.d.ts +13 -0
- package/es/Dialog/Content/index.js +63 -0
- package/es/Dialog/Mask.d.ts +11 -0
- package/es/Dialog/Mask.js +28 -0
- package/es/Dialog/index.d.ts +4 -0
- package/es/Dialog/index.js +201 -0
- package/es/DialogWrap.d.ts +4 -0
- package/es/DialogWrap.js +59 -0
- package/es/IDialogPropTypes.d.ts +52 -0
- package/es/IDialogPropTypes.js +1 -0
- package/es/context.d.ts +5 -0
- package/es/context.js +2 -0
- package/es/index.d.ts +6 -0
- package/es/index.js +4 -0
- package/es/util.d.ts +5 -0
- package/es/util.js +34 -0
- package/lib/Dialog/Content/MemoChildren.d.ts +7 -0
- package/lib/Dialog/Content/MemoChildren.js +17 -0
- package/lib/Dialog/Content/Panel.d.ts +15 -0
- package/lib/Dialog/Content/Panel.js +159 -0
- package/lib/Dialog/Content/index.d.ts +13 -0
- package/lib/Dialog/Content/index.js +73 -0
- package/lib/Dialog/Mask.d.ts +11 -0
- package/lib/Dialog/Mask.js +38 -0
- package/lib/Dialog/index.d.ts +4 -0
- package/lib/Dialog/index.js +211 -0
- package/lib/DialogWrap.d.ts +4 -0
- package/lib/DialogWrap.js +69 -0
- package/lib/IDialogPropTypes.d.ts +52 -0
- package/lib/IDialogPropTypes.js +5 -0
- package/lib/context.d.ts +5 -0
- package/lib/context.js +11 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +16 -0
- package/lib/util.d.ts +5 -0
- package/lib/util.js +41 -0
- package/package.json +98 -0
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof3 = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
|
11
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
|
+
var _ref = require("rc-util/lib/ref");
|
|
14
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
15
|
+
var _context = require("../../context");
|
|
16
|
+
var _MemoChildren = _interopRequireDefault(require("./MemoChildren"));
|
|
17
|
+
var _pickAttrs = _interopRequireDefault(require("rc-util/lib/pickAttrs"));
|
|
18
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
19
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof3(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
20
|
+
var sentinelStyle = {
|
|
21
|
+
width: 0,
|
|
22
|
+
height: 0,
|
|
23
|
+
overflow: 'hidden',
|
|
24
|
+
outline: 'none'
|
|
25
|
+
};
|
|
26
|
+
var entityStyle = {
|
|
27
|
+
outline: 'none'
|
|
28
|
+
};
|
|
29
|
+
var Panel = /*#__PURE__*/_react.default.forwardRef(function (props, ref) {
|
|
30
|
+
var prefixCls = props.prefixCls,
|
|
31
|
+
className = props.className,
|
|
32
|
+
style = props.style,
|
|
33
|
+
title = props.title,
|
|
34
|
+
ariaId = props.ariaId,
|
|
35
|
+
footer = props.footer,
|
|
36
|
+
closable = props.closable,
|
|
37
|
+
closeIcon = props.closeIcon,
|
|
38
|
+
onClose = props.onClose,
|
|
39
|
+
children = props.children,
|
|
40
|
+
bodyStyle = props.bodyStyle,
|
|
41
|
+
bodyProps = props.bodyProps,
|
|
42
|
+
modalRender = props.modalRender,
|
|
43
|
+
onMouseDown = props.onMouseDown,
|
|
44
|
+
onMouseUp = props.onMouseUp,
|
|
45
|
+
holderRef = props.holderRef,
|
|
46
|
+
visible = props.visible,
|
|
47
|
+
forceRender = props.forceRender,
|
|
48
|
+
width = props.width,
|
|
49
|
+
height = props.height,
|
|
50
|
+
modalClassNames = props.classNames,
|
|
51
|
+
modalStyles = props.styles;
|
|
52
|
+
|
|
53
|
+
// ================================= Refs =================================
|
|
54
|
+
var _React$useContext = _react.default.useContext(_context.RefContext),
|
|
55
|
+
panelRef = _React$useContext.panel;
|
|
56
|
+
var mergedRef = (0, _ref.useComposeRef)(holderRef, panelRef);
|
|
57
|
+
var sentinelStartRef = (0, _react.useRef)();
|
|
58
|
+
var sentinelEndRef = (0, _react.useRef)();
|
|
59
|
+
_react.default.useImperativeHandle(ref, function () {
|
|
60
|
+
return {
|
|
61
|
+
focus: function focus() {
|
|
62
|
+
var _sentinelStartRef$cur;
|
|
63
|
+
(_sentinelStartRef$cur = sentinelStartRef.current) === null || _sentinelStartRef$cur === void 0 || _sentinelStartRef$cur.focus({
|
|
64
|
+
preventScroll: true
|
|
65
|
+
});
|
|
66
|
+
},
|
|
67
|
+
changeActive: function changeActive(next) {
|
|
68
|
+
var _document = document,
|
|
69
|
+
activeElement = _document.activeElement;
|
|
70
|
+
if (next && activeElement === sentinelEndRef.current) {
|
|
71
|
+
sentinelStartRef.current.focus({
|
|
72
|
+
preventScroll: true
|
|
73
|
+
});
|
|
74
|
+
} else if (!next && activeElement === sentinelStartRef.current) {
|
|
75
|
+
sentinelEndRef.current.focus({
|
|
76
|
+
preventScroll: true
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
// ================================ Style =================================
|
|
84
|
+
var contentStyle = {};
|
|
85
|
+
if (width !== undefined) {
|
|
86
|
+
contentStyle.width = width;
|
|
87
|
+
}
|
|
88
|
+
if (height !== undefined) {
|
|
89
|
+
contentStyle.height = height;
|
|
90
|
+
}
|
|
91
|
+
// ================================ Render ================================
|
|
92
|
+
var footerNode = footer ? /*#__PURE__*/_react.default.createElement("div", {
|
|
93
|
+
className: (0, _classnames.default)("".concat(prefixCls, "-footer"), modalClassNames === null || modalClassNames === void 0 ? void 0 : modalClassNames.footer),
|
|
94
|
+
style: (0, _objectSpread2.default)({}, modalStyles === null || modalStyles === void 0 ? void 0 : modalStyles.footer)
|
|
95
|
+
}, footer) : null;
|
|
96
|
+
var headerNode = title ? /*#__PURE__*/_react.default.createElement("div", {
|
|
97
|
+
className: (0, _classnames.default)("".concat(prefixCls, "-header"), modalClassNames === null || modalClassNames === void 0 ? void 0 : modalClassNames.header),
|
|
98
|
+
style: (0, _objectSpread2.default)({}, modalStyles === null || modalStyles === void 0 ? void 0 : modalStyles.header)
|
|
99
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
100
|
+
className: (0, _classnames.default)("".concat(prefixCls, "-title"), modalClassNames === null || modalClassNames === void 0 ? void 0 : modalClassNames.title),
|
|
101
|
+
id: ariaId,
|
|
102
|
+
style: (0, _objectSpread2.default)({}, modalStyles === null || modalStyles === void 0 ? void 0 : modalStyles.title)
|
|
103
|
+
}, title)) : null;
|
|
104
|
+
var closableObj = (0, _react.useMemo)(function () {
|
|
105
|
+
if ((0, _typeof2.default)(closable) === 'object' && closable !== null) {
|
|
106
|
+
return closable;
|
|
107
|
+
}
|
|
108
|
+
if (closable) {
|
|
109
|
+
return {
|
|
110
|
+
closeIcon: closeIcon !== null && closeIcon !== void 0 ? closeIcon : /*#__PURE__*/_react.default.createElement("span", {
|
|
111
|
+
className: "".concat(prefixCls, "-close-x")
|
|
112
|
+
})
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
return {};
|
|
116
|
+
}, [closable, closeIcon, prefixCls]);
|
|
117
|
+
var ariaProps = (0, _pickAttrs.default)(closableObj, true);
|
|
118
|
+
var closeBtnIsDisabled = (0, _typeof2.default)(closable) === 'object' && closable.disabled;
|
|
119
|
+
var closerNode = closable ? /*#__PURE__*/_react.default.createElement("button", (0, _extends2.default)({
|
|
120
|
+
type: "button",
|
|
121
|
+
onClick: onClose,
|
|
122
|
+
"aria-label": "Close"
|
|
123
|
+
}, ariaProps, {
|
|
124
|
+
className: "".concat(prefixCls, "-close"),
|
|
125
|
+
disabled: closeBtnIsDisabled
|
|
126
|
+
}), closableObj.closeIcon) : null;
|
|
127
|
+
var content = /*#__PURE__*/_react.default.createElement("div", {
|
|
128
|
+
className: (0, _classnames.default)("".concat(prefixCls, "-section"), modalClassNames === null || modalClassNames === void 0 ? void 0 : modalClassNames.section),
|
|
129
|
+
style: modalStyles === null || modalStyles === void 0 ? void 0 : modalStyles.section
|
|
130
|
+
}, closerNode, headerNode, /*#__PURE__*/_react.default.createElement("div", (0, _extends2.default)({
|
|
131
|
+
className: (0, _classnames.default)("".concat(prefixCls, "-body"), modalClassNames === null || modalClassNames === void 0 ? void 0 : modalClassNames.body),
|
|
132
|
+
style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, bodyStyle), modalStyles === null || modalStyles === void 0 ? void 0 : modalStyles.body)
|
|
133
|
+
}, bodyProps), children), footerNode);
|
|
134
|
+
return /*#__PURE__*/_react.default.createElement("div", {
|
|
135
|
+
key: "dialog-element",
|
|
136
|
+
role: "dialog",
|
|
137
|
+
"aria-labelledby": title ? ariaId : null,
|
|
138
|
+
"aria-modal": "true",
|
|
139
|
+
ref: mergedRef,
|
|
140
|
+
style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, style), contentStyle),
|
|
141
|
+
className: (0, _classnames.default)(prefixCls, className),
|
|
142
|
+
onMouseDown: onMouseDown,
|
|
143
|
+
onMouseUp: onMouseUp
|
|
144
|
+
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
145
|
+
ref: sentinelStartRef,
|
|
146
|
+
tabIndex: 0,
|
|
147
|
+
style: entityStyle
|
|
148
|
+
}, /*#__PURE__*/_react.default.createElement(_MemoChildren.default, {
|
|
149
|
+
shouldUpdate: visible || forceRender
|
|
150
|
+
}, modalRender ? modalRender(content) : content)), /*#__PURE__*/_react.default.createElement("div", {
|
|
151
|
+
tabIndex: 0,
|
|
152
|
+
ref: sentinelEndRef,
|
|
153
|
+
style: sentinelStyle
|
|
154
|
+
}));
|
|
155
|
+
});
|
|
156
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
157
|
+
Panel.displayName = 'Panel';
|
|
158
|
+
}
|
|
159
|
+
var _default = exports.default = Panel;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import type { PanelProps, ContentRef } from './Panel';
|
|
3
|
+
export type ContentProps = {
|
|
4
|
+
motionName: string;
|
|
5
|
+
ariaId: string;
|
|
6
|
+
onVisibleChanged: (visible: boolean) => void;
|
|
7
|
+
} & PanelProps;
|
|
8
|
+
declare const Content: React.ForwardRefExoticComponent<{
|
|
9
|
+
motionName: string;
|
|
10
|
+
ariaId: string;
|
|
11
|
+
onVisibleChanged: (visible: boolean) => void;
|
|
12
|
+
} & PanelProps & React.RefAttributes<ContentRef>>;
|
|
13
|
+
export default Content;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
13
|
+
var React = _react;
|
|
14
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
15
|
+
var _rcMotion = _interopRequireDefault(require("rc-motion"));
|
|
16
|
+
var _util = require("../../util");
|
|
17
|
+
var _Panel = _interopRequireDefault(require("./Panel"));
|
|
18
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
19
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
20
|
+
var Content = /*#__PURE__*/React.forwardRef(function (props, ref) {
|
|
21
|
+
var prefixCls = props.prefixCls,
|
|
22
|
+
title = props.title,
|
|
23
|
+
style = props.style,
|
|
24
|
+
className = props.className,
|
|
25
|
+
visible = props.visible,
|
|
26
|
+
forceRender = props.forceRender,
|
|
27
|
+
destroyOnClose = props.destroyOnClose,
|
|
28
|
+
motionName = props.motionName,
|
|
29
|
+
ariaId = props.ariaId,
|
|
30
|
+
onVisibleChanged = props.onVisibleChanged,
|
|
31
|
+
mousePosition = props.mousePosition;
|
|
32
|
+
var dialogRef = (0, _react.useRef)();
|
|
33
|
+
|
|
34
|
+
// ============================= Style ==============================
|
|
35
|
+
var _React$useState = React.useState(),
|
|
36
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
37
|
+
transformOrigin = _React$useState2[0],
|
|
38
|
+
setTransformOrigin = _React$useState2[1];
|
|
39
|
+
var contentStyle = {};
|
|
40
|
+
if (transformOrigin) {
|
|
41
|
+
contentStyle.transformOrigin = transformOrigin;
|
|
42
|
+
}
|
|
43
|
+
function onPrepare() {
|
|
44
|
+
var elementOffset = (0, _util.offset)(dialogRef.current);
|
|
45
|
+
setTransformOrigin(mousePosition && (mousePosition.x || mousePosition.y) ? "".concat(mousePosition.x - elementOffset.left, "px ").concat(mousePosition.y - elementOffset.top, "px") : '');
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
// ============================= Render =============================
|
|
49
|
+
return /*#__PURE__*/React.createElement(_rcMotion.default, {
|
|
50
|
+
visible: visible,
|
|
51
|
+
onVisibleChanged: onVisibleChanged,
|
|
52
|
+
onAppearPrepare: onPrepare,
|
|
53
|
+
onEnterPrepare: onPrepare,
|
|
54
|
+
forceRender: forceRender,
|
|
55
|
+
motionName: motionName,
|
|
56
|
+
removeOnLeave: destroyOnClose,
|
|
57
|
+
ref: dialogRef
|
|
58
|
+
}, function (_ref, motionRef) {
|
|
59
|
+
var motionClassName = _ref.className,
|
|
60
|
+
motionStyle = _ref.style;
|
|
61
|
+
return /*#__PURE__*/React.createElement(_Panel.default, (0, _extends2.default)({}, props, {
|
|
62
|
+
ref: ref,
|
|
63
|
+
title: title,
|
|
64
|
+
ariaId: ariaId,
|
|
65
|
+
prefixCls: prefixCls,
|
|
66
|
+
holderRef: motionRef,
|
|
67
|
+
style: (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, motionStyle), style), contentStyle),
|
|
68
|
+
className: (0, _classnames.default)(className, motionClassName)
|
|
69
|
+
}));
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
Content.displayName = 'Content';
|
|
73
|
+
var _default = exports.default = Content;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
export type MaskProps = {
|
|
3
|
+
prefixCls: string;
|
|
4
|
+
visible: boolean;
|
|
5
|
+
motionName?: string;
|
|
6
|
+
style?: React.CSSProperties;
|
|
7
|
+
maskProps?: React.HTMLAttributes<HTMLDivElement>;
|
|
8
|
+
className?: string;
|
|
9
|
+
};
|
|
10
|
+
declare const Mask: React.FC<MaskProps>;
|
|
11
|
+
export default Mask;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
var React = _interopRequireWildcard(require("react"));
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
|
+
var _rcMotion = _interopRequireDefault(require("rc-motion"));
|
|
14
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
15
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
16
|
+
var Mask = function Mask(props) {
|
|
17
|
+
var prefixCls = props.prefixCls,
|
|
18
|
+
style = props.style,
|
|
19
|
+
visible = props.visible,
|
|
20
|
+
maskProps = props.maskProps,
|
|
21
|
+
motionName = props.motionName,
|
|
22
|
+
className = props.className;
|
|
23
|
+
return /*#__PURE__*/React.createElement(_rcMotion.default, {
|
|
24
|
+
key: "mask",
|
|
25
|
+
visible: visible,
|
|
26
|
+
motionName: motionName,
|
|
27
|
+
leavedClassName: "".concat(prefixCls, "-mask-hidden")
|
|
28
|
+
}, function (_ref, ref) {
|
|
29
|
+
var motionClassName = _ref.className,
|
|
30
|
+
motionStyle = _ref.style;
|
|
31
|
+
return /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
|
|
32
|
+
ref: ref,
|
|
33
|
+
style: (0, _objectSpread2.default)((0, _objectSpread2.default)({}, motionStyle), style),
|
|
34
|
+
className: (0, _classnames.default)("".concat(prefixCls, "-mask"), motionClassName, className)
|
|
35
|
+
}, maskProps));
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
var _default = exports.default = Mask;
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
11
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
12
|
+
var _classnames = _interopRequireDefault(require("classnames"));
|
|
13
|
+
var _contains = _interopRequireDefault(require("rc-util/lib/Dom/contains"));
|
|
14
|
+
var _useId = _interopRequireDefault(require("rc-util/lib/hooks/useId"));
|
|
15
|
+
var _KeyCode = _interopRequireDefault(require("rc-util/lib/KeyCode"));
|
|
16
|
+
var _pickAttrs = _interopRequireDefault(require("rc-util/lib/pickAttrs"));
|
|
17
|
+
var _react = _interopRequireWildcard(require("react"));
|
|
18
|
+
var React = _react;
|
|
19
|
+
var _util = require("../util");
|
|
20
|
+
var _Content = _interopRequireDefault(require("./Content"));
|
|
21
|
+
var _Mask = _interopRequireDefault(require("./Mask"));
|
|
22
|
+
var _warning = require("rc-util/lib/warning");
|
|
23
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
24
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
25
|
+
var Dialog = function Dialog(props) {
|
|
26
|
+
var _props$prefixCls = props.prefixCls,
|
|
27
|
+
prefixCls = _props$prefixCls === void 0 ? 'rc-dialog' : _props$prefixCls,
|
|
28
|
+
zIndex = props.zIndex,
|
|
29
|
+
_props$visible = props.visible,
|
|
30
|
+
visible = _props$visible === void 0 ? false : _props$visible,
|
|
31
|
+
_props$keyboard = props.keyboard,
|
|
32
|
+
keyboard = _props$keyboard === void 0 ? true : _props$keyboard,
|
|
33
|
+
_props$focusTriggerAf = props.focusTriggerAfterClose,
|
|
34
|
+
focusTriggerAfterClose = _props$focusTriggerAf === void 0 ? true : _props$focusTriggerAf,
|
|
35
|
+
wrapStyle = props.wrapStyle,
|
|
36
|
+
wrapClassName = props.wrapClassName,
|
|
37
|
+
wrapProps = props.wrapProps,
|
|
38
|
+
onClose = props.onClose,
|
|
39
|
+
afterOpenChange = props.afterOpenChange,
|
|
40
|
+
afterClose = props.afterClose,
|
|
41
|
+
transitionName = props.transitionName,
|
|
42
|
+
animation = props.animation,
|
|
43
|
+
_props$closable = props.closable,
|
|
44
|
+
closable = _props$closable === void 0 ? true : _props$closable,
|
|
45
|
+
_props$mask = props.mask,
|
|
46
|
+
mask = _props$mask === void 0 ? true : _props$mask,
|
|
47
|
+
maskTransitionName = props.maskTransitionName,
|
|
48
|
+
maskAnimation = props.maskAnimation,
|
|
49
|
+
_props$maskClosable = props.maskClosable,
|
|
50
|
+
maskClosable = _props$maskClosable === void 0 ? true : _props$maskClosable,
|
|
51
|
+
maskStyle = props.maskStyle,
|
|
52
|
+
maskProps = props.maskProps,
|
|
53
|
+
rootClassName = props.rootClassName,
|
|
54
|
+
modalClassNames = props.classNames,
|
|
55
|
+
modalStyles = props.styles;
|
|
56
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
57
|
+
['wrapStyle', 'bodyStyle', 'maskStyle'].forEach(function (prop) {
|
|
58
|
+
// (prop in props) && console.error(`Warning: ${prop} is deprecated, please use styles instead.`)
|
|
59
|
+
(0, _warning.warning)(!(prop in props), "".concat(prop, " is deprecated, please use styles instead."));
|
|
60
|
+
});
|
|
61
|
+
if ('wrapClassName' in props) {
|
|
62
|
+
(0, _warning.warning)(false, "wrapClassName is deprecated, please use classNames instead.");
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
var lastOutSideActiveElementRef = (0, _react.useRef)();
|
|
66
|
+
var wrapperRef = (0, _react.useRef)();
|
|
67
|
+
var contentRef = (0, _react.useRef)();
|
|
68
|
+
var _React$useState = React.useState(visible),
|
|
69
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
70
|
+
animatedVisible = _React$useState2[0],
|
|
71
|
+
setAnimatedVisible = _React$useState2[1];
|
|
72
|
+
|
|
73
|
+
// ========================== Init ==========================
|
|
74
|
+
var ariaId = (0, _useId.default)();
|
|
75
|
+
function saveLastOutSideActiveElementRef() {
|
|
76
|
+
if (!(0, _contains.default)(wrapperRef.current, document.activeElement)) {
|
|
77
|
+
lastOutSideActiveElementRef.current = document.activeElement;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
function focusDialogContent() {
|
|
81
|
+
if (!(0, _contains.default)(wrapperRef.current, document.activeElement)) {
|
|
82
|
+
var _contentRef$current;
|
|
83
|
+
(_contentRef$current = contentRef.current) === null || _contentRef$current === void 0 || _contentRef$current.focus();
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// ========================= Events =========================
|
|
88
|
+
function onDialogVisibleChanged(newVisible) {
|
|
89
|
+
// Try to focus
|
|
90
|
+
if (newVisible) {
|
|
91
|
+
focusDialogContent();
|
|
92
|
+
} else {
|
|
93
|
+
// Clean up scroll bar & focus back
|
|
94
|
+
setAnimatedVisible(false);
|
|
95
|
+
if (mask && lastOutSideActiveElementRef.current && focusTriggerAfterClose) {
|
|
96
|
+
try {
|
|
97
|
+
lastOutSideActiveElementRef.current.focus({
|
|
98
|
+
preventScroll: true
|
|
99
|
+
});
|
|
100
|
+
} catch (e) {
|
|
101
|
+
// Do nothing
|
|
102
|
+
}
|
|
103
|
+
lastOutSideActiveElementRef.current = null;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// Trigger afterClose only when change visible from true to false
|
|
107
|
+
if (animatedVisible) {
|
|
108
|
+
afterClose === null || afterClose === void 0 || afterClose();
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
afterOpenChange === null || afterOpenChange === void 0 || afterOpenChange(newVisible);
|
|
112
|
+
}
|
|
113
|
+
function onInternalClose(e) {
|
|
114
|
+
onClose === null || onClose === void 0 || onClose(e);
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// >>> Content
|
|
118
|
+
var contentClickRef = (0, _react.useRef)(false);
|
|
119
|
+
var contentTimeoutRef = (0, _react.useRef)();
|
|
120
|
+
|
|
121
|
+
// We need record content click incase content popup out of dialog
|
|
122
|
+
var onContentMouseDown = function onContentMouseDown() {
|
|
123
|
+
clearTimeout(contentTimeoutRef.current);
|
|
124
|
+
contentClickRef.current = true;
|
|
125
|
+
};
|
|
126
|
+
var onContentMouseUp = function onContentMouseUp() {
|
|
127
|
+
contentTimeoutRef.current = setTimeout(function () {
|
|
128
|
+
contentClickRef.current = false;
|
|
129
|
+
});
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
// >>> Wrapper
|
|
133
|
+
// Close only when element not on dialog
|
|
134
|
+
var onWrapperClick = null;
|
|
135
|
+
if (maskClosable) {
|
|
136
|
+
onWrapperClick = function onWrapperClick(e) {
|
|
137
|
+
if (contentClickRef.current) {
|
|
138
|
+
contentClickRef.current = false;
|
|
139
|
+
} else if (wrapperRef.current === e.target) {
|
|
140
|
+
onInternalClose(e);
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
function onWrapperKeyDown(e) {
|
|
145
|
+
if (keyboard && e.keyCode === _KeyCode.default.ESC) {
|
|
146
|
+
e.stopPropagation();
|
|
147
|
+
onInternalClose(e);
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
// keep focus inside dialog
|
|
152
|
+
if (visible && e.keyCode === _KeyCode.default.TAB) {
|
|
153
|
+
contentRef.current.changeActive(!e.shiftKey);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
// ========================= Effect =========================
|
|
158
|
+
(0, _react.useEffect)(function () {
|
|
159
|
+
if (visible) {
|
|
160
|
+
setAnimatedVisible(true);
|
|
161
|
+
saveLastOutSideActiveElementRef();
|
|
162
|
+
}
|
|
163
|
+
}, [visible]);
|
|
164
|
+
|
|
165
|
+
// Remove direct should also check the scroll bar update
|
|
166
|
+
(0, _react.useEffect)(function () {
|
|
167
|
+
return function () {
|
|
168
|
+
clearTimeout(contentTimeoutRef.current);
|
|
169
|
+
};
|
|
170
|
+
}, []);
|
|
171
|
+
var mergedStyle = (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
172
|
+
zIndex: zIndex
|
|
173
|
+
}, wrapStyle), modalStyles === null || modalStyles === void 0 ? void 0 : modalStyles.wrapper), {}, {
|
|
174
|
+
display: !animatedVisible ? 'none' : null
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
// ========================= Render =========================
|
|
178
|
+
return /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
|
|
179
|
+
className: (0, _classnames.default)("".concat(prefixCls, "-root"), rootClassName)
|
|
180
|
+
}, (0, _pickAttrs.default)(props, {
|
|
181
|
+
data: true
|
|
182
|
+
})), /*#__PURE__*/React.createElement(_Mask.default, {
|
|
183
|
+
prefixCls: prefixCls,
|
|
184
|
+
visible: mask && visible,
|
|
185
|
+
motionName: (0, _util.getMotionName)(prefixCls, maskTransitionName, maskAnimation),
|
|
186
|
+
style: (0, _objectSpread2.default)((0, _objectSpread2.default)({
|
|
187
|
+
zIndex: zIndex
|
|
188
|
+
}, maskStyle), modalStyles === null || modalStyles === void 0 ? void 0 : modalStyles.mask),
|
|
189
|
+
maskProps: maskProps,
|
|
190
|
+
className: modalClassNames === null || modalClassNames === void 0 ? void 0 : modalClassNames.mask
|
|
191
|
+
}), /*#__PURE__*/React.createElement("div", (0, _extends2.default)({
|
|
192
|
+
tabIndex: -1,
|
|
193
|
+
onKeyDown: onWrapperKeyDown,
|
|
194
|
+
className: (0, _classnames.default)("".concat(prefixCls, "-wrap"), wrapClassName, modalClassNames === null || modalClassNames === void 0 ? void 0 : modalClassNames.wrapper),
|
|
195
|
+
ref: wrapperRef,
|
|
196
|
+
onClick: onWrapperClick,
|
|
197
|
+
style: mergedStyle
|
|
198
|
+
}, wrapProps), /*#__PURE__*/React.createElement(_Content.default, (0, _extends2.default)({}, props, {
|
|
199
|
+
onMouseDown: onContentMouseDown,
|
|
200
|
+
onMouseUp: onContentMouseUp,
|
|
201
|
+
ref: contentRef,
|
|
202
|
+
closable: closable,
|
|
203
|
+
ariaId: ariaId,
|
|
204
|
+
prefixCls: prefixCls,
|
|
205
|
+
visible: visible && animatedVisible,
|
|
206
|
+
onClose: onInternalClose,
|
|
207
|
+
onVisibleChanged: onDialogVisibleChanged,
|
|
208
|
+
motionName: (0, _util.getMotionName)(prefixCls, transitionName, animation)
|
|
209
|
+
}))));
|
|
210
|
+
};
|
|
211
|
+
var _default = exports.default = Dialog;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.default = void 0;
|
|
9
|
+
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
10
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
11
|
+
var _portal = _interopRequireDefault(require("@rc-component/portal"));
|
|
12
|
+
var React = _interopRequireWildcard(require("react"));
|
|
13
|
+
var _context = require("./context");
|
|
14
|
+
var _Dialog = _interopRequireDefault(require("./Dialog"));
|
|
15
|
+
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
|
|
16
|
+
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
|
|
17
|
+
// fix issue #10656
|
|
18
|
+
/*
|
|
19
|
+
* getContainer remarks
|
|
20
|
+
* Custom container should not be return, because in the Portal component, it will remove the
|
|
21
|
+
* return container element here, if the custom container is the only child of it's component,
|
|
22
|
+
* like issue #10656, It will has a conflict with removeChild method in react-dom.
|
|
23
|
+
* So here should add a child (div element) to custom container.
|
|
24
|
+
* */
|
|
25
|
+
|
|
26
|
+
var DialogWrap = function DialogWrap(props) {
|
|
27
|
+
var visible = props.visible,
|
|
28
|
+
getContainer = props.getContainer,
|
|
29
|
+
forceRender = props.forceRender,
|
|
30
|
+
_props$destroyOnClose = props.destroyOnClose,
|
|
31
|
+
destroyOnClose = _props$destroyOnClose === void 0 ? false : _props$destroyOnClose,
|
|
32
|
+
_afterClose = props.afterClose,
|
|
33
|
+
panelRef = props.panelRef;
|
|
34
|
+
var _React$useState = React.useState(visible),
|
|
35
|
+
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
|
|
36
|
+
animatedVisible = _React$useState2[0],
|
|
37
|
+
setAnimatedVisible = _React$useState2[1];
|
|
38
|
+
var refContext = React.useMemo(function () {
|
|
39
|
+
return {
|
|
40
|
+
panel: panelRef
|
|
41
|
+
};
|
|
42
|
+
}, [panelRef]);
|
|
43
|
+
React.useEffect(function () {
|
|
44
|
+
if (visible) {
|
|
45
|
+
setAnimatedVisible(true);
|
|
46
|
+
}
|
|
47
|
+
}, [visible]);
|
|
48
|
+
|
|
49
|
+
// Destroy on close will remove wrapped div
|
|
50
|
+
if (!forceRender && destroyOnClose && !animatedVisible) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
return /*#__PURE__*/React.createElement(_context.RefContext.Provider, {
|
|
54
|
+
value: refContext
|
|
55
|
+
}, /*#__PURE__*/React.createElement(_portal.default, {
|
|
56
|
+
open: visible || forceRender || animatedVisible,
|
|
57
|
+
autoDestroy: false,
|
|
58
|
+
getContainer: getContainer,
|
|
59
|
+
autoLock: visible || animatedVisible
|
|
60
|
+
}, /*#__PURE__*/React.createElement(_Dialog.default, (0, _extends2.default)({}, props, {
|
|
61
|
+
destroyOnClose: destroyOnClose,
|
|
62
|
+
afterClose: function afterClose() {
|
|
63
|
+
_afterClose === null || _afterClose === void 0 || _afterClose();
|
|
64
|
+
setAnimatedVisible(false);
|
|
65
|
+
}
|
|
66
|
+
}))));
|
|
67
|
+
};
|
|
68
|
+
DialogWrap.displayName = 'Dialog';
|
|
69
|
+
var _default = exports.default = DialogWrap;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { GetContainer } from 'rc-util/lib/PortalWrapper';
|
|
2
|
+
import type { CSSProperties, ReactNode, SyntheticEvent } from 'react';
|
|
3
|
+
export type SemanticName = 'header' | 'body' | 'footer' | 'section' | 'title' | 'wrapper' | 'mask';
|
|
4
|
+
export type ModalClassNames = Partial<Record<SemanticName, string>>;
|
|
5
|
+
export type ModalStyles = Partial<Record<SemanticName, CSSProperties>>;
|
|
6
|
+
export type IDialogPropTypes = {
|
|
7
|
+
className?: string;
|
|
8
|
+
keyboard?: boolean;
|
|
9
|
+
style?: CSSProperties;
|
|
10
|
+
mask?: boolean;
|
|
11
|
+
children?: React.ReactNode;
|
|
12
|
+
afterClose?: () => any;
|
|
13
|
+
afterOpenChange?: (open: boolean) => void;
|
|
14
|
+
onClose?: (e: SyntheticEvent) => any;
|
|
15
|
+
closable?: boolean | ({
|
|
16
|
+
closeIcon?: React.ReactNode;
|
|
17
|
+
disabled?: boolean;
|
|
18
|
+
} & React.AriaAttributes);
|
|
19
|
+
maskClosable?: boolean;
|
|
20
|
+
visible?: boolean;
|
|
21
|
+
destroyOnClose?: boolean;
|
|
22
|
+
mousePosition?: {
|
|
23
|
+
x: number;
|
|
24
|
+
y: number;
|
|
25
|
+
} | null;
|
|
26
|
+
title?: ReactNode;
|
|
27
|
+
footer?: ReactNode;
|
|
28
|
+
transitionName?: string;
|
|
29
|
+
maskTransitionName?: string;
|
|
30
|
+
animation?: any;
|
|
31
|
+
maskAnimation?: any;
|
|
32
|
+
wrapStyle?: Record<string, any>;
|
|
33
|
+
bodyStyle?: Record<string, any>;
|
|
34
|
+
maskStyle?: Record<string, any>;
|
|
35
|
+
prefixCls?: string;
|
|
36
|
+
wrapClassName?: string;
|
|
37
|
+
width?: string | number;
|
|
38
|
+
height?: string | number;
|
|
39
|
+
zIndex?: number;
|
|
40
|
+
bodyProps?: any;
|
|
41
|
+
maskProps?: any;
|
|
42
|
+
rootClassName?: string;
|
|
43
|
+
classNames?: ModalClassNames;
|
|
44
|
+
styles?: ModalStyles;
|
|
45
|
+
wrapProps?: any;
|
|
46
|
+
getContainer?: GetContainer | false;
|
|
47
|
+
closeIcon?: ReactNode;
|
|
48
|
+
modalRender?: (node: ReactNode) => ReactNode;
|
|
49
|
+
forceRender?: boolean;
|
|
50
|
+
focusTriggerAfterClose?: boolean;
|
|
51
|
+
panelRef?: React.Ref<HTMLDivElement>;
|
|
52
|
+
};
|