UNPKG

matrix-react-sdk

Version:
156 lines (147 loc) 23.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties")); var _react = _interopRequireWildcard(require("react")); var _classnames = _interopRequireDefault(require("classnames")); var _compoundWeb = require("@vector-im/compound-web"); var _KeyBindingsManager = require("../../../KeyBindingsManager"); var _KeyboardShortcuts = require("../../../accessibility/KeyboardShortcuts"); const _excluded = ["element", "onClick", "children", "kind", "disabled", "className", "onKeyDown", "onKeyUp", "triggerOnMouseDown", "title", "caption", "placement", "onTooltipOpenChange", "disableTooltip"]; /* Copyright 2024 New Vector Ltd. Copyright 2016 Jani Mustonen SPDX-License-Identifier: AGPL-3.0-only OR GPL-3.0-only Please see LICENSE files in the repository root for full details. */ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (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; } /** * The kind of button, similar to how Bootstrap works. */ /** * This type construct allows us to specifically pass those props down to the element we’re creating that the element * actually supports. * * e.g., if element is set to "a", we’ll support href and target, if it’s set to "input", we support type. * * To remain compatible with existing code, we’ll continue to support InputHTMLAttributes<Element> */ /** * Type of props accepted by {@link AccessibleButton}. * * Extends props accepted by the underlying element specified using the `element` prop. */ /** * Type of the props passed to the element that is rendered by AccessibleButton. */ /** * AccessibleButton is a generic wrapper for any element that should be treated * as a button. Identifies the element as a button, setting proper tab * indexing and keyboard activation behavior. * * If a ref is passed, it will be forwarded to the rendered element as specified using the `element` prop. * * @param {Object} props react element properties * @returns {Object} rendered react */ const AccessibleButton = /*#__PURE__*/(0, _react.forwardRef)(function (_ref, ref) { let { element = "div", onClick, children, kind, disabled, className, onKeyDown, onKeyUp, triggerOnMouseDown, title, caption, placement = "right", onTooltipOpenChange, disableTooltip } = _ref, restProps = (0, _objectWithoutProperties2.default)(_ref, _excluded); const newProps = restProps; newProps["aria-label"] = newProps["aria-label"] ?? title; if (disabled) { newProps["aria-disabled"] = true; newProps["disabled"] = true; } else { if (triggerOnMouseDown) { newProps.onMouseDown = onClick ?? undefined; } else { newProps.onClick = onClick ?? undefined; } // We need to consume enter onKeyDown and space onKeyUp // otherwise we are risking also activating other keyboard focusable elements // that might receive focus as a result of the AccessibleButtonClick action // It's because we are using html buttons at a few places e.g. inside dialogs // And divs which we report as role button to assistive technologies. // Browsers handle space and enter key presses differently and we are only adjusting to the // inconsistencies here newProps.onKeyDown = e => { const action = (0, _KeyBindingsManager.getKeyBindingsManager)().getAccessibilityAction(e); switch (action) { case _KeyboardShortcuts.KeyBindingAction.Enter: e.stopPropagation(); e.preventDefault(); return onClick?.(e); case _KeyboardShortcuts.KeyBindingAction.Space: e.stopPropagation(); e.preventDefault(); break; default: onKeyDown?.(e); } }; newProps.onKeyUp = e => { const action = (0, _KeyBindingsManager.getKeyBindingsManager)().getAccessibilityAction(e); switch (action) { case _KeyboardShortcuts.KeyBindingAction.Enter: e.stopPropagation(); e.preventDefault(); break; case _KeyboardShortcuts.KeyBindingAction.Space: e.stopPropagation(); e.preventDefault(); return onClick?.(e); default: onKeyUp?.(e); break; } }; } // Pass through the ref - used for keyboard shortcut access to some buttons newProps.ref = ref; newProps.className = (0, _classnames.default)("mx_AccessibleButton", className, { mx_AccessibleButton_hasKind: kind, [`mx_AccessibleButton_kind_${kind}`]: kind, mx_AccessibleButton_disabled: disabled }); // React.createElement expects InputHTMLAttributes const button = /*#__PURE__*/_react.default.createElement(element, newProps, children); if (title) { return /*#__PURE__*/_react.default.createElement(_compoundWeb.Tooltip, { description: title, caption: caption, isTriggerInteractive: true, placement: placement, onOpenChange: onTooltipOpenChange, disabled: disableTooltip }, button); } return button; }); // Type assertion required due to forwardRef type workaround in react.d.ts AccessibleButton.defaultProps = { role: "button", tabIndex: 0 }; AccessibleButton.displayName = "AccessibleButton"; var _default = exports.default = AccessibleButton; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfcmVhY3QiLCJfaW50ZXJvcFJlcXVpcmVXaWxkY2FyZCIsInJlcXVpcmUiLCJfY2xhc3NuYW1lcyIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJfY29tcG91bmRXZWIiLCJfS2V5QmluZGluZ3NNYW5hZ2VyIiwiX0tleWJvYXJkU2hvcnRjdXRzIiwiX2V4Y2x1ZGVkIiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiZSIsIldlYWtNYXAiLCJyIiwidCIsIl9fZXNNb2R1bGUiLCJkZWZhdWx0IiwiaGFzIiwiZ2V0IiwibiIsIl9fcHJvdG9fXyIsImEiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsInUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJpIiwic2V0IiwiQWNjZXNzaWJsZUJ1dHRvbiIsImZvcndhcmRSZWYiLCJfcmVmIiwicmVmIiwiZWxlbWVudCIsIm9uQ2xpY2siLCJjaGlsZHJlbiIsImtpbmQiLCJkaXNhYmxlZCIsImNsYXNzTmFtZSIsIm9uS2V5RG93biIsIm9uS2V5VXAiLCJ0cmlnZ2VyT25Nb3VzZURvd24iLCJ0aXRsZSIsImNhcHRpb24iLCJwbGFjZW1lbnQiLCJvblRvb2x0aXBPcGVuQ2hhbmdlIiwiZGlzYWJsZVRvb2x0aXAiLCJyZXN0UHJvcHMiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXMyIiwibmV3UHJvcHMiLCJvbk1vdXNlRG93biIsInVuZGVmaW5lZCIsImFjdGlvbiIsImdldEtleUJpbmRpbmdzTWFuYWdlciIsImdldEFjY2Vzc2liaWxpdHlBY3Rpb24iLCJLZXlCaW5kaW5nQWN0aW9uIiwiRW50ZXIiLCJzdG9wUHJvcGFnYXRpb24iLCJwcmV2ZW50RGVmYXVsdCIsIlNwYWNlIiwiY2xhc3NuYW1lcyIsIm14X0FjY2Vzc2libGVCdXR0b25faGFzS2luZCIsIm14X0FjY2Vzc2libGVCdXR0b25fZGlzYWJsZWQiLCJidXR0b24iLCJSZWFjdCIsImNyZWF0ZUVsZW1lbnQiLCJUb29sdGlwIiwiZGVzY3JpcHRpb24iLCJpc1RyaWdnZXJJbnRlcmFjdGl2ZSIsIm9uT3BlbkNoYW5nZSIsImRlZmF1bHRQcm9wcyIsInJvbGUiLCJ0YWJJbmRleCIsImRpc3BsYXlOYW1lIiwiX2RlZmF1bHQiLCJleHBvcnRzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvdmlld3MvZWxlbWVudHMvQWNjZXNzaWJsZUJ1dHRvbi50c3giXSwic291cmNlc0NvbnRlbnQiOlsiLypcbkNvcHlyaWdodCAyMDI0IE5ldyBWZWN0b3IgTHRkLlxuQ29weXJpZ2h0IDIwMTYgSmFuaSBNdXN0b25lblxuXG5TUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQUdQTC0zLjAtb25seSBPUiBHUEwtMy4wLW9ubHlcblBsZWFzZSBzZWUgTElDRU5TRSBmaWxlcyBpbiB0aGUgcmVwb3NpdG9yeSByb290IGZvciBmdWxsIGRldGFpbHMuXG4gKi9cblxuaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudFByb3BzLCBmb3J3YXJkUmVmLCBGdW5jdGlvbkNvbXBvbmVudCwgSFRNTEF0dHJpYnV0ZXMsIElucHV0SFRNTEF0dHJpYnV0ZXMsIFJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSBcImNsYXNzbmFtZXNcIjtcbmltcG9ydCB7IFRvb2x0aXAgfSBmcm9tIFwiQHZlY3Rvci1pbS9jb21wb3VuZC13ZWJcIjtcblxuaW1wb3J0IHsgZ2V0S2V5QmluZGluZ3NNYW5hZ2VyIH0gZnJvbSBcIi4uLy4uLy4uL0tleUJpbmRpbmdzTWFuYWdlclwiO1xuaW1wb3J0IHsgS2V5QmluZGluZ0FjdGlvbiB9IGZyb20gXCIuLi8uLi8uLi9hY2Nlc3NpYmlsaXR5L0tleWJvYXJkU2hvcnRjdXRzXCI7XG5cbmV4cG9ydCB0eXBlIEJ1dHRvbkV2ZW50ID0gUmVhY3QuTW91c2VFdmVudDxFbGVtZW50PiB8IFJlYWN0LktleWJvYXJkRXZlbnQ8RWxlbWVudD4gfCBSZWFjdC5Gb3JtRXZlbnQ8RWxlbWVudD47XG5cbi8qKlxuICogVGhlIGtpbmQgb2YgYnV0dG9uLCBzaW1pbGFyIHRvIGhvdyBCb290c3RyYXAgd29ya3MuXG4gKi9cbmV4cG9ydCB0eXBlIEFjY2Vzc2libGVCdXR0b25LaW5kID1cbiAgICB8IFwicHJpbWFyeVwiXG4gICAgfCBcInByaW1hcnlfb3V0bGluZVwiXG4gICAgfCBcInByaW1hcnlfc21cIlxuICAgIHwgXCJzZWNvbmRhcnlcIlxuICAgIHwgXCJzZWNvbmRhcnlfY29udGVudFwiXG4gICAgfCBcImNvbnRlbnRfaW5saW5lXCJcbiAgICB8IFwiZGFuZ2VyXCJcbiAgICB8IFwiZGFuZ2VyX291dGxpbmVcIlxuICAgIHwgXCJkYW5nZXJfc21cIlxuICAgIHwgXCJkYW5nZXJfaW5saW5lXCJcbiAgICB8IFwibGlua1wiXG4gICAgfCBcImxpbmtfaW5saW5lXCJcbiAgICB8IFwibGlua19zbVwiXG4gICAgfCBcImNvbmZpcm1fc21cIlxuICAgIHwgXCJjYW5jZWxfc21cIlxuICAgIHwgXCJpY29uXCJcbiAgICB8IFwiaWNvbl9wcmltYXJ5XCJcbiAgICB8IFwiaWNvbl9wcmltYXJ5X291dGxpbmVcIjtcblxuLyoqXG4gKiBUaGlzIHR5cGUgY29uc3RydWN0IGFsbG93cyB1cyB0byBzcGVjaWZpY2FsbHkgcGFzcyB0aG9zZSBwcm9wcyBkb3duIHRvIHRoZSBlbGVtZW50IHdl4oCZcmUgY3JlYXRpbmcgdGhhdCB0aGUgZWxlbWVudFxuICogYWN0dWFsbHkgc3VwcG9ydHMuXG4gKlxuICogZS5nLiwgaWYgZWxlbWVudCBpcyBzZXQgdG8gXCJhXCIsIHdl4oCZbGwgc3VwcG9ydCBocmVmIGFuZCB0YXJnZXQsIGlmIGl04oCZcyBzZXQgdG8gXCJpbnB1dFwiLCB3ZSBzdXBwb3J0IHR5cGUuXG4gKlxuICogVG8gcmVtYWluIGNvbXBhdGlibGUgd2l0aCBleGlzdGluZyBjb2RlLCB3ZeKAmWxsIGNvbnRpbnVlIHRvIHN1cHBvcnQgSW5wdXRIVE1MQXR0cmlidXRlczxFbGVtZW50PlxuICovXG50eXBlIER5bmFtaWNIdG1sRWxlbWVudFByb3BzPFQgZXh0ZW5kcyBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM+ID1cbiAgICBKU1guSW50cmluc2ljRWxlbWVudHNbVF0gZXh0ZW5kcyBIVE1MQXR0cmlidXRlczx7fT4gPyBEeW5hbWljRWxlbWVudFByb3BzPFQ+IDogRHluYW1pY0VsZW1lbnRQcm9wczxcImRpdlwiPjtcbnR5cGUgRHluYW1pY0VsZW1lbnRQcm9wczxUIGV4dGVuZHMga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzPiA9IFBhcnRpYWw8XG4gICAgT21pdDxKU1guSW50cmluc2ljRWxlbWVudHNbVF0sIFwicmVmXCIgfCBcIm9uQ2xpY2tcIiB8IFwib25Nb3VzZURvd25cIiB8IFwib25LZXlVcFwiIHwgXCJvbktleURvd25cIj5cbj4gJlxuICAgIE9taXQ8SW5wdXRIVE1MQXR0cmlidXRlczxFbGVtZW50PiwgXCJvbkNsaWNrXCI+O1xuXG50eXBlIFRvb2x0aXBQcm9wcyA9IENvbXBvbmVudFByb3BzPHR5cGVvZiBUb29sdGlwPjtcblxuLyoqXG4gKiBUeXBlIG9mIHByb3BzIGFjY2VwdGVkIGJ5IHtAbGluayBBY2Nlc3NpYmxlQnV0dG9ufS5cbiAqXG4gKiBFeHRlbmRzIHByb3BzIGFjY2VwdGVkIGJ5IHRoZSB1bmRlcmx5aW5nIGVsZW1lbnQgc3BlY2lmaWVkIHVzaW5nIHRoZSBgZWxlbWVudGAgcHJvcC5cbiAqL1xudHlwZSBQcm9wczxUIGV4dGVuZHMga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzPiA9IER5bmFtaWNIdG1sRWxlbWVudFByb3BzPFQ+ICYge1xuICAgIC8qKlxuICAgICAqIFRoZSBiYXNlIGVsZW1lbnQgdHlwZS4gXCJkaXZcIiBieSBkZWZhdWx0LlxuICAgICAqL1xuICAgIGVsZW1lbnQ/OiBUO1xuICAgIC8qKlxuICAgICAqIFRoZSBraW5kIG9mIGJ1dHRvbiwgc2ltaWxhciB0byBob3cgQm9vdHN0cmFwIHdvcmtzLlxuICAgICAqL1xuICAgIGtpbmQ/OiBBY2Nlc3NpYmxlQnV0dG9uS2luZDtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBidXR0b24gc2hvdWxkIGJlIGRpc2FibGVkLlxuICAgICAqL1xuICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIHRoZSBidXR0b24gc2hvdWxkIHRyaWdnZXIgb24gbW91c2Vkb3duIGV2ZW50IGluc3RlYWQgb2Ygb24gY2xpY2sgZXZlbnQuIERlZmF1bHRzIHRvIGZhbHNlIChjbGljayBldmVudCkuXG4gICAgICovXG4gICAgdHJpZ2dlck9uTW91c2VEb3duPzogYm9vbGVhbjtcbiAgICAvKipcbiAgICAgKiBFdmVudCBoYW5kbGVyIGZvciBidXR0b24gYWN0aXZhdGlvbi4gU2hvdWxkIGJlIGltcGxlbWVudGVkIGV4YWN0bHkgbGlrZSBhIG5vcm1hbCBgb25DbGlja2AgaGFuZGxlci5cbiAgICAgKi9cbiAgICBvbkNsaWNrOiAoKGU6IEJ1dHRvbkV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikgfCBudWxsO1xuICAgIC8qKlxuICAgICAqIFRoZSB0b29sdGlwIHRvIHNob3cgb24gaG92ZXIgb3IgZm9jdXMuXG4gICAgICovXG4gICAgdGl0bGU/OiBUb29sdGlwUHJvcHNbXCJsYWJlbFwiXTtcbiAgICAvKipcbiAgICAgKiBUaGUgY2FwdGlvbiBpcyBhIHNlY29uZGFyeSB0ZXh0IGRpc3BsYXllZCB1bmRlciB0aGUgYHRpdGxlYCBvZiB0aGUgdG9vbHRpcC5cbiAgICAgKiBPbmx5IHZhbGlkIHdoZW4gdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGB0aXRsZWAuXG4gICAgICovXG4gICAgY2FwdGlvbj86IFRvb2x0aXBQcm9wc1tcImNhcHRpb25cIl07XG4gICAgLyoqXG4gICAgICogVGhlIHBsYWNlbWVudCBvZiB0aGUgdG9vbHRpcC5cbiAgICAgKi9cbiAgICBwbGFjZW1lbnQ/OiBUb29sdGlwUHJvcHNbXCJwbGFjZW1lbnRcIl07XG4gICAgLyoqXG4gICAgICogQ2FsbGJhY2sgZm9yIHdoZW4gdGhlIHRvb2x0aXAgaXMgb3BlbmVkIG9yIGNsb3NlZC5cbiAgICAgKi9cbiAgICBvblRvb2x0aXBPcGVuQ2hhbmdlPzogVG9vbHRpcFByb3BzW1wib25PcGVuQ2hhbmdlXCJdO1xuXG4gICAgLyoqXG4gICAgICogV2hldGhlciB0aGUgdG9vbHRpcCBzaG91bGQgYmUgZGlzYWJsZWQuXG4gICAgICovXG4gICAgZGlzYWJsZVRvb2x0aXA/OiBUb29sdGlwUHJvcHNbXCJkaXNhYmxlZFwiXTtcbn07XG5cbmV4cG9ydCB0eXBlIEJ1dHRvblByb3BzPFQgZXh0ZW5kcyBrZXlvZiBKU1guSW50cmluc2ljRWxlbWVudHM+ID0gUHJvcHM8VD47XG5cbi8qKlxuICogVHlwZSBvZiB0aGUgcHJvcHMgcGFzc2VkIHRvIHRoZSBlbGVtZW50IHRoYXQgaXMgcmVuZGVyZWQgYnkgQWNjZXNzaWJsZUJ1dHRvbi5cbiAqL1xuaW50ZXJmYWNlIFJlbmRlcmVkRWxlbWVudFByb3BzIGV4dGVuZHMgUmVhY3QuSW5wdXRIVE1MQXR0cmlidXRlczxFbGVtZW50PiB7XG4gICAgcmVmPzogUmVhY3QuUmVmPEVsZW1lbnQ+O1xufVxuXG4vKipcbiAqIEFjY2Vzc2libGVCdXR0b24gaXMgYSBnZW5lcmljIHdyYXBwZXIgZm9yIGFueSBlbGVtZW50IHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWRcbiAqIGFzIGEgYnV0dG9uLiAgSWRlbnRpZmllcyB0aGUgZWxlbWVudCBhcyBhIGJ1dHRvbiwgc2V0dGluZyBwcm9wZXIgdGFiXG4gKiBpbmRleGluZyBhbmQga2V5Ym9hcmQgYWN0aXZhdGlvbiBiZWhhdmlvci5cbiAqXG4gKiBJZiBhIHJlZiBpcyBwYXNzZWQsIGl0IHdpbGwgYmUgZm9yd2FyZGVkIHRvIHRoZSByZW5kZXJlZCBlbGVtZW50IGFzIHNwZWNpZmllZCB1c2luZyB0aGUgYGVsZW1lbnRgIHByb3AuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHByb3BzICByZWFjdCBlbGVtZW50IHByb3BlcnRpZXNcbiAqIEByZXR1cm5zIHtPYmplY3R9IHJlbmRlcmVkIHJlYWN0XG4gKi9cbmNvbnN0IEFjY2Vzc2libGVCdXR0b24gPSBmb3J3YXJkUmVmKGZ1bmN0aW9uIDxUIGV4dGVuZHMga2V5b2YgSlNYLkludHJpbnNpY0VsZW1lbnRzPihcbiAgICB7XG4gICAgICAgIGVsZW1lbnQgPSBcImRpdlwiIGFzIFQsXG4gICAgICAgIG9uQ2xpY2ssXG4gICAgICAgIGNoaWxkcmVuLFxuICAgICAgICBraW5kLFxuICAgICAgICBkaXNhYmxlZCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBvbktleURvd24sXG4gICAgICAgIG9uS2V5VXAsXG4gICAgICAgIHRyaWdnZXJPbk1vdXNlRG93bixcbiAgICAgICAgdGl0bGUsXG4gICAgICAgIGNhcHRpb24sXG4gICAgICAgIHBsYWNlbWVudCA9IFwicmlnaHRcIixcbiAgICAgICAgb25Ub29sdGlwT3BlbkNoYW5nZSxcbiAgICAgICAgZGlzYWJsZVRvb2x0aXAsXG4gICAgICAgIC4uLnJlc3RQcm9wc1xuICAgIH06IFByb3BzPFQ+LFxuICAgIHJlZjogUmVmPEhUTUxFbGVtZW50Pixcbik6IEpTWC5FbGVtZW50IHtcbiAgICBjb25zdCBuZXdQcm9wczogUmVuZGVyZWRFbGVtZW50UHJvcHMgPSByZXN0UHJvcHM7XG4gICAgbmV3UHJvcHNbXCJhcmlhLWxhYmVsXCJdID0gbmV3UHJvcHNbXCJhcmlhLWxhYmVsXCJdID8/IHRpdGxlO1xuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICBuZXdQcm9wc1tcImFyaWEtZGlzYWJsZWRcIl0gPSB0cnVlO1xuICAgICAgICBuZXdQcm9wc1tcImRpc2FibGVkXCJdID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBpZiAodHJpZ2dlck9uTW91c2VEb3duKSB7XG4gICAgICAgICAgICBuZXdQcm9wcy5vbk1vdXNlRG93biA9IG9uQ2xpY2sgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbmV3UHJvcHMub25DbGljayA9IG9uQ2xpY2sgPz8gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICAgIC8vIFdlIG5lZWQgdG8gY29uc3VtZSBlbnRlciBvbktleURvd24gYW5kIHNwYWNlIG9uS2V5VXBcbiAgICAgICAgLy8gb3RoZXJ3aXNlIHdlIGFyZSByaXNraW5nIGFsc28gYWN0aXZhdGluZyBvdGhlciBrZXlib2FyZCBmb2N1c2FibGUgZWxlbWVudHNcbiAgICAgICAgLy8gdGhhdCBtaWdodCByZWNlaXZlIGZvY3VzIGFzIGEgcmVzdWx0IG9mIHRoZSBBY2Nlc3NpYmxlQnV0dG9uQ2xpY2sgYWN0aW9uXG4gICAgICAgIC8vIEl0J3MgYmVjYXVzZSB3ZSBhcmUgdXNpbmcgaHRtbCBidXR0b25zIGF0IGEgZmV3IHBsYWNlcyBlLmcuIGluc2lkZSBkaWFsb2dzXG4gICAgICAgIC8vIEFuZCBkaXZzIHdoaWNoIHdlIHJlcG9ydCBhcyByb2xlIGJ1dHRvbiB0byBhc3Npc3RpdmUgdGVjaG5vbG9naWVzLlxuICAgICAgICAvLyBCcm93c2VycyBoYW5kbGUgc3BhY2UgYW5kIGVudGVyIGtleSBwcmVzc2VzIGRpZmZlcmVudGx5IGFuZCB3ZSBhcmUgb25seSBhZGp1c3RpbmcgdG8gdGhlXG4gICAgICAgIC8vIGluY29uc2lzdGVuY2llcyBoZXJlXG4gICAgICAgIG5ld1Byb3BzLm9uS2V5RG93biA9IChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBnZXRLZXlCaW5kaW5nc01hbmFnZXIoKS5nZXRBY2Nlc3NpYmlsaXR5QWN0aW9uKGUpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgS2V5QmluZGluZ0FjdGlvbi5FbnRlcjpcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb25DbGljaz8uKGUpO1xuICAgICAgICAgICAgICAgIGNhc2UgS2V5QmluZGluZ0FjdGlvbi5TcGFjZTpcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBvbktleURvd24/LihlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgbmV3UHJvcHMub25LZXlVcCA9IChlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBnZXRLZXlCaW5kaW5nc01hbmFnZXIoKS5nZXRBY2Nlc3NpYmlsaXR5QWN0aW9uKGUpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICAgICAgICAgIGNhc2UgS2V5QmluZGluZ0FjdGlvbi5FbnRlcjpcbiAgICAgICAgICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICAgICAgICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICBjYXNlIEtleUJpbmRpbmdBY3Rpb24uU3BhY2U6XG4gICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG9uQ2xpY2s/LihlKTtcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICBvbktleVVwPy4oZSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIFBhc3MgdGhyb3VnaCB0aGUgcmVmIC0gdXNlZCBmb3Iga2V5Ym9hcmQgc2hvcnRjdXQgYWNjZXNzIHRvIHNvbWUgYnV0dG9uc1xuICAgIG5ld1Byb3BzLnJlZiA9IHJlZjtcblxuICAgIG5ld1Byb3BzLmNsYXNzTmFtZSA9IGNsYXNzbmFtZXMoXCJteF9BY2Nlc3NpYmxlQnV0dG9uXCIsIGNsYXNzTmFtZSwge1xuICAgICAgICBteF9BY2Nlc3NpYmxlQnV0dG9uX2hhc0tpbmQ6IGtpbmQsXG4gICAgICAgIFtgbXhfQWNjZXNzaWJsZUJ1dHRvbl9raW5kXyR7a2luZH1gXToga2luZCxcbiAgICAgICAgbXhfQWNjZXNzaWJsZUJ1dHRvbl9kaXNhYmxlZDogZGlzYWJsZWQsXG4gICAgfSk7XG5cbiAgICAvLyBSZWFjdC5jcmVhdGVFbGVtZW50IGV4cGVjdHMgSW5wdXRIVE1MQXR0cmlidXRlc1xuICAgIGNvbnN0IGJ1dHRvbiA9IFJlYWN0LmNyZWF0ZUVsZW1lbnQoZWxlbWVudCwgbmV3UHJvcHMsIGNoaWxkcmVuKTtcblxuICAgIGlmICh0aXRsZSkge1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPFRvb2x0aXBcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbj17dGl0bGV9XG4gICAgICAgICAgICAgICAgY2FwdGlvbj17Y2FwdGlvbn1cbiAgICAgICAgICAgICAgICBpc1RyaWdnZXJJbnRlcmFjdGl2ZT17dHJ1ZX1cbiAgICAgICAgICAgICAgICBwbGFjZW1lbnQ9e3BsYWNlbWVudH1cbiAgICAgICAgICAgICAgICBvbk9wZW5DaGFuZ2U9e29uVG9vbHRpcE9wZW5DaGFuZ2V9XG4gICAgICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVUb29sdGlwfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtidXR0b259XG4gICAgICAgICAgICA8L1Rvb2x0aXA+XG4gICAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBidXR0b247XG59KTtcblxuLy8gVHlwZSBhc3NlcnRpb24gcmVxdWlyZWQgZHVlIHRvIGZvcndhcmRSZWYgdHlwZSB3b3JrYXJvdW5kIGluIHJlYWN0LmQudHNcbihBY2Nlc3NpYmxlQnV0dG9uIGFzIEZ1bmN0aW9uQ29tcG9uZW50KS5kZWZhdWx0UHJvcHMgPSB7XG4gICAgcm9sZTogXCJidXR0b25cIixcbiAgICB0YWJJbmRleDogMCxcbn07XG4oQWNjZXNzaWJsZUJ1dHRvbiBhcyBGdW5jdGlvbkNvbXBvbmVudCkuZGlzcGxheU5hbWUgPSBcIkFjY2Vzc2libGVCdXR0b25cIjtcblxuZXhwb3J0IGRlZmF1bHQgQWNjZXNzaWJsZUJ1dHRvbjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFRQSxJQUFBQSxNQUFBLEdBQUFDLHVCQUFBLENBQUFDLE9BQUE7QUFDQSxJQUFBQyxXQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxZQUFBLEdBQUFILE9BQUE7QUFFQSxJQUFBSSxtQkFBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssa0JBQUEsR0FBQUwsT0FBQTtBQUE0RSxNQUFBTSxTQUFBO0FBYjVFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBTkEsU0FBQUMseUJBQUFDLENBQUEsNkJBQUFDLE9BQUEsbUJBQUFDLENBQUEsT0FBQUQsT0FBQSxJQUFBRSxDQUFBLE9BQUFGLE9BQUEsWUFBQUYsd0JBQUEsWUFBQUEsQ0FBQUMsQ0FBQSxXQUFBQSxDQUFBLEdBQUFHLENBQUEsR0FBQUQsQ0FBQSxLQUFBRixDQUFBO0FBQUEsU0FBQVQsd0JBQUFTLENBQUEsRUFBQUUsQ0FBQSxTQUFBQSxDQUFBLElBQUFGLENBQUEsSUFBQUEsQ0FBQSxDQUFBSSxVQUFBLFNBQUFKLENBQUEsZUFBQUEsQ0FBQSx1QkFBQUEsQ0FBQSx5QkFBQUEsQ0FBQSxXQUFBSyxPQUFBLEVBQUFMLENBQUEsUUFBQUcsQ0FBQSxHQUFBSix3QkFBQSxDQUFBRyxDQUFBLE9BQUFDLENBQUEsSUFBQUEsQ0FBQSxDQUFBRyxHQUFBLENBQUFOLENBQUEsVUFBQUcsQ0FBQSxDQUFBSSxHQUFBLENBQUFQLENBQUEsT0FB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