tc-ui-toolkit
Version:
React components used to develop tools for the desktop app translationCore
207 lines (164 loc) • 21.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/assertThisInitialized"));
var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
var _possibleConstructorReturn2 = _interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));
var _getPrototypeOf2 = _interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _memoizeOne = _interopRequireDefault(require("memoize-one"));
var _lodash = _interopRequireDefault(require("lodash"));
var _Menu = _interopRequireDefault(require("../Menu"));
var _MenuFilter = _interopRequireDefault(require("./MenuFilter"));
var _MenuHeader = _interopRequireDefault(require("./MenuHeader"));
function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Date.prototype.toString.call(Reflect.construct(Date, [], function () {})); return true; } catch (e) { return false; } }
/**
* Renders filtered menu.
* This receives the same properties as the {@link Menu} in addition to some filtering options.
* @param {object[]} filters - an array of filters
* @param {string} title - the menu title
*
*/
var FilteredMenu = /*#__PURE__*/function (_React$Component) {
(0, _inherits2["default"])(FilteredMenu, _React$Component);
var _super = _createSuper(FilteredMenu);
function FilteredMenu() {
var _this;
(0, _classCallCheck2["default"])(this, FilteredMenu);
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _super.call.apply(_super, [this].concat(args));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "state", {
filtersOpen: false,
selectedFilters: []
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleOpenFilters", function () {
_this.setState(function (state) {
return {
filtersOpen: !state.filtersOpen
};
});
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "handleToggleFilter", function (filter) {
var selectedFilters = _this.state.selectedFilters;
var currentIndex = selectedFilters.findIndex(function (selected) {
return selected.id === filter.id;
});
var newChecked = (0, _toConsumableArray2["default"])(selectedFilters);
if (currentIndex === -1) {
newChecked.push(filter);
} else {
newChecked.splice(currentIndex, 1);
}
_this.setState({
selectedFilters: newChecked
}); // eslint-disable-next-line no-unused-expressions
_this.props.onFiltersChanged && _this.props.onFiltersChanged(newChecked);
});
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "normalizeFilters", (0, _memoizeOne["default"])(function (filters) {
var normalized = [];
for (var i = 0, len = filters.length; i < len; i++) {
var filter = Object.assign({}, {
value: true,
disables: [],
id: filters[i].key
}, filters[i]);
normalized.push(filter);
}
return normalized;
}));
(0, _defineProperty2["default"])((0, _assertThisInitialized2["default"])(_this), "filter", (0, _memoizeOne["default"])(function (entries, filters) {
var groups = _lodash["default"].cloneDeep(entries); // filter children
groups.map(function (group) {
var _filters = filters.filter(function (filter) {
return !filter.nonFilter;
}); // skip over any entries that are not true filters (such as config options)
group.children = group.children.filter(function (entry) {
for (var i = 0, len = _filters.length; i < len; i++) {
if (Boolean(entry[_filters[i].key]) === _filters[i].value) {
return true;
}
}
return _filters.length === 0;
});
return group;
}); // filter empty groups
return groups.filter(function (entry) {
return entry.children.length > 0;
});
}));
return _this;
}
(0, _createClass2["default"])(FilteredMenu, [{
key: "render",
value: function render() {
var _this$props = this.props,
filters = _this$props.filters,
active = _this$props.active,
entries = _this$props.entries,
height = _this$props.height,
title = _this$props.title,
onItemClick = _this$props.onItemClick,
width = _this$props.width,
statusIcons = _this$props.statusIcons,
emptyNotice = _this$props.emptyNotice,
targetLanguageFont = _this$props.targetLanguageFont;
var _this$state = this.state,
selectedFilters = _this$state.selectedFilters,
filtersOpen = _this$state.filtersOpen;
var normalizedFilters = this.normalizeFilters(filters);
var filteredEntries = this.filter(entries, selectedFilters); // fallback to filter icons
var menuStatusIcons = statusIcons !== undefined ? statusIcons : filters;
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_Menu["default"], {
header: filters.length ? /*#__PURE__*/_react["default"].createElement(_MenuFilter["default"], {
onToggle: this.handleToggleFilter,
onOpen: this.handleOpenFilters,
open: filtersOpen,
title: title,
filters: normalizedFilters,
selected: selectedFilters
}) : /*#__PURE__*/_react["default"].createElement(_MenuHeader["default"], {
title: title
}),
width: width,
emptyNotice: emptyNotice,
statusIcons: menuStatusIcons,
entries: filteredEntries,
active: active,
height: height,
onItemClick: onItemClick,
targetLanguageFont: targetLanguageFont
}));
}
}]);
return FilteredMenu;
}(_react["default"].Component);
FilteredMenu.propTypes = {
filters: _propTypes["default"].array.isRequired,
title: _propTypes["default"].string.isRequired,
entries: _propTypes["default"].arrayOf(_propTypes["default"].object),
active: _propTypes["default"].object,
height: _propTypes["default"].any,
onItemClick: _propTypes["default"].func,
width: _propTypes["default"].number,
emptyNotice: _propTypes["default"].string,
targetLanguageFont: _propTypes["default"].string,
statusIcons: _propTypes["default"].arrayOf(_propTypes["default"].object),
onFiltersChanged: _propTypes["default"].func // optional callback for filter change events
};
FilteredMenu.defaultProps = {
emptyNotice: 'No results found'
};
var _default = /*#__PURE__*/_react["default"].memo(FilteredMenu);
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9Hcm91cGVkTWVudS9GaWx0ZXJlZE1lbnUvaW5kZXguanMiXSwibmFtZXMiOlsiRmlsdGVyZWRNZW51IiwiZmlsdGVyc09wZW4iLCJzZWxlY3RlZEZpbHRlcnMiLCJzZXRTdGF0ZSIsInN0YXRlIiwiZmlsdGVyIiwiY3VycmVudEluZGV4IiwiZmluZEluZGV4Iiwic2VsZWN0ZWQiLCJpZCIsIm5ld0NoZWNrZWQiLCJwdXNoIiwic3BsaWNlIiwicHJvcHMiLCJvbkZpbHRlcnNDaGFuZ2VkIiwiZmlsdGVycyIsIm5vcm1hbGl6ZWQiLCJpIiwibGVuIiwibGVuZ3RoIiwiT2JqZWN0IiwiYXNzaWduIiwidmFsdWUiLCJkaXNhYmxlcyIsImtleSIsImVudHJpZXMiLCJncm91cHMiLCJfIiwiY2xvbmVEZWVwIiwibWFwIiwiZ3JvdXAiLCJfZmlsdGVycyIsIm5vbkZpbHRlciIsImNoaWxkcmVuIiwiZW50cnkiLCJCb29sZWFuIiwiYWN0aXZlIiwiaGVpZ2h0IiwidGl0bGUiLCJvbkl0ZW1DbGljayIsIndpZHRoIiwic3RhdHVzSWNvbnMiLCJlbXB0eU5vdGljZSIsInRhcmdldExhbmd1YWdlRm9udCIsIm5vcm1hbGl6ZWRGaWx0ZXJzIiwibm9ybWFsaXplRmlsdGVycyIsImZpbHRlcmVkRW50cmllcyIsIm1lbnVTdGF0dXNJY29ucyIsInVuZGVmaW5lZCIsImhhbmRsZVRvZ2dsZUZpbHRlciIsImhhbmRsZU9wZW5GaWx0ZXJzIiwiUmVhY3QiLCJDb21wb25lbnQiLCJwcm9wVHlwZXMiLCJQcm9wVHlwZXMiLCJhcnJheSIsImlzUmVxdWlyZWQiLCJzdHJpbmciLCJhcnJheU9mIiwib2JqZWN0IiwiYW55IiwiZnVuYyIsIm51bWJlciIsImRlZmF1bHRQcm9wcyIsIm1lbW8iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7QUFDQTs7Ozs7O0FBRUE7Ozs7Ozs7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LHNCQUFVRyxNQVJBO0FBU3ZCZCxFQUFBQSxrQkFBa0IsRUFBRVcsc0JBQVVHLE1BVFA7QUFVdkJoQixFQUFBQSxXQUFXLEVBQUVhLHNCQUFVSSxPQUFWLENBQWtCSixzQkFBVUssTUFBNUIsQ0FWVTtBQVd2QjdDLEVBQUFBLGdCQUFnQixFQUFFd0Msc0JBQVVPLElBWEwsQ0FXVzs7QUFYWCxDQUF6QjtBQWNBN0QsWUFBWSxDQUFDK0QsWUFBYixHQUE0QjtBQUFFckIsRUFBQUEsV0FBVyxFQUFFO0FBQWYsQ0FBNUI7OzRCQUVlUyxrQkFBTWEsSUFBTixDQUFXaEUsWUFBWCxDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgbWVtb2l6ZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IE1lbnUgZnJvbSAnLi4vTWVudSc7XG5pbXBvcnQgTWVudUZpbHRlciBmcm9tICcuL01lbnVGaWx0ZXInO1xuaW1wb3J0IE1lbnVIZWFkZXIgZnJvbSAnLi9NZW51SGVhZGVyJztcblxuLyoqXG4gKiBSZW5kZXJzIGZpbHRlcmVkIG1lbnUuXG4gKiBUaGlzIHJlY2VpdmVzIHRoZSBzYW1lIHByb3BlcnRpZXMgYXMgdGhlIHtAbGluayBNZW51fSBpbiBhZGRpdGlvbiB0byBzb21lIGZpbHRlcmluZyBvcHRpb25zLlxuICogQHBhcmFtIHtvYmplY3RbXX0gZmlsdGVycyAtIGFuIGFycmF5IG9mIGZpbHRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0aXRsZSAtIHRoZSBtZW51IHRpdGxlXG4gKlxuICovXG5jbGFzcyBGaWx0ZXJlZE1lbnUgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQge1xuICBzdGF0ZSA9IHtcbiAgICBmaWx0ZXJzT3BlbjogZmFsc2UsXG4gICAgc2VsZWN0ZWRGaWx0ZXJzOiBbXSxcbiAgfTtcblxuICAvKipcbiAgICogSGFuZGxlcyBvcGVuaW5nIHRoZSBmaWx0ZXIgbWVudVxuICAgKi9cbiAgaGFuZGxlT3BlbkZpbHRlcnMgPSAoKSA9PiB7XG4gICAgdGhpcy5zZXRTdGF0ZShzdGF0ZSA9PiAoeyBmaWx0ZXJzT3BlbjogIXN0YXRlLmZpbHRlcnNPcGVuIH0pKTtcbiAgfTtcblxuICAvKipcbiAgICogSGFuZGxlcyB0b2dnbGluZyBhIGZpbHRlclxuICAgKiBAcGFyYW0ge29iamVjdH0gZmlsdGVyIC0gdGhlIGZpbHRlciBiZWluZyB0b2dnbGVkXG4gICAqL1xuICBoYW5kbGVUb2dnbGVGaWx0ZXIgPSBmaWx0ZXIgPT4ge1xuICAgIGNvbnN0IHsgc2VsZWN0ZWRGaWx0ZXJzIH0gPSB0aGlzLnN0YXRlO1xuICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHNlbGVjdGVkRmlsdGVycy5maW5kSW5kZXgoc2VsZWN0ZWQgPT4gKHNlbGVjdGVkLmlkID09PSBmaWx0ZXIuaWQpKTtcbiAgICBjb25zdCBuZXdDaGVja2VkID0gWy4uLnNlbGVjdGVkRmlsdGVyc107XG5cbiAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkge1xuICAgICAgbmV3Q2hlY2tlZC5wdXNoKGZpbHRlcik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ld0NoZWNrZWQuc3BsaWNlKGN1cnJlbnRJbmRleCwgMSk7XG4gICAgfVxuXG4gICAgdGhpcy5zZXRTdGF0ZSh7IHNlbGVjdGVkRmlsdGVyczogbmV3Q2hlY2tlZCB9KTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gICAgdGhpcy5wcm9wcy5vbkZpbHRlcnNDaGFuZ2VkICYmIHRoaXMucHJvcHMub25GaWx0ZXJzQ2hhbmdlZChuZXdDaGVja2VkKTtcbiAgfTtcblxuICAvKipcbiAgICogQXBwbGllcyBkZWZhdWx0IGtleSB2YWx1ZXMgdG8gdGhlIGZpbHRlcnMuXG4gICAqIFRoaXMgcHJlcGFyZXMgZmlsdGVycyBmb3IgdXNlIGluIHRoZSBmaWx0ZXJlZCBtZW51LlxuICAgKiBAcGFyYW0ge1tdfSBmaWx0ZXJzIC0gYW4gYXJyYXkgb2YgZmlsdGVyIG9iamVjdHNcbiAgICogQHJldHVybnMge1tdfSAtIGFuIGFycmF5IG9mIG5vcm1hbGl6ZWQgZmlsdGVyIG9iamVjdHMuXG4gICAqL1xuICBub3JtYWxpemVGaWx0ZXJzID0gbWVtb2l6ZShmaWx0ZXJzID0+IHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMCwgbGVuID0gZmlsdGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgY29uc3QgZmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgICAge30sXG4gICAgICAgIHtcbiAgICAgICAgICB2YWx1ZTogdHJ1ZSwgZGlzYWJsZXM6IFtdLCBpZDogZmlsdGVyc1tpXS5rZXksXG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcnNbaV0sXG4gICAgICApO1xuICAgICAgbm9ybWFsaXplZC5wdXNoKGZpbHRlcik7XG4gICAgfVxuICAgIHJldHVybiBub3JtYWxpemVkO1xuICB9KTtcblxuICAvKipcbiAgICogRXhlY3V0ZXMgYWxsIG9mIHRoZSBlbmFibGVkIGZpbHRlcnMuXG4gICAqIEZpbHRlcmluZyBpcyBwZXJmb3JtZWQgYnkgc2hhbGxvdyBtYXRjaGluZyBhZ2FpbnN0IHRoZSBmaWx0ZXIgYHZhbHVlYC5cbiAgICogRmlsdGVycyBhcmUgZXZhbHVhdGVkIGFzIFwib3JcIlxuICAgKiBAcHJvcGVydHkgZW50cmllcyAtIHRoZSBtZW51IGVudHJpZXNcbiAgICogQHByb3BlcnR5IHtzdHJpbmdbXX0gZmlsdGVycyAtIHRoZSBmaWx0ZXJlcyB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICAgKiBAcmV0dXJucyB7W119IC0gdGhlIGZpbHRlcmVkIGVudHJpZXNcbiAgICovXG4gIGZpbHRlciA9IG1lbW9pemUoKGVudHJpZXMsIGZpbHRlcnMpID0+IHtcbiAgICBjb25zdCBncm91cHMgPSBfLmNsb25lRGVlcChlbnRyaWVzKTtcblxuICAgIC8vIGZpbHRlciBjaGlsZHJlblxuICAgIGdyb3Vwcy5tYXAoZ3JvdXAgPT4ge1xuICAgICAgY29uc3QgX2ZpbHRlcnMgPSBmaWx0ZXJzLmZpbHRlcihmaWx0ZXIgPT4gKCFmaWx0ZXIubm9uRmlsdGVyKSk7IC8vIHNraXAgb3ZlciBhbnkgZW50cmllcyB0aGF0IGFyZSBub3QgdHJ1ZSBmaWx0ZXJzIChzdWNoIGFzIGNvbmZpZyBvcHRpb25zKVxuXG4gICAgICBncm91cC5jaGlsZHJlbiA9IGdyb3VwLmNoaWxkcmVuLmZpbHRlcihlbnRyeSA9PiB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBfZmlsdGVycy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgICAgICAgIGlmIChCb29sZWFuKGVudHJ5W19maWx0ZXJzW2ldLmtleV0pID09PSBfZmlsdGVyc1tpXS52YWx1ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBfZmlsdGVycy5sZW5ndGggPT09IDA7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBncm91cDtcbiAgICB9KTtcblxuICAgIC8vIGZpbHRlciBlbXB0eSBncm91cHNcbiAgICByZXR1cm4gZ3JvdXBzLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5jaGlsZHJlbi5sZW5ndGggPiAwKTtcbiAgfSk7XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGZpbHRlcnMsXG4gICAgICBhY3RpdmUsXG4gICAgICBlbnRyaWVzLFxuICAgICAgaGVpZ2h0LFxuICAgICAgdGl0bGUsXG4gICAgICBvbkl0ZW1DbGljayxcbiAgICAgIHdpZHRoLFxuICAgICAgc3RhdHVzSWNvbnMsXG4gICAgICBlbXB0eU5vdGljZSxcbiAgICAgIHRhcmdldExhbmd1YWdlRm9udCxcbiAgICB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCB7IHNlbGVjdGVkRmlsdGVycywgZmlsdGVyc09wZW4gfSA9IHRoaXMuc3RhdGU7XG4gICAgY29uc3Qgbm9ybWFsaXplZEZpbHRlcnMgPSB0aGlzLm5vcm1hbGl6ZUZpbHRlcnMoZmlsdGVycyk7XG4gICAgY29uc3QgZmlsdGVyZWRFbnRyaWVzID0gdGhpcy5maWx0ZXIoZW50cmllcywgc2VsZWN0ZWRGaWx0ZXJzKTtcblxuICAgIC8vIGZhbGxiYWNrIHRvIGZpbHRlciBpY29uc1xuICAgIGNvbnN0IG1lbnVTdGF0dXNJY29ucyA9IHN0YXR1c0ljb25zICE9PSB1bmRlZmluZWQgPyBzdGF0dXNJY29ucyA6IGZpbHRlcnM7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPFJlYWN0LkZyYWdtZW50PlxuICAgICAgICA8TWVudVxuICAgICAgICAgIGhlYWRlcj17XG4gICAgICAgICAgICBmaWx0ZXJzLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgPE1lbnVGaWx0ZXJcbiAgICAgICAgICAgICAgICBvblRvZ2dsZT17dGhpcy5oYW5kbGVUb2dnbGVGaWx0ZXJ9XG4gICAgICAgICAgICAgICAgb25PcGVuPXt0aGlzLmhhbmRsZU9wZW5GaWx0ZXJzfVxuICAgICAgICAgICAgICAgIG9wZW49e2ZpbHRlcnNPcGVufVxuICAgICAgICAgICAgICAgIHRpdGxlPXt0aXRsZX1cbiAgICAgICAgICAgICAgICBmaWx0ZXJzPXtub3JtYWxpemVkRmlsdGVyc31cbiAgICAgICAgICAgICAgICBzZWxlY3RlZD17c2VsZWN0ZWRGaWx0ZXJzfVxuICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgPE1lbnVIZWFkZXIgdGl0bGU9e3RpdGxlfSAvPlxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cbiAgICAgICAgICB3aWR0aD17d2lkdGh9XG4gICAgICAgICAgZW1wdHlOb3RpY2U9e2VtcHR5Tm90aWNlfVxuICAgICAgICAgIHN0YXR1c0ljb25zPXttZW51U3RhdHVzSWNvbnN9XG4gICAgICAgICAgZW50cmllcz17ZmlsdGVyZWRFbnRyaWVzfVxuICAgICAgICAgIGFjdGl2ZT17YWN0aXZlfVxuICAgICAgICAgIGhlaWdodD17aGVpZ2h0fVxuICAgICAgICAgIG9uSXRlbUNsaWNrPXtvbkl0ZW1DbGlja31cbiAgICAgICAgICB0YXJnZXRMYW5ndWFnZUZvbnQ9e3RhcmdldExhbmd1YWdlRm9udH1cbiAgICAgICAgLz5cbiAgICAgIDwvUmVhY3QuRnJhZ21lbnQ+XG4gICAgKTtcbiAgfVxufVxuXG5GaWx0ZXJlZE1lbnUucHJvcFR5cGVzID0ge1xuICBmaWx0ZXJzOiBQcm9wVHlwZXMuYXJyYXkuaXNSZXF1aXJlZCxcbiAgdGl0bGU6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgZW50cmllczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9iamVjdCksXG4gIGFjdGl2ZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgaGVpZ2h0OiBQcm9wVHlwZXMuYW55LFxuICBvbkl0ZW1DbGljazogUHJvcFR5cGVzLmZ1bmMsXG4gIHdpZHRoOiBQcm9wVHlwZXMubnVtYmVyLFxuICBlbXB0eU5vdGljZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgdGFyZ2V0TGFuZ3VhZ2VGb250OiBQcm9wVHlwZXMuc3RyaW5nLFxuICBzdGF0dXNJY29uczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9iamVjdCksXG4gIG9uRmlsdGVyc0NoYW5nZWQ6IFByb3BUeXBlcy5mdW5jLCAvLyBvcHRpb25hbCBjYWxsYmFjayBmb3IgZmlsdGVyIGNoYW5nZSBldmVudHNcbn07XG5cbkZpbHRlcmVkTWVudS5kZWZhdWx0UHJvcHMgPSB7IGVtcHR5Tm90aWNlOiAnTm8gcmVzdWx0cyBmb3VuZCcgfTtcblxuZXhwb3J0IGRlZmF1bHQgUmVhY3QubWVtbyhGaWx0ZXJlZE1lbnUpO1xuIl19