UNPKG

react-lightning-design-components

Version:

Salesforce Lightning Design System components built with React 16

267 lines (223 loc) 22.3 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 _classnames = require('classnames'); var _classnames2 = _interopRequireDefault(_classnames); var _Button = require('./Button'); var _Button2 = _interopRequireDefault(_Button); var _Spinner = require('./Spinner'); var _Spinner2 = _interopRequireDefault(_Spinner); var _util = require('./util'); var _propTypes = require('prop-types'); var _propTypes2 = _interopRequireDefault(_propTypes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var TreeNode = function (_Component) { (0, _inherits3.default)(TreeNode, _Component); function TreeNode(props) { (0, _classCallCheck3.default)(this, TreeNode); var _this = (0, _possibleConstructorReturn3.default)(this, (TreeNode.__proto__ || (0, _getPrototypeOf2.default)(TreeNode)).call(this, props)); _this.state = { opened: _this.props.defaultOpened }; _this.onLabelClickEvent = _this.onLabelClickEvent.bind(_this); (0, _util.registerStyle)('tree-node', [['.slds-tree__item .tree-buttons', '{ display: none; }'], ['.slds-tree__item:hover .tree-buttons', '{ display: initial; }']]); return _this; } // TODO: revert it babeljs bug https://phabricator.babeljs.io/T2892 (0, _createClass3.default)(TreeNode, [{ key: 'onToggleEvent', value: function onToggleEvent(e) { var _props = this.props, onToggle = _props.onToggle, onNodeToggle = _props.onNodeToggle; if (onToggle) { onToggle(e, this.props); } if (onNodeToggle) { onNodeToggle(e, this.props); } this.setState({ opened: !this.state.opened }); } }, { key: 'onLabelClickEvent', value: function onLabelClickEvent(e) { var _props2 = this.props, onLabelClick = _props2.onLabelClick, onNodeLabelClick = _props2.onNodeLabelClick; if (onLabelClick) { onLabelClick(e, this.props); } if (onNodeLabelClick) { onNodeLabelClick(e, this.props); } } }, { key: 'onClickEvent', value: function onClickEvent(e) { var _props3 = this.props, onClick = _props3.onClick, onNodeClick = _props3.onNodeClick, toggleOnNodeClick = _props3.toggleOnNodeClick; if (onClick) { onClick(e, this.props); } if (onNodeClick) { onNodeClick(e, this.props); } if (toggleOnNodeClick) { this.onToggleEvent(e); } } }, { key: 'renderTreeItem', value: function renderTreeItem(itemProps) { var className = itemProps.className, label = itemProps.label, _itemProps$icon = itemProps.icon, icon = _itemProps$icon === undefined ? 'chevronright' : _itemProps$icon, loading = itemProps.loading, selected = itemProps.selected, leaf = itemProps.leaf, isOpened = itemProps.isOpened, controls = itemProps.controls, children = itemProps.children, useInput = itemProps.useInput, props = (0, _objectWithoutProperties3.default)(itemProps, ['className', 'label', 'icon', 'loading', 'selected', 'leaf', 'isOpened', 'controls', 'children', 'useInput']); var itmClassNames = (0, _classnames2.default)(className, 'slds-tree__item', { 'slds-is-open': isOpened, 'slds-is-selected': selected }); var pprops = props; delete pprops.onNodeToggle; delete pprops.onNodeClick; delete pprops.onNodeLabelClick; delete pprops.toggleOnNodeClick; delete pprops.showAllways; return _react2.default.createElement( 'div', (0, _extends3.default)({ className: itmClassNames, onClick: this.onClickEvent.bind(this) }, pprops), loading ? _react2.default.createElement(_Spinner2.default, { size: 'small', className: 'slds-m-right--x-small' }) : !leaf ? _react2.default.createElement(_Button2.default, { className: 'slds-m-right--small', 'aria-controls': '', type: 'icon-bare', icon: icon, iconSize: 'small', onClick: this.onToggleEvent.bind(this) }) : null, useInput ? _react2.default.createElement( 'div', { className: 'treeNodeInputHolder' }, useInput ) : _react2.default.createElement( 'a', { className: 'slds-truncate', tabIndex: -1, role: 'presentation' }, label ), leaf ? children : null, controls ? _react2.default.createElement( 'div', { className: !props.showAllways ? 'tree-buttons' : undefined, style: { marginLeft: 'auto' } }, controls ) : null ); } }, { key: 'renderChildNode', value: function renderChildNode(level, tnode) { var _props4 = this.props, onNodeClick = _props4.onNodeClick, onNodeToggle = _props4.onNodeToggle, onNodeLabelClick = _props4.onNodeLabelClick, toggleOnNodeClick = _props4.toggleOnNodeClick; return _react2.default.cloneElement(tnode, { level: level, onNodeClick: onNodeClick, onNodeToggle: onNodeToggle, onNodeLabelClick: onNodeLabelClick, toggleOnNodeClick: toggleOnNodeClick }); } }, { key: 'render', value: function render() { var _props5 = this.props, defaultOpened = _props5.defaultOpened, opened = _props5.opened, leaf = _props5.leaf, level = _props5.level, children = _props5.children, props = (0, _objectWithoutProperties3.default)(_props5, ['defaultOpened', 'opened', 'leaf', 'level', 'children']); var isOpened = typeof opened !== 'undefined' ? opened : typeof this.state.opened !== 'undefined' ? this.state.opened : defaultOpened; var grpClassNames = (0, _classnames2.default)('slds-tree__group', { 'slds-nested': !leaf, 'is-expanded': isOpened, 'slds-show': isOpened, 'slds-hide': !isOpened }); var itemProps = (0, _extends3.default)({ leaf: leaf, isOpened: isOpened, children: children }, props); if (leaf) { return _react2.default.createElement( 'li', { role: 'treeitem', 'aria-level': level }, this.renderTreeItem(itemProps) ); } return _react2.default.createElement( 'li', { role: 'treeitem', 'aria-level': level, 'aria-expanded': isOpened }, this.renderTreeItem(itemProps), _react2.default.createElement( 'ul', { className: grpClassNames, role: 'group' }, _react2.default.Children.map(children, this.renderChildNode.bind(this, level + 1)) ) ); } }]); return TreeNode; }(_react.Component); exports.default = TreeNode; TreeNode.propTypes = { className: _propTypes2.default.string, label: _propTypes2.default.string, onClick: _propTypes2.default.func, onToggle: _propTypes2.default.func, onNodeToggle: _propTypes2.default.func, onNodeLabelClick: _propTypes2.default.func, onLabelClick: _propTypes2.default.func, onNodeClick: _propTypes2.default.func, toggleOnNodeClick: _propTypes2.default.bool, defaultOpened: _propTypes2.default.bool, opened: _propTypes2.default.bool, leaf: _propTypes2.default.bool, level: _propTypes2.default.number, children: _propTypes2.default.node, controls: _propTypes2.default.arrayOf(_propTypes2.default.element), showAllways: _propTypes2.default.bool }; //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL1RyZWVOb2RlLmpzIl0sIm5hbWVzIjpbIlRyZWVOb2RlIiwicHJvcHMiLCJzdGF0ZSIsIm9wZW5lZCIsImRlZmF1bHRPcGVuZWQiLCJvbkxhYmVsQ2xpY2tFdmVudCIsImJpbmQiLCJlIiwib25Ub2dnbGUiLCJvbk5vZGVUb2dnbGUiLCJzZXRTdGF0ZSIsIm9uTGFiZWxDbGljayIsIm9uTm9kZUxhYmVsQ2xpY2siLCJvbkNsaWNrIiwib25Ob2RlQ2xpY2siLCJ0b2dnbGVPbk5vZGVDbGljayIsIm9uVG9nZ2xlRXZlbnQiLCJpdGVtUHJvcHMiLCJjbGFzc05hbWUiLCJsYWJlbCIsImljb24iLCJsb2FkaW5nIiwic2VsZWN0ZWQiLCJsZWFmIiwiaXNPcGVuZWQiLCJjb250cm9scyIsImNoaWxkcmVuIiwidXNlSW5wdXQiLCJpdG1DbGFzc05hbWVzIiwicHByb3BzIiwic2hvd0FsbHdheXMiLCJvbkNsaWNrRXZlbnQiLCJ1bmRlZmluZWQiLCJtYXJnaW5MZWZ0IiwibGV2ZWwiLCJ0bm9kZSIsImNsb25lRWxlbWVudCIsImdycENsYXNzTmFtZXMiLCJyZW5kZXJUcmVlSXRlbSIsIkNoaWxkcmVuIiwibWFwIiwicmVuZGVyQ2hpbGROb2RlIiwicHJvcFR5cGVzIiwic3RyaW5nIiwiZnVuYyIsImJvb2wiLCJudW1iZXIiLCJub2RlIiwiYXJyYXlPZiIsImVsZW1lbnQiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOztBQUNBOzs7Ozs7SUFFcUJBLFE7OztBQUNuQixvQkFBWUMsS0FBWixFQUFtQjtBQUFBOztBQUFBLDBJQUNYQSxLQURXOztBQUVqQixVQUFLQyxLQUFMLEdBQWEsRUFBRUMsUUFBUSxNQUFLRixLQUFMLENBQVdHLGFBQXJCLEVBQWI7QUFDQSxVQUFLQyxpQkFBTCxHQUF5QixNQUFLQSxpQkFBTCxDQUF1QkMsSUFB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QkFoSmtCbEMsUTs7O0FBb0pyQkEsU0FBUzBDLFNBQVQsR0FBcUI7QUFDbkJ4QixhQUFXLG9CQUFVeUIsTUFERjtBQUVuQnhCLFNBQU8sb0JBQVV3QixNQUZFO0FBR25COUIsV0FBUyxvQkFBVStCLElBSEE7QUFJbkJwQyxZQUFVLG9CQUFVb0MsSUFKRDtBQUtuQm5DLGdCQUFjLG9CQUFVbUMsSUFMTDtBQU1uQmhDLG9CQUFrQixvQkFBVWdDLElBTlQ7QUFPbkJqQyxnQkFBYyxvQkFBVWlDLElBUEw7QUFRbkI5QixlQUFhLG9CQUFVOEIsSUFSSjtBQVNuQjdCLHFCQUFtQixvQkFBVThCLElBVFY7QUFVbkJ6QyxpQkFBZSxvQkFBVXlDLElBVk47QUFXbkIxQyxVQUFRLG9CQUFVMEMsSUFYQztBQVluQnRCLFFBQU0sb0JBQVVzQixJQVpHO0FBYW5CWCxTQUFPLG9CQUFVWSxNQWJFO0FBY25CcEIsWUFBVSxvQkFBVXFCLElBZEQ7QUFlbkJ0QixZQUFVLG9CQUFVdUIsT0FBVixDQUFrQixvQkFBVUMsT0FBNUIsQ0FmUztBQWdCbkJuQixlQUFhLG9CQUFVZTtBQWhCSixDQUFyQiIsImZpbGUiOiJUcmVlTm9kZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwgeyBDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xhc3NuYW1lcyBmcm9tICdjbGFzc25hbWVzJztcbmltcG9ydCBCdXR0b24gZnJvbSAnLi9CdXR0b24nO1xuaW1wb3J0IFNwaW5uZXIgZnJvbSAnLi9TcGlubmVyJztcbmltcG9ydCB7IHJlZ2lzdGVyU3R5bGUgfSBmcm9tICcuL3V0aWwnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVHJlZU5vZGUgZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICB0aGlzLnN0YXRlID0geyBvcGVuZWQ6IHRoaXMucHJvcHMuZGVmYXVsdE9wZW5lZCB9O1xuICAgIHRoaXMub25MYWJlbENsaWNrRXZlbnQgPSB0aGlzLm9uTGFiZWxDbGlja0V2ZW50LmJpbmQodGhpcyk7XG4gICAgcmVnaXN0ZXJTdHlsZSgndHJlZS1ub2RlJywgW1xuICAgICAgW1xuICAgICAgICAnLnNsZHMtdHJlZV9faXRlbSAudHJlZS1idXR0b25zJyxcbiAgICAgICAgJ3sgZGlzcGxheTogbm9uZTsgfScsXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnLnNsZHMtdHJlZV9faXRlbTpob3ZlciAudHJlZS1idXR0b25zJyxcbiAgICAgICAgJ3sgZGlzcGxheTogaW5pdGlhbDsgfScsXG4gICAgICBdLFxuICAgIF0pO1xuICB9XG5cbiAgLy8gVE9ETzogcmV2ZXJ0IGl0IGJhYmVsanMgYnVnIGh0dHBzOi8vcGhhYnJpY2F0b3IuYmFiZWxqcy5pby9UMjg5MlxuICBvblRvZ2dsZUV2ZW50KGUpIHtcbiAgICBjb25zdCB7IG9uVG9nZ2xlLCBvbk5vZGVUb2dnbGUgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKG9uVG9nZ2xlKSB7IG9uVG9nZ2xlKGUsIHRoaXMucHJvcHMpOyB9XG4gICAgaWYgKG9uTm9kZVRvZ2dsZSkgeyBvbk5vZGVUb2dnbGUoZSwgdGhpcy5wcm9wcyk7IH1cbiAgICB0aGlzLnNldFN0YXRlKHsgb3BlbmVkOiAhdGhpcy5zdGF0ZS5vcGVuZWQgfSk7XG4gIH1cblxuICBvbkxhYmVsQ2xpY2tFdmVudChlKSB7XG4gICAgY29uc3QgeyBvbkxhYmVsQ2xpY2ssIG9uTm9kZUxhYmVsQ2xpY2sgfSA9IHRoaXMucHJvcHM7XG4gICAgaWYgKG9uTGFiZWxDbGljaykgeyBvbkxhYmVsQ2xpY2soZSwgdGhpcy5wcm9wcyk7IH1cbiAgICBpZiAob25Ob2RlTGFiZWxDbGljaykgeyBvbk5vZGVMYWJlbENsaWNrKGUsIHRoaXMucHJvcHMpOyB9XG4gIH1cblxuICBvbkNsaWNrRXZlbnQoZSkge1xuICAgIGNvbnN0IHsgb25DbGljaywgb25Ob2RlQ2xpY2ssIHRvZ2dsZU9uTm9kZUNsaWNrIH0gPSB0aGlzLnByb3BzO1xuICAgIGlmIChvbkNsaWNrKSB7IG9uQ2xpY2soZSwgdGhpcy5wcm9wcyk7IH1cbiAgICBpZiAob25Ob2RlQ2xpY2spIHsgb25Ob2RlQ2xpY2soZSwgdGhpcy5wcm9wcyk7IH1cbiAgICBpZiAodG9nZ2xlT25Ob2RlQ2xpY2spIHtcbiAgICAgIHRoaXMub25Ub2dnbGVFdmVudChlKTtcbiAgICB9XG4gIH1cblxuXG4gIHJlbmRlclRyZWVJdGVtKGl0ZW1Qcm9wcykge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSwgbGFiZWwsIGljb24gPSAnY2hldnJvbnJpZ2h0JywgbG9hZGluZywgc2VsZWN0ZWQsIGxlYWYsIGlzT3BlbmVkLCBjb250cm9scyxcbiAgICAgIGNoaWxkcmVuLCB1c2VJbnB1dCwgLi4ucHJvcHMsXG4gICAgfSA9IGl0ZW1Qcm9wcztcbiAgICBjb25zdCBpdG1DbGFzc05hbWVzID0gY2xhc3NuYW1lcyhjbGFzc05hbWUsICdzbGRzLXRyZWVfX2l0ZW0nLCB7XG4gICAgICAnc2xkcy1pcy1vcGVuJzogaXNPcGVuZWQsXG4gICAgICAnc2xkcy1pcy1zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgIH0pO1xuICAgIGNvbnN0IHBwcm9wcyA9IHByb3BzO1xuICAgIGRlbGV0ZSBwcHJvcHMub25Ob2RlVG9nZ2xlO1xuICAgIGRlbGV0ZSBwcHJvcHMub25Ob2RlQ2xpY2s7XG4gICAgZGVsZXRlIHBwcm9wcy5vbk5vZGVMYWJlbENsaWNrO1xuICAgIGRlbGV0ZSBwcHJvcHMudG9nZ2xlT25Ob2RlQ2xpY2s7XG4gICAgZGVsZXRlIHBwcm9wcy5zaG93QWxsd2F5cztcbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9eyBpdG1DbGFzc05hbWVzIH1cbiAgICAgICAgb25DbGljaz17IHRoaXMub25DbGlja0V2ZW50LmJpbmQodGhpcykgfVxuICAgICAgICB7IC4uLnBwcm9wcyB9XG4gICAgICA+XG4gICAgICAgIHtcbiAgICAgICAgICBsb2FkaW5nID8gPFNwaW5uZXIgc2l6ZT0nc21hbGwnIGNsYXNzTmFtZT0nc2xkcy1tLXJpZ2h0LS14LXNtYWxsJyAvPiA6XG4gICAgICAgICAgIWxlYWYgP1xuICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9J3NsZHMtbS1yaWdodC0tc21hbGwnXG4gICAgICAgICAgICAgIGFyaWEtY29udHJvbHM9JydcbiAgICAgICAgICAgICAgdHlwZT0naWNvbi1iYXJlJ1xuICAgICAgICAgICAgICBpY29uPXsgaWNvbiB9XG4gICAgICAgICAgICAgIGljb25TaXplPSdzbWFsbCdcbiAgICAgICAgICAgICAgb25DbGljaz17IHRoaXMub25Ub2dnbGVFdmVudC5iaW5kKHRoaXMpIH1cbiAgICAgICAgICAgIC8+IDpcbiAgICAgICAgICAgIG51bGxcbiAgICAgICAgfVxuICAgICAgICB7XG4gICAgICAgICAgdXNlSW5wdXRcbiAgICAgICAgICA/XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT0ndHJlZU5vZGVJbnB1dEhvbGRlcic+e3VzZUlucHV0fTwvZGl2PlxuICAgICAgICAgIDpcbiAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT0nc2xkcy10cnVuY2F0ZSdcbiAgICAgICAgICAgICAgdGFiSW5kZXg9eyAtMSB9XG4gICAgICAgICAgICAgIHJvbGU9J3ByZXNlbnRhdGlvbidcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgPC9hPlxuICAgICAgICB9XG4gICAgICAgIHsgbGVhZiA/IGNoaWxkcmVuIDogbnVsbCB9XG4gICAgICAgIHsgY29udHJvbHNcbiAgICAgICAgICA/IDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17IXByb3BzLnNob3dBbGx3YXlzID8gJ3RyZWUtYnV0dG9ucycgOiB1bmRlZmluZWQgfVxuICAgICAgICAgICAgc3R5bGU9e3sgbWFyZ2luTGVmdDogJ2F1dG8nIH19XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2NvbnRyb2xzfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDogbnVsbCB9XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG5cbiAgcmVuZGVyQ2hpbGROb2RlKGxldmVsLCB0bm9kZSkge1xuICAgIGNvbnN0IHsgb25Ob2RlQ2xpY2ssIG9uTm9kZVRvZ2dsZSwgb25Ob2RlTGFiZWxDbGljaywgdG9nZ2xlT25Ob2RlQ2xpY2sgfSA9IHRoaXMucHJvcHM7XG4gICAgcmV0dXJuIFJlYWN0LmNsb25lRWxlbWVudCh0bm9kZSwge1xuICAgICAgbGV2ZWwsIG9uTm9kZUNsaWNrLCBvbk5vZGVUb2dnbGUsIG9uTm9kZUxhYmVsQ2xpY2ssIHRvZ2dsZU9uTm9kZUNsaWNrLFxuICAgIH0pO1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGRlZmF1bHRPcGVuZWQsIG9wZW5lZCwgbGVhZiwgbGV2ZWwsXG4gICAgICBjaGlsZHJlbiwgLi4ucHJvcHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgaXNPcGVuZWQgPVxuICAgICAgdHlwZW9mIG9wZW5lZCAhPT0gJ3VuZGVmaW5lZCcgPyBvcGVuZWQgOlxuICAgICAgdHlwZW9mIHRoaXMuc3RhdGUub3BlbmVkICE9PSAndW5kZWZpbmVkJyA/IHRoaXMuc3RhdGUub3BlbmVkIDpcbiAgICAgIGRlZmF1bHRPcGVuZWQ7XG4gICAgY29uc3QgZ3JwQ2xhc3NOYW1lcyA9IGNsYXNzbmFtZXMoJ3NsZHMtdHJlZV9fZ3JvdXAnLCB7XG4gICAgICAnc2xkcy1uZXN0ZWQnOiAhbGVhZixcbiAgICAgICdpcy1leHBhbmRlZCc6IGlzT3BlbmVkLFxuICAgICAgJ3NsZHMtc2hvdyc6IGlzT3BlbmVkLFxuICAgICAgJ3NsZHMtaGlkZSc6ICFpc09wZW5lZCxcbiAgICB9KTtcbiAgICBjb25zdCBpdGVtUHJvcHMgPSB7IGxlYWYsIGlzT3BlbmVkLCBjaGlsZHJlbiwgLi4ucHJvcHMgfTtcbiAgICBpZiAobGVhZikge1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGxpIHJvbGU9J3RyZWVpdGVtJyBhcmlhLWxldmVsPXsgbGV2ZWwgfT5cbiAgICAgICAgICB7IHRoaXMucmVuZGVyVHJlZUl0ZW0oaXRlbVByb3BzKSB9XG4gICAgICAgIDwvbGk+XG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiAoXG4gICAgICA8bGlcbiAgICAgICAgcm9sZT0ndHJlZWl0ZW0nXG4gICAgICAgIGFyaWEtbGV2ZWw9eyBsZXZlbCB9XG4gICAgICAgIGFyaWEtZXhwYW5kZWQ9eyBpc09wZW5lZCB9XG4gICAgICA+XG4gICAgICAgIHsgdGhpcy5yZW5kZXJUcmVlSXRlbShpdGVtUHJvcHMpIH1cbiAgICAgICAgPHVsIGNsYXNzTmFtZT17IGdycENsYXNzTmFtZXMgfSByb2xlPSdncm91cCc+XG4gICAgICAgICAgeyBSZWFjdC5DaGlsZHJlbi5tYXAoY2hpbGRyZW4sIHRoaXMucmVuZGVyQ2hpbGROb2RlLmJpbmQodGhpcywgbGV2ZWwgKyAxKSkgfVxuICAgICAgICA8L3VsPlxuICAgICAgPC9saT5cbiAgICApO1xuICB9XG59XG5cblxuVHJlZU5vZGUucHJvcFR5cGVzID0ge1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIGxhYmVsOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ub2dnbGU6IFByb3BUeXBlcy5mdW5jLFxuICBvbk5vZGVUb2dnbGU6IFByb3BUeXBlcy5mdW5jLFxuICBvbk5vZGVMYWJlbENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25MYWJlbENsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgb25Ob2RlQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICB0b2dnbGVPbk5vZGVDbGljazogUHJvcFR5cGVzLmJvb2wsXG4gIGRlZmF1bHRPcGVuZWQ6IFByb3BUeXBlcy5ib29sLFxuICBvcGVuZWQ6IFByb3BUeXBlcy5ib29sLFxuICBsZWFmOiBQcm9wVHlwZXMuYm9vbCxcbiAgbGV2ZWw6IFByb3BUeXBlcy5udW1iZXIsXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgY29udHJvbHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5lbGVtZW50KSxcbiAgc2hvd0FsbHdheXM6IFByb3BUeXBlcy5ib29sLFxufTtcbiJdfQ==