@patternfly/react-core 6.7.0-prerelease.1 → 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 (224) hide show
  1. package/CHANGELOG.md +12 -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/Backdrop/Backdrop.d.ts +4 -0
  122. package/dist/esm/components/Backdrop/Backdrop.d.ts.map +1 -1
  123. package/dist/esm/components/Backdrop/Backdrop.js +4 -2
  124. package/dist/esm/components/Backdrop/Backdrop.js.map +1 -1
  125. package/dist/esm/components/Button/Button.d.ts +1 -3
  126. package/dist/esm/components/Button/Button.d.ts.map +1 -1
  127. package/dist/esm/components/Button/Button.js +2 -2
  128. package/dist/esm/components/Button/Button.js.map +1 -1
  129. package/dist/esm/components/Compass/Compass.d.ts +3 -7
  130. package/dist/esm/components/Compass/Compass.d.ts.map +1 -1
  131. package/dist/esm/components/Compass/Compass.js +2 -2
  132. package/dist/esm/components/Compass/Compass.js.map +1 -1
  133. package/dist/esm/components/MenuToggle/MenuToggle.d.ts +0 -2
  134. package/dist/esm/components/MenuToggle/MenuToggle.d.ts.map +1 -1
  135. package/dist/esm/components/MenuToggle/MenuToggle.js +2 -3
  136. package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
  137. package/dist/esm/components/Modal/Modal.d.ts +2 -0
  138. package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
  139. package/dist/esm/components/Modal/Modal.js +2 -1
  140. package/dist/esm/components/Modal/Modal.js.map +1 -1
  141. package/dist/esm/components/Modal/ModalBox.d.ts +4 -0
  142. package/dist/esm/components/Modal/ModalBox.d.ts.map +1 -1
  143. package/dist/esm/components/Modal/ModalBox.js +2 -2
  144. package/dist/esm/components/Modal/ModalBox.js.map +1 -1
  145. package/dist/esm/components/Modal/ModalContent.d.ts +2 -0
  146. package/dist/esm/components/Modal/ModalContent.d.ts.map +1 -1
  147. package/dist/esm/components/Modal/ModalContent.js +40 -5
  148. package/dist/esm/components/Modal/ModalContent.js.map +1 -1
  149. package/dist/esm/components/Nav/Nav.d.ts +1 -1
  150. package/dist/esm/components/Nav/Nav.d.ts.map +1 -1
  151. package/dist/esm/components/Nav/Nav.js +2 -2
  152. package/dist/esm/components/Nav/Nav.js.map +1 -1
  153. package/dist/esm/components/Page/Page.d.ts +3 -7
  154. package/dist/esm/components/Page/Page.d.ts.map +1 -1
  155. package/dist/esm/components/Page/Page.js +3 -4
  156. package/dist/esm/components/Page/Page.js.map +1 -1
  157. package/dist/js/components/Backdrop/Backdrop.d.ts +4 -0
  158. package/dist/js/components/Backdrop/Backdrop.d.ts.map +1 -1
  159. package/dist/js/components/Backdrop/Backdrop.js +4 -2
  160. package/dist/js/components/Backdrop/Backdrop.js.map +1 -1
  161. package/dist/js/components/Button/Button.d.ts +1 -3
  162. package/dist/js/components/Button/Button.d.ts.map +1 -1
  163. package/dist/js/components/Button/Button.js +2 -2
  164. package/dist/js/components/Button/Button.js.map +1 -1
  165. package/dist/js/components/Compass/Compass.d.ts +3 -7
  166. package/dist/js/components/Compass/Compass.d.ts.map +1 -1
  167. package/dist/js/components/Compass/Compass.js +2 -2
  168. package/dist/js/components/Compass/Compass.js.map +1 -1
  169. package/dist/js/components/MenuToggle/MenuToggle.d.ts +0 -2
  170. package/dist/js/components/MenuToggle/MenuToggle.d.ts.map +1 -1
  171. package/dist/js/components/MenuToggle/MenuToggle.js +2 -3
  172. package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
  173. package/dist/js/components/Modal/Modal.d.ts +2 -0
  174. package/dist/js/components/Modal/Modal.d.ts.map +1 -1
  175. package/dist/js/components/Modal/Modal.js +2 -1
  176. package/dist/js/components/Modal/Modal.js.map +1 -1
  177. package/dist/js/components/Modal/ModalBox.d.ts +4 -0
  178. package/dist/js/components/Modal/ModalBox.d.ts.map +1 -1
  179. package/dist/js/components/Modal/ModalBox.js +2 -2
  180. package/dist/js/components/Modal/ModalBox.js.map +1 -1
  181. package/dist/js/components/Modal/ModalContent.d.ts +2 -0
  182. package/dist/js/components/Modal/ModalContent.d.ts.map +1 -1
  183. package/dist/js/components/Modal/ModalContent.js +39 -4
  184. package/dist/js/components/Modal/ModalContent.js.map +1 -1
  185. package/dist/js/components/Nav/Nav.d.ts +1 -1
  186. package/dist/js/components/Nav/Nav.d.ts.map +1 -1
  187. package/dist/js/components/Nav/Nav.js +2 -2
  188. package/dist/js/components/Nav/Nav.js.map +1 -1
  189. package/dist/js/components/Page/Page.d.ts +3 -7
  190. package/dist/js/components/Page/Page.d.ts.map +1 -1
  191. package/dist/js/components/Page/Page.js +3 -4
  192. package/dist/js/components/Page/Page.js.map +1 -1
  193. package/dist/umd/assets/{output-Doo5KfbL.css → output-DjqlL2o3.css} +17550 -17557
  194. package/dist/umd/react-core.min.js +3 -3
  195. package/helpers/package.json +1 -1
  196. package/layouts/package.json +1 -1
  197. package/next/package.json +1 -1
  198. package/package.json +6 -6
  199. package/src/components/Backdrop/Backdrop.tsx +24 -5
  200. package/src/components/Backdrop/__tests__/Backdrop.test.tsx +35 -1
  201. package/src/components/Backdrop/__tests__/__snapshots__/Backdrop.test.tsx.snap +1 -1
  202. package/src/components/Button/Button.tsx +2 -5
  203. package/src/components/Button/__tests__/Button.test.tsx +8 -19
  204. package/src/components/Button/__tests__/__snapshots__/Button.test.tsx.snap +1 -1
  205. package/src/components/Compass/Compass.tsx +5 -11
  206. package/src/components/Compass/__tests__/Compass.test.tsx +3 -23
  207. package/src/components/MenuToggle/MenuToggle.tsx +0 -5
  208. package/src/components/MenuToggle/__tests__/MenuToggle.test.tsx +8 -19
  209. package/src/components/Modal/Modal.tsx +4 -1
  210. package/src/components/Modal/ModalBox.tsx +8 -0
  211. package/src/components/Modal/ModalContent.tsx +54 -4
  212. package/src/components/Modal/__tests__/Modal.test.tsx +14 -0
  213. package/src/components/Modal/__tests__/ModalContent.test.tsx +75 -1
  214. package/src/components/Modal/examples/Modal.md +12 -0
  215. package/src/components/Modal/examples/ModalNotAnimated.tsx +44 -0
  216. package/src/components/Nav/Nav.tsx +3 -3
  217. package/src/components/Nav/__tests__/Nav.test.tsx +8 -8
  218. package/src/components/Nav/examples/Nav.md +1 -1
  219. package/src/components/Page/Page.tsx +5 -12
  220. package/src/components/Page/__tests__/Page.test.tsx +4 -30
  221. package/src/demos/Compass/examples/CompassDockDemo.tsx +25 -43
  222. package/src/demos/Nav.md +3 -3
  223. package/src/demos/examples/Nav/NavDockedNav.tsx +25 -43
  224. package/src/deprecated/components/Modal/__tests__/__snapshots__/ModalContent.test.tsx.snap +8 -8
