@atlaskit/atlassian-navigation
Version:
A horizontal navigation component for Atlassian products.
178 lines (176 loc) • 8.69 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _react = require("react");
var _react2 = require("@emotion/react");
var _constants = require("../../common/constants");
var _theme = require("../../theme");
var _utils = require("./utils");
var _excluded = ["icon", "logo", "siteTitle", "onClick", "href", "onMouseDown", "testId", "logoMaxWidth"];
var _css;
var VAR_LOGO_MAX_WIDTH = '--logo-max-width';
var VAR_PRODUCT_HOME_COLOR_ACTIVE = '--product-home-color-active';
var VAR_PRODUCT_HOME_BACKGROUND_COLOR_ACTIVE = '--product-home-bg-color-active';
var VAR_PRODUCT_HOME_BOX_SHADOW_ACTIVE = '--product-home-box-shadow-active';
var VAR_PRODUCT_HOME_COLOR_FOCUS = '--product-home-color-focus';
var VAR_PRODUCT_HOME_BACKGROUND_COLOR_FOCUS = '--product-home-bg-color-focus';
var VAR_PRODUCT_HOME_BOX_SHADOW_FOCUS = '--product-home-box-shadow-focus';
var VAR_PRODUCT_HOME_COLOR_HOVER = '--product-home-color-hover';
var VAR_PRODUCT_HOME_BACKGROUND_COLOR_HOVER = '--product-home-bg-color-hover';
var VAR_PRODUCT_HOME_BOX_SHADOW_HOVER = '--product-home-box-shadow-hover';
var productHomeButtonStyles = (0, _react2.css)((_css = {
display: 'flex',
padding: _constants.gridSize / 2,
alignItems: 'center',
background: 'none',
border: 0,
borderRadius: 3,
color: 'inherit',
cursor: 'pointer',
'&::-moz-focus-inner': {
border: 0
},
'&:first-of-type': {
marginLeft: 0
},
'&:hover': {
backgroundColor: "var(".concat(VAR_PRODUCT_HOME_BACKGROUND_COLOR_HOVER, ")"),
boxShadow: "var(".concat(VAR_PRODUCT_HOME_BOX_SHADOW_HOVER, ")"),
color: "var(".concat(VAR_PRODUCT_HOME_COLOR_HOVER, ")")
},
'&:active': {
backgroundColor: "var(".concat(VAR_PRODUCT_HOME_BACKGROUND_COLOR_ACTIVE, ")"),
boxShadow: "var(".concat(VAR_PRODUCT_HOME_BOX_SHADOW_ACTIVE, ")"),
color: "var(".concat(VAR_PRODUCT_HOME_COLOR_ACTIVE, ")")
},
'&:focus': {
backgroundColor: "var(".concat(VAR_PRODUCT_HOME_BACKGROUND_COLOR_FOCUS, ")"),
boxShadow: "var(".concat(VAR_PRODUCT_HOME_BOX_SHADOW_FOCUS, ")"),
color: "var(".concat(VAR_PRODUCT_HOME_COLOR_FOCUS, ")"),
outline: 0
},
// eslint-disable-next-line @repo/internal/styles/no-nested-styles
'div&': {
pointerEvents: 'none'
}
}, (0, _defineProperty2.default)(_css, "@media (max-width: ".concat(_constants.PRODUCT_HOME_BREAKPOINT - 0.1, "px)"), {
margin: "0 ".concat(_constants.gridSize, "px")
}), (0, _defineProperty2.default)(_css, "@media (min-width: ".concat(_constants.PRODUCT_HOME_BREAKPOINT, "px)"), {
margin: "0 ".concat(_constants.gridSize * 2, "px")
}), _css));
var productLogoStyles = (0, _react2.css)((0, _defineProperty2.default)({
// Ensure anything passed into
// productHome is aligned correctly
display: 'flex',
maxWidth: "var(".concat(VAR_LOGO_MAX_WIDTH, ")"),
// eslint-disable-next-line @repo/internal/styles/no-nested-styles
'& > *': {
maxHeight: 24
},
// eslint-disable-next-line @repo/internal/styles/no-nested-styles
'& > span > svg': {
maxWidth: "var(".concat(VAR_LOGO_MAX_WIDTH, ")")
}
}, "@media (max-width: ".concat(_constants.PRODUCT_HOME_BREAKPOINT - 0.1, "px)"), {
display: 'none'
}));
var customMaxHeightStyles = (0, _react2.css)({
maxHeight: 28
});
var productIconStyles = (0, _react2.css)((0, _defineProperty2.default)({
// Ensure anything passed into
// productHome is aligned correctly
display: 'flex',
// eslint-disable-next-line @repo/internal/styles/no-nested-styles
'& > *': {
maxHeight: 24
}
}, "@media (min-width: ".concat(_constants.PRODUCT_HOME_BREAKPOINT, "px)"), {
display: 'none'
}));
var siteTitleStyles = (0, _react2.css)({
display: 'flex',
marginRight: _constants.gridSize / 2,
marginLeft: _constants.gridSize * 0.5,
paddingRight: _constants.gridSize * 2,
alignItems: 'center'
});
/**
* __Product home__
*
* The ProductHome component displays the product visual identity composed of:
* logo, icon, and optional text. Values for logo and icon are never displayed
* at the same time, where icon is used only when space is restricted. Should be
* passed into `AtlassianNavigation`'s `renderProductHome` prop.
*
* - [Examples](https://atlassian.design/components/atlassian-navigation/examples#product-home)
* - [Code](https://atlassian.design/components/atlassian-navigation/code)
*/
var ProductHome = function ProductHome(_ref) {
var _productHomeButtonDyn;
var Icon = _ref.icon,
Logo = _ref.logo,
siteTitle = _ref.siteTitle,
onClick = _ref.onClick,
href = _ref.href,
onMouseDown = _ref.onMouseDown,
testId = _ref.testId,
_ref$logoMaxWidth = _ref.logoMaxWidth,
logoMaxWidth = _ref$logoMaxWidth === void 0 ? 260 : _ref$logoMaxWidth,
rest = (0, _objectWithoutProperties2.default)(_ref, _excluded);
var theme = (0, _theme.useTheme)();
var primaryButton = theme.mode.primaryButton;
var _theme$mode$productHo = theme.mode.productHome,
_theme$mode$productHo2 = _theme$mode$productHo.iconColor,
iconColor = _theme$mode$productHo2 === void 0 ? 'inherit' : _theme$mode$productHo2,
_theme$mode$productHo3 = _theme$mode$productHo.iconGradientStart,
iconGradientStart = _theme$mode$productHo3 === void 0 ? 'inherit' : _theme$mode$productHo3,
_theme$mode$productHo4 = _theme$mode$productHo.iconGradientStop,
iconGradientStop = _theme$mode$productHo4 === void 0 ? 'inherit' : _theme$mode$productHo4,
_theme$mode$productHo5 = _theme$mode$productHo.textColor,
textColor = _theme$mode$productHo5 === void 0 ? theme.mode.productHome.color : _theme$mode$productHo5;
var Tag = (0, _utils.getTag)(onClick, href);
var preventFocusRing = function preventFocusRing(e) {
e.preventDefault();
onMouseDown && onMouseDown(e);
};
var productHomeButtonDynamicStyles = (_productHomeButtonDyn = {}, (0, _defineProperty2.default)(_productHomeButtonDyn, VAR_PRODUCT_HOME_COLOR_ACTIVE, primaryButton.active.color), (0, _defineProperty2.default)(_productHomeButtonDyn, VAR_PRODUCT_HOME_BACKGROUND_COLOR_ACTIVE, primaryButton.active.backgroundColor), (0, _defineProperty2.default)(_productHomeButtonDyn, VAR_PRODUCT_HOME_BOX_SHADOW_ACTIVE, primaryButton.active.boxShadow), (0, _defineProperty2.default)(_productHomeButtonDyn, VAR_PRODUCT_HOME_COLOR_FOCUS, primaryButton.focus.color), (0, _defineProperty2.default)(_productHomeButtonDyn, VAR_PRODUCT_HOME_BACKGROUND_COLOR_FOCUS, primaryButton.focus.backgroundColor), (0, _defineProperty2.default)(_productHomeButtonDyn, VAR_PRODUCT_HOME_BOX_SHADOW_FOCUS, primaryButton.focus.boxShadow), (0, _defineProperty2.default)(_productHomeButtonDyn, VAR_PRODUCT_HOME_COLOR_HOVER, primaryButton.hover.color), (0, _defineProperty2.default)(_productHomeButtonDyn, VAR_PRODUCT_HOME_BACKGROUND_COLOR_HOVER, primaryButton.hover.backgroundColor), (0, _defineProperty2.default)(_productHomeButtonDyn, VAR_PRODUCT_HOME_BOX_SHADOW_HOVER, primaryButton.hover.boxShadow), (0, _defineProperty2.default)(_productHomeButtonDyn, VAR_LOGO_MAX_WIDTH, "".concat(logoMaxWidth, "px")), _productHomeButtonDyn);
return (0, _react2.jsx)(_react.Fragment, null, (0, _react2.jsx)(Tag, (0, _extends2.default)({
style: productHomeButtonDynamicStyles,
css: productHomeButtonStyles,
href: href,
onClick: onClick,
onMouseDown: preventFocusRing,
"data-testid": testId && "".concat(testId, "-container")
// eslint-disable-next-line @repo/internal/react/no-unsafe-spread-props
}, rest), (0, _react2.jsx)("div", {
css: [customMaxHeightStyles, productLogoStyles],
"data-testid": testId && "".concat(testId, "-logo")
}, (0, _react2.jsx)(Logo, {
iconGradientStart: iconGradientStart,
iconGradientStop: iconGradientStop,
iconColor: iconColor,
textColor: textColor
})), (0, _react2.jsx)("div", {
css: [customMaxHeightStyles, productIconStyles],
"data-testid": testId && "".concat(testId, "-icon")
}, (0, _react2.jsx)(Icon, {
iconGradientStart: iconGradientStart,
iconGradientStop: iconGradientStop,
iconColor: iconColor
}))), siteTitle && (0, _react2.jsx)("div", {
style: {
borderRight: theme.mode.productHome.borderRight
},
css: siteTitleStyles,
"data-testid": testId && "".concat(testId, "-site-title")
}, siteTitle));
};
var _default = ProductHome;
exports.default = _default;