@patternfly/react-core 6.7.0-prerelease.2 → 6.7.0-prerelease.3

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 (181) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/components/package.json +1 -1
  3. package/deprecated/package.json +1 -1
  4. package/dist/dynamic/components/AboutModal/package.json +1 -1
  5. package/dist/dynamic/components/Accordion/package.json +1 -1
  6. package/dist/dynamic/components/ActionList/package.json +1 -1
  7. package/dist/dynamic/components/Alert/package.json +1 -1
  8. package/dist/dynamic/components/Avatar/package.json +1 -1
  9. package/dist/dynamic/components/BackToTop/package.json +1 -1
  10. package/dist/dynamic/components/Backdrop/package.json +1 -1
  11. package/dist/dynamic/components/BackgroundImage/package.json +1 -1
  12. package/dist/dynamic/components/Badge/package.json +1 -1
  13. package/dist/dynamic/components/Banner/package.json +1 -1
  14. package/dist/dynamic/components/Brand/package.json +1 -1
  15. package/dist/dynamic/components/Breadcrumb/package.json +1 -1
  16. package/dist/dynamic/components/Button/package.json +1 -1
  17. package/dist/dynamic/components/CalendarMonth/package.json +1 -1
  18. package/dist/dynamic/components/Card/package.json +1 -1
  19. package/dist/dynamic/components/Checkbox/package.json +1 -1
  20. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  21. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  22. package/dist/dynamic/components/Compass/package.json +1 -1
  23. package/dist/dynamic/components/Content/package.json +1 -1
  24. package/dist/dynamic/components/DataList/package.json +1 -1
  25. package/dist/dynamic/components/DatePicker/package.json +1 -1
  26. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  27. package/dist/dynamic/components/Divider/package.json +1 -1
  28. package/dist/dynamic/components/Drawer/package.json +1 -1
  29. package/dist/dynamic/components/Dropdown/package.json +1 -1
  30. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  31. package/dist/dynamic/components/EmptyState/package.json +1 -1
  32. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  33. package/dist/dynamic/components/FileUpload/package.json +1 -1
  34. package/dist/dynamic/components/Form/package.json +1 -1
  35. package/dist/dynamic/components/FormSelect/package.json +1 -1
  36. package/dist/dynamic/components/HelperText/package.json +1 -1
  37. package/dist/dynamic/components/Hero/package.json +1 -1
  38. package/dist/dynamic/components/Hint/package.json +1 -1
  39. package/dist/dynamic/components/Icon/package.json +1 -1
  40. package/dist/dynamic/components/InputGroup/package.json +1 -1
  41. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  42. package/dist/dynamic/components/Label/package.json +1 -1
  43. package/dist/dynamic/components/List/package.json +1 -1
  44. package/dist/dynamic/components/LoginPage/package.json +1 -1
  45. package/dist/dynamic/components/Masthead/package.json +1 -1
  46. package/dist/dynamic/components/Menu/package.json +1 -1
  47. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  48. package/dist/dynamic/components/Modal/package.json +1 -1
  49. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  50. package/dist/dynamic/components/Nav/package.json +1 -1
  51. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  52. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  53. package/dist/dynamic/components/NumberInput/package.json +1 -1
  54. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  55. package/dist/dynamic/components/Page/package.json +1 -1
  56. package/dist/dynamic/components/Pagination/package.json +1 -1
  57. package/dist/dynamic/components/Panel/package.json +1 -1
  58. package/dist/dynamic/components/Popover/package.json +1 -1
  59. package/dist/dynamic/components/Progress/package.json +1 -1
  60. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  61. package/dist/dynamic/components/Radio/package.json +1 -1
  62. package/dist/dynamic/components/SearchInput/package.json +1 -1
  63. package/dist/dynamic/components/Select/package.json +1 -1
  64. package/dist/dynamic/components/Sidebar/package.json +1 -1
  65. package/dist/dynamic/components/SimpleList/package.json +1 -1
  66. package/dist/dynamic/components/Skeleton/package.json +1 -1
  67. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  68. package/dist/dynamic/components/Slider/package.json +1 -1
  69. package/dist/dynamic/components/Spinner/package.json +1 -1
  70. package/dist/dynamic/components/Switch/package.json +1 -1
  71. package/dist/dynamic/components/Tabs/package.json +1 -1
  72. package/dist/dynamic/components/TextArea/package.json +1 -1
  73. package/dist/dynamic/components/TextInput/package.json +1 -1
  74. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  75. package/dist/dynamic/components/TimePicker/package.json +1 -1
  76. package/dist/dynamic/components/Timestamp/package.json +1 -1
  77. package/dist/dynamic/components/Title/package.json +1 -1
  78. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  79. package/dist/dynamic/components/Toolbar/package.json +1 -1
  80. package/dist/dynamic/components/Tooltip/package.json +1 -1
  81. package/dist/dynamic/components/TreeView/package.json +1 -1
  82. package/dist/dynamic/components/Truncate/package.json +1 -1
  83. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  91. package/dist/dynamic/deprecated/components/package.json +1 -1
  92. package/dist/dynamic/helpers/AnimationsProvider/AnimationsProvider/package.json +1 -1
  93. package/dist/dynamic/helpers/AnimationsProvider/package.json +1 -1
  94. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  95. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  96. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  97. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  98. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  99. package/dist/dynamic/helpers/SSRSafeIds/SSRSafeIds/package.json +1 -1
  100. package/dist/dynamic/helpers/constants/package.json +1 -1
  101. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  102. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  103. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  104. package/dist/dynamic/helpers/inert/package.json +1 -1
  105. package/dist/dynamic/helpers/package.json +1 -1
  106. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  107. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  108. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  109. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  110. package/dist/dynamic/helpers/useSSRSafeId/package.json +1 -1
  111. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  112. package/dist/dynamic/helpers/util/package.json +1 -1
  113. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  114. package/dist/dynamic/layouts/Flex/package.json +1 -1
  115. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  116. package/dist/dynamic/layouts/Grid/package.json +1 -1
  117. package/dist/dynamic/layouts/Level/package.json +1 -1
  118. package/dist/dynamic/layouts/Split/package.json +1 -1
  119. package/dist/dynamic/layouts/Stack/package.json +1 -1
  120. package/dist/dynamic/styles/package.json +1 -1
  121. package/dist/esm/components/Button/Button.d.ts +1 -3
  122. package/dist/esm/components/Button/Button.d.ts.map +1 -1
  123. package/dist/esm/components/Button/Button.js +2 -2
  124. package/dist/esm/components/Button/Button.js.map +1 -1
  125. package/dist/esm/components/Compass/Compass.d.ts +3 -7
  126. package/dist/esm/components/Compass/Compass.d.ts.map +1 -1
  127. package/dist/esm/components/Compass/Compass.js +2 -2
  128. package/dist/esm/components/Compass/Compass.js.map +1 -1
  129. package/dist/esm/components/MenuToggle/MenuToggle.d.ts +0 -2
  130. package/dist/esm/components/MenuToggle/MenuToggle.d.ts.map +1 -1
  131. package/dist/esm/components/MenuToggle/MenuToggle.js +2 -3
  132. package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
  133. package/dist/esm/components/Nav/Nav.d.ts +1 -1
  134. package/dist/esm/components/Nav/Nav.d.ts.map +1 -1
  135. package/dist/esm/components/Nav/Nav.js +2 -2
  136. package/dist/esm/components/Nav/Nav.js.map +1 -1
  137. package/dist/esm/components/Page/Page.d.ts +3 -7
  138. package/dist/esm/components/Page/Page.d.ts.map +1 -1
  139. package/dist/esm/components/Page/Page.js +3 -4
  140. package/dist/esm/components/Page/Page.js.map +1 -1
  141. package/dist/js/components/Button/Button.d.ts +1 -3
  142. package/dist/js/components/Button/Button.d.ts.map +1 -1
  143. package/dist/js/components/Button/Button.js +2 -2
  144. package/dist/js/components/Button/Button.js.map +1 -1
  145. package/dist/js/components/Compass/Compass.d.ts +3 -7
  146. package/dist/js/components/Compass/Compass.d.ts.map +1 -1
  147. package/dist/js/components/Compass/Compass.js +2 -2
  148. package/dist/js/components/Compass/Compass.js.map +1 -1
  149. package/dist/js/components/MenuToggle/MenuToggle.d.ts +0 -2
  150. package/dist/js/components/MenuToggle/MenuToggle.d.ts.map +1 -1
  151. package/dist/js/components/MenuToggle/MenuToggle.js +2 -3
  152. package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
  153. package/dist/js/components/Nav/Nav.d.ts +1 -1
  154. package/dist/js/components/Nav/Nav.d.ts.map +1 -1
  155. package/dist/js/components/Nav/Nav.js +2 -2
  156. package/dist/js/components/Nav/Nav.js.map +1 -1
  157. package/dist/js/components/Page/Page.d.ts +3 -7
  158. package/dist/js/components/Page/Page.d.ts.map +1 -1
  159. package/dist/js/components/Page/Page.js +3 -4
  160. package/dist/js/components/Page/Page.js.map +1 -1
  161. package/dist/umd/assets/{output-BPcxNyfB.css → output-DjqlL2o3.css} +18487 -18494
  162. package/dist/umd/react-core.min.js +3 -3
  163. package/helpers/package.json +1 -1
  164. package/layouts/package.json +1 -1
  165. package/next/package.json +1 -1
  166. package/package.json +6 -6
  167. package/src/components/Button/Button.tsx +2 -5
  168. package/src/components/Button/__tests__/Button.test.tsx +8 -19
  169. package/src/components/Button/__tests__/__snapshots__/Button.test.tsx.snap +1 -1
  170. package/src/components/Compass/Compass.tsx +5 -11
  171. package/src/components/Compass/__tests__/Compass.test.tsx +3 -23
  172. package/src/components/MenuToggle/MenuToggle.tsx +0 -5
  173. package/src/components/MenuToggle/__tests__/MenuToggle.test.tsx +8 -19
  174. package/src/components/Nav/Nav.tsx +3 -3
  175. package/src/components/Nav/__tests__/Nav.test.tsx +8 -8
  176. package/src/components/Nav/examples/Nav.md +1 -1
  177. package/src/components/Page/Page.tsx +5 -12
  178. package/src/components/Page/__tests__/Page.test.tsx +4 -30
  179. package/src/demos/Compass/examples/CompassDockDemo.tsx +25 -43
  180. package/src/demos/Nav.md +3 -3
  181. package/src/demos/examples/Nav/NavDockedNav.tsx +25 -43
