@atlaskit/navigation-system 0.167.3 → 0.169.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.
- package/CHANGELOG.md +21 -0
- package/afm-volt/tsconfig.json +75 -0
- package/dist/cjs/entry-points/top-nav-items/index.js +8 -1
- package/dist/cjs/index.js +8 -1
- package/dist/cjs/ui/top-nav-items/nav-logo/app-logo.compiled.css +24 -0
- package/dist/cjs/ui/top-nav-items/nav-logo/app-logo.js +104 -0
- package/dist/cjs/ui/top-nav-items/nav-logo/logo-renderer.js +42 -0
- package/dist/cjs/ui/top-nav-items/{nav-logo.compiled.css → nav-logo/nav-logo.compiled.css} +1 -1
- package/dist/cjs/ui/top-nav-items/{nav-logo.js → nav-logo/nav-logo.js} +8 -33
- package/dist/cjs/ui/top-nav-items/themed/get-custom-theme-styles.js +1 -1
- package/dist/es2019/entry-points/top-nav-items/index.js +2 -1
- package/dist/es2019/index.js +2 -1
- package/dist/es2019/ui/top-nav-items/nav-logo/app-logo.compiled.css +24 -0
- package/dist/es2019/ui/top-nav-items/nav-logo/app-logo.js +94 -0
- package/dist/es2019/ui/top-nav-items/nav-logo/logo-renderer.js +35 -0
- package/dist/{esm/ui/top-nav-items → es2019/ui/top-nav-items/nav-logo}/nav-logo.compiled.css +1 -1
- package/dist/es2019/ui/top-nav-items/{nav-logo.js → nav-logo/nav-logo.js} +9 -36
- package/dist/es2019/ui/top-nav-items/themed/get-custom-theme-styles.js +1 -1
- package/dist/esm/entry-points/top-nav-items/index.js +2 -1
- package/dist/esm/index.js +2 -1
- package/dist/esm/ui/top-nav-items/nav-logo/app-logo.compiled.css +24 -0
- package/dist/esm/ui/top-nav-items/nav-logo/app-logo.js +95 -0
- package/dist/esm/ui/top-nav-items/nav-logo/logo-renderer.js +33 -0
- package/dist/{es2019/ui/top-nav-items → esm/ui/top-nav-items/nav-logo}/nav-logo.compiled.css +1 -1
- package/dist/esm/ui/top-nav-items/{nav-logo.js → nav-logo/nav-logo.js} +9 -34
- package/dist/esm/ui/top-nav-items/themed/get-custom-theme-styles.js +1 -1
- package/dist/types/entry-points/top-nav-items/index.d.ts +2 -1
- package/dist/types/index.d.ts +2 -1
- package/dist/types/ui/top-nav-items/nav-logo/app-logo.d.ts +38 -0
- package/dist/types/ui/top-nav-items/nav-logo/logo-renderer.d.ts +14 -0
- package/dist/types/ui/top-nav-items/{nav-logo.d.ts → nav-logo/nav-logo.d.ts} +1 -1
- package/dist/types-ts4.5/entry-points/top-nav-items/index.d.ts +2 -1
- package/dist/types-ts4.5/index.d.ts +2 -1
- package/dist/types-ts4.5/ui/top-nav-items/nav-logo/app-logo.d.ts +38 -0
- package/dist/types-ts4.5/ui/top-nav-items/nav-logo/logo-renderer.d.ts +14 -0
- package/dist/types-ts4.5/ui/top-nav-items/{nav-logo.d.ts → nav-logo/nav-logo.d.ts} +1 -1
- package/examples/company-hub-mock.tsx +1 -1
- package/examples/confluence-mock.tsx +1 -1
- package/examples/page-layout.tsx +2 -2
- package/examples/top-nav-side-nav-collapsed.tsx +1 -1
- package/examples/top-nav-with-long-name.tsx +63 -0
- package/examples/top-nav-with-temp-nav-app-icon.tsx +5 -5
- package/examples/top-navigation-stress.tsx +13 -13
- package/examples/top-navigation-theming-with-picker.tsx +17 -8
- package/examples/top-navigation-theming.tsx +17 -7
- package/examples/top-navigation.tsx +17 -7
- package/package.json +3 -3
- package/src/entry-points/top-nav-items/index.tsx +2 -1
- package/src/index.tsx +2 -1
- package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-lg---with-min-widths--firefox.png +0 -0
- package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-lg--firefox.png +0 -0
- package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-md---with-min-widths--firefox.png +0 -0
- package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-md--firefox.png +0 -0
- package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-sm---with-min-widths--firefox.png +0 -0
- package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-sm--firefox.png +0 -0
- package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-xl---with-min-widths--firefox.png +0 -0
- package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-xl--firefox.png +0 -0
- package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-xs---with-min-widths--firefox.png +0 -0
- package/src/ui/page-layout/__tests__/informational-vr-tests/__snapshots__/top-nav/breakpoint-xs--firefox.png +0 -0
- package/src/ui/page-layout/side-nav/toggle-button.tsx +1 -9
- package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/long-product-name-tooltip--default.png +0 -0
- package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/nav-logo-hover---custom-theming--desktop.png +0 -0
- package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/nav-logo-hover--desktop.png +0 -0
- package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/nav-logo-pressed---custom-theming--desktop.png +0 -0
- package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/nav-logo-pressed---custom-theming--mobile.png +0 -0
- package/src/ui/top-nav-items/__tests__/informational-vr-tests/__snapshots__/top-navigation/nav-logo-pressed--desktop.png +0 -0
- package/src/ui/top-nav-items/__tests__/informational-vr-tests/top-navigation.vr.tsx +18 -0
- package/src/ui/top-nav-items/__tests__/unit/top-nav-items.test.tsx +1 -1
- 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
- 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
- package/src/ui/top-nav-items/nav-logo/app-logo.tsx +209 -0
- package/src/ui/top-nav-items/nav-logo/logo-renderer.tsx +53 -0
- package/src/ui/top-nav-items/{nav-logo.tsx → nav-logo/nav-logo.tsx} +12 -43
- 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, {
|
|
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 '
|
|
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
|
-
|
|
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
|
-
*
|
|
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.
|
|
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(
|
|
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(
|
|
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,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, {
|
|
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 '
|
|
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
|
-
|
|
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
|
-
*
|
|
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.
|
|
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(
|
|
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(
|
|
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';
|
package/dist/types/index.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
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
|
-
*
|
|
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.
|
|
@@ -14,7 +14,7 @@ import { cssMap } from '@atlaskit/css';
|
|
|
14
14
|
import DropdownMenu, { DropdownItem, DropdownItemGroup } from '@atlaskit/dropdown-menu';
|
|
15
15
|
import Heading from '@atlaskit/heading';
|
|
16
16
|
import AiChatIcon from '@atlaskit/icon/core/ai-chat';
|
|
17
|
-
import CrossIcon from '@atlaskit/icon/core/
|
|
17
|
+
import CrossIcon from '@atlaskit/icon/core/cross';
|
|
18
18
|
import GrowDiagonalIcon from '@atlaskit/icon/core/grow-diagonal';
|
|
19
19
|
import { ConfluenceIcon, ConfluenceLogo } from '@atlaskit/logo';
|
|
20
20
|
import { TopNavButton } from '@atlaskit/navigation-system/experimental/top-nav-button';
|
|
@@ -19,7 +19,7 @@ import AppsIcon from '@atlaskit/icon/core/apps';
|
|
|
19
19
|
import BoardIcon from '@atlaskit/icon/core/board';
|
|
20
20
|
import ChevronRightIcon from '@atlaskit/icon/core/chevron-right';
|
|
21
21
|
import ClockIcon from '@atlaskit/icon/core/clock';
|
|
22
|
-
import CrossIcon from '@atlaskit/icon/core/
|
|
22
|
+
import CrossIcon from '@atlaskit/icon/core/cross';
|
|
23
23
|
import GrowDiagonalIcon from '@atlaskit/icon/core/grow-diagonal';
|
|
24
24
|
import InboxIcon from '@atlaskit/icon/core/inbox';
|
|
25
25
|
import LinkExternalIcon from '@atlaskit/icon/core/link-external';
|
package/examples/page-layout.tsx
CHANGED
|
@@ -11,7 +11,7 @@ import { IconButton } from '@atlaskit/button/new';
|
|
|
11
11
|
import AddIcon from '@atlaskit/icon/core/add';
|
|
12
12
|
import HomeIcon from '@atlaskit/icon/core/home';
|
|
13
13
|
import MoreIcon from '@atlaskit/icon/core/show-more-horizontal';
|
|
14
|
-
import
|
|
14
|
+
import StatusWarningIcon from '@atlaskit/icon/core/status-warning';
|
|
15
15
|
import BoardIcon from '@atlaskit/icon/glyph/board';
|
|
16
16
|
import { MenuList } from '@atlaskit/navigation-system';
|
|
17
17
|
import { Aside } from '@atlaskit/navigation-system/layout/aside';
|
|
@@ -156,7 +156,7 @@ function BannerToggleAction({
|
|
|
156
156
|
return (
|
|
157
157
|
<Hide below="sm">
|
|
158
158
|
<MenuListItem>
|
|
159
|
-
<IconButton icon={
|
|
159
|
+
<IconButton icon={StatusWarningIcon} label={label} onClick={onClick} isSelected={isSelected} />
|
|
160
160
|
</MenuListItem>
|
|
161
161
|
</Hide>
|
|
162
162
|
);
|
|
@@ -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
|
+
}
|