UNPKG

@razorpay/blade

Version:

The Design System that powers Razorpay

133 lines (130 loc) 6.61 kB
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties'; import _defineProperty from '@babel/runtime/helpers/defineProperty'; import styled from 'styled-components'; import React__default from 'react'; import { highlightedButtonSizeMap, highlightedHoverColorMap } from './tokens.js'; import '../../../utils/index.js'; import '../../../utils/metaAttribute/index.js'; import '../../../utils/makeAccessible/index.js'; import '../../../utils/makeMotionTime/index.web.js'; import '../../../utils/getFocusRingStyles/index.js'; import '../../../utils/logger/index.js'; import getIn from '../../../utils/lodashButBetter/get.js'; import '../../../utils/makeAnalyticsAttribute/index.js'; import '../../Box/styledProps/index.js'; import { jsx } from 'react/jsx-runtime'; import { useStyledProps } from '../../Box/styledProps/useStyledProps.js'; import { throwBladeError } from '../../../utils/logger/logger.js'; import { makeSize } from '../../../utils/makeSize/makeSize.js'; import { castWebType } from '../../../utils/platform/castUtils.js'; import { makeMotionTime } from '../../../utils/makeMotionTime/makeMotionTime.web.js'; import { getFocusRingStyles } from '../../../utils/getFocusRingStyles/getFocusRingStyles.web.js'; import { makeAccessible } from '../../../utils/makeAccessible/makeAccessible.web.js'; import { metaAttribute } from '../../../utils/metaAttribute/metaAttribute.web.js'; import { MetaConstants } from '../../../utils/metaAttribute/metaConstants.js'; import { makeAnalyticsAttribute } from '../../../utils/makeAnalyticsAttribute/makeAnalyticsAttribute.js'; var _excluded = ["icon", "onClick", "size", "emphasis", "accessibilityLabel", "accessibilityProps", "isDisabled", "isHighlighted", "testID", "onBlur", "onFocus", "onMouseLeave", "onMouseMove", "onPointerDown", "onPointerEnter", "onTouchEnd", "onTouchStart", "onKeyDown", "tabIndex"]; function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } var StyledButton = /*#__PURE__*/styled.button.withConfig({ displayName: "StyledIconButtonweb__StyledButton", componentId: "sc-1f4cg7d-0" })(function (props) { var theme = props.theme, emphasis = props.emphasis; var motionToken = theme.motion; var styledPropsCSSObject = useStyledProps(props); var emphasisColor = emphasis === 'intense' ? 'gray' : 'staticWhite'; if (false) { if (props.$size === 'large' && props.$isHighlighted) { throwBladeError({ moduleName: 'IconButton', message: 'size large is not allowed with isHighlighted true' }); return null; } } return _objectSpread({ border: 'none', cursor: props.disabled ? 'not-allowed' : 'pointer', padding: 0, height: props.$isHighlighted ? // We throw error for size large on top makeSize(highlightedButtonSizeMap[props.$size]) : undefined, width: props.$isHighlighted ? makeSize(highlightedButtonSizeMap[props.$size]) : undefined, borderRadius: props.$isHighlighted ? theme.border.radius.round : theme.border.radius.small, background: 'transparent', display: 'flex', alignItems: 'center', justifyContent: 'center', color: props.disabled ? theme.colors.interactive.icon[emphasisColor].disabled : theme.colors.interactive.icon[emphasisColor].muted, transitionProperty: 'color, box-shadow', transitionDuration: castWebType(makeMotionTime(motionToken.duration.xquick)), transitionTimingFunction: motionToken.easing.standard, '&:hover:not([disabled])': { color: theme.colors.interactive.icon[emphasisColor].subtle, backgroundColor: props.$isHighlighted ? getIn(theme.colors, highlightedHoverColorMap[emphasis]) : 'transparent' }, '&:focus-visible': _objectSpread(_objectSpread({}, getFocusRingStyles({ theme: theme })), {}, { color: theme.colors.interactive.icon[emphasisColor].subtle }), '&:active': { color: theme.colors.interactive.icon[emphasisColor].subtle } }, styledPropsCSSObject); }); var StyledIconButton = /*#__PURE__*/React__default.forwardRef(function (_ref, ref) { var Icon = _ref.icon, onClick = _ref.onClick, size = _ref.size, emphasis = _ref.emphasis, accessibilityLabel = _ref.accessibilityLabel, accessibilityProps = _ref.accessibilityProps, isDisabled = _ref.isDisabled, isHighlighted = _ref.isHighlighted, testID = _ref.testID, onBlur = _ref.onBlur, onFocus = _ref.onFocus, onMouseLeave = _ref.onMouseLeave, onMouseMove = _ref.onMouseMove, onPointerDown = _ref.onPointerDown, onPointerEnter = _ref.onPointerEnter, onTouchEnd = _ref.onTouchEnd, onTouchStart = _ref.onTouchStart, onKeyDown = _ref.onKeyDown, tabIndex = _ref.tabIndex, rest = _objectWithoutProperties(_ref, _excluded); return /*#__PURE__*/jsx(StyledButton, _objectSpread(_objectSpread(_objectSpread(_objectSpread(_objectSpread({ ref: ref, onClick: castWebType(onClick), emphasis: emphasis, type: "button", onBlur: onBlur, onFocus: onFocus, onMouseLeave: onMouseLeave, onMouseMove: onMouseMove, onPointerDown: onPointerDown, onPointerEnter: onPointerEnter, onTouchEnd: onTouchEnd, onTouchStart: onTouchStart, onKeyDown: onKeyDown, disabled: isDisabled, $isHighlighted: isHighlighted, $size: size, tabIndex: tabIndex }, makeAccessible(_objectSpread(_objectSpread({}, accessibilityProps), {}, { label: accessibilityLabel !== null && accessibilityLabel !== void 0 ? accessibilityLabel : accessibilityProps === null || accessibilityProps === void 0 ? void 0 : accessibilityProps.label }))), metaAttribute({ name: MetaConstants.IconButton, testID: testID })), makeAnalyticsAttribute(rest)), rest), {}, { children: /*#__PURE__*/jsx(Icon, { size: size, color: isDisabled ? 'interactive.icon.gray.disabled' : 'currentColor' }) })); }); export { StyledIconButton as default }; //# sourceMappingURL=StyledIconButton.web.js.map