UNPKG

adui

Version:

<div> <img src="https://wxa.wxs.qq.com/mpweb/delivery/legacy/wxadtouch/upload/t1/od834zef_52939fc6.png" style="margin:40px 0 0 -8px; background-color: #fcfcfc; box-shadow: none;" /> </div>

221 lines (220 loc) 37.5 kB
"use strict"; 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); } Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var _react = _interopRequireWildcard(require("react")); var ReactDOM = _interopRequireWildcard(require("react-dom")); var _propTypes = _interopRequireDefault(require("prop-types")); var _classnames = _interopRequireDefault(require("classnames")); var _button = _interopRequireDefault(require("../button")); var _icon = _interopRequireDefault(require("../icon")); var _iconIntents = _interopRequireDefault(require("../alert/iconIntents")); require("./style"); var _excluded = ["action", "className", "closable", "content", "duration", "getContainer", "icon", "intent", "onClose"], _excluded2 = ["onClose", "getContainer", "intent"]; 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 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 _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 _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); } function _objectWithoutProperties(e, t) { if (null == e) return {}; var o, r, i = _objectWithoutPropertiesLoose(e, t); if (Object.getOwnPropertySymbols) { var s = Object.getOwnPropertySymbols(e); for (r = 0; r < s.length; r++) o = s[r], t.includes(o) || {}.propertyIsEnumerable.call(e, o) && (i[o] = e[o]); } return i; } function _objectWithoutPropertiesLoose(r, e) { if (null == r) return {}; var t = {}; for (var n in r) if ({}.hasOwnProperty.call(r, n)) { if (e.includes(n)) continue; t[n] = r[n]; } return t; } var prefix = "adui-message"; var INTENTS = ["normal", "primary", "success", "warning", "danger"]; var Message = (0, _react.forwardRef)(function (_ref, ref) { var action = _ref.action, className = _ref.className, closable = _ref.closable, content = _ref.content, duration = _ref.duration, getContainer = _ref.getContainer, icon = _ref.icon, intent = _ref.intent, onClose = _ref.onClose, otherProps = _objectWithoutProperties(_ref, _excluded); var messageRef = (0, _react.useRef)(null); var timer; var clearCloseTimer = function clearCloseTimer() { if (timer) { clearTimeout(timer); timer = null; } }; var close = function close() { if (messageRef && messageRef.current) { messageRef.current.style.opacity = "0"; messageRef.current.style.visibility = "hidden"; messageRef.current.style.transform = "translate3d(-50%, -56px, 0)"; messageRef.current.style.transition = "all var(--adui-motion-duration-base) var(--adui-motion-ease-base)"; } clearCloseTimer(); if (onClose) { onClose(); } }; var setCloseTimer = function setCloseTimer() { if (duration) { timer = setTimeout(function () { close(); }, duration * 1000); } }; (0, _react.useEffect)(function () { setCloseTimer(); return clearCloseTimer; }, []); (0, _react.useImperativeHandle)(ref, function () { return { close: close, getDomNode: function getDomNode() { return messageRef.current; } }; }); var hasActions = action || closable; return _react["default"].createElement("div", _extends({ className: (0, _classnames["default"])(className, "".concat(prefix, "-base"), "".concat(prefix, "-").concat(intent), _defineProperty({}, "".concat(prefix, "-hasActions"), hasActions)), onMouseEnter: clearCloseTimer, onMouseLeave: setCloseTimer, ref: messageRef, "data-duration": duration }, otherProps), _react["default"].createElement(_icon["default"], { icon: icon || _iconIntents["default"][intent], size: 20, className: "".concat(prefix, "-icon") }), _react["default"].createElement("div", { className: "".concat(prefix, "-content") }, content), hasActions && _react["default"].createElement("div", { className: "".concat(prefix, "-actions") }, action && _react["default"].createElement("div", { className: "".concat(prefix, "-action") }, _react["default"].createElement(_button["default"], { theme: "light", onClick: function onClick() { var onClick = action.onClick; if (onClick) { onClick(); } } }, action.text)), closable && _react["default"].createElement(_button["default"], { leftIcon: "cancel", theme: "light", onClick: close }))); }); Message.displayName = "Message"; Message.propTypes = { action: _propTypes["default"].any, className: _propTypes["default"].string, closable: _propTypes["default"].bool, content: _propTypes["default"].node, duration: _propTypes["default"].number, getContainer: _propTypes["default"].func, icon: _propTypes["default"].any, intent: _propTypes["default"].any, onClose: _propTypes["default"].func }; Message.defaultProps = { action: null, className: undefined, closable: false, content: null, duration: 2, getContainer: undefined, icon: undefined, intent: "normal", onClose: null }; var newInstance = function newInstance(props) { var instances = Array.from(document.getElementsByClassName("".concat(prefix, "-wrapper"))); instances = instances.filter(function (o) { return o.dataset.close !== "true"; }); if (instances && instances.length > 2) { var firstInstance = instances[0]; var firstChild = firstInstance.children[0]; if (firstChild.dataset.duration !== "0") { firstInstance.dataset.close = "true"; firstInstance.style.transform = "translate3d(0, -56px, 0)"; firstChild.style.opacity = "0"; firstChild.style.visibility = "hidden"; firstInstance.style.transition = "all var(--adui-motion-duration-base) var(--adui-motion-ease-base)"; firstChild.style.transition = "all var(--adui-motion-duration-base) var(--adui-motion-ease-base)"; } } var instance; var onClose = props.onClose, getContainer = props.getContainer, intent = props.intent, otherProps = _objectWithoutProperties(props, _excluded2); var container = document.createElement("div"); container.className = "".concat(prefix, "-wrapper"); container.dataset.intent = intent; if (getContainer) { getContainer().appendChild(container); } else { document.body.appendChild(container); } var updateStyles = function updateStyles() { setTimeout(function () { var messages = Array.from(document.getElementsByClassName("".concat(prefix, "-wrapper"))); messages.forEach(function (message, index) { message.style.opacity = "1"; message.style.transform = "translate3d(0, ".concat(56 * (messages.length - 1 - index), "px, 0)"); }); }, 50); }; updateStyles(); var close = function close() { if (onClose) { onClose(); } setTimeout(function () { var unmountResult = ReactDOM.unmountComponentAtNode(container); if (unmountResult && container.parentNode) { container.parentNode.removeChild(container); updateStyles(); } }, 300); }; ReactDOM.render(_react["default"].createElement(Message, _extends({ ref: function ref(message) { instance = message; }, onClose: close, intent: intent }, otherProps)), container); return { destroy: function destroy() { if (instance) { instance.close(); } } }; }; INTENTS.forEach(function (intent) { Message[intent] = function (config) { var cnfg = { intent: intent }; if (typeof config === "string") { cnfg = { content: config, intent: intent }; } else { cnfg = config; } return newInstance(_objectSpread(_objectSpread({}, cnfg), {}, { intent: intent })); }; }); var _default = exports["default"] = Message; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJSZWFjdERPTSIsIl9wcm9wVHlwZXMiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2NsYXNzbmFtZXMiLCJfYnV0dG9uIiwiX2ljb24iLCJfaWNvbkludGVudHMiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiZSIsIl9fZXNNb2R1bGUiLCJfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUiLCJXZWFrTWFwIiwiciIsInQiLCJfdHlwZW9mIiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0Iiwib3duS2V5cyIsImtleXMiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJvIiwiZmlsdGVyIiwiZW51bWVyYWJsZSIsInB1c2giLCJhcHBseSIsIl9vYmplY3RTcHJlYWQiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJmb3JFYWNoIiwiX2RlZmluZVByb3BlcnR5IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJfZXh0ZW5kcyIsImFzc2lnbiIsImJpbmQiLCJfdG9Qcm9wZXJ0eUtleSIsInZhbHVlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJfdG9QcmltaXRpdmUiLCJTeW1ib2wiLCJ0b1ByaW1pdGl2ZSIsIlR5cGVFcnJvciIsIlN0cmluZyIsIk51bWJlciIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllcyIsIl9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIiwicyIsImluY2x1ZGVzIiwicHJvcGVydHlJc0VudW1lcmFibGUiLCJwcmVmaXgiLCJJTlRFTlRTIiwiTWVzc2FnZSIsImZvcndhcmRSZWYiLCJfcmVmIiwicmVmIiwiYWN0aW9uIiwiY2xhc3NOYW1lIiwiY2xvc2FibGUiLCJjb250ZW50IiwiZHVyYXRpb24iLCJnZXRDb250YWluZXIiLCJpY29uIiwiaW50ZW50Iiwib25DbG9zZSIsIm90aGVyUHJvcHMiLCJtZXNzYWdlUmVmIiwidXNlUmVmIiwidGltZXIiLCJjbGVhckNsb3NlVGltZXIiLCJjbGVhclRpbWVvdXQiLCJjbG9zZSIsImN1cnJlbnQiLCJzdHlsZSIsIm9wYWNpdHkiLCJ2aXNpYmlsaXR5IiwidHJhbnNmb3JtIiwidHJhbnNpdGlvbiIsInNldENsb3NlVGltZXIiLCJzZXRUaW1lb3V0IiwidXNlRWZmZWN0IiwidXNlSW1wZXJhdGl2ZUhhbmRsZSIsImdldERvbU5vZGUiLCJoYXNBY3Rpb25zIiwiY3JlYXRlRWxlbWVudCIsImNsYXNzTmFtZXMiLCJjb25jYXQiLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJJQ09OX0lOVEVOVFMiLCJzaXplIiwidGhlbWUiLCJvbkNsaWNrIiwidGV4dCIsImxlZnRJY29uIiwiZGlzcGxheU5hbWUiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJhbnkiLCJzdHJpbmciLCJib29sIiwibm9kZSIsIm51bWJlciIsImZ1bmMiLCJkZWZhdWx0UHJvcHMiLCJ1bmRlZmluZWQiLCJuZXdJbnN0YW5jZSIsInByb3BzIiwiaW5zdGFuY2VzIiwiQXJyYXkiLCJmcm9tIiwiZG9jdW1lbnQiLCJnZXRFbGVtZW50c0J5Q2xhc3NOYW1lIiwiZGF0YXNldCIsImZpcnN0SW5zdGFuY2UiLCJmaXJzdENoaWxkIiwiY2hpbGRyZW4iLCJpbnN0YW5jZSIsImNvbnRhaW5lciIsImFwcGVuZENoaWxkIiwiYm9keSIsInVwZGF0ZVN0eWxlcyIsIm1lc3NhZ2VzIiwibWVzc2FnZSIsImluZGV4IiwidW5tb3VudFJlc3VsdCIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJyZW5kZXIiLCJkZXN0cm95IiwiY29uZmlnIiwiY25mZyIsIl9kZWZhdWx0IiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS9NZXNzYWdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgZm9yd2FyZFJlZixcbiAgdXNlRWZmZWN0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vYnV0dG9uXCJcbmltcG9ydCBJY29uLCB7IEljb25OYW1lcyB9IGZyb20gXCIuLi9pY29uXCJcbmltcG9ydCBJQ09OX0lOVEVOVFMgZnJvbSBcIi4uL2FsZXJ0L2ljb25JbnRlbnRzXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktbWVzc2FnZVwiXG5jb25zdCBJTlRFTlRTID0gW1wibm9ybWFsXCIsIFwicHJpbWFyeVwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCJdXG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lc3NhZ2VQcm9wcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICAvKipcbiAgICog6KGM5Yqo5oyJ6ZKu55qE6YWN572u77yM5aaC77yaYWN0aW9uOiB7IHRleHQ6IFwi6Kej6ZSBXCIsIG9uQ2xpY2s6ICgpID0+IHsgbWVzc2FnZS5kZXN0cm95KCkgfSB9XG4gICAqL1xuICBhY3Rpb24/OiB7IHRleHQ6IHN0cmluZzsgb25DbGljazogKCkgPT4gdm9pZCB9IHwgbnVsbFxuICAvKipcbiAgICog6ZmE5Yqg57G75ZCNXG4gICAqL1xuICBjbGFzc05hbWU/OiBzdHJpbmdcbiAgLyoqXG4gICAqIOaYr+WQpuaYvuekuuWFs+mXrSBJY29u77yM5aaC5p6c6ZyA6KaB5Y+q5pSv5oyB5omL5Yqo5YWz6Zet77yM6L+Y6ZyA6KaB5Lyg5YWlIGR1cmF0aW9uOiAwXG4gICAqL1xuICBjbG9zYWJsZT86IGJvb2xlYW5cbiAgLyoqXG4gICAqIOWGheWuuVxuICAgKi9cbiAgY29udGVudD86IFJlYWN0LlJlYWN0Tm9kZVxuICAvKipcbiAgICog6Ze06ZqU5aSa5LmF6Ieq5Yqo5YWz6Zet77yM5Y2V5L2N5Li6IHPvvIzlpoLmnpzkvKDlhaUgMO+8jOWImeihqOekuuS4jeS8muiHquWKqOa2iOWksVxuICAgKi9cbiAgZHVyYXRpb24/OiBudW1iZXJcbiAgLyoqXG4gICAqIE1lc3NhZ2Ug5o+S5YWl5Yiw5ZOq5Liq5YWD57Sg77yM6buY6K6kICgpID0+IGRvY3VtZW50LmJvZHlcbiAgICovXG4gIGdldENvbnRhaW5lcj86ICgpID0+IEhUTUxFbGVtZW50XG4gIC8qKlxuICAgKiDorr7nva7lm77moIdcbiAgICovXG4gIGljb24/OiBJY29uTmFtZXNcbiAgLyoqXG4gICAqIOiuvue9ruexu+Wei1xuICAgKi9cbiAgaW50ZW50OiBcIm5vcm1hbFwiIHwgXCJwcmltYXJ5XCIgfCBcInN1Y2Nlc3NcIiB8IFwid2FybmluZ1wiIHwgXCJkYW5nZXJcIlxuICAvKipcbiAgICog5YWz6Zet5pe255qEIGhhbmRsZXJcbiAgICovXG4gIG9uQ2xvc2U/OiAoKCkgPT4gdm9pZCkgfCBudWxsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lc3NhZ2VcbiAgZXh0ZW5kcyBSZWFjdC5Gb3J3YXJkUmVmRXhvdGljQ29tcG9uZW50PFxuICAgIElNZXNzYWdlUHJvcHMgJiBSZWFjdC5SZWZBdHRyaWJ1dGVzPEhUTUxEaXZFbGVtZW50PlxuICA+IHtcbiAgbm9ybWFsOiBhbnlcbiAgcHJpbWFyeTogYW55XG4gIHN1Y2Nlc3M6IGFueVxuICB3YXJuaW5nOiBhbnlcbiAgZGFuZ2VyOiBhbnlcbn1cblxuLyoqXG4gKiDlhajlsYDmj5DphpLnlKjkuo7lhajlsYDmgKflnLDlsZXnpLrpnIDopoHljbPml7bmgKflhbPms6jnmoTkv6Hmga/jgIJcbiAqL1xuLy8gQHRzLWlnbm9yZVxuY29uc3QgTWVzc2FnZTogSU1lc3NhZ2UgPSBmb3J3YXJkUmVmKFxuICAoXG4gICAge1xuICAgICAgYWN0aW9uLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY2xvc2FibGUsXG4gICAgICBjb250ZW50LFxuICAgICAgZHVyYXRpb24sXG4gICAgICBnZXRDb250YWluZXIsXG4gICAgICBpY29uLFxuICAgICAgaW50ZW50LFxuICAgICAgb25DbG9zZSxcbiAgICAgIC4uLm90aGVyUHJvcHNcbiAgICB9OiBJTWVzc2FnZVByb3BzLFxuICAgIHJlZjogYW55XG4gICkgPT4ge1xuICAgIGNvbnN0IG1lc3NhZ2VSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpXG5cbiAgICBsZXQgdGltZXI6IG51bGwgfCBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PlxuXG4gICAgY29uc3QgY2xlYXJDbG9zZVRpbWVyID0gKCkgPT4ge1xuICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lcilcbiAgICAgICAgdGltZXIgPSBudWxsXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2xvc2UgPSAoKSA9PiB7XG4gICAgICBpZiAobWVzc2FnZVJlZiAmJiBtZXNzYWdlUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgbWVzc2FnZVJlZi5jdXJyZW50LnN0eWxlLm9wYWNpdHkgPSBcIjBcIlxuICAgICAgICBtZXNzYWdlUmVmLmN1cnJlbnQuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCJcbiAgICAgICAgbWVzc2FnZVJlZi5jdXJyZW50LnN0eWxlLnRyYW5zZm9ybSA9IFwidHJhbnNsYXRlM2QoLTUwJSwgLTU2cHgsIDApXCJcbiAgICAgICAgbWVzc2FnZVJlZi5jdXJyZW50LnN0eWxlLnRyYW5zaXRpb24gPVxuICAgICAgICAgIFwiYWxsIHZhcigtLWFkdWktbW90aW9uLWR1cmF0aW9uLWJhc2UpIHZhcigtLWFkdWktbW90aW9uLWVhc2UtYmFzZSlcIlxuICAgICAgfVxuICAgICAgY2xlYXJDbG9zZVRpbWVyKClcbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2UoKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHNldENsb3NlVGltZXIgPSAoKSA9PiB7XG4gICAgICBpZiAoZHVyYXRpb24pIHtcbiAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBjbG9zZSgpXG4gICAgICAgIH0sIGR1cmF0aW9uICogMTAwMClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgc2V0Q2xvc2VUaW1lcigpXG4gICAgICByZXR1cm4gY2xlYXJDbG9zZVRpbWVyXG4gICAgfSwgW10pXG5cbiAgICB1c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICAgIGNsb3NlLFxuICAgICAgZ2V0RG9tTm9kZTogKCkgPT4gbWVzc2FnZVJlZi5jdXJyZW50LFxuICAgIH0pKVxuXG4gICAgY29uc3QgaGFzQWN0aW9ucyA9IGFjdGlvbiB8fCBjbG9zYWJsZVxuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWVzKFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBgJHtwcmVmaXh9LWJhc2VgLFxuICAgICAgICAgIGAke3ByZWZpeH0tJHtpbnRlbnR9YCxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBbYCR7cHJlZml4fS1oYXNBY3Rpb25zYF06IGhhc0FjdGlvbnMsXG4gICAgICAgICAgfVxuICAgICAgICApfVxuICAgICAgICBvbk1vdXNlRW50ZXI9e2NsZWFyQ2xvc2VUaW1lcn1cbiAgICAgICAgb25Nb3VzZUxlYXZlPXtzZXRDbG9zZVRpbWVyfVxuICAgICAgICByZWY9e21lc3NhZ2VSZWZ9XG4gICAgICAgIGRhdGEtZHVyYXRpb249e2R1cmF0aW9ufVxuICAgICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAgID5cbiAgICAgICAgPEljb25cbiAgICAgICAgICBpY29uPXtpY29uIHx8IElDT05fSU5URU5UU1tpbnRlbnRdfVxuICAgICAgICAgIHNpemU9ezIwfVxuICAgICAgICAgIGNsYXNzTmFtZT17YCR7cHJlZml4fS1pY29uYH1cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tY29udGVudGB9Pntjb250ZW50fTwvZGl2PlxuICAgICAgICB7aGFzQWN0aW9ucyAmJiAoXG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tYWN0aW9uc2B9PlxuICAgICAgICAgICAge2FjdGlvbiAmJiAoXG4gICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWFjdGlvbmB9PlxuICAgICAgICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgICAgICAgIHRoZW1lPVwibGlnaHRcIlxuICAgICAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB7IG9uQ2xpY2sgfSA9IGFjdGlvblxuICAgICAgICAgICAgICAgICAgICBpZiAob25DbGljaykge1xuICAgICAgICAgICAgICAgICAgICAgIG9uQ2xpY2soKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9fVxuICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgIHthY3Rpb24udGV4dH1cbiAgICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApfVxuICAgICAgICAgICAge2Nsb3NhYmxlICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvbiBsZWZ0SWNvbj1cImNhbmNlbFwiIHRoZW1lPVwibGlnaHRcIiBvbkNsaWNrPXtjbG9zZX0gLz5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gIH1cbilcblxuTWVzc2FnZS5kaXNwbGF5TmFtZSA9IFwiTWVzc2FnZVwiXG5cbk1lc3NhZ2UucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICog6KGM5Yqo5oyJ6ZKu55qE6YWN572u77yM5aaC77yaYWN0aW9uOiB7IHRleHQ6IFwi6Kej6ZSBXCIsIG9uQ2xpY2s6ICgpID0+IHsgbWVzc2FnZS5kZXN0cm95KCkgfSB9XG4gICAqL1xuICBhY3Rpb246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIOaYr+WQpuaYvuekuuWFs+mXrSBJY29u77yM5aaC5p6c6ZyA6KaB5Y+q5pSv5oyB5omL5Yqo5YWz6Zet77yM6L+Y6ZyA6KaB5Lyg5YWlIGR1cmF0aW9uOiAwXG4gICAqL1xuICBjbG9zYWJsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiDlhoXlrrlcbiAgICovXG4gIGNvbnRlbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICog6Ze06ZqU5aSa5LmF6Ieq5Yqo5YWz6Zet77yM5Y2V5L2N5Li6IHPvvIzlpoLmnpzkvKDlhaUgMO+8jOWImeihqOekuuS4jeS8muiHquWKqOa2iOWksVxuICAgKi9cbiAgZHVyYXRpb246IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBNZXNzYWdlIOaPkuWFpeWIsOWTquS4quWFg+e0oO+8jOm7mOiupCAoKSA9PiBkb2N1bWVudC5ib2R5XG4gICAqL1xuICBnZXRDb250YWluZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICog6K6+572u5Zu+5qCHXG4gICAqL1xuICBpY29uOiBQcm9wVHlwZXMuYW55LFxuICAvKipcbiAgICog6K6+572u57G75Z6LXG4gICAqL1xuICBpbnRlbnQ6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDlhbPpl63ml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG59XG5cbk1lc3NhZ2UuZGVmYXVsdFByb3BzID0ge1xuICBhY3Rpb246IG51bGwsXG4gIGNsYXNzTmFtZTogdW5kZWZpbmVkLFxuICBjbG9zYWJsZTogZmFsc2UsXG4gIGNvbnRlbnQ6IG51bGwsXG4gIGR1cmF0aW9uOiAyLFxuICBnZXRDb250YWluZXI6IHVuZGVmaW5lZCxcbiAgaWNvbjogdW5kZWZpbmVkLFxuICBpbnRlbnQ6IFwibm9ybWFsXCIsXG4gIG9uQ2xvc2U6IG51bGwsXG59XG5cbmNvbnN0IG5ld0luc3RhbmNlID0gKHByb3BzOiBJTWVzc2FnZVByb3BzKSA9PiB7XG4gIGxldCBpbnN0YW5jZXMgPSBBcnJheS5mcm9tKFxuICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYCR7cHJlZml4fS13cmFwcGVyYClcbiAgKVxuICBpbnN0YW5jZXMgPSBpbnN0YW5jZXMuZmlsdGVyKFxuICAgIChvOiBIVE1MRGl2RWxlbWVudCkgPT4gby5kYXRhc2V0LmNsb3NlICE9PSBcInRydWVcIlxuICApXG4gIGlmIChpbnN0YW5jZXMgJiYgaW5zdGFuY2VzLmxlbmd0aCA+IDIpIHtcbiAgICBjb25zdCBmaXJzdEluc3RhbmNlID0gaW5zdGFuY2VzWzBdIGFzIEhUTUxFbGVtZW50XG4gICAgY29uc3QgZmlyc3RDaGlsZCA9IGZpcnN0SW5zdGFuY2UuY2hpbGRyZW5bMF0gYXMgSFRNTEVsZW1lbnRcbiAgICBpZiAoZmlyc3RDaGlsZC5kYXRhc2V0LmR1cmF0aW9uICE9PSBcIjBcIikge1xuICAgICAgZmlyc3RJbnN0YW5jZS5kYXRhc2V0LmNsb3NlID0gXCJ0cnVlXCJcbiAgICAgIGZpcnN0SW5zdGFuY2Uuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUzZCgwLCAtNTZweCwgMClcIlxuICAgICAgZmlyc3RDaGlsZC5zdHlsZS5vcGFjaXR5ID0gXCIwXCJcbiAgICAgIGZpcnN0Q2hpbGQuc3R5bGUudmlzaWJpbGl0eSA9IFwiaGlkZGVuXCJcblxuICAgICAgZmlyc3RJbnN0YW5jZS5zdHlsZS50cmFuc2l0aW9uID1cbiAgICAgICAgXCJhbGwgdmFyKC0tYWR1aS1tb3Rpb24tZHVyYXRpb24tYmFzZSkgdmFyKC0tYWR1aS1tb3Rpb24tZWFzZS1iYXNlKVwiXG4gICAgICBmaXJzdENoaWxkLnN0eWxlLnRyYW5zaXRpb24gPVxuICAgICAgICBcImFsbCB2YXIoLS1hZHVpLW1vdGlvbi1kdXJhdGlvbi1iYXNlKSB2YXIoLS1hZHVpLW1vdGlvbi1lYXNlLWJhc2UpXCJcbiAgICB9XG4gIH1cblxuICBsZXQgaW5zdGFuY2U6IGFueVxuXG4gIGNvbnN0IHsgb25DbG9zZSwgZ2V0Q29udGFpbmVyLCBpbnRlbnQsIC4uLm90aGVyUHJvcHMgfSA9IHByb3BzXG4gIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJkaXZcIilcbiAgY29udGFpbmVyLmNsYXNzTmFtZSA9IGAke3ByZWZpeH0td3JhcHBlcmBcbiAgY29udGFpbmVyLmRhdGFzZXQuaW50ZW50ID0gaW50ZW50XG4gIGlmIChnZXRDb250YWluZXIpIHtcbiAgICBnZXRDb250YWluZXIoKS5hcHBlbmRDaGlsZChjb250YWluZXIpXG4gIH0gZWxzZSB7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb250YWluZXIpXG4gIH1cblxuICBjb25zdCB1cGRhdGVTdHlsZXMgPSAoKSA9PiB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCBtZXNzYWdlcyA9IEFycmF5LmZyb20oXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoYCR7cHJlZml4fS13cmFwcGVyYClcbiAgICAgICkgYXMgSFRNTERpdkVsZW1lbnRbXVxuICAgICAgbWVzc2FnZXMuZm9yRWFjaCgobWVzc2FnZSwgaW5kZXgpID0+IHtcbiAgICAgICAgLy8gaWYgKFtcIndhcm5pbmdcIiwgXCJkYW5nZXJcIl0uaW5jbHVkZXMobWVzc2FnZS5kYXRhc2V0LmludGVudCB8fCBcIlwiKSkge1xuICAgICAgICAvLyAgIG1lc3NhZ2Uuc3R5bGUudHJhbnNpdGlvbiA9XG4gICAgICAgIC8vICAgICBcImFsbCB2YXIoLS1hZHVpLW1vdGlvbi1kdXJhdGlvbi1ib3VuY2UpIHZhcigtLWFkdWktbW90aW9uLWVhc2UtYm91bmNlKVwiXG4gICAgICAgIC8vIH1cbiAgICAgICAgbWVzc2FnZS5zdHlsZS5vcGFjaXR5ID0gXCIxXCJcbiAgICAgICAgbWVzc2FnZS5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoMCwgJHtcbiAgICAgICAgICA1NiAqIChtZXNzYWdlcy5sZW5ndGggLSAxIC0gaW5kZXgpXG4gICAgICAgIH1weCwgMClgXG4gICAgICB9KVxuICAgIH0sIDUwKVxuICB9XG5cbiAgdXBkYXRlU3R5bGVzKClcblxuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZSgpXG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdW5tb3VudFJlc3VsdCA9IFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKVxuICAgICAgaWYgKHVubW91bnRSZXN1bHQgJiYgY29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGFpbmVyKVxuICAgICAgICB1cGRhdGVTdHlsZXMoKVxuICAgICAgfVxuICAgIH0sIDMwMClcbiAgfVxuXG4gIFJlYWN0RE9NLnJlbmRlcihcbiAgICA8TWVzc2FnZVxuICAgICAgcmVmPXsobWVzc2FnZSkgPT4ge1xuICAgICAgICBpbnN0YW5jZSA9IG1lc3NhZ2VcbiAgICAgIH19XG4gICAgICBvbkNsb3NlPXtjbG9zZX1cbiAgICAgIGludGVudD17aW50ZW50fVxuICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgLz4sXG4gICAgY29udGFpbmVyXG4gIClcblxuICByZXR1cm4ge1xuICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS5jbG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgfVxufVxuXG5JTlRFTlRTLmZvckVhY2goXG4gIChpbnRlbnQ6IFwibm9ybWFsXCIgfCBcInByaW1hcnlcIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiKSA9PiB7XG4gICAgTWVzc2FnZVtpbnRlbnRdID0gKGNvbmZpZzogSU1lc3NhZ2VQcm9wcyB8IHN0cmluZykgPT4ge1xuICAgICAgbGV0IGNuZmcgPSB7IGludGVudCB9IGFzIElNZXNzYWdlUHJvcHNcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNuZmcgPSB7IGNvbnRlbnQ6IGNvbmZpZywgaW50ZW50IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNuZmcgPSBjb25maWdcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdJbnN0YW5jZSh7XG4gICAgICAgIC4uLmNuZmcsXG4gICAgICAgIGludGVudCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG4pXG5cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLE1BQUEsR0FBQUMsdUJBQUEsQ0FBQUMsT0FBQTtBQU1BLElBQUFDLFFBQUEsR0FBQUYsdUJBQUEsQ0FBQUMsT0FBQTtBQUNBLElBQUFFLFVBQUEsR0FBQUMsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFJLFdBQUEsR0FBQUQsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFLLE9BQUEsR0FBQUYsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFNLEtBQUEsR0FBQUgsc0JBQUEsQ0FBQUgsT0FBQTtBQUNBLElBQUFPLFlBQUEsR0FBQUosc0JBQUEsQ0FBQUgsT0FBQTtBQUNBQSxPQUFBO0FBQWdCLElBQUFRLFNBQUE7RUFBQUMsVUFBQTtBQUFBLFNBQUFOLHVCQUFB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