@@ -12,6 +12,10 @@ import RhUiAttentionBellFillIcon from '@patternfly/react-icons/dist/esm/icons/rh
12
12
  import RhUiQuestionMarkCircleIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-question-mark-circle-icon';
13
13
  import formStyles from '@patternfly/react-styles/css/components/Form/form';
14
14
 
15
+ When using the Modal component, it is recommended to control it via the `isOpen` property rather than conditionally rendering the Modal.
16
+
17
+ Conditional rendering can potentially lead to unforeseen issues, especially with animations enabled.
18
+
15
19
  ## Examples
16
20
 
17
21
  ### Basic modals
@@ -154,3 +158,11 @@ To customize which element inside the modal receives focus when initially opened
154
158
  ```ts file="./ModalCustomFocus.tsx"
155
159
 
156
160
  ```
161
+
162
+ ### Non animated modal
163
+
164
+ To explicitly disable animations, set the `hasAnimations` property to `false` on the modal.
165
+
166
+ ```ts file="./ModalNotAnimated.tsx"
167
+
168
+ ```
@@ -0,0 +1,44 @@
1
+ import { Fragment, useState } from 'react';
2
+ import { Button, Modal, ModalHeader, ModalBody, ModalFooter, ModalVariant } from '@patternfly/react-core';
3
+
4
+ export const ModalNotAnimated: React.FunctionComponent = () => {
5
+ const [isModalOpen, setIsModalOpen] = useState(false);
6
+
7
+ const handleModalToggle = (_event: KeyboardEvent | React.MouseEvent) => {
8
+ setIsModalOpen((prevIsModalOpen) => !prevIsModalOpen);
9
+ };
10
+
11
+ return (
12
+ <Fragment>
13
+ <Button variant="primary" onClick={handleModalToggle}>
14
+ Show no animations modal
15
+ </Button>
16
+ <Modal
17
+ hasAnimations={false}
18
+ variant={ModalVariant.large}
19
+ isOpen={isModalOpen}
20
+ onClose={handleModalToggle}
21
+ aria-labelledby="modal-not-animated-label"
22
+ aria-describedby="modal-not-animated-description"
23
+ elementToFocus="#modal-not-animated-confirm-button"
24
+ >
25
+ <ModalHeader title="Not Animated Modal Header" labelId="modal-not-animated-label" />
26
+ <ModalBody id="modal-not-animated-description">
27
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore
28
+ magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
29
+ consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla
30
+ pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id
31
+ est laborum.
32
+ </ModalBody>
33
+ <ModalFooter>
34
+ <Button id="modal-not-animated-confirm-button" key="confirm" variant="primary" onClick={handleModalToggle}>
35
+ Confirm
36
+ </Button>
37
+ <Button key="cancel" variant="link" onClick={handleModalToggle}>
38
+ Cancel
39
+ </Button>
40
+ </ModalFooter>
41
+ </Modal>
42
+ </Fragment>
43
+ );
44
+ };
@@ -40,7 +40,7 @@ export interface NavProps
40
40
  /** The nav variant to use. Docked is in beta. */
