@atlaskit/navigation-system 5.5.1 → 5.7.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 (79) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/cjs/entry-points/fhs-rollout.js +26 -0
  3. package/dist/cjs/index.js +21 -0
  4. package/dist/cjs/ui/fhs-rollout/is-custom-is-fhs-enabled-context.js +14 -0
  5. package/dist/cjs/ui/fhs-rollout/is-fhs-enabled-context.js +17 -0
  6. package/dist/cjs/ui/fhs-rollout/is-fhs-enabled-provider.js +29 -0
  7. package/dist/cjs/ui/fhs-rollout/types.js +1 -0
  8. package/dist/cjs/ui/fhs-rollout/use-is-fhs-enabled.js +17 -0
  9. package/dist/cjs/ui/page-layout/panel-splitter/panel-splitter.js +9 -2
  10. package/dist/cjs/ui/page-layout/side-nav/side-nav-content.js +6 -2
  11. package/dist/cjs/ui/page-layout/side-nav/side-nav.js +10 -6
  12. package/dist/cjs/ui/page-layout/side-nav/toggle-button.js +12 -3
  13. package/dist/cjs/ui/page-layout/side-nav/use-side-nav-toggle-keyboard-shortcut.js +7 -3
  14. package/dist/cjs/ui/page-layout/top-nav/top-nav-end.js +5 -1
  15. package/dist/cjs/ui/page-layout/top-nav/top-nav-middle.js +5 -1
  16. package/dist/cjs/ui/page-layout/top-nav/top-nav-start.js +14 -10
  17. package/dist/cjs/ui/page-layout/top-nav/top-nav.js +8 -4
  18. package/dist/cjs/ui/top-nav-items/nav-logo/app-logo.js +7 -3
  19. package/dist/cjs/ui/top-nav-items/search.js +5 -1
  20. package/dist/es2019/entry-points/fhs-rollout.js +3 -0
  21. package/dist/es2019/index.js +3 -0
  22. package/dist/es2019/ui/fhs-rollout/is-custom-is-fhs-enabled-context.js +9 -0
  23. package/dist/es2019/ui/fhs-rollout/is-fhs-enabled-context.js +9 -0
  24. package/dist/es2019/ui/fhs-rollout/is-fhs-enabled-provider.js +23 -0
  25. package/dist/es2019/ui/fhs-rollout/types.js +0 -0
  26. package/dist/es2019/ui/fhs-rollout/use-is-fhs-enabled.js +12 -0
  27. package/dist/es2019/ui/page-layout/panel-splitter/panel-splitter.js +9 -2
  28. package/dist/es2019/ui/page-layout/side-nav/side-nav-content.js +7 -2
  29. package/dist/es2019/ui/page-layout/side-nav/side-nav.js +10 -6
  30. package/dist/es2019/ui/page-layout/side-nav/toggle-button.js +12 -3
  31. package/dist/es2019/ui/page-layout/side-nav/use-side-nav-toggle-keyboard-shortcut.js +7 -3
  32. package/dist/es2019/ui/page-layout/top-nav/top-nav-end.js +5 -1
  33. package/dist/es2019/ui/page-layout/top-nav/top-nav-middle.js +5 -1
  34. package/dist/es2019/ui/page-layout/top-nav/top-nav-start.js +14 -10
  35. package/dist/es2019/ui/page-layout/top-nav/top-nav.js +8 -4
  36. package/dist/es2019/ui/top-nav-items/nav-logo/app-logo.js +7 -3
  37. package/dist/es2019/ui/top-nav-items/search.js +40 -34
  38. package/dist/esm/entry-points/fhs-rollout.js +3 -0
  39. package/dist/esm/index.js +3 -0
  40. package/dist/esm/ui/fhs-rollout/is-custom-is-fhs-enabled-context.js +9 -0
  41. package/dist/esm/ui/fhs-rollout/is-fhs-enabled-context.js +11 -0
  42. package/dist/esm/ui/fhs-rollout/is-fhs-enabled-provider.js +22 -0
  43. package/dist/esm/ui/fhs-rollout/types.js +0 -0
  44. package/dist/esm/ui/fhs-rollout/use-is-fhs-enabled.js +12 -0
  45. package/dist/esm/ui/page-layout/panel-splitter/panel-splitter.js +9 -2
  46. package/dist/esm/ui/page-layout/side-nav/side-nav-content.js +7 -2
  47. package/dist/esm/ui/page-layout/side-nav/side-nav.js +10 -6
  48. package/dist/esm/ui/page-layout/side-nav/toggle-button.js +12 -3
  49. package/dist/esm/ui/page-layout/side-nav/use-side-nav-toggle-keyboard-shortcut.js +7 -3
  50. package/dist/esm/ui/page-layout/top-nav/top-nav-end.js +5 -1
  51. package/dist/esm/ui/page-layout/top-nav/top-nav-middle.js +5 -1
  52. package/dist/esm/ui/page-layout/top-nav/top-nav-start.js +14 -10
  53. package/dist/esm/ui/page-layout/top-nav/top-nav.js +8 -4
  54. package/dist/esm/ui/top-nav-items/nav-logo/app-logo.js +7 -3
  55. package/dist/esm/ui/top-nav-items/search.js +5 -1
  56. package/dist/types/entry-points/fhs-rollout.d.ts +3 -0
  57. package/dist/types/index.d.ts +3 -0
  58. package/dist/types/ui/fhs-rollout/is-custom-is-fhs-enabled-context.d.ts +7 -0
  59. package/dist/types/ui/fhs-rollout/is-fhs-enabled-context.d.ts +8 -0
  60. package/dist/types/ui/fhs-rollout/is-fhs-enabled-provider.d.ts +10 -0
  61. package/dist/types/ui/fhs-rollout/types.d.ts +1 -0
  62. package/dist/types/ui/fhs-rollout/use-is-fhs-enabled.d.ts +6 -0
  63. package/dist/types/ui/page-layout/panel-splitter/panel-splitter.d.ts +1 -1
  64. package/dist/types/ui/page-layout/panel-splitter/side-nav-panel-splitter.d.ts +1 -1
  65. package/dist/types/ui/page-layout/root.d.ts +1 -1
  66. package/dist/types/ui/page-layout/side-nav/side-nav.d.ts +1 -1
  67. package/dist/types-ts4.5/entry-points/fhs-rollout.d.ts +3 -0
  68. package/dist/types-ts4.5/index.d.ts +3 -0
  69. package/dist/types-ts4.5/ui/fhs-rollout/is-custom-is-fhs-enabled-context.d.ts +7 -0
  70. package/dist/types-ts4.5/ui/fhs-rollout/is-fhs-enabled-context.d.ts +8 -0
  71. package/dist/types-ts4.5/ui/fhs-rollout/is-fhs-enabled-provider.d.ts +10 -0
  72. package/dist/types-ts4.5/ui/fhs-rollout/types.d.ts +1 -0
  73. package/dist/types-ts4.5/ui/fhs-rollout/use-is-fhs-enabled.d.ts +6 -0
  74. package/dist/types-ts4.5/ui/page-layout/panel-splitter/panel-splitter.d.ts +1 -1
  75. package/dist/types-ts4.5/ui/page-layout/panel-splitter/side-nav-panel-splitter.d.ts +1 -1
  76. package/dist/types-ts4.5/ui/page-layout/root.d.ts +1 -1
  77. package/dist/types-ts4.5/ui/page-layout/side-nav/side-nav.d.ts +1 -1
  78. package/fhs-rollout/package.json +17 -0
  79. package/package.json +7 -4
