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.

169 lines (142 loc) 6.76 kB
"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;