UNPKG

react-lightning-design-components

Version:

Salesforce Lightning Design System components built with React 16

323 lines (274 loc) 28.8 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties'); var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2); var _getPrototypeOf = require('babel-runtime/core-js/object/get-prototype-of'); var _getPrototypeOf2 = _interopRequireDefault(_getPrototypeOf); var _classCallCheck2 = require('babel-runtime/helpers/classCallCheck'); var _classCallCheck3 = _interopRequireDefault(_classCallCheck2); var _createClass2 = require('babel-runtime/helpers/createClass'); var _createClass3 = _interopRequireDefault(_createClass2); var _possibleConstructorReturn2 = require('babel-runtime/helpers/possibleConstructorReturn'); var _possibleConstructorReturn3 = _interopRequireDefault(_possibleConstructorReturn2); var _inherits2 = require('babel-runtime/helpers/inherits'); var _inherits3 = _interopRequireDefault(_inherits2); var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _reactDom = require('react-dom'); var _reactDom2 = _interopRequireDefault(_reactDom); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); var _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _Button = require('./Button'); var _Button2 = _interopRequireDefault(_Button); var _DropdownMenu = require('./DropdownMenu'); var _DropdownMenu2 = _interopRequireDefault(_DropdownMenu); var _util = require('./util'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var DropdownButton = function (_Component) { (0, _inherits3.default)(DropdownButton, _Component); function DropdownButton(props) { (0, _classCallCheck3.default)(this, DropdownButton); var _this = (0, _possibleConstructorReturn3.default)(this, (DropdownButton.__proto__ || (0, _getPrototypeOf2.default)(DropdownButton)).call(this, props)); _this.state = { opened: false }; _this.currentWidth = 0; (0, _util.registerStyle)('no-hover-popup', [['.slds-dropdown-trigger:hover .slds-dropdown--menu.react-slds-no-hover-popup', '{ visibility: hidden; opacity: 0; }'], ['.slds-dropdown-trigger.react-slds-dropdown-opened .slds-dropdown--menu', '{ visibility: visible !important; opacity: 1 !important; }']]); _this.triggerRef = _this.triggerRef.bind(_this); _this.dropdownRef = _this.dropdownRef.bind(_this); return _this; } (0, _createClass3.default)(DropdownButton, [{ key: 'onBlur', value: function onBlur() { var _this2 = this; setTimeout(function () { if (!_this2.isFocusedInComponent()) { _this2.setState({ opened: false }); if (_this2.props.onBlur) { _this2.props.onBlur(); } } }, 10); } }, { key: 'onKeyDown', value: function onKeyDown(e) { var _this3 = this; if (e.keyCode === 40) { // down e.preventDefault(); e.stopPropagation(); if (!this.state.opened) { this.setState({ opened: true }); if (this.props.onClick) { this.props.onClick(e); } setTimeout(function () { _this3.focusToTargetItemEl(); }, 20); } else { this.focusToTargetItemEl(); } } else if (e.keyCode === 27) { // ESC e.preventDefault(); e.stopPropagation(); this.setState({ opened: false }); } } }, { key: 'onTriggerClick', value: function onTriggerClick() { if (this.props.inheritWidth) { this.currentWidth = this.getCurrentWidth(); } var triggerElem = _reactDom2.default.findDOMNode(this.trigger); if (triggerElem !== document.activeElement) triggerElem.focus(); if (!this.props.hoverPopup) { this.setState({ opened: !this.state.opened }); } if (this.props.onClick) { var _props; (_props = this.props).onClick.apply(_props, arguments); } } }, { key: 'onMenuItemClick', value: function onMenuItemClick() { var _this4 = this; if (!this.props.hoverPopup) { setTimeout(function () { var triggerElem = _reactDom2.default.findDOMNode(_this4.trigger); if (triggerElem) triggerElem.focus(); if (triggerElem) _this4.setState({ opened: false }); if (_this4.props.focusOnInput) _this4.props.focusOnInput(); }, 10); } if (this.props.onMenuItemClick) { var _props2; (_props2 = this.props).onMenuItemClick.apply(_props2, arguments); } } }, { key: 'onMenuClose', value: function onMenuClose() { var triggerElem = _reactDom2.default.findDOMNode(this.trigger); triggerElem.focus(); this.setState({ opened: false }); } }, { key: 'getCurrentWidth', value: function getCurrentWidth() { var htmlElemnt = _reactDom2.default.findDOMNode(this) || {}; return htmlElemnt.offsetWidth || 0; } }, { key: 'isFocusedInComponent', value: function isFocusedInComponent() { var rootEl = _reactDom2.default.findDOMNode(this); var targetEl = document.activeElement; while (targetEl && targetEl !== rootEl) { targetEl = targetEl.parentNode; } return !!targetEl; } }, { key: 'focusToTargetItemEl', value: function focusToTargetItemEl() { var dropdownEl = _reactDom2.default.findDOMNode(this.dropdown); var firstItemEl = dropdownEl.querySelector('.slds-is-selected > .react-slds-menuitem[tabIndex]') || dropdownEl.querySelector('.react-slds-menuitem[tabIndex]'); if (firstItemEl) { firstItemEl.focus(); } } }, { key: 'triggerRef', value: function triggerRef(ref) { this.trigger = ref; } }, { key: 'dropdownRef', value: function dropdownRef(ref) { this.dropdown = ref; } }, { key: 'renderButton', value: function renderButton(_ref) { var grouped = _ref.grouped, isFirstInGroup = _ref.isFirstInGroup, isLastInGroup = _ref.isLastInGroup, props = (0, _objectWithoutProperties3.default)(_ref, ['grouped', 'isFirstInGroup', 'isLastInGroup']); var pprops = (0, _extends3.default)({}, props); delete pprops.onMenuItemClick; delete pprops.inheritWidth; delete pprops.focusOnInput; var button = _react2.default.createElement(_Button2.default, (0, _extends3.default)({}, pprops, { 'aria-haspopup': true, ref: this.triggerRef, onClick: this.onTriggerClick.bind(this), onKeyDown: this.onKeyDown.bind(this), onBlur: this.onBlur.bind(this) })); if (grouped) { var noneStyle = { display: 'none' }; return _react2.default.createElement( 'div', { className: 'slds-button-group' }, isFirstInGroup ? null : _react2.default.createElement('button', { className: 'slds-button', style: noneStyle }), button, isLastInGroup ? null : _react2.default.createElement('button', { className: 'slds-button', style: noneStyle }) ); } return button; } }, { key: 'render', value: function render() { var _props3 = this.props, inheritWidth = _props3.inheritWidth, className = _props3.className, listClassName = _props3.listClassName, menuClassName = _props3.menuClassName, _props3$menuAlign = _props3.menuAlign, menuAlign = _props3$menuAlign === undefined ? 'left' : _props3$menuAlign, menuSize = _props3.menuSize, nubbinTop = _props3.nubbinTop, hoverPopup = _props3.hoverPopup, menuHeader = _props3.menuHeader, type = _props3.type, label = _props3.label, children = _props3.children, backgroundColor = _props3.backgroundColor, keyCodesToCloseMenu = _props3.keyCodesToCloseMenu, props = (0, _objectWithoutProperties3.default)(_props3, ['inheritWidth', 'className', 'listClassName', 'menuClassName', 'menuAlign', 'menuSize', 'nubbinTop', 'hoverPopup', 'menuHeader', 'type', 'label', 'children', 'backgroundColor', 'keyCodesToCloseMenu']); var icon = this.props.icon; var dropdownClassNames = (0, _classnames2.default)(className, 'slds-dropdown-trigger', { 'slds-button-space-left': !props.grouped, 'react-slds-dropdown-opened': this.state.opened }); var iconMore = null; if (!label && !icon) { icon = 'down'; } if (label || type === 'icon-more') { iconMore = 'down'; } return _react2.default.createElement( 'div', { className: dropdownClassNames, style: { backgroundColor: backgroundColor } }, this.renderButton((0, _extends3.default)({ type: type, label: label, icon: icon, iconMore: iconMore }, props)), _react2.default.createElement( _DropdownMenu2.default, { className: menuClassName, listClassName: listClassName, align: menuAlign, minWidth: inheritWidth ? this.currentWidth : 0, header: menuHeader, size: menuSize, nubbinTop: nubbinTop, hoverPopup: hoverPopup, ref: this.dropdownRef, onMenuItemClick: this.onMenuItemClick.bind(this), onMenuClose: this.onMenuClose.bind(this), onBlur: this.onBlur.bind(this), keyCodesToCloseMenu: keyCodesToCloseMenu }, children ) ); } }]); return DropdownButton; }(_react.Component); exports.default = DropdownButton; DropdownButton.propTypes = { className: _propTypes2.default.string, listClassName: _propTypes2.default.string, menuClassName: _propTypes2.default.string, label: _propTypes2.default.node, type: _propTypes2.default.string, icon: _propTypes2.default.string, menuAlign: _propTypes2.default.oneOf(['left', 'center', 'right']), menuSize: _propTypes2.default.oneOf(['small', 'medium', 'large']), menuHeader: _propTypes2.default.string, nubbinTop: _propTypes2.default.bool, hoverPopup: _propTypes2.default.bool, onBlur: _propTypes2.default.func, onClick: _propTypes2.default.func, onMenuItemClick: _propTypes2.default.func, grouped: _propTypes2.default.bool, isFirstInGroup: _propTypes2.default.bool, isLastInGroup: _propTypes2.default.bool, children: _propTypes2.default.node, inheritWidth: _propTypes2.default.bool, backgroundColor: _propTypes2.default.string, focusOnInput: _propTypes2.default.func, keyCodesToCloseMenu: _propTypes2.default.arrayOf(_propTypes2.default.number) }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL0Ryb3Bkb3duQnV0dG9uLmpzIl0sIm5hbWVzIjpbIkRyb3Bkb3duQnV0dG9uIiwicHJvcHMiLCJzdGF0ZSIsIm9wZW5lZCIsImN1cnJlbnRXaWR0aCIsInRyaWdnZXJSZWYiLCJiaW5kIiwiZHJvcGRvd25SZWYiLCJzZXRUaW1lb3V0IiwiaXNGb2N1c2VkSW5Db21wb25lbnQiLCJzZXRTdGF0ZSIsIm9uQmx1ciIsImUiLCJrZXlDb2RlIiwicHJldmVudERlZmF1bHQiLCJzdG9wUHJvcGFnYXRpb24iLCJvbkNsaWNrIiwiZm9jdXNUb1RhcmdldEl0ZW1FbCIsImluaGVyaXRXaWR0aCIsImdldEN1cnJlbnRXaWR0aCIsInRyaWdnZXJFbGVtIiwiZmluZERPTU5vZGUiLCJ0cmlnZ2VyIiwiZG9jdW1lbnQiLCJhY3RpdmVFbGVtZW50IiwiZm9jdXMiLCJob3ZlclBvcHVwIiwiZm9jdXNPbklucHV0Iiwib25NZW51SXRlbUNsaWNrIiwiaHRtbEVsZW1udCIsIm9mZnNldFdpZHRoIiwicm9vdEVsIiwidGFyZ2V0RWwiLCJwYXJlbnROb2RlIiwiZHJvcGRvd25FbCIsImRyb3Bkb3duIiwiZmlyc3RJdGVtRWwiLCJxdWVyeVNlbGVjdG9yIiwicmVmIiwiZ3JvdXBlZCIsImlzRmlyc3RJbkdyb3VwIiwiaXNMYXN0SW5Hcm91cCIsInBwcm9wcyIsImJ1dHRvbiIsIm9uVHJpZ2dlckNsaWNrIiwib25LZXlEb3duIiwibm9uZVN0eWxlIiwiZGlzcGxheSIsImNsYXNzTmFtZSIsImxpc3RDbGFzc05hbWUiLCJtZW51Q2xhc3NOYW1lIiwibWVudUFsaWduIiwibWVudVNpemUiLCJudWJiaW5Ub3AiLCJtZW51SGVhZGVyIiwidHlwZSIsImxhYmVsIiwiY2hpbGRyZW4iLCJiYWNrZ3JvdW5kQ29sb3IiLCJrZXlDb2Rlc1RvQ2xvc2VNZW51IiwiaWNvbiIsImRyb3Bkb3duQ2xhc3NOYW1lcyIsImljb25Nb3JlIiwicmVuZGVyQnV0dG9uIiwib25NZW51Q2xvc2UiLCJwcm9wVHlwZXMiLCJzdHJpbmciLCJub2RlIiwib25lT2YiLCJib29sIiwiZnVuYyIsImFycmF5T2YiLCJudW1iZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztJQUVxQkEsYzs7O0FBQ25CLDBCQUFZQyxLQUFaLEVBQW1CO0FBQUE7O0FBQUEsc0pBQ1hBLEtBRFc7O0FBRWpCLFVBQUtDLEtBQUwsR0FBYSxFQUFFQyxRQUFRLEtBQVYsRUFBYjtBQUNBLFVBQUtDLFlBQUwsR0FBb0IsQ0FBcEI7QUFDQSw2QkFBYyxnQkFBZCxFQUFnQyxDQUM5QixDQUNFLDZFQURGLEVBRUUscUNBRkYsQ0FEOEIsRUFLOUIsQ0FDRSx3RUFERixFQUVFLDREQUZGLENBTDhCLENBQWhDOztBQVdBLFVBQUtDLFVBQUwsR0FBa0IsTUFBS0EsVUFBTCxDQUFnQkMsSUFBaEIsT0FBbEI7QUFDQSxVQUFLQyxXQUFMLEdBQW1CLE1BQUtBLFdBQUwsQ0FBaUJELElBQWpCLE9BQW5CO0FBaEJpQjtBQWlCbEI7Ozs7NkJBRVE7QUFBQTs7QUFDUEUsaUJBQVcsWUFBTTtBQUNmLFlBQUksQ0FBQyxPQUFLQyxvQkFBTCxFQUFMLEVBQWtDO0FBQ2hDLGlCQUFLQyxRQUFMLENBQWMsRUFBRVAsUUFBUSxLQUFWLEVBQWQ7QUFDQSxjQUFJLE9BQUtGLEtBQUwsQ0FBV1UsTUFBZixFQUF1QjtBQUNyQixtQkFBS1YsS0FBTCxDQUFXVSxNQUFYO0FBQ0Q7QUFDRjtBQUNGLE9BUEQsRUFPRyxFQVBIO0FBUUQ7Ozs4QkFFU0MsQyxFQUFHO0FBQUE7O0FBQ1gsVUFBSUEsRUFBRUMsT0FBRixLQUFjLEVBQWxCLEVBQXNCO0FBQUU7QUFDdEJELFVBQUVFLGNBQUY7QUFDQUYsVUFBRUcsZUFBRjtBQUNBLFlBQUksQ0FBQyxLQUFLYixLQUFMLENBQVdDLE1BQWhCLEVBQXdCO0FBQ3RCLGVBQUtP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NUIsaUJBQWUsb0JBQVU0QixJQWpCQTtBQWtCekJaLFlBQVUsb0JBQVVVLElBbEJLO0FBbUJ6QmpELGdCQUFjLG9CQUFVbUQsSUFuQkM7QUFvQnpCWCxtQkFBaUIsb0JBQVVRLE1BcEJGO0FBcUJ6QnZDLGdCQUFjLG9CQUFVMkMsSUFyQkM7QUFzQnpCWCx1QkFBcUIsb0JBQVVZLE9BQVYsQ0FBa0Isb0JBQVVDLE1BQTVCO0FBdEJJLENBQTNCIiwiZmlsZSI6IkRyb3Bkb3duQnV0dG9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0LCB7IENvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbGFzc25hbWVzIGZyb20gJ2NsYXNzbmFtZXMnO1xuaW1wb3J0IEJ1dHRvbiBmcm9tICcuL0J1dHRvbic7XG5pbXBvcnQgRHJvcGRvd25NZW51IGZyb20gJy4vRHJvcGRvd25NZW51JztcbmltcG9ydCB7IHJlZ2lzdGVyU3R5bGUgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEcm9wZG93bkJ1dHRvbiBleHRlbmRzIENvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKHByb3BzKSB7XG4gICAgc3VwZXIocHJvcHMpO1xuICAgIHRoaXMuc3RhdGUgPSB7IG9wZW5lZDogZmFsc2UgfTtcbiAgICB0aGlzLmN1cnJlbnRXaWR0aCA9IDA7XG4gICAgcmVnaXN0ZXJTdHlsZSgnbm8taG92ZXItcG9wdXAnLCBbXG4gICAgICBbXG4gICAgICAgICcuc2xkcy1kcm9wZG93bi10cmlnZ2VyOmhvdmVyIC5zbGRzLWRyb3Bkb3duLS1tZW51LnJlYWN0LXNsZHMtbm8taG92ZXItcG9wdXAnLFxuICAgICAgICAneyB2aXNpYmlsaXR5OiBoaWRkZW47IG9wYWNpdHk6IDA7IH0nLFxuICAgICAgXSxcbiAgICAgIFtcbiAgICAgICAgJy5zbGRzLWRyb3Bkb3duLXRyaWdnZXIucmVhY3Qtc2xkcy1kcm9wZG93bi1vcGVuZWQgLnNsZHMtZHJvcGRvd24tLW1lbnUnLFxuICAgICAgICAneyB2aXNpYmlsaXR5OiB2aXNpYmxlICFpbXBvcnRhbnQ7IG9wYWNpdHk6IDEgIWltcG9ydGFudDsgfScsXG4gICAgICBdLFxuICAgIF0pO1xuXG4gICAgdGhpcy50cmlnZ2VyUmVmID0gdGhpcy50cmlnZ2VyUmVmLmJpbmQodGhpcyk7XG4gICAgdGhpcy5kcm9wZG93blJlZiA9IHRoaXMuZHJvcGRvd25SZWYuYmluZCh0aGlzKTtcbiAgfVxuXG4gIG9uQmx1cigpIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmICghdGhpcy5pc0ZvY3VzZWRJbkNvbXBvbmVudCgpKSB7XG4gICAgICAgIHRoaXMuc2V0U3RhdGUoeyBvcGVuZWQ6IGZhbHNlIH0pO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkJsdXIpIHtcbiAgICAgICAgICB0aGlzLnByb3BzLm9uQmx1cigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSwgMTApO1xuICB9XG5cbiAgb25LZXlEb3duKGUpIHtcbiAgICBpZiAoZS5rZXlDb2RlID09PSA0MCkgeyAvLyBkb3duXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgaWYgKCF0aGlzLnN0YXRlLm9wZW5lZCkge1xuICAgICAgICB0aGlzLnNldFN0YXRlKHsgb3BlbmVkOiB0cnVlIH0pO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICAgICAgdGhpcy5wcm9wcy5vbkNsaWNrKGUpO1xuICAgICAgICB9XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZm9jdXNUb1RhcmdldEl0ZW1FbCgpO1xuICAgICAgICB9LCAyMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvY3VzVG9UYXJnZXRJdGVtRWwoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGUua2V5Q29kZSA9PT0gMjcpIHsgLy8gRVNDXG4gICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IG9wZW5lZDogZmFsc2UgfSk7XG4gICAgfVxuICB9XG5cbiAgb25UcmlnZ2VyQ2xpY2soLi4uYXJncykge1xuICAgIGlmICh0aGlzLnByb3BzLmluaGVyaXRXaWR0aCkge1xuICAgICAgdGhpcy5jdXJyZW50V2lkdGggPSB0aGlzLmdldEN1cnJlbnRXaWR0aCgpO1xuICAgIH1cblxuICAgIGNvbnN0IHRyaWdnZXJFbGVtID0gUmVhY3RET00uZmluZERPTU5vZGUodGhpcy50cmlnZ2VyKTtcbiAgICBpZiAodHJpZ2dlckVsZW0gIT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpIHRyaWdnZXJFbGVtLmZvY3VzKCk7XG5cbiAgICBpZiAoIXRoaXMucHJvcHMuaG92ZXJQb3B1cCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZSh7IG9wZW5lZDogIXRoaXMuc3RhdGUub3BlbmVkIH0pO1xuICAgIH1cbiAgICBpZiAodGhpcy5wcm9wcy5vbkNsaWNrKSB7XG4gICAgICB0aGlzLnByb3BzLm9uQ2xpY2soLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgb25NZW51SXRlbUNsaWNrKC4uLmFyZ3MpIHtcbiAgICBpZiAoIXRoaXMucHJvcHMuaG92ZXJQb3B1cCkge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHRyaWdnZXJFbGVtID0gUmVhY3RET00uZmluZERPTU5vZGUodGhpcy50cmlnZ2VyKTtcbiAgICAgICAgaWYgKHRyaWdnZXJFbGVtKSB0cmlnZ2VyRWxlbS5mb2N1cygpO1xuICAgICAgICBpZiAodHJpZ2dlckVsZW0pIHRoaXMuc2V0U3RhdGUoeyBvcGVuZWQ6IGZhbHNlIH0pO1xuICAgICAgICBpZiAodGhpcy5wcm9wcy5mb2N1c09uSW5wdXQpIHRoaXMucHJvcHMuZm9jdXNPbklucHV0KCk7XG4gICAgICB9LCAxMCk7XG4gICAgfVxuICAgIGlmICh0aGlzLnByb3BzLm9uTWVudUl0ZW1DbGljaykge1xuICAgICAgdGhpcy5wcm9wcy5vbk1lbnVJdGVtQ2xpY2soLi4uYXJncyk7XG4gICAgfVxuICB9XG5cbiAgb25NZW51Q2xvc2UoKSB7XG4gICAgY29uc3QgdHJpZ2dlckVsZW0gPSBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzLnRyaWdnZXIpO1xuICAgIHRyaWdnZXJFbGVtLmZvY3VzKCk7XG4gICAgdGhpcy5zZXRTdGF0ZSh7IG9wZW5lZDogZmFsc2UgfSk7XG4gIH1cblxuICBnZXRDdXJyZW50V2lkdGgoKSB7XG4gICAgY29uc3QgaHRtbEVsZW1udCA9IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpIHx8IHt9O1xuICAgIHJldHVybiBodG1sRWxlbW50Lm9mZnNldFdpZHRoIHx8IDA7XG4gIH1cblxuICBpc0ZvY3VzZWRJbkNvbXBvbmVudCgpIHtcbiAgICBjb25zdCByb290RWwgPSBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTtcbiAgICBsZXQgdGFyZ2V0RWwgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuICAgIHdoaWxlICh0YXJnZXRFbCAmJiB0YXJnZXRFbCAhPT0gcm9vdEVsKSB7XG4gICAgICB0YXJnZXRFbCA9IHRhcmdldEVsLnBhcmVudE5vZGU7XG4gICAgfVxuICAgIHJldHVybiAhIXRhcmdldEVsO1xuICB9XG5cbiAgZm9jdXNUb1RhcmdldEl0ZW1FbCgpIHtcbiAgICBjb25zdCBkcm9wZG93bkVsID0gUmVhY3RET00uZmluZERPTU5vZGUodGhpcy5kcm9wZG93bik7XG4gICAgY29uc3QgZmlyc3RJdGVtRWwgPVxuICAgICAgZHJvcGRvd25FbC5xdWVyeVNlbGVjdG9yKCcuc2xkcy1pcy1zZWxlY3RlZCA+IC5yZWFjdC1zbGRzLW1lbnVpdGVtW3RhYkluZGV4XScpIHx8XG4gICAgICBkcm9wZG93bkVsLnF1ZXJ5U2VsZWN0b3IoJy5yZWFjdC1zbGRzLW1lbnVpdGVtW3RhYkluZGV4XScpO1xuICAgIGlmIChmaXJzdEl0ZW1FbCkge1xuICAgICAgZmlyc3RJdGVtRWwuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICB0cmlnZ2VyUmVmKHJlZikge1xuICAgIHRoaXMudHJpZ2dlciA9IHJlZjtcbiAgfVxuXG4gIGRyb3Bkb3duUmVmKHJlZikge1xuICAgIHRoaXMuZHJvcGRvd24gPSByZWY7XG4gIH1cblxuICByZW5kZXJCdXR0b24oeyBncm91cGVkLCBpc0ZpcnN0SW5Hcm91cCwgaXNMYXN0SW5Hcm91cCwgLi4ucHJvcHMgfSkge1xuICAgIGNvbnN0IHBwcm9wcyA9IHsgLi4ucHJvcHMgfTtcbiAgICBkZWxldGUgcHByb3BzLm9uTWVudUl0ZW1DbGljaztcbiAgICBkZWxldGUgcHByb3BzLmluaGVyaXRXaWR0aDtcbiAgICBkZWxldGUgcHByb3BzLmZvY3VzT25JbnB1dDtcbiAgICBjb25zdCBidXR0b24gPSAoXG4gICAgICA8QnV0dG9uXG4gICAgICAgIHsgLi4ucHByb3BzIH1cbiAgICAgICAgYXJpYS1oYXNwb3B1cFxuICAgICAgICByZWY9e3RoaXMudHJpZ2dlclJlZn1cbiAgICAgICAgb25DbGljaz17IHRoaXMub25UcmlnZ2VyQ2xpY2suYmluZCh0aGlzKSB9XG4gICAgICAgIG9uS2V5RG93bj17IHRoaXMub25LZXlEb3duLmJpbmQodGhpcykgfVxuICAgICAgICBvbkJsdXI9eyB0aGlzLm9uQmx1ci5iaW5kKHRoaXMpIH1cbiAgICAgIC8+XG4gICAgKTtcblxuICAgIGlmIChncm91cGVkKSB7XG4gICAgICBjb25zdCBub25lU3R5bGUgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9J3NsZHMtYnV0dG9uLWdyb3VwJz5cbiAgICAgICAgICB7IGlzRmlyc3RJbkdyb3VwID8gbnVsbCA6IDxidXR0b24gY2xhc3NOYW1lPSdzbGRzLWJ1dHRvbicgc3R5bGU9eyBub25lU3R5bGUgfT48L2J1dHRvbj4gfVxuICAgICAgICAgIHsgYnV0dG9uIH1cbiAgICAgICAgICB7IGlzTGFzdEluR3JvdXAgPyBudWxsIDogPGJ1dHRvbiBjbGFzc05hbWU9J3NsZHMtYnV0dG9uJyBzdHlsZT17IG5vbmVTdHlsZSB9PjwvYnV0dG9uPiB9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnV0dG9uO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGluaGVyaXRXaWR0aCxcbiAgICAgIGNsYXNzTmFtZSwgbGlzdENsYXNzTmFtZSwgbWVudUNsYXNzTmFtZSwgbWVudUFsaWduID0gJ2xlZnQnLCBtZW51U2l6ZSwgbnViYmluVG9wLCBob3ZlclBvcHVwLFxuICAgICAgbWVudUhlYWRlciwgdHlwZSwgbGFiZWwsIGNoaWxkcmVuLCBiYWNrZ3JvdW5kQ29sb3IsIGtleUNvZGVzVG9DbG9zZU1lbnUsIC4uLnByb3BzLFxuICAgIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCB7IGljb24gfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgZHJvcGRvd25DbGFzc05hbWVzID0gY2xhc3NuYW1lcyhcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgICdzbGRzLWRyb3Bkb3duLXRyaWdnZXInLFxuICAgICAge1xuICAgICAgICAnc2xkcy1idXR0b24tc3BhY2UtbGVmdCc6ICFwcm9wcy5ncm91cGVkLFxuICAgICAgICAncmVhY3Qtc2xkcy1kcm9wZG93bi1vcGVuZWQnOiB0aGlzLnN0YXRlLm9wZW5lZCxcbiAgICAgIH1cbiAgICApO1xuICAgIGxldCBpY29uTW9yZSA9IG51bGw7XG4gICAgaWYgKCFsYWJlbCAmJiAhaWNvbikge1xuICAgICAgaWNvbiA9ICdkb3duJztcbiAgICB9XG4gICAgaWYgKGxhYmVsIHx8IHR5cGUgPT09ICdpY29uLW1vcmUnKSB7XG4gICAgICBpY29uTW9yZSA9ICdkb3duJztcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXYgY2xhc3NOYW1lPXsgZHJvcGRvd25DbGFzc05hbWVzIH0gc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yIH19PlxuICAgICAgICB7IHRoaXMucmVuZGVyQnV0dG9uKHsgdHlwZSwgbGFiZWwsIGljb24sIGljb25Nb3JlLCAuLi5wcm9wcyB9KSB9XG4gICAgICAgIDxEcm9wZG93bk1lbnVcbiAgICAgICAgICBjbGFzc05hbWU9e21lbnVDbGFzc05hbWV9XG4gICAgICAgICAgbGlzdENsYXNzTmFtZT17bGlzdENsYXNzTmFtZX1cbiAgICAgICAgICBhbGlnbj17IG1lbnVBbGlnbiB9XG4gICAgICAgICAgbWluV2lkdGg9e2luaGVyaXRXaWR0aCA/IHRoaXMuY3VycmVudFdpZHRoIDogMH1cbiAgICAgICAgICBoZWFkZXI9eyBtZW51SGVhZGVyIH1cbiAgICAgICAgICBzaXplPXsgbWVudVNpemUgfVxuICAgICAgICAgIG51YmJpblRvcD17IG51YmJpblRvcCB9XG4gICAgICAgICAgaG92ZXJQb3B1cD17IGhvdmVyUG9wdXAgfVxuICAgICAgICAgIHJlZj17dGhpcy5kcm9wZG93blJlZn1cbiAgICAgICAgICBvbk1lbnVJdGVtQ2xpY2s9eyB0aGlzLm9uTWVudUl0ZW1DbGljay5iaW5kKHRoaXMpIH1cbiAgICAgICAgICBvbk1lbnVDbG9zZT17IHRoaXMub25NZW51Q2xvc2UuYmluZCh0aGlzKSB9XG4gICAgICAgICAgb25CbHVyPXsgdGhpcy5vbkJsdXIuYmluZCh0aGlzKSB9XG4gICAgICAgICAga2V5Q29kZXNUb0Nsb3NlTWVudT17IGtleUNvZGVzVG9DbG9zZU1lbnUgfVxuICAgICAgICA+XG4gICAgICAgICAgeyBjaGlsZHJlbiB9XG4gICAgICAgIDwvRHJvcGRvd25NZW51PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuXG59XG5cbkRyb3Bkb3duQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsaXN0Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBtZW51Q2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIHR5cGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGljb246IFByb3BUeXBlcy5zdHJpbmcsXG4gIG1lbnVBbGlnbjogUHJvcFR5cGVzLm9uZU9mKFsnbGVmdCcsICdjZW50ZXInLCAncmlnaHQnXSksXG4gIG1lbnVTaXplOiBQcm9wVHlwZXMub25lT2YoWydzbWFsbCcsICdtZWRpdW0nLCAnbGFyZ2UnXSksXG4gIG1lbnVIZWFkZXI6IFByb3BUeXBlcy5zdHJpbmcsXG4gIG51YmJpblRvcDogUHJvcFR5cGVzLmJvb2wsXG4gIGhvdmVyUG9wdXA6IFByb3BUeXBlcy5ib29sLFxuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25NZW51SXRlbUNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgZ3JvdXBlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGlzRmlyc3RJbkdyb3VwOiBQcm9wVHlwZXMuYm9vbCxcbiAgaXNMYXN0SW5Hcm91cDogUHJvcFR5cGVzLmJvb2wsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgaW5oZXJpdFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgYmFja2dyb3VuZENvbG9yOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBmb2N1c09uSW5wdXQ6IFByb3BUeXBlcy5mdW5jLFxuICBrZXlDb2Rlc1RvQ2xvc2VNZW51OiBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubnVtYmVyKSxcbn07XG4iXX0=