@kiwicom/orbit-components
Version:
Orbit-components is a React component library which provides developers with the easiest possible way of building Kiwi.com’s products.
171 lines (154 loc) • 9.03 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = exports.StyledButtonPrimitive = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var React = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireWildcard(require("styled-components"));
var _defaultTheme = _interopRequireDefault(require("../../defaultTheme"));
var _Loading = _interopRequireWildcard(require("../../Loading"));
var _getSpacingToken = _interopRequireDefault(require("../../common/getSpacingToken"));
var _ButtonPrimitiveContent = _interopRequireDefault(require("./components/ButtonPrimitiveContent"));
var _ButtonPrimitiveIconContainer = _interopRequireWildcard(require("./components/ButtonPrimitiveIconContainer"));
var _ButtonPrimitiveContentChildren = _interopRequireDefault(require("./components/ButtonPrimitiveContentChildren"));
var _mediaQuery = _interopRequireDefault(require("../../utils/mediaQuery"));
var _createRel = _interopRequireDefault(require("./common/createRel"));
var iconContainerColor = function iconContainerColor(color) {
var important = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
return (0, _styledComponents.css)(["", "{color:", " ", ";}"], _ButtonPrimitiveIconContainer.StyledButtonPrimitiveIconContainer, color, important && "!important");
};
var StyledButtonPrimitive = (0, _styledComponents.default)(function (_ref) {
var _ref$asComponent = _ref.asComponent,
asComponent = _ref$asComponent === void 0 ? "button" : _ref$asComponent,
dataTest = _ref.dataTest,
submit = _ref.submit,
disabled = _ref.disabled,
forwardedRef = _ref.forwardedRef,
ariaControls = _ref.ariaControls,
ariaExpanded = _ref.ariaExpanded,
ariaLabelledby = _ref.ariaLabelledby,
ariaCurrent = _ref.ariaCurrent,
title = _ref.title,
className = _ref.className,
rel = _ref.rel,
href = _ref.href,
target = _ref.target,
external = _ref.external,
tabIndex = _ref.tabIndex,
onClick = _ref.onClick,
role = _ref.role,
props = (0, _objectWithoutProperties2.default)(_ref, ["asComponent", "dataTest", "submit", "disabled", "forwardedRef", "ariaControls", "ariaExpanded", "ariaLabelledby", "ariaCurrent", "title", "className", "rel", "href", "target", "external", "tabIndex", "onClick", "role"]);
var isButtonWithHref = asComponent === "button" && href;
var Component = isButtonWithHref ? "a" : asComponent;
var buttonType = submit ? "submit" : "button";
return /*#__PURE__*/React.createElement(Component, {
ref: forwardedRef,
"data-test": dataTest,
"aria-controls": ariaControls,
"aria-current": ariaCurrent,
"aria-expanded": ariaExpanded,
"aria-label": title,
"aria-labelledby": ariaLabelledby,
type: !isButtonWithHref ? buttonType : undefined,
className: className,
disabled: disabled,
href: !disabled ? href : null,
target: !disabled && href && external ? "_blank" : undefined,
rel: (0, _createRel.default)({
external: external,
href: href,
rel: rel
}),
tabIndex: tabIndex,
onClick: !disabled ? onClick : null,
role: role
}, props.children);
}).withConfig({
displayName: "ButtonPrimitive__StyledButtonPrimitive",
componentId: "q2qrvj-0"
})(["", "};"], function (_ref2) {
var foreground = _ref2.foreground,
disabled = _ref2.disabled,
fullWidth = _ref2.fullWidth,
href = _ref2.href,
theme = _ref2.theme,
asComponent = _ref2.asComponent,
circled = _ref2.circled,
padding = _ref2.padding,
background = _ref2.background,
fontWeight = _ref2.fontWeight,
fontSize = _ref2.fontSize,
height = _ref2.height,
width = _ref2.width,
onlyIcon = _ref2.onlyIcon,
icons = _ref2.icons,
foregroundHover = _ref2.foregroundHover,
foregroundActive = _ref2.foregroundActive,
foregroundFocus = _ref2.foregroundFocus,
backgroundHover = _ref2.backgroundHover,
backgroundActive = _ref2.backgroundActive,
backgroundFocus = _ref2.backgroundFocus,
boxShadow = _ref2.boxShadow,
boxShadowHover = _ref2.boxShadowHover,
boxShadowFocus = _ref2.boxShadowFocus,
boxShadowActive = _ref2.boxShadowActive,
underlined = _ref2.underlined;
return (0, _styledComponents.css)(["height:", ";position:relative;display:", ";justify-content:space-between;align-items:center;box-sizing:border-box;appearance:none;text-align:center;text-decoration:", ";flex:", ";max-width:100%;background:", ";color:", "!important;border:0;padding:", ";border-radius:", ";font-family:", ";font-weight:", ";font-size:", ";line-height:1.4;cursor:", ";transition:all ", " ease-in-out !important;outline:0;opacity:", ";margin-bottom:", ";width:", ";box-shadow:", ";", " ", ";", "{width:", ";height:", ";}&:hover{", ";}&:active{", ";}:focus{box-shadow:", ";background:", ";color:", "!important;text-decoration:none;", ";}:focus:not(:focus-visible){box-shadow:none;background:", ";color:", "!important;text-decoration:none;", ";}:-moz-focusring,:focus-visible{box-shadow:", ";background:", ";color:", "!important;text-decoration:none;", ";}"], height, href || asComponent === "a" ? "inline-flex" : "flex", underlined ? "underline" : "none", fullWidth ? "1 1 auto" : "0 0 auto", background, foreground, padding, circled ? height : "6px", theme.orbit.fontFamily, fontWeight || theme.orbit.fontWeightMedium, fontSize, disabled ? "not-allowed" : "pointer", theme.orbit.durationFast, disabled && theme.orbit.opacityButtonDisabled, _getSpacingToken.default, fullWidth ? "100%" : width || onlyIcon && height || "auto", boxShadow, _mediaQuery.default.tablet((0, _styledComponents.css)(["border-radius:", ";"], circled ? height : theme.orbit.borderRadiusNormal)), iconContainerColor(icons && icons.foreground, false), _Loading.StyledSpinner, icons && icons.width, icons && icons.height, !disabled && (0, _styledComponents.css)(["background:", ";color:", "!important;box-shadow:", ";text-decoration:none;", ";"], backgroundHover, foregroundHover, boxShadowHover, iconContainerColor(icons && icons.foregroundHover)), !disabled && (0, _styledComponents.css)(["background:", ";box-shadow:", ";color:", "!important;text-decoration:none;", ";"], backgroundActive, boxShadowActive, foregroundActive, iconContainerColor(icons && icons.foregroundActive)), boxShadowFocus, backgroundFocus, foregroundFocus, iconContainerColor(icons && icons.foregroundFocus), background, foregroundFocus, iconContainerColor(icons && icons.foregroundFocus), boxShadowFocus, backgroundFocus, foregroundFocus, iconContainerColor(icons && icons.foregroundFocus));
});
exports.StyledButtonPrimitive = StyledButtonPrimitive;
StyledButtonPrimitive.defaultProps = {
theme: _defaultTheme.default
};
var ButtonPrimitive = /*#__PURE__*/React.forwardRef(function (props, ref) {
var loading = props.loading,
disabled = props.disabled,
children = props.children,
iconLeft = props.iconLeft,
iconRight = props.iconRight,
_props$icons = props.icons,
icons = _props$icons === void 0 ? {
width: null,
height: null,
leftMargin: null,
rightMargin: null
} : _props$icons,
_props$contentAlign = props.contentAlign,
contentAlign = _props$contentAlign === void 0 ? "center" : _props$contentAlign,
contentWidth = props.contentWidth;
var width = icons.width,
height = icons.height,
leftMargin = icons.leftMargin,
rightMargin = icons.rightMargin;
var isDisabled = loading || disabled;
var onlyIcon = Boolean(iconLeft && !children);
return /*#__PURE__*/React.createElement(StyledButtonPrimitive, (0, _extends2.default)({
forwardedRef: ref,
onlyIcon: onlyIcon
}, props, {
disabled: isDisabled,
className: undefined
}), loading && /*#__PURE__*/React.createElement(_Loading.default, {
type: "buttonLoader"
}), /*#__PURE__*/React.createElement(_ButtonPrimitiveContent.default, {
loading: loading,
contentAlign: contentAlign
}, iconLeft && /*#__PURE__*/React.createElement(_ButtonPrimitiveIconContainer.default, {
width: width,
height: height,
margin: leftMargin
}, iconLeft), children && /*#__PURE__*/React.createElement(_ButtonPrimitiveContentChildren.default, {
hasIcon: Boolean(iconLeft || iconRight),
contentWidth: contentWidth
}, children), iconRight && /*#__PURE__*/React.createElement(_ButtonPrimitiveIconContainer.default, {
width: width,
height: height,
margin: rightMargin
}, iconRight)));
});
ButtonPrimitive.displayName = "ButtonPrimitive";
var _default = ButtonPrimitive;
exports.default = _default;