@atlaskit/navigation-system 5.16.0 → 5.18.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 (44) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/cjs/ui/menu-item/flyout-menu-item/flyout-header.js +3 -1
  3. package/dist/cjs/ui/menu-item/flyout-menu-item/flyout-menu-item-content.js +8 -3
  4. package/dist/cjs/ui/menu-item/flyout-menu-item/flyout-menu-item-context.js +21 -2
  5. package/dist/cjs/ui/menu-item/flyout-menu-item/flyout-menu-item.js +3 -1
  6. package/dist/cjs/ui/page-layout/constants.js +8 -2
  7. package/dist/cjs/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +20 -50
  8. package/dist/cjs/ui/page-layout/side-nav/side-nav.js +7 -0
  9. package/dist/cjs/ui/page-layout/top-nav/top-nav-end.js +16 -8
  10. package/dist/cjs/ui/page-layout/top-nav/top-nav-middle.js +5 -1
  11. package/dist/cjs/ui/page-layout/top-nav/top-nav-start.js +4 -1
  12. package/dist/cjs/ui/page-layout/top-nav/top-nav.js +14 -33
  13. package/dist/cjs/ui/page-layout/use-open-layer-count.js +59 -0
  14. package/dist/es2019/ui/menu-item/flyout-menu-item/flyout-header.js +4 -2
  15. package/dist/es2019/ui/menu-item/flyout-menu-item/flyout-menu-item-content.js +10 -5
  16. package/dist/es2019/ui/menu-item/flyout-menu-item/flyout-menu-item-context.js +18 -1
  17. package/dist/es2019/ui/menu-item/flyout-menu-item/flyout-menu-item.js +3 -1
  18. package/dist/es2019/ui/page-layout/constants.js +7 -1
  19. package/dist/es2019/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +23 -48
  20. package/dist/es2019/ui/page-layout/side-nav/side-nav.js +7 -0
  21. package/dist/es2019/ui/page-layout/top-nav/top-nav-end.js +11 -2
  22. package/dist/es2019/ui/page-layout/top-nav/top-nav-middle.js +5 -1
  23. package/dist/es2019/ui/page-layout/top-nav/top-nav-start.js +5 -2
  24. package/dist/es2019/ui/page-layout/top-nav/top-nav.js +17 -31
  25. package/dist/es2019/ui/page-layout/use-open-layer-count.js +44 -0
  26. package/dist/esm/ui/menu-item/flyout-menu-item/flyout-header.js +4 -2
  27. package/dist/esm/ui/menu-item/flyout-menu-item/flyout-menu-item-content.js +10 -5
  28. package/dist/esm/ui/menu-item/flyout-menu-item/flyout-menu-item-context.js +20 -1
  29. package/dist/esm/ui/menu-item/flyout-menu-item/flyout-menu-item.js +3 -1
  30. package/dist/esm/ui/page-layout/constants.js +7 -1
  31. package/dist/esm/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +23 -52
  32. package/dist/esm/ui/page-layout/side-nav/side-nav.js +7 -0
  33. package/dist/esm/ui/page-layout/top-nav/top-nav-end.js +16 -8
  34. package/dist/esm/ui/page-layout/top-nav/top-nav-middle.js +5 -1
  35. package/dist/esm/ui/page-layout/top-nav/top-nav-start.js +5 -2
  36. package/dist/esm/ui/page-layout/top-nav/top-nav.js +17 -35
  37. package/dist/esm/ui/page-layout/use-open-layer-count.js +53 -0
  38. package/dist/types/ui/menu-item/flyout-menu-item/flyout-menu-item-context.d.ts +15 -0
  39. package/dist/types/ui/page-layout/constants.d.ts +3 -1
  40. package/dist/types/ui/page-layout/use-open-layer-count.d.ts +8 -0
  41. package/dist/types-ts4.5/ui/menu-item/flyout-menu-item/flyout-menu-item-context.d.ts +15 -0
  42. package/dist/types-ts4.5/ui/page-layout/constants.d.ts +3 -1
  43. package/dist/types-ts4.5/ui/page-layout/use-open-layer-count.d.ts +8 -0
  44. package/package.json +9 -6
@@ -2,8 +2,10 @@
2
2
  import "./top-nav-middle.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
4
  import React from 'react';
5
+ import { OpenLayerObserverNamespaceProvider } from '@atlaskit/layering/experimental/open-layer-observer';
5
6
  import { fg } from '@atlaskit/platform-feature-flags';
