UNPKG

@shopify/polaris

Version:

Shopify’s admin product component library

83 lines (80 loc) 2.04 kB
import React from 'react'; import { handleMouseUpByBlurring } from '../../utilities/focus.js'; import { useDisableClick } from '../../utilities/use-disable-interaction.js'; import { UnstyledLink } from '../UnstyledLink/UnstyledLink.js'; function UnstyledButton({ id, children, className, url, external, target, download, submit, disabled, loading, pressed, accessibilityLabel, role, ariaControls, ariaExpanded, ariaDescribedBy, ariaChecked, onClick, onFocus, onBlur, onKeyDown, onKeyPress, onKeyUp, onMouseEnter, onTouchStart, ...rest }) { let buttonMarkup; const commonProps = { id, className, 'aria-label': accessibilityLabel }; const interactiveProps = { ...commonProps, role, onClick, onFocus, onBlur, onMouseUp: handleMouseUpByBlurring, onMouseEnter, onTouchStart }; const handleClick = useDisableClick(disabled, onClick); if (url) { buttonMarkup = disabled ? /*#__PURE__*/ // Render an `<a>` so toggling disabled/enabled state changes only the // `href` attribute instead of replacing the whole element. React.createElement("a", commonProps, children) : /*#__PURE__*/React.createElement(UnstyledLink, Object.assign({}, interactiveProps, { url: url, external: external, target: target, download: download }, rest), children); } else { buttonMarkup = /*#__PURE__*/React.createElement("button", Object.assign({}, interactiveProps, { "aria-disabled": disabled, type: submit ? 'submit' : 'button', "aria-busy": loading ? true : undefined, "aria-controls": ariaControls, "aria-expanded": ariaExpanded, "aria-describedby": ariaDescribedBy, "aria-checked": ariaChecked, "aria-pressed": pressed, onKeyDown: onKeyDown, onKeyUp: onKeyUp, onKeyPress: onKeyPress, onClick: handleClick, tabIndex: disabled ? -1 : undefined }, rest), children); } return buttonMarkup; } export { UnstyledButton };