@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.
169 lines (142 loc) • 6.76 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.StyledTag = void 0;
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 _rtl = require("../utils/rtl");
var _CloseCircle = _interopRequireDefault(require("../icons/CloseCircle"));
var _consts = require("./consts");
var _keyMaps = _interopRequireDefault(require("../common/keyMaps"));
var _resolveColor = _interopRequireDefault(require("./helpers/resolveColor"));
var getFontSize = function getFontSize(_ref) {
var _tokens;
var theme = _ref.theme,
size = _ref.size;
var tokens = (_tokens = {}, (0, _defineProperty2.default)(_tokens, _consts.SIZES.SMALL, theme.orbit.fontSizeTextSmall), (0, _defineProperty2.default)(_tokens, _consts.SIZES.NORMAL, theme.orbit.fontSizeTextNormal), _tokens);
return tokens[size];
};
var getBackgroundColor = function getBackgroundColor(state) {
return function () {
var _states;
var states = (_states = {}, (0, _defineProperty2.default)(_states, _consts.STATES.DEFAULT, (0, _resolveColor.default)({
selected: "paletteBlueNormal",
removable: "paletteBlueLight",
normal: "paletteCloudDark"
})), (0, _defineProperty2.default)(_states, _consts.STATES.HOVER, (0, _resolveColor.default)({
selected: "paletteBlueNormalHover",
removable: "paletteBlueLightHover",
normal: "paletteCloudNormalHover"
})), (0, _defineProperty2.default)(_states, _consts.STATES.ACTIVE, (0, _resolveColor.default)({
selected: "paletteBlueNormalActive",
removable: "paletteBlueLightActive",
normal: "paletteCloudNormalHover"
})), _states);
return states[state];
};
};
var CloseContainer = _styledComponents.default.div.withConfig({
displayName: "Tag__CloseContainer",
componentId: "sc-ohf26k-0"
})(["display:flex;margin-", ":8px;opacity:0.5;color:", ";cursor:", ";transition:all ", " ease-in-out;&:active{color:", ";}"], _rtl.left, (0, _resolveColor.default)({
selected: "paletteWhite",
removable: "paletteBlueDarker",
normal: "paletteInkLink"
}), function (_ref2) {
var actionable = _ref2.actionable;
return actionable && "pointer";
}, function (_ref3) {
var theme = _ref3.theme;
return theme.orbit.durationFast;
}, function (_ref4) {
var theme = _ref4.theme,
selected = _ref4.selected;
return selected ? theme.orbit.paletteWhite : theme.orbit.paletteBlueDarker;
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
CloseContainer.defaultProps = {
theme: _defaultTheme.default
};
var StyledTag = _styledComponents.default.div.withConfig({
displayName: "Tag__StyledTag",
componentId: "sc-ohf26k-1"
})(["", ""], function (_ref5) {
var theme = _ref5.theme,
actionable = _ref5.actionable;
return (0, _styledComponents.css)(["font-family:", ";color:", ";background:", ";display:inline-flex;box-sizing:border-box;justify-content:center;align-items:center;font-size:", ";font-weight:", ";border-radius:", ";padding:", ";transition:color ", " ease-in-out,box-shadow ", " ease-in-out,background ", " ease-in-out;&:focus{outline:0;}", ";"], theme.orbit.fontFamily, (0, _resolveColor.default)({
selected: "paletteWhite",
removable: "paletteBlueDarker",
normal: "colorTextTag"
}), getBackgroundColor(_consts.STATES.DEFAULT), getFontSize, theme.orbit.fontWeightMedium, theme.orbit.borderRadiusNormal, (0, _rtl.rtlSpacing)(theme.orbit.paddingTag), theme.orbit.durationFast, theme.orbit.durationFast, theme.orbit.durationFast, actionable && (0, _styledComponents.css)(["cursor:pointer;&:hover{background:", ";box-shadow:none;}&:active{", "{opacity:1;}background:", ";box-shadow:none;}&:focus{", "{opacity:1;}background:", ";box-shadow:none;outline:0;}"], getBackgroundColor(_consts.STATES.HOVER), CloseContainer, getBackgroundColor(_consts.STATES.ACTIVE), CloseContainer, getBackgroundColor(_consts.STATES.HOVER)));
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
exports.StyledTag = StyledTag;
StyledTag.defaultProps = {
theme: _defaultTheme.default
};
var StyledClose = _styledComponents.default.div.withConfig({
displayName: "Tag__StyledClose",
componentId: "sc-ohf26k-2"
})(["display:flex;border-radius:100%;&:focus{", "{opacity:1;}outline:none;box-shadow:0 0 0 2px ", ";}"], CloseContainer, function (_ref6) {
var theme = _ref6.theme,
selected = _ref6.selected,
removable = _ref6.removable;
return selected && !removable ? theme.orbit.paletteWhite : theme.orbit.paletteBlueDarker;
}); // $FlowFixMe: https://github.com/flow-typed/flow-typed/issues/3653#issuecomment-568539198
StyledClose.defaultProps = {
theme: _defaultTheme.default
};
var buttonClickEmulation = function buttonClickEmulation(callback) {
return function (ev) {
if (ev && ev.keyCode === _keyMaps.default.SPACE) {
ev.preventDefault();
if (callback) callback();
} else if (ev && ev.keyCode === _keyMaps.default.ENTER) {
if (callback) callback();
}
};
};
var Tag = /*#__PURE__*/React.forwardRef(function (props, ref) {
var selected = props.selected,
children = props.children,
_props$size = props.size,
size = _props$size === void 0 ? _consts.SIZES.NORMAL : _props$size,
onClick = props.onClick,
onRemove = props.onRemove,
dataTest = props.dataTest;
return /*#__PURE__*/React.createElement(StyledTag, {
actionable: onClick || onRemove,
"data-test": dataTest,
size: size,
ref: ref,
onClick: onClick,
removable: !!onRemove,
selected: selected,
tabIndex: (onClick || onRemove) && "0",
role: "button",
onKeyDown: buttonClickEmulation(onClick)
}, children, !!onRemove && /*#__PURE__*/React.createElement(CloseContainer, {
selected: selected,
removable: !!onRemove,
onClick: function onClick(ev) {
ev.stopPropagation();
if (onRemove) onRemove();
}
}, /*#__PURE__*/React.createElement(StyledClose, {
tabIndex: "0",
selected: selected,
"aria-label": "close",
role: "button",
onKeyDown: function onKeyDown(ev) {
ev.stopPropagation();
buttonClickEmulation(onRemove);
}
}, /*#__PURE__*/React.createElement(_CloseCircle.default, {
size: "small"
}))));
});
var _default = Tag;
exports.default = _default;