41
41
  variant?: 'default' | 'horizontal' | 'horizontal-subnav' | 'docked';
42
42
  /** @beta Flag indicating the docked nav should display text. Only applies when variant is docked. */
43
- isTextExpanded?: boolean;
43
+ isExpanded?: boolean;
44
44
  /** Value to overwrite the randomly generated data-ouia-component-id.*/
45
45
  ouiaId?: number | string;
46
46
  /** Set the value of data-ouia-safe. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false. */
@@ -121,7 +121,7 @@ class Nav extends Component<NavProps, { isScrollable: boolean; flyoutRef: React.
121
121
  ouiaId,
122
122
  ouiaSafe,
123
123
  variant,
124
- isTextExpanded = false,
124
+ isExpanded = false,
125
125
  ...props
126
126
  } = this.props;
127
127
  const isHorizontal = ['horizontal', 'horizontal-subnav'].includes(variant);
@@ -159,7 +159,7 @@ class Nav extends Component<NavProps, { isScrollable: boolean; flyoutRef: React.
159
159
  isHorizontal && styles.modifiers.horizontal,
160
160
  isDocked && styles.modifiers.docked,
161
161
  variant === 'horizontal-subnav' && styles.modifiers.subnav,
162
- isDocked && isTextExpanded && styles.modifiers.textExpanded,
162
+ isDocked && isExpanded && styles.modifiers.expanded,
163
163
  this.state.isScrollable && styles.modifiers.scrollable,
164
164
  className
165
165
  )}
@@ -275,9 +275,9 @@ describe('Nav', () => {
275
275
  expect(screen.getByTestId('docked-nav')).toHaveClass(styles.modifiers.docked);
276
276
  });
277
277
 
