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>
212 lines • 30.4 kB
JavaScript
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); }
var _excluded = ["action", "className", "closable", "content", "duration", "getContainer", "icon", "intent", "onClose"],
_excluded2 = ["onClose", "getContainer", "intent"];
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; }
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) {
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,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJSZWFjdCIsImZvcndhcmRSZWYiLCJ1c2VFZmZlY3QiLCJ1c2VJbXBlcmF0aXZlSGFuZGxlIiwidXNlUmVmIiwiUmVhY3RET00iLCJQcm9wVHlwZXMiLCJjbGFzc05hbWVzIiwiQnV0dG9uIiwiSWNvbiIsIklDT05fSU5URU5UUyIsInByZWZpeCIsIklOVEVOVFMiLCJNZXNzYWdlIiwiX3JlZiIsInJlZiIsImFjdGlvbiIsImNsYXNzTmFtZSIsImNsb3NhYmxlIiwiY29udGVudCIsImR1cmF0aW9uIiwiZ2V0Q29udGFpbmVyIiwiaWNvbiIsImludGVudCIsIm9uQ2xvc2UiLCJvdGhlclByb3BzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzIiwiX2V4Y2x1ZGVkIiwibWVzc2FnZVJlZiIsInRpbWVyIiwiY2xlYXJDbG9zZVRpbWVyIiwiY2xlYXJUaW1lb3V0IiwiY2xvc2UiLCJjdXJyZW50Iiwic3R5bGUiLCJvcGFjaXR5IiwidmlzaWJpbGl0eSIsInRyYW5zZm9ybSIsInRyYW5zaXRpb24iLCJzZXRDbG9zZVRpbWVyIiwic2V0VGltZW91dCIsImdldERvbU5vZGUiLCJoYXNBY3Rpb25zIiwiY3JlYXRlRWxlbWVudCIsIl9leHRlbmRzIiwiY29uY2F0IiwiX2RlZmluZVByb3BlcnR5Iiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwic2l6ZSIsInRoZW1lIiwib25DbGljayIsInRleHQiLCJsZWZ0SWNvbiIsImRpc3BsYXlOYW1lIiwicHJvcFR5cGVzIiwiYW55Iiwic3RyaW5nIiwiYm9vbCIsIm5vZGUiLCJudW1iZXIiLCJmdW5jIiwiZGVmYXVsdFByb3BzIiwidW5kZWZpbmVkIiwibmV3SW5zdGFuY2UiLCJwcm9wcyIsImluc3RhbmNlcyIsIkFycmF5IiwiZnJvbSIsImRvY3VtZW50IiwiZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSIsImZpbHRlciIsIm8iLCJkYXRhc2V0IiwibGVuZ3RoIiwiZmlyc3RJbnN0YW5jZSIsImZpcnN0Q2hpbGQiLCJjaGlsZHJlbiIsImluc3RhbmNlIiwiX2V4Y2x1ZGVkMiIsImNvbnRhaW5lciIsImFwcGVuZENoaWxkIiwiYm9keSIsInVwZGF0ZVN0eWxlcyIsIm1lc3NhZ2VzIiwiZm9yRWFjaCIsIm1lc3NhZ2UiLCJpbmRleCIsInVubW91bnRSZXN1bHQiLCJ1bm1vdW50Q29tcG9uZW50QXROb2RlIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVuZGVyIiwiZGVzdHJveSIsImNvbmZpZyIsImNuZmciLCJfb2JqZWN0U3ByZWFkIl0sInNvdXJjZXMiOlsiLi4vLi4vY29tcG9uZW50cy9tZXNzYWdlL01lc3NhZ2UudHN4Il0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge1xuICBmb3J3YXJkUmVmLFxuICB1c2VFZmZlY3QsXG4gIHVzZUltcGVyYXRpdmVIYW5kbGUsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCJcbmltcG9ydCAqIGFzIFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIlxuaW1wb3J0IFByb3BUeXBlcyBmcm9tIFwicHJvcC10eXBlc1wiXG5pbXBvcnQgY2xhc3NOYW1lcyBmcm9tIFwiY2xhc3NuYW1lc1wiXG5pbXBvcnQgQnV0dG9uIGZyb20gXCIuLi9idXR0b25cIlxuaW1wb3J0IEljb24sIHsgSWNvbk5hbWVzIH0gZnJvbSBcIi4uL2ljb25cIlxuaW1wb3J0IElDT05fSU5URU5UUyBmcm9tIFwiLi4vYWxlcnQvaWNvbkludGVudHNcIlxuaW1wb3J0IFwiLi9zdHlsZVwiXG5cbmNvbnN0IHByZWZpeCA9IFwiYWR1aS1tZXNzYWdlXCJcbmNvbnN0IElOVEVOVFMgPSBbXCJub3JtYWxcIiwgXCJwcmltYXJ5XCIsIFwic3VjY2Vzc1wiLCBcIndhcm5pbmdcIiwgXCJkYW5nZXJcIl1cblxuZXhwb3J0IGludGVyZmFjZSBJTWVzc2FnZVByb3BzIHtcbiAgW2tleTogc3RyaW5nXTogYW55XG4gIC8qKlxuICAgKiDooYzliqjmjInpkq7nmoTphY3nva7vvIzlpoLvvJphY3Rpb246IHsgdGV4dDogXCLop6PplIFcIiwgb25DbGljazogKCkgPT4geyBtZXNzYWdlLmRlc3Ryb3koKSB9IH1cbiAgICovXG4gIGFjdGlvbj86IHsgdGV4dDogc3RyaW5nOyBvbkNsaWNrOiAoKSA9PiB2b2lkIH0gfCBudWxsXG4gIC8qKlxuICAgKiDpmYTliqDnsbvlkI1cbiAgICovXG4gIGNsYXNzTmFtZT86IHN0cmluZ1xuICAvKipcbiAgICog5piv5ZCm5pi+56S65YWz6ZetIEljb27vvIzlpoLmnpzpnIDopoHlj6rmlK/mjIHmiYvliqjlhbPpl63vvIzov5jpnIDopoHkvKDlhaUgZHVyYXRpb246IDBcbiAgICovXG4gIGNsb3NhYmxlPzogYm9vbGVhblxuICAvKipcbiAgICog5YaF5a65XG4gICAqL1xuICBjb250ZW50PzogUmVhY3QuUmVhY3ROb2RlXG4gIC8qKlxuICAgKiDpl7TpmpTlpJrkuYXoh6rliqjlhbPpl63vvIzljZXkvY3kuLogc++8jOWmguaenOS8oOWFpSAw77yM5YiZ6KGo56S65LiN5Lya6Ieq5Yqo5raI5aSxXG4gICAqL1xuICBkdXJhdGlvbj86IG51bWJlclxuICAvKipcbiAgICogTWVzc2FnZSDmj5LlhaXliLDlk6rkuKrlhYPntKDvvIzpu5jorqQgKCkgPT4gZG9jdW1lbnQuYm9keVxuICAgKi9cbiAgZ2V0Q29udGFpbmVyPzogKCkgPT4gSFRNTEVsZW1lbnRcbiAgLyoqXG4gICAqIOiuvue9ruWbvuagh1xuICAgKi9cbiAgaWNvbj86IEljb25OYW1lc1xuICAvKipcbiAgICog6K6+572u57G75Z6LXG4gICAqL1xuICBpbnRlbnQ6IFwibm9ybWFsXCIgfCBcInByaW1hcnlcIiB8IFwic3VjY2Vzc1wiIHwgXCJ3YXJuaW5nXCIgfCBcImRhbmdlclwiXG4gIC8qKlxuICAgKiDlhbPpl63ml7bnmoQgaGFuZGxlclxuICAgKi9cbiAgb25DbG9zZT86ICgoKSA9PiB2b2lkKSB8IG51bGxcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJTWVzc2FnZVxuICBleHRlbmRzIFJlYWN0LkZvcndhcmRSZWZFeG90aWNDb21wb25lbnQ8XG4gICAgSU1lc3NhZ2VQcm9wcyAmIFJlYWN0LlJlZkF0dHJpYnV0ZXM8SFRNTERpdkVsZW1lbnQ+XG4gID4ge1xuICBub3JtYWw6IGFueVxuICBwcmltYXJ5OiBhbnlcbiAgc3VjY2VzczogYW55XG4gIHdhcm5pbmc6IGFueVxuICBkYW5nZXI6IGFueVxufVxuXG4vKipcbiAqIOWFqOWxgOaPkOmGkueUqOS6juWFqOWxgOaAp+WcsOWxleekuumcgOimgeWNs+aXtuaAp+WFs+azqOeahOS/oeaBr+OAglxuICovXG4vLyBAdHMtaWdub3JlXG5jb25zdCBNZXNzYWdlOiBJTWVzc2FnZSA9IGZvcndhcmRSZWYoXG4gIChcbiAgICB7XG4gICAgICBhY3Rpb24sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjbG9zYWJsZSxcbiAgICAgIGNvbnRlbnQsXG4gICAgICBkdXJhdGlvbixcbiAgICAgIGdldENvbnRhaW5lcixcbiAgICAgIGljb24sXG4gICAgICBpbnRlbnQsXG4gICAgICBvbkNsb3NlLFxuICAgICAgLi4ub3RoZXJQcm9wc1xuICAgIH06IElNZXNzYWdlUHJvcHMsXG4gICAgcmVmOiBhbnlcbiAgKSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZVJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudD4obnVsbClcblxuICAgIGxldCB0aW1lcjogbnVsbCB8IFJldHVyblR5cGU8dHlwZW9mIHNldFRpbWVvdXQ+XG5cbiAgICBjb25zdCBjbGVhckNsb3NlVGltZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKVxuICAgICAgICB0aW1lciA9IG51bGxcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjbG9zZSA9ICgpID0+IHtcbiAgICAgIGlmIChtZXNzYWdlUmVmICYmIG1lc3NhZ2VSZWYuY3VycmVudCkge1xuICAgICAgICBtZXNzYWdlUmVmLmN1cnJlbnQuc3R5bGUub3BhY2l0eSA9IFwiMFwiXG4gICAgICAgIG1lc3NhZ2VSZWYuY3VycmVudC5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuICAgICAgICBtZXNzYWdlUmVmLmN1cnJlbnQuc3R5bGUudHJhbnNmb3JtID0gXCJ0cmFuc2xhdGUzZCgtNTAlLCAtNTZweCwgMClcIlxuICAgICAgICBtZXNzYWdlUmVmLmN1cnJlbnQuc3R5bGUudHJhbnNpdGlvbiA9XG4gICAgICAgICAgXCJhbGwgdmFyKC0tYWR1aS1tb3Rpb24tZHVyYXRpb24tYmFzZSkgdmFyKC0tYWR1aS1tb3Rpb24tZWFzZS1iYXNlKVwiXG4gICAgICB9XG4gICAgICBjbGVhckNsb3NlVGltZXIoKVxuICAgICAgaWYgKG9uQ2xvc2UpIHtcbiAgICAgICAgb25DbG9zZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc2V0Q2xvc2VUaW1lciA9ICgpID0+IHtcbiAgICAgIGlmIChkdXJhdGlvbikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIGNsb3NlKClcbiAgICAgICAgfSwgZHVyYXRpb24gKiAxMDAwKVxuICAgICAgfVxuICAgIH1cblxuICAgIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBzZXRDbG9zZVRpbWVyKClcbiAgICAgIHJldHVybiBjbGVhckNsb3NlVGltZXJcbiAgICB9LCBbXSlcblxuICAgIHVzZUltcGVyYXRpdmVIYW5kbGUocmVmLCAoKSA9PiAoe1xuICAgICAgY2xvc2UsXG4gICAgICBnZXREb21Ob2RlOiAoKSA9PiBtZXNzYWdlUmVmLmN1cnJlbnQsXG4gICAgfSkpXG5cbiAgICBjb25zdCBoYXNBY3Rpb25zID0gYWN0aW9uIHx8IGNsb3NhYmxlXG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZXMoXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIGAke3ByZWZpeH0tYmFzZWAsXG4gICAgICAgICAgYCR7cHJlZml4fS0ke2ludGVudH1gLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFtgJHtwcmVmaXh9LWhhc0FjdGlvbnNgXTogaGFzQWN0aW9ucyxcbiAgICAgICAgICB9XG4gICAgICAgICl9XG4gICAgICAgIG9uTW91c2VFbnRlcj17Y2xlYXJDbG9zZVRpbWVyfVxuICAgICAgICBvbk1vdXNlTGVhdmU9e3NldENsb3NlVGltZXJ9XG4gICAgICAgIHJlZj17bWVzc2FnZVJlZn1cbiAgICAgICAgZGF0YS1kdXJhdGlvbj17ZHVyYXRpb259XG4gICAgICAgIHsuLi5vdGhlclByb3BzfVxuICAgICAgPlxuICAgICAgICA8SWNvblxuICAgICAgICAgIGljb249e2ljb24gfHwgSUNPTl9JTlRFTlRTW2ludGVudF19XG4gICAgICAgICAgc2l6ZT17MjB9XG4gICAgICAgICAgY2xhc3NOYW1lPXtgJHtwcmVmaXh9LWljb25gfVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1jb250ZW50YH0+e2NvbnRlbnR9PC9kaXY+XG4gICAgICAgIHtoYXNBY3Rpb25zICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17YCR7cHJlZml4fS1hY3Rpb25zYH0+XG4gICAgICAgICAgICB7YWN0aW9uICYmIChcbiAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Ake3ByZWZpeH0tYWN0aW9uYH0+XG4gICAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgICAgdGhlbWU9XCJsaWdodFwiXG4gICAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHsgb25DbGljayB9ID0gYWN0aW9uXG4gICAgICAgICAgICAgICAgICAgIGlmIChvbkNsaWNrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgb25DbGljaygpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH19XG4gICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAge2FjdGlvbi50ZXh0fVxuICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgICB7Y2xvc2FibGUgJiYgKFxuICAgICAgICAgICAgICA8QnV0dG9uIGxlZnRJY29uPVwiY2FuY2VsXCIgdGhlbWU9XCJsaWdodFwiIG9uQ2xpY2s9e2Nsb3NlfSAvPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgfVxuKVxuXG5NZXNzYWdlLmRpc3BsYXlOYW1lID0gXCJNZXNzYWdlXCJcblxuTWVzc2FnZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiDooYzliqjmjInpkq7nmoTphY3nva7vvIzlpoLvvJphY3Rpb246IHsgdGV4dDogXCLop6PplIFcIiwgb25DbGljazogKCkgPT4geyBtZXNzYWdlLmRlc3Ryb3koKSB9IH1cbiAgICovXG4gIGFjdGlvbjogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOmZhOWKoOexu+WQjVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICog5piv5ZCm5pi+56S65YWz6ZetIEljb27vvIzlpoLmnpzpnIDopoHlj6rmlK/mjIHmiYvliqjlhbPpl63vvIzov5jpnIDopoHkvKDlhaUgZHVyYXRpb246IDBcbiAgICovXG4gIGNsb3NhYmxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIOWGheWuuVxuICAgKi9cbiAgY29udGVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiDpl7TpmpTlpJrkuYXoh6rliqjlhbPpl63vvIzljZXkvY3kuLogc++8jOWmguaenOS8oOWFpSAw77yM5YiZ6KGo56S65LiN5Lya6Ieq5Yqo5raI5aSxXG4gICAqL1xuICBkdXJhdGlvbjogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIE1lc3NhZ2Ug5o+S5YWl5Yiw5ZOq5Liq5YWD57Sg77yM6buY6K6kICgpID0+IGRvY3VtZW50LmJvZHlcbiAgICovXG4gIGdldENvbnRhaW5lcjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiDorr7nva7lm77moIdcbiAgICovXG4gIGljb246IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiDorr7nva7nsbvlnotcbiAgICovXG4gIGludGVudDogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIOWFs+mXreaXtueahCBoYW5kbGVyXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbn1cblxuTWVzc2FnZS5kZWZhdWx0UHJvcHMgPSB7XG4gIGFjdGlvbjogbnVsbCxcbiAgY2xhc3NOYW1lOiB1bmRlZmluZWQsXG4gIGNsb3NhYmxlOiBmYWxzZSxcbiAgY29udGVudDogbnVsbCxcbiAgZHVyYXRpb246IDIsXG4gIGdldENvbnRhaW5lcjogdW5kZWZpbmVkLFxuICBpY29uOiB1bmRlZmluZWQsXG4gIGludGVudDogXCJub3JtYWxcIixcbiAgb25DbG9zZTogbnVsbCxcbn1cblxuY29uc3QgbmV3SW5zdGFuY2UgPSAocHJvcHM6IElNZXNzYWdlUHJvcHMpID0+IHtcbiAgbGV0IGluc3RhbmNlcyA9IEFycmF5LmZyb20oXG4gICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgJHtwcmVmaXh9LXdyYXBwZXJgKVxuICApXG4gIGluc3RhbmNlcyA9IGluc3RhbmNlcy5maWx0ZXIoXG4gICAgKG86IEhUTUxEaXZFbGVtZW50KSA9PiBvLmRhdGFzZXQuY2xvc2UgIT09IFwidHJ1ZVwiXG4gIClcbiAgaWYgKGluc3RhbmNlcyAmJiBpbnN0YW5jZXMubGVuZ3RoID4gMikge1xuICAgIGNvbnN0IGZpcnN0SW5zdGFuY2UgPSBpbnN0YW5jZXNbMF0gYXMgSFRNTEVsZW1lbnRcbiAgICBjb25zdCBmaXJzdENoaWxkID0gZmlyc3RJbnN0YW5jZS5jaGlsZHJlblswXSBhcyBIVE1MRWxlbWVudFxuICAgIGlmIChmaXJzdENoaWxkLmRhdGFzZXQuZHVyYXRpb24gIT09IFwiMFwiKSB7XG4gICAgICBmaXJzdEluc3RhbmNlLmRhdGFzZXQuY2xvc2UgPSBcInRydWVcIlxuICAgICAgZmlyc3RJbnN0YW5jZS5zdHlsZS50cmFuc2Zvcm0gPSBcInRyYW5zbGF0ZTNkKDAsIC01NnB4LCAwKVwiXG4gICAgICBmaXJzdENoaWxkLnN0eWxlLm9wYWNpdHkgPSBcIjBcIlxuICAgICAgZmlyc3RDaGlsZC5zdHlsZS52aXNpYmlsaXR5ID0gXCJoaWRkZW5cIlxuXG4gICAgICBmaXJzdEluc3RhbmNlLnN0eWxlLnRyYW5zaXRpb24gPVxuICAgICAgICBcImFsbCB2YXIoLS1hZHVpLW1vdGlvbi1kdXJhdGlvbi1iYXNlKSB2YXIoLS1hZHVpLW1vdGlvbi1lYXNlLWJhc2UpXCJcbiAgICAgIGZpcnN0Q2hpbGQuc3R5bGUudHJhbnNpdGlvbiA9XG4gICAgICAgIFwiYWxsIHZhcigtLWFkdWktbW90aW9uLWR1cmF0aW9uLWJhc2UpIHZhcigtLWFkdWktbW90aW9uLWVhc2UtYmFzZSlcIlxuICAgIH1cbiAgfVxuXG4gIGxldCBpbnN0YW5jZTogYW55XG5cbiAgY29uc3QgeyBvbkNsb3NlLCBnZXRDb250YWluZXIsIGludGVudCwgLi4ub3RoZXJQcm9wcyB9ID0gcHJvcHNcbiAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImRpdlwiKVxuICBjb250YWluZXIuY2xhc3NOYW1lID0gYCR7cHJlZml4fS13cmFwcGVyYFxuICBjb250YWluZXIuZGF0YXNldC5pbnRlbnQgPSBpbnRlbnRcbiAgaWYgKGdldENvbnRhaW5lcikge1xuICAgIGdldENvbnRhaW5lcigpLmFwcGVuZENoaWxkKGNvbnRhaW5lcilcbiAgfSBlbHNlIHtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcilcbiAgfVxuXG4gIGNvbnN0IHVwZGF0ZVN0eWxlcyA9ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGNvbnN0IG1lc3NhZ2VzID0gQXJyYXkuZnJvbShcbiAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShgJHtwcmVmaXh9LXdyYXBwZXJgKVxuICAgICAgKSBhcyBIVE1MRGl2RWxlbWVudFtdXG4gICAgICBtZXNzYWdlcy5mb3JFYWNoKChtZXNzYWdlLCBpbmRleCkgPT4ge1xuICAgICAgICAvLyBpZiAoW1wid2FybmluZ1wiLCBcImRhbmdlclwiXS5pbmNsdWRlcyhtZXNzYWdlLmRhdGFzZXQuaW50ZW50IHx8IFwiXCIpKSB7XG4gICAgICAgIC8vICAgbWVzc2FnZS5zdHlsZS50cmFuc2l0aW9uID1cbiAgICAgICAgLy8gICAgIFwiYWxsIHZhcigtLWFkdWktbW90aW9uLWR1cmF0aW9uLWJvdW5jZSkgdmFyKC0tYWR1aS1tb3Rpb24tZWFzZS1ib3VuY2UpXCJcbiAgICAgICAgLy8gfVxuICAgICAgICBtZXNzYWdlLnN0eWxlLm9wYWNpdHkgPSBcIjFcIlxuICAgICAgICBtZXNzYWdlLnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGUzZCgwLCAke1xuICAgICAgICAgIDU2ICogKG1lc3NhZ2VzLmxlbmd0aCAtIDEgLSBpbmRleClcbiAgICAgICAgfXB4LCAwKWBcbiAgICAgIH0pXG4gICAgfSwgNTApXG4gIH1cblxuICB1cGRhdGVTdHlsZXMoKVxuXG4gIGNvbnN0IGNsb3NlID0gKCkgPT4ge1xuICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICBvbkNsb3NlKClcbiAgICB9XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBjb25zdCB1bm1vdW50UmVzdWx0ID0gUmVhY3RET00udW5tb3VudENvbXBvbmVudEF0Tm9kZShjb250YWluZXIpXG4gICAgICBpZiAodW5tb3VudFJlc3VsdCAmJiBjb250YWluZXIucGFyZW50Tm9kZSkge1xuICAgICAgICBjb250YWluZXIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChjb250YWluZXIpXG4gICAgICAgIHVwZGF0ZVN0eWxlcygpXG4gICAgICB9XG4gICAgfSwgMzAwKVxuICB9XG5cbiAgUmVhY3RET00ucmVuZGVyKFxuICAgIDxNZXNzYWdlXG4gICAgICByZWY9eyhtZXNzYWdlKSA9PiB7XG4gICAgICAgIGluc3RhbmNlID0gbWVzc2FnZVxuICAgICAgfX1cbiAgICAgIG9uQ2xvc2U9e2Nsb3NlfVxuICAgICAgaW50ZW50PXtpbnRlbnR9XG4gICAgICB7Li4ub3RoZXJQcm9wc31cbiAgICAvPixcbiAgICBjb250YWluZXJcbiAgKVxuXG4gIHJldHVybiB7XG4gICAgZGVzdHJveTogKCkgPT4ge1xuICAgICAgaWYgKGluc3RhbmNlKSB7XG4gICAgICAgIGluc3RhbmNlLmNsb3NlKClcbiAgICAgIH1cbiAgICB9LFxuICB9XG59XG5cbklOVEVOVFMuZm9yRWFjaChcbiAgKGludGVudDogXCJub3JtYWxcIiB8IFwicHJpbWFyeVwiIHwgXCJzdWNjZXNzXCIgfCBcIndhcm5pbmdcIiB8IFwiZGFuZ2VyXCIpID0+IHtcbiAgICBNZXNzYWdlW2ludGVudF0gPSAoY29uZmlnOiBJTWVzc2FnZVByb3BzIHwgc3RyaW5nKSA9PiB7XG4gICAgICBsZXQgY25mZyA9IHsgaW50ZW50IH0gYXMgSU1lc3NhZ2VQcm9wc1xuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgY25mZyA9IHsgY29udGVudDogY29uZmlnLCBpbnRlbnQgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY25mZyA9IGNvbmZpZ1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld0luc3RhbmNlKHtcbiAgICAgICAgLi4uY25mZyxcbiAgICAgICAgaW50ZW50LFxuICAgICAgfSlcbiAgICB9XG4gIH1cbilcblxuZXhwb3J0IGRlZmF1bHQgTWVzc2FnZVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBLE9BQU9BLEtBQUssSUFDVkMsVUFBVSxFQUNWQyxTQUFTLEVBQ1RDLG1CQUFtQixFQUNuQkMsTUFBTSxRQUNELE9BQU87QUFDZCxP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