@@ -14,6 +14,7 @@ var _react2 = require("@compiled/react");
14
14
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
15
15
  var _compiled = require("@atlaskit/primitives/compiled");
16
16
  var _tooltip = _interopRequireDefault(require("@atlaskit/tooltip"));
17
+ var _useIsFhsEnabled = require("../../fhs-rollout/use-is-fhs-enabled");
17
18
  var _hasCustomThemeContext = require("../themed/has-custom-theme-context");
18
19
  var _logoRenderer = require("./logo-renderer");
19
20
  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); }
@@ -53,6 +54,9 @@ var AppLogo = exports.AppLogo = function AppLogo(_ref) {
53
54
  href = _ref.href,
54
55
  icon = _ref.icon,
55
56
  onClick = _ref.onClick;
57
+ var isFhsEnabled = (0, _platformFeatureFlags.fg)('navx-2566-implement-fhs-rollout') ?
58
+ // eslint-disable-next-line react-hooks/rules-of-hooks
59
+ (0, _useIsFhsEnabled.useIsFhsEnabled)() : (0, _platformFeatureFlags.fg)('navx-full-height-sidebar');
56
60
  var ref = (0, _react.useRef)(null);
57
61
  var nameRef = (0, _react.useRef)(null);
58
62
  var hasCustomTheme = (0, _hasCustomThemeContext.useHasCustomTheme)();
@@ -71,14 +75,14 @@ var AppLogo = exports.AppLogo = function AppLogo(_ref) {
71
75
  // @ts-expect-error - non-standard values for `borderRadius` and the custom theming interaction states
72
76
  // eslint-disable-next-line @compiled/no-suppress-xcss
73
77
  ,
74
- xcss: (0, _react2.cx)(anchorStyles.root, hasCustomTheme ? anchorStyles.interactionStatesCustomTheming : anchorStyles.interactionStates, (0, _platformFeatureFlags.fg)('navx-full-height-sidebar') && anchorStyles.fullHeightSidebar),
78
+ xcss: (0, _react2.cx)(anchorStyles.root, hasCustomTheme ? anchorStyles.interactionStatesCustomTheming : anchorStyles.interactionStates, isFhsEnabled && anchorStyles.fullHeightSidebar),
75
79
  onClick: onClick
76
80
  }, /*#__PURE__*/_react.default.createElement(_compiled.Inline, {
77
81
  space: "space.075",
78
82
  alignBlock: "center",
79
- xcss: (0, _react2.cx)(logoWrapperStyles.root, (0, _platformFeatureFlags.fg)('navx-full-height-sidebar') && logoWrapperStyles.fullHeightSidebar)
83
+ xcss: (0, _react2.cx)(logoWrapperStyles.root, isFhsEnabled && logoWrapperStyles.fullHeightSidebar)
80
84
  }, /*#__PURE__*/_react.default.createElement("div", {
81
- className: (0, _runtime.ax)([iconContainerStyles.root, (0, _platformFeatureFlags.fg)('navx-full-height-sidebar') && iconContainerStyles.fullHeightSidebar])
85
+ className: (0, _runtime.ax)([iconContainerStyles.root, isFhsEnabled && iconContainerStyles.fullHeightSidebar])
82
86
  }, /*#__PURE__*/_react.default.createElement(_logoRenderer.LogoRenderer
83
87
  // Top nav always uses the new logo design
84
88
  , {
@@ -14,6 +14,7 @@ var _css = require("@atlaskit/css");
14
14
  var _search = _interopRequireDefault(require("@atlaskit/icon/core/search"));
15
15
  var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
16
16
  var _compiled = require("@atlaskit/primitives/compiled");
17
+ var _useIsFhsEnabled = require("../fhs-rollout/use-is-fhs-enabled");
17
18
  var _migration = require("./themed/migration");
18
19
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
19
20
  var styles = {
@@ -37,6 +38,9 @@ var Search = exports.Search = function Search(_ref) {
37
38
  elemAfter = _ref.elemAfter,
38
39
  interactionName = _ref.interactionName,
39
40
  ariaHaspopup = _ref['aria-haspopup'];
41
+ var isFhsEnabled = (0, _platformFeatureFlags.fg)('navx-2566-implement-fhs-rollout') ?
42
+ // eslint-disable-next-line react-hooks/rules-of-hooks
43
+ (0, _useIsFhsEnabled.useIsFhsEnabled)() : (0, _platformFeatureFlags.fg)('navx-full-height-sidebar');
40
44
  return /*#__PURE__*/_react.default.createElement(_react.Fragment, null, /*#__PURE__*/_react.default.createElement(_compiled.Pressable, {
41
45
  style: {
42
46
  // To win the specificity war against Emotion we move this into inline styles
@@ -46,7 +50,7 @@ var Search = exports.Search = function Search(_ref) {
46
50
  border: "var(--ds-border-width, 1px)".concat(" solid ", "var(--ds-border-input, #8C8F97)")
47
51
  },
48
52
  onClick: onClick,
49
- xcss: (0, _css.cx)(styles.root, (0, _platformFeatureFlags.fg)('navx-full-height-sidebar') && styles.fullHeightSidebar),
53
+ xcss: (0, _css.cx)(styles.root, isFhsEnabled && styles.fullHeightSidebar),
50
54
  interactionName: interactionName,
51
55
  "aria-haspopup": ariaHaspopup
52
56
  }, /*#__PURE__*/_react.default.createElement("span", {
@@ -0,0 +1,3 @@
1
+ export { IsFhsEnabledContext } from '../ui/fhs-rollout/is-fhs-enabled-context';
2
+ export { IsFhsEnabledProvider } from '../ui/fhs-rollout/is-fhs-enabled-provider';
3
+ export { useIsFhsEnabled } from '../ui/fhs-rollout/use-is-fhs-enabled';
@@ -1,3 +1,6 @@
1
+ export { IsFhsEnabledContext } from './ui/fhs-rollout/is-fhs-enabled-context';
2
+ export { IsFhsEnabledProvider } from './ui/fhs-rollout/is-fhs-enabled-provider';
3
+ export { useIsFhsEnabled } from './ui/fhs-rollout/use-is-fhs-enabled';
1
4
  export { ExpandableMenuItem } from './ui/menu-item/expandable-menu-item/expandable-menu-item';
2
5
  export { ExpandableMenuItemTrigger } from './ui/menu-item/expandable-menu-item/expandable-menu-item-trigger';
3
6
  export { ExpandableMenuItemContent } from './ui/menu-item/expandable-menu-item/expandable-menu-item-content';
@@ -0,0 +1,9 @@
1
+ import { createContext } from 'react';
2
+
3
+ /**
4
+ * __Is custom is fhs enabled context__
5
+ *
6
+ * Tracks if a custom value has been provided for `IsFhsEnabledContext`.
7
+ * Used to prevent nesting of the `IsFhsEnabledProvider`.
8
+ */
9
+ export const IsCustomIsFhsEnabledContext = /*#__PURE__*/createContext(false);
@@ -0,0 +1,9 @@
1
+ import { createContext } from 'react';
2
+ import { fg } from '@atlaskit/platform-feature-flags';
3
+ /**
4
+ * __Is fhs enabled context__
5
+ *
6
+ * Tracks is FHS enabled.
7
+ * Defaults to feature gate 'navx-full-height-sidebar'.
8
+ */
9
+ export const IsFhsEnabledContext = /*#__PURE__*/createContext(() => fg('navx-full-height-sidebar'));
@@ -0,0 +1,23 @@
1
+ import React, { useContext } from 'react';
2
+ import { IsCustomIsFhsEnabledContext } from './is-custom-is-fhs-enabled-context';
3
+ import { IsFhsEnabledContext } from './is-fhs-enabled-context';
4
+
5
+ /**
6
+ * __Is fhs enabled provider__
7
+ *
8
+ * Used to provide a custom value for is FHS enabled.
9
+ */
10
+ export const IsFhsEnabledProvider = ({
11
+ children,
12
+ value
13
+ }) => {
14
+ const isCustomIsFhsEnabled = useContext(IsCustomIsFhsEnabledContext);
15
+ if (isCustomIsFhsEnabled) {
16
+ throw new Error('A custom value for IsFhsEnabledContext has already been provided');
17
+ }
18
+ return /*#__PURE__*/React.createElement(IsCustomIsFhsEnabledContext.Provider, {
19
+ value: true
20
+ }, /*#__PURE__*/React.createElement(IsFhsEnabledContext.Provider, {
21
+ value: value
22
+ }, children));
23
+ };
File without changes
@@ -0,0 +1,12 @@
1
+ import { useContext } from 'react';
2
+ import { IsFhsEnabledContext } from './is-fhs-enabled-context';
3
+
4
+ /**
5
+ * __Use is fhs enabled__
6
+ *
7
+ * Retrieves is FHS enabled.
8
+ */
9
+ export const useIsFhsEnabled = () => {
10
+ const isFhsEnabled = useContext(IsFhsEnabledContext);
11
+ return typeof isFhsEnabled === 'boolean' ? isFhsEnabled : isFhsEnabled();
12
+ };
@@ -17,6 +17,7 @@ import { disableNativeDragPreview } from '@atlaskit/pragmatic-drag-and-drop/elem
17
17
  import { preventUnhandled } from '@atlaskit/pragmatic-drag-and-drop/prevent-unhandled';
18
18
  import Tooltip from '@atlaskit/tooltip';
19
19
  import VisuallyHidden from '@atlaskit/visually-hidden';
20
+ import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
20
21
  import { OnDoubleClickContext, PanelSplitterContext } from './context';
21
22
  import { convertResizeBoundToPixels } from './convert-resize-bound-to-pixels';
22
23
  import { getPercentageWithinPixelBounds } from './get-percentage-within-pixel-bounds';
@@ -49,7 +50,10 @@ const MaybeTooltip = ({
49
50
  shortcut,
50
51
  children
51
52
  }) => {
52
- if (tooltipContent && fg('navx-full-height-sidebar')) {
53
+ const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
54
+ // eslint-disable-next-line react-hooks/rules-of-hooks
55
+ useIsFhsEnabled() : fg('navx-full-height-sidebar');
56
+ if (tooltipContent && isFhsEnabled) {
53
57
  return /*#__PURE__*/React.createElement(Tooltip, {
54
58
  content: tooltipContent,
55
59
  shortcut: shortcut,
@@ -85,6 +89,9 @@ const PortaledPanelSplitter = ({
85
89
  tooltipContent,
86
90
  shortcut
87
91
  }) => {
92
+ const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
93
+ // eslint-disable-next-line react-hooks/rules-of-hooks
94
+ useIsFhsEnabled() : fg('navx-full-height-sidebar');
88
95
  const splitterRef = useRef(null);
89
96
  const labelId = useId();
90
97
  // Separate state used for the input range width to remove the UI's dependency on the "persisted" layout state value being updated
@@ -288,7 +295,7 @@ const PortaledPanelSplitter = ({
288
295
  ref: splitterRef,
289
296
  "data-testid": testId,
290
297
  onDoubleClick: onDoubleClick,
291
- className: ax([grabAreaStyles.root, fg('navx-full-height-sidebar') && grabAreaStyles.fullHeightSidebar])
298
+ className: ax([grabAreaStyles.root, isFhsEnabled && grabAreaStyles.fullHeightSidebar])
292
299
  }, /*#__PURE__*/React.createElement(VisuallyHidden, null, /*#__PURE__*/React.createElement("input", {
293
300
  type: "range",
294
301
  value: rangeInputValue,
@@ -4,6 +4,8 @@ import { ax, ix } from "@compiled/react/runtime";
4
4
  import React, { forwardRef, useMemo, useRef } from 'react';
5
5
  import mergeRefs from '@atlaskit/ds-lib/merge-refs';
6
6
  import { fg } from '@atlaskit/platform-feature-flags';
7
+ import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
8
+
7
9
  /**
8
10
  * The main content of the side nav, filling up the middle section. It acts as a scroll container.
9
11
  *
@@ -36,12 +38,15 @@ function _SideNavContent({
36
38
  children,
37
39
  testId
38
40
  }, forwardedRef) {
41
+ const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
42
+ // eslint-disable-next-line react-hooks/rules-of-hooks
43
+ useIsFhsEnabled() : fg('navx-full-height-sidebar');
39
44
  const internalRef = useRef(null);
40
45
  const mergedRef = useMemo(() => mergeRefs([internalRef, forwardedRef]), [forwardedRef]);
41
46
  return /*#__PURE__*/React.createElement("div", {
42
- ref: fg('navx-full-height-sidebar') ? mergedRef : forwardedRef,
47
+ ref: isFhsEnabled ? mergedRef : forwardedRef,
43
48
  "data-testid": testId,
44
- className: ax([styles.scrollContainer, fg('navx-full-height-sidebar') && fullHeightSidebarStyles.scrollContainer])
49
+ className: ax([styles.scrollContainer, isFhsEnabled && fullHeightSidebarStyles.scrollContainer])
45
50
  }, /*#__PURE__*/React.createElement("div", {
46
51
  className: ax([styles.paddingContainer])
47
52
  }, children));
@@ -15,6 +15,7 @@ import { monitorForElements } from '@atlaskit/pragmatic-drag-and-drop/element/ad
15
15
  import { media } from '@atlaskit/primitives/responsive';
16
16
  import { useSkipLinkInternal } from '../../../context/skip-links/skip-links-context';
17
17
  import { TopNavStartElement } from '../../../context/top-nav-start/top-nav-start-context';
18
+ import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
18
19
  import { bannerMountedVar, contentHeightWhenFixed, contentInsetBlockStart, localSlotLayers, sideNavLiveWidthVar, sideNavPanelSplitterId, sideNavVar, topNavMountedVar, UNSAFE_sideNavLayoutVar } from '../constants';
19
20
  import { DangerouslyHoistSlotSizes } from '../hoist-slot-sizes-context';
20
21
  import { DangerouslyHoistCssVarToDocumentRoot } from '../hoist-utils';
@@ -90,6 +91,9 @@ function SideNavInternal({
90
91
  canToggleWithShortcut
91
92
  }) {
92
93
  var _sideNavState$lastTri;
94
+ const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
95
+ // eslint-disable-next-line react-hooks/rules-of-hooks
96
+ useIsFhsEnabled() : fg('navx-full-height-sidebar');
93
97
  const id = useLayoutId({
94
98
  providedId
95
99
  });
@@ -291,9 +295,9 @@ function SideNavInternal({
291
295
  }
292
296
  if (action === 'ready-to-close') {
293
297
  // If there are no open layers, we can close the flyout.
294
- if (openLayerObserver.getCount({
298
+ if ((openLayerObserver === null || openLayerObserver === void 0 ? void 0 : openLayerObserver.getCount({
295
299
  namespace: openLayerObserverSideNavNamespace
296
- }) === 0) {
300
+ })) === 0) {
297
301
  close();
298
302
  return;
299
303
  }
@@ -654,7 +658,7 @@ function SideNavInternal({
654
658
  // Close the flyout if there are no more layers open and the user is not mousing over the
655
659
  // flyout areas (side nav, TopNavStart element)
656
660
 
657
- return openLayerObserver.onChange(({
661
+ return openLayerObserver === null || openLayerObserver === void 0 ? void 0 : openLayerObserver.onChange(({
658
662
  count
659
663
  }) => {
660
664
  if (flyoutStateRef.current.type === 'ready-to-close' && count === 0) {
@@ -701,13 +705,13 @@ function SideNavInternal({
701
705
  // Otherwise, the `@starting-style` rule will cause the sidebar to slide in initially.
702
706
  const isFirstRenderRef = useRef(true);
703
707
  useEffect(() => {
704
- if (!fg('navx-full-height-sidebar')) {
708
+ if (!isFhsEnabled) {
705
709
  return;
706
710
  }
707
711
  if (isFirstRenderRef.current) {
708
712
  isFirstRenderRef.current = false;
709
713
  }
710
- }, []);
714
+ }, [isFhsEnabled]);
711
715
 
712
716
  // This is only used for the regular expand and collapse animations, not the flyout animations.
713
717
  const shouldShowSidebarToggleAnimation =
@@ -744,7 +748,7 @@ function SideNavInternal({
744
748
  },
745
749
  ref: mergedRef,
746
750
  "data-testid": testId,
747
- className: ax([styles.root, isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileOnly, !isExpandedOnDesktop && isExpandedOnMobile && !isFlyoutVisible && styles.hiddenDesktopOnly, !isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileAndDesktop, fg('navx-full-height-sidebar') && styles.animationRTLSupport, shouldShowSidebarToggleAnimation && fg('navx-full-height-sidebar') && styles.animationBaseStyles, isExpandedOnMobile && shouldShowSidebarToggleAnimation && fg('navx-full-height-sidebar') && styles.expandAnimationMobile, !isExpandedOnMobile && shouldShowSidebarToggleAnimation && fg('navx-full-height-sidebar') && styles.collapseAnimationMobile, isExpandedOnDesktop && shouldShowSidebarToggleAnimation && fg('navx-full-height-sidebar') && styles.expandAnimationDesktop, !isExpandedOnDesktop && shouldShowSidebarToggleAnimation && fg('navx-full-height-sidebar') && styles.collapseAnimationDesktop, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && !fg('navx-full-height-sidebar') && styles.flyoutOpen, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && !fg('navx-full-height-sidebar') && styles.flyoutAnimateClosed, ((sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' || (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close') && !isFirefox && fg('navx-full-height-sidebar') && styles.flyoutBaseStylesFullHeightSidebar, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && !isFirefox && fg('navx-full-height-sidebar') && styles.flyoutAnimateClosedFullHeightSidebar, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && !isFirefox && fg('navx-full-height-sidebar') && styles.flyoutOpenFullHeightSidebar, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && !isFirefox && fg('navx-full-height-sidebar') && styles.flyoutAnimateClosedFullHeightSidebar, isFlyoutClosed && fg('navx-full-height-sidebar') && styles.fullHeightSidebar])
751
+ className: ax([styles.root, isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileOnly, !isExpandedOnDesktop && isExpandedOnMobile && !isFlyoutVisible && styles.hiddenDesktopOnly, !isExpandedOnDesktop && !isExpandedOnMobile && !isFlyoutVisible && styles.hiddenMobileAndDesktop, isFhsEnabled && styles.animationRTLSupport, shouldShowSidebarToggleAnimation && isFhsEnabled && styles.animationBaseStyles, isExpandedOnMobile && shouldShowSidebarToggleAnimation && isFhsEnabled && styles.expandAnimationMobile, !isExpandedOnMobile && shouldShowSidebarToggleAnimation && isFhsEnabled && styles.collapseAnimationMobile, isExpandedOnDesktop && shouldShowSidebarToggleAnimation && isFhsEnabled && styles.expandAnimationDesktop, !isExpandedOnDesktop && shouldShowSidebarToggleAnimation && isFhsEnabled && styles.collapseAnimationDesktop, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && !isFhsEnabled && styles.flyoutOpen, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && !isFhsEnabled && styles.flyoutAnimateClosed, ((sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' || (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close') && !isFirefox && isFhsEnabled && styles.flyoutBaseStylesFullHeightSidebar, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && !isFirefox && isFhsEnabled && styles.flyoutAnimateClosedFullHeightSidebar, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'open' && !isFirefox && isFhsEnabled && styles.flyoutOpenFullHeightSidebar, (sideNavState === null || sideNavState === void 0 ? void 0 : sideNavState.flyout) === 'triggered-animate-close' && !isFirefox && isFhsEnabled && styles.flyoutAnimateClosedFullHeightSidebar, isFlyoutClosed && isFhsEnabled && styles.fullHeightSidebar])
748
752
  }), /*#__PURE__*/React.createElement(DangerouslyHoistCssVarToDocumentRoot, {
749
753
  variableName: sideNavLiveWidthVar,
750
754
  value: "0px",
@@ -6,7 +6,9 @@ import { bind } from 'bind-event-listener';
6
6
  import { useAnalyticsEvents } from '@atlaskit/analytics-next';
7
7
  import SidebarCollapseIcon from '@atlaskit/icon/core/sidebar-collapse';
8
8
  import SidebarExpandIcon from '@atlaskit/icon/core/sidebar-expand';
9
+ import { useOpenLayerObserver } from '@atlaskit/layering/experimental/open-layer-observer';
9
10
  import { fg } from '@atlaskit/platform-feature-flags';
11
+ import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
10
12
  import { IconButton } from '../../top-nav-items/themed/migration';
11
13
  import { useIsSideNavShortcutEnabled } from './is-side-nav-shortcut-enabled-context';
12
14
  import { sideNavToggleTooltipKeyboardShortcut } from './side-nav-toggle-tooltip-keyboard-shortcut';
@@ -36,6 +38,9 @@ export const SideNavToggleButton = ({
36
38
  interactionName,
37
39
  onClick
38
40
  }) => {
41
+ const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
42
+ // eslint-disable-next-line react-hooks/rules-of-hooks
43
+ useIsFhsEnabled() : fg('navx-full-height-sidebar');
39
44
  const {
40
45
  isExpandedOnDesktop: isSideNavExpandedOnDesktop,
41
46
  isExpandedOnMobile: isSideNavExpandedOnMobile
@@ -92,12 +97,16 @@ export const SideNavToggleButton = ({
92
97
  const {
93
98
  createAnalyticsEvent
94
99
  } = useAnalyticsEvents();
100
+ const openLayerObserver = useOpenLayerObserver();
95
101
  const handleClick = useCallback((event, analyticsEvent) => {
96
102
  onClick === null || onClick === void 0 ? void 0 : onClick(event, analyticsEvent, {
97
103
  isSideNavVisible: isSideNavExpanded
98
104
  });
99
105
  toggleVisibility();
100
- }, [onClick, isSideNavExpanded, toggleVisibility]);
106
+ if (fg('navx-full-height-sidebar')) {
107
+ openLayerObserver === null || openLayerObserver === void 0 ? void 0 : openLayerObserver.closeLayers();
108
+ }
109
+ }, [onClick, isSideNavExpanded, toggleVisibility, openLayerObserver]);
101
110
  const handlePointerEnter = useCallback(() => {
102
111
  if (!fg('platform_dst_nav4_fhs_instrumentation_1')) {
103
112
  return;
@@ -140,14 +149,14 @@ export const SideNavToggleButton = ({
140
149
  }, isSideNavExpanded ? /*#__PURE__*/React.createElement(SidebarCollapseIcon, props) : /*#__PURE__*/React.createElement(SidebarExpandIcon, props));
141
150
  const isShortcutEnabled = useIsSideNavShortcutEnabled();
142
151
  const tooltipProps = useMemo(() => {
143
- if (fg('navx-full-height-sidebar')) {
152
+ if (isFhsEnabled) {
144
153
  return {
145
154
  ...toggleButtonTooltipOptions,
146
155
  shortcut: isShortcutEnabled ? sideNavToggleTooltipKeyboardShortcut : undefined
147
156
  };
148
157
  }
149
158
  return toggleButtonTooltipOptions;
150
- }, [isShortcutEnabled]);
159
+ }, [isFhsEnabled, isShortcutEnabled]);
151
160
  return /*#__PURE__*/React.createElement(IconButton, {
152
161
  appearance: "subtle",
153
162
  label: isSideNavExpanded ? collapseLabel : expandLabel,
@@ -3,6 +3,7 @@ import { bind } from 'bind-event-listener';
3
3
  import useStableRef from '@atlaskit/ds-lib/use-stable-ref';
4
4
  import { useOpenLayerObserver } from '@atlaskit/layering/experimental/open-layer-observer';
5
5
  import { fg } from '@atlaskit/platform-feature-flags';
6
+ import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
6
7
  import { useIsSideNavShortcutEnabled } from './is-side-nav-shortcut-enabled-context';
7
8
  import { useToggleSideNav } from './use-toggle-side-nav';
8
9
 
@@ -12,6 +13,9 @@ import { useToggleSideNav } from './use-toggle-side-nav';
12
13
  export function useSideNavToggleKeyboardShortcut({
13
14
  canToggleWithShortcut
14
15
  }) {
16
+ const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
17
+ // eslint-disable-next-line react-hooks/rules-of-hooks
18
+ useIsFhsEnabled() : fg('navx-full-height-sidebar');
15
19
  const openLayerObserver = useOpenLayerObserver();
16
20
  const toggleVisibilityByShortcut = useToggleSideNav({
17
21
  trigger: 'keyboard'
@@ -19,7 +23,7 @@ export function useSideNavToggleKeyboardShortcut({
19
23
  const canToggleWithShortcutStableRef = useStableRef(canToggleWithShortcut);
20
24
  const isSideNavShortcutEnabled = useIsSideNavShortcutEnabled();
21
25
  useEffect(() => {
22
- if (!fg('navx-full-height-sidebar')) {
26
+ if (!isFhsEnabled) {
23
27
  return;
24
28
  }
25
29
  if (!isSideNavShortcutEnabled) {
@@ -38,7 +42,7 @@ export function useSideNavToggleKeyboardShortcut({
38
42
  // Ignore repeated keydown events from holding down the keys
39
43
  return;
40
44
  }
41
- if (openLayerObserver.getCount({
45
+ if (openLayerObserver && openLayerObserver.getCount({
42
46
  type: 'modal'
43
47
  }) > 0) {
44
48
  // Return early if there are any open modals
@@ -48,5 +52,5 @@ export function useSideNavToggleKeyboardShortcut({
48
52
  }
49
53
  }
50
54
  });
51
- }, [canToggleWithShortcutStableRef, openLayerObserver, toggleVisibilityByShortcut, isSideNavShortcutEnabled]);
55
+ }, [canToggleWithShortcutStableRef, isFhsEnabled, isSideNavShortcutEnabled, openLayerObserver, toggleVisibilityByShortcut]);
52
56
  }
@@ -10,6 +10,7 @@ import { fg } from '@atlaskit/platform-feature-flags';
10
10
  import Popup from '@atlaskit/popup';
11
11
  import { UNSAFE_useMediaQuery as useMediaQuery } from '@atlaskit/primitives/compiled';
12
12
  import { List } from '../../../components/list';
13
+ import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
13
14
  import { HasCustomThemeContext } from '../../top-nav-items/themed/has-custom-theme-context';
14
15
  import { IconButton } from '../../top-nav-items/themed/migration';
15
16
  const containerStyles = {
@@ -36,6 +37,9 @@ export function TopNavEnd({
36
37
  label = 'Actions',
37
38
  showMoreButtonLabel = 'Show more'
38
39
  }) {
40
+ const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
41
+ // eslint-disable-next-line react-hooks/rules-of-hooks
42
+ useIsFhsEnabled() : fg('navx-full-height-sidebar');
39
43
  const [isOpen, setIsOpen] = useState(false);
40
44
  // Always setting to `false` for the initial render (will flip in an effect for mobile)
41
45
  const [isMobile, setIsMobile] = useState(false);
@@ -54,7 +58,7 @@ export function TopNavEnd({
54
58
  }, [query]);
55
59
  return /*#__PURE__*/React.createElement("nav", {
56
60
  "aria-label": label,
57
- className: ax([containerStyles.root, fg('navx-full-height-sidebar') && containerStyles.fullHeightSidebar, fg('team25-eu-jira-logo-updates-csm-jsm') && containerStyles.jiraProductLogoUpdate])
61
+ className: ax([containerStyles.root, isFhsEnabled && containerStyles.fullHeightSidebar, fg('team25-eu-jira-logo-updates-csm-jsm') && containerStyles.jiraProductLogoUpdate])
58
62
  }, isMobile ? /*#__PURE__*/React.createElement(Popup, {
59
63
  isOpen: isOpen,
60
64
  onClose: () => setIsOpen(false),
@@ -3,6 +3,7 @@ import "./top-nav-middle.compiled.css";
3
3
  import { ax, ix } from "@compiled/react/runtime";
4
4
  import React from 'react';
5
5
  import { fg } from '@atlaskit/platform-feature-flags';
6
+ import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
6
7
  const styles = {
7
8
  root: "_zulpu2gc _yyhycs5v _1bsb1osq _4cvr1h6o _1e0c1txw _1bahh9n0 _181n11p5 _1j8b15b0 _lagd1bp4 _1t4c1ris _12e8h9n0",
8
9
  fullHeightSidebar: "_lcxv1wug"
@@ -19,7 +20,10 @@ const styles = {
19
20
  export function TopNavMiddle({
20
21
  children
21
22
  }) {
23
+ const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
24
+ // eslint-disable-next-line react-hooks/rules-of-hooks
25
+ useIsFhsEnabled() : fg('navx-full-height-sidebar');
22
26
  return /*#__PURE__*/React.createElement("div", {
23
- className: ax([styles.root, fg('navx-full-height-sidebar') && styles.fullHeightSidebar])
27
+ className: ax([styles.root, isFhsEnabled && styles.fullHeightSidebar])
24
28
  }, children);
25
29
  }
@@ -6,6 +6,7 @@ import useStableRef from '@atlaskit/ds-lib/use-stable-ref';
6
6
  import { fg } from '@atlaskit/platform-feature-flags';
7
7
  import { UNSAFE_useMediaQuery } from '@atlaskit/primitives/compiled';
8
8
  import { TopNavStartAttachRef } from '../../../context/top-nav-start/top-nav-start-context';
9
+ import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
9
10
  import { useSideNavVisibility } from '../side-nav/use-side-nav-visibility';
10
11
  import { SideNavVisibilityState } from '../side-nav/visibility-context';
11
12
 
@@ -24,7 +25,7 @@ const flexGap = "var(--ds-space-050, 4px)";
24
25
  /**
25
26
  * Styles for the TopNavStart element.
26
27
  *
27
- * When `navx-full-height-sidebar` is enabled this is the styling for the inner element,
28
+ * When `useIsFhsEnabled` is true this is the styling for the inner element,
28
29
  * which re-enables pointer events.
29
30
  */
30
31
  const innerStyles = {
@@ -38,7 +39,7 @@ const innerStyles = {
38
39
  * Styles for the outer element, that does not have re-enabled pointer events and spans the entire
39
40
  * width of the TopNavStart area.
40
41
  *
41
- * This wrapper element is only rendered when `navx-full-height-sidebar` is enabled.
42
+ * This wrapper element is only rendered when `useIsFhsEnabled` is true.
42
43
  */
43
44
  const wrapperStyles = {
44
45
  root: "_vchhusvi _bozgutpp _4t3i1osq",
@@ -132,6 +133,9 @@ export function TopNavStart({
132
133
  testId,
133
134
  sideNavToggleButton
134
135
  }) {
136
+ const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
137
+ // eslint-disable-next-line react-hooks/rules-of-hooks
138
+ useIsFhsEnabled() : fg('navx-full-height-sidebar');
135
139
  const ref = useContext(TopNavStartAttachRef);
136
140
  const elementRef = useRef(null);
137
141
 
@@ -173,7 +177,7 @@ export function TopNavStart({
173
177
  const isFirstRenderRef = useRef(true);
174
178
  const sideNavState = useContext(SideNavVisibilityState);
175
179
  useEffect(() => {
176
- if (!fg('navx-full-height-sidebar')) {
180
+ if (!isFhsEnabled) {
177
181
  return;
178
182
  }
179
183
 
@@ -186,13 +190,13 @@ export function TopNavStart({
186
190
  if (isFirstRenderRef.current) {
187
191
  isFirstRenderRef.current = false;
188
192
  }
189
- }, [sideNavState]);
193
+ }, [isFhsEnabled, sideNavState]);
190
194
 
191
195
  // Using a stable ref to avoid re-running the animation layout effect when the toggle button prop value changes, which
192
196
  // can happen a lot (e.g. if the parent re-renders)
193
197
  const sideNavToggleButtonStableRef = useStableRef(sideNavToggleButton);
194
198
  useLayoutEffect(() => {
195
- if (!fg('navx-full-height-sidebar')) {
199
+ if (!isFhsEnabled) {
196
200
  return;
197
201
  }
198
202
 
@@ -229,19 +233,19 @@ export function TopNavStart({
229
233
  });
230
234
 
231
235
  // This layout effect is called when the sidebar's desktop expansion state changes.
232
- }, [isExpandedOnDesktop, sideNavToggleButtonStableRef]);
233
- const TopNavStartInner = fg('navx-full-height-sidebar') ? TopNavStartInnerFHS : TopNavStartInnerOld;
236
+ }, [isExpandedOnDesktop, isFhsEnabled, sideNavToggleButtonStableRef]);
237
+ const TopNavStartInner = isFhsEnabled ? TopNavStartInnerFHS : TopNavStartInnerOld;
234
238
  return /*#__PURE__*/React.createElement(TopNavStartInner, {
235
239
  ref: elementRef,
236
240
  testId: testId
237
- }, !fg('navx-full-height-sidebar') && sideNavToggleButton, sideNavToggleButton && (!isDesktop || !isExpandedOnDesktop) && fg('navx-full-height-sidebar') && /*#__PURE__*/React.createElement("div", {
241
+ }, !isFhsEnabled && sideNavToggleButton, sideNavToggleButton && (!isDesktop || !isExpandedOnDesktop) && isFhsEnabled && /*#__PURE__*/React.createElement("div", {
238
242
  key: sideNavToggleButtonKey,
239
243
  className: ax([!isFirefox && toggleButtonWrapperStyles.root, !isFirefox && animationState.type === 'idle' && toggleButtonWrapperStyles.finalPosition, !isFirefox &&
240
244
  // Timing function is applied when the browser animates to the idle position.
241
245
  animationState.type === 'idle' && toggleButtonWrapperStyles.collapseAnimationTimingFunction, !isFirefox && animationState.type === 'collapse' && toggleButtonWrapperStyles.collapseAnimationStartPosition])
242
- }, sideNavToggleButton), fg('navx-full-height-sidebar') ? /*#__PURE__*/React.createElement("div", {
246
+ }, sideNavToggleButton), isFhsEnabled ? /*#__PURE__*/React.createElement("div", {
243
247
  className: ax([childrenWrapperStyles.root, !isFirefox && childrenWrapperStyles.animationBaseStyles, !isFirefox && animationState.type === 'idle' && childrenWrapperStyles.finalPosition, !isFirefox && animationState.type === 'expand' && childrenWrapperStyles.expandAnimationStartPosition, !isFirefox && animationState.type === 'collapse' && childrenWrapperStyles.collapseAnimationStartPosition])
244
- }, children) : children, sideNavToggleButton && isDesktop && isExpandedOnDesktop && fg('navx-full-height-sidebar') && /*#__PURE__*/React.createElement("div", {
248
+ }, children) : children, sideNavToggleButton && isDesktop && isExpandedOnDesktop && isFhsEnabled && /*#__PURE__*/React.createElement("div", {
245
249
  key: sideNavToggleButtonKey,
246
250
  className: ax([!isFirefox && toggleButtonWrapperStyles.root, toggleButtonWrapperStyles.alignEnd, !isFirefox && animationState.type === 'idle' && toggleButtonWrapperStyles.finalPosition, !isFirefox &&
247
251
  // Timing function is applied when the browser animates to the idle position.
@@ -5,6 +5,7 @@ import { ax, ix } from "@compiled/react/runtime";
5
5
  import { useContext, useMemo } from 'react';
6
6
  import { fg } from '@atlaskit/platform-feature-flags';
7
7
  import { useSkipLink } from '../../../context/skip-links/skip-links-context';
8
+ import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
8
9
  import { HasCustomThemeContext } from '../../top-nav-items/themed/has-custom-theme-context';
9
10
  import { useCustomTheme } from '../../top-nav-items/themed/use-custom-theme';
10
11
  import { bannerMountedVar, localSlotLayers, topNavMountedVar, UNSAFE_topNavVar } from '../constants';
@@ -48,6 +49,9 @@ export function TopNav({
48
49
  id: providedId,
49
50
  UNSAFE_theme
50
51
  }) {
52
+ const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
53
+ // eslint-disable-next-line react-hooks/rules-of-hooks
54
+ useIsFhsEnabled() : fg('navx-full-height-sidebar');
51
55
  const dangerouslyHoistSlotSizes = useContext(DangerouslyHoistSlotSizes);
52
56
  const id = useLayoutId({
53
57
  providedId
@@ -88,21 +92,21 @@ export function TopNav({
88
92
  } = useSideNavVisibility();
89
93
  return /*#__PURE__*/React.createElement(HasCustomThemeContext.Provider, {
90
94
  value: customTheme.isEnabled
91
- }, fg('navx-full-height-sidebar') && /*#__PURE__*/React.createElement("div", {
95
+ }, isFhsEnabled && /*#__PURE__*/React.createElement("div", {
92
96
  "data-layout-slot": true,
93
97
  "aria-hidden": true
94
98
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
95
99
  ,
96
- style: fg('navx-full-height-sidebar') ? backgroundStyle : undefined,
100
+ style: isFhsEnabled ? backgroundStyle : undefined,
97
101
  className: ax([backgroundStyles.root, isExpandedOnDesktop && backgroundStyles.sideNavExpanded])
98
102
  }), /*#__PURE__*/React.createElement("header", {
99
103
  id: id,
100
104
  "data-layout-slot": true,
101
- className: ax([styles.root, fg('navx-full-height-sidebar') && styles.fullHeightSidebar, isExpandedOnDesktop && fg('navx-full-height-sidebar') && styles.fullHeightSidebarExpanded, xcss]),
105
+ className: ax([styles.root, isFhsEnabled && styles.fullHeightSidebar, isExpandedOnDesktop && isFhsEnabled && styles.fullHeightSidebarExpanded, xcss]),
102
106
  "data-testid": testId
103
107
  // eslint-disable-next-line @atlaskit/ui-styling-standard/enforce-style-prop
104
108
  ,
105
- style: fg('navx-full-height-sidebar') ? foregroundStyle : customTheme.isEnabled ? customTheme.style : undefined
109
+ style: isFhsEnabled ? foregroundStyle : customTheme.isEnabled ? customTheme.style : undefined
106
110
  }, /*#__PURE__*/React.createElement(HoistCssVarToLocalGrid, {
107
111
  variableName: topNavMountedVar,
108
112
  value: height
@@ -6,6 +6,7 @@ import { cx } from '@compiled/react';
6
6
  import { fg } from '@atlaskit/platform-feature-flags';
7
7
  import { Anchor, Inline, Text } from '@atlaskit/primitives/compiled';
8
8
  import Tooltip from '@atlaskit/tooltip';
9
+ import { useIsFhsEnabled } from '../../fhs-rollout/use-is-fhs-enabled';
9
10
  import { useHasCustomTheme } from '../themed/has-custom-theme-context';
10
11
  import { LogoRenderer } from './logo-renderer';
11
12
  const anchorStyles = {
@@ -45,6 +46,9 @@ export const AppLogo = ({
45
46
  icon,
46
47
  onClick
47
48
  }) => {
49
+ const isFhsEnabled = fg('navx-2566-implement-fhs-rollout') ?
50
+ // eslint-disable-next-line react-hooks/rules-of-hooks
51
+ useIsFhsEnabled() : fg('navx-full-height-sidebar');
48
52
  const ref = useRef(null);
49
53
  const nameRef = useRef(null);
50
54
  const hasCustomTheme = useHasCustomTheme();
@@ -63,14 +67,14 @@ export const AppLogo = ({
63
67
  // @ts-expect-error - non-standard values for `borderRadius` and the custom theming interaction states
64
68
  // eslint-disable-next-line @compiled/no-suppress-xcss
65
69
  ,
66
- xcss: cx(anchorStyles.root, hasCustomTheme ? anchorStyles.interactionStatesCustomTheming : anchorStyles.interactionStates, fg('navx-full-height-sidebar') && anchorStyles.fullHeightSidebar),
70
+ xcss: cx(anchorStyles.root, hasCustomTheme ? anchorStyles.interactionStatesCustomTheming : anchorStyles.interactionStates, isFhsEnabled && anchorStyles.fullHeightSidebar),
67
71
  onClick: onClick
68
72
  }, /*#__PURE__*/React.createElement(Inline, {
69
73
  space: "space.075",
70
74
  alignBlock: "center",
71
- xcss: cx(logoWrapperStyles.root, fg('navx-full-height-sidebar') && logoWrapperStyles.fullHeightSidebar)
75
+ xcss: cx(logoWrapperStyles.root, isFhsEnabled && logoWrapperStyles.fullHeightSidebar)
72
76
  }, /*#__PURE__*/React.createElement("div", {
73
- className: ax([iconContainerStyles.root, fg('navx-full-height-sidebar') && iconContainerStyles.fullHeightSidebar])
77
+ className: ax([iconContainerStyles.root, isFhsEnabled && iconContainerStyles.fullHeightSidebar])
74
78
  }, /*#__PURE__*/React.createElement(LogoRenderer
75
79
  // Top nav always uses the new logo design
76
80
  , {