@patternfly/react-core 6.1.0-prerelease.1 → 6.1.0-prerelease.11

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 (303) hide show
  1. package/CHANGELOG.md +62 -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/Content/package.json +1 -1
  23. package/dist/dynamic/components/DataList/package.json +1 -1
  24. package/dist/dynamic/components/DatePicker/package.json +1 -1
  25. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  26. package/dist/dynamic/components/Divider/package.json +1 -1
  27. package/dist/dynamic/components/Drawer/package.json +1 -1
  28. package/dist/dynamic/components/Dropdown/package.json +1 -1
  29. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  30. package/dist/dynamic/components/EmptyState/package.json +1 -1
  31. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  32. package/dist/dynamic/components/FileUpload/package.json +1 -1
  33. package/dist/dynamic/components/Form/package.json +1 -1
  34. package/dist/dynamic/components/FormSelect/package.json +1 -1
  35. package/dist/dynamic/components/HelperText/package.json +1 -1
  36. package/dist/dynamic/components/Hint/package.json +1 -1
  37. package/dist/dynamic/components/Icon/package.json +1 -1
  38. package/dist/dynamic/components/InputGroup/package.json +1 -1
  39. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  40. package/dist/dynamic/components/Label/package.json +1 -1
  41. package/dist/dynamic/components/List/package.json +1 -1
  42. package/dist/dynamic/components/LoginPage/package.json +1 -1
  43. package/dist/dynamic/components/Masthead/package.json +1 -1
  44. package/dist/dynamic/components/Menu/package.json +1 -1
  45. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  46. package/dist/dynamic/components/Modal/package.json +1 -1
  47. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  48. package/dist/dynamic/components/Nav/package.json +1 -1
  49. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  50. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  51. package/dist/dynamic/components/NumberInput/package.json +1 -1
  52. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  53. package/dist/dynamic/components/Page/package.json +1 -1
  54. package/dist/dynamic/components/Pagination/package.json +1 -1
  55. package/dist/dynamic/components/Panel/package.json +1 -1
  56. package/dist/dynamic/components/Popover/package.json +1 -1
  57. package/dist/dynamic/components/Progress/package.json +1 -1
  58. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  59. package/dist/dynamic/components/Radio/package.json +1 -1
  60. package/dist/dynamic/components/SearchInput/package.json +1 -1
  61. package/dist/dynamic/components/Select/package.json +1 -1
  62. package/dist/dynamic/components/Sidebar/package.json +1 -1
  63. package/dist/dynamic/components/SimpleList/package.json +1 -1
  64. package/dist/dynamic/components/Skeleton/package.json +1 -1
  65. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  66. package/dist/dynamic/components/Slider/package.json +1 -1
  67. package/dist/dynamic/components/Spinner/package.json +1 -1
  68. package/dist/dynamic/components/Switch/package.json +1 -1
  69. package/dist/dynamic/components/Tabs/package.json +1 -1
  70. package/dist/dynamic/components/TextArea/package.json +1 -1
  71. package/dist/dynamic/components/TextInput/package.json +1 -1
  72. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  73. package/dist/dynamic/components/TimePicker/package.json +1 -1
  74. package/dist/dynamic/components/Timestamp/package.json +1 -1
  75. package/dist/dynamic/components/Title/package.json +1 -1
  76. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  77. package/dist/dynamic/components/Toolbar/package.json +1 -1
  78. package/dist/dynamic/components/Tooltip/package.json +1 -1
  79. package/dist/dynamic/components/TreeView/package.json +1 -1
  80. package/dist/dynamic/components/Truncate/package.json +1 -1
  81. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  82. package/dist/dynamic/components/Wizard/package.json +1 -1
  83. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  84. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/package.json +1 -1
  90. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  91. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  92. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  93. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  94. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  95. package/dist/dynamic/helpers/constants/package.json +1 -1
  96. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  97. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  98. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  99. package/dist/dynamic/helpers/package.json +1 -1
  100. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  101. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  102. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  103. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  104. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  105. package/dist/dynamic/helpers/util/package.json +1 -1
  106. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  107. package/dist/dynamic/layouts/Flex/package.json +1 -1
  108. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  109. package/dist/dynamic/layouts/Grid/package.json +1 -1
  110. package/dist/dynamic/layouts/Level/package.json +1 -1
  111. package/dist/dynamic/layouts/Split/package.json +1 -1
  112. package/dist/dynamic/layouts/Stack/package.json +1 -1
  113. package/dist/dynamic/styles/package.json +1 -1
  114. package/dist/dynamic-modules.json +1 -0
  115. package/dist/esm/components/Dropdown/Dropdown.d.ts +2 -0
  116. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  117. package/dist/esm/components/Dropdown/Dropdown.js +12 -3
  118. package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
  119. package/dist/esm/components/Menu/MenuContainer.d.ts +2 -0
  120. package/dist/esm/components/Menu/MenuContainer.d.ts.map +1 -1
  121. package/dist/esm/components/Menu/MenuContainer.js +21 -4
  122. package/dist/esm/components/Menu/MenuContainer.js.map +1 -1
  123. package/dist/esm/components/MenuToggle/MenuToggleCheckbox.d.ts +1 -1
  124. package/dist/esm/components/MenuToggle/MenuToggleCheckbox.d.ts.map +1 -1
  125. package/dist/esm/components/Modal/Modal.d.ts +2 -2
  126. package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
  127. package/dist/esm/components/Modal/Modal.js +13 -20
  128. package/dist/esm/components/Modal/Modal.js.map +1 -1
  129. package/dist/esm/components/Modal/ModalContent.d.ts +2 -0
  130. package/dist/esm/components/Modal/ModalContent.d.ts.map +1 -1
  131. package/dist/esm/components/Modal/ModalContent.js +2 -2
  132. package/dist/esm/components/Modal/ModalContent.js.map +1 -1
  133. package/dist/esm/components/Select/Select.d.ts +4 -0
  134. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  135. package/dist/esm/components/Select/Select.js +12 -3
  136. package/dist/esm/components/Select/Select.js.map +1 -1
  137. package/dist/esm/components/Toolbar/ToolbarFilter.d.ts.map +1 -1
  138. package/dist/esm/components/Toolbar/ToolbarFilter.js +4 -2
  139. package/dist/esm/components/Toolbar/ToolbarFilter.js.map +1 -1
  140. package/dist/esm/demos/DashboardHeader.d.ts.map +1 -1
  141. package/dist/esm/demos/DashboardHeader.js +2 -4
  142. package/dist/esm/demos/DashboardHeader.js.map +1 -1
  143. package/dist/esm/deprecated/components/Modal/Modal.d.ts +2 -2
  144. package/dist/esm/deprecated/components/Modal/Modal.d.ts.map +1 -1
  145. package/dist/esm/deprecated/components/Modal/Modal.js +13 -20
  146. package/dist/esm/deprecated/components/Modal/Modal.js.map +1 -1
  147. package/dist/esm/deprecated/components/Modal/ModalContent.d.ts +2 -0
  148. package/dist/esm/deprecated/components/Modal/ModalContent.d.ts.map +1 -1
  149. package/dist/esm/deprecated/components/Modal/ModalContent.js +2 -2
  150. package/dist/esm/deprecated/components/Modal/ModalContent.js.map +1 -1
  151. package/dist/esm/helpers/KeyboardHandler.d.ts +7 -0
  152. package/dist/esm/helpers/KeyboardHandler.d.ts.map +1 -1
  153. package/dist/esm/helpers/KeyboardHandler.js +25 -0
  154. package/dist/esm/helpers/KeyboardHandler.js.map +1 -1
  155. package/dist/esm/layouts/Split/Split.d.ts +4 -4
  156. package/dist/esm/layouts/Split/Split.d.ts.map +1 -1
  157. package/dist/esm/layouts/Split/SplitItem.d.ts +5 -3
  158. package/dist/esm/layouts/Split/SplitItem.d.ts.map +1 -1
  159. package/dist/esm/layouts/Split/SplitItem.js +3 -2
  160. package/dist/esm/layouts/Split/SplitItem.js.map +1 -1
  161. package/dist/esm/layouts/Stack/Stack.d.ts +3 -3
  162. package/dist/esm/layouts/Stack/Stack.d.ts.map +1 -1
  163. package/dist/esm/layouts/Stack/StackItem.d.ts +5 -3
  164. package/dist/esm/layouts/Stack/StackItem.d.ts.map +1 -1
  165. package/dist/esm/layouts/Stack/StackItem.js +3 -2
  166. package/dist/esm/layouts/Stack/StackItem.js.map +1 -1
  167. package/dist/js/components/Dropdown/Dropdown.d.ts +2 -0
  168. package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
  169. package/dist/js/components/Dropdown/Dropdown.js +11 -2
  170. package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
  171. package/dist/js/components/Menu/MenuContainer.d.ts +2 -0
  172. package/dist/js/components/Menu/MenuContainer.d.ts.map +1 -1
  173. package/dist/js/components/Menu/MenuContainer.js +22 -5
  174. package/dist/js/components/Menu/MenuContainer.js.map +1 -1
  175. package/dist/js/components/MenuToggle/MenuToggleCheckbox.d.ts +1 -1
  176. package/dist/js/components/MenuToggle/MenuToggleCheckbox.d.ts.map +1 -1
  177. package/dist/js/components/Modal/Modal.d.ts +2 -2
  178. package/dist/js/components/Modal/Modal.d.ts.map +1 -1
  179. package/dist/js/components/Modal/Modal.js +13 -20
  180. package/dist/js/components/Modal/Modal.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 +2 -2
  184. package/dist/js/components/Modal/ModalContent.js.map +1 -1
  185. package/dist/js/components/Select/Select.d.ts +4 -0
  186. package/dist/js/components/Select/Select.d.ts.map +1 -1
  187. package/dist/js/components/Select/Select.js +11 -2
  188. package/dist/js/components/Select/Select.js.map +1 -1
  189. package/dist/js/components/Toolbar/ToolbarFilter.d.ts.map +1 -1
  190. package/dist/js/components/Toolbar/ToolbarFilter.js +4 -2
  191. package/dist/js/components/Toolbar/ToolbarFilter.js.map +1 -1
  192. package/dist/js/demos/DashboardHeader.d.ts.map +1 -1
  193. package/dist/js/demos/DashboardHeader.js +2 -4
  194. package/dist/js/demos/DashboardHeader.js.map +1 -1
  195. package/dist/js/deprecated/components/Modal/Modal.d.ts +2 -2
  196. package/dist/js/deprecated/components/Modal/Modal.d.ts.map +1 -1
  197. package/dist/js/deprecated/components/Modal/Modal.js +13 -20
  198. package/dist/js/deprecated/components/Modal/Modal.js.map +1 -1
  199. package/dist/js/deprecated/components/Modal/ModalContent.d.ts +2 -0
  200. package/dist/js/deprecated/components/Modal/ModalContent.d.ts.map +1 -1
  201. package/dist/js/deprecated/components/Modal/ModalContent.js +2 -2
  202. package/dist/js/deprecated/components/Modal/ModalContent.js.map +1 -1
  203. package/dist/js/helpers/KeyboardHandler.d.ts +7 -0
  204. package/dist/js/helpers/KeyboardHandler.d.ts.map +1 -1
  205. package/dist/js/helpers/KeyboardHandler.js +27 -1
  206. package/dist/js/helpers/KeyboardHandler.js.map +1 -1
  207. package/dist/js/layouts/Split/Split.d.ts +4 -4
  208. package/dist/js/layouts/Split/Split.d.ts.map +1 -1
  209. package/dist/js/layouts/Split/SplitItem.d.ts +5 -3
  210. package/dist/js/layouts/Split/SplitItem.d.ts.map +1 -1
  211. package/dist/js/layouts/Split/SplitItem.js +3 -2
  212. package/dist/js/layouts/Split/SplitItem.js.map +1 -1
  213. package/dist/js/layouts/Stack/Stack.d.ts +3 -3
  214. package/dist/js/layouts/Stack/Stack.d.ts.map +1 -1
  215. package/dist/js/layouts/Stack/StackItem.d.ts +5 -3
  216. package/dist/js/layouts/Stack/StackItem.d.ts.map +1 -1
  217. package/dist/js/layouts/Stack/StackItem.js +3 -2
  218. package/dist/js/layouts/Stack/StackItem.js.map +1 -1
  219. package/dist/umd/assets/{output-cDK0-HHp.css → output-DNYFuxAf.css} +19680 -19642
  220. package/dist/umd/react-core.min.js +4 -4
  221. package/helpers/package.json +1 -1
  222. package/layouts/package.json +1 -1
  223. package/next/package.json +1 -1
  224. package/package.json +9 -9
  225. package/src/components/ActionList/examples/ActionListSingleGroup.tsx +2 -3
  226. package/src/components/Card/examples/CardExpandable.tsx +2 -3
  227. package/src/components/Card/examples/CardExpandableWithIcon.tsx +2 -3
  228. package/src/components/Card/examples/CardHeaderInCardHead.tsx +2 -3
  229. package/src/components/Card/examples/CardOnlyActionsInCardHead.tsx +2 -3
  230. package/src/components/Card/examples/CardWithImageAndActions.tsx +2 -3
  231. package/src/components/Checkbox/examples/CheckboxReversed.tsx +1 -1
  232. package/src/components/DataList/examples/DataList.md +16 -4
  233. package/src/components/DataList/examples/DataListActions.tsx +2 -3
  234. package/src/components/DataList/examples/DataListCheckboxes.tsx +6 -9
  235. package/src/components/DataList/examples/DataListClickableRows.tsx +4 -6
  236. package/src/components/DataList/examples/DataListExpandable.tsx +6 -9
  237. package/src/components/DataList/examples/DataListMixedExpandable.tsx +6 -9
  238. package/src/components/DataList/examples/DataListWidthModifiers.tsx +4 -6
  239. package/src/components/Dropdown/Dropdown.tsx +13 -1
  240. package/src/components/Dropdown/examples/DropdownWithKebabToggle.tsx +2 -3
  241. package/src/components/DualListSelector/examples/DualListSelector.md +16 -14
  242. package/src/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +4 -6
  243. package/src/components/FileUpload/__tests__/__snapshots__/FileUpload.test.tsx.snap +1 -1
  244. package/src/components/Hint/examples/HintBasicWithTitle.tsx +2 -3
  245. package/src/components/Hint/examples/HintBasicWithoutTitle.tsx +2 -3
  246. package/src/components/Label/examples/LabelGroupEditableAddModal.tsx +2 -2
  247. package/src/components/Menu/MenuContainer.tsx +24 -3
  248. package/src/components/MenuToggle/MenuToggleCheckbox.tsx +1 -1
  249. package/src/components/MenuToggle/examples/MenuToggle.md +4 -16
  250. package/src/components/Modal/Modal.tsx +13 -18
  251. package/src/components/Modal/ModalContent.tsx +4 -1
  252. package/src/components/Modal/__tests__/Modal.test.tsx +45 -0
  253. package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUpload.test.tsx.snap +3 -3
  254. package/src/components/OverflowMenu/examples/OverflowMenuBreakpointOnContainer.tsx +2 -3
  255. package/src/components/OverflowMenu/examples/OverflowMenuGroupTypes.tsx +2 -3
  256. package/src/components/OverflowMenu/examples/OverflowMenuMultiGroup.tsx +2 -3
  257. package/src/components/OverflowMenu/examples/OverflowMenuPersistent.tsx +2 -3
  258. package/src/components/OverflowMenu/examples/OverflowMenuSimple.tsx +2 -3
  259. package/src/components/Select/Select.tsx +16 -1
  260. package/src/components/Select/examples/SelectMultiTypeahead.tsx +1 -1
  261. package/src/components/Select/examples/SelectMultiTypeaheadCheckbox.tsx +1 -1
  262. package/src/components/Select/examples/SelectMultiTypeaheadCreatable.tsx +1 -1
  263. package/src/components/Select/examples/SelectTypeahead.tsx +1 -1
  264. package/src/components/Select/examples/SelectTypeaheadCreatable.tsx +1 -1
  265. package/src/components/Toolbar/ToolbarFilter.tsx +2 -1
  266. package/src/components/Toolbar/examples/ToolbarStacked.tsx +2 -3
  267. package/src/components/Toolbar/examples/ToolbarWithFilters.tsx +2 -3
  268. package/src/components/TreeView/examples/TreeViewWithActionItems.tsx +2 -3
  269. package/src/demos/CardView/examples/CardView.tsx +4 -6
  270. package/src/demos/CustomMenus/examples/ApplicationLauncherDemo.tsx +2 -3
  271. package/src/demos/DashboardHeader.tsx +4 -6
  272. package/src/demos/DataList/examples/DataListBasic.tsx +1 -3
  273. package/src/demos/DataList/examples/DataListExpandableControlInToolbar.tsx +7 -10
  274. package/src/demos/NotificationDrawer/examples/NotificationDrawerBasic.tsx +12 -18
  275. package/src/demos/NotificationDrawer/examples/NotificationDrawerGrouped.tsx +20 -30
  276. package/src/demos/RTL/examples/PaginatedTable.jsx +4 -6
  277. package/src/demos/RTL/examples/PaginatedTable.tsx +4 -6
  278. package/src/demos/examples/AlertGroup/AlertGroupToastWithNotificationDrawer.tsx +4 -6
  279. package/src/demos/examples/Card/CardHorizontalGrid.tsx +2 -3
  280. package/src/demos/examples/Masthead/MastheadWithHorizontalNav.tsx +4 -6
  281. package/src/demos/examples/Masthead/MastheadWithUtilitiesAndUserDropdownMenu.tsx +6 -9
  282. package/src/demos/examples/Nav/NavFlyout.tsx +4 -6
  283. package/src/demos/examples/Nav/NavHorizontal.tsx +4 -6
  284. package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +4 -6
  285. package/src/demos/examples/Nav/NavManual.tsx +4 -6
  286. package/src/demos/examples/Page/PageContextSelector.tsx +4 -6
  287. package/src/demos/examples/Page/PageStickySectionBreadcrumb.tsx +4 -6
  288. package/src/demos/examples/Page/PageStickySectionGroup.tsx +4 -6
  289. package/src/demos/examples/Page/PageStickySectionGroupAlternate.tsx +4 -6
  290. package/src/demos/examples/PrimaryDetail/PrimaryDetailCardView.tsx +4 -6
  291. package/src/demos/examples/Tabs/TabsAndTable.tsx +2 -3
  292. package/src/deprecated/components/Modal/Modal.tsx +13 -18
  293. package/src/deprecated/components/Modal/ModalContent.tsx +4 -1
  294. package/src/deprecated/components/Modal/__tests__/Modal.test.tsx +28 -0
  295. package/src/helpers/KeyboardHandler.tsx +27 -0
  296. package/src/layouts/Split/Split.tsx +4 -4
  297. package/src/layouts/Split/SplitItem.tsx +14 -8
  298. package/src/layouts/Split/__tests__/Split.test.tsx +18 -0
  299. package/src/layouts/Split/__tests__/__snapshots__/Split.test.tsx.snap +28 -0
  300. package/src/layouts/Stack/Stack.tsx +3 -3
  301. package/src/layouts/Stack/StackItem.tsx +14 -8
  302. package/src/layouts/Stack/__tests__/Stack.test.tsx +20 -2
  303. package/src/layouts/Stack/__tests__/__snapshots__/Stack.test.tsx.snap +30 -2
