UNPKG

4.47 kBJavaScriptView Raw
1"use strict";
2
3var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
4
5var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
6
7Object.defineProperty(exports, "__esModule", {
8 value: true
9});
10exports.warning = warning;
11exports.isIconDefinition = isIconDefinition;
12exports.normalizeAttrs = normalizeAttrs;
13exports.generate = generate;
14exports.getSecondaryColor = getSecondaryColor;
15exports.normalizeTwoToneColors = normalizeTwoToneColors;
16exports.useInsertStyles = exports.iconStyles = exports.svgBaseProps = void 0;
17
18var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
19
20var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
21
22var _react = _interopRequireWildcard(require("react"));
23
24var _insertCss = require("insert-css");
25
26var _warning = _interopRequireDefault(require("../_util/warning"));
27
28var _generate = _interopRequireDefault(require("./generate"));
29
30function warning(valid, message) {
31 (0, _warning["default"])(valid, "[@c7n/icons] ".concat(message));
32}
33
34function isIconDefinition(target) {
35 return (0, _typeof2["default"])(target) === 'object' && typeof target.name === 'string' && typeof target.theme === 'string' && ((0, _typeof2["default"])(target.icon) === 'object' || typeof target.icon === 'function');
36}
37
38function normalizeAttrs() {
39 var attrs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
40 return Object.keys(attrs).reduce(function (acc, key) {
41 var val = attrs[key];
42
43 switch (key) {
44 case 'class':
45 acc.className = val;
46 delete acc["class"];
47 break;
48
49 default:
50 acc[key] = val;
51 }
52
53 return acc;
54 }, {});
55}
56
57function generate(node, key, rootProps) {
58 if (!rootProps) {
59 return _react["default"].createElement(node.tag, (0, _objectSpread2["default"])({
60 key: key
61 }, normalizeAttrs(node.attrs)), (node.children || []).map(function (child, index) {
62 return generate(child, "".concat(key, "-").concat(node.tag, "-").concat(index));
63 }));
64 }
65
66 return _react["default"].createElement(node.tag, (0, _objectSpread2["default"])({
67 key: key
68 }, normalizeAttrs(node.attrs), {}, rootProps), (node.children || []).map(function (child, index) {
69 return generate(child, "".concat(key, "-").concat(node.tag, "-").concat(index));
70 }));
71}
72
73function getSecondaryColor(primaryColor) {
74 // choose the second color
75 return (0, _generate["default"])(primaryColor)[0];
76}
77
78function normalizeTwoToneColors(twoToneColor) {
79 if (!twoToneColor) {
80 return [];
81 }
82
83 return Array.isArray(twoToneColor) ? twoToneColor : [twoToneColor];
84} // These props make sure that the SVG behaviours like general text.
85// Reference: https://blog.prototypr.io/align-svg-icons-to-text-and-say-goodbye-to-font-icons-d44b3d7b26b4
86
87
88var svgBaseProps = {
89 width: '1em',
90 height: '1em',
91 fill: 'currentColor',
92 'aria-hidden': 'true',
93 focusable: 'false'
94};
95exports.svgBaseProps = svgBaseProps;
96var iconStyles = "\n.c7nicon {\n display: inline-block;\n color: inherit;\n font-style: normal;\n line-height: 0;\n text-align: center;\n text-transform: none;\n vertical-align: -0.125em;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\n.c7nicon > * {\n line-height: 1;\n}\n\n.c7nicon svg {\n display: inline-block;\n}\n\n.c7nicon::before {\n display: none;\n}\n\n.c7nicon .c7nicon-icon {\n display: block;\n}\n\n.c7nicon[tabindex] {\n cursor: pointer;\n}\n\n.c7nicon-spin::before,\n.c7nicon-spin {\n display: inline-block;\n -webkit-animation: loadingCircle 1s infinite linear;\n animation: loadingCircle 1s infinite linear;\n}\n\n@-webkit-keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n\n@keyframes loadingCircle {\n 100% {\n -webkit-transform: rotate(360deg);\n transform: rotate(360deg);\n }\n}\n";
97exports.iconStyles = iconStyles;
98var cssInjectedFlag = false;
99
100var useInsertStyles = function useInsertStyles() {
101 var styleStr = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : iconStyles;
102 (0, _react.useEffect)(function () {
103 if (!cssInjectedFlag) {
104 (0, _insertCss.insertCss)(styleStr, {
105 prepend: true
106 });
107 cssInjectedFlag = true;
108 }
109 }, []);
110};
111
112exports.useInsertStyles = useInsertStyles;
113//# sourceMappingURL=utils.js.map