6
7
  import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
8
+ import { openLayerObserverTopNavMiddleNamespace } from '../constants';
7
9
  var styles = {
8
10
  root: "_zulpu2gc _yyhycs5v _1bsb1osq _4cvr1h6o _1e0c1txw _1bahh9n0 _181n11p5 _1j8b15b0 _lagd1bp4 _1t4c1ris _12e8h9n0",
9
11
  fullHeightSidebar: "_lcxv1wug"
@@ -22,5 +24,7 @@ export function TopNavMiddle(_ref) {
22
24
  var isFhsEnabled = useIsFhsEnabled();
23
25
  return /*#__PURE__*/React.createElement("div", {
24
26
  className: ax([styles.root, isFhsEnabled && !fg('platform-dst-side-nav-layering-fixes') && styles.fullHeightSidebar])
25
- }, children);
27
+ }, fg('platform-dst-side-nav-layering-fixes') ? /*#__PURE__*/React.createElement(OpenLayerObserverNamespaceProvider, {
28
+ namespace: openLayerObserverTopNavMiddleNamespace
29
+ }, children) : children);
26
30
  }
@@ -4,11 +4,12 @@ import "./top-nav-start.compiled.css";
4
4
  import { ax, ix } from "@compiled/react/runtime";
5
5
  import React, { forwardRef, useContext, useEffect, useLayoutEffect, useRef, useState } from 'react';
6
6
  import useStableRef from '@atlaskit/ds-lib/use-stable-ref';
7
+ import { OpenLayerObserverNamespaceProvider } from '@atlaskit/layering/experimental/open-layer-observer';
7
8
  import { fg } from '@atlaskit/platform-feature-flags';
8
9
  import { UNSAFE_useMediaQuery } from '@atlaskit/primitives/compiled';
9
10
  import { TopNavStartAttachRef } from '../../../context/top-nav-start/top-nav-start-context';
10
11
  import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
11
- import { sideNavContentScrollTimelineVar } from '../constants';
12
+ import { openLayerObserverTopNavStartNamespace, sideNavContentScrollTimelineVar } from '../constants';
12
13
  import { useSideNavVisibility } from '../side-nav/use-side-nav-visibility';
13
14
  import { SideNavVisibilityState } from '../side-nav/visibility-context';
14
15
 
@@ -145,7 +146,9 @@ var TopNavStartInnerFHS = /*#__PURE__*/forwardRef(function TopNavStartInnerFHS(_
145
146
  ref: ref,
146
147
  "data-testid": testId,
147
148
  className: ax([innerStyles.root, !fg('platform-dst-side-nav-layering-fixes') && innerStyles.fullHeightSidebar, fg('team25-eu-jira-logo-updates-csm-jsm') && innerStyles.jiraProductLogoUpdate, isExpandedOnDesktop && innerStyles.fullHeightSidebarExpanded])
148
- }, children));
149
+ }, fg('platform-dst-side-nav-layering-fixes') ? /*#__PURE__*/React.createElement(OpenLayerObserverNamespaceProvider, {
150
+ namespace: openLayerObserverTopNavStartNamespace
151
+ }, children) : children));
149
152
  });
150
153
 
151
154
  /**
@@ -1,22 +1,22 @@
1
1
  /* top-nav.tsx generated by @compiled/babel-plugin v0.38.1 */
2
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
3
2
  import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
4
3
  var _excluded = ["backgroundColor"];
5
4
  import "./top-nav.compiled.css";
6
5
  import * as React from 'react';
7
6
  import { ax, ix } from "@compiled/react/runtime";
8
- import { useContext, useLayoutEffect, useMemo, useState } from 'react';
9
- import { OpenLayerObserverNamespaceProvider, useOpenLayerObserver } from '@atlaskit/layering/experimental/open-layer-observer';
7
+ import { useContext, useMemo } from 'react';
10
8
  import { fg } from '@atlaskit/platform-feature-flags';
11
9
  import { useSkipLink } from '../../../context/skip-links/skip-links-context';
12
10
  import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
13
11
  import { HasCustomThemeContext } from '../../top-nav-items/themed/has-custom-theme-context';
14
12
  import { useCustomTheme } from '../../top-nav-items/themed/use-custom-theme';
