@txdfe/at
Version:
一个设计体系组件库
716 lines (714 loc) • 30.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _react = _interopRequireWildcard(require("react"));
var _reactDom = require("react-dom");
var _propTypes = _interopRequireDefault(require("prop-types"));
var _classnames2 = _interopRequireDefault(require("classnames"));
var _util = require("../util");
var _manager = _interopRequireDefault(require("./manager"));
var _gateway = _interopRequireDefault(require("./gateway"));
var _position = _interopRequireDefault(require("./position"));
var _findNode = _interopRequireDefault(require("./utils/find-node"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { "default": e }; }
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); }
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 && {}.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; }
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _toConsumableArray(r) { return _arrayWithoutHoles(r) || _iterableToArray(r) || _unsupportedIterableToArray(r) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
function _iterableToArray(r) { if ("undefined" != typeof Symbol && null != r[Symbol.iterator] || null != r["@@iterator"]) return Array.from(r); }
function _arrayWithoutHoles(r) { if (Array.isArray(r)) return _arrayLikeToArray(r); }
function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _callSuper(t, o, e) { return o = _getPrototypeOf(o), _possibleConstructorReturn(t, _isNativeReflectConstruct() ? Reflect.construct(o, e || [], _getPrototypeOf(t).constructor) : o.apply(t, e)); }
function _possibleConstructorReturn(t, e) { if (e && ("object" == _typeof(e) || "function" == typeof e)) return e; if (void 0 !== e) throw new TypeError("Derived constructors may only return object or undefined"); return _assertThisInitialized(t); }
function _assertThisInitialized(e) { if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return e; }
function _isNativeReflectConstruct() { try { var t = !Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); } catch (t) {} return (_isNativeReflectConstruct = function _isNativeReflectConstruct() { return !!t; })(); }
function _getPrototypeOf(t) { return _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf.bind() : function (t) { return t.__proto__ || Object.getPrototypeOf(t); }, _getPrototypeOf(t); }
function _inherits(t, e) { if ("function" != typeof e && null !== e) throw new TypeError("Super expression must either be null or a function"); t.prototype = Object.create(e && e.prototype, { constructor: { value: t, writable: !0, configurable: !0 } }), Object.defineProperty(t, "prototype", { writable: !1 }), e && _setPrototypeOf(t, e); }
function _setPrototypeOf(t, e) { return _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function (t, e) { return t.__proto__ = e, t; }, _setPrototypeOf(t, e); }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
var saveLastFocusNode = _util.focus.saveLastFocusNode,
getFocusNodeList = _util.focus.getFocusNodeList,
backLastFocusNode = _util.focus.backLastFocusNode;
var makeChain = _util.func.makeChain,
noop = _util.func.noop;
var isScrollDisplay = function isScrollDisplay(element) {
try {
var scrollbarStyle = window.getComputedStyle(element, '::-webkit-scrollbar');
return !scrollbarStyle || scrollbarStyle.getPropertyValue('display') !== 'none';
} catch (e) {
// ignore error for firefox
}
return true;
};
var hasScroll = function hasScroll() {
var doc = document.documentElement;
return doc.scrollHeight > doc.clientHeight && _util.dom.scrollbar().width > 0 && isScrollDisplay(document.documentElement) && isScrollDisplay(document.body);
};
var prefixes = ['-webkit-', '-moz-', '-o-', 'ms-', ''];
var getStyleProperty = function getStyleProperty(node, name) {
var style = window.getComputedStyle(node);
var ret = '';
for (var i = 0; i < prefixes.length; i++) {
ret = style.getPropertyValue(prefixes[i] + name);
if (ret) {
break;
}
}
return ret;
};
var modals = [];
var bodyOverflowY;
var bodyPaddingRight;
/**
* Overlay
* */
var Overlay = exports["default"] = /*#__PURE__*/function (_Component) {
function Overlay(_props) {
var _this;
_classCallCheck(this, Overlay);
_this = _callSuper(this, Overlay, [_props]);
_defineProperty(_this, "getAnimation", function (props) {
if (props.animation === false) {
return false;
}
if (props.animation) {
return props.animation;
}
return _this.getAnimationByAlign(props.align);
});
_defineProperty(_this, "getAnimationByAlign", function (align) {
switch (align[0]) {
case 't':
return {
"in": 'fadeInDown',
out: 'fadeOutUp'
};
case 'b':
return {
"in": 'fadeInUp',
out: 'fadeOutDown'
};
default:
return {
"in": 'fadeInDown',
out: 'fadeOutUp'
};
}
});
_defineProperty(_this, "addAnimationEvents", function () {
setTimeout(function () {
var node = _this.getContentNode();
if (node) {
var id = (0, _util.guid)();
_this._animation = _util.events.on(node, _util.support.animation.end, _this.handleAnimateEnd.bind(_this, id));
var animationDelay = parseFloat(getStyleProperty(node, 'animation-delay')) || 0;
var animationDuration = parseFloat(getStyleProperty(node, 'animation-duration')) || 0;
var time = animationDelay + animationDuration;
if (time) {
_this.timeoutMap[id] = setTimeout(function () {
_this.handleAnimateEnd(id);
}, time * 1000 + 200);
}
}
});
});
_defineProperty(_this, "handlePosition", function (config) {
var align = config.align.join(' ');
if (!('animation' in _this.props) && _this.props.needAdjust && _this.lastAlign !== align) {
_this.setState({
animation: _this.getAnimationByAlign(align)
});
}
_this.lastAlign = align;
_this.props.onPosition(config);
});
_defineProperty(_this, "handleAnimateEnd", function (id) {
if (_this.timeoutMap[id]) {
clearTimeout(_this.timeoutMap[id]);
}
delete _this.timeoutMap[id];
if (_this._animation) {
_this._animation.off();
_this._animation = null;
}
if (!_this._isMounted) {
return;
}
if (_this.state.status === 'leaving') {
_this.setState({
visible: false,
status: 'none'
});
_this.onLeaved();
} else if (_this.state.status === 'entering') {
_this.setState({
status: 'none'
});
_this.onEntered();
}
});
_defineProperty(_this, "enter", function () {
_this.setState({
visible: true,
status: 'entering'
}, function () {
// NOTE: setState callback (second argument) now fires immediately after componentDidMount / componentDidUpdate instead of after all components have rendered.
setTimeout(function () {
if (!_this._isDestroyed) {
_this.onEntering();
}
});
});
});
_defineProperty(_this, "leave", function () {
_this.setState({
status: 'leaving'
});
_this.onLeaving();
});
_defineProperty(_this, "onEntering", function () {
var wrapperNode = _this.getWrapperNode();
_util.dom.addClass(wrapperNode, 'opened');
_this.props.onOpen();
});
_defineProperty(_this, "onLeaving", function () {
var wrapperNode = _this.getWrapperNode();
_util.dom.removeClass(wrapperNode, 'opened');
_this.props.onClose();
});
_defineProperty(_this, "onEntered", function () {
_manager["default"].addOverlay(_this);
_this.setFocusNode();
_this.props.afterOpen();
});
_defineProperty(_this, "onLeaved", function () {
_manager["default"].removeOverlay(_this);
_this.setFocusNode();
_this.props.afterClose();
});
_defineProperty(_this, "beforeOpen", function () {
if (_this.props.disableScroll) {
if (modals.length === 0) {
var style = {
overflowY: 'hidden'
};
var _document = document,
body = _document.body;
bodyOverflowY = body.style.overflowY;
if (hasScroll()) {
bodyPaddingRight = body.style.paddingRight;
style.paddingRight = "".concat(_util.dom.getStyle(body, 'paddingRight') + _util.dom.scrollbar().width, "px");
}
_util.dom.setStyle(body, style);
}
modals.push(_this);
}
});
_defineProperty(_this, "beforeClose", function () {
if (_this.props.disableScroll) {
var index = modals.indexOf(_this);
if (index > -1) {
if (modals.length === 1) {
var style = {
overflowY: bodyOverflowY
};
if (hasScroll()) {
style.paddingRight = bodyPaddingRight;
}
_util.dom.setStyle(document.body, style);
bodyOverflowY = undefined;
bodyPaddingRight = undefined;
}
modals.splice(index, 1);
}
}
});
_defineProperty(_this, "setFocusNode", function () {
if (!_this.props.autoFocus) {
return;
}
if (_this.state.visible && !_this._hasFocused) {
saveLastFocusNode();
// 这个时候很可能上一个弹层的关闭事件还未触发,导致焦点已经回到触发的元素
// 这里延时处理一下,延时的时间为 document.click 捕获触发的延时时间
_this.focusTimeout = setTimeout(function () {
var node = _this.getContentNode();
if (node) {
var focusNodeList = getFocusNodeList(node);
if (focusNodeList.length) {
focusNodeList[0].focus();
}
_this._hasFocused = true;
}
}, 100);
} else if (!_this.state.visible && _this._hasFocused) {
backLastFocusNode();
_this._hasFocused = false;
}
});
_defineProperty(_this, "getContent", function () {
return _this.contentRef;
});
_defineProperty(_this, "getContentNode", function () {
return (0, _reactDom.findDOMNode)(_this.contentRef);
});
_defineProperty(_this, "getWrapperNode", function () {
return _this.gatewayRef ? _this.gatewayRef.getChildNode() : null;
});
_defineProperty(_this, "addDocumentEvents", function () {
if (_this.props.canCloseByEsc) {
_this._keydownEvents = _util.events.on(document, 'keydown', _this.handleDocumentKeyDown);
}
if (_this.props.canCloseByOutSideClick) {
_this._clickEvents = _util.events.on(document, 'click', _this.handleDocumentClick);
_this._touchEvents = _util.events.on(document, 'touchend', _this.handleDocumentClick);
}
});
_defineProperty(_this, "removeDocumentEvents", function () {
if (_this._keydownEvents) {
_this._keydownEvents.off();
_this._keydownEvents = null;
}
if (_this._clickEvents) {
_this._clickEvents.off();
_this._clickEvents = null;
}
if (_this._touchEvents) {
_this._touchEvents.off();
_this._touchEvents = null;
}
});
_defineProperty(_this, "handleDocumentKeyDown", function (e) {
if (_this.state.visible && e.keyCode === _util.KEYCODE.ESC && _manager["default"].isCurrentOverlay(_this)) {
_this.props.onRequestClose('keyboard', e);
}
});
_defineProperty(_this, "handleDocumentClick", function (e) {
if (_this.state.visible) {
var safeNode = _this.props.safeNode;
var safeNodes = Array.isArray(safeNode) ? _toConsumableArray(safeNode) : [safeNode];
safeNodes.unshift(function () {
return _this.getWrapperNode();
});
var path = e.path || e.composedPath && e.composedPath();
for (var i = 0; i < safeNodes.length; i++) {
var node = (0, _findNode["default"])(safeNodes[i], _this.props);
// HACK: 如果触发点击的节点是弹层内部的节点,并且在被点击后立即销毁,那么此时无法使用 node.contains(e.target)
// 来判断此时点击的节点是否是弹层内部的节点,额外判断
if (node && (node === e.target || node.contains && node.contains(e.target) || e.target !== document && !document.documentElement.contains(e.target)) || path && path.indexOf(node) > -1 // 如果 node 在 e.path 中,则表示点击了 node 的后代
) {
return;
}
}
_this.props.onRequestClose('docClick', e);
}
});
_defineProperty(_this, "handleMaskClick", function (e) {
if (_this.props.canCloseByMask) {
_this.props.onRequestClose('maskClick', e);
}
});
_defineProperty(_this, "saveContentRef", function (ref) {
_this.contentRef = ref;
});
_defineProperty(_this, "saveGatewayRef", function (ref) {
_this.gatewayRef = ref;
});
// 兼容过去的用法: this.popupRef.getInstance().overlay.getInstance().getContentNode()
_defineProperty(_this, "getInstance", function () {
return _this;
});
_this.state = {
visible: _props.visible,
status: 'none',
animation: _this.getAnimation(_props)
};
_this.lastAlign = _props.align;
_this.timeoutMap = {};
return _this;
}
_inherits(Overlay, _Component);
return _createClass(Overlay, [{
key: "UNSAFE_componentWillMount",
value: function UNSAFE_componentWillMount() {
if (this.props.visible) {
this.beforeOpen();
this.props.beforeOpen();
if (this.state.animation && _util.support.animation) {
this.enter();
}
}
}
}, {
key: "componentDidMount",
value: function componentDidMount() {
this.componentDidUpdate({
visible: false
});
this.addDocumentEvents();
_manager["default"].addOverlay(this);
if (this.state.visible) {
this._isMounted = true;
}
}
}, {
key: "UNSAFE_componentWillReceiveProps",
value: function UNSAFE_componentWillReceiveProps(nextProps) {
if (!this._isMounted && nextProps.visible) {
this._isMounted = true;
}
var willOpen = !this.props.visible && nextProps.visible;
var willClose = this.props.visible && !nextProps.visible;
if (willOpen) {
this.beforeOpen();
nextProps.beforeOpen();
} else if (willClose) {
this.beforeClose();
nextProps.beforeClose();
}
if (nextProps.animation || nextProps.animation === false) {
this.setState({
animation: nextProps.animation
});
}
if (nextProps.animation !== false && _util.support.animation) {
if (willOpen) {
this.enter();
} else if (willClose) {
this.leave();
}
} else {
this.setState({
visible: nextProps.visible
});
}
}
}, {
key: "componentDidUpdate",
value: function componentDidUpdate(prevProps) {
var _this2 = this;
var open = !prevProps.visible && this.props.visible;
var close = prevProps.visible && !this.props.visible;
if (this.state.animation && _util.support.animation) {
if (open || close) {
this.addAnimationEvents();
}
} else {
var wrapperNode = this.getWrapperNode();
if (open) {
setTimeout(function () {
_this2.props.onOpen();
_this2.props.afterOpen();
_util.dom.addClass(wrapperNode, 'opened');
_manager["default"].addOverlay(_this2);
});
} else if (close) {
this.props.onClose();
this.props.afterClose();
_util.dom.removeClass(wrapperNode, 'opened');
_manager["default"].removeOverlay(this);
}
this.setFocusNode();
}
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
this._isDestroyed = true;
this._isMounted = false;
_manager["default"].removeOverlay(this);
this.removeDocumentEvents();
if (this.focusTimeout) {
clearTimeout(this.focusTimeout);
}
if (this._animation) {
this._animation.off();
this._animation = null;
}
this.beforeClose();
}
}, {
key: "render",
value: function render() {
var _this$props = this.props,
role = _this$props.role,
prefix = _this$props.prefix,
className = _this$props.className,
style = _this$props.style,
propChildren = _this$props.children,
needListenResize = _this$props.needListenResize,
needListenScroll = _this$props.needListenScroll,
target = _this$props.target,
align = _this$props.align,
offset = _this$props.offset,
container = _this$props.container,
hasMask = _this$props.hasMask,
maskStyle = _this$props.maskStyle,
needAdjust = _this$props.needAdjust,
beforePosition = _this$props.beforePosition,
wrapperStyle = _this$props.wrapperStyle,
rtl = _this$props.rtl,
propShouldUpdatePosition = _this$props.shouldUpdatePosition,
cache = _this$props.cache,
wrapperClassName = _this$props.wrapperClassName,
onMaskMouseEnter = _this$props.onMaskMouseEnter,
onMaskMouseLeave = _this$props.onMaskMouseLeave;
var _this$state = this.state,
stateVisible = _this$state.visible,
status = _this$state.status,
animation = _this$state.animation;
var children = stateVisible || cache ? propChildren : null;
if (children) {
var child = _react.Children.only(children);
// if chlild is a functional component wrap in a component to allow a ref to be set
if (typeof child.type === 'function' && !(child.type.prototype instanceof _react.Component)) {
child = /*#__PURE__*/_react["default"].createElement("div", {
role: "none"
}, child);
}
var childClazz = (0, _classnames2["default"])(_defineProperty(_defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "".concat(prefix, "overlay-inner"), true), animation["in"], status === 'entering'), animation.out, status === 'leaving'), child.props.className, !!child.props.className), className, !!className));
if (typeof child.ref === 'string') {
throw new Error('Can not set ref by string in Overlay, use function instead.');
}
children = /*#__PURE__*/_react["default"].cloneElement(child, {
className: childClazz,
style: _objectSpread(_objectSpread({}, child.props.style), style),
ref: makeChain(this.saveContentRef, child.ref),
'aria-hidden': !stateVisible && cache && this._isMounted,
onClick: this.props.onClick
});
if (align) {
var shouldUpdatePosition = status === 'leaving' ? false : propShouldUpdatePosition;
// role用于区分是否是tooltip,对于tooltip定位机制有特殊处理
children = /*#__PURE__*/_react["default"].createElement(_position["default"], {
role: role,
container: container,
visible: stateVisible,
children: children,
target: target,
align: align,
offset: offset,
needListenResize: needListenResize,
needListenScroll: needListenScroll,
needAdjust: needAdjust,
beforePosition: beforePosition,
onPosition: this.handlePosition,
shouldUpdatePosition: shouldUpdatePosition,
rtl: rtl
});
}
var wrapperClazz = (0, _classnames2["default"])(["".concat(prefix, "overlay-wrapper"), wrapperClassName]);
var newWrapperStyle = _extends({}, {
display: stateVisible ? '' : 'none'
}, wrapperStyle);
children = /*#__PURE__*/_react["default"].createElement("div", {
className: wrapperClazz,
style: newWrapperStyle,
dir: rtl ? 'rtl' : undefined
}, hasMask ? /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefix, "overlay-backdrop"),
onClick: this.handleMaskClick,
onMouseEnter: onMaskMouseEnter,
onMouseLeave: onMaskMouseLeave,
dir: rtl ? 'rtl' : undefined,
style: maskStyle
}) : null, children);
}
return /*#__PURE__*/_react["default"].createElement(_gateway["default"], {
container: container,
target: target,
children: children,
ref: this.saveGatewayRef
});
}
}]);
}(_react.Component);
_defineProperty(Overlay, "propTypes", {
role: _propTypes["default"].string,
prefix: _propTypes["default"].string,
pure: _propTypes["default"].bool,
rtl: _propTypes["default"].bool,
className: _propTypes["default"].string,
style: _propTypes["default"].object,
/**
* 弹层内容
*/
children: _propTypes["default"].any,
/**
* 是否显示弹层
*/
visible: _propTypes["default"].bool,
/**
* 弹层请求关闭时触发事件的回调函数
* @param {String} type 弹层关闭的来源
* @param {Object} e DOM 事件
*/
onRequestClose: _propTypes["default"].func,
/**
* 是否监听resize事件
*/
needListenResize: _propTypes["default"].bool,
/**
* 是否监听scroll事件
*/
needListenScroll: _propTypes["default"].bool,
/**
* 弹层定位的参照元素
*/
target: _propTypes["default"].any,
/**
* 弹层相对于参照元素的定位, 详见开发指南的[定位部分](#定位)
*/
align: _propTypes["default"].oneOfType([_propTypes["default"].string, _propTypes["default"].bool]),
/**
* 弹层相对于trigger的定位的微调, 接收数组[hoz, ver], 表示弹层在 left / top 上的增量
* e.g. [100, 100] 表示往右(RTL 模式下是往左) 、下分布偏移100px
*/
offset: _propTypes["default"].array,
/**
* 渲染组件的容器,如果是函数需要返回 ref,如果是字符串则是该 DOM 的 id,也可以直接传入 DOM 节点
*/
container: _propTypes["default"].any,
/**
* 是否显示遮罩
*/
hasMask: _propTypes["default"].bool,
/**
* 遮罩样式
*/
maskStyle: _propTypes["default"].object,
/**
* 是否支持 esc 按键关闭弹层
*/
canCloseByEsc: _propTypes["default"].bool,
/**
* 点击弹层外的区域是否关闭弹层,不显示遮罩时生效
*/
canCloseByOutSideClick: _propTypes["default"].bool,
/**
* 点击遮罩区域是否关闭弹层,显示遮罩时生效
*/
canCloseByMask: _propTypes["default"].bool,
/**
* 弹层打开前触发事件的回调函数
*/
beforeOpen: _propTypes["default"].func,
/**
* 弹层打开时触发事件的回调函数
*/
onOpen: _propTypes["default"].func,
/**
* 弹层打开后触发事件的回调函数, 如果有动画,则在动画结束后触发
*/
afterOpen: _propTypes["default"].func,
/**
* 弹层关闭前触发事件的回调函数
*/
beforeClose: _propTypes["default"].func,
/**
* 弹层关闭时触发事件的回调函数
*/
onClose: _propTypes["default"].func,
/**
* 弹层关闭后触发事件的回调函数, 如果有动画,则在动画结束后触发
*/
afterClose: _propTypes["default"].func,
/**
* 弹层定位完成前触发的事件
*/
beforePosition: _propTypes["default"].func,
/**
* 弹层定位完成时触发的事件
* @param {Object} config 定位的参数
* @param {Array} config.align 对齐方式,如 ['cc', 'cc'](如果开启 needAdjust,可能和预先设置的 align 不同)
* @param {Number} config.top 距离视口顶部距离
* @param {Number} config.left 距离视口左侧距离
* @param {Object} node 定位参照的容器节点
*/
onPosition: _propTypes["default"].func,
/**
* 是否在每次弹层重新渲染后强制更新定位信息,一般用于弹层内容区域大小发生变化时,仍需保持原来的定位方式
*/
shouldUpdatePosition: _propTypes["default"].bool,
/**
* 弹层打开时是否让其中的元素自动获取焦点
*/
autoFocus: _propTypes["default"].bool,
/**
* 当弹层由于页面滚动等情况不在可视区域时,是否自动调整定位以出现在可视区域
*/
needAdjust: _propTypes["default"].bool,
/**
* 是否禁用页面滚动
*/
disableScroll: _propTypes["default"].bool,
/**
* 隐藏时是否保留子节点
*/
cache: _propTypes["default"].bool,
/**
* 安全节点,当点击 document 的时候,如果包含该节点则不会关闭弹层,如果是函数需要返回 ref,如果是字符串则是该 DOM 的 id,也可以直接传入 DOM 节点,或者以上值组成的数组
*/
safeNode: _propTypes["default"].any,
/**
* 弹层的根节点的样式类
*/
wrapperClassName: _propTypes["default"].string,
/**
* 弹层的根节点的内联样式
*/
wrapperStyle: _propTypes["default"].object,
/**
* 配置动画的播放方式,支持 { in: 'enter-class', out: 'leave-class' } 的对象参数,如果设置为 false,则不播放动画。 请参考 Animate 组件的文档获取可用的动画名
* @default { in: 'expandInDown', out: 'expandOutUp' }
*/
animation: _propTypes["default"].oneOfType([_propTypes["default"].object, _propTypes["default"].bool]),
onMaskMouseEnter: _propTypes["default"].func,
onMaskMouseLeave: _propTypes["default"].func,
onClick: _propTypes["default"].func
});
_defineProperty(Overlay, "defaultProps", {
prefix: 'next-',
pure: false,
visible: false,
needListenResize: true,
needListenScroll: true,
onRequestClose: noop,
target: _position["default"].VIEWPORT,
align: 'tl bl',
offset: [0, 4],
hasMask: false,
canCloseByEsc: true,
canCloseByOutSideClick: true,
canCloseByMask: true,
beforeOpen: noop,
onOpen: noop,
afterOpen: noop,
beforeClose: noop,
onClose: noop,
afterClose: noop,
beforePosition: noop,
onPosition: noop,
onMaskMouseEnter: noop,
onMaskMouseLeave: noop,
shouldUpdatePosition: false,
autoFocus: false,
needAdjust: true,
disableScroll: false,
cache: false,
onClick: function onClick(e) {
return e.stopPropagation();
}
});