@atlaskit/navigation-system 0.167.3 → 0.168.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +9 -0
  2. package/afm-volt/tsconfig.json +75 -0
  3. package/dist/cjs/entry-points/top-nav-items/index.js +8 -1
  4. package/dist/cjs/index.js +8 -1
  5. package/dist/cjs/ui/top-nav-items/nav-logo/app-logo.compiled.css +24 -0
  6. package/dist/cjs/ui/top-nav-items/nav-logo/app-logo.js +104 -0
  7. package/dist/cjs/ui/top-nav-items/nav-logo/logo-renderer.js +42 -0
  8. package/dist/cjs/ui/top-nav-items/{nav-logo.compiled.css → nav-logo/nav-logo.compiled.css} +1 -1
  9. package/dist/cjs/ui/top-nav-items/{nav-logo.js → nav-logo/nav-logo.js} +8 -33
  10. package/dist/cjs/ui/top-nav-items/themed/get-custom-theme-styles.js +1 -1
  11. package/dist/es2019/entry-points/top-nav-items/index.js +2 -1
  12. package/dist/es2019/index.js +2 -1
  13. package/dist/es2019/ui/top-nav-items/nav-logo/app-logo.compiled.css +24 -0
  14. package/dist/es2019/ui/top-nav-items/nav-logo/app-logo.js +94 -0
  15. package/dist/es2019/ui/top-nav-items/nav-logo/logo-renderer.js +35 -0
  16. package/dist/{esm/ui/top-nav-items → es2019/ui/top-nav-items/nav-logo}/nav-logo.compiled.css +1 -1
  17. package/dist/es2019/ui/top-nav-items/{nav-logo.js → nav-logo/nav-logo.js} +9 -36
  18. package/dist/es2019/ui/top-nav-items/themed/get-custom-theme-styles.js +1 -1
  19. package/dist/esm/entry-points/top-nav-items/index.js +2 -1
  20. package/dist/esm/index.js +2 -1
  21. package/dist/esm/ui/top-nav-items/nav-logo/app-logo.compiled.css +24 -0
  22. package/dist/esm/ui/top-nav-items/nav-logo/app-logo.js +95 -0
  23. package/dist/esm/ui/top-nav-items/nav-logo/logo-renderer.js +33 -0
  24. package/dist/{es2019/ui/top-nav-items → esm/ui/top-nav-items/nav-logo}/nav-logo.compiled.css +1 -1
  25. package/dist/esm/ui/top-nav-items/{nav-logo.js → nav-logo/nav-logo.js} +9 -34
  26. package/dist/esm/ui/top-nav-items/themed/get-custom-theme-styles.js +1 -1
  27. package/dist/types/entry-points/top-nav-items/index.d.ts +2 -1
  28. package/dist/types/index.d.ts +2 -1
  29. package/dist/types/ui/top-nav-items/nav-logo/app-logo.d.ts +38 -0
  30. package/dist/types/ui/top-nav-items/nav-logo/logo-renderer.d.ts +14 -0
  31. package/dist/types/ui/top-nav-items/{nav-logo.d.ts → nav-logo/nav-logo.d.ts} +1 -1
  32. package/dist/types-ts4.5/entry-points/top-nav-items/index.d.ts +2 -1
  33. package/dist/types-ts4.5/index.d.ts +2 -1
  34. package/dist/types-ts4.5/ui/top-nav-items/nav-logo/app-logo.d.ts +38 -0
  35. package/dist/types-ts4.5/ui/top-nav-items/nav-logo/logo-renderer.d.ts +14 -0
  36. package/dist/types-ts4.5/ui/top-nav-items/{nav-logo.d.ts → nav-logo/nav-logo.d.ts} +1 -1
  37. package/examples/top-nav-side-nav-collapsed.tsx +1 -1
  38. package/examples/top-nav-with-long-name.tsx +63 -0
  39. package/examples/top-nav-with-temp-nav-app-icon.tsx +5 -5
  40. package/examples/top-navigation-stress.tsx +15 -12
  41. package/examples/top-navigation-theming-with-picker.tsx +17 -8
  42. package/examples/top-navigation-theming.tsx +16 -6
  43. package/examples/top-navigation.tsx +17 -7
  44. package/package.json +1 -1
  45. package/src/entry-points/top-nav-items/index.tsx +2 -1
  46. package/src/index.tsx +2 -1
  47. package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-lg---with-min-widths--firefox.png +0 -0
  48. package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-lg--firefox.png +0 -0
  49. package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-md---with-min-widths--firefox.png +0 -0
  50. package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-md--firefox.png +0 -0
  51. package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-sm---with-min-widths--firefox.png +0 -0
  52. package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-sm--firefox.png +0 -0
  53. package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-xl---with-min-widths--firefox.png +0 -0
  54. package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-xl--firefox.png +0 -0
  55. package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-xs---with-min-widths--firefox.png +0 -0
  56. package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-xs--firefox.png +0 -0
  57. package/src/ui/page-layout/side-nav/toggle-button.tsx +1 -9
  58. package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/long-product-name-tooltip--default.png +0 -0
  59. package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/nav-logo-hover---custom-theming--desktop.png +0 -0
  60. package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/nav-logo-hover--desktop.png +0 -0
  61. package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/nav-logo-pressed---custom-theming--desktop.png +0 -0
  62. package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/nav-logo-pressed---custom-theming--mobile.png +0 -0
  63. package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/nav-logo-pressed--desktop.png +0 -0
  64. package/src/ui/top-nav-items/__tests__/informational-vr-tests/top-navigation.vr.tsx +18 -0
  65. package/src/ui/top-nav-items/__tests__/unit/top-nav-items.test.tsx +1 -1
  66. package/src/ui/top-nav-items/__tests__/vr-tests/__snapshots__/top-navigation/theming-is-enabled--desktop--platform-team25-app-icon-tiles-true.png +0 -0
  67. package/src/ui/top-nav-items/__tests__/vr-tests/__snapshots__/top-navigation/top-navigation-example--desktop--platform-team25-app-icon-tiles-true.png +0 -0
  68. package/src/ui/top-nav-items/nav-logo/app-logo.tsx +213 -0
  69. package/src/ui/top-nav-items/nav-logo/logo-renderer.tsx +53 -0
  70. package/src/ui/top-nav-items/{nav-logo.tsx → nav-logo/nav-logo.tsx} +12 -43
  71. package/src/ui/top-nav-items/themed/get-custom-theme-styles.tsx +1 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,14 @@