15
- import { bannerMountedVar, localSlotLayers, openLayerObserverTopNavNamespace, sideNavLiveWidthVar, topNavMountedVar, UNSAFE_topNavVar } from '../constants';
13
+ import { bannerMountedVar, localSlotLayers, openLayerObserverTopNavEndNamespace, openLayerObserverTopNavMiddleNamespace, openLayerObserverTopNavStartNamespace, sideNavLiveWidthVar, topNavMountedVar, UNSAFE_topNavVar } from '../constants';
16
14
  import { DangerouslyHoistSlotSizes } from '../hoist-slot-sizes-context';
17
15
  import { DangerouslyHoistCssVarToDocumentRoot, HoistCssVarToLocalGrid } from '../hoist-utils';
18
16
  import { useLayoutId } from '../id-utils';
19
17
  import { useSideNavVisibility } from '../side-nav/use-side-nav-visibility';
18
+ import { useHasOpenLayers } from '../use-open-layer-count';
19
+
20
20
  /**
21
21
  * Styles for the container for the top nav items.
22
22
  *
@@ -43,6 +43,14 @@ var backgroundStyles = {
43
43
  sideNavExpanded: "_hyzqcs5v"
44
44
  };
45
45
 
46
+ /**
47
+ * Namespaces to check for open layers within the top nav.
48
+ * When there is an open layer in the top nav, the top nav is given a higher z-index than the side nav.
49
+ *
50
+ * Placed outside the component for stability, as the list is used as an effect dependency.
51
+ */
52
+ var topNavOpenLayerNamespaces = [openLayerObserverTopNavStartNamespace, openLayerObserverTopNavMiddleNamespace, openLayerObserverTopNavEndNamespace];
53
+
46
54
  /**
47
55
  * The top nav layout area. It will display at the top of the screen, below the banner if one is present.
48
56
  */
@@ -94,34 +102,10 @@ export function TopNav(_ref) {
94
102
  foregroundStyle = _useMemo.foregroundStyle;
95
103
  var _useSideNavVisibility = useSideNavVisibility(),
96
104
  isExpandedOnDesktop = _useSideNavVisibility.isExpandedOnDesktop;
97
- var openLayerObserver = useOpenLayerObserver();
98
- // Setting the initial state to false, as it is unlikely that the top nav would have an open popup when the app starts.
99
- var _useState = useState(false),
100
- _useState2 = _slicedToArray(_useState, 2),
101
- hasOpenPopup = _useState2[0],
102
- setHasOpenPopup = _useState2[1];
103
- useLayoutEffect(function () {
104
- if (!openLayerObserver || !isFhsEnabled || !fg('platform-dst-side-nav-layering-fixes')) {
105
- return;
106
- }
107
- function checkAndSetState() {
108
- if (!openLayerObserver) {
109
- return;
110
- }
111
- setHasOpenPopup(openLayerObserver.getCount({
112
- namespace: openLayerObserverTopNavNamespace,
113
- type: 'popup'
114
- }) > 0);
115
- }
116
-
117
- // Initial check
118
- checkAndSetState();
119
-
120
- // Check again whenever number of layers in the top nav change
121
- return openLayerObserver.onChange(checkAndSetState, {
122
- namespace: openLayerObserverTopNavNamespace
123
- });
124
- }, [isFhsEnabled, openLayerObserver]);
105
+ var hasOpenPopup = useHasOpenLayers({
106
+ namespaces: topNavOpenLayerNamespaces,
107
+ type: 'popup'
108
+ });
125
109
  return /*#__PURE__*/React.createElement(HasCustomThemeContext.Provider, {
126
110
  value: customTheme.isEnabled
127
111
  }, isFhsEnabled && !fg('platform-dst-side-nav-layering-fixes') && /*#__PURE__*/React.createElement("div", {
@@ -154,7 +138,5 @@ export function TopNav(_ref) {
154
138
  value: height
155
139
  })
156
140
  // ------ END UNSAFE STYLES ------
157
- , fg('platform-dst-side-nav-layering-fixes') ? /*#__PURE__*/React.createElement(OpenLayerObserverNamespaceProvider, {
158
- namespace: openLayerObserverTopNavNamespace
159
- }, children) : children));
141
+ , children));
160
142
  }
