@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.
164 lines (163 loc) • 7.5 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
exports.__esModule = true;
exports.default = exports.StyledLabel = void 0;
var React = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireWildcard(require("styled-components"));
var _defaultTheme = _interopRequireDefault(require("../defaultTheme"));
var _consts = _interopRequireDefault(require("./consts"));
var _Check = _interopRequireDefault(require("../icons/Check"));
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 _common = require("../utils/common");
const getToken = name => ({
theme,
hasError,
disabled,
checked
}) => {
const resolveBorderColor = () => {
if (disabled) {
return theme.orbit.paletteCloudDark;
}
if (checked) {
return theme.orbit.paletteBlueNormal;
}
if (hasError && !disabled && !checked) {
return theme.orbit.borderColorCheckboxRadioError;
}
return theme.orbit.borderColorCheckboxRadio;
};
const getBackground = () => {
if (disabled && checked) {
return theme.orbit.paletteCloudDark;
}
if (disabled && !checked) {
return theme.orbit.paletteCloudNormal;
}
return checked ? theme.orbit.paletteBlueNormal : theme.orbit.backgroundInput;
};
const tokens = {
[_consts.default.background]: getBackground(),
[_consts.default.borderColor]: resolveBorderColor(),
[_consts.default.iconColor]: disabled ? theme.orbit.paletteCloudDark : theme.orbit.colorIconCheckboxRadio
};
return tokens[name];
};
const StyledIconContainer = _styledComponents.default.div.withConfig({
displayName: "Checkbox__StyledIconContainer",
componentId: "sc-y66hzm-0"
})(["", ";"], ({
theme,
checked,
disabled
}) => (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;& > svg{visibility:hidden;display:flex;align-items:center;justify-content:center;width:16px;height:16px;}&:hover{background-color:", ";}", ""], getToken(_consts.default.background), theme.orbit.heightCheckbox, theme.orbit.widthCheckbox, theme.orbit.borderRadiusLarge, theme.orbit.durationFast, !disabled && (checked ? theme.orbit.paletteBlueDark : theme.orbit.backgroundInput), _mediaQuery.default.desktop((0, _styledComponents.css)(["border-radius:", ";"], theme.orbit.borderRadiusNormal))));
StyledIconContainer.defaultProps = {
theme: _defaultTheme.default
};
const StyledTextContainer = _styledComponents.default.div.withConfig({
displayName: "Checkbox__StyledTextContainer",
componentId: "sc-y66hzm-1"
})(["", ""], ({
disabled,
theme
}) => (0, _styledComponents.css)(["display:flex;flex-direction:column;flex:1;margin:", ";opacity:", ";"], (0, _rtl.rtlSpacing)(`0 0 0 ${theme.orbit.spaceXSmall}`), disabled ? theme.orbit.opacityCheckboxDisabled : "1"));
StyledTextContainer.defaultProps = {
theme: _defaultTheme.default
};
const Info = _styledComponents.default.span.withConfig({
displayName: "Checkbox__Info",
componentId: "sc-y66hzm-2"
})(["", ";"], ({
theme
}) => (0, _styledComponents.css)(["font-size:", ";color:", ";line-height:", ";"], theme.orbit.fontSizeFormFeedback, theme.orbit.colorInfoCheckBoxRadio, theme.orbit.lineHeightTextSmall));
Info.defaultProps = {
theme: _defaultTheme.default
};
const StyledLabelText = _styledComponents.default.span.withConfig({
displayName: "Checkbox__StyledLabelText",
componentId: "sc-y66hzm-3"
})(["", ""], ({
theme
}) => (0, _styledComponents.css)(["font-family:", ";font-weight:", ";font-size:", ";color:", ";line-height:", ";", "{font-weight:", ";font-size:", ";color:", ";line-height:", ";}"], theme.orbit.fontFamily, theme.orbit.fontWeightMedium, theme.orbit.fontSizeFormLabel, theme.orbit.colorFormLabel, theme.orbit.heightCheckbox, _Text.StyledText, theme.orbit.fontWeightMedium, theme.orbit.fontSizeFormLabel, theme.orbit.colorFormLabel, theme.orbit.heightCheckbox));
StyledLabelText.defaultProps = {
theme: _defaultTheme.default
};
const StyledInput = _styledComponents.default.input.withConfig({
displayName: "Checkbox__StyledInput",
componentId: "sc-y66hzm-4"
})(["opacity:0;z-index:-1;position:absolute;&:checked + ", " > svg{visibility:visible;}&:focus + ", "{", ";}"], StyledIconContainer, StyledIconContainer, _common.defaultFocus);
StyledInput.defaultProps = {
theme: _defaultTheme.default
};
const StyledLabel = (0, _styledComponents.default)(({
className,
children,
dataTest
}) => /*#__PURE__*/React.createElement("label", {
className: className,
"data-test": dataTest
}, children)).withConfig({
displayName: "Checkbox__StyledLabel",
componentId: "sc-y66hzm-5"
})(["", ""], ({
theme,
disabled,
checked
}) => (0, _styledComponents.css)(["font-family:", ";display:flex;width:100%;flex-direction:row;align-items:self-start;cursor:", ";position:relative;", "{color:", ";border:1px solid ", ";}&:hover ", "{border-color:", ";box-shadow:none;}&:active ", "{border-color:", ";transform:", ";}"], theme.orbit.fontFamily, disabled ? "not-allowed" : "pointer", StyledIconContainer, getToken(_consts.default.iconColor), getToken(_consts.default.borderColor), StyledIconContainer, !disabled && (checked ? theme.orbit.paletteBlueDark : theme.orbit.paletteBlueLightActive), StyledIconContainer, disabled ? getToken(_consts.default.borderColor) : theme.orbit.paletteBlueNormal, !disabled && `scale(${theme.orbit.modifierScaleCheckboxRadioActive})`));
exports.StyledLabel = StyledLabel;
StyledLabel.defaultProps = {
theme: _defaultTheme.default
};
const Checkbox = /*#__PURE__*/React.forwardRef((props, ref) => {
const {
label,
value,
hasError = false,
disabled = false,
checked = false,
name,
onChange,
dataTest,
id,
info,
readOnly,
tabIndex,
tooltip
} = props;
const preventOnClick = ev => ev.preventDefault();
return /*#__PURE__*/React.createElement(StyledLabel, {
disabled: disabled,
hasError: hasError,
checked: checked
}, /*#__PURE__*/React.createElement(StyledInput, {
"data-test": dataTest,
id: id,
"data-state": (0, _getFieldDataState.default)(!!hasError),
value: value,
type: "checkbox",
disabled: disabled,
name: name,
tabIndex: tabIndex ? Number(tabIndex) : undefined,
checked: checked,
onChange: onChange,
ref: ref,
readOnly: readOnly,
error: hasError
}), (0, _cloneWithTooltip.default)(tooltip, /*#__PURE__*/React.createElement(StyledIconContainer, {
disabled: disabled,
checked: checked,
onClick: readOnly ? preventOnClick : undefined
}, /*#__PURE__*/React.createElement(_Check.default, {
customColor: "white"
}))), (label || info) && /*#__PURE__*/React.createElement(StyledTextContainer, {
disabled: disabled
}, label && /*#__PURE__*/React.createElement(StyledLabelText, null, label), info && /*#__PURE__*/React.createElement(Info, null, info)));
});
Checkbox.displayName = "Checkbox";
var _default = Checkbox;
exports.default = _default;