@input-output-hk/front-end-site-components
Version:
Opinionated React components for IOHK's front-end web team
243 lines (227 loc) • 37.3 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _taggedTemplateLiteral2 = _interopRequireDefault(require("@babel/runtime/helpers/taggedTemplateLiteral"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _styledComponents = require("styled-components");
var _theme = require("@input-output-hk/front-end-core-libraries/build/theme");
function _templateObject() {
var data = (0, _taggedTemplateLiteral2["default"])(["\n html {\n max-width: 100%;\n overflow-x: hidden;\n background-color: ", ";\n box-sizing: border-box;\n font-size: 62.5%;\n }\n\n *,\n *:before,\n *:after {\n box-sizing:inherit;\n }\n\n hr {\n height: 0.1rem;\n color: ", ";\n background-color: ", ";\n border: none;\n }\n\n body {\n color: ", ";\n margin: 0;\n background-color: ", ";\n -ms-overflow-style: -ms-autohiding-scrollbar;\n min-height: 100vh;\n }\n\n body,\n input,\n textarea {\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n line-height: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n ", "\n }\n\n h1 {\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n line-height: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n ", "\n }\n\n h2 {\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n line-height: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n ", "\n }\n\n h3 {\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n line-height: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n ", "\n }\n\n h4 {\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n line-height: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n ", "\n }\n\n h5 {\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n line-height: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n ", "\n }\n\n h6 {\n font-family: ", ";\n font-size: ", ";\n font-weight: ", ";\n line-height: ", ";\n letter-spacing: ", ";\n text-transform: ", ";\n ", "\n }\n\n small {\n color: ", ";\n }\n\n ul,\n ol {\n list-style-position: inside;\n margin-left:0;\n padding: 0;\n }\n\n a {\n outline-width: 0.5rem;\n color: ", ";\n transition: color 0.1s ease-in-out;\n text-decoration: none;\n\n &:hover {\n color: ", ";\n }\n }\n\n img {\n max-width: 100%;\n height: auto;\n }\n"]);
_templateObject = function _templateObject() {
return data;
};
return data;
}
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function getProperty(key) {
return key.replace(/([A-Z])/g, function (_, upper) {
return "-".concat(upper.toLowerCase());
});
}
function getResponsiveFontCSS(font, baseFontSize, defaultLetterSpacing) {
var baseCSS = '';
var excludedKeys = ['font-family', 'font-size', 'font-weight', 'line-height', 'letter-spacing', 'text-transform'];
var responsiveKeys = [];
Object.keys(font).forEach(function (key) {
if (key.match(/^@/)) {
responsiveKeys.push(key);
} else if (!excludedKeys.includes(key)) {
baseCSS += "".concat(getProperty(key), ": ").concat(font[key], ";");
}
});
var responsiveConfig = {};
responsiveKeys.forEach(function (key) {
responsiveConfig[key] = _objectSpread({}, font[key]);
if (responsiveConfig[key].fontSize !== undefined) responsiveConfig[key].fontSize = (0, _theme.getFontSize)(responsiveConfig[key].fontSize, baseFontSize);
if (responsiveConfig[key].letterSpacing !== undefined) responsiveConfig[key].letterSpacing = (0, _theme.getLetterSpacing)(responsiveConfig[key].letterSpacing, defaultLetterSpacing);
});
var responsiveCSS = Object.keys(responsiveConfig).map(function (query) {
var styles = Object.keys(responsiveConfig[query]).map(function (key) {
return "".concat(getProperty(key), ": ").concat(responsiveConfig[query][key], ";");
}).join('');
return "".concat(query, " { ").concat(styles, " }");
}).join('');
return "".concat(baseCSS).concat(responsiveCSS);
}
function getNumericValue(value, defaultValue) {
if (value === undefined || value === null) return defaultValue;
return value;
}
var _default = (0, _styledComponents.createGlobalStyle)(_templateObject(), function (_ref) {
var theme = _ref.theme;
return theme.colors.background["default"];
}, function (_ref2) {
var theme = _ref2.theme;
return theme.colors.text.primary;
}, function (_ref3) {
var theme = _ref3.theme;
return theme.colors.text.primary;
}, function (_ref4) {
var theme = _ref4.theme;
return theme.colors.text.primary;
}, function (_ref5) {
var theme = _ref5.theme;
return theme.colors.background["default"];
}, function (_ref6) {
var theme = _ref6.theme;
return theme.typography.body.fontFamily || theme.typography.fontFamily;
}, function (_ref7) {
var theme = _ref7.theme;
return (0, _theme.getFontSize)(theme.typography.body.fontSize, theme.typography.baseFontSize);
}, function (_ref8) {
var theme = _ref8.theme;
return getNumericValue(theme.typography.body.fontWeight, theme.typography.fontWeight);
}, function (_ref9) {
var theme = _ref9.theme;
return getNumericValue(theme.typography.body.lineHeight, theme.typography.lineHeight);
}, function (_ref10) {
var theme = _ref10.theme;
return (0, _theme.getLetterSpacing)(theme.typography.body.letterSpacing, theme.typography.letterSpacing);
}, function (_ref11) {
var theme = _ref11.theme;
return theme.typography.body.textTransform || theme.typography.textTransform;
}, function (_ref12) {
var theme = _ref12.theme;
return getResponsiveFontCSS(theme.typography.body, theme.typography.baseFontSize);
}, function (_ref13) {
var theme = _ref13.theme;
return theme.typography.h1.fontFamily || theme.typography.fontFamily;
}, function (_ref14) {
var theme = _ref14.theme;
return (0, _theme.getFontSize)(theme.typography.h1.fontSize, theme.typography.baseFontSize);
}, function (_ref15) {
var theme = _ref15.theme;
return getNumericValue(theme.typography.h1.fontWeight, theme.typography.fontWeight);
}, function (_ref16) {
var theme = _ref16.theme;
return getNumericValue(theme.typography.h1.lineHeight, theme.typography.lineHeight);
}, function (_ref17) {
var theme = _ref17.theme;
return (0, _theme.getLetterSpacing)(theme.typography.h1.letterSpacing, theme.typography.letterSpacing);
}, function (_ref18) {
var theme = _ref18.theme;
return theme.typography.h1.textTransform || theme.typography.textTransform;
}, function (_ref19) {
var theme = _ref19.theme;
return getResponsiveFontCSS(theme.typography.h1, theme.typography.baseFontSize);
}, function (_ref20) {
var theme = _ref20.theme;
return theme.typography.h2.fontFamily || theme.typography.fontFamily;
}, function (_ref21) {
var theme = _ref21.theme;
return (0, _theme.getFontSize)(theme.typography.h2.fontSize, theme.typography.baseFontSize);
}, function (_ref22) {
var theme = _ref22.theme;
return getNumericValue(theme.typography.h2.fontWeight, theme.typography.fontWeight);
}, function (_ref23) {
var theme = _ref23.theme;
return getNumericValue(theme.typography.h2.lineHeight, theme.typography.lineHeight);
}, function (_ref24) {
var theme = _ref24.theme;
return (0, _theme.getLetterSpacing)(theme.typography.h2.letterSpacing, theme.typography.letterSpacing);
}, function (_ref25) {
var theme = _ref25.theme;
return theme.typography.h2.textTransform || theme.typography.textTransform;
}, function (_ref26) {
var theme = _ref26.theme;
return getResponsiveFontCSS(theme.typography.h2, theme.typography.baseFontSize);
}, function (_ref27) {
var theme = _ref27.theme;
return theme.typography.h3.fontFamily || theme.typography.fontFamily;
}, function (_ref28) {
var theme = _ref28.theme;
return (0, _theme.getFontSize)(theme.typography.h3.fontSize, theme.typography.baseFontSize);
}, function (_ref29) {
var theme = _ref29.theme;
return getNumericValue(theme.typography.h3.fontWeight, theme.typography.fontWeight);
}, function (_ref30) {
var theme = _ref30.theme;
return getNumericValue(theme.typography.h3.lineHeight, theme.typography.lineHeight);
}, function (_ref31) {
var theme = _ref31.theme;
return (0, _theme.getLetterSpacing)(theme.typography.h3.letterSpacing, theme.typography.letterSpacing);
}, function (_ref32) {
var theme = _ref32.theme;
return theme.typography.h3.textTransform || theme.typography.textTransform;
}, function (_ref33) {
var theme = _ref33.theme;
return getResponsiveFontCSS(theme.typography.h3, theme.typography.baseFontSize);
}, function (_ref34) {
var theme = _ref34.theme;
return theme.typography.h4.fontFamily || theme.typography.fontFamily;
}, function (_ref35) {
var theme = _ref35.theme;
return (0, _theme.getFontSize)(theme.typography.h4.fontSize, theme.typography.baseFontSize);
}, function (_ref36) {
var theme = _ref36.theme;
return getNumericValue(theme.typography.h4.fontWeight, theme.typography.fontWeight);
}, function (_ref37) {
var theme = _ref37.theme;
return getNumericValue(theme.typography.h4.lineHeight, theme.typography.lineHeight);
}, function (_ref38) {
var theme = _ref38.theme;
return (0, _theme.getLetterSpacing)(theme.typography.h4.letterSpacing, theme.typography.letterSpacing);
}, function (_ref39) {
var theme = _ref39.theme;
return theme.typography.h4.textTransform || theme.typography.textTransform;
}, function (_ref40) {
var theme = _ref40.theme;
return getResponsiveFontCSS(theme.typography.h4, theme.typography.baseFontSize);
}, function (_ref41) {
var theme = _ref41.theme;
return theme.typography.h5.fontFamily || theme.typography.fontFamily;
}, function (_ref42) {
var theme = _ref42.theme;
return (0, _theme.getFontSize)(theme.typography.h5.fontSize, theme.typography.baseFontSize);
}, function (_ref43) {
var theme = _ref43.theme;
return getNumericValue(theme.typography.h5.fontWeight, theme.typography.fontWeight);
}, function (_ref44) {
var theme = _ref44.theme;
return getNumericValue(theme.typography.h5.lineHeight, theme.typography.lineHeight);
}, function (_ref45) {
var theme = _ref45.theme;
return (0, _theme.getLetterSpacing)(theme.typography.h5.letterSpacing, theme.typography.letterSpacing);
}, function (_ref46) {
var theme = _ref46.theme;
return theme.typography.h5.textTransform || theme.typography.textTransform;
}, function (_ref47) {
var theme = _ref47.theme;
return getResponsiveFontCSS(theme.typography.h5, theme.typography.baseFontSize);
}, function (_ref48) {
var theme = _ref48.theme;
return theme.typography.h6.fontFamily || theme.typography.fontFamily;
}, function (_ref49) {
var theme = _ref49.theme;
return (0, _theme.getFontSize)(theme.typography.h6.fontSize, theme.typography.baseFontSize);
}, function (_ref50) {
var theme = _ref50.theme;
return getNumericValue(theme.typography.h6.fontWeight, theme.typography.fontWeight);
}, function (_ref51) {
var theme = _ref51.theme;
return getNumericValue(theme.typography.h6.lineHeight, theme.typography.lineHeight);
}, function (_ref52) {
var theme = _ref52.theme;
return (0, _theme.getLetterSpacing)(theme.typography.h6.letterSpacing, theme.typography.letterSpacing);
}, function (_ref53) {
var theme = _ref53.theme;
return theme.typography.h6.textTransform || theme.typography.textTransform;
}, function (_ref54) {
var theme = _ref54.theme;
return getResponsiveFontCSS(theme.typography.h6, theme.typography.baseFontSize);
}, function (_ref55) {
var theme = _ref55.theme;
return theme.colors.text.secondary;
}, function (_ref56) {
var theme = _ref56.theme;
return theme.colors.primary.main;
}, function (_ref57) {
var theme = _ref57.theme;
return theme.colors.primary.light;
});
exports["default"] = _default;
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TdHlsZXMuanMiXSwibmFtZXMiOlsiZ2V0UHJvcGVydHkiLCJrZXkiLCJyZXBsYWNlIiwiXyIsInVwcGVyIiwidG9Mb3dlckNhc2UiLCJnZXRSZXNwb25zaXZlRm9udENTUyIsImZvbnQiLCJiYXNlRm9udFNpemUiLCJkZWZhdWx0TGV0dGVyU3BhY2luZyIsImJhc2VDU1MiLCJleGNsdWRlZEtleXMiLCJyZXNwb25zaXZlS2V5cyIsIk9iamVjdCIsImtleXMiLCJmb3JFYWNoIiwibWF0Y2giLCJwdXNoIiwiaW5jbHVkZXMiLCJyZXNwb25zaXZlQ29uZmlnIiwiZm9udFNpemUiLCJ1bmRlZmluZWQiLCJsZXR0ZXJTcGFjaW5nIiwicmVzcG9uc2l2ZUNTUyIsIm1hcCIsInF1ZXJ5Iiwic3R5bGVzIiwiam9pbiIsImdldE51bWVyaWNWYWx1ZSIsInZhbHVlIiwiZGVmYXVsdFZhbHVlIiwiY3JlYXRlR2xvYmFsU3R5bGUiLCJ0aGVtZSIsImNvbG9ycyIsImJhY2tncm91bmQiLCJ0ZXh0IiwicHJpbWFyeSIsInR5cG9ncmFwaHkiLCJib2R5IiwiZm9udEZhbWlseSIsImZvbnRXZWlnaHQiLCJsaW5lSGVpZ2h0IiwidGV4dFRyYW5zZm9ybSIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsInNlY29uZGFyeSIsIm1haW4iLCJsaWdodCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7OztBQUFBOztBQUNBOzs7Ozs7Ozs7Ozs7Ozs7O0FBRUEsU0FBU0EsV0FBVCxDQUFzQkMsR0FBdEIsRUFBMkI7QUFDekIsU0FBT0EsR0FBRyxDQUFDQyxPQUFKLENBQVksVUFBWixFQUF3QixVQUFDQyxDQUFELEVBQUlDLEtBQUo7QUFBQSxzQkFBa0JBLEtBQUssQ0FBQ0MsV0FBTixFQUFsQjtBQUFBLEdBQXhCLENBQVA7QUFDRDs7QUFFRCxTQUFTQyxvQkFBVCxDQUErQkMsSUFBL0IsRUFBcUNDLFlBQXJDLEVBQW1EQyxvQkFBbkQsRUFBeUU7QUFDdkUsTUFBSUMs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LEtBQUssQ0FBQ0MsTUFBTixDQUFhRyxPQUFiLENBQXFCZSxLQUFwQztBQUFBLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVHbG9iYWxTdHlsZSB9IGZyb20gJ3N0eWxlZC1jb21wb25lbnRzJ1xuaW1wb3J0IHsgZ2V0Rm9udFNpemUsIGdldExldHRlclNwYWNpbmcgfSBmcm9tICdAaW5wdXQtb3V0cHV0LWhrL2Zyb250LWVuZC1jb3JlLWxpYnJhcmllcy9idWlsZC90aGVtZSdcblxuZnVuY3Rpb24gZ2V0UHJvcGVydHkgKGtleSkge1xuICByZXR1cm4ga2V5LnJlcGxhY2UoLyhbQS1aXSkvZywgKF8sIHVwcGVyKSA9PiBgLSR7dXBwZXIudG9Mb3dlckNhc2UoKX1gKVxufVxuXG5mdW5jdGlvbiBnZXRSZXNwb25zaXZlRm9udENTUyAoZm9udCwgYmFzZUZvbnRTaXplLCBkZWZhdWx0TGV0dGVyU3BhY2luZykge1xuICBsZXQgYmFzZUNTUyA9ICcnXG4gIGNvbnN0IGV4Y2x1ZGVkS2V5cyA9IFsgJ2ZvbnQtZmFtaWx5JywgJ2ZvbnQtc2l6ZScsICdmb250LXdlaWdodCcsICdsaW5lLWhlaWdodCcsICdsZXR0ZXItc3BhY2luZycsICd0ZXh0LXRyYW5zZm9ybScgXVxuICBjb25zdCByZXNwb25zaXZlS2V5cyA9IFtdXG4gIE9iamVjdC5rZXlzKGZvbnQpLmZvckVhY2goa2V5ID0+IHtcbiAgICBpZiAoa2V5Lm1hdGNoKC9eQC8pKSB7XG4gICAgICByZXNwb25zaXZlS2V5cy5wdXNoKGtleSlcbiAgICB9IGVsc2UgaWYgKCFleGNsdWRlZEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgYmFzZUNTUyArPSBgJHtnZXRQcm9wZXJ0eShrZXkpfTogJHtmb250W2tleV19O2BcbiAgICB9XG4gIH0pXG5cbiAgY29uc3QgcmVzcG9uc2l2ZUNvbmZpZyA9IHt9XG4gIHJlc3BvbnNpdmVLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICByZXNwb25zaXZlQ29uZmlnW2tleV0gPSB7IC4uLmZvbnRba2V5XSB9XG4gICAgaWYgKHJlc3BvbnNpdmVDb25maWdba2V5XS5mb250U2l6ZSAhPT0gdW5kZWZpbmVkKSByZXNwb25zaXZlQ29uZmlnW2tleV0uZm9udFNpemUgPSBnZXRGb250U2l6ZShyZXNwb25zaXZlQ29uZmlnW2tleV0uZm9udFNpemUsIGJhc2VGb250U2l6ZSlcbiAgICBpZiAocmVzcG9uc2l2ZUNvbmZpZ1trZXldLmxldHRlclNwYWNpbmcgIT09IHVuZGVmaW5lZCkgcmVzcG9uc2l2ZUNvbmZpZ1trZXldLmxldHRlclNwYWNpbmcgPSBnZXRMZXR0ZXJTcGFjaW5nKHJlc3BvbnNpdmVDb25maWdba2V5XS5sZXR0ZXJTcGFjaW5nLCBkZWZhdWx0TGV0dGVyU3BhY2luZylcbiAgfSlcblxuICBjb25zdCByZXNwb25zaXZlQ1NTID0gT2JqZWN0LmtleXMocmVzcG9uc2l2ZUNvbmZpZykubWFwKHF1ZXJ5ID0+IHtcbiAgICBjb25zdCBzdHlsZXMgPSBPYmplY3Qua2V5cyhyZXNwb25zaXZlQ29uZmlnW3F1ZXJ5XSkubWFwKGtleSA9PiB7XG4gICAgICByZXR1cm4gYCR7Z2V0UHJvcGVydHkoa2V5KX06ICR7cmVzcG9uc2l2ZUNvbmZpZ1txdWVyeV1ba2V5XX07YFxuICAgIH0pLmpvaW4oJycpXG5cbiAgICByZXR1cm4gYCR7cXVlcnl9IHsgJHtzdHlsZXN9IH1gXG4gIH0pLmpvaW4oJycpXG5cbiAgcmV0dXJuIGAke2Jhc2VDU1N9JHtyZXNwb25zaXZlQ1NTfWBcbn1cblxuZnVuY3Rpb24gZ2V0TnVtZXJpY1ZhbHVlICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZGVmYXVsdFZhbHVlXG4gIHJldHVybiB2YWx1ZVxufVxuXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVHbG9iYWxTdHlsZWBcbiAgaHRtbCB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIG92ZXJmbG93LXg6IGhpZGRlbjtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLmNvbG9ycy5iYWNrZ3JvdW5kLmRlZmF1bHR9O1xuICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XG4gICAgZm9udC1zaXplOiA2Mi41JTtcbiAgfVxuXG4gICosXG4gICo6YmVmb3JlLFxuICAqOmFmdGVyIHtcbiAgICBib3gtc2l6aW5nOmluaGVyaXQ7XG4gIH1cblxuICBociB7XG4gICAgaGVpZ2h0OiAwLjFyZW07XG4gICAgY29sb3I6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuY29sb3JzLnRleHQucHJpbWFyeX07XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS5jb2xvcnMudGV4dC5wcmltYXJ5fTtcbiAgICBib3JkZXI6IG5vbmU7XG4gIH1cblxuICBib2R5IHtcbiAgICBjb2xvcjogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS5jb2xvcnMudGV4dC5wcmltYXJ5fTtcbiAgICBtYXJnaW46IDA7XG4gICAgYmFja2dyb3VuZC1jb2xvcjogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS5jb2xvcnMuYmFja2dyb3VuZC5kZWZhdWx0fTtcbiAgICAtbXMtb3ZlcmZsb3ctc3R5bGU6IC1tcy1hdXRvaGlkaW5nLXNjcm9sbGJhcjtcbiAgICBtaW4taGVpZ2h0OiAxMDB2aDtcbiAgfVxuXG4gIGJvZHksXG4gIGlucHV0LFxuICB0ZXh0YXJlYSB7XG4gICAgZm9udC1mYW1pbHk6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUudHlwb2dyYXBoeS5ib2R5LmZvbnRGYW1pbHkgfHwgdGhlbWUudHlwb2dyYXBoeS5mb250RmFtaWx5fTtcbiAgICBmb250LXNpemU6ICR7KHsgdGhlbWUgfSkgPT4gZ2V0Rm9udFNpemUodGhlbWUudHlwb2dyYXBoeS5ib2R5LmZvbnRTaXplLCB0aGVtZS50eXBvZ3JhcGh5LmJhc2VGb250U2l6ZSl9O1xuICAgIGZvbnQtd2VpZ2h0OiAkeyh7IHRoZW1lIH0pID0+IGdldE51bWVyaWNWYWx1ZSh0aGVtZS50eXBvZ3JhcGh5LmJvZHkuZm9udFdlaWdodCwgdGhlbWUudHlwb2dyYXBoeS5mb250V2VpZ2h0KX07XG4gICAgbGluZS1oZWlnaHQ6ICR7KHsgdGhlbWUgfSkgPT4gZ2V0TnVtZXJpY1ZhbHVlKHRoZW1lLnR5cG9ncmFwaHkuYm9keS5saW5lSGVpZ2h0LCB0aGVtZS50eXBvZ3JhcGh5LmxpbmVIZWlnaHQpfTtcbiAgICBsZXR0ZXItc3BhY2luZzogJHsoeyB0aGVtZSB9KSA9PiBnZXRMZXR0ZXJTcGFjaW5nKHRoZW1lLnR5cG9ncmFwaHkuYm9keS5sZXR0ZXJTcGFjaW5nLCB0aGVtZS50eXBvZ3JhcGh5LmxldHRlclNwYWNpbmcpfTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS50eXBvZ3JhcGh5LmJvZHkudGV4dFRyYW5zZm9ybSB8fCB0aGVtZS50eXBvZ3JhcGh5LnRleHRUcmFuc2Zvcm19O1xuICAgICR7KHsgdGhlbWUgfSkgPT4gZ2V0UmVzcG9uc2l2ZUZvbnRDU1ModGhlbWUudHlwb2dyYXBoeS5ib2R5LCB0aGVtZS50eXBvZ3JhcGh5LmJhc2VGb250U2l6ZSl9XG4gIH1cblxuICBoMSB7XG4gICAgZm9udC1mYW1pbHk6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUudHlwb2dyYXBoeS5oMS5mb250RmFtaWx5IHx8IHRoZW1lLnR5cG9ncmFwaHkuZm9udEZhbWlseX07XG4gICAgZm9udC1zaXplOiAkeyh7IHRoZW1lIH0pID0+IGdldEZvbnRTaXplKHRoZW1lLnR5cG9ncmFwaHkuaDEuZm9udFNpemUsIHRoZW1lLnR5cG9ncmFwaHkuYmFzZUZvbnRTaXplKX07XG4gICAgZm9udC13ZWlnaHQ6ICR7KHsgdGhlbWUgfSkgPT4gZ2V0TnVtZXJpY1ZhbHVlKHRoZW1lLnR5cG9ncmFwaHkuaDEuZm9udFdlaWdodCwgdGhlbWUudHlwb2dyYXBoeS5mb250V2VpZ2h0KX07XG4gICAgbGluZS1oZWlnaHQ6ICR7KHsgdGhlbWUgfSkgPT4gZ2V0TnVtZXJpY1ZhbHVlKHRoZW1lLnR5cG9ncmFwaHkuaDEubGluZUhlaWdodCwgdGhlbWUudHlwb2dyYXBoeS5saW5lSGVpZ2h0KX07XG4gICAgbGV0dGVyLXNwYWNpbmc6ICR7KHsgdGhlbWUgfSkgPT4gZ2V0TGV0dGVyU3BhY2luZyh0aGVtZS50eXBvZ3JhcGh5LmgxLmxldHRlclNwYWNpbmcsIHRoZW1lLnR5cG9ncmFwaHkubGV0dGVyU3BhY2luZyl9O1xuICAgIHRleHQtdHJhbnNmb3JtOiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnR5cG9ncmFwaHkuaDEudGV4dFRyYW5zZm9ybSB8fCB0aGVtZS50eXBvZ3JhcGh5LnRleHRUcmFuc2Zvcm19O1xuICAgICR7KHsgdGhlbWUgfSkgPT4gZ2V0UmVzcG9uc2l2ZUZvbnRDU1ModGhlbWUudHlwb2dyYXBoeS5oMSwgdGhlbWUudHlwb2dyYXBoeS5iYXNlRm9udFNpemUpfVxuICB9XG5cbiAgaDIge1xuICAgIGZvbnQtZmFtaWx5OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnR5cG9ncmFwaHkuaDIuZm9udEZhbWlseSB8fCB0aGVtZS50eXBvZ3JhcGh5LmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogJHsoeyB0aGVtZSB9KSA9PiBnZXRGb250U2l6ZSh0aGVtZS50eXBvZ3JhcGh5LmgyLmZvbnRTaXplLCB0aGVtZS50eXBvZ3JhcGh5LmJhc2VGb250U2l6ZSl9O1xuICAgIGZvbnQtd2VpZ2h0OiAkeyh7IHRoZW1lIH0pID0+IGdldE51bWVyaWNWYWx1ZSh0aGVtZS50eXBvZ3JhcGh5LmgyLmZvbnRXZWlnaHQsIHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodCl9O1xuICAgIGxpbmUtaGVpZ2h0OiAkeyh7IHRoZW1lIH0pID0+IGdldE51bWVyaWNWYWx1ZSh0aGVtZS50eXBvZ3JhcGh5LmgyLmxpbmVIZWlnaHQsIHRoZW1lLnR5cG9ncmFwaHkubGluZUhlaWdodCl9O1xuICAgIGxldHRlci1zcGFjaW5nOiAkeyh7IHRoZW1lIH0pID0+IGdldExldHRlclNwYWNpbmcodGhlbWUudHlwb2dyYXBoeS5oMi5sZXR0ZXJTcGFjaW5nLCB0aGVtZS50eXBvZ3JhcGh5LmxldHRlclNwYWNpbmcpfTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS50eXBvZ3JhcGh5LmgyLnRleHRUcmFuc2Zvcm0gfHwgdGhlbWUudHlwb2dyYXBoeS50ZXh0VHJhbnNmb3JtfTtcbiAgICAkeyh7IHRoZW1lIH0pID0+IGdldFJlc3BvbnNpdmVGb250Q1NTKHRoZW1lLnR5cG9ncmFwaHkuaDIsIHRoZW1lLnR5cG9ncmFwaHkuYmFzZUZvbnRTaXplKX1cbiAgfVxuXG4gIGgzIHtcbiAgICBmb250LWZhbWlseTogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS50eXBvZ3JhcGh5LmgzLmZvbnRGYW1pbHkgfHwgdGhlbWUudHlwb2dyYXBoeS5mb250RmFtaWx5fTtcbiAgICBmb250LXNpemU6ICR7KHsgdGhlbWUgfSkgPT4gZ2V0Rm9udFNpemUodGhlbWUudHlwb2dyYXBoeS5oMy5mb250U2l6ZSwgdGhlbWUudHlwb2dyYXBoeS5iYXNlRm9udFNpemUpfTtcbiAgICBmb250LXdlaWdodDogJHsoeyB0aGVtZSB9KSA9PiBnZXROdW1lcmljVmFsdWUodGhlbWUudHlwb2dyYXBoeS5oMy5mb250V2VpZ2h0LCB0aGVtZS50eXBvZ3JhcGh5LmZvbnRXZWlnaHQpfTtcbiAgICBsaW5lLWhlaWdodDogJHsoeyB0aGVtZSB9KSA9PiBnZXROdW1lcmljVmFsdWUodGhlbWUudHlwb2dyYXBoeS5oMy5saW5lSGVpZ2h0LCB0aGVtZS50eXBvZ3JhcGh5LmxpbmVIZWlnaHQpfTtcbiAgICBsZXR0ZXItc3BhY2luZzogJHsoeyB0aGVtZSB9KSA9PiBnZXRMZXR0ZXJTcGFjaW5nKHRoZW1lLnR5cG9ncmFwaHkuaDMubGV0dGVyU3BhY2luZywgdGhlbWUudHlwb2dyYXBoeS5sZXR0ZXJTcGFjaW5nKX07XG4gICAgdGV4dC10cmFuc2Zvcm06ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUudHlwb2dyYXBoeS5oMy50ZXh0VHJhbnNmb3JtIHx8IHRoZW1lLnR5cG9ncmFwaHkudGV4dFRyYW5zZm9ybX07XG4gICAgJHsoeyB0aGVtZSB9KSA9PiBnZXRSZXNwb25zaXZlRm9udENTUyh0aGVtZS50eXBvZ3JhcGh5LmgzLCB0aGVtZS50eXBvZ3JhcGh5LmJhc2VGb250U2l6ZSl9XG4gIH1cblxuICBoNCB7XG4gICAgZm9udC1mYW1pbHk6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUudHlwb2dyYXBoeS5oNC5mb250RmFtaWx5IHx8IHRoZW1lLnR5cG9ncmFwaHkuZm9udEZhbWlseX07XG4gICAgZm9udC1zaXplOiAkeyh7IHRoZW1lIH0pID0+IGdldEZvbnRTaXplKHRoZW1lLnR5cG9ncmFwaHkuaDQuZm9udFNpemUsIHRoZW1lLnR5cG9ncmFwaHkuYmFzZUZvbnRTaXplKX07XG4gICAgZm9udC13ZWlnaHQ6ICR7KHsgdGhlbWUgfSkgPT4gZ2V0TnVtZXJpY1ZhbHVlKHRoZW1lLnR5cG9ncmFwaHkuaDQuZm9udFdlaWdodCwgdGhlbWUudHlwb2dyYXBoeS5mb250V2VpZ2h0KX07XG4gICAgbGluZS1oZWlnaHQ6ICR7KHsgdGhlbWUgfSkgPT4gZ2V0TnVtZXJpY1ZhbHVlKHRoZW1lLnR5cG9ncmFwaHkuaDQubGluZUhlaWdodCwgdGhlbWUudHlwb2dyYXBoeS5saW5lSGVpZ2h0KX07XG4gICAgbGV0dGVyLXNwYWNpbmc6ICR7KHsgdGhlbWUgfSkgPT4gZ2V0TGV0dGVyU3BhY2luZyh0aGVtZS50eXBvZ3JhcGh5Lmg0LmxldHRlclNwYWNpbmcsIHRoZW1lLnR5cG9ncmFwaHkubGV0dGVyU3BhY2luZyl9O1xuICAgIHRleHQtdHJhbnNmb3JtOiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnR5cG9ncmFwaHkuaDQudGV4dFRyYW5zZm9ybSB8fCB0aGVtZS50eXBvZ3JhcGh5LnRleHRUcmFuc2Zvcm19O1xuICAgICR7KHsgdGhlbWUgfSkgPT4gZ2V0UmVzcG9uc2l2ZUZvbnRDU1ModGhlbWUudHlwb2dyYXBoeS5oNCwgdGhlbWUudHlwb2dyYXBoeS5iYXNlRm9udFNpemUpfVxuICB9XG5cbiAgaDUge1xuICAgIGZvbnQtZmFtaWx5OiAkeyh7IHRoZW1lIH0pID0+IHRoZW1lLnR5cG9ncmFwaHkuaDUuZm9udEZhbWlseSB8fCB0aGVtZS50eXBvZ3JhcGh5LmZvbnRGYW1pbHl9O1xuICAgIGZvbnQtc2l6ZTogJHsoeyB0aGVtZSB9KSA9PiBnZXRGb250U2l6ZSh0aGVtZS50eXBvZ3JhcGh5Lmg1LmZvbnRTaXplLCB0aGVtZS50eXBvZ3JhcGh5LmJhc2VGb250U2l6ZSl9O1xuICAgIGZvbnQtd2VpZ2h0OiAkeyh7IHRoZW1lIH0pID0+IGdldE51bWVyaWNWYWx1ZSh0aGVtZS50eXBvZ3JhcGh5Lmg1LmZvbnRXZWlnaHQsIHRoZW1lLnR5cG9ncmFwaHkuZm9udFdlaWdodCl9O1xuICAgIGxpbmUtaGVpZ2h0OiAkeyh7IHRoZW1lIH0pID0+IGdldE51bWVyaWNWYWx1ZSh0aGVtZS50eXBvZ3JhcGh5Lmg1LmxpbmVIZWlnaHQsIHRoZW1lLnR5cG9ncmFwaHkubGluZUhlaWdodCl9O1xuICAgIGxldHRlci1zcGFjaW5nOiAkeyh7IHRoZW1lIH0pID0+IGdldExldHRlclNwYWNpbmcodGhlbWUudHlwb2dyYXBoeS5oNS5sZXR0ZXJTcGFjaW5nLCB0aGVtZS50eXBvZ3JhcGh5LmxldHRlclNwYWNpbmcpfTtcbiAgICB0ZXh0LXRyYW5zZm9ybTogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS50eXBvZ3JhcGh5Lmg1LnRleHRUcmFuc2Zvcm0gfHwgdGhlbWUudHlwb2dyYXBoeS50ZXh0VHJhbnNmb3JtfTtcbiAgICAkeyh7IHRoZW1lIH0pID0+IGdldFJlc3BvbnNpdmVGb250Q1NTKHRoZW1lLnR5cG9ncmFwaHkuaDUsIHRoZW1lLnR5cG9ncmFwaHkuYmFzZUZvbnRTaXplKX1cbiAgfVxuXG4gIGg2IHtcbiAgICBmb250LWZhbWlseTogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS50eXBvZ3JhcGh5Lmg2LmZvbnRGYW1pbHkgfHwgdGhlbWUudHlwb2dyYXBoeS5mb250RmFtaWx5fTtcbiAgICBmb250LXNpemU6ICR7KHsgdGhlbWUgfSkgPT4gZ2V0Rm9udFNpemUodGhlbWUudHlwb2dyYXBoeS5oNi5mb250U2l6ZSwgdGhlbWUudHlwb2dyYXBoeS5iYXNlRm9udFNpemUpfTtcbiAgICBmb250LXdlaWdodDogJHsoeyB0aGVtZSB9KSA9PiBnZXROdW1lcmljVmFsdWUodGhlbWUudHlwb2dyYXBoeS5oNi5mb250V2VpZ2h0LCB0aGVtZS50eXBvZ3JhcGh5LmZvbnRXZWlnaHQpfTtcbiAgICBsaW5lLWhlaWdodDogJHsoeyB0aGVtZSB9KSA9PiBnZXROdW1lcmljVmFsdWUodGhlbWUudHlwb2dyYXBoeS5oNi5saW5lSGVpZ2h0LCB0aGVtZS50eXBvZ3JhcGh5LmxpbmVIZWlnaHQpfTtcbiAgICBsZXR0ZXItc3BhY2luZzogJHsoeyB0aGVtZSB9KSA9PiBnZXRMZXR0ZXJTcGFjaW5nKHRoZW1lLnR5cG9ncmFwaHkuaDYubGV0dGVyU3BhY2luZywgdGhlbWUudHlwb2dyYXBoeS5sZXR0ZXJTcGFjaW5nKX07XG4gICAgdGV4dC10cmFuc2Zvcm06ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUudHlwb2dyYXBoeS5oNi50ZXh0VHJhbnNmb3JtIHx8IHRoZW1lLnR5cG9ncmFwaHkudGV4dFRyYW5zZm9ybX07XG4gICAgJHsoeyB0aGVtZSB9KSA9PiBnZXRSZXNwb25zaXZlRm9udENTUyh0aGVtZS50eXBvZ3JhcGh5Lmg2LCB0aGVtZS50eXBvZ3JhcGh5LmJhc2VGb250U2l6ZSl9XG4gIH1cblxuICBzbWFsbCB7XG4gICAgY29sb3I6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuY29sb3JzLnRleHQuc2Vjb25kYXJ5fTtcbiAgfVxuXG4gIHVsLFxuICBvbCB7XG4gICAgbGlzdC1zdHlsZS1wb3NpdGlvbjogaW5zaWRlO1xuICAgIG1hcmdpbi1sZWZ0OjA7XG4gICAgcGFkZGluZzogMDtcbiAgfVxuXG4gIGEge1xuICAgIG91dGxpbmUtd2lkdGg6IDAuNXJlbTtcbiAgICBjb2xvcjogJHsoeyB0aGVtZSB9KSA9PiB0aGVtZS5jb2xvcnMucHJpbWFyeS5tYWlufTtcbiAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjFzIGVhc2UtaW4tb3V0O1xuICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTtcblxuICAgICY6aG92ZXIge1xuICAgICAgY29sb3I6ICR7KHsgdGhlbWUgfSkgPT4gdGhlbWUuY29sb3JzLnByaW1hcnkubGlnaHR9O1xuICAgIH1cbiAgfVxuXG4gIGltZyB7XG4gICAgbWF4LXdpZHRoOiAxMDAlO1xuICAgIGhlaWdodDogYXV0bztcbiAgfVxuYFxuIl19