278
- test(`Renders with ${styles.modifiers.textExpanded} class when isTextExpanded is true and variant is docked`, () => {
278
+ test(`Renders with ${styles.modifiers.expanded} class when isExpanded is true and variant is docked`, () => {
279
279
  renderNav(
280
- <Nav isTextExpanded variant="docked" data-testid="text-expanded-nav">
280
+ <Nav isExpanded variant="docked" data-testid="expanded-nav">
281
281
  <NavList>
282
282
  {props.items.map((item) => (
283
283
  <NavItem to={item.to} key={item.to}>
@@ -287,10 +287,10 @@ describe('Nav', () => {
287
287
  </NavList>
288
288
  </Nav>
289
289
  );
290
- expect(screen.getByTestId('text-expanded-nav')).toHaveClass(styles.modifiers.textExpanded);
290
+ expect(screen.getByTestId('expanded-nav')).toHaveClass(styles.modifiers.expanded);
291
291
  });
292
292
 
293
- test(`Does not render with ${styles.modifiers.textExpanded} class when isTextExpanded is not passed`, () => {
293
+ test(`Does not render with ${styles.modifiers.expanded} class when isExpanded is not passed`, () => {
294
294
  renderNav(
295
295
  <Nav data-testid="nav">
296
296
  <NavList>
@@ -302,12 +302,12 @@ describe('Nav', () => {
302
302
  </NavList>
303
303
  </Nav>
304
304
  );
305
- expect(screen.getByTestId('nav')).not.toHaveClass(styles.modifiers.textExpanded);
305
+ expect(screen.getByTestId('nav')).not.toHaveClass(styles.modifiers.expanded);
306
306
  });
307
307
 
308
- test(`Does not render with ${styles.modifiers.textExpanded} class when isTextExpanded is true but variant is not docked`, () => {
308
+ test(`Does not render with ${styles.modifiers.expanded} class when isExpanded is true but variant is not docked`, () => {
309
309
  renderNav(
310
- <Nav isTextExpanded data-testid="nav">
310
+ <Nav isExpanded data-testid="nav">
311
311
  <NavList>
312
312
  {props.items.map((item) => (
313
313
  <NavItem to={item.to} key={item.to}>
@@ -317,6 +317,6 @@ describe('Nav', () => {
317
317
  </NavList>
318
318
  </Nav>
319
319
  );
320
- expect(screen.getByTestId('nav')).not.toHaveClass(styles.modifiers.textExpanded);
320
+ expect(screen.getByTestId('nav')).not.toHaveClass(styles.modifiers.expanded);
321
321
  });
322
322
  });
@@ -84,7 +84,7 @@ A flyout should be a `Menu` component. Press `space` or `right arrow` to open a
84
84
 
85
85
  ### Docked
86
86
 
87
- The docked variant of `Navigation` displays only icons passed to child `NavItems` or `NavExpandable`. Text becomes visible when `isDockTextExpanded` or `isDockExpandableExpanded` are applied to an outer page or compass dock.
87
+ The docked variant of `Navigation` displays only icons passed to child `NavItems` or `NavExpandable`. Text becomes visible when `isDockExpanded` is applied to an outer page or compass dock.
88
88
 
89
89
  `NavExpandable` items should include the `hasExpandableIcon` prop to indicate their expandable nature while in the collapsed state of the docked nav as the caret will not be rendered.
90
90
 
@@ -22,14 +22,10 @@ export interface PageProps extends React.HTMLProps<HTMLDivElement> {
22
22
  className?: string;
23
23
  /** @beta Indicates the layout variant */
24
24
  variant?: 'default' | 'docked';
25
- /** @beta Flag indicating the docked nav is expanded on mobile. Only applies when variant is docked. */
25
+ /** @beta Flag indicating the docked nav is expanded. Only applies when variant is docked. */
26
26
  isDockExpanded?: boolean;
27
- /** @beta Flag indicating a docked nav is expanded as an overlay, triggered by expandable nav children. Only applies when dock content is passed. */
28
- isDockExpandableExpanded?: boolean;
29
- /** @beta Flag indicating the docked nav should display text on desktop. Only applies when variant is docked, and
30
- * will handle toggling the visibility of the text in individual isDocked components.
31
- */
32
- isDockTextExpanded?: boolean;
27
+ /** @beta Flag indicating the docked nav should expand as an overlay instead of the default inline. */
28
+ isDockOverlay?: boolean;
33
29
  /** The horizontal masthead content (e.g. <Masthead /> or <PageHeader />). PageHeader is an alternative to Masthead
34
30
  * and should only be used to wrap custom header content. When using the docked variant, this content will only render at
35
31
  * mobile viewports.
@@ -140,7 +136,6 @@ class Page extends Component<PageProps, PageState> {
140
136
  defaultManagedSidebarIsOpen: true,
141
137
  mainTabIndex: -1,
142
138
  isNotificationDrawerExpanded: false,
143
- isDockExpandableExpanded: false,
144
139
  onNotificationDrawerExpand: () => null,
145
140
  mainComponent: 'main',
146
141
  getBreakpoint,
@@ -255,8 +250,7 @@ class Page extends Component<PageProps, PageState> {
255
250
  children,
256
251
  variant,
257
252
  isDockExpanded = false,
258
- isDockTextExpanded = false,
259
- isDockExpandableExpanded = false,
253
+ isDockOverlay = false,
260
254
  masthead,
261
255
  dockContent,
262
256
  sidebar,
@@ -386,8 +380,7 @@ class Page extends Component<PageProps, PageState> {
386
380
  className={css(
387
381
  styles.pageDock,
388
382
  isDockExpanded && styles.modifiers.expanded,
389
- isDockExpandableExpanded && styles.modifiers.expandableExpanded,
390
- isDockTextExpanded && styles.modifiers.textExpanded
383
+ isDockOverlay && styles.modifiers.overlay
391
384
  )}
392
385
  >
393
386
  <div className={css(styles.pageDockMain)}>{dockContent}</div>
@@ -446,13 +446,6 @@ describe('Page docked variant', () => {
446
446
  expect(pageDock).not.toHaveClass(styles.modifiers.expanded);
447
447
  });
448
448
 
449
- test(`Does not render with ${styles.modifiers.textExpanded} by default when variant is docked`, () => {
450
- render(<Page variant="docked" dockContent={<>Dock content</>} masthead={<>Masthead</>} data-testid="page"></Page>);
451
-
452
- const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
453
- expect(pageDock).not.toHaveClass(styles.modifiers.textExpanded);
454
- });
455
-
456
449
  test(`Renders with ${styles.modifiers.expanded} when isDockExpanded is true and variant is docked`, () => {
457
450
  render(
458
451
  <Page
@@ -468,11 +461,12 @@ describe('Page docked variant', () => {
468
461
  expect(pageDock).toHaveClass(styles.modifiers.expanded);
469
462
  });
470
463
 
471
- test(`Renders with ${styles.modifiers.textExpanded} when isDockTextExpanded is true and variant is docked`, () => {
464
+ test(`Renders with ${styles.modifiers.overlay} when isDockOverlay is true and variant is docked`, () => {
472
465
  render(
473
466
  <Page
474
467
  variant="docked"
475
- isDockTextExpanded
468
+ isDockExpanded
469
+ isDockOverlay
476
470
  dockContent={<>Dock content</>}
477
471
  masthead={<>Masthead</>}
478
472
  data-testid="page"
@@ -480,27 +474,7 @@ describe('Page docked variant', () => {
480
474
  );
481
475
 
482
476
  const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
483
- expect(pageDock).toHaveClass(styles.modifiers.textExpanded);
484
- });
485
-
486
- test(`Does not render with ${styles.modifiers.expandableExpanded} when by default and variant is docked`, () => {
487
- render(<Page variant="docked" dockContent={<>Dock content</>} masthead={<>Masthead</>} data-testid="page"></Page>);
488
- const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
489
- expect(pageDock).not.toHaveClass(styles.modifiers.expandableExpanded);
490
- });
491
-
492
- test(`Renders with ${styles.modifiers.expandableExpanded} when isDockExpandableExpanded is true and variant is docked`, () => {
493
- render(
494
- <Page
495
- variant="docked"
496
- isDockExpandableExpanded
497
- dockContent={<>Dock content</>}
498
- masthead={<>Masthead</>}
499
- data-testid="page"
500
- ></Page>
501
- );
502
- const pageDock = screen.getByText('Dock content').closest(`.${styles.pageDock}`);
503
- expect(pageDock).toHaveClass(styles.modifiers.expandableExpanded);
477
+ expect(pageDock).toHaveClass(styles.modifiers.overlay);
504
478
  });
505
479
 
506
480
  test(`Renders with ${styles.pageDockMain} wrapper when variant is docked`, () => {
@@ -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}