@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.
- package/CHANGELOG.md +30 -0
- package/dist/cjs/ui/menu-item/flyout-menu-item/flyout-header.js +3 -1
- package/dist/cjs/ui/menu-item/flyout-menu-item/flyout-menu-item-content.js +8 -3
- package/dist/cjs/ui/menu-item/flyout-menu-item/flyout-menu-item-context.js +21 -2
- package/dist/cjs/ui/menu-item/flyout-menu-item/flyout-menu-item.js +3 -1
- package/dist/cjs/ui/page-layout/constants.js +8 -2
- package/dist/cjs/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +20 -50
- package/dist/cjs/ui/page-layout/side-nav/side-nav.js +7 -0
- package/dist/cjs/ui/page-layout/top-nav/top-nav-end.js +16 -8
- package/dist/cjs/ui/page-layout/top-nav/top-nav-middle.js +5 -1
- package/dist/cjs/ui/page-layout/top-nav/top-nav-start.js +4 -1
- package/dist/cjs/ui/page-layout/top-nav/top-nav.js +14 -33
- package/dist/cjs/ui/page-layout/use-open-layer-count.js +59 -0
- package/dist/es2019/ui/menu-item/flyout-menu-item/flyout-header.js +4 -2
- package/dist/es2019/ui/menu-item/flyout-menu-item/flyout-menu-item-content.js +10 -5
- package/dist/es2019/ui/menu-item/flyout-menu-item/flyout-menu-item-context.js +18 -1
- package/dist/es2019/ui/menu-item/flyout-menu-item/flyout-menu-item.js +3 -1
- package/dist/es2019/ui/page-layout/constants.js +7 -1
- package/dist/es2019/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +23 -48
- package/dist/es2019/ui/page-layout/side-nav/side-nav.js +7 -0
- package/dist/es2019/ui/page-layout/top-nav/top-nav-end.js +11 -2
- package/dist/es2019/ui/page-layout/top-nav/top-nav-middle.js +5 -1
- package/dist/es2019/ui/page-layout/top-nav/top-nav-start.js +5 -2
- package/dist/es2019/ui/page-layout/top-nav/top-nav.js +17 -31
- package/dist/es2019/ui/page-layout/use-open-layer-count.js +44 -0
- package/dist/esm/ui/menu-item/flyout-menu-item/flyout-header.js +4 -2
- package/dist/esm/ui/menu-item/flyout-menu-item/flyout-menu-item-content.js +10 -5
- package/dist/esm/ui/menu-item/flyout-menu-item/flyout-menu-item-context.js +20 -1
- package/dist/esm/ui/menu-item/flyout-menu-item/flyout-menu-item.js +3 -1
- package/dist/esm/ui/page-layout/constants.js +7 -1
- package/dist/esm/ui/page-layout/panel-splitter/side-nav-panel-splitter.js +23 -52
- package/dist/esm/ui/page-layout/side-nav/side-nav.js +7 -0
- package/dist/esm/ui/page-layout/top-nav/top-nav-end.js +16 -8
- package/dist/esm/ui/page-layout/top-nav/top-nav-middle.js +5 -1
- package/dist/esm/ui/page-layout/top-nav/top-nav-start.js +5 -2
- package/dist/esm/ui/page-layout/top-nav/top-nav.js +17 -35
- package/dist/esm/ui/page-layout/use-open-layer-count.js +53 -0
- package/dist/types/ui/menu-item/flyout-menu-item/flyout-menu-item-context.d.ts +15 -0
- package/dist/types/ui/page-layout/constants.d.ts +3 -1
- package/dist/types/ui/page-layout/use-open-layer-count.d.ts +8 -0
- package/dist/types-ts4.5/ui/menu-item/flyout-menu-item/flyout-menu-item-context.d.ts +15 -0
- package/dist/types-ts4.5/ui/page-layout/constants.d.ts +3 -1
- package/dist/types-ts4.5/ui/page-layout/use-open-layer-count.d.ts +8 -0
- package/package.json +9 -6
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,35 @@
|
|
|
1
1
|
# @atlassian/navigation-system
|
|
2
2
|
|
|
3
|
+
## 5.18.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [`67509a09876ad`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/67509a09876ad) -
|
|
8
|
+
The side nav will no longer peek when a popup is open in `TopNavStart`, such as the app switcher.
|
|
9
|
+
|
|
10
|
+
This change is behind the `platform_dst_nav4_side_nav_resize_tooltip_feedback` and
|
|
11
|
+
`platform-dst-side-nav-layering-fixes` feature flags, when full height sidebar is enabled.
|
|
12
|
+
|
|
13
|
+
### Patch Changes
|
|
14
|
+
|
|
15
|
+
- Updated dependencies
|
|
16
|
+
|
|
17
|
+
## 5.17.0
|
|
18
|
+
|
|
19
|
+
### Minor Changes
|
|
20
|
+
|
|
21
|
+
- [`6f95ec25daa67`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/6f95ec25daa67) -
|
|
22
|
+
Fixes to accessibility issues for the flyout menu.
|
|
23
|
+
|
|
24
|
+
This includes changing the `aria-haspopup` value from `"true"` to `"dialog"`, setting the `role`
|
|
25
|
+
of the popup container to `"dialog"`, adding an `aria-labelledby` to the popup container to
|
|
26
|
+
reference the `id` of the title in the header slot, and ensuring that escape dismisses the dialog
|
|
27
|
+
and places focus back on the trigger.
|
|
28
|
+
|
|
29
|
+
### Patch Changes
|
|
30
|
+
|
|
31
|
+
- Updated dependencies
|
|
32
|
+
|
|
3
33
|
## 5.16.0
|
|
4
34
|
|
|
5
35
|
### Minor Changes
|
|
@@ -31,6 +31,7 @@ var FlyoutHeader = exports.FlyoutHeader = function FlyoutHeader(props) {
|
|
|
31
31
|
testId = props.testId,
|
|
32
32
|
title = props.title,
|
|
33
33
|
closeButtonLabel = props.closeButtonLabel;
|
|
34
|
+
var id = (0, _flyoutMenuItemContext.useTitleId)();
|
|
34
35
|
var setIsOpen = (0, _react.useContext)(_flyoutMenuItemContext.SetIsOpenContext);
|
|
35
36
|
var onClose = (0, _react.useContext)(_flyoutMenuItemContext.OnCloseContext);
|
|
36
37
|
var handleClose = (0, _react.useCallback)(function () {
|
|
@@ -48,6 +49,7 @@ var FlyoutHeader = exports.FlyoutHeader = function FlyoutHeader(props) {
|
|
|
48
49
|
testId: testId && "".concat(testId, "--close-button")
|
|
49
50
|
}), /*#__PURE__*/_react.default.createElement(_heading.default, {
|
|
50
51
|
size: "xsmall",
|
|
51
|
-
as: "span"
|
|
52
|
+
as: "span",
|
|
53
|
+
id: id
|
|
52
54
|
}, title)), children);
|
|
53
55
|
};
|
|
@@ -50,6 +50,7 @@ var FlyoutMenuItemContent = exports.FlyoutMenuItemContent = /*#__PURE__*/(0, _re
|
|
|
50
50
|
onClose === null || onClose === void 0 || onClose();
|
|
51
51
|
setIsOpen(false);
|
|
52
52
|
}, [setIsOpen, onClose]);
|
|
53
|
+
var titleId = (0, _react.useId)();
|
|
53
54
|
return /*#__PURE__*/_react.default.createElement(_experimental.PopupContent, {
|
|
54
55
|
appearance: "UNSAFE_modal-below-sm",
|
|
55
56
|
onClose: handleClose,
|
|
@@ -62,7 +63,9 @@ var FlyoutMenuItemContent = exports.FlyoutMenuItemContent = /*#__PURE__*/(0, _re
|
|
|
62
63
|
shouldFitViewport: true,
|
|
63
64
|
testId: containerTestId,
|
|
64
65
|
xcss: flyoutMenuItemContentStyles.root,
|
|
65
|
-
autoFocus: autoFocus
|
|
66
|
+
autoFocus: autoFocus,
|
|
67
|
+
role: (0, _platformFeatureFlags.fg)("platform_dst_nav4_flyout_menu_slots_close_button") ? "dialog" : undefined,
|
|
68
|
+
titleId: (0, _platformFeatureFlags.fg)("platform_dst_nav4_flyout_menu_slots_close_button") ? titleId : undefined
|
|
66
69
|
/**
|
|
67
70
|
* Disabling GPU acceleration removes the use of `transform` by popper.js for this popup.
|
|
68
71
|
*
|
|
@@ -83,13 +86,15 @@ var FlyoutMenuItemContent = exports.FlyoutMenuItemContent = /*#__PURE__*/(0, _re
|
|
|
83
86
|
return /*#__PURE__*/_react.default.createElement(UpdatePopperOnContentResize, {
|
|
84
87
|
ref: forwardedRef,
|
|
85
88
|
update: update
|
|
86
|
-
}, (0, _platformFeatureFlags.fg)("platform_dst_nav4_flyout_menu_slots_close_button") ? /*#__PURE__*/_react.default.createElement(_flyoutMenuItemContext.
|
|
89
|
+
}, (0, _platformFeatureFlags.fg)("platform_dst_nav4_flyout_menu_slots_close_button") ? /*#__PURE__*/_react.default.createElement(_flyoutMenuItemContext.TitleIdContextProvider, {
|
|
90
|
+
value: titleId
|
|
91
|
+
}, /*#__PURE__*/_react.default.createElement(_flyoutMenuItemContext.OnCloseProvider, {
|
|
87
92
|
value: function value() {
|
|
88
93
|
return onClose;
|
|
89
94
|
}
|
|
90
95
|
}, /*#__PURE__*/_react.default.createElement("div", {
|
|
91
96
|
className: (0, _runtime.ax)([flyoutMenuItemContentContainerStyles.container])
|
|
92
|
-
}, children)) : children);
|
|
97
|
+
}, children))) : children);
|
|
93
98
|
});
|
|
94
99
|
});
|
|
95
100
|
function createResizeObserver(update) {
|
|
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
|
|
|
4
4
|
Object.defineProperty(exports, "__esModule", {
|
|
5
5
|
value: true
|
|
6
6
|
});
|
|
7
|
-
exports.useSetFlyoutMenuOpen = exports.useFlyoutMenuOpen = exports.SetIsOpenContext = exports.OnCloseProvider = exports.OnCloseContext = exports.IsOpenContext = void 0;
|
|
7
|
+
exports.useTitleId = exports.useSetFlyoutMenuOpen = exports.useFlyoutMenuOpen = exports.TitleIdContextProvider = exports.TitleIdContext = exports.SetIsOpenContext = exports.OnCloseProvider = exports.OnCloseContext = exports.IsOpenContext = void 0;
|
|
8
8
|
var _react = require("react");
|
|
9
9
|
var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop"));
|
|
10
10
|
/**
|
|
@@ -39,4 +39,23 @@ var OnCloseContext = exports.OnCloseContext = /*#__PURE__*/(0, _react.createCont
|
|
|
39
39
|
*
|
|
40
40
|
* A context provider for supplying the onClose function to the FlyoutHeader.
|
|
41
41
|
*/
|
|
42
|
-
var OnCloseProvider = exports.OnCloseProvider = OnCloseContext.Provider;
|
|
42
|
+
var OnCloseProvider = exports.OnCloseProvider = OnCloseContext.Provider;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* __Title id context__
|
|
46
|
+
*
|
|
47
|
+
* A context for storing the title id of the FlyoutMenuItem that is displayed in
|
|
48
|
+
* FlyoutHeader, and used as the aria-labelledby on the FlyoutMenuItemContent
|
|
49
|
+
* container.
|
|
50
|
+
*/
|
|
51
|
+
var TitleIdContext = exports.TitleIdContext = /*#__PURE__*/(0, _react.createContext)(undefined);
|
|
52
|
+
var useTitleId = exports.useTitleId = function useTitleId() {
|
|
53
|
+
return (0, _react.useContext)(TitleIdContext);
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* __Title id provider__
|
|
58
|
+
*
|
|
59
|
+
* A context provider for supplying the title id to the FlyoutHeader.
|
|
60
|
+
*/
|
|
61
|
+
var TitleIdContextProvider = exports.TitleIdContextProvider = TitleIdContext.Provider;
|
|
@@ -10,6 +10,7 @@ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/sli
|
|
|
10
10
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
11
|
var _useControlled3 = _interopRequireDefault(require("@atlaskit/ds-lib/use-controlled"));
|
|
12
12
|
var _usePreviousValue = _interopRequireDefault(require("@atlaskit/ds-lib/use-previous-value"));
|
|
13
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
13
14
|
var _experimental = require("@atlaskit/popup/experimental");
|
|
14
15
|
var _menuListItem = require("../menu-list-item");
|
|
15
16
|
var _flyoutMenuItemContext = require("./flyout-menu-item-context");
|
|
@@ -69,6 +70,7 @@ var FlyoutMenuItem = exports.FlyoutMenuItem = /*#__PURE__*/(0, _react.forwardRef
|
|
|
69
70
|
ref: forwardedRef
|
|
70
71
|
}, /*#__PURE__*/_react.default.createElement(_experimental.Popup, {
|
|
71
72
|
id: id,
|
|
72
|
-
isOpen: isOpen
|
|
73
|
+
isOpen: isOpen,
|
|
74
|
+
role: (0, _platformFeatureFlags.fg)('platform_dst_nav4_flyout_menu_slots_close_button') ? 'dialog' : undefined
|
|
73
75
|
}, children))));
|
|
74
76
|
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.topNavMountedVar = exports.sideNavVar = exports.sideNavPanelSplitterId = exports.sideNavLiveWidthVar = exports.sideNavContentScrollTimelineVar = exports.panelVar = exports.panelPanelSplitterId = exports.
|
|
6
|
+
exports.topNavMountedVar = exports.sideNavVar = exports.sideNavPanelSplitterId = exports.sideNavLiveWidthVar = exports.sideNavContentScrollTimelineVar = exports.panelVar = exports.panelPanelSplitterId = exports.openLayerObserverTopNavStartNamespace = exports.openLayerObserverTopNavMiddleNamespace = exports.openLayerObserverTopNavEndNamespace = exports.openLayerObserverSideNavNamespace = exports.localSlotLayers = exports.contentInsetBlockStart = exports.contentHeightWhenFixed = exports.bannerMountedVar = exports.asideVar = exports.asidePanelSplitterId = exports.UNSAFE_topNavVar = exports.UNSAFE_sideNavLayoutVar = exports.UNSAFE_panelLayoutVar = exports.UNSAFE_bannerVar = exports.UNSAFE_asideLayoutVar = exports.UNSAFE_MAIN_INLINE_START_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_INLINE_END_FOR_LEGACY_PAGES_ONLY = exports.UNSAFE_MAIN_BLOCK_START_FOR_LEGACY_PAGES_ONLY = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* These variables are shared across the different page layout slots.
|
|
9
9
|
* This violates the [UI styling standard](https://atlassian.design/components/eslint-plugin-ui-styling-standard/no-imported-style-values/usage).
|
|
@@ -66,7 +66,13 @@ var localSlotLayers = exports.localSlotLayers = {
|
|
|
66
66
|
panelSmallViewports: 1
|
|
67
67
|
};
|
|
68
68
|
var openLayerObserverSideNavNamespace = exports.openLayerObserverSideNavNamespace = 'side-nav';
|
|
69
|
-
|
|
69
|
+
// We have separate OpenLayerObserver namespaces for each top nav layout area, instead of a single namespace for the entire top nav,
|
|
70
|
+
// as we need to know if there are open layers in TopNavStart specifically to prevent the side nav from peeking.
|
|
71
|
+
// The OpenLayerObserver doesn't support nested namespaces. We could update it, but for now it's simple enough to just have separate
|
|
72
|
+
// namespaces.
|
|
73
|
+
var openLayerObserverTopNavStartNamespace = exports.openLayerObserverTopNavStartNamespace = 'top-nav-start';
|
|
74
|
+
var openLayerObserverTopNavMiddleNamespace = exports.openLayerObserverTopNavMiddleNamespace = 'top-nav-middle';
|
|
75
|
+
var openLayerObserverTopNavEndNamespace = exports.openLayerObserverTopNavEndNamespace = 'top-nav-end';
|
|
70
76
|
|
|
71
77
|
/**
|
|
72
78
|
* CSS scroll timeline variable for the side nav content scroll indicator.
|
|
@@ -6,17 +6,30 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
value: true
|
|
7
7
|
});
|
|
8
8
|
exports.SideNavPanelSplitter = void 0;
|
|
9
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
9
|
var _react = _interopRequireWildcard(require("react"));
|
|
11
10
|
var _tinyInvariant = _interopRequireDefault(require("tiny-invariant"));
|
|
12
|
-
var _openLayerObserver = require("@atlaskit/layering/experimental/open-layer-observer");
|
|
13
11
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
14
12
|
var _useIsFhsEnabled = require("../../fhs-rollout/use-is-fhs-enabled");
|
|
15
13
|
var _constants = require("../constants");
|
|
16
14
|
var _useToggleSideNav = require("../side-nav/use-toggle-side-nav");
|
|
15
|
+
var _useOpenLayerCount = require("../use-open-layer-count");
|
|
17
16
|
var _context = require("./context");
|
|
18
17
|
var _panelSplitter = require("./panel-splitter");
|
|
19
18
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
19
|
+
/**
|
|
20
|
+
* Namespaces to check for open layers that would interfere with the panel splitter.
|
|
21
|
+
*
|
|
22
|
+
* Placed outside the component for stability, as the list is used as an effect dependency.
|
|
23
|
+
*/
|
|
24
|
+
var openLayerNamespacesToCheck = [
|
|
25
|
+
// We don't technically need to check the side nav for open layers, as they wouldn't overlay the
|
|
26
|
+
// panel splitter, as it sits within the same stacking context as the side nav. For consistency however,
|
|
27
|
+
// we check it as well.
|
|
28
|
+
_constants.openLayerObserverSideNavNamespace,
|
|
29
|
+
// When there is an open layer in the top nav, the top nav is given a higher z-index than the side nav.
|
|
30
|
+
// This means the part of the side nav panel splitter that was sitting above the top nav will no longer
|
|
31
|
+
// be interactive (as it is now behind the top nav). So, we need to disable the entire panel splitter.
|
|
32
|
+
_constants.openLayerObserverTopNavStartNamespace, _constants.openLayerObserverTopNavMiddleNamespace, _constants.openLayerObserverTopNavEndNamespace];
|
|
20
33
|
/**
|
|
21
34
|
* _SideNavPanelSplitter_
|
|
22
35
|
*
|
|
@@ -48,54 +61,11 @@ var SideNavPanelSplitter = exports.SideNavPanelSplitter = function SideNavPanelS
|
|
|
48
61
|
// The logic and state for disabling the panel splitter when there are open popups
|
|
49
62
|
// in the side nav or top nav is being placed here, instead of in `SideNav`, to prevent
|
|
50
63
|
// re-rendering the side nav anytime the number of open popups changes.
|
|
51
|
-
var
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
(0, _react.useEffect)(function () {
|
|
57
|
-
if (!openLayerObserver || !isFhsEnabled || !(0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes')) {
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
function checkAndSetState() {
|
|
61
|
-
if (!openLayerObserver) {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// We don't technically need to check the side nav for open layers, as they wouldn't overlay the
|
|
66
|
-
// panel splitter, as it sits within the same stacking context as the side nav. For consistency however,
|
|
67
|
-
// we check it as well.
|
|
68
|
-
var openPopupsInSideNav = openLayerObserver.getCount({
|
|
69
|
-
namespace: _constants.openLayerObserverSideNavNamespace,
|
|
70
|
-
type: 'popup'
|
|
71
|
-
});
|
|
72
|
-
|
|
73
|
-
// When there is an open layer in the top nav, the top nav is given a higher z-index than the side nav.
|
|
74
|
-
// This means the part of the side nav panel splitter that was sitting above the top nav will no longer
|
|
75
|
-
// be interactive (as it is now behind the top nav). So, we need to disable the entire panel splitter.
|
|
76
|
-
var openPopupsInTopNav = openLayerObserver.getCount({
|
|
77
|
-
namespace: _constants.openLayerObserverTopNavNamespace,
|
|
78
|
-
type: 'popup'
|
|
79
|
-
});
|
|
80
|
-
setIsEnabled(openPopupsInSideNav + openPopupsInTopNav === 0);
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
// Initial check, in case the app has loaded with an open popup.
|
|
84
|
-
checkAndSetState();
|
|
85
|
-
|
|
86
|
-
// Creating separate listeners for each namespace, to avoid running them when layers in other parts of the app change.
|
|
87
|
-
var cleanupSideNavListener = openLayerObserver.onChange(checkAndSetState, {
|
|
88
|
-
namespace: _constants.openLayerObserverSideNavNamespace
|
|
89
|
-
});
|
|
90
|
-
var cleanupTopNavListener = openLayerObserver.onChange(checkAndSetState, {
|
|
91
|
-
namespace: _constants.openLayerObserverTopNavNamespace
|
|
92
|
-
});
|
|
93
|
-
return function cleanup() {
|
|
94
|
-
cleanupSideNavListener();
|
|
95
|
-
cleanupTopNavListener();
|
|
96
|
-
};
|
|
97
|
-
}, [isFhsEnabled, openLayerObserver]);
|
|
98
|
-
if (!isEnabled && isFhsEnabled && (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes')) {
|
|
64
|
+
var hasOpenLayers = (0, _useOpenLayerCount.useHasOpenLayers)({
|
|
65
|
+
namespaces: openLayerNamespacesToCheck,
|
|
66
|
+
type: 'popup'
|
|
67
|
+
});
|
|
68
|
+
if (hasOpenLayers && isFhsEnabled && (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes')) {
|
|
99
69
|
return null;
|
|
100
70
|
}
|
|
101
71
|
return /*#__PURE__*/_react.default.createElement(_context.OnDoubleClickContext.Provider, {
|
|
@@ -220,6 +220,13 @@ function SideNavInternal(_ref) {
|
|
|
220
220
|
}
|
|
221
221
|
}
|
|
222
222
|
function open() {
|
|
223
|
+
// Prevent the flyout from being opened if there are any open layers in the top nav start
|
|
224
|
+
if (openLayerObserver && openLayerObserver.getCount({
|
|
225
|
+
namespace: 'top-nav-start',
|
|
226
|
+
type: 'popup'
|
|
227
|
+
}) > 0 && (0, _platformFeatureFlags.fg)('platform_dst_nav4_side_nav_resize_tooltip_feedback')) {
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
223
230
|
var prevFlyoutState = flyoutStateRef.current;
|
|
224
231
|
tryAbortPendingClose();
|
|
225
232
|
flyoutStateRef.current = {
|
|
@@ -15,6 +15,7 @@ var _react = _interopRequireWildcard(require("react"));
|
|
|
15
15
|
var _react2 = require("@compiled/react");
|
|
16
16
|
var _useLayoutEffect = require("@atlaskit/ds-lib/use-layout-effect");
|
|
17
17
|
var _showMoreHorizontal = _interopRequireDefault(require("@atlaskit/icon/core/show-more-horizontal"));
|
|
18
|
+
var _openLayerObserver = require("@atlaskit/layering/experimental/open-layer-observer");
|
|
18
19
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
19
20
|
var _popup = _interopRequireDefault(require("@atlaskit/popup"));
|
|
20
21
|
var _compiled = require("@atlaskit/primitives/compiled");
|
|
@@ -22,6 +23,7 @@ var _list = require("../../../components/list");
|
|
|
22
23
|
var _useIsFhsEnabled = require("../../fhs-rollout/use-is-fhs-enabled");
|
|
23
24
|
var _hasCustomThemeContext = require("../../top-nav-items/themed/has-custom-theme-context");
|
|
24
25
|
var _migration = require("../../top-nav-items/themed/migration");
|
|
26
|
+
var _constants = require("../constants");
|
|
25
27
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
26
28
|
var containerStyles = {
|
|
27
29
|
root: "_yyhy11wp _1e0c1txw _1bahh9n0 _1ul9zwfg _1d2y1ris _glte1ris _15ri1mjv _1gs5usvi _ndwch9n0",
|
|
@@ -34,6 +36,12 @@ var listStyles = {
|
|
|
34
36
|
hideOnSmallViewport: "_1e0cglyw _181n1txw",
|
|
35
37
|
popupContainer: "_1yt4u2gc"
|
|
36
38
|
};
|
|
39
|
+
function OpenLayerObserverNamespaceProviderBehindFG(_ref) {
|
|
40
|
+
var children = _ref.children;
|
|
41
|
+
return (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') ? /*#__PURE__*/_react.default.createElement(_openLayerObserver.OpenLayerObserverNamespaceProvider, {
|
|
42
|
+
namespace: _constants.openLayerObserverTopNavEndNamespace
|
|
43
|
+
}, children) : children;
|
|
44
|
+
}
|
|
37
45
|
|
|
38
46
|
/**
|
|
39
47
|
* __TopNavEnd__
|
|
@@ -43,12 +51,12 @@ var listStyles = {
|
|
|
43
51
|
* On small viewports, the children will be placed inside a popup, and a button will be rendered to open the popup.
|
|
44
52
|
* This is to prevent the actions from overflowing the top navigation.
|
|
45
53
|
*/
|
|
46
|
-
function TopNavEnd(
|
|
47
|
-
var children =
|
|
48
|
-
|
|
49
|
-
label =
|
|
50
|
-
|
|
51
|
-
showMoreButtonLabel =
|
|
54
|
+
function TopNavEnd(_ref2) {
|
|
55
|
+
var children = _ref2.children,
|
|
56
|
+
_ref2$label = _ref2.label,
|
|
57
|
+
label = _ref2$label === void 0 ? 'Actions' : _ref2$label,
|
|
58
|
+
_ref2$showMoreButtonL = _ref2.showMoreButtonLabel,
|
|
59
|
+
showMoreButtonLabel = _ref2$showMoreButtonL === void 0 ? 'Show more' : _ref2$showMoreButtonL;
|
|
52
60
|
var isFhsEnabled = (0, _useIsFhsEnabled.useIsFhsEnabled)();
|
|
53
61
|
var _useState = (0, _react.useState)(false),
|
|
54
62
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
@@ -87,7 +95,7 @@ function TopNavEnd(_ref) {
|
|
|
87
95
|
value: false
|
|
88
96
|
}, /*#__PURE__*/_react.default.createElement(_list.List, {
|
|
89
97
|
xcss: (0, _react2.cx)(listStyles.root, listStyles.popupContainer)
|
|
90
|
-
}, children));
|
|
98
|
+
}, /*#__PURE__*/_react.default.createElement(OpenLayerObserverNamespaceProviderBehindFG, null, children)));
|
|
91
99
|
},
|
|
92
100
|
trigger: function trigger(triggerProps) {
|
|
93
101
|
return /*#__PURE__*/_react.default.createElement(_migration.IconButton, (0, _extends2.default)({}, triggerProps, {
|
|
@@ -102,5 +110,5 @@ function TopNavEnd(_ref) {
|
|
|
102
110
|
}
|
|
103
111
|
}) : /*#__PURE__*/_react.default.createElement(_list.List, {
|
|
104
112
|
xcss: (0, _react2.cx)(listStyles.root, listStyles.hideOnSmallViewport)
|
|
105
|
-
}, children));
|
|
113
|
+
}, /*#__PURE__*/_react.default.createElement(OpenLayerObserverNamespaceProviderBehindFG, null, children)));
|
|
106
114
|
}
|
|
@@ -9,8 +9,10 @@ exports.TopNavMiddle = TopNavMiddle;
|
|
|
9
9
|
require("./top-nav-middle.compiled.css");
|
|
10
10
|
var _runtime = require("@compiled/react/runtime");
|
|
11
11
|
var _react = _interopRequireDefault(require("react"));
|
|
12
|
+
var _openLayerObserver = require("@atlaskit/layering/experimental/open-layer-observer");
|
|
12
13
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
13
14
|
var _useIsFhsEnabled = require("../../fhs-rollout/use-is-fhs-enabled");
|
|
15
|
+
var _constants = require("../constants");
|
|
14
16
|
var styles = {
|
|
15
17
|
root: "_zulpu2gc _yyhycs5v _1bsb1osq _4cvr1h6o _1e0c1txw _1bahh9n0 _181n11p5 _1j8b15b0 _lagd1bp4 _1t4c1ris _12e8h9n0",
|
|
16
18
|
fullHeightSidebar: "_lcxv1wug"
|
|
@@ -29,5 +31,7 @@ function TopNavMiddle(_ref) {
|
|
|
29
31
|
var isFhsEnabled = (0, _useIsFhsEnabled.useIsFhsEnabled)();
|
|
30
32
|
return /*#__PURE__*/_react.default.createElement("div", {
|
|
31
33
|
className: (0, _runtime.ax)([styles.root, isFhsEnabled && !(0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && styles.fullHeightSidebar])
|
|
32
|
-
},
|
|
34
|
+
}, (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') ? /*#__PURE__*/_react.default.createElement(_openLayerObserver.OpenLayerObserverNamespaceProvider, {
|
|
35
|
+
namespace: _constants.openLayerObserverTopNavMiddleNamespace
|
|
36
|
+
}, children) : children);
|
|
33
37
|
}
|
|
@@ -12,6 +12,7 @@ var _runtime = require("@compiled/react/runtime");
|
|
|
12
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
13
|
var _react = _interopRequireWildcard(require("react"));
|
|
14
14
|
var _useStableRef = _interopRequireDefault(require("@atlaskit/ds-lib/use-stable-ref"));
|
|
15
|
+
var _openLayerObserver = require("@atlaskit/layering/experimental/open-layer-observer");
|
|
15
16
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
16
17
|
var _compiled = require("@atlaskit/primitives/compiled");
|
|
17
18
|
var _topNavStartContext = require("../../../context/top-nav-start/top-nav-start-context");
|
|
@@ -153,7 +154,9 @@ var TopNavStartInnerFHS = /*#__PURE__*/(0, _react.forwardRef)(function TopNavSta
|
|
|
153
154
|
ref: ref,
|
|
154
155
|
"data-testid": testId,
|
|
155
156
|
className: (0, _runtime.ax)([innerStyles.root, !(0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && innerStyles.fullHeightSidebar, (0, _platformFeatureFlags.fg)('team25-eu-jira-logo-updates-csm-jsm') && innerStyles.jiraProductLogoUpdate, isExpandedOnDesktop && innerStyles.fullHeightSidebarExpanded])
|
|
156
|
-
},
|
|
157
|
+
}, (0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') ? /*#__PURE__*/_react.default.createElement(_openLayerObserver.OpenLayerObserverNamespaceProvider, {
|
|
158
|
+
namespace: _constants.openLayerObserverTopNavStartNamespace
|
|
159
|
+
}, children) : children));
|
|
157
160
|
});
|
|
158
161
|
|
|
159
162
|
/**
|
|
@@ -11,9 +11,7 @@ require("./top-nav.compiled.css");
|
|
|
11
11
|
var _react = _interopRequireWildcard(require("react"));
|
|
12
12
|
var React = _react;
|
|
13
13
|
var _runtime = require("@compiled/react/runtime");
|
|
14
|
-
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
15
14
|
var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
|
|
16
|
-
var _openLayerObserver = require("@atlaskit/layering/experimental/open-layer-observer");
|
|
17
15
|
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
18
16
|
var _skipLinksContext = require("../../../context/skip-links/skip-links-context");
|
|
19
17
|
var _useIsFhsEnabled = require("../../fhs-rollout/use-is-fhs-enabled");
|
|
@@ -24,6 +22,7 @@ var _hoistSlotSizesContext = require("../hoist-slot-sizes-context");
|
|
|
24
22
|
var _hoistUtils = require("../hoist-utils");
|
|
25
23
|
var _idUtils = require("../id-utils");
|
|
26
24
|
var _useSideNavVisibility2 = require("../side-nav/use-side-nav-visibility");
|
|
25
|
+
var _useOpenLayerCount = require("../use-open-layer-count");
|
|
27
26
|
var _excluded = ["backgroundColor"];
|
|
28
27
|
function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
|
|
29
28
|
/**
|
|
@@ -52,6 +51,14 @@ var backgroundStyles = {
|
|
|
52
51
|
sideNavExpanded: "_hyzqcs5v"
|
|
53
52
|
};
|
|
54
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Namespaces to check for open layers within the top nav.
|
|
56
|
+
* When there is an open layer in the top nav, the top nav is given a higher z-index than the side nav.
|
|
57
|
+
*
|
|
58
|
+
* Placed outside the component for stability, as the list is used as an effect dependency.
|
|
59
|
+
*/
|
|
60
|
+
var topNavOpenLayerNamespaces = [_constants.openLayerObserverTopNavStartNamespace, _constants.openLayerObserverTopNavMiddleNamespace, _constants.openLayerObserverTopNavEndNamespace];
|
|
61
|
+
|
|
55
62
|
/**
|
|
56
63
|
* The top nav layout area. It will display at the top of the screen, below the banner if one is present.
|
|
57
64
|
*/
|
|
@@ -103,34 +110,10 @@ function TopNav(_ref) {
|
|
|
103
110
|
foregroundStyle = _useMemo.foregroundStyle;
|
|
104
111
|
var _useSideNavVisibility = (0, _useSideNavVisibility2.useSideNavVisibility)(),
|
|
105
112
|
isExpandedOnDesktop = _useSideNavVisibility.isExpandedOnDesktop;
|
|
106
|
-
var
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
hasOpenPopup = _useState2[0],
|
|
111
|
-
setHasOpenPopup = _useState2[1];
|
|
112
|
-
(0, _react.useLayoutEffect)(function () {
|
|
113
|
-
if (!openLayerObserver || !isFhsEnabled || !(0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes')) {
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
function checkAndSetState() {
|
|
117
|
-
if (!openLayerObserver) {
|
|
118
|
-
return;
|
|
119
|
-
}
|
|
120
|
-
setHasOpenPopup(openLayerObserver.getCount({
|
|
121
|
-
namespace: _constants.openLayerObserverTopNavNamespace,
|
|
122
|
-
type: 'popup'
|
|
123
|
-
}) > 0);
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
// Initial check
|
|
127
|
-
checkAndSetState();
|
|
128
|
-
|
|
129
|
-
// Check again whenever number of layers in the top nav change
|
|
130
|
-
return openLayerObserver.onChange(checkAndSetState, {
|
|
131
|
-
namespace: _constants.openLayerObserverTopNavNamespace
|
|
132
|
-
});
|
|
133
|
-
}, [isFhsEnabled, openLayerObserver]);
|
|
113
|
+
var hasOpenPopup = (0, _useOpenLayerCount.useHasOpenLayers)({
|
|
114
|
+
namespaces: topNavOpenLayerNamespaces,
|
|
115
|
+
type: 'popup'
|
|
116
|
+
});
|
|
134
117
|
return /*#__PURE__*/React.createElement(_hasCustomThemeContext.HasCustomThemeContext.Provider, {
|
|
135
118
|
value: customTheme.isEnabled
|
|
136
119
|
}, isFhsEnabled && !(0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes') && /*#__PURE__*/React.createElement("div", {
|
|
@@ -163,7 +146,5 @@ function TopNav(_ref) {
|
|
|
163
146
|
value: height
|
|
164
147
|
})
|
|
165
148
|
// ------ END UNSAFE STYLES ------
|
|
166
|
-
,
|
|
167
|
-
namespace: _constants.openLayerObserverTopNavNamespace
|
|
168
|
-
}, children) : children));
|
|
149
|
+
, children));
|
|
169
150
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.useHasOpenLayers = useHasOpenLayers;
|
|
8
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
9
|
+
var _react = require("react");
|
|
10
|
+
var _openLayerObserver = require("@atlaskit/layering/experimental/open-layer-observer");
|
|
11
|
+
var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
|
|
12
|
+
var _useIsFhsEnabled = require("../fhs-rollout/use-is-fhs-enabled");
|
|
13
|
+
/**
|
|
14
|
+
* Returns whether there are any open layers across the specified namespaces, optionally filtered by type.
|
|
15
|
+
*/
|
|
16
|
+
function useHasOpenLayers(_ref) {
|
|
17
|
+
var namespaces = _ref.namespaces,
|
|
18
|
+
type = _ref.type;
|
|
19
|
+
var isFhsEnabled = (0, _useIsFhsEnabled.useIsFhsEnabled)();
|
|
20
|
+
var openLayerObserver = (0, _openLayerObserver.useOpenLayerObserver)();
|
|
21
|
+
// Setting the initial state to false, as it is unlikely that there would be any open layers when the app starts.
|
|
22
|
+
var _useState = (0, _react.useState)(false),
|
|
23
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
24
|
+
hasOpenLayers = _useState2[0],
|
|
25
|
+
setHasOpenLayers = _useState2[1];
|
|
26
|
+
(0, _react.useEffect)(function () {
|
|
27
|
+
if (!openLayerObserver || !isFhsEnabled || !(0, _platformFeatureFlags.fg)('platform-dst-side-nav-layering-fixes')) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
function updateState() {
|
|
31
|
+
if (!openLayerObserver) {
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
var hasAnyOpenLayers = namespaces.some(function (namespace) {
|
|
35
|
+
return openLayerObserver.getCount({
|
|
36
|
+
namespace: namespace,
|
|
37
|
+
type: type
|
|
38
|
+
}) > 0;
|
|
39
|
+
});
|
|
40
|
+
setHasOpenLayers(hasAnyOpenLayers);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Initial check
|
|
44
|
+
updateState();
|
|
45
|
+
|
|
46
|
+
// Subscribe to each namespace
|
|
47
|
+
var cleanups = namespaces.map(function (namespace) {
|
|
48
|
+
return openLayerObserver.onChange(updateState, {
|
|
49
|
+
namespace: namespace
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
return function cleanupHook() {
|
|
53
|
+
cleanups.forEach(function (cleanup) {
|
|
54
|
+
return cleanup();
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
}, [isFhsEnabled, openLayerObserver, namespaces, type]);
|
|
58
|
+
return hasOpenLayers;
|
|
59
|
+
}
|
|
@@ -5,7 +5,7 @@ import React, { useCallback, useContext } from 'react';
|
|
|
5
5
|
import Heading from '@atlaskit/heading';
|
|
6
6
|
import { Flex } from '@atlaskit/primitives/compiled';
|
|
7
7
|
import { CloseButton } from './close-button';
|
|
8
|
-
import { OnCloseContext, SetIsOpenContext } from './flyout-menu-item-context';
|
|
8
|
+
import { OnCloseContext, SetIsOpenContext, useTitleId } from './flyout-menu-item-context';
|
|
9
9
|
const headerStyles = {
|
|
10
10
|
root: "_zulp12x7 _bozg1b66 _85i512x7 _1e0c1txw _2lx21bp4",
|
|
11
11
|
flex: "_zulppxbi _1bah1yb4 _2lx21sbv _4cvr1h6o _1bsb1osq _bozgv77o"
|
|
@@ -24,6 +24,7 @@ export const FlyoutHeader = props => {
|
|
|
24
24
|
title,
|
|
25
25
|
closeButtonLabel
|
|
26
26
|
} = props;
|
|
27
|
+
const id = useTitleId();
|
|
27
28
|
const setIsOpen = useContext(SetIsOpenContext);
|
|
28
29
|
const onClose = useContext(OnCloseContext);
|
|
29
30
|
const handleClose = useCallback(() => {
|
|
@@ -41,6 +42,7 @@ export const FlyoutHeader = props => {
|
|
|
41
42
|
testId: testId && `${testId}--close-button`
|
|
42
43
|
}), /*#__PURE__*/React.createElement(Heading, {
|
|
43
44
|
size: "xsmall",
|
|
44
|
-
as: "span"
|
|
45
|
+
as: "span",
|
|
46
|
+
id: id
|
|
45
47
|
}, title)), children);
|
|
46
48
|
};
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/* flyout-menu-item-content.tsx generated by @compiled/babel-plugin v0.38.1 */
|
|
2
2
|
import "./flyout-menu-item-content.compiled.css";
|
|
3
3
|
import { ax, ix } from "@compiled/react/runtime";
|
|
4
|
-
import React, { forwardRef, useCallback, useContext, useEffect, useMemo, useRef, useState } from 'react';
|
|
4
|
+
import React, { forwardRef, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from 'react';
|
|
5
5
|
import mergeRefs from '@atlaskit/ds-lib/merge-refs';
|
|
6
6
|
import { fg } from '@atlaskit/platform-feature-flags';
|
|
7
7
|
import { PopupContent } from '@atlaskit/popup/experimental';
|
|
8
|
-
import { OnCloseProvider, SetIsOpenContext } from './flyout-menu-item-context';
|
|
8
|
+
import { OnCloseProvider, SetIsOpenContext, TitleIdContextProvider } from './flyout-menu-item-context';
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* The vertical offset in px to ensure the flyout container does not exceed the bounds of
|
|
@@ -42,6 +42,7 @@ export const FlyoutMenuItemContent = /*#__PURE__*/forwardRef(({
|
|
|
42
42
|
onClose === null || onClose === void 0 ? void 0 : onClose();
|
|
43
43
|
setIsOpen(false);
|
|
44
44
|
}, [setIsOpen, onClose]);
|
|
45
|
+
const titleId = useId();
|
|
45
46
|
return /*#__PURE__*/React.createElement(PopupContent, {
|
|
46
47
|
appearance: "UNSAFE_modal-below-sm",
|
|
47
48
|
onClose: handleClose,
|
|
@@ -54,7 +55,9 @@ export const FlyoutMenuItemContent = /*#__PURE__*/forwardRef(({
|
|
|
54
55
|
shouldFitViewport: true,
|
|
55
56
|
testId: containerTestId,
|
|
56
57
|
xcss: flyoutMenuItemContentStyles.root,
|
|
57
|
-
autoFocus: autoFocus
|
|
58
|
+
autoFocus: autoFocus,
|
|
59
|
+
role: fg("platform_dst_nav4_flyout_menu_slots_close_button") ? "dialog" : undefined,
|
|
60
|
+
titleId: fg("platform_dst_nav4_flyout_menu_slots_close_button") ? titleId : undefined
|
|
58
61
|
/**
|
|
59
62
|
* Disabling GPU acceleration removes the use of `transform` by popper.js for this popup.
|
|
60
63
|
*
|
|
@@ -75,11 +78,13 @@ export const FlyoutMenuItemContent = /*#__PURE__*/forwardRef(({
|
|
|
75
78
|
}) => /*#__PURE__*/React.createElement(UpdatePopperOnContentResize, {
|
|
76
79
|
ref: forwardedRef,
|
|
77
80
|
update: update
|
|
78
|
-
}, fg("platform_dst_nav4_flyout_menu_slots_close_button") ? /*#__PURE__*/React.createElement(
|
|
81
|
+
}, fg("platform_dst_nav4_flyout_menu_slots_close_button") ? /*#__PURE__*/React.createElement(TitleIdContextProvider, {
|
|
82
|
+
value: titleId
|
|
83
|
+
}, /*#__PURE__*/React.createElement(OnCloseProvider, {
|
|
79
84
|
value: () => onClose
|
|
80
85
|
}, /*#__PURE__*/React.createElement("div", {
|
|
81
86
|
className: ax([flyoutMenuItemContentContainerStyles.container])
|
|
82
|
-
}, children)) : children));
|
|
87
|
+
}, children))) : children));
|
|
83
88
|
});
|
|
84
89
|
function createResizeObserver(update) {
|
|
85
90
|
return new ResizeObserver(update);
|
|
@@ -29,4 +29,21 @@ export const OnCloseContext = /*#__PURE__*/createContext(null);
|
|
|
29
29
|
*
|
|
30
30
|
* A context provider for supplying the onClose function to the FlyoutHeader.
|
|
31
31
|
*/
|
|
32
|
-
export const OnCloseProvider = OnCloseContext.Provider;
|
|
32
|
+
export const OnCloseProvider = OnCloseContext.Provider;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* __Title id context__
|
|
36
|
+
*
|
|
37
|
+
* A context for storing the title id of the FlyoutMenuItem that is displayed in
|
|
38
|
+
* FlyoutHeader, and used as the aria-labelledby on the FlyoutMenuItemContent
|
|
39
|
+
* container.
|
|
40
|
+
*/
|
|
41
|
+
export const TitleIdContext = /*#__PURE__*/createContext(undefined);
|
|
42
|
+
export const useTitleId = () => useContext(TitleIdContext);
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* __Title id provider__
|
|
46
|
+
*
|
|
47
|
+
* A context provider for supplying the title id to the FlyoutHeader.
|
|
48
|
+
*/
|
|
49
|
+
export const TitleIdContextProvider = TitleIdContext.Provider;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, { forwardRef, useEffect } from 'react';
|
|
2
2
|
import useControlled from '@atlaskit/ds-lib/use-controlled';
|
|
3
3
|
import usePreviousValue from '@atlaskit/ds-lib/use-previous-value';
|
|
4
|
+
import { fg } from '@atlaskit/platform-feature-flags';
|
|
4
5
|
import { Popup } from '@atlaskit/popup/experimental';
|
|
5
6
|
import { MenuListItem } from '../menu-list-item';
|
|
6
7
|
import { IsOpenContext, SetIsOpenContext } from './flyout-menu-item-context';
|
|
@@ -54,6 +55,7 @@ export const FlyoutMenuItem = /*#__PURE__*/forwardRef(({
|
|
|
54
55
|
ref: forwardedRef
|
|
55
56
|
}, /*#__PURE__*/React.createElement(Popup, {
|
|
56
57
|
id: id,
|
|
57
|
-
isOpen: isOpen
|
|
58
|
+
isOpen: isOpen,
|
|
59
|
+
role: fg('platform_dst_nav4_flyout_menu_slots_close_button') ? 'dialog' : undefined
|
|
58
60
|
}, children))));
|
|
59
61
|
});
|