@@ -92,7 +92,6 @@ export enum ModalVariant {
92
92
  }
93
93
 
94
94
  interface ModalState {
95
- container: HTMLElement;
96
95
  ouiaStateId: string;
97
96
  }
98
97
 
@@ -102,6 +101,7 @@ class Modal extends React.Component<ModalProps, ModalState> {
102
101
  boxId = '';
103
102
  labelId = '';
104
103
  descriptorId = '';
104
+ backdropId = '';
105
105
 
106
106
  static defaultProps: PickOptional<ModalProps> = {
107
107
  className: '',
@@ -128,12 +128,13 @@ class Modal extends React.Component<ModalProps, ModalState> {
128
128
  const boxIdNum = Modal.currentId++;
129
129
  const labelIdNum = boxIdNum + 1;
130
130
  const descriptorIdNum = boxIdNum + 2;
131
+ const backdropIdNum = boxIdNum + 3;
131
132
  this.boxId = props.id || `pf-modal-part-${boxIdNum}`;
132
133
  this.labelId = `pf-modal-part-${labelIdNum}`;
133
134
  this.descriptorId = `pf-modal-part-${descriptorIdNum}`;
135
+ this.backdropId = `pf-modal-part-${backdropIdNum}`;
134
136
 
135
137
  this.state = {
136
- container: undefined,
137
138
  ouiaStateId: getDefaultOUIAId(Modal.displayName, props.variant)
138
139
  };
139
140
  }
@@ -157,7 +158,7 @@ class Modal extends React.Component<ModalProps, ModalState> {
157
158
  const target: HTMLElement = this.getElement(appendTo);
158
159
  const bodyChildren = target.children;
159
160
  for (const child of Array.from(bodyChildren)) {
160
- if (child !== this.state.container) {
161
+ if (child.id !== this.backdropId) {
161
162
  hide ? child.setAttribute('aria-hidden', '' + hide) : child.removeAttribute('aria-hidden');
162
163
  }
163
164
  }
@@ -175,15 +176,11 @@ class Modal extends React.Component<ModalProps, ModalState> {
175
176
  header
176
177
  } = this.props;
177
178
  const target: HTMLElement = this.getElement(appendTo);
178
- const container = document.createElement('div');
179
- this.setState({ container });
180
- target.appendChild(container);
181
179
  target.addEventListener('keydown', this.handleEscKeyClick, false);
182
180
 
183
181
  if (this.props.isOpen) {
184
182
  target.classList.add(css(styles.backdropOpen));
185
- } else {
186
- target.classList.remove(css(styles.backdropOpen));
183
+ this.toggleSiblingsFromScreenReaders(true);
187
184
  }
188
185
 
189
186
  if (!title && this.isEmpty(ariaLabel) && this.isEmpty(ariaLabelledby)) {
@@ -199,24 +196,23 @@ class Modal extends React.Component<ModalProps, ModalState> {
199
196
  }
200
197
  }
201
198
 
202
- componentDidUpdate() {
199
+ componentDidUpdate(prevProps: ModalProps) {
203
200
  const { appendTo } = this.props;
204
201
  const target: HTMLElement = this.getElement(appendTo);
205
202
  if (this.props.isOpen) {
206
203
  target.classList.add(css(styles.backdropOpen));
207
204
  this.toggleSiblingsFromScreenReaders(true);
208
205
  } else {
209
- target.classList.remove(css(styles.backdropOpen));
210
- this.toggleSiblingsFromScreenReaders(false);
206
+ if (prevProps.isOpen !== this.props.isOpen) {
207
+ target.classList.remove(css(styles.backdropOpen));
208
+ this.toggleSiblingsFromScreenReaders(false);
209
+ }
211
210
  }
212
211
  }
213
212
 
214
213
  componentWillUnmount() {
215
214
  const { appendTo } = this.props;
216
215
  const target: HTMLElement = this.getElement(appendTo);
217
- if (this.state.container) {
218
- target.removeChild(this.state.container);
219
- }
220
216
  target.removeEventListener('keydown', this.handleEscKeyClick, false);
221
217
  target.classList.remove(css(styles.backdropOpen));
222
218
  this.toggleSiblingsFromScreenReaders(false);
@@ -224,7 +220,6 @@ class Modal extends React.Component<ModalProps, ModalState> {
224
220
 
225
221
  render() {
226
222
  const {
227
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
228
223
  appendTo,
229
224
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
230
225
  onEscapePress,
@@ -242,9 +237,8 @@ class Modal extends React.Component<ModalProps, ModalState> {
242
237
  elementToFocus,
243
238
  ...props
244
239
  } = this.props;
245
- const { container } = this.state;
246
240
 
247
- if (!canUseDOM || !container) {
241
+ if (!canUseDOM || !this.getElement(appendTo)) {
248
242
  return null;
249
243
  }
250
244
 
@@ -254,6 +248,7 @@ class Modal extends React.Component<ModalProps, ModalState> {
254
248
  boxId={this.boxId}
255
249
  labelId={this.labelId}
256
250
  descriptorId={this.descriptorId}
251
+ backdropId={this.backdropId}
257
252
  title={title}
258
253
  titleIconVariant={titleIconVariant}
259
254
  titleLabel={titleLabel}
@@ -267,7 +262,7 @@ class Modal extends React.Component<ModalProps, ModalState> {
267
262
  position={position}
268
263
  elementToFocus={elementToFocus}
269
264
  />,
270
- container
265
+ this.getElement(appendTo)
271
266
  ) as React.ReactElement;
272
267
  }
273
268
  }
@@ -25,6 +25,8 @@ export interface ModalContentProps extends OUIAProps {
25
25
  'aria-label'?: string;
26
26
  /** Id to use for the modal box label. */
27
27
  'aria-labelledby'?: string | null;
28
+ /** Id of the backdrop. */
29
+ backdropId?: string;
28
30
  /** Accessible label applied to the modal box body. This should be used to communicate
29
31
  * important information about the modal box body div element if needed, such as that it
30
32
  * is scrollable.
@@ -117,6 +119,7 @@ export const ModalContent: React.FunctionComponent<ModalContentProps> = ({
117
119
  maxWidth,
118
120
  boxId,
119
121
  labelId,
122
+ backdropId,
120
123
  descriptorId,
121
124
  disableFocusTrap = false,
122
125
  hasNoBodyWrapper = false,
@@ -202,7 +205,7 @@ export const ModalContent: React.FunctionComponent<ModalContentProps> = ({
202
205
  </ModalBox>
203
206
  );
204
207
  return (
205
- <Backdrop>
208
+ <Backdrop id={backdropId}>
206
209
  <FocusTrap
207
210
  active={!disableFocusTrap}
208
211
  focusTrapOptions={{
@@ -2,6 +2,7 @@ import * as React from 'react';
2
2
 
3
3
  import { render, screen } from '@testing-library/react';
4
4
  import userEvent from '@testing-library/user-event';
5
+ import '@testing-library/jest-dom';
5
6
 
6
7
  import { css } from '../../../../../../react-styles/dist/js';
7
8
  import styles from '@patternfly/react-styles/css/components/Backdrop/backdrop';
@@ -39,6 +40,32 @@ const ModalWithSiblings = () => {
39
40
  );
40
41
  };
41
42
 
43
+ const ModalWithAdjacentModal = () => {
44
+ const [isOpen, setIsOpen] = React.useState(true);
45
+ const [isModalMounted, setIsModalMounted] = React.useState(true);
46
+ const modalProps = { ...props, isOpen, appendTo: target, onClose: () => setIsOpen(false) };
47
+
48
+ return (
49
+ <>
50
+ <aside>Aside sibling</aside>
51
+ <article>Section sibling</article>
52
+ {isModalMounted && (
53
+ <>
54
+ <Modal {...modalProps}>
55
+ <button onClick={() => setIsModalMounted(false)}>Unmount Modal</button>
56
+ </Modal>
57
+ <Modal isOpen={false} onClose={() => {}}>
58
+ Modal closed for test
59
+ </Modal>
60
+ <Modal isOpen={false} onClose={() => {}}>
61
+ modal closed for test
62
+ </Modal>
63
+ </>
64
+ )}
65
+ </>
66
+ );
67
+ };
68
+
42
69
  describe('Modal', () => {
43
70
  test('Modal creates a container element once for div', () => {
44
71
  render(<Modal {...props} />);
@@ -154,6 +181,7 @@ describe('Modal', () => {
154
181
  expect(asideSibling).not.toHaveAttribute('aria-hidden');
155
182
  expect(articleSibling).not.toHaveAttribute('aria-hidden');
156
183
  });
184
+
157
185
  test('The modalBoxBody has no aria-label when bodyAriaLabel is not passed', () => {
158
186
  const props = {
159
187
  isOpen: true
@@ -176,6 +176,33 @@ export const setTabIndex = (options: HTMLElement[]) => {
176
176
  }
177
177
  };
178
178
 
179
+ /**
180
+ * This function is used in Dropdown, Select and MenuContainer as a default toggle keydown behavior. When the toggle has focus and the menu is open, pressing the up/down arrow keys will focus a valid non-disabled menu item - the first item for the down arrow key and last item for the up arrow key.
181
+ *
182
+ * @param event Event triggered by the keyboard
183
+ * @param menuRef Menu reference
184
+ */
185
+ export const onToggleArrowKeydownDefault = (event: KeyboardEvent, menuRef: React.RefObject<HTMLDivElement>) => {
186
+ if (event.key !== 'ArrowDown' && event.key !== 'ArrowUp') {
187
+ return;
188
+ }
189
+
190
+ event.preventDefault();
191
+
192
+ const listItems = Array.from(menuRef.current?.querySelectorAll('li'));
193
+ const focusableElements = listItems
194
+ .map((li) => li.querySelector('button:not(:disabled),input:not(:disabled),a:not([aria-disabled="true"])'))
195
+ .filter((el) => el !== null);
196
+
197
+ let focusableElement: Element;
198
+ if (event.key === 'ArrowDown') {
199
+ focusableElement = focusableElements[0];
200
+ } else {
201
+ focusableElement = focusableElements[focusableElements.length - 1];
202
+ }
203
+ focusableElement && (focusableElement as HTMLElement).focus();
204
+ };
205
+
179
206
  class KeyboardHandler extends React.Component<KeyboardHandlerProps> {
180
207
  static displayName = 'KeyboardHandler';
181
208
  static defaultProps: KeyboardHandlerProps = {
@@ -5,13 +5,13 @@ import { css } from '@patternfly/react-styles';
5
5
  export interface SplitProps extends React.HTMLProps<HTMLDivElement> {
6
6
  /** Adds space between children. */
7
7
  hasGutter?: boolean;
8
- /** Allows children to wrap */
8
+ /** Allows children to wrap. */
9
9
  isWrappable?: boolean;
10
- /** content rendered inside the Split layout */
10
+ /** content rendered inside the split layout. */
11
11
  children?: React.ReactNode;
12
- /** additional classes added to the Split layout */
12
+ /** Additional classes added to the split layout. */
13
13
  className?: string;
14
- /** Sets the base component to render. defaults to div */
14
+ /** Sets the base component to render. Defaults to div. */
15
15
  component?: React.ReactNode;
16
16
  }
17
17
 
@@ -3,22 +3,28 @@ import styles from '@patternfly/react-styles/css/layouts/Split/split';
3
3
  import { css } from '@patternfly/react-styles';
4
4
 
5
5
  export interface SplitItemProps extends React.HTMLProps<HTMLDivElement> {
6
- /** Flag indicating if this Split Layout item should fill the available horizontal space. */
6
+ /** Flag indicating if this split layout item should fill the available horizontal space. */
7
7
  isFilled?: boolean;
8
- /** content rendered inside the Split Layout Item */
8
+ /** Content rendered inside the split layout item. */
9
9
  children?: React.ReactNode;
10
- /** additional classes added to the Split Layout Item */
10
+ /** Additional classes added to the split layout item. */
11
11
  className?: string;
12
+ /** Sets the base component to render. Defaults to div. */
13
+ component?: React.ReactNode;
12
14
  }
13
15
 
14
16
  export const SplitItem: React.FunctionComponent<SplitItemProps> = ({
15
17
  isFilled = false,
16
18
  className = '',
17
19
  children = null,
20
+ component = 'div',
18
21
  ...props
19
- }: SplitItemProps) => (
20
- <div {...props} className={css(styles.splitItem, isFilled && styles.modifiers.fill, className)}>
21
- {children}
22
- </div>
23
- );
22
+ }: SplitItemProps) => {
23
+ const Component = component as any;
24
+ return (
25
+ <Component {...props} className={css(styles.splitItem, isFilled && styles.modifiers.fill, className)}>
26
+ {children}
27
+ </Component>
28
+ );
29
+ };
24
30
  SplitItem.displayName = 'SplitItem';
@@ -51,3 +51,21 @@ test('Wrappable', () => {
51
51
  );
52
52
  expect(asFragment()).toMatchSnapshot();
53
53
  });
54
+
55
+ test('component on Split', () => {
56
+ const { asFragment } = render(
57
+ <Split component="span">
58
+ <SplitItem>Basic content</SplitItem>
59
+ </Split>
60
+ );
61
+ expect(asFragment()).toMatchSnapshot();
62
+ });
63
+
64
+ test('component on SplitItem', () => {
65
+ const { asFragment } = render(
66
+ <Split>
67
+ <SplitItem component="span">Basic content</SplitItem>
68
+ </Split>
69
+ );
70
+ expect(asFragment()).toMatchSnapshot();
71
+ });
@@ -93,6 +93,34 @@ exports[`Wrappable 1`] = `
93
93
  </DocumentFragment>
94
94
  `;
95
95
 
96
+ exports[`component on Split 1`] = `
97
+ <DocumentFragment>
98
+ <span
99
+ class="pf-v6-l-split"
100
+ >
101
+ <div
102
+ class="pf-v6-l-split__item"
103
+ >
104
+ Basic content
105
+ </div>
106
+ </span>
107
+ </DocumentFragment>
108
+ `;
109
+
110
+ exports[`component on SplitItem 1`] = `
111
+ <DocumentFragment>
112
+ <div
113
+ class="pf-v6-l-split"
114
+ >
115
+ <span
116
+ class="pf-v6-l-split__item"
117
+ >
118
+ Basic content
119
+ </span>
120
+ </div>
121
+ </DocumentFragment>
122
+ `;
123
+
96
124
  exports[`isFilled 1`] = `
97
125
  <DocumentFragment>
98
126
  <div
@@ -5,11 +5,11 @@ import { css } from '@patternfly/react-styles';
5
5
  export interface StackProps extends React.HTMLProps<HTMLDivElement> {
6
6
  /** Adds space between children. */
7
7
  hasGutter?: boolean;
8
- /** content rendered inside the Stack layout */
8
+ /** Content rendered inside the stack layout. */
9
9
  children?: React.ReactNode;
10
- /** additional classes added to the Stack layout */
10
+ /** Additional classes added to the stack layout. */
11
11
  className?: string;
12
- /** Sets the base component to render. defaults to div */
12
+ /** Sets the base component to render. Defaults to div. */
13
13
  component?: React.ReactNode;
14
14
  }
15
15
 
@@ -3,22 +3,28 @@ import styles from '@patternfly/react-styles/css/layouts/Stack/stack';
3
3
  import { css } from '@patternfly/react-styles';
4
4
 
5
5
  export interface StackItemProps extends React.HTMLProps<HTMLDivElement> {
6
- /** Flag indicating if this Stack Layout item should fill the available vertical space. */
6
+ /** Flag indicating if this stack layout item should fill the available vertical space. */
7
7
  isFilled?: boolean;
8
- /** additional classes added to the Stack Layout Item */
8
+ /** Additional classes added to the stack layout item. */
9
9
  children?: React.ReactNode;
10
- /** content rendered inside the Stack Layout Item */
10
+ /** Content rendered inside the stack layout item. */
11
11
  className?: string;
12
+ /** Sets the base component to render. Defaults to div. */
13
+ component?: React.ReactNode;
12
14
  }
13
15
 
14
16
  export const StackItem: React.FunctionComponent<StackItemProps> = ({
15
17
  isFilled = false,
16
18
  className = '',
17
19
  children = null,
20
+ component = 'div',
18
21
  ...props
19
- }: StackItemProps) => (
20
- <div {...props} className={css(styles.stackItem, isFilled && styles.modifiers.fill, className)}>
21
- {children}
22
- </div>
23
- );
22
+ }: StackItemProps) => {
23
+ const Component = component as any;
24
+ return (
25
+ <Component {...props} className={css(styles.stackItem, isFilled && styles.modifiers.fill, className)}>
26
+ {children}
27
+ </Component>
28
+ );
29
+ };
24
30
  StackItem.displayName = 'StackItem';
@@ -3,7 +3,7 @@ import { render } from '@testing-library/react';
3
3
  import { Stack } from '../Stack';
4
4
  import { StackItem } from '../StackItem';
5
5
 
6
- test('isMain set to true', () => {
6
+ test('isFilled set to true', () => {
7
7
  const { asFragment } = render(
8
8
  <Stack>
9
9
  <StackItem isFilled>Filled content</StackItem>
@@ -12,7 +12,7 @@ test('isMain set to true', () => {
12
12
  expect(asFragment()).toMatchSnapshot();
13
13
  });
14
14
 
15
- test('isMain defaults to false', () => {
15
+ test('isFilled defaults to false', () => {
16
16
  const { asFragment } = render(
17
17
  <Stack>
18
18
  <StackItem>Basic content</StackItem>
@@ -29,3 +29,21 @@ test('gutter', () => {
29
29
  );
30
30
  expect(asFragment()).toMatchSnapshot();
31
31
  });
32
+
33
+ test('component on Stack', () => {
34
+ const { asFragment } = render(
35
+ <Stack component="span">
36
+ <StackItem>Basic content</StackItem>
37
+ </Stack>
38
+ );
39
+ expect(asFragment()).toMatchSnapshot();
40
+ });
41
+
42
+ test('component on StackItem', () => {
43
+ const { asFragment } = render(
44
+ <Stack>
45
+ <StackItem component="span">Basic content</StackItem>
46
+ </Stack>
47
+ );
48
+ expect(asFragment()).toMatchSnapshot();
49
+ });
@@ -1,5 +1,33 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
+ exports[`component on Stack 1`] = `
4
+ <DocumentFragment>
5
+ <span
6
+ class="pf-v6-l-stack"
7
+ >
8
+ <div
9
+ class="pf-v6-l-stack__item"
10
+ >
11
+ Basic content
12
+ </div>
13
+ </span>
14
+ </DocumentFragment>
15
+ `;
16
+
17
+ exports[`component on StackItem 1`] = `
18
+ <DocumentFragment>
19
+ <div
20
+ class="pf-v6-l-stack"
21
+ >
22
+ <span
23
+ class="pf-v6-l-stack__item"
24
+ >
25
+ Basic content
26
+ </span>
27
+ </div>
28
+ </DocumentFragment>
29
+ `;
30
+
3
31
  exports[`gutter 1`] = `
4
32
  <DocumentFragment>
5
33
  <div
@@ -14,7 +42,7 @@ exports[`gutter 1`] = `
14
42
  </DocumentFragment>
15
43
  `;
16
44
 
17
- exports[`isMain defaults to false 1`] = `
45
+ exports[`isFilled defaults to false 1`] = `
18
46
  <DocumentFragment>
19
47
  <div
20
48
  class="pf-v6-l-stack"
@@ -28,7 +56,7 @@ exports[`isMain defaults to false 1`] = `
28
56
  </DocumentFragment>
29
57
  `;
30
58
 
31
- exports[`isMain set to true 1`] = `
59
+ exports[`isFilled set to true 1`] = `
32
60
  <DocumentFragment>
33
61
  <div
34
62
  class="pf-v6-l-stack"