UNPKG

zent

Version:

一套前端设计语言和基于React的实现

1,660 lines (1,290 loc) 265 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof define === 'function' && define.amd) define(["react", "react-dom"], factory); else if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("react"), require("react-dom")); else if(typeof exports === 'object') exports["zent-popover"] = factory(require("react"), require("react-dom")); else root["zent-popover"] = factory(root["React"], root["ReactDOM"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_3__, __WEBPACK_EXTERNAL_MODULE_4__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) /******/ return installedModules[moduleId].exports; /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = true; /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { module.exports = __webpack_require__(1); /***/ }, /* 1 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _Popover = __webpack_require__(2); var _Popover2 = _interopRequireDefault(_Popover); var _withPopover = __webpack_require__(188); var _withPopover2 = _interopRequireDefault(_withPopover); var _trigger = __webpack_require__(189); var _trigger2 = _interopRequireDefault(_trigger); var _Content = __webpack_require__(30); var _Content2 = _interopRequireDefault(_Content); var _placement = __webpack_require__(213); var _placement2 = _interopRequireDefault(_placement); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } _Popover2['default'].Content = _Content2['default']; _Popover2['default'].Trigger = _trigger2['default']; _Popover2['default'].Position = _placement2['default']; _Popover2['default'].withPopover = _withPopover2['default']; exports['default'] = _Popover2['default']; module.exports = exports['default']; /***/ }, /* 2 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = exports.PopoverContextType = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _class, _temp, _initialiseProps; /** * 设计: * * Popover组件只是一个壳子,负责组装Trigger和Content。 * * 弹层实际的打开/关闭都是Content完成的,而什么情况打开弹层是Trigger控制的。 */ var _react = __webpack_require__(3); var _react2 = _interopRequireDefault(_react); var _reactDom = __webpack_require__(4); var _reactDom2 = _interopRequireDefault(_reactDom); var _classnames = __webpack_require__(5); var _classnames2 = _interopRequireDefault(_classnames); var _noop = __webpack_require__(8); var _noop2 = _interopRequireDefault(_noop); var _uniqueId = __webpack_require__(10); var _uniqueId2 = _interopRequireDefault(_uniqueId); var _isFunction = __webpack_require__(24); var _isFunction2 = _interopRequireDefault(_isFunction); var _isBoolean = __webpack_require__(27); var _isBoolean2 = _interopRequireDefault(_isBoolean); var _isPromise = __webpack_require__(29); var _isPromise2 = _interopRequireDefault(_isPromise); var _Content = __webpack_require__(30); var _Content2 = _interopRequireDefault(_Content); var _Trigger = __webpack_require__(187); var _Trigger2 = _interopRequireDefault(_Trigger); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var SKIPPED = function SKIPPED() {}; function instanceOf(MaybeDerive, Base) { return MaybeDerive === Base || MaybeDerive.prototype instanceof Base; } function handleBeforeHook(beforeFn, arity, continuation) { // 有参数,传入continuation,由外部去控制何时调用 if (arity >= 1) { return beforeFn(continuation); } // 无参数,如果返回Promise那么resolve后调用continuation;如果返回不是Promise,直接调用Promise var mayBePromise = beforeFn(); if (!(0, _isPromise2['default'])(mayBePromise) && mayBePromise !== SKIPPED) { return continuation(); } mayBePromise.then(continuation); } var PopoverContextType = exports.PopoverContextType = { popover: _react.PropTypes.shape({ close: _react.PropTypes.func.isRequired, open: _react.PropTypes.func.isRequired, getContentNode: _react.PropTypes.func.isRequired, getTriggerNode: _react.PropTypes.func.isRequired }) }; var Popover = (_temp = _class = function (_Component) { _inherits(Popover, _Component); _createClass(Popover, [{ key: 'getChildContext', value: function getChildContext() { return { popover: { close: this.close, open: this.open, getContentNode: this.getPopoverNode, getTriggerNode: this.getTriggerNode } }; } }]); function Popover(props) { _classCallCheck(this, Popover); // id用来唯一标识popover实例 var _this = _possibleConstructorReturn(this, (Popover.__proto__ || Object.getPrototypeOf(Popover)).call(this, props)); _initialiseProps.call(_this); _this.id = (0, _uniqueId2['default'])(props.prefix + '-popover-internal-id-'); if (!_this.isVisibilityControlled(props)) { _this.state = { visible: false }; } return _this; } _createClass(Popover, [{ key: 'isVisibilityControlled', value: function isVisibilityControlled(props) { var _ref = props || this.props, visible = _ref.visible, onVisibleChange = _ref.onVisibleChange; var hasOnChange = (0, _isFunction2['default'])(onVisibleChange); var hasVisible = (0, _isBoolean2['default'])(visible); if (hasVisible && !hasOnChange || hasOnChange && !hasVisible) { throw new Error('visible and onVisibleChange must be used together'); } return hasVisible && hasOnChange; } }, { key: 'validateChildren', value: function validateChildren() { var children = this.props.children; var childArray = _react.Children.toArray(children); if (childArray.length !== 2) { throw new Error('There must be one and only one trigger and content in Popover'); } var _childArray$reduce = childArray.reduce(function (state, c) { var type = c.type; if (instanceOf(type, _Trigger2['default'])) { state.trigger = c; } else if (instanceOf(type, _Content2['default'])) { state.content = c; } return state; }, { trigger: null, content: null }), trigger = _childArray$reduce.trigger, content = _childArray$reduce.content; if (!trigger) { throw new Error('Missing trigger in Popover'); } if (!content) { throw new Error('Missing content in Popover'); } return { trigger: trigger, content: content }; } }, { key: 'componentDidMount', value: function componentDidMount() { if (this.isVisibilityControlled() && this.props.visible) { this.props.onShow(); } } }, { key: 'componentDidUpdate', value: function componentDidUpdate(prevProps, prevState) { var visible = this.getVisible(); if (visible !== this.getVisible(prevProps, prevState)) { var afterHook = visible ? this.props.onShow : this.props.onClose; afterHook(); } } }, { key: 'render', value: function render() { var _validateChildren = this.validateChildren(), trigger = _validateChildren.trigger, content = _validateChildren.content; var _props = this.props, display = _props.display, prefix = _props.prefix, className = _props.className, wrapperClassName = _props.wrapperClassName, containerSelector = _props.containerSelector, position = _props.position, cushion = _props.cushion; var visible = this.getVisible(); return _react2['default'].createElement( 'div', { style: { display: display }, className: (0, _classnames2['default'])(prefix + '-popover-wrapper', wrapperClassName) }, _react2['default'].cloneElement(trigger, { prefix: prefix, contentVisible: visible, onTriggerRefChange: this.onTriggerRefChange, getTriggerNode: this.getTriggerNode, getContentNode: this.getPopoverNode, open: this.open, close: this.close }), _react2['default'].cloneElement(content, { prefix: prefix, className: className, id: this.id, getContentNode: this.getPopoverNode, getAnchor: this.getTriggerNode, visible: visible, cushion: cushion, containerSelector: containerSelector, placement: position }) ); } }]); return Popover; }(_react.Component), _class.propTypes = { prefix: _react.PropTypes.string, className: _react.PropTypes.string, // custom classname for trigger wrapper wrapperClassName: _react.PropTypes.string, // container的display属性 display: _react.PropTypes.string, // position strategy position: _react.PropTypes.func.isRequired, // 定位时的偏移量 cushion: _react.PropTypes.number, // 只有用户触发的打开/关闭才会触发这两个毁掉 onBeforeClose: _react.PropTypes.func, onBeforeShow: _react.PropTypes.func, // 不管打开/关闭时如何触发的都会被调用 onClose: _react.PropTypes.func, onShow: _react.PropTypes.func, // defaults to body containerSelector: _react.PropTypes.string, children: _react.PropTypes.node.isRequired, // 两个必须一起出现 visible: _react.PropTypes.bool, onVisibleChange: _react.PropTypes.func }, _class.defaultProps = { prefix: 'zent', className: '', wrapperClassName: '', display: 'block', onBeforeClose: _noop2['default'], onBeforeShow: _noop2['default'], onClose: _noop2['default'], onShow: _noop2['default'], cushion: 0, containerSelector: 'body' }, _class.childContextTypes = PopoverContextType, _initialiseProps = function _initialiseProps() { var _this2 = this; this.getVisible = function (props, state) { if (_this2.isVisibilityControlled(props)) { props = props || _this2.props; return props.visible; } state = state || _this2.state; return state.visible; }; this.setVisible = function (visible, props, state) { props = props || _this2.props; state = state || _this2.state; var beforeHook = visible ? props.onBeforeShow : props.onBeforeClose; var onBefore = function onBefore() { // 确保pending的时候不会触发多次beforeHook if (_this2.pendingOnBeforeHook) { return SKIPPED; } _this2.pendingOnBeforeHook = true; return beforeHook.apply(undefined, arguments); }; if (_this2.isVisibilityControlled(props)) { if (_this2.pendingOnBeforeHook || props.visible === visible) { return; } handleBeforeHook(onBefore, beforeHook.length, function () { props.onVisibleChange(visible); _this2.pendingOnBeforeHook = false; }); } else { if (_this2.pendingOnBeforeHook || state.visible === visible) { return; } handleBeforeHook(onBefore, beforeHook.length, function () { _this2.setState({ visible: visible }); _this2.pendingOnBeforeHook = false; }); } }; this.getPopoverNode = function () { return document.querySelector('.' + _this2.id); }; this.onTriggerRefChange = function (triggerInstance) { _this2.triggerNode = _reactDom2['default'].findDOMNode(triggerInstance); }; this.getTriggerNode = function () { return _this2.triggerNode; }; this.open = function () { _this2.setVisible(true); }; this.close = function () { _this2.setVisible(false); }; }, _temp); exports['default'] = Popover; /***/ }, /* 3 */ /***/ function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_3__; /***/ }, /* 4 */ /***/ function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_4__; /***/ }, /* 5 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _classnames = __webpack_require__(6); Object.defineProperty(exports, 'default', { enumerable: true, get: function get() { return _interopRequireDefault(_classnames)['default']; } }); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } module.exports = exports['default']; /***/ }, /* 6 */ /***/ function(module, exports, __webpack_require__) { var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /*! Copyright (c) 2016 Jed Watson. Licensed under the MIT License (MIT), see http://jedwatson.github.io/classnames */ /* global define */ (function () { 'use strict'; var hasOwn = {}.hasOwnProperty; function classNames() { var classes = []; for (var i = 0; i < arguments.length; i++) { var arg = arguments[i]; if (!arg) continue; var argType = typeof arg === 'undefined' ? 'undefined' : _typeof(arg); if (argType === 'string' || argType === 'number') { classes.push(arg); } else if (Array.isArray(arg)) { classes.push(classNames.apply(null, arg)); } else if (argType === 'object') { for (var key in arg) { if (hasOwn.call(arg, key) && arg[key]) { classes.push(key); } } } } return classes.join(' '); } if (typeof module !== 'undefined' && module.exports) { module.exports = classNames; } else if ("function" === 'function' && _typeof(__webpack_require__(7)) === 'object' && __webpack_require__(7)) { // register as 'classnames', consistent with npm package name !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = function () { return classNames; }.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__), __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); } else { window.classNames = classNames; } })(); /***/ }, /* 7 */ /***/ function(module, exports) { /* WEBPACK VAR INJECTION */(function(__webpack_amd_options__) {module.exports = __webpack_amd_options__; /* WEBPACK VAR INJECTION */}.call(exports, {})) /***/ }, /* 8 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; /* DO NOT EDIT!! Auto genetated wrapper for lodash/noop. */ var noop = __webpack_require__(9); module.exports = noop; /***/ }, /* 9 */ /***/ function(module, exports) { "use strict"; /** * This method returns `undefined`. * * @static * @memberOf _ * @since 2.3.0 * @category Util * @example * * _.times(2, _.noop); * // => [undefined, undefined] */ function noop() { // No operation performed. } module.exports = noop; /***/ }, /* 10 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; /* DO NOT EDIT!! Auto genetated wrapper for lodash/uniqueId. */ var uniqueId = __webpack_require__(11); module.exports = uniqueId; /***/ }, /* 11 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var toString = __webpack_require__(12); /** Used to generate unique IDs. */ var idCounter = 0; /** * Generates a unique ID. If `prefix` is given, the ID is appended to it. * * @static * @since 0.1.0 * @memberOf _ * @category Util * @param {string} [prefix=''] The value to prefix the ID with. * @returns {string} Returns the unique ID. * @example * * _.uniqueId('contact_'); * // => 'contact_104' * * _.uniqueId(); * // => '105' */ function uniqueId(prefix) { var id = ++idCounter; return toString(prefix) + id; } module.exports = uniqueId; /***/ }, /* 12 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var baseToString = __webpack_require__(13); /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to convert. * @returns {string} Returns the converted string. * @example * * _.toString(null); * // => '' * * _.toString(-0); * // => '-0' * * _.toString([1, 2, 3]); * // => '1,2,3' */ function toString(value) { return value == null ? '' : baseToString(value); } module.exports = toString; /***/ }, /* 13 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _Symbol = __webpack_require__(14), arrayMap = __webpack_require__(17), isArray = __webpack_require__(18), isSymbol = __webpack_require__(19); /** Used as references for various `Number` constants. */ var INFINITY = 1 / 0; /** Used to convert symbols to primitives and strings. */ var symbolProto = _Symbol ? _Symbol.prototype : undefined, symbolToString = symbolProto ? symbolProto.toString : undefined; /** * The base implementation of `_.toString` which doesn't convert nullish * values to empty strings. * * @private * @param {*} value The value to process. * @returns {string} Returns the string. */ function baseToString(value) { // Exit early for strings to avoid a performance hit in some environments. if (typeof value == 'string') { return value; } if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return arrayMap(value, baseToString) + ''; } if (isSymbol(value)) { return symbolToString ? symbolToString.call(value) : ''; } var result = value + ''; return result == '0' && 1 / value == -INFINITY ? '-0' : result; } module.exports = baseToString; /***/ }, /* 14 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var root = __webpack_require__(15); /** Built-in value references. */ var _Symbol = root.Symbol; module.exports = _Symbol; /***/ }, /* 15 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var freeGlobal = __webpack_require__(16); /** Detect free variable `self`. */ var freeSelf = (typeof self === 'undefined' ? 'undefined' : _typeof(self)) == 'object' && self && self.Object === Object && self; /** Used as a reference to the global object. */ var root = freeGlobal || freeSelf || Function('return this')(); module.exports = root; /***/ }, /* 16 */ /***/ function(module, exports) { /* WEBPACK VAR INJECTION */(function(global) {'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /** Detect free variable `global` from Node.js. */ var freeGlobal = (typeof global === 'undefined' ? 'undefined' : _typeof(global)) == 'object' && global && global.Object === Object && global; module.exports = freeGlobal; /* WEBPACK VAR INJECTION */}.call(exports, (function() { return this; }()))) /***/ }, /* 17 */ /***/ function(module, exports) { "use strict"; /** * A specialized version of `_.map` for arrays without support for iteratee * shorthands. * * @private * @param {Array} [array] The array to iterate over. * @param {Function} iteratee The function invoked per iteration. * @returns {Array} Returns the new mapped array. */ function arrayMap(array, iteratee) { var index = -1, length = array == null ? 0 : array.length, result = Array(length); while (++index < length) { result[index] = iteratee(array[index], index, array); } return result; } module.exports = arrayMap; /***/ }, /* 18 */ /***/ function(module, exports) { "use strict"; /** * Checks if `value` is classified as an `Array` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an array, else `false`. * @example * * _.isArray([1, 2, 3]); * // => true * * _.isArray(document.body.children); * // => false * * _.isArray('abc'); * // => false * * _.isArray(_.noop); * // => false */ var isArray = Array.isArray; module.exports = isArray; /***/ }, /* 19 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var baseGetTag = __webpack_require__(20), isObjectLike = __webpack_require__(23); /** `Object#toString` result references. */ var symbolTag = '[object Symbol]'; /** * Checks if `value` is classified as a `Symbol` primitive or object. * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a symbol, else `false`. * @example * * _.isSymbol(Symbol.iterator); * // => true * * _.isSymbol('abc'); * // => false */ function isSymbol(value) { return (typeof value === 'undefined' ? 'undefined' : _typeof(value)) == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag; } module.exports = isSymbol; /***/ }, /* 20 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _Symbol = __webpack_require__(14), getRawTag = __webpack_require__(21), objectToString = __webpack_require__(22); /** `Object#toString` result references. */ var nullTag = '[object Null]', undefinedTag = '[object Undefined]'; /** Built-in value references. */ var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @private * @param {*} value The value to query. * @returns {string} Returns the `toStringTag`. */ function baseGetTag(value) { if (value == null) { return value === undefined ? undefinedTag : nullTag; } return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); } module.exports = baseGetTag; /***/ }, /* 21 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _Symbol = __webpack_require__(14); /** Used for built-in method references. */ var objectProto = Object.prototype; /** Used to check objects for own properties. */ var hasOwnProperty = objectProto.hasOwnProperty; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** Built-in value references. */ var symToStringTag = _Symbol ? _Symbol.toStringTag : undefined; /** * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values. * * @private * @param {*} value The value to query. * @returns {string} Returns the raw `toStringTag`. */ function getRawTag(value) { var isOwn = hasOwnProperty.call(value, symToStringTag), tag = value[symToStringTag]; try { value[symToStringTag] = undefined; var unmasked = true; } catch (e) {} var result = nativeObjectToString.call(value); if (unmasked) { if (isOwn) { value[symToStringTag] = tag; } else { delete value[symToStringTag]; } } return result; } module.exports = getRawTag; /***/ }, /* 22 */ /***/ function(module, exports) { "use strict"; /** Used for built-in method references. */ var objectProto = Object.prototype; /** * Used to resolve the * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring) * of values. */ var nativeObjectToString = objectProto.toString; /** * Converts `value` to a string using `Object.prototype.toString`. * * @private * @param {*} value The value to convert. * @returns {string} Returns the converted string. */ function objectToString(value) { return nativeObjectToString.call(value); } module.exports = objectToString; /***/ }, /* 23 */ /***/ function(module, exports) { 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /** * Checks if `value` is object-like. A value is object-like if it's not `null` * and has a `typeof` result of "object". * * @static * @memberOf _ * @since 4.0.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is object-like, else `false`. * @example * * _.isObjectLike({}); * // => true * * _.isObjectLike([1, 2, 3]); * // => true * * _.isObjectLike(_.noop); * // => false * * _.isObjectLike(null); * // => false */ function isObjectLike(value) { return value != null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) == 'object'; } module.exports = isObjectLike; /***/ }, /* 24 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; /* DO NOT EDIT!! Auto genetated wrapper for lodash/isFunction. */ var isFunction = __webpack_require__(25); module.exports = isFunction; /***/ }, /* 25 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var baseGetTag = __webpack_require__(20), isObject = __webpack_require__(26); /** `Object#toString` result references. */ var asyncTag = '[object AsyncFunction]', funcTag = '[object Function]', genTag = '[object GeneratorFunction]', proxyTag = '[object Proxy]'; /** * Checks if `value` is classified as a `Function` object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a function, else `false`. * @example * * _.isFunction(_); * // => true * * _.isFunction(/abc/); * // => false */ function isFunction(value) { if (!isObject(value)) { return false; } // The use of `Object#toString` avoids issues with the `typeof` operator // in Safari 9 which returns 'object' for typed arrays and other constructors. var tag = baseGetTag(value); return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; } module.exports = isFunction; /***/ }, /* 26 */ /***/ function(module, exports) { 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; /** * Checks if `value` is the * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is an object, else `false`. * @example * * _.isObject({}); * // => true * * _.isObject([1, 2, 3]); * // => true * * _.isObject(_.noop); * // => true * * _.isObject(null); * // => false */ function isObject(value) { var type = typeof value === 'undefined' ? 'undefined' : _typeof(value); return value != null && (type == 'object' || type == 'function'); } module.exports = isObject; /***/ }, /* 27 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; /* DO NOT EDIT!! Auto genetated wrapper for lodash/isBoolean. */ var isBoolean = __webpack_require__(28); module.exports = isBoolean; /***/ }, /* 28 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var baseGetTag = __webpack_require__(20), isObjectLike = __webpack_require__(23); /** `Object#toString` result references. */ var boolTag = '[object Boolean]'; /** * Checks if `value` is classified as a boolean primitive or object. * * @static * @memberOf _ * @since 0.1.0 * @category Lang * @param {*} value The value to check. * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. * @example * * _.isBoolean(false); * // => true * * _.isBoolean(null); * // => false */ function isBoolean(value) { return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag; } module.exports = isBoolean; /***/ }, /* 29 */ /***/ function(module, exports) { 'use strict'; var _typeof2 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && _typeof2(Symbol.iterator) === "symbol" ? function (obj) { return typeof obj === "undefined" ? "undefined" : _typeof2(obj); } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof2(obj); }; exports['default'] = isPromise; /** * Test whether an object looks like a promise * * @export * @param {any} obj * @returns {bool} */ function isPromise(obj) { return !!obj && ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' || typeof obj === 'function') && typeof obj.then === 'function'; } module.exports = exports['default']; /***/ }, /* 30 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _class, _temp2; var _react = __webpack_require__(3); var _react2 = _interopRequireDefault(_react); var _classnames = __webpack_require__(5); var _classnames2 = _interopRequireDefault(_classnames); var _zentPortal = __webpack_require__(31); var _zentPortal2 = _interopRequireDefault(_zentPortal); var _WindowResizeHandler = __webpack_require__(176); var _WindowResizeHandler2 = _interopRequireDefault(_WindowResizeHandler); var _findPositionedParent = __webpack_require__(179); var _findPositionedParent2 = _interopRequireDefault(_findPositionedParent); var _throttle = __webpack_require__(180); var _throttle2 = _interopRequireDefault(_throttle); var _invisible = __webpack_require__(185); var _invisible2 = _interopRequireDefault(_invisible); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } function translateToContainerCoordinates(containerBB, bb) { var left = containerBB.left, top = containerBB.top; return { width: bb.width, height: bb.height, top: bb.top - top, left: bb.left - left, bottom: bb.bottom - top, right: bb.right - left }; } /** * Like triggers, content can be replaced with your own implementation, all you have to do is extend this base class. * * The props on this class are all private. */ var PopoverContent = (_temp2 = _class = function (_Component) { _inherits(PopoverContent, _Component); function PopoverContent() { var _ref; var _temp, _this, _ret; _classCallCheck(this, PopoverContent); for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { args[_key] = arguments[_key]; } return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref = PopoverContent.__proto__ || Object.getPrototypeOf(PopoverContent)).call.apply(_ref, [this].concat(args))), _this), _this.state = { position: null }, _this.adjustPosition = function () { var content = _this.props.getContentNode(); // 可能还未渲染出来,先放到一个不可见的位置 if (!content) { _this.setState({ position: (0, _invisible2['default'])(_this.props.prefix) }); setTimeout(_this.adjustPosition, 0); return; } var anchor = _this.getAnchor(); var boundingBox = anchor.getBoundingClientRect(); var parent = _this.getPositionedParent(); var parentBoundingBox = parent.getBoundingClientRect(); var contentBoundingBox = content.getBoundingClientRect(); var relativeBB = translateToContainerCoordinates(parentBoundingBox, boundingBox); var relativeContainerBB = translateToContainerCoordinates(parentBoundingBox, parentBoundingBox); var position = _this.props.placement(_this.props.prefix, relativeBB, relativeContainerBB, { width: contentBoundingBox.width, height: contentBoundingBox.height }, { cushion: _this.props.cushion }); _this.setState({ position: position }); }, _this.onWindowResize = (0, _throttle2['default'])(function (evt, delta) { if (_this.props.visible && (delta.deltaX !== 0 || delta.deltaY !== 0)) { _this.adjustPosition(); } }, 16), _temp), _possibleConstructorReturn(_this, _ret); } _createClass(PopoverContent, [{ key: 'getAnchor', value: function getAnchor() { return this.props.getAnchor(); } }, { key: 'getPositionedParent', value: function getPositionedParent() { // findPositionedParent returns null on fail if (this.positionedParent !== undefined) { return this.positionedParent; } var containerSelector = this.props.containerSelector; var container = document.querySelector(containerSelector); var parent = (0, _findPositionedParent2['default'])(container, true); this.positionedParent = parent; return parent; } }, { key: 'componentDidMount', value: function componentDidMount() { var visible = this.props.visible; if (visible) { this.adjustPosition(); } } }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { if (nextProps.visible && nextProps.visible !== this.props.visible) { this.adjustPosition(); } } }, { key: 'render', value: function render() { var _props = this.props, prefix = _props.prefix, className = _props.className, id = _props.id, visible = _props.visible, children = _props.children, containerSelector = _props.containerSelector; var position = this.state.position; if (!position) { return null; } var cls = (0, _classnames2['default'])(className, prefix + '-popover', id, position.toString()); return _react2['default'].createElement( _zentPortal2['default'], { prefix: prefix, visible: visible, selector: containerSelector, className: cls, css: position.getCSSStyle() }, _react2['default'].createElement( 'div', { className: prefix + '-popover-content' }, children, _react2['default'].createElement(_WindowResizeHandler2['default'], { onResize: this.onWindowResize }) ) ); } }]); return PopoverContent; }(_react.Component), _class.propTypes = { children: _react.PropTypes.node, prefix: _react.PropTypes.string, id: _react.PropTypes.string, getContentNode: _react.PropTypes.func, visible: _react.PropTypes.bool, // placement strategy placement: _react.PropTypes.func, cushion: _react.PropTypes.number, // A function that returns the anchor for this popover // () => Node getAnchor: _react.PropTypes.func, // defaults to body containerSelector: _react.PropTypes.string }, _temp2); exports['default'] = PopoverContent; module.exports = exports['default']; /***/ }, /* 31 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _ClosablePortal = __webpack_require__(32); var _ClosablePortal2 = _interopRequireDefault(_ClosablePortal); var _withESCToClose = __webpack_require__(116); var _withESCToClose2 = _interopRequireDefault(_withESCToClose); var _withNonScrollable = __webpack_require__(175); var _withNonScrollable2 = _interopRequireDefault(_withNonScrollable); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } _ClosablePortal2['default'].withESCToClose = _withESCToClose2['default']; _ClosablePortal2['default'].withNonScrollable = _withNonScrollable2['default']; exports['default'] = _ClosablePortal2['default']; module.exports = exports['default']; /***/ }, /* 32 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor); } }return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor; }; }(); var _class, _temp; var _react = __webpack_require__(3); var _react2 = _interopRequireDefault(_react); var _Portal = __webpack_require__(33); var _Portal2 = _interopRequireDefault(_Portal); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _objectWithoutProperties(obj, keys) { var target = {};for (var i in obj) { if (keys.indexOf(i) >= 0) continue;if (!Object.prototype.hasOwnProperty.call(obj, i)) continue;target[i] = obj[i]; }return target; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof(call)) === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === 'undefined' ? 'undefined' : _typeof(superClass))); }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } // visible的逻辑放在Portal里实现会比较烦,因为没法利用React的update机制。 var ClosablePortal = (_temp = _class = function (_Component) { _inherits(ClosablePortal, _Component); function ClosablePortal() { _classCallCheck(this, ClosablePortal); return _possibleConstructorReturn(this, (ClosablePortal.__proto__ || Object.getPrototypeOf(ClosablePortal)).apply(this, arguments)); } _createClass(ClosablePortal, [{ key: 'render', value: function render() { var _props = this.props, visible = _props.visible, portalProps = _objectWithoutProperties(_props, ['visible']); return visible && _react2['default'].createElement(_Portal2['default'], portalProps); } }]); return ClosablePortal; }(_react.Component), _class.propTypes = { visible: _react.PropTypes.bool }, _class.defaultProps = { visible: true }, _temp); exports['default'] = ClosablePortal; module.exports = exports['default']; /***/ }, /* 33 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; Object.defineProperty(exports, "__esModule", { value: true }); exports['default'] = undefined; var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor); } }return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor; }; }(); var _class, _temp; var _react = __webpack_require__(3); var _isEqual = __webpack_require__(34); var _isEqual2 = _interopRequireDefault(_isEqual); var _util = __webpack_require__(115); var util = _interopRequireWildcard(_util); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {};if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } }newObj['default'] = obj;return newObj; } } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); }return call && ((typeof call === 'undefined' ? 'undefined' : _typeof(call)) === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === 'undefined' ? 'undefined' : _typeof(superClass))); }subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** Portal的核心,只负责管理child。index.js实际export的不是这个component. **/ var Portal = (_temp = _class = function (_Component) { _inherits(Portal, _Component); function Portal() { _classCallCheck(this, Portal); return _possibleConstructorReturn(this, (Portal.__proto__ || Object.getPrototypeOf(Portal)).apply(this, arguments)); } _createClass(Portal, [{ key: 'componentDidMount', // openPortal和closePortal之所以不暴露出去是因为这两个API的调用容易出BUG,有操作是异步的。 value: function componentDidMount() { util.openPortal.call(this); } }, { key: 'componentWillUnmount', value: function componentWillUnmount() { util.destroyPortal.call(this); } }, { key: 'componentDidUpdate', value: function componentDidUpdate() { var _this2 = this; if (this.pendingDestroy) { // destroyPortal是异步的(原因看destroyPortal的代码),所以用callback的形式调用openPortal util.destroyPortal.call(this, function () { _this2.pendingDestroy = false; util.openPortal.call(_this2); }); } else { util.openPortal.call(this); } } }, { key: 'componentWillReceiveProps', value: function componentWillReceiveProps(nextProps) { // 如果selector变了的话,删除再重新打开 var selector = this.props.selector; if (selector !== nextProps.selector) { // 真正的工作是在componentDidUpdate里做的 this.pendingDestroy = true; return; } // 如果children变了,直接重新render, react会判断是否有更新(即使这个是root节点)。 // 这个也是在componentDidUpdate里做的。 // 其它情况仅更新样式 var _props = this.props, className = _props.className, prefix = _props.prefix, css = _props.css; if (className !== nextProps.cla