@@ -51,8 +51,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
51
51
  const [activeItem, setActiveItem] = useState<number>(0);
52
52
  const [isNavGroupExpanded, setIsNavGroupExpanded] = useState(false);
53
53
  const [isDockExpanded, setIsDockExpanded] = useState(false);
54
- const [isDockTextExpanded, setIsDockTextExpanded] = useState(false);
55
- const [isDockExpandableExpanded, setIsDockExpandableExpanded] = useState(false);
54
+ const [isDockOverlay, setIsDockOverlay] = useState(false);
56
55
  const [isMobile, setIsMobile] = useState(false);
57
56
 
58
57
  useEffect(() => {
@@ -69,7 +68,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
69
68
  }, []);
70
69
 
71
70
  const handleDockClickOutside = (event: MouseEvent) => {
72
- if ((!isMobile && !isDockExpandableExpanded) || (isMobile && !isDockExpanded)) {
71
+ if (!isDockExpanded) {
73
72
  return;
74
73
  }
75
74
 
@@ -80,21 +79,22 @@ export const CompassDockDemo: React.FunctionComponent = () => {
80
79
  dockedMastheadElement &&
81
80
  !dockedMastheadElement.contains(event.target as Node) &&
82
81
  !dockedMobileMastheadToggle?.contains(event.target as Node) &&
83
- (isDockExpandableExpanded || isDockExpanded)
82
+ isDockExpanded &&
83
+ (isDockOverlay || isMobile)
84
84
  ) {
85
- setIsDockExpandableExpanded(false);
86
85
  setIsDockExpanded(false);
86
+ setIsDockOverlay(false);
87
87
  }
88
88
  };
89
89
 
90
90
  const handleDockKeydown = (_event: KeyboardEvent) => {
91
- if ((!isMobile && !isDockExpandableExpanded) || (isMobile && !isDockExpanded)) {
91
+ if (!isDockExpanded) {
92
92
  return;
93
93
  }
94
94
 
95
95
  if (_event.key === 'Escape') {
96
- setIsDockExpandableExpanded(false);
97
96
  setIsDockExpanded(false);
97
+ setIsDockOverlay(false);
98
98
  }
99
99
  };
100
100
 
@@ -106,18 +106,17 @@ export const CompassDockDemo: React.FunctionComponent = () => {
106
106
  window.removeEventListener('click', handleDockClickOutside);
107
107
  window.removeEventListener('keydown', handleDockKeydown);
108
108
  };
109
- }, [isDockExpandableExpanded, isDockTextExpanded, isDockExpanded, isMobile]);
109
+ }, [isDockOverlay, isDockExpanded, isMobile]);
110
110
 