@@ -0,0 +1,53 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
+ import { useEffect, useState } from 'react';
3
+ import { useOpenLayerObserver } from '@atlaskit/layering/experimental/open-layer-observer';
4
+ import { fg } from '@atlaskit/platform-feature-flags';
5
+ import { useIsFhsEnabled } from '../fhs-rollout/use-is-fhs-enabled';
6
+
7
+ /**
8
+ * Returns whether there are any open layers across the specified namespaces, optionally filtered by type.
9
+ */
10
+ export function useHasOpenLayers(_ref) {
11
+ var namespaces = _ref.namespaces,
12
+ type = _ref.type;
13
+ var isFhsEnabled = useIsFhsEnabled();
14
+ var openLayerObserver = useOpenLayerObserver();
15
+ // Setting the initial state to false, as it is unlikely that there would be any open layers when the app starts.
16
+ var _useState = useState(false),
17
+ _useState2 = _slicedToArray(_useState, 2),
18
+ hasOpenLayers = _useState2[0],
19
+ setHasOpenLayers = _useState2[1];
20
+ useEffect(function () {
21
+ if (!openLayerObserver || !isFhsEnabled || !fg('platform-dst-side-nav-layering-fixes')) {
22
+ return;
23
+ }
24
+ function updateState() {
25
+ if (!openLayerObserver) {
26
+ return;
27
+ }
28
+ var hasAnyOpenLayers = namespaces.some(function (namespace) {
29
+ return openLayerObserver.getCount({
30
+ namespace: namespace,
31
+ type: type
32
+ }) > 0;
33
+ });
34
+ setHasOpenLayers(hasAnyOpenLayers);
35
+ }
36
+
37
+ // Initial check
38
+ updateState();
39
+
40
+ // Subscribe to each namespace
41
+ var cleanups = namespaces.map(function (namespace) {
42
+ return openLayerObserver.onChange(updateState, {
43
+ namespace: namespace
44
+ });
45
+ });
46
+ return function cleanupHook() {
47
+ cleanups.forEach(function (cleanup) {
48
+ return cleanup();
49
+ });
50
+ };
51
+ }, [isFhsEnabled, openLayerObserver, namespaces, type]);
52
+ return hasOpenLayers;
53
+ }
@@ -24,3 +24,18 @@ export declare const OnCloseContext: import("react").Context<(() => void) | null
24
24
  * A context provider for supplying the onClose function to the FlyoutHeader.
25
25
  */
26
26
  export declare const OnCloseProvider: import("react").Provider<(() => void) | null | undefined>;
27
+ /**
28
+ * __Title id context__
29
+ *
30
+ * A context for storing the title id of the FlyoutMenuItem that is displayed in
31
+ * FlyoutHeader, and used as the aria-labelledby on the FlyoutMenuItemContent
32
+ * container.
33
+ */
34
+ export declare const TitleIdContext: import("react").Context<string | undefined>;
35
+ export declare const useTitleId: () => string | undefined;
36
+ /**
37
+ * __Title id provider__
38
+ *
39
+ * A context provider for supplying the title id to the FlyoutHeader.
40
+ */
41
+ export declare const TitleIdContextProvider: import("react").Provider<string | undefined>;
@@ -42,7 +42,9 @@ export declare const localSlotLayers: {
42
42
  panelSmallViewports: number;
43
43
  };
44
44
  export declare const openLayerObserverSideNavNamespace = "side-nav";
45
- export declare const openLayerObserverTopNavNamespace = "top-nav";
45
+ export declare const openLayerObserverTopNavStartNamespace = "top-nav-start";
46
+ export declare const openLayerObserverTopNavMiddleNamespace = "top-nav-middle";
47
+ export declare const openLayerObserverTopNavEndNamespace = "top-nav-end";
46
48
  /**
47
49
  * CSS scroll timeline variable for the side nav content scroll indicator.
48
50
  * The scroll timeline is created in SideNavContent, and then used by TopNavStart to apply the scroll indicator line.
@@ -0,0 +1,8 @@
1
+ import { type LayerType } from '@atlaskit/layering/experimental/open-layer-observer';
2
+ /**
3
+ * Returns whether there are any open layers across the specified namespaces, optionally filtered by type.
4
+ */
5
+ export declare function useHasOpenLayers({ namespaces, type, }: {
6
+ namespaces: string[];
7
+ type?: LayerType;
8
+ }): boolean;
@@ -24,3 +24,18 @@ export declare const OnCloseContext: import("react").Context<(() => void) | null
24
24
  * A context provider for supplying the onClose function to the FlyoutHeader.
25
25
  */
26
26
  export declare const OnCloseProvider: import("react").Provider<(() => void) | null | undefined>;
