UNPKG

@atlaskit/atlassian-navigation

Version:

A horizontal navigation component for Atlassian products.

178 lines (176 loc) 8.69 kB
"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;