UNPKG

@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.

246 lines (235 loc) 9.5 kB
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import React, { useCallback } from "react"; import styled, { css } from "styled-components"; import convertHexToRgba from "@kiwicom/orbit-design-tokens/lib/convertHexToRgba"; import defaultTheme from "../defaultTheme"; import TOKENS from "./consts"; import Check from "../icons/Check"; import { StyledText } from "../Text"; import { rtlSpacing } from "../utils/rtl"; import getFieldDataState from "../common/getFieldDataState"; import cloneWithTooltip from "../utils/cloneWithTooltip"; import media from "../utils/mediaQuery"; var getToken = function getToken(name) { return function (_ref) { var _tokens; var theme = _ref.theme, hasError = _ref.hasError, disabled = _ref.disabled, checked = _ref.checked; var resolveBorderColor = function resolveBorderColor() { if (disabled) { return theme.orbit.paletteInkLighter; } if (checked) { return theme.orbit.paletteBlueNormal; } if (hasError && !disabled && !checked) { return theme.orbit.borderColorCheckboxRadioError; } return theme.orbit.borderColorCheckboxRadio; }; var getBackground = function getBackground() { if (disabled && checked) { return theme.orbit.paletteInkLighter; } if (disabled && !checked) { return theme.orbit.paletteCloudNormal; } return checked ? theme.orbit.paletteBlueNormal : theme.orbit.backgroundInput; }; var tokens = (_tokens = {}, _defineProperty(_tokens, TOKENS.background, getBackground()), _defineProperty(_tokens, TOKENS.borderColor, resolveBorderColor()), _defineProperty(_tokens, TOKENS.iconColor, disabled ? theme.orbit.paletteCloudNormal : theme.orbit.colorIconCheckboxRadio), _tokens); return tokens[name]; }; }; var IconContainer = styled.div.withConfig({ displayName: "Checkbox__IconContainer", componentId: "sc-1x6twh3-0" })(["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(TOKENS.background), function (_ref2) { var theme = _ref2.theme; return theme.orbit.heightCheckbox; }, function (_ref3) { var theme = _ref3.theme; return theme.orbit.widthCheckbox; }, function (_ref4) { var theme = _ref4.theme; return theme.orbit.borderRadiusLarge; }, function (_ref5) { var theme = _ref5.theme; return theme.orbit.durationFast; }, function (_ref6) { var theme = _ref6.theme, checked = _ref6.checked; return checked ? theme.orbit.paletteBlueDark : theme.orbit.backgroundInput; }, media.tablet(css(["border-radius:", ";"], function (_ref7) { var theme = _ref7.theme; return theme.orbit.borderRadiusNormal; }))); IconContainer.defaultProps = { theme: defaultTheme }; var TextContainer = styled.div.withConfig({ displayName: "Checkbox__TextContainer", componentId: "sc-1x6twh3-1" })(["display:flex;flex-direction:column;margin:", ";flex:1;"], function (_ref8) { var theme = _ref8.theme; return rtlSpacing("0 0 0 ".concat(theme.orbit.spaceXSmall)); }); TextContainer.defaultProps = { theme: defaultTheme }; var Info = styled.span.withConfig({ displayName: "Checkbox__Info", componentId: "sc-1x6twh3-2" })(["font-size:", ";color:", ";line-height:", ";"], function (_ref9) { var theme = _ref9.theme; return theme.orbit.fontSizeFormFeedback; }, function (_ref10) { var theme = _ref10.theme; return theme.orbit.colorInfoCheckBoxRadio; }, function (_ref11) { var theme = _ref11.theme; return theme.orbit.lineHeightTextSmall; }); Info.defaultProps = { theme: defaultTheme }; var LabelText = styled.span.withConfig({ displayName: "Checkbox__LabelText", componentId: "sc-1x6twh3-3" })(["font-family:", ";font-weight:", ";font-size:", ";color:", ";line-height:", ";", "{font-weight:", ";font-size:", ";color:", ";line-height:", ";}"], function (_ref12) { var theme = _ref12.theme; return theme.orbit.fontFamily; }, function (_ref13) { var theme = _ref13.theme; return theme.orbit.fontWeightNormal; }, function (_ref14) { var theme = _ref14.theme; return theme.orbit.fontSizeFormLabel; }, function (_ref15) { var theme = _ref15.theme; return theme.orbit.colorFormLabel; }, function (_ref16) { var theme = _ref16.theme; return theme.orbit.heightCheckbox; }, StyledText, function (_ref17) { var theme = _ref17.theme; return theme.orbit.fontWeightNormal; }, function (_ref18) { var theme = _ref18.theme; return theme.orbit.fontSizeFormLabel; }, function (_ref19) { var theme = _ref19.theme; return theme.orbit.colorFormLabel; }, function (_ref20) { var theme = _ref20.theme; return theme.orbit.heightCheckbox; }); LabelText.defaultProps = { theme: defaultTheme }; var Input = styled.input.withConfig({ displayName: "Checkbox__Input", componentId: "sc-1x6twh3-4" })(["opacity:0;z-index:-1;position:absolute;&:checked ~ ", " > ", "{font-weight:", ";& > ", "{font-weight:", ";}}&:checked + ", " > svg{visibility:visible;}&:focus + ", "{border:", ";box-shadow:0 0 0 3px ", ";}"], TextContainer, LabelText, function (_ref21) { var theme = _ref21.theme; return theme.orbit.fontWeightMedium; }, StyledText, function (_ref22) { var theme = _ref22.theme; return theme.orbit.fontWeightMedium; }, IconContainer, IconContainer, function (_ref23) { var theme = _ref23.theme, error = _ref23.error; return "1px ".concat(theme.orbit.borderStyleInput, " ").concat(error ? theme.orbit.paletteRedNormal : theme.orbit.borderColorCheckboxRadioFocus); }, function (_ref24) { var theme = _ref24.theme, error = _ref24.error; return convertHexToRgba(error ? theme.orbit.paletteRedNormal : theme.orbit.borderColorInputFocus, 15); }); Input.defaultProps = { theme: defaultTheme }; export var Label = styled(function (_ref25) { var className = _ref25.className, children = _ref25.children, dataTest = _ref25.dataTest; return /*#__PURE__*/React.createElement("label", { className: className, "data-test": dataTest }, children); }).withConfig({ displayName: "Checkbox__Label", componentId: "sc-1x6twh3-5" })(["font-family:", ";display:flex;width:100%;flex-direction:row;align-items:self-start;opacity:", ";cursor:", ";position:relative;", "{color:", ";border:2px solid ", ";}&:hover ", "{border-color:", ";box-shadow:none;}&:active ", "{border-color:", ";transform:", ";}", ";"], function (_ref26) { var theme = _ref26.theme; return theme.orbit.fontFamily; }, function (_ref27) { var disabled = _ref27.disabled, theme = _ref27.theme; return disabled ? theme.orbit.opacityCheckboxDisabled : "1"; }, function (_ref28) { var disabled = _ref28.disabled; return disabled ? "not-allowed" : "pointer"; }, IconContainer, getToken(TOKENS.iconColor), getToken(TOKENS.borderColor), IconContainer, function (_ref29) { var disabled = _ref29.disabled, theme = _ref29.theme, checked = _ref29.checked; return !disabled && checked ? theme.orbit.paletteBlueDark : theme.orbit.paletteBlueLightActive; }, IconContainer, function (_ref30) { var disabled = _ref30.disabled, theme = _ref30.theme; return disabled ? getToken(TOKENS.borderColor) : theme.orbit.paletteBlueNormal; }, function (_ref31) { var disabled = _ref31.disabled, theme = _ref31.theme; return !disabled && "scale(".concat(theme.orbit.modifierScaleCheckboxRadioActive, ")"); }, media.largeMobile(css(["", "{border-width:1px;}"], IconContainer))); Label.defaultProps = { theme: defaultTheme }; var Checkbox = /*#__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, name = props.name, onChange = props.onChange, dataTest = props.dataTest, info = props.info, readOnly = props.readOnly, tabIndex = props.tabIndex, tooltip = props.tooltip; var preventOnClick = useCallback(function (ev) { ev.preventDefault(); }, []); return /*#__PURE__*/React.createElement(Label, { disabled: disabled, hasError: hasError, checked: checked }, /*#__PURE__*/React.createElement(Input, { "data-test": dataTest, "data-state": getFieldDataState(!!hasError), value: value, type: "checkbox", disabled: disabled, name: name, tabIndex: tabIndex, checked: checked, onChange: onChange, ref: ref, readOnly: readOnly, error: hasError }), cloneWithTooltip(tooltip, /*#__PURE__*/React.createElement(IconContainer, { disabled: disabled, checked: checked, onClick: readOnly ? preventOnClick : null }, /*#__PURE__*/React.createElement(Check, { customColor: "white" }))), (label || info) && /*#__PURE__*/React.createElement(TextContainer, null, label && /*#__PURE__*/React.createElement(LabelText, null, label), info && /*#__PURE__*/React.createElement(Info, null, info))); }); Checkbox.displayName = "Checkbox"; export default Checkbox;