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.
114 lines (105 loc) • 4.4 kB
JavaScript
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 _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
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; }
import React from "react";
import PropTypes from "prop-types";
import { Block, withTheme } from "../block";
import { Inline } from "../inline";
import { Arrow } from "../arrow";
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,
_ref$extend = _ref.extend,
extend = _ref$extend === void 0 ? {} : _ref$extend;
return {
whiteSpace: "nowrap",
fontFamily: "Volvo Novum Regular, sans-serif",
fontSize: "15px",
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: "#161618",
fill: "#007bcd",
":hover": {
color: "#555"
}
}
}, {
condition: intent === "primary-light",
style: {
color: "#fff",
fill: "#fff",
":hover": {
color: "#ccc",
fill: "#ccc"
}
}
}, {
condition: arrow,
style: {
":hover": {
"& svg": {
transform: arrowTransform[arrow]
}
}
}
}, extend]
};
};
var LinkComponent = function LinkComponent(_ref2) {
var arrow = _ref2.arrow,
intent = _ref2.intent,
children = _ref2.children,
theme = _ref2.theme,
props = _objectWithoutProperties(_ref2, ["arrow", "intent", "children", "theme"]);
return React.createElement(Block, _extends({
as: "a"
}, props, {
extend: _objectSpread({}, link({
intent: intent,
arrow: arrow,
extend: theme.link
}))
}), arrow && arrow === "left" && React.createElement(Inline, {
extend: {
marginRight: "8px"
}
}, React.createElement(Arrow, {
direction: arrow
})), children, arrow && arrow !== "left" && React.createElement(Inline, {
extend: {
marginLeft: "8px"
}
}, React.createElement(Arrow, {
direction: arrow
})));
};
var propTypes = {
/** A JSX node */
children: PropTypes.node,
intent: PropTypes.oneOf(["primary", "primary-light"]),
arrow: PropTypes.oneOf(["up", "down", "right", "left"])
};
var defaultProps = {
intent: "primary"
};
LinkComponent.propTypes = propTypes;
LinkComponent.defaultProps = defaultProps;
LinkComponent.displayName = "Link";
var Link = withTheme(LinkComponent);
export { Link };