@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.
215 lines (181 loc) • 9.45 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 = void 0;
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var React = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireWildcard(require("styled-components"));
var _orbitDesignTokens = require("@kiwicom/orbit-design-tokens");
var _defaultTheme = _interopRequireDefault(require("../defaultTheme"));
var _Text = require("../Text");
var _rtl = require("../utils/rtl");
var _getFieldDataState = _interopRequireDefault(require("../common/getFieldDataState"));
var _cloneWithTooltip = _interopRequireDefault(require("../utils/cloneWithTooltip"));
var _mediaQuery = _interopRequireDefault(require("../utils/mediaQuery"));
var getBorderColor = function getBorderColor() {
return function (_ref) {
var theme = _ref.theme,
hasError = _ref.hasError,
disabled = _ref.disabled,
checked = _ref.checked;
if (disabled) return theme.orbit.paletteCloudDarker;
if (checked) return theme.orbit.paletteBlueNormal;
if (hasError && !disabled && !checked) return theme.orbit.borderColorCheckboxRadioError;
return theme.orbit.borderColorCheckboxRadio;
};
};
var getBackground = function getBackground() {
return function (_ref2) {
var theme = _ref2.theme,
disabled = _ref2.disabled,
checked = _ref2.checked;
if (disabled && checked) return theme.orbit.paletteCloudDarker;
if (disabled && !checked) return theme.orbit.paletteCloudNormal;
return checked ? theme.orbit.paletteBlueNormal : theme.orbit.backgroundInput;
};
};
var Glyph = _styledComponents.default.span.withConfig({
displayName: "Radio__Glyph",
componentId: "sc-crlwn1-0"
})(["visibility:hidden;width:8px;height:8px;background-color:", ";border-radius:", ";flex-shrink:0;"], function (_ref3) {
var theme = _ref3.theme,
disabled = _ref3.disabled;
return disabled ? theme.orbit.paletteCloudNormal : theme.orbit.paletteWhite;
}, function (_ref4) {
var theme = _ref4.theme;
return theme.orbit.borderRadiusCircle;
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
Glyph.defaultProps = {
theme: _defaultTheme.default
};
var IconContainer = _styledComponents.default.div.withConfig({
displayName: "Radio__IconContainer",
componentId: "sc-crlwn1-1"
})(["", ""], function (_ref5) {
var theme = _ref5.theme;
return (0, _styledComponents.css)(["position:relative;box-sizing:border-box;flex:0 0 auto;display:flex;align-items:center;justify-content:center;background-color:", ";height:", ";width:", ";border-radius:", ";transform:scale(1);transition:all ", " ease-in-out;"], getBackground, theme.orbit.heightCheckbox, theme.orbit.widthCheckbox, theme.orbit.borderRadiusCircle, theme.orbit.durationFast);
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
IconContainer.defaultProps = {
theme: _defaultTheme.default
};
var TextContainer = _styledComponents.default.div.withConfig({
displayName: "Radio__TextContainer",
componentId: "sc-crlwn1-2"
})(["display:flex;flex-direction:column;margin:", ";flex:1;"], function (_ref6) {
var theme = _ref6.theme;
return (0, _rtl.rtlSpacing)("0 0 0 ".concat(theme.orbit.spaceXSmall));
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
TextContainer.defaultProps = {
theme: _defaultTheme.default
};
var Info = _styledComponents.default.span.withConfig({
displayName: "Radio__Info",
componentId: "sc-crlwn1-3"
})(["font-size:", ";color:", ";line-height:", ";"], function (_ref7) {
var theme = _ref7.theme;
return theme.orbit.fontSizeFormFeedback;
}, function (_ref8) {
var theme = _ref8.theme;
return theme.orbit.colorInfoCheckBoxRadio;
}, function (_ref9) {
var theme = _ref9.theme;
return theme.orbit.lineHeightTextSmall;
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
Info.defaultProps = {
theme: _defaultTheme.default
};
var LabelText = _styledComponents.default.span.withConfig({
displayName: "Radio__LabelText",
componentId: "sc-crlwn1-4"
})(["", ""], function (_ref10) {
var theme = _ref10.theme;
return (0, _styledComponents.css)(["font-weight:", ";font-size:", ";color:", ";line-height:", ";", "{font-weight:", ";font-size:", ";color:", ";line-height:", ";}"], theme.orbit.fontWeightNormal, theme.orbit.fontSizeFormLabel, theme.orbit.colorFormLabel, theme.orbit.heightCheckbox, _Text.StyledText, theme.orbit.fontWeightNormal, theme.orbit.fontSizeFormLabel, theme.orbit.colorFormLabel, theme.orbit.heightCheckbox);
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
LabelText.defaultProps = {
theme: _defaultTheme.default
};
var Input = _styledComponents.default.input.withConfig({
displayName: "Radio__Input",
componentId: "sc-crlwn1-5"
})(["position:absolute;opacity:0;&:checked ~ ", " > ", "{font-weight:", ";& > ", "{font-weight:", ";}}&:checked + ", " > ", "{visibility:visible;}&:focus + ", "{outline:0;border:", ";box-shadow:0 0 0 3px ", ";", "}"], TextContainer, LabelText, function (_ref11) {
var theme = _ref11.theme;
return theme.orbit.fontWeightMedium;
}, _Text.StyledText, function (_ref12) {
var theme = _ref12.theme;
return theme.orbit.fontWeightMedium;
}, IconContainer, Glyph, IconContainer, function (_ref13) {
var theme = _ref13.theme,
hasError = _ref13.hasError;
return "2px ".concat(theme.orbit.borderStyleInput, " ").concat(hasError ? theme.orbit.paletteRedNormal : theme.orbit.borderColorCheckboxRadioFocus);
}, function (_ref14) {
var theme = _ref14.theme,
hasError = _ref14.hasError;
return (0, _orbitDesignTokens.convertHexToRgba)(hasError ? theme.orbit.paletteRedNormal : theme.orbit.borderColorInputFocus, 15);
}, _mediaQuery.default.largeMobile((0, _styledComponents.css)(["border-width:1px;"]))); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
Input.defaultProps = {
theme: _defaultTheme.default
};
var Label = (0, _styledComponents.default)(function (_ref15) {
var disabled = _ref15.disabled,
theme = _ref15.theme,
type = _ref15.type,
hasError = _ref15.hasError,
props = (0, _objectWithoutProperties2.default)(_ref15, ["disabled", "theme", "type", "hasError"]);
return /*#__PURE__*/React.createElement("label", props, props.children);
}).withConfig({
displayName: "Radio__Label",
componentId: "sc-crlwn1-6"
})(["", ""], function (_ref16) {
var theme = _ref16.theme,
disabled = _ref16.disabled;
return (0, _styledComponents.css)(["font-family:", ";display:flex;width:100%;flex-direction:row;align-items:self-start;opacity:", ";cursor:", ";position:relative;", "{border:2px solid ", ";}&:hover ", "{border-color:", ";}&:active ", "{border-color:", ";transform:", ";}", ""], theme.orbit.fontFamily, disabled ? theme.orbit.opacityCheckboxDisabled : "1", disabled ? "default" : "pointer", IconContainer, getBorderColor, IconContainer, !disabled && theme.orbit.paletteBlueLightActive, IconContainer, disabled ? getBorderColor : theme.orbit.paletteBlueNormal, !disabled && "scale(".concat(theme.orbit.modifierScaleCheckboxRadioActive, ")"), _mediaQuery.default.largeMobile((0, _styledComponents.css)(["", "{border:1px solid ", ";}"], IconContainer, getBorderColor)));
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
Label.defaultProps = {
theme: _defaultTheme.default
};
var Radio = /*#__PURE__*/React.forwardRef(function (props, ref) {
var label = props.label,
value = props.value,
_props$hasError = props.hasError,
hasError = _props$hasError === void 0 ? false : _props$hasError,
_props$disabled = props.disabled,
disabled = _props$disabled === void 0 ? false : _props$disabled,
_props$checked = props.checked,
checked = _props$checked === void 0 ? false : _props$checked,
onChange = props.onChange,
name = props.name,
info = props.info,
readOnly = props.readOnly,
tabIndex = props.tabIndex,
dataTest = props.dataTest,
tooltip = props.tooltip;
return /*#__PURE__*/React.createElement(Label, {
disabled: disabled,
hasError: hasError,
checked: checked
}, /*#__PURE__*/React.createElement(Input, {
"data-test": dataTest,
"data-state": (0, _getFieldDataState.default)(hasError),
value: value,
type: "radio",
disabled: disabled,
checked: checked,
onChange: onChange,
name: name,
tabIndex: tabIndex,
ref: ref,
readOnly: readOnly,
hasError: hasError
}), tooltip && (0, _cloneWithTooltip.default)(tooltip, /*#__PURE__*/React.createElement(IconContainer, {
disabled: disabled,
checked: checked
}, /*#__PURE__*/React.createElement(Glyph, {
disabled: disabled
}))), (label || info) && /*#__PURE__*/React.createElement(TextContainer, null, label && /*#__PURE__*/React.createElement(LabelText, null, label), info && /*#__PURE__*/React.createElement(Info, null, info)));
});
Radio.displayName = "Radio";
var _default = Radio;
exports.default = _default;