IconBase.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
  2. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  3. var _excluded = ["icon", "className", "onClick", "style", "primaryColor", "secondaryColor"];
  4. import * as React from 'react';
  5. import { generate, getSecondaryColor, isIconDefinition, warning, useInsertStyles } from "../utils";
  6. var twoToneColorPalette = {
  7. primaryColor: '#333',
  8. secondaryColor: '#E6E6E6',
  9. calculated: false
  10. };
  11. function setTwoToneColors(_ref) {
  12. var primaryColor = _ref.primaryColor,
  13. secondaryColor = _ref.secondaryColor;
  14. twoToneColorPalette.primaryColor = primaryColor;
  15. twoToneColorPalette.secondaryColor = secondaryColor || getSecondaryColor(primaryColor);
  16. twoToneColorPalette.calculated = !!secondaryColor;
  17. }
  18. function getTwoToneColors() {
  19. return _objectSpread({}, twoToneColorPalette);
  20. }
  21. var IconBase = function IconBase(props) {
  22. var icon = props.icon,
  23. className = props.className,
  24. onClick = props.onClick,
  25. style = props.style,
  26. primaryColor = props.primaryColor,
  27. secondaryColor = props.secondaryColor,
  28. restProps = _objectWithoutProperties(props, _excluded);
  29. var svgRef = React.useRef();
  30. var colors = twoToneColorPalette;
  31. if (primaryColor) {
  32. colors = {
  33. primaryColor: primaryColor,
  34. secondaryColor: secondaryColor || getSecondaryColor(primaryColor)
  35. };
  36. }
  37. useInsertStyles(svgRef);
  38. warning(isIconDefinition(icon), "icon should be icon definiton, but got ".concat(icon));
  39. if (!isIconDefinition(icon)) {
  40. return null;
  41. }
  42. var target = icon;
  43. if (target && typeof target.icon === 'function') {
  44. target = _objectSpread(_objectSpread({}, target), {}, {
  45. icon: target.icon(colors.primaryColor, colors.secondaryColor)
  46. });
  47. }
  48. return generate(target.icon, "svg-".concat(target.name), _objectSpread(_objectSpread({
  49. className: className,
  50. onClick: onClick,
  51. style: style,
  52. 'data-icon': target.name,
  53. width: '1em',
  54. height: '1em',
  55. fill: 'currentColor',
  56. 'aria-hidden': 'true'
  57. }, restProps), {}, {
  58. ref: svgRef
  59. }));
  60. };
  61. IconBase.displayName = 'IconReact';
  62. IconBase.getTwoToneColors = getTwoToneColors;
  63. IconBase.setTwoToneColors = setTwoToneColors;
  64. export default IconBase;