@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.
179 lines (157 loc) • 8.06 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
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 _handleKeyDown = _interopRequireDefault(require("../../utils/handleKeyDown"));
const _excluded = ["asComponent", "dataTest", "submit", "disabled", "ariaControls", "ariaExpanded", "ariaLabelledby", "ariaCurrent", "title", "className", "rel", "href", "target", "external", "tabIndex", "onClick", "role"];
const iconContainerColor = (color, important = true) => (0, _styledComponents.css)(["", "{color:", " ", ";}"], _ButtonPrimitiveIconContainer.StyledButtonPrimitiveIconContainer, color, important && "!important");
const StyledButtonPrimitive = (0, _styledComponents.default)( /*#__PURE__*/React.forwardRef((_ref, ref) => {
let {
asComponent = "button",
dataTest,
submit,
disabled,
ariaControls,
ariaExpanded,
ariaLabelledby,
ariaCurrent,
title,
className,
rel,
href,
target,
external,
tabIndex,
onClick,
role
} = _ref,
props = (0, _objectWithoutProperties2.default)(_ref, _excluded);
const isButtonWithHref = asComponent === "button" && href;
const Component = isButtonWithHref ? "a" : asComponent;
const buttonType = submit ? "submit" : "button";
const handleKeyDown = ev => asComponent === "div" ? (0, _handleKeyDown.default)(onClick)(ev) : undefined;
return /*#__PURE__*/React.createElement(Component, {
ref: ref,
"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,
onKeyDown: handleKeyDown,
href: !disabled ? href : null,
target: !disabled && href && external ? "_blank" : undefined,
rel: (0, _createRel.default)({
external,
href,
rel
}),
tabIndex: tabIndex,
onClick: !disabled ? onClick : null,
role: role
}, props.children);
})).withConfig({
displayName: "ButtonPrimitive__StyledButtonPrimitive",
componentId: "sc-1lbd19y-0"
})(["", ";"], ({
foreground,
disabled,
fullWidth,
href,
theme,
asComponent,
circled,
padding,
background,
fontWeight,
fontSize,
height,
width,
onlyIcon,
icons,
foregroundHover,
foregroundActive,
foregroundFocus,
backgroundHover,
backgroundActive,
backgroundFocus,
boxShadow,
boxShadowHover,
boxShadowFocus,
boxShadowActive,
underlined
}) => (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:", ";cursor:", ";transition:all ", " ease-in-out !important;outline:0;opacity:", ";margin-bottom:", ";width:", ";box-shadow:", ";& > *{vertical-align:middle;}", " ", ";", "{width:", ";height:", ";}&:hover{", ";}: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;", ";}&:hover:focus{background:", ";}&:active,&:active:focus{", ";}"], 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)), boxShadowFocus, backgroundFocus, foregroundFocus, iconContainerColor(icons && icons.foregroundFocus), background, foregroundFocus, iconContainerColor(icons && icons.foregroundFocus), boxShadowFocus, backgroundFocus, foregroundFocus, iconContainerColor(icons && icons.foregroundFocus), backgroundHover, !disabled && (0, _styledComponents.css)(["background:", ";box-shadow:", ";color:", "!important;text-decoration:none;", ";"], backgroundActive, boxShadowActive, foregroundActive, iconContainerColor(icons && icons.foregroundActive)))); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
exports.StyledButtonPrimitive = StyledButtonPrimitive;
StyledButtonPrimitive.defaultProps = {
theme: _defaultTheme.default
};
const ButtonPrimitive = /*#__PURE__*/React.forwardRef((props, ref) => {
const {
loading,
disabled,
children,
iconLeft,
iconRight,
// Need to setup null values so the object exits by default
icons = {
width: null,
height: null,
leftMargin: null,
rightMargin: null
},
contentAlign = "center",
contentWidth
} = props;
const {
width,
height,
leftMargin,
rightMargin
} = icons;
const isDisabled = loading || disabled;
const onlyIcon = Boolean(iconLeft && !children);
return /*#__PURE__*/React.createElement(StyledButtonPrimitive, (0, _extends2.default)({
ref: 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;