Icon.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. import _extends from "@babel/runtime/helpers/esm/extends";
  2. import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
  3. import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
  4. import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
  5. var _excluded = ["className", "component", "viewBox", "spin", "rotate", "tabIndex", "onClick", "children"];
  6. // Seems this is used for iconFont
  7. import * as React from 'react';
  8. import classNames from 'classnames';
  9. import { useComposeRef } from "rc-util/es/ref";
  10. import Context from "./Context";
  11. import { svgBaseProps, warning, useInsertStyles } from "../utils";
  12. var Icon = /*#__PURE__*/React.forwardRef(function (props, ref) {
  13. var className = props.className,
  14. Component = props.component,
  15. viewBox = props.viewBox,
  16. spin = props.spin,
  17. rotate = props.rotate,
  18. tabIndex = props.tabIndex,
  19. onClick = props.onClick,
  20. children = props.children,
  21. restProps = _objectWithoutProperties(props, _excluded);
  22. var iconRef = React.useRef();
  23. var mergedRef = useComposeRef(iconRef, ref);
  24. warning(Boolean(Component || children), 'Should have `component` prop or `children`.');
  25. useInsertStyles(iconRef);
  26. var _React$useContext = React.useContext(Context),
  27. _React$useContext$pre = _React$useContext.prefixCls,
  28. prefixCls = _React$useContext$pre === void 0 ? 'anticon' : _React$useContext$pre,
  29. rootClassName = _React$useContext.rootClassName;
  30. var classString = classNames(rootClassName, prefixCls, _defineProperty({}, "".concat(prefixCls, "-spin"), !!spin && !!Component), className);
  31. var svgClassString = classNames(_defineProperty({}, "".concat(prefixCls, "-spin"), !!spin));
  32. var svgStyle = rotate ? {
  33. msTransform: "rotate(".concat(rotate, "deg)"),
  34. transform: "rotate(".concat(rotate, "deg)")
  35. } : undefined;
  36. var innerSvgProps = _objectSpread(_objectSpread({}, svgBaseProps), {}, {
  37. className: svgClassString,
  38. style: svgStyle,
  39. viewBox: viewBox
  40. });
  41. if (!viewBox) {
  42. delete innerSvgProps.viewBox;
  43. }
  44. // component > children
  45. var renderInnerNode = function renderInnerNode() {
  46. if (Component) {
  47. return /*#__PURE__*/React.createElement(Component, innerSvgProps, children);
  48. }
  49. if (children) {
  50. warning(Boolean(viewBox) || React.Children.count(children) === 1 && /*#__PURE__*/React.isValidElement(children) && React.Children.only(children).type === 'use', 'Make sure that you provide correct `viewBox`' + ' prop (default `0 0 1024 1024`) to the icon.');
  51. return /*#__PURE__*/React.createElement("svg", _extends({}, innerSvgProps, {
  52. viewBox: viewBox
  53. }), children);
  54. }
  55. return null;
  56. };
  57. var iconTabIndex = tabIndex;
  58. if (iconTabIndex === undefined && onClick) {
  59. iconTabIndex = -1;
  60. }
  61. return /*#__PURE__*/React.createElement("span", _extends({
  62. role: "img"
  63. }, restProps, {
  64. ref: mergedRef,
  65. tabIndex: iconTabIndex,
  66. onClick: onClick,
  67. className: classString
  68. }), renderInnerNode());
  69. });
  70. Icon.displayName = 'AntdIcon';
  71. export default Icon;