rr-table
Version:
Responsive and customizable React Table
270 lines (218 loc) • 26.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _styledComponents = _interopRequireDefault(require("styled-components"));
var _v = _interopRequireDefault(require("uuid/v4"));
var _Cell = _interopRequireDefault(require("../Cell"));
var _utils = require("../../utils");
var _colorPalette = require("../../config/styles/colorPalette");
require("../../config/styles/default.css");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); }
function _templateObject() {
var data = _taggedTemplateLiteral(["\n background-color: ", ";\n box-sizing: border-box;\n color: ", ";\n cursor: ", ";\n display: flex;\n flex-wrap: nowrap;\n height: ", ";\n justify-content: space-evenly;\n width: 100%;\n\n transition: all 0.2s ease;\n\n &:hover {\n background-color: ", ";\n color: ", ";\n }\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
/** Styles */
var Wrapper = _styledComponents.default.div(_templateObject(), function (_ref) {
var backgroundColor = _ref.backgroundColor,
selected = _ref.selected,
selectedRowColor = _ref.selectedRowColor;
return selected ? selectedRowColor || _colorPalette.primary : backgroundColor;
}, function (_ref2) {
var selected = _ref2.selected,
defaultTextColor = _ref2.defaultTextColor,
selectedTextColor = _ref2.selectedTextColor;
return selected ? selectedTextColor || 'white' : defaultTextColor;
}, function (_ref3) {
var clickable = _ref3.clickable;
return clickable ? 'pointer' : 'normal';
}, function (_ref4) {
var rowHeight = _ref4.rowHeight;
return rowHeight;
}, function (_ref5) {
var rowFeedback = _ref5.rowFeedback,
selected = _ref5.selected,
clickable = _ref5.clickable,
hoveredRowColor = _ref5.hoveredRowColor;
return rowFeedback && !selected && clickable && (hoveredRowColor || _colorPalette.lightGrey);
}, function (_ref6) {
var selected = _ref6.selected,
selectedTextColor = _ref6.selectedTextColor,
hoveredTextColor = _ref6.hoveredTextColor;
return selected ? selectedTextColor : hoveredTextColor || 'inherit';
});
/** Component */
var Row = function Row(_ref7) {
var breakpoints = _ref7.breakpoints,
cellPadding = _ref7.cellPadding,
center = _ref7.center,
children = _ref7.children,
colWidths = _ref7.colWidths,
colored = _ref7.colored,
data = _ref7.data,
emptyCellContent = _ref7.emptyCellContent,
fontSize = _ref7.fontSize,
id = _ref7.id,
items = _ref7.items,
lineClamp = _ref7.lineClamp,
lineHeight = _ref7.lineHeight,
onClick = _ref7.onClick,
onSort = _ref7.onSort,
priorities = _ref7.priorities,
rowColor = _ref7.rowColor,
rowFeedback = _ref7.rowFeedback,
rowHeight = _ref7.rowHeight,
selected = _ref7.selected,
sort = _ref7.sort,
style = _ref7.style,
textColor = _ref7.textColor;
var setBackgroundColor = function setBackgroundColor() {
if (typeof colored === 'string') {
return colored;
}
if (colored === true) {
return _colorPalette.grey;
}
if (typeof rowColor === 'string') {
return rowColor;
}
if (_typeof(rowColor) === 'object') {
return rowColor.default;
}
return 'transparent';
};
var handleClick = function handleClick() {
if (typeof onClick === 'function') {
return onClick({
breakpoints: breakpoints,
data: data,
id: id,
items: items,
priorities: priorities
});
}
return null;
};
var defineDefaultTextColor = function defineDefaultTextColor() {
if (typeof textColor === 'string') {
return textColor;
}
if (_typeof(textColor) === 'object') {
return textColor.default;
}
return 'inherit';
};
return _react.default.createElement(Wrapper, {
backgroundColor: setBackgroundColor(),
clickable: typeof onClick === 'function',
defaultTextColor: defineDefaultTextColor(),
hoveredRowColor: _typeof(rowColor) === 'object' && rowColor.hovered,
hoveredTextColor: _typeof(textColor) === 'object' && textColor.hovered,
onClick: handleClick,
rowFeedback: rowFeedback,
rowHeight: rowHeight,
selected: selected,
selectedRowColor: _typeof(rowColor) === 'object' && rowColor.selected,
selectedTextColor: _typeof(textColor) === 'object' && textColor.selected,
style: style
}, children || items.map(function (item, i) {
var cellId = (0, _v.default)();
var columnWidth = colWidths && colWidths[i];
var width = (0, _utils.defineColWidth)(columnWidth);
return _react.default.createElement(_Cell.default, {
breakpoints: breakpoints,
center: center,
data: item,
emptyCellContent: emptyCellContent,
fontSize: fontSize,
id: cellId,
key: cellId,
lineClamp: lineClamp,
lineHeight: lineHeight,
onSort: onSort,
padding: cellPadding,
priority: priorities && priorities[i],
sort: sort // textColor={textColor}
,
width: width
});
}));
};
/** PropTypes */
Row.propTypes = {
/** List of media queries breakpoints */
breakpoints: _propTypes.default.arrayOf(_propTypes.default.number),
/** Center the text in the cell */
center: _propTypes.default.bool,
/** Cell Padding */
cellPadding: _propTypes.default.string,
children: _propTypes.default.oneOfType([_propTypes.default.node, _propTypes.default.arrayOf(_propTypes.default.node)]),
// TODO
/** List of columns widths */
colWidths: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.number, _propTypes.default.string])),
/** Color one line out of two (set to true or set color) */
colored: _propTypes.default.oneOfType([_propTypes.default.bool, _propTypes.default.string]),
/** Data as an object */
data: _propTypes.default.object,
/** Text or Component to display when cell is empty */
emptyCellContent: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.func]),
/** Text font-size */
fontSize: _propTypes.default.string,
/** Row id */
id: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number]).isRequired,
/** List of the data */
items: _propTypes.default.arrayOf(_propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.number, _propTypes.default.node, _propTypes.default.shape({
title: _propTypes.default.string.isRequired,
sortingKey: _propTypes.default.string
})])),
/** Number of lines before ellipsis */
lineClamp: _propTypes.default.number,
/** Height of a line */
lineHeight: _propTypes.default.number,
/** List of column display priorities */
priorities: _propTypes.default.arrayOf(_propTypes.default.number),
/** Colors of the row */
rowColor: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({
default: _propTypes.default.string.isRequired,
hovered: _propTypes.default.string,
selected: _propTypes.default.string.isRequired
})]),
/** user feedback */
rowFeedback: _propTypes.default.bool,
/** Height of the Row */
rowHeight: _propTypes.default.string,
/** row is selected */
selected: _propTypes.default.bool,
/** On row click custom func */
onClick: _propTypes.default.oneOfType([_propTypes.default.func, _propTypes.default.bool]),
/** sorting function */
onSort: _propTypes.default.func,
/** sorting object */
sort: _propTypes.default.shape({
sortingKey: _propTypes.default.string,
order: _propTypes.default.oneOf(['ASC', 'DESC'])
}),
/** Custom Row style */
style: _propTypes.default.object,
/** Colors of the displayed text */
textColor: _propTypes.default.oneOfType([_propTypes.default.string, _propTypes.default.shape({
default: _propTypes.default.string.isRequired,
hovered: _propTypes.default.string,
selected: _propTypes.default.string.isRequired
})])
};
Row.defaultProps = {
rowHeight: '4em'
};
var _default = Row;
exports.default = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1Jvdy9pbmRleC5qc3giXSwibmFtZXMiOlsiV3JhcHBlciIsInN0eWxlZCIsImRpdiIsImJhY2tncm91bmRDb2xvciIsInNlbGVjdGVkIiwic2VsZWN0ZWRSb3dDb2xvciIsInByaW1hcnkiLCJkZWZhdWx0VGV4dENvbG9yIiwic2VsZWN0ZWRUZXh0Q29sb3IiLCJjbGlja2FibGUiLCJyb3dIZWlnaHQiLCJyb3dGZWVkYmFjayIsImhvdmVyZWRSb3dDb2xvciIsImxpZ2h0R3JleSIsImhvdmVyZWRUZXh0Q29sb3IiLCJSb3ciLCJicmVha3BvaW50cyIsImNlbGxQYWRkaW5nIiwiY2VudGVyIiwiY2hpbGRyZW4iLCJjb2xXaWR0aHMiLCJjb2xvcmVkIiwiZGF0YSIsImVtcHR5Q2VsbENvbnRlbnQiLCJmb250U2l6ZSIsImlkIiwiaXRlbXMiLCJsaW5lQ2xhbXAiLCJsaW5lSGVpZ2h0Iiwib25DbGljayIsIm9uU29ydCIsInByaW9yaXRpZXMiLCJyb3dDb2xvciIsInNvcnQiLCJzdHlsZSIsInRleHRDb2xvciIsInNldEJhY2tncm91bmRDb2xvciIsImdyZXkiLCJkZWZhdWx0IiwiaGFuZGxlQ2xpY2siLCJkZWZpbmVEZWZhdWx0VGV4dENvbG9yIiwiaG92ZXJlZCIsIm1hcCIsIml0ZW0iLCJpIiwiY2VsbElkIiwiY29sdW1uV2lkdGgiLCJ3aWR0aCIsInByb3BUeXBlcyIsIlByb3BUeXBlcyIsImFycmF5T2YiLCJudW1iZXIiLCJib29sIiwic3RyaW5nIiwib25lT2ZUeXBlIiwibm9kZSIsIm9iamVjdCIsImZ1bmMiLCJpc1JlcXVpcmVkIiwic2hhcGUiLCJ0aXRsZSIsInNvcnRpbmdLZXkiLCJvcmRlciIsIm9uZU9mIiwiZGVmYXVsdFByb3BzIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUE7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBRUE7O0FBRUE7O0FBQ0E7O0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBO0FBQ0Es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QUFVVSxLQUFWLENBQWdCO0FBQ3BCRSxJQUFBQSxVQUFVLEVBQUVaLG1CQUFVSSxNQURGO0FBRXBCUyxJQUFBQSxLQUFLLEVBQUViLG1CQUFVYyxLQUFWLENBQWdCLENBQUMsS0FBRCxFQUFRLE1BQVIsQ0FBaEI7QUFGYSxHQUFoQixDQTNEUTs7QUErRGQ7QUFDQTdCLEVBQUFBLEtBQUssRUFBRWUsbUJBQVVPLE1BaEVIOztBQWlFZDtBQUNBckIsRUFBQUEsU0FBUyxFQUFFYyxtQkFBVUssU0FBVixDQUFvQixDQUM3QkwsbUJBQVVJLE1BRG1CLEVBRTdCSixtQkFBVVUsS0FBVixDQUFnQjtBQUNkckIsSUFBQUEsT0FBTyxFQUFFVyxtQkFBVUksTUFBVixDQUFpQkssVUFEWjtBQUVkakIsSUFBQUEsT0FBTyxFQUFFUSxtQkFBVUksTUFGTDtBQUdkakQsSUFBQUEsUUFBUSxFQUFFNkMsbUJBQVVJLE1BQVYsQ0FBaUJLO0FBSGIsR0FBaEIsQ0FGNkIsQ0FBcEI7QUFsRUcsQ0FBaEI7QUE0RUEzQyxHQUFHLENBQUNpRCxZQUFKLEdBQW1CO0FBQ2pCdEQsRUFBQUEsU0FBUyxFQUFFO0FBRE0sQ0FBbkI7ZUFJZUssRyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdzdHlsZWQtY29tcG9uZW50cyc7XG5pbXBvcnQgdXVpZHY0IGZyb20gJ3V1aWQvdjQnO1xuXG5pbXBvcnQgQ2VsbCBmcm9tICdjb21wb25lbnRzL0NlbGwnO1xuXG5pbXBvcnQgeyBkZWZpbmVDb2xXaWR0aCB9IGZyb20gJ3V0aWxzJztcbmltcG9ydCB7IGdyZXksIHByaW1hcnksIGxpZ2h0R3JleSB9IGZyb20gJ2NvbmZpZy9zdHlsZXMvY29sb3JQYWxldHRlJztcbmltcG9ydCAnY29uZmlnL3N0eWxlcy9kZWZhdWx0LmNzcyc7XG5cbi8qKiBTdHlsZXMgKi9cbmNvbnN0IFdyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7IGJhY2tncm91bmRDb2xvciwgc2VsZWN0ZWQsIHNlbGVjdGVkUm93Q29sb3IgfSkgPT4gKHNlbGVjdGVkID8gc2VsZWN0ZWRSb3dDb2xvciB8fCBwcmltYXJ5IDogYmFja2dyb3VuZENvbG9yKX07XG4gIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gIGNvbG9yOiAkeyh7IHNlbGVjdGVkLCBkZWZhdWx0VGV4dENvbG9yLCBzZWxlY3RlZFRleHRDb2xvciB9KSA9PiAoc2VsZWN0ZWQgPyBzZWxlY3RlZFRleHRDb2xvciB8fCAnd2hpdGUnIDogZGVmYXVsdFRleHRDb2xvcil9O1xuICBjdXJzb3I6ICR7KHsgY2xpY2thYmxlIH0pID0+IChjbGlja2FibGUgPyAncG9pbnRlcicgOiAnbm9ybWFsJyl9O1xuICBkaXNwbGF5OiBmbGV4O1xuICBmbGV4LXdyYXA6IG5vd3JhcDtcbiAgaGVpZ2h0OiAkeyh7IHJvd0hlaWdodCB9KSA9PiByb3dIZWlnaHR9O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWV2ZW5seTtcbiAgd2lkdGg6IDEwMCU7XG5cbiAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTtcblxuICAmOmhvdmVyIHtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7XG4gICAgcm93RmVlZGJhY2ssIHNlbGVjdGVkLCBjbGlja2FibGUsIGhvdmVyZWRSb3dDb2xvcixcbiAgfSkgPT4gcm93RmVlZGJhY2sgJiYgIXNlbGVjdGVkICYmIGNsaWNrYWJsZSAmJiAoaG92ZXJlZFJvd0NvbG9yIHx8IGxpZ2h0R3JleSl9O1xuICAgIGNvbG9yOiAkeyh7IHNlbGVjdGVkLCBzZWxlY3RlZFRleHRDb2xvciwgaG92ZXJlZFRleHRDb2xvciB9KSA9PiAoc2VsZWN0ZWQgPyBzZWxlY3RlZFRleHRDb2xvciA6IGhvdmVyZWRUZXh0Q29sb3IgfHwgJ2luaGVyaXQnKX07XG4gIH1cbmA7XG5cbi8qKiBDb21wb25lbnQgKi9cbmNvbnN0IFJvdyA9ICh7XG4gIGJyZWFrcG9pbnRzLFxuICBjZWxsUGFkZGluZyxcbiAgY2VudGVyLFxuICBjaGlsZHJlbixcbiAgY29sV2lkdGhzLFxuICBjb2xvcmVkLFxuICBkYXRhLFxuICBlbXB0eUNlbGxDb250ZW50LFxuICBmb250U2l6ZSxcbiAgaWQsXG4gIGl0ZW1zLFxuICBsaW5lQ2xhbXAsXG4gIGxpbmVIZWlnaHQsXG4gIG9uQ2xpY2ssXG4gIG9uU29ydCxcbiAgcHJpb3JpdGllcyxcbiAgcm93Q29sb3IsXG4gIHJvd0ZlZWRiYWNrLFxuICByb3dIZWlnaHQsXG4gIHNlbGVjdGVkLFxuICBzb3J0LFxuICBzdHlsZSxcbiAgdGV4dENvbG9yLFxufSkgPT4ge1xuICBjb25zdCBzZXRCYWNrZ3JvdW5kQ29sb3IgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBjb2xvcmVkID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIGNvbG9yZWQ7XG4gICAgfVxuICAgIGlmIChjb2xvcmVkID09PSB0cnVlKSB7XG4gICAgICByZXR1cm4gZ3JleTtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByb3dDb2xvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiByb3dDb2xvcjtcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByb3dDb2xvciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiByb3dDb2xvci5kZWZhdWx0O1xuICAgIH1cblxuICAgIHJldHVybiAndHJhbnNwYXJlbnQnO1xuICB9O1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gKCkgPT4ge1xuICAgIGlmICh0eXBlb2Ygb25DbGljayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIG9uQ2xpY2soe1xuICAgICAgICBicmVha3BvaW50cyxcbiAgICAgICAgZGF0YSxcbiAgICAgICAgaWQsXG4gICAgICAgIGl0ZW1zLFxuICAgICAgICBwcmlvcml0aWVzLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9O1xuXG4gIGNvbnN0IGRlZmluZURlZmF1bHRUZXh0Q29sb3IgPSAoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiB0ZXh0Q29sb3IgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gdGV4dENvbG9yO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIHRleHRDb2xvciA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiB0ZXh0Q29sb3IuZGVmYXVsdDtcbiAgICB9XG4gICAgcmV0dXJuICdpbmhlcml0JztcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxXcmFwcGVyXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I9e3NldEJhY2tncm91bmRDb2xvcigpfVxuICAgICAgY2xpY2thYmxlPXt0eXBlb2Ygb25DbGljayA9PT0gJ2Z1bmN0aW9uJ31cbiAgICAgIGRlZmF1bHRUZXh0Q29sb3I9e2RlZmluZURlZmF1bHRUZXh0Q29sb3IoKX1cbiAgICAgIGhvdmVyZWRSb3dDb2xvcj17dHlwZW9mIHJvd0NvbG9yID09PSAnb2JqZWN0JyAmJiByb3dDb2xvci5ob3ZlcmVkfVxuICAgICAgaG92ZXJlZFRleHRDb2xvcj17dHlwZW9mIHRleHRDb2xvciA9PT0gJ29iamVjdCcgJiYgdGV4dENvbG9yLmhvdmVyZWR9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICAgIHJvd0ZlZWRiYWNrPXtyb3dGZWVkYmFja31cbiAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgc2VsZWN0ZWQ9e3NlbGVjdGVkfVxuICAgICAgc2VsZWN0ZWRSb3dDb2xvcj17dHlwZW9mIHJvd0NvbG9yID09PSAnb2JqZWN0JyAmJiByb3dDb2xvci5zZWxlY3RlZH1cbiAgICAgIHNlbGVjdGVkVGV4dENvbG9yPXt0eXBlb2YgdGV4dENvbG9yID09PSAnb2JqZWN0JyAmJiB0ZXh0Q29sb3Iuc2VsZWN0ZWR9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgPlxuICAgICAge2NoaWxkcmVuXG4gICAgICAgIHx8IGl0ZW1zLm1hcCgoaXRlbSwgaSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNlbGxJZCA9IHV1aWR2NCgpO1xuICAgICAgICAgIGNvbnN0IGNvbHVtbldpZHRoID0gY29sV2lkdGhzICYmIGNvbFdpZHRoc1tpXTtcbiAgICAgICAgICBjb25zdCB3aWR0aCA9IGRlZmluZUNvbFdpZHRoKGNvbHVtbldpZHRoKTtcbiAgICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgPENlbGxcbiAgICAgICAgICAgICAgYnJlYWtwb2ludHM9e2JyZWFrcG9pbnRzfVxuICAgICAgICAgICAgICBjZW50ZXI9e2NlbnRlcn1cbiAgICAgICAgICAgICAgZGF0YT17aXRlbX1cbiAgICAgICAgICAgICAgZW1wdHlDZWxsQ29udGVudD17ZW1wdHlDZWxsQ29udGVudH1cbiAgICAgICAgICAgICAgZm9udFNpemU9e2ZvbnRTaXplfVxuICAgICAgICAgICAgICBpZD17Y2VsbElkfVxuICAgICAgICAgICAgICBrZXk9e2NlbGxJZH1cbiAgICAgICAgICAgICAgbGluZUNsYW1wPXtsaW5lQ2xhbXB9XG4gICAgICAgICAgICAgIGxpbmVIZWlnaHQ9e2xpbmVIZWlnaHR9XG4gICAgICAgICAgICAgIG9uU29ydD17b25Tb3J0fVxuICAgICAgICAgICAgICBwYWRkaW5nPXtjZWxsUGFkZGluZ31cbiAgICAgICAgICAgICAgcHJpb3JpdHk9e3ByaW9yaXRpZXMgJiYgcHJpb3JpdGllc1tpXX1cbiAgICAgICAgICAgICAgc29ydD17c29ydH1cbiAgICAgICAgICAgICAgLy8gdGV4dENvbG9yPXt0ZXh0Q29sb3J9XG4gICAgICAgICAgICAgIHdpZHRoPXt3aWR0aH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKTtcbiAgICAgICAgfSl9XG4gICAgPC9XcmFwcGVyPlxuICApO1xufTtcblxuLyoqIFByb3BUeXBlcyAqL1xuUm93LnByb3BUeXBlcyA9IHtcbiAgLyoqIExpc3Qgb2YgbWVkaWEgcXVlcmllcyBicmVha3BvaW50cyAqL1xuICBicmVha3BvaW50czogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlciksXG4gIC8qKiBDZW50ZXIgdGhlIHRleHQgaW4gdGhlIGNlbGwgKi9cbiAgY2VudGVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqIENlbGwgUGFkZGluZyAqL1xuICBjZWxsUGFkZGluZzogUHJvcFR5cGVzLnN0cmluZyxcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ub2RlLCBQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMubm9kZSldKSwgLy8gVE9ET1xuICAvKiogTGlzdCBvZiBjb2x1bW5zIHdpZHRocyAqL1xuICBjb2xXaWR0aHM6IFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSksXG4gIC8qKiBDb2xvciBvbmUgbGluZSBvdXQgb2YgdHdvIChzZXQgdG8gdHJ1ZSBvciBzZXQgY29sb3IpICovXG4gIGNvbG9yZWQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5ib29sLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKiBEYXRhIGFzIGFuIG9iamVjdCAqL1xuICBkYXRhOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogVGV4dCBvciBDb21wb25lbnQgdG8gZGlzcGxheSB3aGVuIGNlbGwgaXMgZW1wdHkgKi9cbiAgZW1wdHlDZWxsQ29udGVudDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLnN0cmluZywgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqIFRleHQgZm9udC1zaXplICovXG4gIGZvbnRTaXplOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKiogUm93IGlkICovXG4gIGlkOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcbiAgLyoqIExpc3Qgb2YgdGhlIGRhdGEgKi9cbiAgaXRlbXM6IFByb3BUeXBlcy5hcnJheU9mKFxuICAgIFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgICAgUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIFByb3BUeXBlcy5udW1iZXIsXG4gICAgICBQcm9wVHlwZXMubm9kZSxcbiAgICAgIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICAgIHRpdGxlOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgICAgIHNvcnRpbmdLZXk6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICB9KSxcbiAgICBdKSxcbiAgKSxcbiAgLyoqIE51bWJlciBvZiBsaW5lcyBiZWZvcmUgZWxsaXBzaXMgKi9cbiAgbGluZUNsYW1wOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKiogSGVpZ2h0IG9mIGEgbGluZSAqL1xuICBsaW5lSGVpZ2h0OiBQcm9wVHlwZXMubnVtYmVyLFxuXG4gIC8qKiBMaXN0IG9mIGNvbHVtbiBkaXNwbGF5IHByaW9yaXRpZXMgKi9cbiAgcHJpb3JpdGllczogUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm51bWJlciksXG4gIC8qKiBDb2xvcnMgb2YgdGhlIHJvdyAqL1xuICByb3dDb2xvcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbXG4gICAgUHJvcFR5cGVzLnN0cmluZyxcbiAgICBQcm9wVHlwZXMuc2hhcGUoe1xuICAgICAgZGVmYXVsdDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgICAgaG92ZXJlZDogUHJvcFR5cGVzLnN0cmluZyxcbiAgICAgIHNlbGVjdGVkOiBQcm9wVHlwZXMuc3RyaW5nLmlzUmVxdWlyZWQsXG4gICAgfSksXG4gIF0pLFxuICAvKiogdXNlciBmZWVkYmFjayAqL1xuICByb3dGZWVkYmFjazogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKiBIZWlnaHQgb2YgdGhlIFJvdyAqL1xuICByb3dIZWlnaHQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKiByb3cgaXMgc2VsZWN0ZWQgKi9cbiAgc2VsZWN0ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKiogT24gcm93IGNsaWNrIGN1c3RvbSBmdW5jICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKiogc29ydGluZyBmdW5jdGlvbiAqL1xuICBvblNvcnQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKiogc29ydGluZyBvYmplY3QgKi9cbiAgc29ydDogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBzb3J0aW5nS2V5OiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIG9yZGVyOiBQcm9wVHlwZXMub25lT2YoWydBU0MnLCAnREVTQyddKSxcbiAgfSksXG4gIC8qKiBDdXN0b20gUm93IHN0eWxlICovXG4gIHN0eWxlOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKiogQ29sb3JzIG9mIHRoZSBkaXNwbGF5ZWQgdGV4dCAqL1xuICB0ZXh0Q29sb3I6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1xuICAgIFByb3BUeXBlcy5zdHJpbmcsXG4gICAgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICAgIGRlZmF1bHQ6IFByb3BUeXBlcy5zdHJpbmcuaXNSZXF1aXJlZCxcbiAgICAgIGhvdmVyZWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gICAgICBzZWxlY3RlZDogUHJvcFR5cGVzLnN0cmluZy5pc1JlcXVpcmVkLFxuICAgIH0pLFxuICBdKSxcbn07XG5cblJvdy5kZWZhdWx0UHJvcHMgPSB7XG4gIHJvd0hlaWdodDogJzRlbScsXG59O1xuXG5leHBvcnQgZGVmYXVsdCBSb3c7XG4iXX0=