@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.
255 lines (215 loc) • 10.2 kB
JavaScript
;
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 _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
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 _InputField = require("../InputField");
var _Select = require("../Select");
var _FormFeedback = _interopRequireDefault(require("../FormFeedback"));
var _consts = require("./consts");
var _rtl = require("../utils/rtl");
var _getSpacingToken = _interopRequireDefault(require("../common/getSpacingToken"));
var _randomID = _interopRequireDefault(require("../utils/randomID"));
var _formElementFocus = _interopRequireDefault(require("../InputField/helpers/formElementFocus"));
var _mediaQuery = _interopRequireDefault(require("../utils/mediaQuery"));
var getToken = function getToken(name) {
return function (_ref) {
var _TOKENS$height, _TOKENS$heightLine, _tokens;
var theme = _ref.theme,
size = _ref.size;
var tokens = (_tokens = {}, (0, _defineProperty2.default)(_tokens, _consts.TOKENS.height, (_TOKENS$height = {}, (0, _defineProperty2.default)(_TOKENS$height, _consts.SIZE_OPTIONS.SMALL, theme.orbit.heightInputSmall), (0, _defineProperty2.default)(_TOKENS$height, _consts.SIZE_OPTIONS.NORMAL, theme.orbit.heightInputNormal), _TOKENS$height)), (0, _defineProperty2.default)(_tokens, _consts.TOKENS.heightLine, (_TOKENS$heightLine = {}, (0, _defineProperty2.default)(_TOKENS$heightLine, _consts.SIZE_OPTIONS.SMALL, "16px"), (0, _defineProperty2.default)(_TOKENS$heightLine, _consts.SIZE_OPTIONS.NORMAL, "24px"), _TOKENS$heightLine)), _tokens);
return tokens[name][size];
};
};
var FakeGroup = (0, _styledComponents.default)(function (_ref2) {
var children = _ref2.children,
className = _ref2.className;
return /*#__PURE__*/React.createElement("span", {
className: className
}, children);
}).withConfig({
displayName: "InputGroup__FakeGroup",
componentId: "cyuwoi-0"
})(["width:100%;display:block;position:absolute;top:0;left:0;z-index:1;box-sizing:border-box;height:", ";box-shadow:", ";box-shadow:", ";", ";background-color:", ";font-size:", ";transition:box-shadow ", " ease-in-out;border-radius:6px;", ";&:hover{box-shadow:inset 0 0 0 ", ";}"], getToken(_consts.TOKENS.height), function (_ref3) {
var theme = _ref3.theme;
return "inset 0 0 0 ".concat(theme.orbit.borderWidthInput, " ").concat(theme.orbit.borderColorInput);
}, function (_ref4) {
var theme = _ref4.theme,
error = _ref4.error;
return error && "inset 0 0 0 ".concat(theme.orbit.borderWidthInput, " ").concat(theme.orbit.borderColorInputError);
}, function (_ref5) {
var active = _ref5.active;
return active && _formElementFocus.default;
}, function (_ref6) {
var disabled = _ref6.disabled,
theme = _ref6.theme;
return disabled ? theme.orbit.backgroundInputDisabled : theme.orbit.backgroundInput;
}, function (_ref7) {
var theme = _ref7.theme;
return theme.orbit.fontSizeInputNormal;
}, function (_ref8) {
var theme = _ref8.theme;
return theme.orbit.durationFast;
}, _mediaQuery.default.tablet((0, _styledComponents.css)(["border-radius:", ";"], function (_ref9) {
var theme = _ref9.theme;
return theme.orbit.borderRadiusNormal;
})), function (_ref10) {
var theme = _ref10.theme,
error = _ref10.error;
return "".concat(theme.orbit.borderWidthInput, " ").concat(error ? theme.orbit.borderColorInputErrorHover : theme.orbit.borderColorInputHover);
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
FakeGroup.defaultProps = {
theme: _defaultTheme.default
};
var StyledChildren = _styledComponents.default.div.withConfig({
displayName: "InputGroup__StyledChildren",
componentId: "cyuwoi-1"
})(["display:flex;position:relative;"]);
var StyledChild = _styledComponents.default.div.withConfig({
displayName: "InputGroup__StyledChild",
componentId: "cyuwoi-2"
})(["flex:", ";padding:", ";:last-child{padding:0;}"], function (_ref11) {
var flex = _ref11.flex;
return flex;
}, function (_ref12) {
var theme = _ref12.theme;
return (0, _rtl.rtlSpacing)("0 ".concat(theme.orbit.spaceXSmall, " 0 0"));
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
StyledChild.defaultProps = {
theme: _defaultTheme.default
};
var StyledInputGroup = (0, _styledComponents.default)(function (_ref13) {
var children = _ref13.children,
className = _ref13.className,
dataTest = _ref13.dataTest,
role = _ref13.role,
ariaLabelledby = _ref13.ariaLabelledby;
return /*#__PURE__*/React.createElement("div", {
className: className,
"data-test": dataTest,
role: role,
"aria-labelledby": ariaLabelledby
}, children);
}).withConfig({
displayName: "InputGroup__StyledInputGroup",
componentId: "cyuwoi-3"
})(["display:flex;width:100%;flex-direction:column;position:relative;margin-bottom:", ";", "{", "{box-shadow:none;background-color:transparent;display:none;align-items:center;justify-content:flex-end;}", "{background-color:transparent;> select{box-shadow:none;background-color:transparent;&:focus{box-shadow:none;}}}", ":after,", ":after{content:\" \";position:absolute;top:50%;transform:translateY(-50%);", ":0;height:", ";width:1px;background-color:", ";transition:background-color ", " ease-in-out;display:block;z-index:2;}&:last-of-type{", ":after,", ":after{content:none;}}}", " ", "{display:", ";}", ":focus ~ ", "{box-shadow:none;}"], _getSpacingToken.default, StyledChild, _InputField.FakeInput, _Select.SelectContainer, _InputField.InputContainer, _Select.SelectContainer, _rtl.right, getToken(_consts.TOKENS.heightLine), function (_ref14) {
var theme = _ref14.theme,
error = _ref14.error,
active = _ref14.active;
return error && !active ? theme.orbit.borderColorInputError : theme.orbit.borderColorInput;
}, function (_ref15) {
var theme = _ref15.theme;
return theme.orbit.durationFast;
}, _InputField.InputContainer, _Select.SelectContainer, StyledChild, _FormLabel.default, function (_ref16) {
var label = _ref16.label;
return label && "none";
}, _InputField.Input, _InputField.FakeInput); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
StyledInputGroup.defaultProps = {
theme: _defaultTheme.default
};
var findPropInChild = function findPropInChild(propToFind, children) {
return React.Children.toArray(children).map(function (el) {
if (el.props && typeof el.props[propToFind] !== "undefined") return el.props[propToFind];
return null;
}).filter(function (el) {
return el !== null && el !== "";
});
};
var InputGroup = function InputGroup(_ref17) {
var children = _ref17.children,
label = _ref17.label,
_ref17$flex = _ref17.flex,
flex = _ref17$flex === void 0 ? "0 1 auto" : _ref17$flex,
_ref17$size = _ref17.size,
size = _ref17$size === void 0 ? _consts.SIZE_OPTIONS.NORMAL : _ref17$size,
help = _ref17.help,
error = _ref17.error,
dataTest = _ref17.dataTest,
spaceAfter = _ref17.spaceAfter,
onFocus = _ref17.onFocus,
onBlur = _ref17.onBlur,
onChange = _ref17.onChange;
var _React$useState = React.useState(false),
_React$useState2 = (0, _slicedToArray2.default)(_React$useState, 2),
active = _React$useState2[0],
setActive = _React$useState2[1];
var _React$useState3 = React.useState(false),
_React$useState4 = (0, _slicedToArray2.default)(_React$useState3, 2),
filled = _React$useState4[0],
setFilled = _React$useState4[1];
var inputID = React.useMemo(function () {
return (0, _randomID.default)("inputGroupID");
}, []);
var isFilled = React.useCallback(function () {
return setFilled(findPropInChild("value", children).length === React.Children.toArray(children).length);
}, [children]);
React.useEffect(function () {
isFilled();
}, [isFilled]);
var handleFocus = function handleFocus(ev) {
setActive(true);
if (onFocus) {
onFocus(ev);
}
};
var handleBlur = function handleBlur(ev) {
isFilled();
setActive(false);
if (onBlur) {
onBlur(ev);
}
};
var handleChange = function handleChange(ev) {
isFilled();
if (onChange) {
onChange(ev);
}
};
return /*#__PURE__*/React.createElement(StyledInputGroup, {
label: label,
error: error,
active: active,
size: size,
dataTest: dataTest,
spaceAfter: spaceAfter,
role: "group",
ariaLabelledby: label && inputID
}, label && /*#__PURE__*/React.createElement(_FormLabel.default, {
filled: filled,
id: inputID
}, label), /*#__PURE__*/React.createElement(StyledChildren, null, React.Children.map(children, function (item, key) {
// either array, array with one length or string
// if it's not defined, use the first or string
var childFlex = Array.isArray(flex) && flex.length !== 1 ? flex[key] || flex[0] : flex;
return /*#__PURE__*/React.createElement(StyledChild, {
flex: childFlex
}, /*#__PURE__*/React.cloneElement(item, {
size: size,
label: undefined,
help: undefined,
error: undefined,
onChange: item.props.onChange != null ? item.props.onChange : handleChange,
onBlur: item.props.onBlur != null ? item.props.onChange : handleBlur,
onFocus: item.props.onFocus != null ? item.props.onFocus : handleFocus
}));
}), /*#__PURE__*/React.createElement(FakeGroup, {
label: label,
error: error,
active: active,
size: size
})), /*#__PURE__*/React.createElement(_FormFeedback.default, {
error: error,
help: help
}));
};
var _default = InputGroup;
exports.default = _default;