1
1
  # @atlassian/navigation-system
2
2
 
3
+ ## 0.168.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#178562](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/pull-requests/178562)
8
+ [`ea3a94fc3c6b0`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/ea3a94fc3c6b0) -
9
+ Adds new AppNavLogo component for use with @atlaskit/logo that displays UI text next to the icon
10
+ at wider screen widths, rather than rendering a unique logo component.
11
+
3
12
  ## 0.167.3
4
13
 
5
14
  ### Patch Changes
@@ -0,0 +1,75 @@
1
+ {
2
+ "extends": "../../../../tsconfig.entry-points.volt.json",
3
+ "compilerOptions": {
4
+ "declaration": true,
5
+ "target": "es5",
6
+ "outDir": "../../../../../volt/tsDist/@atlaskit__navigation-system/app",
7
+ "rootDir": "../",
8
+ "composite": true
9
+ },
10
+ "include": [
11
+ "../src/**/*.ts",
12
+ "../src/**/*.tsx"
13
+ ],
14
+ "exclude": [
15
+ "../src/**/__tests__/*",
16
+ "../src/**/*.test.*",
17
+ "../src/**/test.*"
18
+ ],
19
+ "references": [
20
+ {
21
+ "path": "../../../analytics/analytics-next/afm-volt/tsconfig.json"
22
+ },
23
+ {
24
+ "path": "../../avatar/afm-volt/tsconfig.json"
25
+ },
26
+ {
27
+ "path": "../../button/afm-volt/tsconfig.json"
28
+ },
29
+ {
30
+ "path": "../../css/afm-volt/tsconfig.json"
31
+ },
32
+ {
33
+ "path": "../../ds-lib/afm-volt/tsconfig.json"
34
+ },
35
+ {
36
+ "path": "../../icon/afm-volt/tsconfig.json"
37
+ },
38
+ {
39
+ "path": "../../layering/afm-volt/tsconfig.json"
40
+ },
41
+ {
42
+ "path": "../../logo/afm-volt/tsconfig.json"
43
+ },
44
+ {
45
+ "path": "../../../platform/feature-flags/afm-volt/tsconfig.json"
46
+ },
47
+ {
48
+ "path": "../../popup/afm-volt/tsconfig.json"
49
+ },
50
+ {
51
+ "path": "../../../pragmatic-drag-and-drop/core/afm-volt/tsconfig.json"
52
+ },
53
+ {
54
+ "path": "../../../pragmatic-drag-and-drop/hitbox/afm-volt/tsconfig.json"
55
+ },
56
+ {
57
+ "path": "../../../pragmatic-drag-and-drop/react-drop-indicator/afm-volt/tsconfig.json"
58
+ },
59
+ {
60
+ "path": "../../primitives/afm-volt/tsconfig.json"
61
+ },
62
+ {
63
+ "path": "../../../navigation/temp-nav-app-icons/afm-volt/tsconfig.json"
64
+ },
65
+ {
66
+ "path": "../../tokens/afm-volt/tsconfig.json"
67
+ },
68
+ {
69
+ "path": "../../tooltip/afm-volt/tsconfig.json"
70
+ },
71
+ {
72
+ "path": "../../visually-hidden/afm-volt/tsconfig.json"
73
+ }
74
+ ]
75
+ }
@@ -3,6 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "AppLogo", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _appLogo.AppLogo;
10
+ }
11
+ });
6
12
  Object.defineProperty(exports, "AppSwitcher", {
7
13
  enumerable: true,
8
14
  get: function get() {
@@ -82,7 +88,8 @@ Object.defineProperty(exports, "Settings", {
82
88
  }
83
89
  });
84
90
  var _appSwitcher = require("../../ui/top-nav-items/app-switcher");
85
- var _navLogo = require("../../ui/top-nav-items/nav-logo");
91
+ var _navLogo = require("../../ui/top-nav-items/nav-logo/nav-logo");
92
+ var _appLogo = require("../../ui/top-nav-items/nav-logo/app-logo");
86
93
  var _search = require("../../ui/top-nav-items/search");
87
94
  var _chatButton = require("../../ui/top-nav-items/chat-button");
88
95
  var _endItem = require("../../ui/top-nav-items/end-item");
package/dist/cjs/index.js CHANGED
@@ -3,6 +3,12 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ Object.defineProperty(exports, "AppLogo", {
7
+ enumerable: true,
8
+ get: function get() {
9
+ return _appLogo.AppLogo;
10
+ }
11
+ });
6
12
  Object.defineProperty(exports, "AppSwitcher", {
7
13
  enumerable: true,
8
14
  get: function get() {
@@ -313,7 +319,8 @@ var _panelSplitter = require("./ui/page-layout/panel-splitter/panel-splitter");
313
319
  var _provider = require("./ui/page-layout/panel-splitter/provider");
314
320
  var _topNavStart = require("./ui/page-layout/top-nav/top-nav-start");
315
321
  var _appSwitcher = require("./ui/top-nav-items/app-switcher");
316
- var _navLogo = require("./ui/top-nav-items/nav-logo");
322
+ var _navLogo = require("./ui/top-nav-items/nav-logo/nav-logo");
323
+ var _appLogo = require("./ui/top-nav-items/nav-logo/app-logo");
317
324
  var _topNavMiddle = require("./ui/page-layout/top-nav/top-nav-middle");
318
325
  var _search = require("./ui/top-nav-items/search");
319
326
  var _chatButton = require("./ui/top-nav-items/chat-button");
@@ -0,0 +1,24 @@
1
+
2
+ ._2rko19bv{border-radius:10px}
3
+ ._18zr1b66{padding-inline:var(--ds-space-050,4px)}._18m915vq{overflow-y:hidden}
4
+ ._1bsb1ris{width:max-content}
5
+ ._1e0c1txw{display:flex}
6
+ ._1e0cglyw{display:none}
7
+ ._1o9zidpf{flex-shrink:0}
8
+ ._1reo15vq{overflow-x:hidden}
9
+ ._1toh1r31._1toh1r31{text-decoration-color:currentColor}
10
+ ._1w901kw7._1w901kw7{color:inherit}
11
+ ._4cvr1h6o{align-items:center}
12
+ ._4t3izwfg{height:2pc}
13
+ ._5jyqglyw._5jyqglyw{text-decoration-line:none}
14
+ ._ahbq1b66{margin-inline-start:var(--ds-space-050,4px)}
15
+ ._mrqmnqa1._mrqmnqa1{text-decoration-style:solid}
16
+ ._p12f1tcg{max-width:24px}
17
+ ._p12fnklw{max-width:20pc}
18
+ ._uiztglyw{-webkit-user-select:none;-ms-user-select:none;user-select:none}
19
+ ._y4tiv77o{padding-inline-end:var(--ds-space-025,2px)}
20
+ ._irr3166n:hover{background-color:var(--ds-background-neutral-subtle-hovered,#091e420f)}
21
+ ._irr31rps:hover{background-color:var(--ds-top-bar-button-background-hovered)}
22
+ ._1di61wwy:active{background-color:var(--ds-background-neutral-subtle-pressed,#091e4224)!important}
23
+ ._1di6yhlj:active{background-color:var(--ds-top-bar-button-background-pressed)!important}
24
+ @media (min-width:64rem){._10y418uv._10y418uv{display:initial}}
@@ -0,0 +1,104 @@
1
+ /* app-logo.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ "use strict";
3
+
4
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
6
+ Object.defineProperty(exports, "__esModule", {
7
+ value: true
8
+ });
9
+ exports.AppLogo = void 0;
10
+ require("./app-logo.compiled.css");
11
+ var _runtime = require("@compiled/react/runtime");
12
+ var _react = _interopRequireWildcard(require("react"));
13
+ var _react2 = require("@compiled/react");
14
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
+ var _primitives = require("@atlaskit/primitives");
16
+ var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
17
+ var _hasCustomThemeContext = require("../themed/has-custom-theme-context");
18
+ var _logoRenderer = require("./logo-renderer");
19
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
20
+ var anchorStyles = {
21
+ root: "_2rko19bv _1e0c1txw _4cvr1h6o _4t3izwfg _1o9zidpf _1toh1r31 _5jyqglyw _mrqmnqa1 _1w901kw7",
22
+ newMargin: "_ahbq1b66",
23
+ newInteractionStates: "_irr3166n _1di61wwy",
24
+ newInteractionStatesCustomTheming: "_irr31rps _1di6yhlj"
25
+ };
26
+ var logoWrapperStyles = {
27
+ root: "_18zr1b66"
28
+ };
29
+ var iconContainerStyles = {
30
+ root: "_1reo15vq _18m915vq _1e0c1txw _p12f1tcg"
31
+ };
32
+ var logoTextStyles = {
33
+ root: "_1bsb1ris _p12fnklw _uiztglyw _y4tiv77o _1e0cglyw _10y418uv"
34
+ };
35
+ function isTextClamped(element) {
36
+ // Checking for vertical height rather than horizontal height.
37
+ // When text is "clamped", it's technically being clamped vertically! 🤯
38
+ return element.scrollHeight > element.clientHeight;
39
+ }
40
+
41
+ /**
42
+ * __App logo__
43
+ *
44
+ * The app logo for the top navigation.
45
+ *
46
+ * To provide a responsive experience, label text will render next to an icon at larger viewports.
47
+ */
48
+ var AppLogo = exports.AppLogo = function AppLogo(_ref) {
49
+ var name = _ref.name,
50
+ label = _ref.label,
51
+ href = _ref.href,
52
+ icon = _ref.icon,
53
+ onClick = _ref.onClick;
54
+ var ref = (0, _react.useRef)(null);
55
+ var nameRef = (0, _react.useRef)(null);
56
+ var hasCustomTheme = (0, _hasCustomThemeContext.useHasCustomTheme)();
57
+
58
+ /**
59
+ * Show the tooltip if the name is truncated
60
+ */
61
+ var canTooltipAppear = (0, _react.useCallback)(function () {
62
+ var text = nameRef.current;
63
+ return Boolean(text && isTextClamped(text));
64
+ }, []);
65
+ return /*#__PURE__*/_react.default.createElement(_primitives.Anchor, {
66
+ ref: ref,
67
+ "aria-label": label,
68
+ href: href
69
+ // @ts-expect-error - non-standard values for `borderRadius` and the custom theming interaction states
70
+ // eslint-disable-next-line @compiled/no-suppress-xcss
71
+ ,
72
+ xcss: (0, _react2.cx)(anchorStyles.root, (0, _platformFeatureFlags.fg)('platform_design_system_nav_logo_interaction_states') && anchorStyles.newMargin, (0, _platformFeatureFlags.fg)('platform_design_system_nav_logo_interaction_states') && (hasCustomTheme ? anchorStyles.newInteractionStatesCustomTheming : anchorStyles.newInteractionStates)),
73
+ onClick: onClick
74
+ }, /*#__PURE__*/_react.default.createElement(_primitives.Inline, {
75
+ space: "space.075",
76
+ alignBlock: "center",
77
+ xcss: logoWrapperStyles.root,
78
+ "aria-label": label
79
+ }, /*#__PURE__*/_react.default.createElement("div", {
80
+ className: (0, _runtime.ax)([iconContainerStyles.root])
81
+ }, /*#__PURE__*/_react.default.createElement(_logoRenderer.LogoRenderer, {
82
+ logoOrIcon: icon
83
+ })), /*#__PURE__*/_react.default.createElement("span", {
84
+ className: (0, _runtime.ax)([logoTextStyles.root])
85
+ }, /*#__PURE__*/_react.default.createElement(_tooltip.default, {
86
+ content: name,
87
+ position: "bottom",
88
+ ignoreTooltipPointerEvents: true,
89
+ hideTooltipOnMouseDown: true
90
+ // We don't need a duplicate hidden element containing tooltip content
91
+ // as the content of the tooltip matches what is rendered in the nav item.
92
+ ,
93
+ isScreenReaderAnnouncementDisabled: true,
94
+ canAppear: canTooltipAppear
95
+ }, function (tooltipProps) {
96
+ return /*#__PURE__*/_react.default.createElement("span", tooltipProps, /*#__PURE__*/_react.default.createElement(_primitives.Text, {
97
+ "aria-hidden": true,
98
+ color: "inherit",
99
+ weight: "semibold",
100
+ maxLines: 1,
101
+ ref: nameRef
102
+ }, name));
103
+ }))));
104
+ };
@@ -0,0 +1,42 @@
1
+ /* logo-renderer.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ "use strict";
3
+
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.LogoRenderer = LogoRenderer;
9
+ exports.themedLogoText = exports.themedLogoIcon = void 0;
10
+ var _runtime = require("@compiled/react/runtime");
11
+ var _react = _interopRequireWildcard(require("react"));
12
+ var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
13
+ var _hasCustomThemeContext = require("../themed/has-custom-theme-context");
14
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
15
+ var themedLogoIcon = exports.themedLogoIcon = '--ds-top-bar-logo-icon';
16
+ var themedLogoText = exports.themedLogoText = '--ds-top-bar-logo-text';
17
+ function LogoRenderer(_ref) {
18
+ var logoOrIcon = _ref.logoOrIcon;
19
+ return (0, _platformFeatureFlags.fg)('jiv-20710-fix-nav-rerender') ? /*#__PURE__*/_react.default.createElement(LogoRendererMemo, {
20
+ logoOrIcon: logoOrIcon
21
+ }) : /*#__PURE__*/_react.default.createElement(LogoRendererNoMemo, {
22
+ logoOrIcon: logoOrIcon
23
+ });
24
+ }
25
+ var LogoRendererMemo = /*#__PURE__*/(0, _react.memo)(LogoRendererNoMemo);
26
+ function LogoRendererNoMemo(_ref2) {
27
+ var LogoOrIcon = _ref2.logoOrIcon;
28
+ var hasCustomTheme = (0, _hasCustomThemeContext.useHasCustomTheme)();
29
+ if (hasCustomTheme) {
30
+ return /*#__PURE__*/_react.default.createElement(LogoOrIcon, {
31
+ size: "small",
32
+ label: "",
33
+ iconColor: "var(".concat(themedLogoIcon, ")"),
34
+ textColor: "var(".concat(themedLogoText, ")")
35
+ });
36
+ }
37
+ return /*#__PURE__*/_react.default.createElement(LogoOrIcon, {
38
+ size: "small",
39
+ label: "",
40
+ appearance: "brand"
41
+ });
42
+ }
@@ -1,5 +1,5 @@
1
1
 
2
- ._2rkoftgi{border-radius:8px}
2
+ ._2rko1l7b{border-radius:3px}
3
3
  ._2rkoiti9{border-radius:var(--ds-border-radius-100,4px)}
4
4
  ._18zr1b66{padding-inline:var(--ds-space-050,4px)}
5
5
  ._18zru2gc{padding-inline:var(--ds-space-100,8px)}._18m915vq{overflow-y:hidden}
@@ -12,13 +12,14 @@ var _react = _interopRequireWildcard(require("react"));
12
12
  var _react2 = require("@compiled/react");
13
13
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
14
14
  var _primitives = require("@atlaskit/primitives");
15
- var _hasCustomThemeContext = require("./themed/has-custom-theme-context");
15
+ var _hasCustomThemeContext = require("../themed/has-custom-theme-context");
16
+ var _logoRenderer = require("./logo-renderer");
16
17
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
17
18
  var themedLogoIcon = exports.themedLogoIcon = '--ds-top-bar-logo-icon';
18
19
  var themedLogoText = exports.themedLogoText = '--ds-top-bar-logo-text';
19
20
  var anchorStyles = {
20
21
  root: "_2rkoiti9 _1e0c1txw _4cvr1h6o _4t3izwfg",
21
- newBorderRadius: "_2rkoftgi",
22
+ customLogoBorderRadius: "_2rko1l7b",
22
23
  newMargin: "_ahbq1b66",
23
24
  newInteractionStates: "_irr3166n _1di61wwy",
24
25
  newInteractionStatesCustomTheming: "_irr31rps _1di6yhlj"
@@ -37,7 +38,7 @@ var logoContainerStyles = {
37
38
  /**
38
39
  * __Nav logo__
39
40
  *
40
- * The product logo for the top navigation.
41
+ * Custom image logo for the top navigation.
41
42
  *
42
43
  * To provide a responsive experience, it requires both a logo and an icon component.
43
44
  * The logo component will be used for large viewports, and the icon component will be used for small viewports.
@@ -87,41 +88,15 @@ var NavLogo = exports.NavLogo = function NavLogo(_ref) {
87
88
  // @ts-expect-error - non-standard values for `borderRadius` and the custom theming interaction states
88
89
  // eslint-disable-next-line @compiled/no-suppress-xcss
89
90
  ,
90
- xcss: (0, _react2.cx)(anchorStyles.root, (0, _platformFeatureFlags.fg)('platform_design_system_nav_logo_interaction_states') && anchorStyles.newMargin, (0, _platformFeatureFlags.fg)('platform_design_system_nav_logo_interaction_states') && anchorStyles.newBorderRadius, (0, _platformFeatureFlags.fg)('platform_design_system_nav_logo_interaction_states') && (hasCustomTheme ? anchorStyles.newInteractionStatesCustomTheming : anchorStyles.newInteractionStates)),
91
+ xcss: (0, _react2.cx)(anchorStyles.root, (0, _platformFeatureFlags.fg)('platform_design_system_nav_logo_interaction_states') && anchorStyles.customLogoBorderRadius, (0, _platformFeatureFlags.fg)('platform_design_system_nav_logo_interaction_states') && anchorStyles.newMargin, (0, _platformFeatureFlags.fg)('platform_design_system_nav_logo_interaction_states') && (hasCustomTheme ? anchorStyles.newInteractionStatesCustomTheming : anchorStyles.newInteractionStates)),
91
92
  onClick: onClick
92
93
  }, /*#__PURE__*/_react.default.createElement("div", {
93
94
  className: (0, _runtime.ax)([sharedIconOrLogoContainerStyles.root, iconContainerStyles.root, (0, _platformFeatureFlags.fg)('platform-team25-app-icon-tiles') && sharedIconOrLogoContainerStyles.appIconTilePaddingFlagged])
94
- }, /*#__PURE__*/_react.default.createElement(NavLogoRenderer, {
95
+ }, /*#__PURE__*/_react.default.createElement(_logoRenderer.LogoRenderer, {
95
96
  logoOrIcon: icon
96
97
  })), /*#__PURE__*/_react.default.createElement("div", {
97
98
  className: (0, _runtime.ax)([sharedIconOrLogoContainerStyles.root, logoContainerStyles.root, (0, _platformFeatureFlags.fg)('platform-team25-app-icon-tiles') && sharedIconOrLogoContainerStyles.appIconTilePaddingFlagged])
98
- }, /*#__PURE__*/_react.default.createElement(NavLogoRenderer, {
99
+ }, /*#__PURE__*/_react.default.createElement(_logoRenderer.LogoRenderer, {
99
100
  logoOrIcon: logo
100
101
  })));
101
- };
102
- function NavLogoRenderer(_ref2) {
103
- var logoOrIcon = _ref2.logoOrIcon;
104
- return (0, _platformFeatureFlags.fg)('jiv-20710-fix-nav-rerender') ? /*#__PURE__*/_react.default.createElement(NavLogoRendererMemo, {
105
- logoOrIcon: logoOrIcon
106
- }) : /*#__PURE__*/_react.default.createElement(NavLogoRendererNoMemo, {
107
- logoOrIcon: logoOrIcon
108
- });
109
- }
110
- var NavLogoRendererMemo = /*#__PURE__*/(0, _react.memo)(NavLogoRendererNoMemo);
111
- function NavLogoRendererNoMemo(_ref3) {
112
- var LogoOrIcon = _ref3.logoOrIcon;
113
- var hasCustomTheme = (0, _hasCustomThemeContext.useHasCustomTheme)();
114
- if (hasCustomTheme) {
115
- return /*#__PURE__*/_react.default.createElement(LogoOrIcon, {
116
- size: "small",
117
- label: "",
118
- iconColor: "var(".concat(themedLogoIcon, ")"),
119
- textColor: "var(".concat(themedLogoText, ")")
120
- });
121
- }
122
- return /*#__PURE__*/_react.default.createElement(LogoOrIcon, {
123
- size: "small",
124
- label: "",
125
- appearance: "brand"
126
- });
127
- }
102
+ };
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  });
7
7
  exports.getCustomThemeStyles = getCustomThemeStyles;
8
8
  var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
9
- var _navLogo = require("../nav-logo");
9
+ var _navLogo = require("../nav-logo/nav-logo");
10
10
  var _button = require("./button");
11
11
  var _colorUtils = require("./color-utils");
12
12
  var _hex = require("./color-utils/formats/hex");
@@ -1,5 +1,6 @@
1
1
  export { AppSwitcher } from '../../ui/top-nav-items/app-switcher';
2
- export { NavLogo } from '../../ui/top-nav-items/nav-logo';
2
+ export { NavLogo } from '../../ui/top-nav-items/nav-logo/nav-logo';
3
+ export { AppLogo } from '../../ui/top-nav-items/nav-logo/app-logo';
3
4
  export { Search } from '../../ui/top-nav-items/search';
4
5
  export { ChatButton } from '../../ui/top-nav-items/chat-button';
5
6
  export { EndItem } from '../../ui/top-nav-items/end-item';
@@ -32,7 +32,8 @@ export { PanelSplitter } from './ui/page-layout/panel-splitter/panel-splitter';
32
32
  export { PanelSplitterProvider } from './ui/page-layout/panel-splitter/provider';
33
33
  export { TopNavStart } from './ui/page-layout/top-nav/top-nav-start';
34
34
  export { AppSwitcher } from './ui/top-nav-items/app-switcher';
35
- export { NavLogo } from './ui/top-nav-items/nav-logo';
35
+ export { NavLogo } from './ui/top-nav-items/nav-logo/nav-logo';
36
+ export { AppLogo } from './ui/top-nav-items/nav-logo/app-logo';
36
37
  export { TopNavMiddle } from './ui/page-layout/top-nav/top-nav-middle';
37
38
  export { Search } from './ui/top-nav-items/search';
38
39
  export { ChatButton } from './ui/top-nav-items/chat-button';
@@ -0,0 +1,24 @@
1
+
2
+ ._2rko19bv{border-radius:10px}
3
+ ._18zr1b66{padding-inline:var(--ds-space-050,4px)}._18m915vq{overflow-y:hidden}
4
+ ._1bsb1ris{width:max-content}
5
+ ._1e0c1txw{display:flex}
6
+ ._1e0cglyw{display:none}
7
+ ._1o9zidpf{flex-shrink:0}
8
+ ._1reo15vq{overflow-x:hidden}
9
+ ._1toh1r31._1toh1r31{text-decoration-color:currentColor}
10
+ ._1w901kw7._1w901kw7{color:inherit}
11
+ ._4cvr1h6o{align-items:center}
12
+ ._4t3izwfg{height:2pc}
13
+ ._5jyqglyw._5jyqglyw{text-decoration-line:none}
14
+ ._ahbq1b66{margin-inline-start:var(--ds-space-050,4px)}
15
+ ._mrqmnqa1._mrqmnqa1{text-decoration-style:solid}
16
+ ._p12f1tcg{max-width:24px}
17
+ ._p12fnklw{max-width:20pc}
18
+ ._uiztglyw{-webkit-user-select:none;-ms-user-select:none;user-select:none}
19
+ ._y4tiv77o{padding-inline-end:var(--ds-space-025,2px)}
20
+ ._irr3166n:hover{background-color:var(--ds-background-neutral-subtle-hovered,#091e420f)}
21
+ ._irr31rps:hover{background-color:var(--ds-top-bar-button-background-hovered)}
22
+ ._1di61wwy:active{background-color:var(--ds-background-neutral-subtle-pressed,#091e4224)!important}
23
+ ._1di6yhlj:active{background-color:var(--ds-top-bar-button-background-pressed)!important}
24
+ @media (min-width:64rem){._10y418uv._10y418uv{display:initial}}
@@ -0,0 +1,94 @@
1
+ /* app-logo.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ import "./app-logo.compiled.css";
3
+ import { ax, ix } from "@compiled/react/runtime";
4
+ import React, { useCallback, useRef } from 'react';
5
+ import { cx } from '@compiled/react';
6
+ import { fg } from '@atlaskit/platform-feature-flags';
7
+ import { Anchor, Inline, Text } from '@atlaskit/primitives';
8
+ import Tooltip from '@atlaskit/tooltip';
9
+ import { useHasCustomTheme } from '../themed/has-custom-theme-context';
10
+ import { LogoRenderer } from './logo-renderer';
11
+ const anchorStyles = {
12
+ root: "_2rko19bv _1e0c1txw _4cvr1h6o _4t3izwfg _1o9zidpf _1toh1r31 _5jyqglyw _mrqmnqa1 _1w901kw7",
13
+ newMargin: "_ahbq1b66",
14
+ newInteractionStates: "_irr3166n _1di61wwy",
15
+ newInteractionStatesCustomTheming: "_irr31rps _1di6yhlj"
16
+ };
17
+ const logoWrapperStyles = {
18
+ root: "_18zr1b66"
19
+ };
20
+ const iconContainerStyles = {
21
+ root: "_1reo15vq _18m915vq _1e0c1txw _p12f1tcg"
22
+ };
23
+ const logoTextStyles = {
24
+ root: "_1bsb1ris _p12fnklw _uiztglyw _y4tiv77o _1e0cglyw _10y418uv"
25
+ };
26
+ function isTextClamped(element) {
27
+ // Checking for vertical height rather than horizontal height.
28
+ // When text is "clamped", it's technically being clamped vertically! 🤯
29
+ return element.scrollHeight > element.clientHeight;
30
+ }
31
+
32
+ /**
33
+ * __App logo__
34
+ *
35
+ * The app logo for the top navigation.
36
+ *
37
+ * To provide a responsive experience, label text will render next to an icon at larger viewports.
38
+ */
39
+ export const AppLogo = ({
40
+ name,
41
+ label,
42
+ href,
43
+ icon,
44
+ onClick
45
+ }) => {
46
+ const ref = useRef(null);
47
+ const nameRef = useRef(null);
48
+ const hasCustomTheme = useHasCustomTheme();
49
+
50
+ /**
51
+ * Show the tooltip if the name is truncated
52
+ */
53
+ const canTooltipAppear = useCallback(() => {
54
+ const text = nameRef.current;
55
+ return Boolean(text && isTextClamped(text));
56
+ }, []);
57
+ return /*#__PURE__*/React.createElement(Anchor, {
58
+ ref: ref,
59
+ "aria-label": label,
60
+ href: href
61
+ // @ts-expect-error - non-standard values for `borderRadius` and the custom theming interaction states
62
+ // eslint-disable-next-line @compiled/no-suppress-xcss
63
+ ,
64
+ xcss: cx(anchorStyles.root, fg('platform_design_system_nav_logo_interaction_states') && anchorStyles.newMargin, fg('platform_design_system_nav_logo_interaction_states') && (hasCustomTheme ? anchorStyles.newInteractionStatesCustomTheming : anchorStyles.newInteractionStates)),
65
+ onClick: onClick
66
+ }, /*#__PURE__*/React.createElement(Inline, {
67
+ space: "space.075",
68
+ alignBlock: "center",
69
+ xcss: logoWrapperStyles.root,
70
+ "aria-label": label
71
+ }, /*#__PURE__*/React.createElement("div", {
72
+ className: ax([iconContainerStyles.root])
73
+ }, /*#__PURE__*/React.createElement(LogoRenderer, {
74
+ logoOrIcon: icon
75
+ })), /*#__PURE__*/React.createElement("span", {
76
+ className: ax([logoTextStyles.root])
77
+ }, /*#__PURE__*/React.createElement(Tooltip, {
78
+ content: name,
79
+ position: "bottom",
80
+ ignoreTooltipPointerEvents: true,
81
+ hideTooltipOnMouseDown: true
82
+ // We don't need a duplicate hidden element containing tooltip content
83
+ // as the content of the tooltip matches what is rendered in the nav item.
84
+ ,
85
+ isScreenReaderAnnouncementDisabled: true,
86
+ canAppear: canTooltipAppear
87
+ }, tooltipProps => /*#__PURE__*/React.createElement("span", tooltipProps, /*#__PURE__*/React.createElement(Text, {
88
+ "aria-hidden": true,
89
+ color: "inherit",
90
+ weight: "semibold",
91
+ maxLines: 1,
92
+ ref: nameRef
93
+ }, name))))));
94
+ };
@@ -0,0 +1,35 @@
1
+ /* logo-renderer.tsx generated by @compiled/babel-plugin v0.36.1 */
2
+ import { ax, ix } from "@compiled/react/runtime";
3
+ import React, { memo } from 'react';
4
+ import { fg } from '@atlaskit/platform-feature-flags';
5
+ import { useHasCustomTheme } from '../themed/has-custom-theme-context';
6
+ export const themedLogoIcon = '--ds-top-bar-logo-icon';
7
+ export const themedLogoText = '--ds-top-bar-logo-text';
8
+ export function LogoRenderer({
9
+ logoOrIcon
10
+ }) {
11
+ return fg('jiv-20710-fix-nav-rerender') ? /*#__PURE__*/React.createElement(LogoRendererMemo, {
12
+ logoOrIcon: logoOrIcon
13
+ }) : /*#__PURE__*/React.createElement(LogoRendererNoMemo, {
14
+ logoOrIcon: logoOrIcon
15
+ });
16
+ }
17
+ const LogoRendererMemo = /*#__PURE__*/memo(LogoRendererNoMemo);
18
+ function LogoRendererNoMemo({
19
+ logoOrIcon: LogoOrIcon
20
+ }) {
21
+ const hasCustomTheme = useHasCustomTheme();
22
+ if (hasCustomTheme) {
23
+ return /*#__PURE__*/React.createElement(LogoOrIcon, {
24
+ size: "small",
25
+ label: "",
26
+ iconColor: `var(${themedLogoIcon})`,
27
+ textColor: `var(${themedLogoText})`
28
+ });
29
+ }
30
+ return /*#__PURE__*/React.createElement(LogoOrIcon, {
31
+ size: "small",
32
+ label: "",
33
+ appearance: "brand"
34
+ });
35
+ }
@@ -1,5 +1,5 @@
1
1
 
2
- ._2rkoftgi{border-radius:8px}
2
+ ._2rko1l7b{border-radius:3px}
3
3
  ._2rkoiti9{border-radius:var(--ds-border-radius-100,4px)}
4
4
  ._18zr1b66{padding-inline:var(--ds-space-050,4px)}
5
5
  ._18zru2gc{padding-inline:var(--ds-space-100,8px)}._18m915vq{overflow-y:hidden}