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>
244 lines (212 loc) • 29.6 kB
JavaScript
var _excluded = ["action", "className", "closable", "content", "duration", "getContainer", "icon", "intent", "onClose"],
_excluded2 = ["onClose", "getContainer", "intent"];
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
import React, { forwardRef, useEffect, useImperativeHandle, useRef } from "react";
import * as ReactDOM from "react-dom";
import PropTypes from "prop-types";
import classNames from "classnames";
import Button from "../button";
import Icon from "../icon";
import ICON_INTENTS from "../alert/iconIntents";
import "./style";
var prefix = "adui-message";
var INTENTS = ["normal", "primary", "success", "warning", "danger"];
var Message = 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 = 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);
}
};
useEffect(function () {
setCloseTimer();
return clearCloseTimer;
}, []);
useImperativeHandle(ref, function () {
return {
close: close,
getDomNode: function getDomNode() {
return messageRef.current;
}
};
});
var hasActions = action || closable;
return React.createElement("div", _extends({
className: classNames(className, "".concat(prefix, "-base"), "".concat(prefix, "-").concat(intent), _defineProperty({}, "".concat(prefix, "-hasActions"), hasActions)),
onMouseEnter: clearCloseTimer,
onMouseLeave: setCloseTimer,
ref: messageRef,
"data-duration": duration
}, otherProps), React.createElement(Icon, {
icon: icon || ICON_INTENTS[intent],
size: 20,
className: "".concat(prefix, "-icon")
}), React.createElement("div", {
className: "".concat(prefix, "-content")
}, content), hasActions && React.createElement("div", {
className: "".concat(prefix, "-actions")
}, action && React.createElement("div", {
className: "".concat(prefix, "-action")
}, React.createElement(Button, {
theme: "light",
onClick: function onClick() {
var onClick = action.onClick;
if (onClick) {
onClick();
}
}
}, action.text)), closable && React.createElement(Button, {
leftIcon: "cancel",
theme: "light",
onClick: close
})));
});
Message.displayName = "Message";
Message.propTypes = {
action: PropTypes.any,
className: PropTypes.string,
closable: PropTypes.bool,
content: PropTypes.node,
duration: PropTypes.number,
getContainer: PropTypes.func,
icon: PropTypes.any,
intent: PropTypes.any,
onClose: PropTypes.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) {
if (["warning", "danger"].includes(message.dataset.intent || "")) {
message.style.transition = "all var(--adui-motion-duration-bounce) var(--adui-motion-ease-bounce)";
}
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.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
}));
};
});
export default Message;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VFZmZlY3QiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlUmVmIiwiUmVhY3RET00iLCJQcm9wVHlwZXMiLCJjbGFzc05hbWVzIiwiQnV0dG9uIiwiSWNvbiIsIklDT05fSU5URU5UUyIsInByZWZpeCIsIklOVEVOVFMiLCJNZXNzYWdlIiwicmVmIiwiYWN0aW9uIiwiY2xhc3NOYW1lIiwiY2xvc2FibGUiLCJjb250ZW50IiwiZHVyYXRpb24iLCJnZXRDb250YWluZXIiLCJpY29uIiwiaW50ZW50Iiwib25DbG9zZSIsIm90aGVyUHJvcHMiLCJtZXNzYWdlUmVmIiwidGltZXIiLCJjbGVhckNsb3NlVGltZXIiLCJjbGVhclRpbWVvdXQiLCJjbG9zZSIsImN1cnJlbnQiLCJzdHlsZSIsIm9wYWNpdHkiLCJ2aXNpYmlsaXR5IiwidHJhbnNmb3JtIiwidHJhbnNpdGlvbiIsInNldENsb3NlVGltZXIiLCJzZXRUaW1lb3V0IiwiZ2V0RG9tTm9kZSIsImhhc0FjdGlvbnMiLCJvbkNsaWNrIiwidGV4dCIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiYW55Iiwic3RyaW5nIiwiYm9vbCIsIm5vZGUiLCJudW1iZXIiLCJmdW5jIiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIiwibmV3SW5zdGFuY2UiLCJwcm9wcyIsImluc3RhbmNlcyIsIkFycmF5IiwiZnJvbSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImZpbHRlciIsIm8iLCJkYXRhc2V0IiwibGVuZ3RoIiwiZmlyc3RJbnN0YW5jZSIsImZpcnN0Q2hpbGQiLCJjaGlsZHJlbiIsImluc3RhbmNlIiwiY29udGFpbmVyIiwiY3JlYXRlRWxlbWVudCIsImFwcGVuZENoaWxkIiwiYm9keSIsInVwZGF0ZVN0eWxlcyIsIm1lc3NhZ2VzIiwiZm9yRWFjaCIsIm1lc3NhZ2UiLCJpbmRleCIsImluY2x1ZGVzIiwidW5tb3VudFJlc3VsdCIsInVubW91bnRDb21wb25lbnRBdE5vZGUiLCJwYXJlbnROb2RlIiwicmVtb3ZlQ2hpbGQiLCJyZW5kZXIiLCJkZXN0cm95IiwiY29uZmlnIiwiY25mZyJdLCJzb3VyY2VzIjpbIi4uLy4uL2NvbXBvbmVudHMvbWVzc2FnZS9NZXNzYWdlLnRzeCJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHtcbiAgZm9yd2FyZFJlZixcbiAgdXNlRWZmZWN0LFxuICB1c2VJbXBlcmF0aXZlSGFuZGxlLFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiXG5pbXBvcnQgKiBhcyBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCJcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSBcInByb3AtdHlwZXNcIlxuaW1wb3J0IGNsYXNzTmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIlxuaW1wb3J0IEJ1dHRvbiBmcm9tIFwiLi4vYnV0dG9uXCJcbmltcG9ydCBJY29uLCB7IEljb25OYW1lcyB9IGZyb20gXCIuLi9pY29uXCJcbmltcG9ydCBJQ09OX0lOVEVOVFMgZnJvbSBcIi4uL2FsZXJ0L2ljb25JbnRlbnRzXCJcbmltcG9ydCBcIi4vc3R5bGVcIlxuXG5jb25zdCBwcmVmaXggPSBcImFkdWktbWVzc2FnZVwiXG5jb25zdCBJTlRFTlRTID0gW1wibm9ybWFsXCIsIFwicHJpbWFyeVwiLCBcInN1Y2Nlc3NcIiwgXCJ3YXJuaW5nXCIsIFwiZGFuZ2VyXCJdXG5cbmV4cG9ydCBpbnRlcmZhY2UgSU1lc3NhZ2VQcm9wcyB7XG4gIFtrZXk6IHN0cmluZ106IGFueVxuICAvKipcbiAgICog6KGM5Yqo5oyJ6ZKu55qE6YWN572u77yM5aaC77yaYWN0aW9uOiB7IHRleHQ6IFwi6Kej6ZSBXCIsIG9uQ2xpY2s6ICgpID0+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+IHtcbiAgICAgICAgaWYgKFtcIndhcm5pbmdcIiwgXCJkYW5nZXJcIl0uaW5jbHVkZXMobWVzc2FnZS5kYXRhc2V0LmludGVudCB8fCBcIlwiKSkge1xuICAgICAgICAgIG1lc3NhZ2Uuc3R5bGUudHJhbnNpdGlvbiA9XG4gICAgICAgICAgICBcImFsbCB2YXIoLS1hZHVpLW1vdGlvbi1kdXJhdGlvbi1ib3VuY2UpIHZhcigtLWFkdWktbW90aW9uLWVhc2UtYm91bmNlKVwiXG4gICAgICAgIH1cbiAgICAgICAgbWVzc2FnZS5zdHlsZS5vcGFjaXR5ID0gXCIxXCJcbiAgICAgICAgbWVzc2FnZS5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlM2QoMCwgJHtcbiAgICAgICAgICA1NiAqIChtZXNzYWdlcy5sZW5ndGggLSAxIC0gaW5kZXgpXG4gICAgICAgIH1weCwgMClgXG4gICAgICB9KVxuICAgIH0sIDUwKVxuICB9XG5cbiAgdXBkYXRlU3R5bGVzKClcblxuICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICBpZiAob25DbG9zZSkge1xuICAgICAgb25DbG9zZSgpXG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgY29uc3QgdW5tb3VudFJlc3VsdCA9IFJlYWN0RE9NLnVubW91bnRDb21wb25lbnRBdE5vZGUoY29udGFpbmVyKVxuICAgICAgaWYgKHVubW91bnRSZXN1bHQgJiYgY29udGFpbmVyLnBhcmVudE5vZGUpIHtcbiAgICAgICAgY29udGFpbmVyLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoY29udGFpbmVyKVxuICAgICAgICB1cGRhdGVTdHlsZXMoKVxuICAgICAgfVxuICAgIH0sIDMwMClcbiAgfVxuXG4gIFJlYWN0RE9NLnJlbmRlcihcbiAgICA8TWVzc2FnZVxuICAgICAgcmVmPXsobWVzc2FnZSkgPT4ge1xuICAgICAgICBpbnN0YW5jZSA9IG1lc3NhZ2VcbiAgICAgIH19XG4gICAgICBvbkNsb3NlPXtjbG9zZX1cbiAgICAgIGludGVudD17aW50ZW50fVxuICAgICAgey4uLm90aGVyUHJvcHN9XG4gICAgLz4sXG4gICAgY29udGFpbmVyXG4gIClcblxuICByZXR1cm4ge1xuICAgIGRlc3Ryb3k6ICgpID0+IHtcbiAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICBpbnN0YW5jZS5jbG9zZSgpXG4gICAgICB9XG4gICAgfSxcbiAgfVxufVxuXG5JTlRFTlRTLmZvckVhY2goXG4gIChpbnRlbnQ6IFwibm9ybWFsXCIgfCBcInByaW1hcnlcIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiKSA9PiB7XG4gICAgTWVzc2FnZVtpbnRlbnRdID0gKGNvbmZpZzogSU1lc3NhZ2VQcm9wcyB8IHN0cmluZykgPT4ge1xuICAgICAgbGV0IGNuZmcgPSB7IGludGVudCB9IGFzIElNZXNzYWdlUHJvcHNcbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIGNuZmcgPSB7IGNvbnRlbnQ6IGNvbmZpZywgaW50ZW50IH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNuZmcgPSBjb25maWdcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdJbnN0YW5jZSh7XG4gICAgICAgIC4uLmNuZmcsXG4gICAgICAgIGludGVudCxcbiAgICAgIH0pXG4gICAgfVxuICB9XG4pXG5cbmV4cG9ydCBkZWZhdWx0IE1lc3NhZ2VcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBT0EsS0FBUCxJQUNFQyxVQURGLEVBRUVDLFNBRkYsRUFHRUMsbUJBSEYsRUFJRUMsTUFKRixRQUtPLE9BTFA7QUFNQSxPQUFPLEtBQUtDLFFBQVosTUFBMEIsV0FBMUI7QUFDQSxPQUFPQyxTQUFQLE1BQXNCLFlBQXRCO0FBQ0EsT0FBT0MsVUFBUCxNQUF1QixZQUF2QjtBQUNBLE9BQU9DLE1BQVAsTUFBbUIsV0FBbkI7QUFDQSxPQUFPQyxJQUFQLE1BQWdDLFNBQWhDO0FBQ0EsT0FBT0MsWUFBUCxNQUF5QixzQkFBekI7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