react-lightning-design-components
Version:
Salesforce Lightning Design System components built with React 16
197 lines (153 loc) • 18.7 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ButtonIcon = exports.BUTTON_TYPES = undefined;
var _extends2 = require('babel-runtime/helpers/extends');
var _extends3 = _interopRequireDefault(_extends2);
var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
var _defineProperty3 = _interopRequireDefault(_defineProperty2);
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 _classnames2 = require('classnames');
var _classnames3 = _interopRequireDefault(_classnames2);
var _propTypes = require('prop-types');
var _propTypes2 = _interopRequireDefault(_propTypes);
var _Icon = require('./Icon');
var _Icon2 = _interopRequireDefault(_Icon);
var _util = require('./util');
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var Button = function (_Component) {
(0, _inherits3.default)(Button, _Component);
function Button(props) {
(0, _classCallCheck3.default)(this, Button);
var _this = (0, _possibleConstructorReturn3.default)(this, (Button.__proto__ || (0, _getPrototypeOf2.default)(Button)).call(this, props));
(0, _util.registerStyle)('button', [['.slds-button__icon--medium2', '{ width: 1.1rem; height: 1.1rem; }'], ['.slds-button__icon--x-small2', '{ width: 0.67rem; height: 0.67rem; }']]);
return _this;
}
(0, _createClass3.default)(Button, [{
key: 'renderIcon',
value: function renderIcon() {
var _props = this.props,
icon = _props.icon,
iconAlign = _props.iconAlign,
iconSize = _props.iconSize,
type = _props.type;
var inverse = this.props.inverse;
inverse = inverse || /\-?inverse$/.test(type);
return _react2.default.createElement(ButtonIcon, { icon: icon, align: iconAlign, size: iconSize, inverse: inverse });
}
}, {
key: 'renderIconMore',
value: function renderIconMore() {
var _props2 = this.props,
iconMore = _props2.iconMore,
icon = _props2.icon,
iconAlign = _props2.iconAlign,
label = _props2.label,
children = _props2.children;
var adjoining = icon && (iconAlign === 'right' || !(label || children));
var iconMoreSize = this.props.iconMoreSize || adjoining ? 'x-small' : 'small';
return _react2.default.createElement(ButtonIcon, { icon: iconMore, align: 'right', size: iconMoreSize });
}
}, {
key: 'render',
value: function render() {
var _classnames;
var _props3 = this.props,
className = _props3.className,
type = _props3.type,
size = _props3.size,
icon = _props3.icon,
iconAlign = _props3.iconAlign,
iconMore = _props3.iconMore,
selected = _props3.selected,
alt = _props3.alt,
label = _props3.label,
_props3$htmlType = _props3.htmlType,
htmlType = _props3$htmlType === undefined ? 'button' : _props3$htmlType,
children = _props3.children,
props = (0, _objectWithoutProperties3.default)(_props3, ['className', 'type', 'size', 'icon', 'iconAlign', 'iconMore', 'selected', 'alt', 'label', 'htmlType', 'children']);
var typeClassName = type ? 'slds-button--' + type : null;
var btnClassNames = (0, _classnames3.default)(className, 'slds-button', typeClassName, (_classnames = {
'slds-is-selected': selected
}, (0, _defineProperty3.default)(_classnames, 'slds-button--' + size, size && !/^icon-/.test(type)), (0, _defineProperty3.default)(_classnames, 'slds-button--icon-' + size, /^(x-small|small)$/.test(size) && /^icon-/.test(type)), _classnames));
var pprops = props;
delete pprops.inverse;
delete pprops.iconSize;
return _react2.default.createElement(
'button',
(0, _extends3.default)({
className: btnClassNames,
type: htmlType }, pprops),
icon && iconAlign !== 'right' ? this.renderIcon() : null,
children || label,
icon && iconAlign === 'right' ? this.renderIcon() : null,
iconMore ? this.renderIconMore() : null,
alt ? _react2.default.createElement(
'span',
{ className: 'slds-assistive-text' },
alt
) : null
);
}
}]);
return Button;
}(_react.Component);
exports.default = Button;
var BUTTON_TYPES = exports.BUTTON_TYPES = ['neutral', 'brand', 'destructive', 'inverse', 'icon-bare', 'icon-container', 'icon-inverse', 'icon-more', 'icon-border', 'icon-border-filled'];
var BUTTON_SIZES = ['x-small', 'small', 'medium', 'large'];
var ICON_SIZES = ['x-small', 'x-small2', 'small', 'medium', 'medium2', 'large'];
var ICON_ALIGNMENTS = ['left', 'right'];
Button.propTypes = {
className: _propTypes2.default.string,
label: _propTypes2.default.node,
alt: _propTypes2.default.string,
type: _propTypes2.default.oneOf(BUTTON_TYPES),
size: _propTypes2.default.oneOf(BUTTON_SIZES),
htmlType: _propTypes2.default.string,
disabled: _propTypes2.default.bool,
selected: _propTypes2.default.bool,
inverse: _propTypes2.default.bool,
icon: _propTypes2.default.string,
iconSize: _propTypes2.default.oneOf(ICON_SIZES),
iconAlign: _propTypes2.default.oneOf(ICON_ALIGNMENTS),
iconMore: _propTypes2.default.string,
iconMoreSize: _propTypes2.default.oneOf(ICON_SIZES),
children: _propTypes2.default.node,
labelColor: _propTypes2.default.string
};
var ButtonIcon = function ButtonIcon(_ref) {
var icon = _ref.icon,
align = _ref.align,
size = _ref.size,
inverse = _ref.inverse,
className = _ref.className,
props = (0, _objectWithoutProperties3.default)(_ref, ['icon', 'align', 'size', 'inverse', 'className']);
var alignClassName = ICON_ALIGNMENTS.indexOf(align) >= 0 ? 'slds-button__icon--' + align : null;
var sizeClassName = ICON_SIZES.indexOf(size) >= 0 ? 'slds-button__icon--' + size : null;
var inverseClassName = inverse ? 'slds-button__icon--inverse' : null;
var iconClassNames = (0, _classnames3.default)('slds-button__icon', alignClassName, sizeClassName, inverseClassName, className);
return _react2.default.createElement(_Icon2.default, (0, _extends3.default)({ className: iconClassNames, icon: icon, textColor: null }, props));
};
exports.ButtonIcon = ButtonIcon;
ButtonIcon.propTypes = {
className: _propTypes2.default.string,
icon: _propTypes2.default.string,
align: _propTypes2.default.oneOf(ICON_ALIGNMENTS),
size: _propTypes2.default.oneOf(ICON_SIZES),
inverse: _propTypes2.default.bool
};
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY3JpcHRzL0J1dHRvbi5qcyJdLCJuYW1lcyI6WyJCdXR0b24iLCJwcm9wcyIsImljb24iLCJpY29uQWxpZ24iLCJpY29uU2l6ZSIsInR5cGUiLCJpbnZlcnNlIiwidGVzdCIsImljb25Nb3JlIiwibGFiZWwiLCJjaGlsZHJlbiIsImFkam9pbmluZyIsImljb25Nb3JlU2l6ZSIsImNsYXNzTmFtZSIsInNpemUiLCJzZWxlY3RlZCIsImFsdCIsImh0bWxUeXBlIiwidHlwZUNsYXNzTmFtZSIsImJ0bkNsYXNzTmFtZXMiLCJwcHJvcHMiLCJyZW5kZXJJY29uIiwicmVuZGVySWNvbk1vcmUiLCJCVVRUT05fVFlQRVMiLCJCVVRUT05fU0laRVMiLCJJQ09OX1NJWkVTIiwiSUNPTl9BTElHTk1FTlRTIiwicHJvcFR5cGVzIiwic3RyaW5nIiwibm9kZSIsIm9uZU9mIiwiZGlzYWJsZWQiLCJib29sIiwibGFiZWxDb2xvciIsIkJ1dHRvbkljb24iLCJhbGlnbiIsImFsaWduQ2xhc3NOYW1lIiwiaW5kZXhPZiIsInNpemVDbGFzc05hbWUiLCJpbnZlcnNlQ2xhc3NOYW1lIiwiaWNvbkNsYXNzTmFtZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7SUFFcUJBLE07OztBQUNuQixrQkFBWUMsS0FBWixFQUFtQjtBQUFBOztBQUFBLHNJQUNYQSxLQURXOztBQUVqQiw2QkFBYyxRQUFkLEVBQXdCLENBQ3RCLENBQ0UsNkJBREYsRUFFRSxvQ0FGRixDQURzQixFQUt0QixDQUNFLDhCQURGLEVBRUUsc0NBRkYsQ0FMc0IsQ0FBeEI7QUFGaUI7QUFZbEI7Ozs7aUNBRVk7QUFBQSxtQkFDaUMsS0FBS0EsS0FEdEM7QUFBQSxVQUNIQyxJQURHLFVBQ0hBLElBREc7QUFBQSxVQUNHQyxTQURILFVBQ0dBLFNBREg7QUFBQSxVQUNjQyxRQURk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LElBQXlDLFFBQXpDQSxJQUF5QztBQUFBLE1BQW5DUixPQUFtQyxRQUFuQ0EsT0FBbUM7QUFBQSxNQUExQk8sU0FBMEIsUUFBMUJBLFNBQTBCO0FBQUEsTUFBWlosS0FBWTs7QUFDakYsTUFBTW1DLGlCQUFpQlYsZ0JBQWdCVyxPQUFoQixDQUF3QkYsS0FBeEIsS0FBa0MsQ0FBbEMsMkJBQTREQSxLQUE1RCxHQUFzRSxJQUE3RjtBQUNBLE1BQU1HLGdCQUFnQmIsV0FBV1ksT0FBWCxDQUFtQnZCLElBQW5CLEtBQTRCLENBQTVCLDJCQUFzREEsSUFBdEQsR0FBK0QsSUFBckY7QUFDQSxNQUFNeUIsbUJBQW1CakMsVUFBVSw0QkFBVixHQUF5QyxJQUFsRTtBQUNBLE1BQU1rQyxpQkFBaUIsMEJBQVcsbUJBQVgsRUFBZ0NKLGNBQWhDLEVBQWdERSxhQUFoRCxFQUNyQkMsZ0JBRHFCLEVBQ0gxQixTQURHLENBQXZCO0FBRUEsU0FBTyx1RUFBTSxXQUFZMkIsY0FBbEIsRUFBbUMsTUFBT3RDLElBQTFDLEVBQWlELFdBQVksSUFBN0QsSUFBeUVELEtBQXpFLEVBQVA7QUFDRCxDQVBNOzs7QUFTUGlDLFdBQVdQLFNBQVgsR0FBdUI7QUFDckJkLGFBQVcsb0JBQVVlLE1BREE7QUFFckIxQixRQUFNLG9CQUFVMEIsTUFGSztBQUdyQk8sU0FBTyxvQkFBVUwsS0FBVixDQUFnQkosZUFBaEIsQ0FIYztBQUlyQlosUUFBTSxvQkFBVWdCLEtBQVYsQ0FBZ0JMLFVBQWhCLENBSmU7QUFLckJuQixXQUFTLG9CQUFVMEI7QUFMRSxDQUF2QiIsImZpbGUiOiJCdXR0b24uanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgUmVhY3QsIHsgQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IGNsYXNzbmFtZXMgZnJvbSAnY2xhc3NuYW1lcyc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IEljb24gZnJvbSAnLi9JY29uJztcbmltcG9ydCB7IHJlZ2lzdGVyU3R5bGUgfSBmcm9tICcuL3V0aWwnO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCdXR0b24gZXh0ZW5kcyBDb21wb25lbnQge1xuICBjb25zdHJ1Y3Rvcihwcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcbiAgICByZWdpc3RlclN0eWxlKCdidXR0b24nLCBbXG4gICAgICBbXG4gICAgICAgICcuc2xkcy1idXR0b25fX2ljb24tLW1lZGl1bTInLFxuICAgICAgICAneyB3aWR0aDogMS4xcmVtOyBoZWlnaHQ6IDEuMXJlbTsgfScsXG4gICAgICBdLFxuICAgICAgW1xuICAgICAgICAnLnNsZHMtYnV0dG9uX19pY29uLS14LXNtYWxsMicsXG4gICAgICAgICd7IHdpZHRoOiAwLjY3cmVtOyBoZWlnaHQ6IDAuNjdyZW07IH0nLFxuICAgICAgXSxcbiAgICBdKTtcbiAgfVxuXG4gIHJlbmRlckljb24oKSB7XG4gICAgY29uc3QgeyBpY29uLCBpY29uQWxpZ24sIGljb25TaXplLCB0eXBlIH0gPSB0aGlzLnByb3BzO1xuICAgIGxldCB7IGludmVyc2UgfSA9IHRoaXMucHJvcHM7XG4gICAgaW52ZXJzZSA9IGludmVyc2UgfHwgL1xcLT9pbnZlcnNlJC8udGVzdCh0eXBlKTtcbiAgICByZXR1cm4gPEJ1dHRvbkljb24gaWNvbj17IGljb24gfSBhbGlnbj17IGljb25BbGlnbiB9IHNpemU9eyBpY29uU2l6ZSB9IGludmVyc2U9eyBpbnZlcnNlIH0gLz47XG4gIH1cblxuICByZW5kZXJJY29uTW9yZSgpIHtcbiAgICBjb25zdCB7IGljb25Nb3JlLCBpY29uLCBpY29uQWxpZ24sIGxhYmVsLCBjaGlsZHJlbiB9ID0gdGhpcy5wcm9wcztcbiAgICBjb25zdCBhZGpvaW5pbmcgPSBpY29uICYmIChpY29uQWxpZ24gPT09ICdyaWdodCcgfHwgIShsYWJlbCB8fCBjaGlsZHJlbikpO1xuICAgIGNvbnN0IGljb25Nb3JlU2l6ZSA9IHRoaXMucHJvcHMuaWNvbk1vcmVTaXplIHx8IGFkam9pbmluZyA/ICd4LXNtYWxsJyA6ICdzbWFsbCc7XG4gICAgcmV0dXJuIDxCdXR0b25JY29uIGljb249eyBpY29uTW9yZSB9IGFsaWduPSdyaWdodCcgc2l6ZT17IGljb25Nb3JlU2l6ZSB9IC8+O1xuICB9XG5cbiAgcmVuZGVyKCkge1xuICAgIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSwgdHlwZSwgc2l6ZSwgaWNvbiwgaWNvbkFsaWduLCBpY29uTW9yZSwgc2VsZWN0ZWQsIGFsdCwgbGFiZWwsXG4gICAgICBodG1sVHlwZSA9ICdidXR0b24nLCBjaGlsZHJlbiwgLi4ucHJvcHMsXG4gICAgfSA9IHRoaXMucHJvcHM7XG4gICAgY29uc3QgdHlwZUNsYXNzTmFtZSA9IHR5cGUgPyBgc2xkcy1idXR0b24tLSR7dHlwZX1gIDogbnVsbDtcbiAgICBjb25zdCBidG5DbGFzc05hbWVzID0gY2xhc3NuYW1lcyhcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgICdzbGRzLWJ1dHRvbicsXG4gICAgICB0eXBlQ2xhc3NOYW1lLFxuICAgICAge1xuICAgICAgICAnc2xkcy1pcy1zZWxlY3RlZCc6IHNlbGVjdGVkLFxuICAgICAgICBbYHNsZHMtYnV0dG9uLS0ke3NpemV9YF06IHNpemUgJiYgIS9eaWNvbi0vLnRlc3QodHlwZSksXG4gICAgICAgIFtgc2xkcy1idXR0b24tLWljb24tJHtzaXplfWBdOiAvXih4LXNtYWxsfHNtYWxsKSQvLnRlc3Qoc2l6ZSkgJiYgL15pY29uLS8udGVzdCh0eXBlKSxcbiAgICAgIH1cbiAgICApO1xuICAgIGNvbnN0IHBwcm9wcyA9IHByb3BzO1xuICAgIGRlbGV0ZSBwcHJvcHMuaW52ZXJzZTtcbiAgICBkZWxldGUgcHByb3BzLmljb25TaXplO1xuICAgIHJldHVybiAoXG4gICAgICA8YnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17IGJ0bkNsYXNzTmFtZXMgfVxuICAgICAgICB0eXBlPXsgaHRtbFR5cGUgfSB7IC4uLnBwcm9wcyB9XG4gICAgICA+XG4gICAgICAgIHsgaWNvbiAmJiBpY29uQWxpZ24gIT09ICdyaWdodCcgPyB0aGlzLnJlbmRlckljb24oKSA6IG51bGwgfVxuICAgICAgICB7IGNoaWxkcmVuIHx8IGxhYmVsIH1cbiAgICAgICAgeyBpY29uICYmIGljb25BbGlnbiA9PT0gJ3JpZ2h0JyA/IHRoaXMucmVuZGVySWNvbigpIDogbnVsbCB9XG4gICAgICAgIHsgaWNvbk1vcmUgPyB0aGlzLnJlbmRlckljb25Nb3JlKCkgOiBudWxsIH1cbiAgICAgICAgeyBhbHQgPyA8c3BhbiBjbGFzc05hbWU9J3NsZHMtYXNzaXN0aXZlLXRleHQnPnsgYWx0IH08L3NwYW4+IDogbnVsbCB9XG4gICAgICA8L2J1dHRvbj5cbiAgICApO1xuICB9XG59XG5cbmV4cG9ydCBjb25zdCBCVVRUT05fVFlQRVMgPSBbXG4gICduZXV0cmFsJyxcbiAgJ2JyYW5kJyxcbiAgJ2Rlc3RydWN0aXZlJyxcbiAgJ2ludmVyc2UnLFxuICAnaWNvbi1iYXJlJyxcbiAgJ2ljb24tY29udGFpbmVyJyxcbiAgJ2ljb24taW52ZXJzZScsXG4gICdpY29uLW1vcmUnLFxuICAnaWNvbi1ib3JkZXInLFxuICAnaWNvbi1ib3JkZXItZmlsbGVkJyxcbl07XG5cbmNvbnN0IEJVVFRPTl9TSVpFUyA9IFsneC1zbWFsbCcsICdzbWFsbCcsICdtZWRpdW0nLCAnbGFyZ2UnXTtcblxuY29uc3QgSUNPTl9TSVpFUyA9IFsneC1zbWFsbCcsICd4LXNtYWxsMicsICdzbWFsbCcsICdtZWRpdW0nLCAnbWVkaXVtMicsICdsYXJnZSddO1xuXG5jb25zdCBJQ09OX0FMSUdOTUVOVFMgPSBbJ2xlZnQnLCAncmlnaHQnXTtcblxuQnV0dG9uLnByb3BUeXBlcyA9IHtcbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBsYWJlbDogUHJvcFR5cGVzLm5vZGUsXG4gIGFsdDogUHJvcFR5cGVzLnN0cmluZyxcbiAgdHlwZTogUHJvcFR5cGVzLm9uZU9mKEJVVFRPTl9UWVBFUyksXG4gIHNpemU6IFByb3BUeXBlcy5vbmVPZihCVVRUT05fU0laRVMpLFxuICBodG1sVHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICBzZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIGludmVyc2U6IFByb3BUeXBlcy5ib29sLFxuICBpY29uOiBQcm9wVHlwZXMuc3RyaW5nLFxuICBpY29uU2l6ZTogUHJvcFR5cGVzLm9uZU9mKElDT05fU0laRVMpLFxuICBpY29uQWxpZ246IFByb3BUeXBlcy5vbmVPZihJQ09OX0FMSUdOTUVOVFMpLFxuICBpY29uTW9yZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaWNvbk1vcmVTaXplOiBQcm9wVHlwZXMub25lT2YoSUNPTl9TSVpFUyksXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgbGFiZWxDb2xvcjogUHJvcFR5cGVzLnN0cmluZyxcbn07XG5cblxuZXhwb3J0IGNvbnN0IEJ1dHRvbkljb24gPSAoeyBpY29uLCBhbGlnbiwgc2l6ZSwgaW52ZXJzZSwgY2xhc3NOYW1lLCAuLi5wcm9wcyB9KSA9PiB7XG4gIGNvbnN0IGFsaWduQ2xhc3NOYW1lID0gSUNPTl9BTElHTk1FTlRTLmluZGV4T2YoYWxpZ24pID49IDAgPyBgc2xkcy1idXR0b25fX2ljb24tLSR7YWxpZ259YCA6IG51bGw7XG4gIGNvbnN0IHNpemVDbGFzc05hbWUgPSBJQ09OX1NJWkVTLmluZGV4T2Yoc2l6ZSkgPj0gMCA/IGBzbGRzLWJ1dHRvbl9faWNvbi0tJHtzaXplfWAgOiBudWxsO1xuICBjb25zdCBpbnZlcnNlQ2xhc3NOYW1lID0gaW52ZXJzZSA/ICdzbGRzLWJ1dHRvbl9faWNvbi0taW52ZXJzZScgOiBudWxsO1xuICBjb25zdCBpY29uQ2xhc3NOYW1lcyA9IGNsYXNzbmFtZXMoJ3NsZHMtYnV0dG9uX19pY29uJywgYWxpZ25DbGFzc05hbWUsIHNpemVDbGFzc05hbWUsXG4gICAgaW52ZXJzZUNsYXNzTmFtZSwgY2xhc3NOYW1lKTtcbiAgcmV0dXJuIDxJY29uIGNsYXNzTmFtZT17IGljb25DbGFzc05hbWVzIH0gaWNvbj17IGljb24gfSB0ZXh0Q29sb3I9eyBudWxsIH0geyAuLi5wcm9wcyB9IC8+O1xufTtcblxuQnV0dG9uSWNvbi5wcm9wVHlwZXMgPSB7XG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgaWNvbjogUHJvcFR5cGVzLnN0cmluZyxcbiAgYWxpZ246IFByb3BUeXBlcy5vbmVPZihJQ09OX0FMSUdOTUVOVFMpLFxuICBzaXplOiBQcm9wVHlwZXMub25lT2YoSUNPTl9TSVpFUyksXG4gIGludmVyc2U6IFByb3BUeXBlcy5ib29sLFxufTtcbiJdfQ==