111
111
  const onNavSelect = (_event: React.FormEvent<HTMLInputElement>, selectedItem: NavOnSelectProps) => {
112
112
  typeof selectedItem.itemId === 'number' && setActiveItem(selectedItem.itemId);
113
113
 
114
- if (!isMobile && isDockTextExpanded) {
114
+ if (isDockExpanded && !isDockOverlay && !isMobile) {
115
115
  return;
116
116
  }
117
117
 
118
- setIsDockExpandableExpanded(false);
119
- setIsDockTextExpanded(false);
120
118
  setIsDockExpanded(false);
119
+ setIsDockOverlay(false);
121
120
  };
122
121
 
123
122
  const navItem1Ref = useRef<HTMLAnchorElement>(null);
@@ -141,45 +140,29 @@ export const CompassDockDemo: React.FunctionComponent = () => {
141
140
  };
142
141
 
143
142
  const onToggleDock = () => {
144
- if (isMobile) {
145
- setIsDockExpanded(!isDockExpanded);
143
+ const nextState = !isDockExpanded;
144
+ if (!nextState) {
145
+ setIsDockOverlay(false);
146
+ }
147
+ setIsDockExpanded(nextState);
146
148
 
149
+ if (isMobile) {
147
150
  if (isDockExpanded) {
148
151
  setTimeout(() => {
149
152
  mobileToggleRef.current?.focus();
150
153
  }, 200);
151
154
  }
152
- } else {
153
- const nextDockTextExpanded = !isDockTextExpanded;
154
- setIsDockTextExpanded(nextDockTextExpanded);
155
-
156
- if (!nextDockTextExpanded) {
157
- setIsDockExpandableExpanded(false);
158
- }
159
-
160
- if (isDockExpandableExpanded) {
161
- setIsDockExpandableExpanded(false);
162
- setIsDockTextExpanded(false);
163
- }
164
155
  }
165
156
  };
166
157
 
167
158
  const onToggleNavGroup = (_event: React.MouseEvent<HTMLButtonElement>, isExpanded: boolean) => {
168
- if (!isDockExpandableExpanded && !isDockTextExpanded && !isDockExpanded) {
159
+ if (!isDockExpanded) {
169
160
  setIsNavGroupExpanded(true);
161
+ setIsDockOverlay(true);
162
+ setIsDockExpanded(true);
170
163
  } else {
171
164
  setIsNavGroupExpanded(isExpanded);
172
165
  }
173
-
174
- if (!isMobile) {
175
- if (!isDockExpandableExpanded && !isDockTextExpanded) {
176
- setIsDockExpandableExpanded(true);
177
- }
178
-
179
- if (!isDockTextExpanded) {
180
- setIsDockTextExpanded(false);
181
- }
182
- }
183
166
  };
184
167
 
185
168
  const mobileTextLogo = (
@@ -315,7 +298,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
315
298
  isHamburger
316
299
  onClick={onToggleDock}
317
300
  aria-label="Global navigation"
318
- isExpanded={isDockTextExpanded}
301
+ isExpanded={isDockExpanded}
319
302
  />
320
303
  </MastheadToggle>
321
304
  <MastheadBrand>
@@ -409,7 +392,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
409
392
  </NavItem>
410
393
  </NavList>
411
394
  </Nav>
412
- {!isDockTextExpanded && !isDockExpanded && !isDockExpandableExpanded && (
395
+ {!isDockExpanded && (
413
396
  <>
414
397
  <Tooltip aria="none" aria-live="off" triggerRef={navItem1Ref} content="System panel"></Tooltip>
415
398
  <Tooltip aria="none" aria-live="off" triggerRef={navItem2Ref} content="Policy"></Tooltip>
@@ -426,7 +409,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
426
409
  gap={{ default: 'gapNone', md: 'gapMd' }}
427
410
  >
428
411
  <ToolbarItem>
429
- {isDockTextExpanded || isDockExpanded ? (
412
+ {isDockExpanded ? (
430
413
  <MenuToggle
431
414
  ref={appsRef}
432
415
  variant="plain"
@@ -451,7 +434,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
451
434
  )}
452
435
  </ToolbarItem>
453
436
  <ToolbarItem>
454
- {isDockTextExpanded || isDockExpanded ? (
437
+ {isDockExpanded ? (
455
438
  <Button ref={settingsRef} aria-label="Settings" isSettings variant="plain" isDocked>
456
439
  Settings
457
440
  </Button>
@@ -464,7 +447,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
464
447
  )}
465
448
  </ToolbarItem>
466
449
  <ToolbarItem>
467
- {isDockTextExpanded || isDockExpanded ? (
450
+ {isDockExpanded ? (
468
451
  <MenuToggle
469
452
  ref={helpRef}
470
453
  variant="plain"
@@ -514,8 +497,7 @@ export const CompassDockDemo: React.FunctionComponent = () => {
514
497
  masthead={mobileMasthead}
515
498
  dock={dockContent}
516
499
  isDockExpanded={isDockExpanded}
517
- isDockExpandableExpanded={isDockExpandableExpanded}
518
- isDockTextExpanded={isDockTextExpanded}
500
+ isDockOverlay={isDockOverlay}
519
501
  main={mainContent}
520
502
  backgroundSrcDark="/assets/images/pf-background.svg"
521
503
  backgroundSrcLight="/assets/images/pf-background.svg"
package/src/demos/Nav.md CHANGED
@@ -87,15 +87,15 @@ To save space in the UI, you can use docked navigation to replace text-labeled n
87
87
 
88
88
  This demo includes the following features:
89
89
 
90
- 1. A [page](/components/page) component with a docked layout, enabled via `variant="docked"`. Control the mobile overlay with `isDockExpanded` and the desktop label visibility with `isDockTextExpanded`.
90
+ 1. A [page](/components/page) component with a docked layout, enabled via `variant="docked"`. Control the expanded state of the dock with `isDockExpanded` and the set whether the dock is an overlay with `isDockOverlay`. The expanded docked nav is automatically an overlay in mobile.
91
91
 
92
92
  2. Two separate [masthead](/components/masthead) components:
93
93
  - **Horizontal mobile masthead**: Shown on small viewports using `display={{ default: 'inline' }}`, with a hamburger menu toggle button, brand logo, and action buttons that should be immediately visible to users.
94
94
  - **Vertical docked masthead**: Uses `variant="docked"` to create a thinner navigation sidebar with a hamburger menu toggle button, nav items, and action buttons.
95
95
 
96
- 3. A [navigation](/components/navigation) component with `variant="docked"` and multiple `<NavItem>` components that must include both icons and text labels. To control text visibility, `isTextExpanded={isDockTextExpanded}` is passed to the `<Nav>` component.
96
+ 3. A [navigation](/components/navigation) component with `variant="docked"` and multiple `<NavItem>` components that must include both icons and text labels. To control text visibility, `isExpanded={isDockExpanded}` is passed to the `<Nav>` component.
97
97
 
98
- 4. [Button](/components/button) and [menu toggle](/components/menus/menu-toggle) components, which use `isDocked` and `isTextExpanded` to toggle between icon-only and text+icon styles. When the nav is docked, and only icons are shown, [tooltips](/components/tooltip) must provide full text labels for the navigation items, buttons, and menu toggles.
98
+ 4. [Button](/components/button) and [menu toggle](/components/menus/menu-toggle) components, which use `isDocked` and `isExpanded` to toggle between icon-only and text+icon styles. When the nav is docked, and only icons are shown, [tooltips](/components/tooltip) must provide full text labels for the navigation items, buttons, and menu toggles.
99
99
 
100
100
  5. A `<MastheadLogo>` component that uses `isCompact` to show an icon-only logo when the dock is collapsed, and a full logo with text when expanded.
101
101
 
@@ -54,8 +54,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
54
54
  const [activeItem, setActiveItem] = useState(1);
55
55
  const [isNavGroupExpanded, setIsNavGroupExpanded] = useState(false);
56
56
  const [isDockExpanded, setIsDockExpanded] = useState(false);
57
- const [isDockTextExpanded, setIsDockTextExpanded] = useState(false);
58
- const [isDockExpandableExpanded, setIsDockExpandableExpanded] = useState(false);
57
+ const [isDockOverlay, setIsDockOverlay] = useState(false);
59
58
  const [isMobile, setIsMobile] = useState(false);
60
59
 
61
60
  useEffect(() => {
@@ -72,7 +71,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
72
71
  }, []);
73
72
 
74
73
  const handleDockClickOutside = (event: MouseEvent) => {
75
- if ((!isMobile && !isDockExpandableExpanded) || (isMobile && !isDockExpanded)) {
74
+ if (!isDockExpanded) {
76
75
  return;
77
76
  }
78
77
 
@@ -83,21 +82,22 @@ export const NavDockedNav: React.FunctionComponent = () => {
83
82
  dockedMastheadElement &&
84
83
  !dockedMastheadElement.contains(event.target as Node) &&
85
84
  !dockedMobileMastheadToggle?.contains(event.target as Node) &&
86
- (isDockExpandableExpanded || isDockExpanded)
85
+ isDockExpanded &&
86
+ (isDockOverlay || isMobile)
87
87
  ) {
88
- setIsDockExpandableExpanded(false);
89
88
  setIsDockExpanded(false);
89
+ setIsDockOverlay(false);
90
90
  }
91
91
  };
92
92
 
93
93
  const handleDockKeydown = (_event: KeyboardEvent) => {
94
- if ((!isMobile && !isDockExpandableExpanded) || (isMobile && !isDockExpanded)) {
94
+ if (!isDockExpanded) {
95
95
  return;
96
96
  }
97
97
 
98
98
  if (_event.key === 'Escape') {
99
- setIsDockExpandableExpanded(false);
100
99
  setIsDockExpanded(false);
100
+ setIsDockOverlay(false);
101
101
  }
102
102
  };
103
103
 
@@ -109,18 +109,17 @@ export const NavDockedNav: React.FunctionComponent = () => {
109
109
  window.removeEventListener('click', handleDockClickOutside);
110
110
  window.removeEventListener('keydown', handleDockKeydown);
111
111
  };
112
- }, [isDockExpandableExpanded, isDockTextExpanded, isDockExpanded, isMobile]);
112
+ }, [isDockOverlay, isDockExpanded, isMobile]);
113
113
 
114
114
  const onNavSelect = (_event: React.FormEvent<HTMLInputElement>, selectedItem: NavOnSelectProps) => {
115
115
  typeof selectedItem.itemId === 'number' && setActiveItem(selectedItem.itemId);
116
116
 
117
- if (!isMobile && isDockTextExpanded) {
117
+ if (isDockExpanded && !isDockOverlay && !isMobile) {
118
118
  return;
119
119
  }
120
120
 
121
- setIsDockExpandableExpanded(false);
122
- setIsDockTextExpanded(false);
123
121
  setIsDockExpanded(false);
122
+ setIsDockOverlay(false);
124
123
  };
125
124
 
126
125
  const mobileTextLogo = (
@@ -251,45 +250,29 @@ export const NavDockedNav: React.FunctionComponent = () => {
251
250
  };
252
251
 
253
252
  const onToggleDock = () => {
254
- if (isMobile) {
255
- setIsDockExpanded(!isDockExpanded);
253
+ const nextState = !isDockExpanded;
254
+ if (!nextState) {
255
+ setIsDockOverlay(false);
256
+ }
257
+ setIsDockExpanded(nextState);
256
258
 
259
+ if (isMobile) {
257
260
  if (isDockExpanded) {
258
261
  setTimeout(() => {
259
262
  mobileToggleRef.current?.focus();
260
263
  }, 200);
261
264
  }
262
- } else {
263
- const nextDockTextExpanded = !isDockTextExpanded;
264
- setIsDockTextExpanded(nextDockTextExpanded);
265
-
266
- if (!nextDockTextExpanded) {
267
- setIsDockExpandableExpanded(false);
268
- }
269
-
270
- if (isDockExpandableExpanded) {
271
- setIsDockExpandableExpanded(false);
272
- setIsDockTextExpanded(false);
273
- }
274
265
  }
275
266
  };
276
267
 
277
268
  const onToggleNavGroup = (_event: React.MouseEvent<HTMLButtonElement>, isExpanded: boolean) => {
278
- if (!isDockExpandableExpanded && !isDockTextExpanded && !isDockExpanded) {
269
+ if (!isDockExpanded) {
279
270
  setIsNavGroupExpanded(true);
271
+ setIsDockOverlay(true);
272
+ setIsDockExpanded(true);
280
273
  } else {
281
274
  setIsNavGroupExpanded(isExpanded);
282
275
  }
283
-
284
- if (!isMobile) {
285
- if (!isDockExpandableExpanded && !isDockTextExpanded) {
286
- setIsDockExpandableExpanded(true);
287
- }
288
-
289
- if (!isDockTextExpanded) {
290
- setIsDockTextExpanded(false);
291
- }
292
- }
293
276
  };
294
277
 
295
278
  // Mobile masthead - shown on mobile viewports only, hidden on desktop
@@ -339,7 +322,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
339
322
  isHamburger
340
323
  onClick={onToggleDock}
341
324
  aria-label="Global navigation"
342
- isExpanded={isDockTextExpanded}
325
+ isExpanded={isDockExpanded}
343
326
  />
344
327
  </MastheadToggle>
345
328
  <MastheadBrand>
@@ -429,7 +412,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
429
412
  </NavItem>
430
413
  </NavList>
431
414
  </Nav>
432
- {!isDockTextExpanded && !isDockExpanded && !isDockExpandableExpanded && (
415
+ {!isDockExpanded && (
433
416
  <>
434
417
  <Tooltip aria="none" aria-live="off" triggerRef={navItem1Ref} content="System panel"></Tooltip>
435
418
  <Tooltip aria="none" aria-live="off" triggerRef={navItem2Ref} content="Policy"></Tooltip>
@@ -446,7 +429,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
446
429
  gap={{ default: 'gapNone', md: 'gapMd' }}
447
430
  >
448
431
  <ToolbarItem>
449
- {isDockTextExpanded || isDockExpanded ? (
432
+ {isDockExpanded ? (
450
433
  <MenuToggle
451
434
  ref={appsRef}
452
435
  variant="plain"
@@ -471,7 +454,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
471
454
  )}
472
455
  </ToolbarItem>
473
456
  <ToolbarItem>
474
- {isDockTextExpanded || isDockExpanded ? (
457
+ {isDockExpanded ? (
475
458
  <Button ref={settingsRef} aria-label="Settings" isSettings variant="plain" isDocked>
476
459
  Settings
477
460
  </Button>
@@ -484,7 +467,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
484
467
  )}
485
468
  </ToolbarItem>
486
469
  <ToolbarItem>
487
- {isDockTextExpanded || isDockExpanded ? (
470
+ {isDockExpanded ? (
488
471
  <MenuToggle
489
472
  ref={helpRef}
490
473
  variant="plain"
@@ -537,8 +520,7 @@ export const NavDockedNav: React.FunctionComponent = () => {
537
520
  <Page
538
521
  variant="docked"
539
522
  isDockExpanded={isDockExpanded}
540
- isDockExpandableExpanded={isDockExpandableExpanded}
541
- isDockTextExpanded={isDockTextExpanded}
523
+ isDockOverlay={isDockOverlay}
542
524
  masthead={mobileMasthead}
543
525
  dockContent={dockedMasthead}
544
526
  skipToContent={pageSkipToContent}