@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.
339 lines (310 loc) • 13.9 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.SelectContainer = void 0;
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var React = _interopRequireWildcard(require("react"));
var _styledComponents = _interopRequireWildcard(require("styled-components"));
var _defaultTheme = _interopRequireDefault(require("../defaultTheme"));
var _FormLabel = _interopRequireDefault(require("../FormLabel"));
var _ChevronDown = _interopRequireDefault(require("../icons/ChevronDown"));
var _FormFeedback = _interopRequireDefault(require("../FormFeedback"));
var _consts = _interopRequireDefault(require("./consts"));
var _rtl = require("../utils/rtl");
var _getSpacingToken = _interopRequireDefault(require("../common/getSpacingToken"));
var _getFieldDataState = _interopRequireDefault(require("../common/getFieldDataState"));
var _formElementFocus = _interopRequireDefault(require("../InputField/helpers/formElementFocus"));
var _mediaQuery = _interopRequireDefault(require("../utils/mediaQuery"));
var getSelectSize = function getSelectSize(_ref) {
var _tokens;
var theme = _ref.theme,
size = _ref.size;
var tokens = (_tokens = {}, (0, _defineProperty2.default)(_tokens, _consts.default.SMALL, theme.orbit.heightInputSmall), (0, _defineProperty2.default)(_tokens, _consts.default.NORMAL, theme.orbit.heightInputNormal), _tokens);
return tokens[size];
};
var Label = _styledComponents.default.label.withConfig({
displayName: "Select__Label",
componentId: "sc-6agypz-0"
})(["position:relative;display:block;width:100%;margin-bottom:", ";"], _getSpacingToken.default); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
Label.defaultProps = {
theme: _defaultTheme.default
};
var StyledSelect = (0, _styledComponents.default)( /*#__PURE__*/React.forwardRef(function (_ref2, ref) {
var className = _ref2.className,
dataTest = _ref2.dataTest,
children = _ref2.children,
value = _ref2.value,
disabled = _ref2.disabled,
name = _ref2.name,
error = _ref2.error,
tabIndex = _ref2.tabIndex,
onChange = _ref2.onChange,
onFocus = _ref2.onFocus,
onBlur = _ref2.onBlur,
id = _ref2.id,
dataAttrs = _ref2.dataAttrs,
readOnly = _ref2.readOnly;
return /*#__PURE__*/React.createElement("select", (0, _extends2.default)({
id: id,
"data-test": dataTest,
"data-state": (0, _getFieldDataState.default)(error),
value: value,
className: className,
onChange: onChange,
onFocus: onFocus,
readOnly: readOnly,
onBlur: onBlur,
disabled: disabled,
name: name,
tabIndex: tabIndex,
ref: ref
}, dataAttrs), children);
})).withConfig({
displayName: "Select__StyledSelect",
componentId: "sc-6agypz-1"
})(["appearance:none;background:", ";cursor:pointer;color:", ";font-family:", ";font-size:", ";height:", ";padding:", ";outline:none;width:100%;color:", ";transition:box-shadow ", " ease-in-out;z-index:2;border-radius:6px;", ";> option{color:", ";}&::-ms-expand{display:none;}&::-ms-value{background:transparent;color:", ";color:", ";}border:0;box-shadow:inset 0 0 0 ", ";&:hover{box-shadow:inset 0 0 0 ", ";}&:focus{", "}&:disabled{color:", ";background:", ";cursor:not-allowed;&:hover{box-shadow:inset 0 0 0 1px ", ";}}", " color:", ";"], function (_ref3) {
var theme = _ref3.theme;
return theme.orbit.backgroundInput;
}, function (_ref4) {
var theme = _ref4.theme,
filled = _ref4.filled;
return filled ? theme.orbit.colorTextInput : theme.orbit.colorPlaceholderInput;
}, function (_ref5) {
var theme = _ref5.theme;
return theme.orbit.fontFamily;
}, function (_ref6) {
var theme = _ref6.theme,
size = _ref6.size;
return size === _consts.default.SMALL ? theme.orbit.fontSizeInputSmall : theme.orbit.fontSizeInputNormal;
}, getSelectSize, function (_ref7) {
var theme = _ref7.theme,
size = _ref7.size,
prefix = _ref7.prefix;
return (0, _rtl.rtlSpacing)(size === _consts.default.SMALL && !prefix && "0 ".concat(theme.orbit.spaceXLarge, " 0 ").concat(theme.orbit.spaceSmall) || size === _consts.default.SMALL && prefix && "0 ".concat(theme.orbit.spaceXLarge, " 0 ").concat(theme.orbit.paddingLeftSelectPrefix) || prefix && "0 ".concat(theme.orbit.spaceXXLarge, " 0 ").concat(theme.orbit.paddingLeftSelectPrefix) || "0 ".concat(theme.orbit.spaceXXLarge, " 0 ").concat(theme.orbit.spaceSmall));
}, function (_ref8) {
var customValueText = _ref8.customValueText;
return customValueText && "transparent !important";
}, function (_ref9) {
var theme = _ref9.theme;
return theme.orbit.durationFast;
}, _mediaQuery.default.tablet((0, _styledComponents.css)(["border-radius:", ";"], function (_ref10) {
var theme = _ref10.theme;
return theme.orbit.borderRadiusNormal;
})), function (_ref11) {
var theme = _ref11.theme;
return theme.orbit.colorTextInput;
}, function (_ref12) {
var theme = _ref12.theme,
filled = _ref12.filled;
return filled ? theme.orbit.colorTextInput : theme.orbit.colorPlaceholderInput;
}, function (_ref13) {
var customValueText = _ref13.customValueText;
return customValueText && "rgba(255, 255, 255, 0)";
}, function (_ref14) {
var theme = _ref14.theme,
error = _ref14.error;
return "".concat(theme.orbit.borderWidthInput, " ").concat(error ? theme.orbit.borderColorInputError : theme.orbit.borderColorInput);
}, function (_ref15) {
var theme = _ref15.theme,
error = _ref15.error;
return "".concat(theme.orbit.borderWidthInput, " ").concat(error ? theme.orbit.borderColorInputErrorHover : theme.orbit.borderColorInputHover);
}, _formElementFocus.default, function (_ref16) {
var theme = _ref16.theme;
return theme.orbit.colorTextInputDisabled;
}, function (_ref17) {
var theme = _ref17.theme;
return theme.orbit.backgroundInputDisabled;
}, function (_ref18) {
var theme = _ref18.theme;
return theme.orbit.borderColorInput;
}, function (_ref19) {
var customValueText = _ref19.customValueText;
return customValueText && "\n &:-webkit-autofill,\n &:-internal-autofill-selected {\n -webkit-text-fill-color: transparent;\n }\n ";
}, function (_ref20) {
var customValueText = _ref20.customValueText;
return customValueText && "transparent !important";
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
StyledSelect.defaultProps = {
theme: _defaultTheme.default
};
var SelectContainer = (0, _styledComponents.default)(function (_ref21) {
var className = _ref21.className,
children = _ref21.children;
return /*#__PURE__*/React.createElement("div", {
className: className
}, children);
}).withConfig({
displayName: "Select__SelectContainer",
componentId: "sc-6agypz-2"
})(["position:relative;display:flex;align-items:center;background:", ";width:100%;box-sizing:border-box;cursor:pointer;"], function (_ref22) {
var theme = _ref22.theme;
return theme.orbit.backgroundInput;
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
exports.SelectContainer = SelectContainer;
SelectContainer.defaultProps = {
theme: _defaultTheme.default
};
var SelectPrefix = (0, _styledComponents.default)(function (_ref23) {
var className = _ref23.className,
children = _ref23.children;
return /*#__PURE__*/React.createElement("div", {
className: className
}, children);
}).withConfig({
displayName: "Select__SelectPrefix",
componentId: "sc-6agypz-3"
})(["display:flex;align-items:center;position:absolute;padding:", ";pointer-events:none;z-index:3;top:0;height:", ";"], function (_ref24) {
var theme = _ref24.theme;
return "0 ".concat(theme.orbit.spaceSmall);
}, getSelectSize); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
SelectPrefix.defaultProps = {
theme: _defaultTheme.default
};
var SelectSuffix = (0, _styledComponents.default)(function (_ref25) {
var children = _ref25.children,
className = _ref25.className;
return /*#__PURE__*/React.createElement("div", {
className: className
}, children);
}).withConfig({
displayName: "Select__SelectSuffix",
componentId: "sc-6agypz-4"
})(["position:absolute;display:flex;justify-content:center;align-items:center;top:0;", ":", ";color:", ";pointer-events:none;z-index:3;height:100%;& > *{width:", ";height:", ";margin-bottom:", ";}"], _rtl.right, function (_ref26) {
var theme = _ref26.theme;
return theme.orbit.spaceXSmall;
}, function (_ref27) {
var theme = _ref27.theme,
disabled = _ref27.disabled;
return disabled ? theme.orbit.colorTextInputDisabled : theme.orbit.colorTextInput;
}, function (_ref28) {
var theme = _ref28.theme,
size = _ref28.size;
return size === _consts.default.SMALL && theme.orbit.widthIconSmall;
}, function (_ref29) {
var theme = _ref29.theme,
size = _ref29.size;
return size === _consts.default.SMALL && theme.orbit.heightIconSmall;
}, function (_ref30) {
var size = _ref30.size,
theme = _ref30.theme;
return size === _consts.default.SMALL && theme.orbit.spaceXXXSmall;
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
SelectSuffix.defaultProps = {
theme: _defaultTheme.default
};
var StyledCustomValue = (0, _styledComponents.default)(function (_ref31) {
var prefix = _ref31.prefix,
theme = _ref31.theme,
size = _ref31.size,
filled = _ref31.filled,
disabled = _ref31.disabled,
props = (0, _objectWithoutProperties2.default)(_ref31, ["prefix", "theme", "size", "filled", "disabled"]);
return /*#__PURE__*/React.createElement("div", props);
}).withConfig({
displayName: "Select__StyledCustomValue",
componentId: "sc-6agypz-5"
})(["color:", ";font-family:", ";font-size:", ";z-index:3;position:absolute;height:100%;line-height:", ";top:0;", ":", ";bottom:0;pointer-events:none;"], function (_ref32) {
var theme = _ref32.theme,
filled = _ref32.filled,
disabled = _ref32.disabled;
return disabled && theme.orbit.paletteInkLighter || (filled ? theme.orbit.colorTextInput : theme.orbit.colorPlaceholderInput);
}, function (_ref33) {
var theme = _ref33.theme;
return theme.orbit.fontFamily;
}, function (_ref34) {
var theme = _ref34.theme,
size = _ref34.size;
return size === _consts.default.SMALL ? theme.orbit.fontSizeInputSmall : theme.orbit.fontSizeInputNormal;
}, getSelectSize, _rtl.left, function (_ref35) {
var prefix = _ref35.prefix,
theme = _ref35.theme;
return prefix ? "48px" : theme.orbit.spaceSmall;
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
StyledCustomValue.defaultProps = {
theme: _defaultTheme.default
};
var Select = /*#__PURE__*/React.forwardRef(function (props, ref) {
var _props$size = props.size,
size = _props$size === void 0 ? _consts.default.NORMAL : _props$size,
label = props.label,
placeholder = props.placeholder,
value = props.value,
_props$disabled = props.disabled,
disabled = _props$disabled === void 0 ? false : _props$disabled,
error = props.error,
help = props.help,
name = props.name,
onChange = props.onChange,
onBlur = props.onBlur,
onFocus = props.onFocus,
options = props.options,
tabIndex = props.tabIndex,
id = props.id,
required = props.required,
dataTest = props.dataTest,
prefix = props.prefix,
spaceAfter = props.spaceAfter,
customValueText = props.customValueText,
dataAttrs = props.dataAttrs,
readOnly = props.readOnly;
var filled = !(value == null || value === "");
return /*#__PURE__*/React.createElement(Label, {
spaceAfter: spaceAfter
}, label && /*#__PURE__*/React.createElement(_FormLabel.default, {
filled: filled,
disabled: disabled,
required: required
}, label), /*#__PURE__*/React.createElement(SelectContainer, {
disabled: disabled
}, prefix && /*#__PURE__*/React.createElement(SelectPrefix, {
prefix: prefix,
size: size
}, prefix), customValueText && /*#__PURE__*/React.createElement(StyledCustomValue, {
disabled: disabled,
filled: filled,
size: size,
prefix: prefix
}, customValueText), /*#__PURE__*/React.createElement(StyledSelect, {
dataTest: dataTest,
size: size,
disabled: disabled,
error: error,
value: value == null ? "" : value,
prefix: prefix,
name: name,
onFocus: onFocus,
onBlur: onBlur,
onChange: onChange,
filled: filled,
customValueText: customValueText,
tabIndex: tabIndex,
id: id,
readOnly: readOnly,
required: required,
ref: ref,
dataAttrs: dataAttrs
}, placeholder && /*#__PURE__*/React.createElement("option", {
label: placeholder,
value: ""
}, placeholder), options.map(function (option) {
return /*#__PURE__*/React.createElement("option", {
key: "option-".concat(option.key || option.value),
value: option.value,
disabled: option.disabled
}, option.label);
})), /*#__PURE__*/React.createElement(SelectSuffix, {
size: size,
disabled: disabled
}, /*#__PURE__*/React.createElement(_ChevronDown.default, null))), /*#__PURE__*/React.createElement(_FormFeedback.default, {
error: error,
help: help
}));
}); // otherwise Unknown in storybook
Select.displayName = "Select";
var _default = Select;
exports.default = _default;