@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
@@ -1,16 +1,17 @@
1
1
  /* nav-logo.tsx generated by @compiled/babel-plugin v0.36.1 */
2
2
  import "./nav-logo.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
- import React, { memo, useEffect, useRef } from 'react';
4
+ import React, { useEffect, useRef } from 'react';
5
5
  import { cx } from '@compiled/react';
6
6
  import { fg } from '@atlaskit/platform-feature-flags';
7
7
  import { Anchor } from '@atlaskit/primitives';
8
- import { useHasCustomTheme } from './themed/has-custom-theme-context';
8
+ import { useHasCustomTheme } from '../themed/has-custom-theme-context';
9
+ import { LogoRenderer } from './logo-renderer';
9
10
  export const themedLogoIcon = '--ds-top-bar-logo-icon';
10
11
  export const themedLogoText = '--ds-top-bar-logo-text';
11
12
  const anchorStyles = {
12
13
  root: "_2rkoiti9 _1e0c1txw _4cvr1h6o _4t3izwfg",
13
- newBorderRadius: "_2rkoftgi",
14
+ customLogoBorderRadius: "_2rko1l7b",
14
15
  newMargin: "_ahbq1b66",
15
16
  newInteractionStates: "_irr3166n _1di61wwy",
16
17
  newInteractionStatesCustomTheming: "_irr31rps _1di6yhlj"
@@ -29,7 +30,7 @@ const logoContainerStyles = {
29
30
  /**
30
31
  * __Nav logo__
31
32
  *
32
- * The product logo for the top navigation.
33
+ * Custom image logo for the top navigation.
33
34
  *
34
35
  * To provide a responsive experience, it requires both a logo and an icon component.
35
36
  * The logo component will be used for large viewports, and the icon component will be used for small viewports.
@@ -80,43 +81,15 @@ export const NavLogo = ({
80
81
  // @ts-expect-error - non-standard values for `borderRadius` and the custom theming interaction states
81
82
  // eslint-disable-next-line @compiled/no-suppress-xcss
82
83
  ,
83
- xcss: cx(anchorStyles.root, fg('platform_design_system_nav_logo_interaction_states') && anchorStyles.newMargin, fg('platform_design_system_nav_logo_interaction_states') && anchorStyles.newBorderRadius, fg('platform_design_system_nav_logo_interaction_states') && (hasCustomTheme ? anchorStyles.newInteractionStatesCustomTheming : anchorStyles.newInteractionStates)),
84
+ xcss: cx(anchorStyles.root, fg('platform_design_system_nav_logo_interaction_states') && anchorStyles.customLogoBorderRadius, fg('platform_design_system_nav_logo_interaction_states') && anchorStyles.newMargin, fg('platform_design_system_nav_logo_interaction_states') && (hasCustomTheme ? anchorStyles.newInteractionStatesCustomTheming : anchorStyles.newInteractionStates)),
84
85
  onClick: onClick
85
86
  }, /*#__PURE__*/React.createElement("div", {
86
87
  className: ax([sharedIconOrLogoContainerStyles.root, iconContainerStyles.root, fg('platform-team25-app-icon-tiles') && sharedIconOrLogoContainerStyles.appIconTilePaddingFlagged])
87
- }, /*#__PURE__*/React.createElement(NavLogoRenderer, {
88
+ }, /*#__PURE__*/React.createElement(LogoRenderer, {
88
89
  logoOrIcon: icon
89
90
  })), /*#__PURE__*/React.createElement("div", {
90
91
  className: ax([sharedIconOrLogoContainerStyles.root, logoContainerStyles.root, fg('platform-team25-app-icon-tiles') && sharedIconOrLogoContainerStyles.appIconTilePaddingFlagged])
91
- }, /*#__PURE__*/React.createElement(NavLogoRenderer, {
92
+ }, /*#__PURE__*/React.createElement(LogoRenderer, {
92
93
  logoOrIcon: logo
93
94
  })));
94
- };
95
- function NavLogoRenderer({
96
- logoOrIcon
97
- }) {
98
- return fg('jiv-20710-fix-nav-rerender') ? /*#__PURE__*/React.createElement(NavLogoRendererMemo, {
99
- logoOrIcon: logoOrIcon
100
- }) : /*#__PURE__*/React.createElement(NavLogoRendererNoMemo, {
101
- logoOrIcon: logoOrIcon
102
- });
103
- }
104
- const NavLogoRendererMemo = /*#__PURE__*/memo(NavLogoRendererNoMemo);
105
- function NavLogoRendererNoMemo({
106
- logoOrIcon: LogoOrIcon
107
- }) {
108
- const hasCustomTheme = useHasCustomTheme();
109
- if (hasCustomTheme) {
110
- return /*#__PURE__*/React.createElement(LogoOrIcon, {
111
- size: "small",
112
- label: "",
113
- iconColor: `var(${themedLogoIcon})`,
114
- textColor: `var(${themedLogoText})`
115
- });
116
- }
117
- return /*#__PURE__*/React.createElement(LogoOrIcon, {
118
- size: "small",
119
- label: "",
120
- appearance: "brand"
121
- });
122
- }
95
+ };
@@ -1,4 +1,4 @@
1
- import { themedLogoIcon, themedLogoText } from '../nav-logo';
1
+ import { themedLogoIcon, themedLogoText } from '../nav-logo/nav-logo';
2
2
  import { themedButtonBackground, themedButtonBackgroundHovered, themedButtonBackgroundPressed, themedButtonBorder, themedButtonDisabledBackground, themedButtonDisabledText, themedButtonPrimaryBackground, themedButtonPrimaryBackgroundHovered, themedButtonPrimaryBackgroundPressed, themedButtonPrimaryText, themedButtonSelectedBackground, themedButtonSelectedBackgroundHovered, themedButtonSelectedBackgroundPressed, themedButtonSelectedBorder, themedButtonSelectedText } from './button';
3
3
  import { getColorMode, getTextColor, isLight, simpleAlphaComposite } from './color-utils';
4
4
  import { parseHex } from './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';
package/dist/esm/index.js CHANGED
@@ -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,95 @@
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
+ var 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
+ var logoWrapperStyles = {
18
+ root: "_18zr1b66"
19
+ };
20
+ var iconContainerStyles = {
21
+ root: "_1reo15vq _18m915vq _1e0c1txw _p12f1tcg"
22
+ };
23
+ var 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 var AppLogo = function AppLogo(_ref) {
40
+ var name = _ref.name,
41
+ label = _ref.label,
42
+ href = _ref.href,
43
+ icon = _ref.icon,
44
+ onClick = _ref.onClick;
45
+ var ref = useRef(null);
46
+ var nameRef = useRef(null);
47
+ var hasCustomTheme = useHasCustomTheme();
48
+
49
+ /**
50
+ * Show the tooltip if the name is truncated
51
+ */
52
+ var canTooltipAppear = useCallback(function () {
53
+ var text = nameRef.current;
54
+ return Boolean(text && isTextClamped(text));
55
+ }, []);
56
+ return /*#__PURE__*/React.createElement(Anchor, {
57
+ ref: ref,
58
+ "aria-label": label,
59
+ href: href
60
+ // @ts-expect-error - non-standard values for `borderRadius` and the custom theming interaction states
61
+ // eslint-disable-next-line @compiled/no-suppress-xcss
62
+ ,
63
+ 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)),
64
+ onClick: onClick
65
+ }, /*#__PURE__*/React.createElement(Inline, {
66
+ space: "space.075",
67
+ alignBlock: "center",
68
+ xcss: logoWrapperStyles.root,
69
+ "aria-label": label
70
+ }, /*#__PURE__*/React.createElement("div", {
71
+ className: ax([iconContainerStyles.root])
72
+ }, /*#__PURE__*/React.createElement(LogoRenderer, {
73
+ logoOrIcon: icon
74
+ })), /*#__PURE__*/React.createElement("span", {
75
+ className: ax([logoTextStyles.root])
76
+ }, /*#__PURE__*/React.createElement(Tooltip, {
77
+ content: name,
78
+ position: "bottom",
79
+ ignoreTooltipPointerEvents: true,
80
+ hideTooltipOnMouseDown: true
81
+ // We don't need a duplicate hidden element containing tooltip content
82
+ // as the content of the tooltip matches what is rendered in the nav item.
83
+ ,
84
+ isScreenReaderAnnouncementDisabled: true,
85
+ canAppear: canTooltipAppear
86
+ }, function (tooltipProps) {
87
+ return /*#__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
+ }))));
95
+ };
@@ -0,0 +1,33 @@
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 var themedLogoIcon = '--ds-top-bar-logo-icon';
7
+ export var themedLogoText = '--ds-top-bar-logo-text';
8
+ export function LogoRenderer(_ref) {
9
+ var logoOrIcon = _ref.logoOrIcon;
10
+ return fg('jiv-20710-fix-nav-rerender') ? /*#__PURE__*/React.createElement(LogoRendererMemo, {
11
+ logoOrIcon: logoOrIcon
12
+ }) : /*#__PURE__*/React.createElement(LogoRendererNoMemo, {
13
+ logoOrIcon: logoOrIcon
14
+ });
15
+ }
16
+ var LogoRendererMemo = /*#__PURE__*/memo(LogoRendererNoMemo);
17
+ function LogoRendererNoMemo(_ref2) {
18
+ var LogoOrIcon = _ref2.logoOrIcon;
19
+ var hasCustomTheme = useHasCustomTheme();
20
+ if (hasCustomTheme) {
21
+ return /*#__PURE__*/React.createElement(LogoOrIcon, {
22
+ size: "small",
23
+ label: "",
24
+ iconColor: "var(".concat(themedLogoIcon, ")"),
25
+ textColor: "var(".concat(themedLogoText, ")")
26
+ });
27
+ }
28
+ return /*#__PURE__*/React.createElement(LogoOrIcon, {
29
+ size: "small",
30
+ label: "",
31
+ appearance: "brand"
32
+ });
33
+ }
@@ -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}
@@ -1,16 +1,17 @@
1
1
  /* nav-logo.tsx generated by @compiled/babel-plugin v0.36.1 */
2
2
  import "./nav-logo.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
- import React, { memo, useEffect, useRef } from 'react';
4
+ import React, { useEffect, useRef } from 'react';
5
5
  import { cx } from '@compiled/react';
6
6
  import { fg } from '@atlaskit/platform-feature-flags';
7
7
  import { Anchor } from '@atlaskit/primitives';
8
- import { useHasCustomTheme } from './themed/has-custom-theme-context';
8
+ import { useHasCustomTheme } from '../themed/has-custom-theme-context';
9
+ import { LogoRenderer } from './logo-renderer';
9
10
  export var themedLogoIcon = '--ds-top-bar-logo-icon';
10
11
  export var themedLogoText = '--ds-top-bar-logo-text';
11
12
  var anchorStyles = {
12
13
  root: "_2rkoiti9 _1e0c1txw _4cvr1h6o _4t3izwfg",
13
- newBorderRadius: "_2rkoftgi",
14
+ customLogoBorderRadius: "_2rko1l7b",
14
15
  newMargin: "_ahbq1b66",
15
16
  newInteractionStates: "_irr3166n _1di61wwy",
16
17
  newInteractionStatesCustomTheming: "_irr31rps _1di6yhlj"
@@ -29,7 +30,7 @@ var logoContainerStyles = {
29
30
  /**
30
31
  * __Nav logo__
31
32
  *
32
- * The product logo for the top navigation.
33
+ * Custom image logo for the top navigation.
33
34
  *
34
35
  * To provide a responsive experience, it requires both a logo and an icon component.
35
36
  * The logo component will be used for large viewports, and the icon component will be used for small viewports.
@@ -79,41 +80,15 @@ export var NavLogo = function NavLogo(_ref) {
79
80
  // @ts-expect-error - non-standard values for `borderRadius` and the custom theming interaction states
80
81
  // eslint-disable-next-line @compiled/no-suppress-xcss
81
82
  ,
82
- xcss: cx(anchorStyles.root, fg('platform_design_system_nav_logo_interaction_states') && anchorStyles.newMargin, fg('platform_design_system_nav_logo_interaction_states') && anchorStyles.newBorderRadius, fg('platform_design_system_nav_logo_interaction_states') && (hasCustomTheme ? anchorStyles.newInteractionStatesCustomTheming : anchorStyles.newInteractionStates)),
83
+ xcss: cx(anchorStyles.root, fg('platform_design_system_nav_logo_interaction_states') && anchorStyles.customLogoBorderRadius, fg('platform_design_system_nav_logo_interaction_states') && anchorStyles.newMargin, fg('platform_design_system_nav_logo_interaction_states') && (hasCustomTheme ? anchorStyles.newInteractionStatesCustomTheming : anchorStyles.newInteractionStates)),
83
84
  onClick: onClick
84
85
  }, /*#__PURE__*/React.createElement("div", {
85
86
  className: ax([sharedIconOrLogoContainerStyles.root, iconContainerStyles.root, fg('platform-team25-app-icon-tiles') && sharedIconOrLogoContainerStyles.appIconTilePaddingFlagged])
86
- }, /*#__PURE__*/React.createElement(NavLogoRenderer, {
87
+ }, /*#__PURE__*/React.createElement(LogoRenderer, {
87
88
  logoOrIcon: icon
88
89
  })), /*#__PURE__*/React.createElement("div", {
89
90
  className: ax([sharedIconOrLogoContainerStyles.root, logoContainerStyles.root, fg('platform-team25-app-icon-tiles') && sharedIconOrLogoContainerStyles.appIconTilePaddingFlagged])
90
- }, /*#__PURE__*/React.createElement(NavLogoRenderer, {
91
+ }, /*#__PURE__*/React.createElement(LogoRenderer, {
91
92
  logoOrIcon: logo
92
93
  })));
93
- };
94
- function NavLogoRenderer(_ref2) {
95
- var logoOrIcon = _ref2.logoOrIcon;
96
- return fg('jiv-20710-fix-nav-rerender') ? /*#__PURE__*/React.createElement(NavLogoRendererMemo, {
97
- logoOrIcon: logoOrIcon
98
- }) : /*#__PURE__*/React.createElement(NavLogoRendererNoMemo, {
99
- logoOrIcon: logoOrIcon
100
- });
101
- }
102
- var NavLogoRendererMemo = /*#__PURE__*/memo(NavLogoRendererNoMemo);
103
- function NavLogoRendererNoMemo(_ref3) {
104
- var LogoOrIcon = _ref3.logoOrIcon;
105
- var hasCustomTheme = useHasCustomTheme();
106
- if (hasCustomTheme) {
107
- return /*#__PURE__*/React.createElement(LogoOrIcon, {
108
- size: "small",
109
- label: "",
110
- iconColor: "var(".concat(themedLogoIcon, ")"),
111
- textColor: "var(".concat(themedLogoText, ")")
112
- });
113
- }
114
- return /*#__PURE__*/React.createElement(LogoOrIcon, {
115
- size: "small",
116
- label: "",
117
- appearance: "brand"
118
- });
119
- }
94
+ };
@@ -1,7 +1,7 @@
1
1
  import _defineProperty from "@babel/runtime/helpers/defineProperty";
2
2
  function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
3
3
  function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
4
- import { themedLogoIcon, themedLogoText } from '../nav-logo';
4
+ import { themedLogoIcon, themedLogoText } from '../nav-logo/nav-logo';
5
5
  import { themedButtonBackground, themedButtonBackgroundHovered, themedButtonBackgroundPressed, themedButtonBorder, themedButtonDisabledBackground, themedButtonDisabledText, themedButtonPrimaryBackground, themedButtonPrimaryBackgroundHovered, themedButtonPrimaryBackgroundPressed, themedButtonPrimaryText, themedButtonSelectedBackground, themedButtonSelectedBackgroundHovered, themedButtonSelectedBackgroundPressed, themedButtonSelectedBorder, themedButtonSelectedText } from './button';
6
6
  import { getColorMode, getTextColor, isLight, simpleAlphaComposite } from './color-utils';
7
7
  import { parseHex } from './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';
@@ -33,7 +33,8 @@ export { PanelSplitterProvider } from './ui/page-layout/panel-splitter/provider'
33
33
  export type { ResizeBounds } from './ui/page-layout/panel-splitter/types';
34
34
  export { TopNavStart } from './ui/page-layout/top-nav/top-nav-start';
35
35
  export { AppSwitcher } from './ui/top-nav-items/app-switcher';
36
- export { NavLogo } from './ui/top-nav-items/nav-logo';
36
+ export { NavLogo } from './ui/top-nav-items/nav-logo/nav-logo';
37
+ export { AppLogo } from './ui/top-nav-items/nav-logo/app-logo';
37
38
  export { TopNavMiddle } from './ui/page-layout/top-nav/top-nav-middle';
38
39
  export { Search } from './ui/top-nav-items/search';
39
40
  export { ChatButton } from './ui/top-nav-items/chat-button';
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ import React from 'react';
6
+ import type { LogoProps } from '@atlaskit/logo';
7
+ import type { IconProps as TempIconProps } from '@atlaskit/temp-nav-app-icons/types';
8
+ /**
9
+ * __App logo__
10
+ *
11
+ * The app logo for the top navigation.
12
+ *
13
+ * To provide a responsive experience, label text will render next to an icon at larger viewports.
14
+ */
15
+ export declare const AppLogo: ({ name, label, href, icon, onClick, }: {
16
+ /**
17
+ * The name of the app. Will be displayed next to the logo in wider viewports, and is used as an accessible label at smaller viewports.
18
+ */
19
+ name: string;
20
+ /**
21
+ * Provide an accessible label, often used by screen readers.
22
+ * This label should include the name of the app, and if applicable,
23
+ * the location the user will navigate to on click.
24
+ */
25
+ label: string;
26
+ /**
27
+ * The URL to navigate to when the element is clicked.
28
+ */
29
+ href: string;
30
+ /**
31
+ * The icon to render.
32
+ */
33
+ icon: ((props: LogoProps) => JSX.Element) | ((props: TempIconProps) => JSX.Element);
34
+ /**
35
+ * Handler called on click.
36
+ */
37
+ onClick?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
38
+ }) => JSX.Element;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ import React from 'react';
6
+ import type { LogoProps } from '@atlaskit/logo';
7
+ import type { IconProps as TempIconProps, LogoProps as TempLogoProps } from '@atlaskit/temp-nav-app-icons/types';
8
+ export declare const themedLogoIcon = "--ds-top-bar-logo-icon";
9
+ export declare const themedLogoText = "--ds-top-bar-logo-text";
10
+ export declare function LogoRenderer({ logoOrIcon }: React.ComponentProps<typeof LogoRendererNoMemo>): JSX.Element;
11
+ declare function LogoRendererNoMemo({ logoOrIcon: LogoOrIcon, }: {
12
+ logoOrIcon: ((props: LogoProps) => JSX.Element) | ((props: TempLogoProps) => JSX.Element) | ((props: TempIconProps) => JSX.Element);
13
+ }): JSX.Element;
14
+ export {};
@@ -10,7 +10,7 @@ export declare const themedLogoText = "--ds-top-bar-logo-text";
10
10
  /**
11
11
  * __Nav logo__
12
12
  *
13
- * The product logo for the top navigation.
13
+ * Custom image logo for the top navigation.
14
14
  *
15
15
  * To provide a responsive experience, it requires both a logo and an icon component.
16
16
  * The logo component will be used for large viewports, and the icon component will be used for small viewports.
@@ -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';
@@ -33,7 +33,8 @@ export { PanelSplitterProvider } from './ui/page-layout/panel-splitter/provider'
33
33
  export type { ResizeBounds } from './ui/page-layout/panel-splitter/types';
34
34
  export { TopNavStart } from './ui/page-layout/top-nav/top-nav-start';
35
35
  export { AppSwitcher } from './ui/top-nav-items/app-switcher';
36
- export { NavLogo } from './ui/top-nav-items/nav-logo';
36
+ export { NavLogo } from './ui/top-nav-items/nav-logo/nav-logo';
37
+ export { AppLogo } from './ui/top-nav-items/nav-logo/app-logo';
37
38
  export { TopNavMiddle } from './ui/page-layout/top-nav/top-nav-middle';
38
39
  export { Search } from './ui/top-nav-items/search';
39
40
  export { ChatButton } from './ui/top-nav-items/chat-button';
@@ -0,0 +1,38 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ import React from 'react';
6
+ import type { LogoProps } from '@atlaskit/logo';
7
+ import type { IconProps as TempIconProps } from '@atlaskit/temp-nav-app-icons/types';
8
+ /**
9
+ * __App logo__
10
+ *
11
+ * The app logo for the top navigation.
12
+ *
13
+ * To provide a responsive experience, label text will render next to an icon at larger viewports.
14
+ */
15
+ export declare const AppLogo: ({ name, label, href, icon, onClick, }: {
16
+ /**
17
+ * The name of the app. Will be displayed next to the logo in wider viewports, and is used as an accessible label at smaller viewports.
18
+ */
19
+ name: string;
20
+ /**
21
+ * Provide an accessible label, often used by screen readers.
22
+ * This label should include the name of the app, and if applicable,
23
+ * the location the user will navigate to on click.
24
+ */
25
+ label: string;
26
+ /**
27
+ * The URL to navigate to when the element is clicked.
28
+ */
29
+ href: string;
30
+ /**
31
+ * The icon to render.
32
+ */
33
+ icon: ((props: LogoProps) => JSX.Element) | ((props: TempIconProps) => JSX.Element);
34
+ /**
35
+ * Handler called on click.
36
+ */
37
+ onClick?: React.MouseEventHandler<HTMLAnchorElement> | undefined;
38
+ }) => JSX.Element;
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @jsxRuntime classic
3
+ * @jsx jsx
4
+ */
5
+ import React from 'react';
6
+ import type { LogoProps } from '@atlaskit/logo';
7
+ import type { IconProps as TempIconProps, LogoProps as TempLogoProps } from '@atlaskit/temp-nav-app-icons/types';
8
+ export declare const themedLogoIcon = "--ds-top-bar-logo-icon";
9
+ export declare const themedLogoText = "--ds-top-bar-logo-text";
10
+ export declare function LogoRenderer({ logoOrIcon }: React.ComponentProps<typeof LogoRendererNoMemo>): JSX.Element;
11
+ declare function LogoRendererNoMemo({ logoOrIcon: LogoOrIcon, }: {
12
+ logoOrIcon: ((props: LogoProps) => JSX.Element) | ((props: TempLogoProps) => JSX.Element) | ((props: TempIconProps) => JSX.Element);
13
+ }): JSX.Element;
14
+ export {};
@@ -10,7 +10,7 @@ export declare const themedLogoText = "--ds-top-bar-logo-text";
10
10
  /**
11
11
  * __Nav logo__
12
12
  *
13
- * The product logo for the top navigation.
13
+ * Custom image logo for the top navigation.
14
14
  *
15
15
  * To provide a responsive experience, it requires both a logo and an icon component.
16
16
  * The logo component will be used for large viewports, and the icon component will be used for small viewports.
@@ -41,8 +41,8 @@ const TopNavSideNavCollapsed = () => (
41
41
  <AppSwitcher label="App switcher" onClick={() => alert('app switcher')} />
42
42
  <NavLogo
43
43
  href="http://www.atlassian.design"
44
- logo={AtlassianLogo}
45
44
  icon={AtlassianIcon}
45
+ logo={AtlassianLogo}
46
46
  label="Home page"
47
47
  />
48
48
  </TopNavStart>
@@ -0,0 +1,63 @@
1
+ import React from 'react';
2
+
3
+ import AKBadge from '@atlaskit/badge';
4
+ import { Root } from '@atlaskit/navigation-system/layout/root';
5
+ import { SideNavToggleButton } from '@atlaskit/navigation-system/layout/side-nav';
6
+ import {
7
+ TopNav,
8
+ TopNavEnd,
9
+ TopNavMiddle,
10
+ TopNavStart,
11
+ } from '@atlaskit/navigation-system/layout/top-nav';
12
+ import {
13
+ AppLogo,
14
+ AppSwitcher,
15
+ ChatButton,
16
+ CreateButton,
17
+ Help,
18
+ Notifications,
19
+ Profile,
20
+ Search,
21
+ Settings,
22
+ } from '@atlaskit/navigation-system/top-nav-items';
23
+ import { FocusIcon } from '@atlaskit/temp-nav-app-icons/focus';
24
+
25
+ import { WithResponsiveViewport } from './utils/example-utils';
26
+
27
+ const Badge = () => <AKBadge appearance="important">{5}</AKBadge>;
28
+
29
+ export default function TopNavWithLongProductName() {
30
+ return (
31
+ <WithResponsiveViewport>
32
+ {/**
33
+ * Wrapping in `Root to ensure the TopNav height is set correctly, as it would in a proper composed usage.
34
+ * Root sets the top bar height CSS variable that TopNav uses to set its height
35
+ */}
36
+ <Root>
37
+ <TopNav>
38
+ <TopNavStart>
39
+ <SideNavToggleButton collapseLabel="Collapse sidebar" expandLabel="Expand sidebar" />
40
+ <AppSwitcher label="App switcher" />
41
+ <AppLogo
42
+ href="http://www.atlassian.design"
43
+ icon={() => <FocusIcon size="24" />}
44
+ name="Long text to stretch out text label to the maximum width"
45
+ label="Home page"
46
+ />
47
+ </TopNavStart>
48
+ <TopNavMiddle>
49
+ <Search label="Search" />
50
+ <CreateButton>Create</CreateButton>
51
+ </TopNavMiddle>
52
+ <TopNavEnd>
53
+ <ChatButton>Chat</ChatButton>
54
+ <Notifications label="Notifications" badge={Badge} />
55
+ <Help label="Help" />
56
+ <Settings label="Settings" />
57
+ <Profile label="Your profile" />
58
+ </TopNavEnd>
59
+ </TopNav>
60
+ </Root>
61
+ </WithResponsiveViewport>
62
+ );
63
+ }
@@ -10,17 +10,17 @@ import {
10
10
  TopNavStart,
11
11
  } from '@atlaskit/navigation-system/layout/top-nav';
12
12
  import {
13
+ AppLogo,
13
14
  AppSwitcher,
14
15
  ChatButton,
15
16
  CreateButton,
16
17
  Help,
17
- NavLogo,
18
18
  Notifications,
19
19
  Profile,
20
20
  Search,
21
21
  Settings,
22
22
  } from '@atlaskit/navigation-system/top-nav-items';
23
- import { FocusIcon, FocusLogo } from '@atlaskit/temp-nav-app-icons/focus';
23
+ import { FocusIcon } from '@atlaskit/temp-nav-app-icons/focus';
24
24
 
25
25
  import { WithResponsiveViewport } from './utils/example-utils';
26
26
 
@@ -38,10 +38,10 @@ export default function TopNavWithTempNavAppIcon() {
38
38
  <TopNavStart>
39
39
  <SideNavToggleButton collapseLabel="Collapse sidebar" expandLabel="Expand sidebar" />
40
40
  <AppSwitcher label="App switcher" />
41
- <NavLogo
41
+ <AppLogo
42
42
  href="http://www.atlassian.design"
43
- logo={() => <FocusLogo />}
44
- icon={() => <FocusIcon size="24" />}
43
+ icon={FocusIcon}
44
+ name="Focus"
45
45
  label="Home page"
46
46
  />
47
47
  </TopNavStart>