vcc-ui
Version:
VCC UI is a collection of React UI Components that can be used for developing front-end applications at Volvo Car Corporation.
123 lines (105 loc) • 4.09 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Link = Link;
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _reactFela = require("react-fela");
var _block = require("../block");
var _inline = require("../inline");
var _arrow = require("../arrow");
var _getThemeStyle = require("../../get-theme-style");
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
var arrowTransform = {
up: "translateY(-3px)",
down: "translateY(3px)",
right: "translateX(5px)",
left: "translateX(-5px)"
};
var link = function link(_ref) {
var intent = _ref.intent,
arrow = _ref.arrow,
theme = _ref.theme;
return {
whiteSpace: "nowrap",
fontWeight: 400,
fontSize: 15,
textDecoration: "none",
transition: "all 0.3s ease-out",
transitionProperty: "background, fill, stroke, color, border-color",
":focus": {
textDecoration: "underline",
outline: "none"
},
extend: [{
condition: intent === "primary",
style: {
color: theme.colors.grey1,
fill: theme.colors.primary,
":hover": {
color: theme.colors.grey3
}
}
}, {
condition: intent === "primary-light",
style: {
color: theme.colors.white,
fill: theme.colors.white,
":hover": {
color: theme.colors.grey5,
fill: theme.colors.grey5
}
}
}, {
condition: arrow,
style: {
":hover": {
"& svg": {
transform: arrowTransform[arrow]
}
}
}
}]
};
};
function Link(_ref2) {
var arrow = _ref2.arrow,
_ref2$intent = _ref2.intent,
intent = _ref2$intent === void 0 ? "primary" : _ref2$intent,
children = _ref2.children,
props = _objectWithoutProperties(_ref2, ["arrow", "intent", "children"]);
var _useFela = (0, _reactFela.useFela)(),
theme = _useFela.theme;
var styleProps = {
arrow: arrow,
intent: intent,
theme: theme
};
return _react.default.createElement(_block.Block, _extends({}, props, {
as: "a",
extend: [link(styleProps), (0, _getThemeStyle.getThemeStyle)("link", theme, styleProps)]
}), arrow && arrow === "left" && _react.default.createElement(_inline.Inline, {
extend: {
marginRight: 8
}
}, _react.default.createElement(_arrow.Arrow, {
direction: arrow
})), children, arrow && arrow !== "left" && _react.default.createElement(_inline.Inline, {
extend: {
marginLeft: 8
}
}, _react.default.createElement(_arrow.Arrow, {
direction: arrow
})));
}
Link.propTypes = {
/** A JSX node */
children: _propTypes.default.node,
intent: _propTypes.default.oneOf(["primary", "primary-light"]),
arrow: _propTypes.default.oneOf(["up", "down", "right", "left"]),
href: _propTypes.default.string
};