@semcore/icon
Version:
Semrush Icon Component
89 lines (88 loc) • 4.53 kB
JavaScript
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"];
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _core = require("@semcore/core");
var _keyboardFocusEnhance2 = _interopRequireDefault(require("@semcore/core/lib/utils/enhances/keyboardFocusEnhance"));
var _hasLabels = _interopRequireDefault(require("@semcore/core/lib/utils/hasLabels"));
var _logger = _interopRequireDefault(require("@semcore/core/lib/utils/logger"));
var _propsForElement = _interopRequireDefault(require("@semcore/core/lib/utils/propsForElement"));
var _ref = require("@semcore/core/lib/utils/ref");
var _useColorResolver = require("@semcore/core/lib/utils/use/useColorResolver");
var _flexBox = require("@semcore/flex-box");
var _classnames = _interopRequireDefault(require("classnames"));
var _react = _interopRequireDefault(require("react"));
var _excluded = ["keyboardFocused"];
/*!__reshadow-styles__:"./style/icon.shadow.css"*/
var styles = (/*__reshadow_css_start__*/_core.sstyled.insert(/*__inner_css_start__*/".___SIcon_1215i_gg_{display:inline-block;-webkit-user-select:none;-moz-user-select:none;user-select:none;shape-rendering:geometricPrecision;box-sizing:content-box;fill:currentColor;flex-shrink:0;outline:0;color:var(--color_1215i)}.___SIcon_1215i_gg_.__interactive_1215i_gg_{cursor:pointer}@media (hover:hover){.___SIcon_1215i_gg_.__interactive_1215i_gg_:hover{filter:brightness(.8)}}", /*__inner_css_end__*/"1215i_gg_"),
/*__reshadow_css_end__*/
{
"__SIcon": "___SIcon_1215i_gg_",
"--color": "--color_1215i",
"_interactive": "__interactive_1215i_gg_"
});
function Icon(props, ref) {
var _useBox = (0, _flexBox.useBox)((0, _objectSpread2["default"])({
'tag': 'svg',
'data-ui-name': 'Icon',
'width': 16,
'height': 16,
'viewBox': '0 0 16 16',
'focusable': props.interactive
}, props), ref),
_useBox2 = (0, _slicedToArray2["default"])(_useBox, 2),
SIcon = _useBox2[0],
other = _useBox2[1];
var interactive = props.interactive,
colorProps = props.color;
var resolveColor = (0, _useColorResolver.useColorResolver)();
var color = resolveColor(colorProps);
var _keyboardFocusEnhance = (0, _keyboardFocusEnhance2["default"])()((0, _objectSpread2["default"])({
disabled: !interactive
}, other)),
keyboardFocused = _keyboardFocusEnhance.keyboardFocused,
propsEnhance = (0, _objectWithoutProperties2["default"])(_keyboardFocusEnhance, _excluded);
var sstyles = (0, _core.sstyled)(styles);
var _sstyles$cn = sstyles.cn('SIcon', {
'use:color': color,
'interactive': interactive,
'keyboardFocused': keyboardFocused
}),
className = _sstyles$cn.className,
style = _sstyles$cn.style;
function onKeyDown(event) {
if (propsEnhance.onKeyDown) {
return propsEnhance.onKeyDown(event);
}
if (interactive && propsEnhance.onClick && (event.key === 'Enter' || event.key === ' ')) {
event.preventDefault();
propsEnhance.onClick(event);
}
}
var labelCheckRef = _react["default"].useRef();
_react["default"].useEffect(function () {
if (!interactive) return;
if (process.env.NODE_ENV !== 'production') {
_logger["default"].warn(labelCheckRef.current && !(0, _hasLabels["default"])(labelCheckRef.current), "'aria-label' or 'aria-labelledby' are required props for interactive icons", props['data-ui-name'] || Icon.displayName);
}
}, [interactive]);
var forkedRef = (0, _ref.useForkRef)(ref, labelCheckRef);
return /*#__PURE__*/_react["default"].createElement(SIcon, (0, _extends2["default"])({
role: interactive ? 'button' : undefined,
"aria-hidden": interactive ? undefined : 'true'
}, (0, _propsForElement["default"])(propsEnhance), {
style: Object.assign({}, style, propsEnhance.style),
className: (0, _classnames["default"])(className, propsEnhance.className) || undefined,
onKeyDown: onKeyDown,
ref: forkedRef
}));
}
Icon.displayName = 'Icon';
var _default = exports["default"] = (0, _core.createBaseComponent)(Icon);
//# sourceMappingURL=Icon.js.map
;