27
+ /**
28
+ * __Title id context__
29
+ *
30
+ * A context for storing the title id of the FlyoutMenuItem that is displayed in
31
+ * FlyoutHeader, and used as the aria-labelledby on the FlyoutMenuItemContent
32
+ * container.
33
+ */
34
+ export declare const TitleIdContext: import("react").Context<string | undefined>;
35
+ export declare const useTitleId: () => string | undefined;
36
+ /**
37
+ * __Title id provider__
38
+ *
39
+ * A context provider for supplying the title id to the FlyoutHeader.
40
+ */
41
+ export declare const TitleIdContextProvider: import("react").Provider<string | undefined>;
@@ -42,7 +42,9 @@ export declare const localSlotLayers: {
42
42
  panelSmallViewports: number;
43
43
  };
44
44
  export declare const openLayerObserverSideNavNamespace = "side-nav";
45
- export declare const openLayerObserverTopNavNamespace = "top-nav";
45
+ export declare const openLayerObserverTopNavStartNamespace = "top-nav-start";
46
+ export declare const openLayerObserverTopNavMiddleNamespace = "top-nav-middle";
47
+ export declare const openLayerObserverTopNavEndNamespace = "top-nav-end";
46
48
  /**
47
49
  * CSS scroll timeline variable for the side nav content scroll indicator.
48
50
  * The scroll timeline is created in SideNavContent, and then used by TopNavStart to apply the scroll indicator line.
@@ -0,0 +1,8 @@
1
+ import { type LayerType } from '@atlaskit/layering/experimental/open-layer-observer';
2
+ /**
3
+ * Returns whether there are any open layers across the specified namespaces, optionally filtered by type.
4
+ */
5
+ export declare function useHasOpenLayers({ namespaces, type, }: {
6
+ namespaces: string[];
7
+ type?: LayerType;
8
+ }): boolean;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atlaskit/navigation-system",
3
- "version": "5.16.0",
3
+ "version": "5.18.0",
4
4
  "description": "The latest navigation system for Atlassian apps.",
5
5
  "repository": "https://bitbucket.org/atlassian/atlassian-frontend-mirror",
6
6
  "author": "Atlassian Pty Ltd",
@@ -73,15 +73,15 @@
73
73
  "@atlaskit/ds-lib": "^5.3.0",
74
74
  "@atlaskit/heading": "^5.2.0",
75
75
  "@atlaskit/icon": "^29.3.0",
76
- "@atlaskit/layering": "^3.5.0",
76
+ "@atlaskit/layering": "^3.6.0",
77
77
  "@atlaskit/logo": "^19.9.0",
78
78
  "@atlaskit/platform-feature-flags": "^1.1.0",
79
- "@atlaskit/popup": "^4.10.0",
79
+ "@atlaskit/popup": "^4.12.0",
80
80
  "@atlaskit/pragmatic-drag-and-drop": "^1.7.0",
81
81
  "@atlaskit/pragmatic-drag-and-drop-hitbox": "^1.1.0",
82
82
  "@atlaskit/pragmatic-drag-and-drop-react-drop-indicator": "^3.2.0",
83
83
  "@atlaskit/primitives": "^17.0.0",
84
- "@atlaskit/tokens": "^9.0.0",
84
+ "@atlaskit/tokens": "^9.1.0",
85
85
  "@atlaskit/tooltip": "^20.11.0",
86
86
  "@atlaskit/visually-hidden": "^3.0.0",
87
87
  "@babel/runtime": "^7.0.0",
@@ -102,9 +102,9 @@
102
102
  "@atlaskit/badge": "^18.3.0",
103
103
  "@atlaskit/banner": "^14.0.0",
104
104
  "@atlaskit/breadcrumbs": "^15.3.0",
105
- "@atlaskit/dropdown-menu": "^16.3.0",
105
+ "@atlaskit/dropdown-menu": "^16.4.0",
106
106
  "@atlaskit/form": "^15.2.0",
107
- "@atlaskit/link": "^3.2.0",
107
+ "@atlaskit/link": "^3.3.0",
108
108
  "@atlaskit/lozenge": "^13.3.0",
109
109
  "@atlaskit/menu": "^8.4.0",
110
110
  "@atlaskit/modal-dialog": "^14.9.0",
@@ -148,6 +148,9 @@
148
148
  }
149
149
  },
150
150
  "platform-feature-flags": {
151
+ "platform_dst_nav4_side_nav_resize_tooltip_feedback": {
152
+ "type": "boolean"
153
+ },
151
154
  "platform_dst_nav4_fhs_instrumentation_1": {
152
155
  "type": "boolean"
153
156
  },