UNPKG

@chakra-ui/core

Version:

Responsive and accessible React UI components built with React and Emotion

116 lines (98 loc) 3.99 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports["default"] = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _objectWithoutPropertiesLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutPropertiesLoose")); var _core = require("@emotion/core"); var _react = require("react"); var _Icon = _interopRequireDefault(require("../Icon")); var _Spinner = _interopRequireDefault(require("../Spinner")); var _styles = _interopRequireDefault(require("./styles")); var _PseudoBox = _interopRequireDefault(require("../PseudoBox")); var _Box = _interopRequireDefault(require("../Box")); var _utils = require("../utils"); /** @jsx jsx */ var ButtonIcon = function ButtonIcon(_ref) { var icon = _ref.icon, props = (0, _objectWithoutPropertiesLoose2["default"])(_ref, ["icon"]); if (typeof icon === "string") { return (0, _core.jsx)(_Icon["default"], (0, _extends2["default"])({ focusable: "false", "aria-hidden": "true", name: icon, color: "currentColor" }, props)); } return (0, _core.jsx)(_Box["default"], (0, _extends2["default"])({ as: icon, "data-custom-icon": true, focusable: "false", "aria-hidden": "true", color: "currentColor" }, props)); }; var Button = (0, _react.forwardRef)(function (_ref2, ref) { var isDisabled = _ref2.isDisabled, isLoading = _ref2.isLoading, isActive = _ref2.isActive, isFullWidth = _ref2.isFullWidth, children = _ref2.children, _ref2$as = _ref2.as, Comp = _ref2$as === void 0 ? "button" : _ref2$as, _ref2$variantColor = _ref2.variantColor, variantColor = _ref2$variantColor === void 0 ? "gray" : _ref2$variantColor, leftIcon = _ref2.leftIcon, rightIcon = _ref2.rightIcon, _ref2$variant = _ref2.variant, variant = _ref2$variant === void 0 ? "solid" : _ref2$variant, loadingText = _ref2.loadingText, _ref2$iconSpacing = _ref2.iconSpacing, iconSpacing = _ref2$iconSpacing === void 0 ? 2 : _ref2$iconSpacing, _ref2$type = _ref2.type, type = _ref2$type === void 0 ? "button" : _ref2$type, _ref2$size = _ref2.size, size = _ref2$size === void 0 ? "md" : _ref2$size, colorMode = _ref2.colorMode, rest = (0, _objectWithoutPropertiesLoose2["default"])(_ref2, ["isDisabled", "isLoading", "isActive", "isFullWidth", "children", "as", "variantColor", "leftIcon", "rightIcon", "variant", "loadingText", "iconSpacing", "type", "size", "colorMode"]); // Wrong usage of `variantColor` prop is quite common // Let's add a warning hook that validates the passed variantColor (0, _utils.useVariantColorWarning)("Button", variantColor); var buttonStyleProps = (0, _styles["default"])({ color: variantColor, variant: variant, size: size, colorMode: colorMode }); var _isDisabled = isDisabled || isLoading; return (0, _core.jsx)(_PseudoBox["default"], (0, _extends2["default"])({ disabled: _isDisabled, "aria-disabled": _isDisabled, ref: ref, as: Comp, type: type, borderRadius: "md", fontWeight: "semibold", width: isFullWidth ? "full" : undefined, "data-active": isActive ? "true" : undefined }, buttonStyleProps, rest), leftIcon && !isLoading && (0, _core.jsx)(ButtonIcon, { ml: -1, mr: iconSpacing, icon: leftIcon }), isLoading && (0, _core.jsx)(_Spinner["default"], { position: loadingText ? "relative" : "absolute", mr: loadingText ? iconSpacing : 0, color: "currentColor", size: "1em" }), isLoading ? loadingText || (0, _core.jsx)(_Box["default"], { as: "span", opacity: "0" }, children) : children, rightIcon && !isLoading && (0, _core.jsx)(ButtonIcon, { mr: -1, ml: iconSpacing, icon: rightIcon })); }); Button.displayName = "Button"; var _default = Button; exports["default"] = _default;