@patternfly/react-core 6.1.0-prerelease.8 → 6.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (230) hide show
  1. package/CHANGELOG.md +59 -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 +2 -0
  115. package/dist/esm/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
  116. package/dist/esm/components/CalendarMonth/CalendarMonth.js +7 -11
  117. package/dist/esm/components/CalendarMonth/CalendarMonth.js.map +1 -1
  118. package/dist/esm/components/Dropdown/Dropdown.d.ts +2 -0
  119. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  120. package/dist/esm/components/Dropdown/Dropdown.js +12 -3
  121. package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
  122. package/dist/esm/components/FileUpload/FileUpload.d.ts +2 -1
  123. package/dist/esm/components/FileUpload/FileUpload.d.ts.map +1 -1
  124. package/dist/esm/components/FileUpload/FileUpload.js +2 -1
  125. package/dist/esm/components/FileUpload/FileUpload.js.map +1 -1
  126. package/dist/esm/components/Menu/MenuContainer.d.ts +2 -0
  127. package/dist/esm/components/Menu/MenuContainer.d.ts.map +1 -1
  128. package/dist/esm/components/Menu/MenuContainer.js +21 -4
  129. package/dist/esm/components/Menu/MenuContainer.js.map +1 -1
  130. package/dist/esm/components/Select/Select.d.ts +4 -0
  131. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  132. package/dist/esm/components/Select/Select.js +12 -3
  133. package/dist/esm/components/Select/Select.js.map +1 -1
  134. package/dist/esm/components/Toolbar/ToolbarFilter.d.ts.map +1 -1
  135. package/dist/esm/components/Toolbar/ToolbarFilter.js +4 -2
  136. package/dist/esm/components/Toolbar/ToolbarFilter.js.map +1 -1
  137. package/dist/esm/demos/DashboardWrapper.d.ts.map +1 -1
  138. package/dist/esm/demos/DashboardWrapper.js +10 -2
  139. package/dist/esm/demos/DashboardWrapper.js.map +1 -1
  140. package/dist/esm/helpers/KeyboardHandler.d.ts +7 -0
  141. package/dist/esm/helpers/KeyboardHandler.d.ts.map +1 -1
  142. package/dist/esm/helpers/KeyboardHandler.js +25 -0
  143. package/dist/esm/helpers/KeyboardHandler.js.map +1 -1
  144. package/dist/js/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
  145. package/dist/js/components/CalendarMonth/CalendarMonth.js +7 -11
  146. package/dist/js/components/CalendarMonth/CalendarMonth.js.map +1 -1
  147. package/dist/js/components/Dropdown/Dropdown.d.ts +2 -0
  148. package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
  149. package/dist/js/components/Dropdown/Dropdown.js +11 -2
  150. package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
  151. package/dist/js/components/FileUpload/FileUpload.d.ts +2 -1
  152. package/dist/js/components/FileUpload/FileUpload.d.ts.map +1 -1
  153. package/dist/js/components/FileUpload/FileUpload.js +2 -1
  154. package/dist/js/components/FileUpload/FileUpload.js.map +1 -1
  155. package/dist/js/components/Menu/MenuContainer.d.ts +2 -0
  156. package/dist/js/components/Menu/MenuContainer.d.ts.map +1 -1
  157. package/dist/js/components/Menu/MenuContainer.js +22 -5
  158. package/dist/js/components/Menu/MenuContainer.js.map +1 -1
  159. package/dist/js/components/Select/Select.d.ts +4 -0
  160. package/dist/js/components/Select/Select.d.ts.map +1 -1
  161. package/dist/js/components/Select/Select.js +11 -2
  162. package/dist/js/components/Select/Select.js.map +1 -1
  163. package/dist/js/components/Toolbar/ToolbarFilter.d.ts.map +1 -1
  164. package/dist/js/components/Toolbar/ToolbarFilter.js +4 -2
  165. package/dist/js/components/Toolbar/ToolbarFilter.js.map +1 -1
  166. package/dist/js/demos/DashboardWrapper.d.ts.map +1 -1
  167. package/dist/js/demos/DashboardWrapper.js +10 -2
  168. package/dist/js/demos/DashboardWrapper.js.map +1 -1
  169. package/dist/js/helpers/KeyboardHandler.d.ts +7 -0
  170. package/dist/js/helpers/KeyboardHandler.d.ts.map +1 -1
  171. package/dist/js/helpers/KeyboardHandler.js +27 -1
  172. package/dist/js/helpers/KeyboardHandler.js.map +1 -1
  173. package/dist/umd/assets/{output-Df7FMwYL.css → output-ByZdJvYx.css} +10342 -10295
  174. package/dist/umd/react-core.min.js +3 -3
  175. package/helpers/package.json +1 -1
  176. package/layouts/package.json +1 -1
  177. package/next/package.json +1 -1
  178. package/package.json +7 -7
  179. package/src/components/CalendarMonth/CalendarMonth.tsx +7 -10
  180. package/src/components/DataList/examples/DataList.md +16 -4
  181. package/src/components/Dropdown/Dropdown.tsx +13 -1
  182. package/src/components/DualListSelector/examples/DualListSelector.md +16 -14
  183. package/src/components/FileUpload/FileUpload.tsx +3 -1
  184. package/src/components/FileUpload/__tests__/__snapshots__/FileUpload.test.tsx.snap +1 -1
  185. package/src/components/FileUpload/examples/FileUpload.md +1 -1
  186. package/src/components/FileUpload/examples/FileUploadTextWithRestrictions.tsx +24 -7
  187. package/src/components/LoginPage/examples/LoginPage.md +1 -1
  188. package/src/components/LoginPage/examples/LoginPageBasic.tsx +2 -2
  189. package/src/components/LoginPage/examples/LoginPageLanguageSelect.tsx +2 -2
  190. package/src/components/LoginPage/examples/LoginPageShowHidePassword.tsx +2 -2
  191. package/src/components/Menu/MenuContainer.tsx +24 -3
  192. package/src/components/Modal/examples/Modal.md +1 -1
  193. package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUpload.test.tsx.snap +3 -3
  194. package/src/components/Select/Select.tsx +16 -1
  195. package/src/components/Select/examples/SelectMultiTypeahead.tsx +1 -1
  196. package/src/components/Select/examples/SelectMultiTypeaheadCheckbox.tsx +1 -1
  197. package/src/components/Select/examples/SelectMultiTypeaheadCreatable.tsx +1 -1
  198. package/src/components/Select/examples/SelectTypeahead.tsx +1 -1
  199. package/src/components/Select/examples/SelectTypeaheadCreatable.tsx +1 -1
  200. package/src/components/SkipToContent/examples/SkipToContentBasic.tsx +144 -126
  201. package/src/components/Toolbar/ToolbarFilter.tsx +2 -1
  202. package/src/components/Wizard/examples/Wizard.md +2 -1
  203. package/src/components/Wizard/examples/WizardWithinModal.tsx +5 -8
  204. package/src/demos/CustomMenus/ApplicationLauncher.md +1 -1
  205. package/src/demos/CustomMenus/CustomMenus.md +1 -1
  206. package/src/demos/CustomMenus/examples/ApplicationLauncherDemo.tsx +2 -2
  207. package/src/demos/CustomMenus/examples/DrilldownMenuDemo.tsx +1 -1
  208. package/src/demos/DashboardWrapper.tsx +13 -2
  209. package/src/demos/ExpandableSection/examples/ExpandableTextDemo.tsx +1 -7
  210. package/src/demos/NotificationDrawer/examples/NotificationDrawerBasic.tsx +15 -1
  211. package/src/demos/NotificationDrawer/examples/NotificationDrawerGrouped.tsx +15 -1
  212. package/src/demos/assets/PF-IconLogo.svg +17 -0
  213. package/src/demos/examples/Masthead/MastheadWithHorizontalNav.tsx +14 -1
  214. package/src/demos/examples/Masthead/MastheadWithUtilitiesAndUserDropdownMenu.tsx +14 -1
  215. package/src/demos/examples/Nav/NavDefault.tsx +15 -1
  216. package/src/demos/examples/Nav/NavExpandable.tsx +15 -1
  217. package/src/demos/examples/Nav/NavFlyout.tsx +15 -1
  218. package/src/demos/examples/Nav/NavGrouped.tsx +15 -1
  219. package/src/demos/examples/Nav/NavHorizontal.tsx +15 -1
  220. package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +15 -1
  221. package/src/demos/examples/Nav/NavManual.tsx +15 -1
  222. package/src/demos/examples/Nav/NavWithSubnav.tsx +15 -1
  223. package/src/demos/examples/Page/PageContextSelector.tsx +14 -1
  224. package/src/demos/examples/Page/PageStickySectionBreadcrumb.tsx +14 -1
  225. package/src/demos/examples/Page/PageStickySectionGroup.tsx +14 -1
  226. package/src/demos/examples/Page/PageStickySectionGroupAlternate.tsx +14 -1
  227. package/src/demos/examples/Wizard/InPageWithDrawer.tsx +15 -1
  228. package/src/demos/examples/Wizard/InPageWithDrawerInformationalStep.tsx +14 -1
  229. package/src/helpers/KeyboardHandler.tsx +27 -0
  230. package/src/demos/examples/DashboardWrapper.js +0 -126
@@ -67,7 +67,21 @@ export const NavGrouped: React.FunctionComponent = () => {
67
67
  </PageSidebar>
68
68
  );
69
69
  const pageId = 'main-content-page-layout-group-nav';
70
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to Content</SkipToContent>;
70
+
71
+ const handleClick = (event) => {
72
+ event.preventDefault();
73
+
74
+ const mainContentElement = document.getElementById(pageId);
75
+ if (mainContentElement) {
76
+ mainContentElement.focus();
77
+ }
78
+ };
79
+
80
+ const PageSkipToContent = (
81
+ <SkipToContent onClick={handleClick} href={`#${pageId}`}>
82
+ Skip to content
83
+ </SkipToContent>
84
+ );
71
85
 
72
86
  return (
73
87
  <>
@@ -204,7 +204,21 @@ export const NavHorizontal: React.FunctionComponent = () => {
204
204
  );
205
205
 
206
206
  const pageId = 'main-content-page-layout-horizontal-nav';
207
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
207
+
208
+ const handleClick = (event) => {
209
+ event.preventDefault();
210
+
211
+ const mainContentElement = document.getElementById(pageId);
212
+ if (mainContentElement) {
213
+ mainContentElement.focus();
214
+ }
215
+ };
216
+
217
+ const PageSkipToContent = (
218
+ <SkipToContent onClick={handleClick} href={`#${pageId}`}>
219
+ Skip to content
220
+ </SkipToContent>
221
+ );
208
222
 
209
223
  return (
210
224
  <React.Fragment>
@@ -258,7 +258,21 @@ export const NavHorizontalWithSubnav: React.FunctionComponent = () => {
258
258
  );
259
259
 
260
260
  const pageId = 'main-content-page-layout-horizontal-nav';
261
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
261
+
262
+ const handleClick = (event) => {
263
+ event.preventDefault();
264
+
265
+ const mainContentElement = document.getElementById(pageId);
266
+ if (mainContentElement) {
267
+ mainContentElement.focus();
268
+ }
269
+ };
270
+
271
+ const PageSkipToContent = (
272
+ <SkipToContent onClick={handleClick} href={`#${pageId}`}>
273
+ Skip to content
274
+ </SkipToContent>
275
+ );
262
276
 
263
277
  return (
264
278
  <React.Fragment>
@@ -234,7 +234,21 @@ export const NavManual: React.FunctionComponent = () => {
234
234
  </PageSidebar>
235
235
  );
236
236
  const pageId = 'main-content-page-layout-manual-nav';
237
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to Content</SkipToContent>;
237
+
238
+ const handleClick = (event) => {
239
+ event.preventDefault();
240
+
241
+ const mainContentElement = document.getElementById(pageId);
242
+ if (mainContentElement) {
243
+ mainContentElement.focus();
244
+ }
245
+ };
246
+
247
+ const PageSkipToContent = (
248
+ <SkipToContent onClick={handleClick} href={`#${pageId}`}>
249
+ Skip to content
250
+ </SkipToContent>
251
+ );
238
252
 
239
253
  return (
240
254
  <React.Fragment>
@@ -69,7 +69,21 @@ export const NavWithSubnav: React.FunctionComponent = () => {
69
69
  </PageSidebar>
70
70
  );
71
71
  const pageId = 'main-content-page-layout-default-nav';
72
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
72
+
73
+ const handleClick = (event) => {
74
+ event.preventDefault();
75
+
76
+ const mainContentElement = document.getElementById(pageId);
77
+ if (mainContentElement) {
78
+ mainContentElement.focus();
79
+ }
80
+ };
81
+
82
+ const PageSkipToContent = (
83
+ <SkipToContent onClick={handleClick} href={`#${pageId}`}>
84
+ Skip to content
85
+ </SkipToContent>
86
+ );
73
87
 
74
88
  const SubNav = (
75
89
  <Nav onSelect={onSubNavSelect} aria-label="Subnav" variant="horizontal-subnav">
@@ -284,7 +284,20 @@ export const PageStickySectionBreadcrumb: React.FunctionComponent = () => {
284
284
 
285
285
  const mainContainerId = 'main-content';
286
286
 
287
- const pageSkipToContent = <SkipToContent href={`#${mainContainerId}`}>Skip to content</SkipToContent>;
287
+ const handleClick = (event) => {
288
+ event.preventDefault();
289
+
290
+ const mainContentElement = document.getElementById(mainContainerId);
291
+ if (mainContentElement) {
292
+ mainContentElement.focus();
293
+ }
294
+ };
295
+
296
+ const pageSkipToContent = (
297
+ <SkipToContent onClick={handleClick} href={`#${mainContainerId}`}>
298
+ Skip to content
299
+ </SkipToContent>
300
+ );
288
301
 
289
302
  return (
290
303
  <Page
@@ -251,7 +251,20 @@ export const PageStickySectionBreadcrumb: React.FunctionComponent = () => {
251
251
 
252
252
  const mainContainerId = 'main-content';
253
253
 
254
- const pageSkipToContent = <SkipToContent href={`#${mainContainerId}`}>Skip to content</SkipToContent>;
254
+ const handleClick = (event) => {
255
+ event.preventDefault();
256
+
257
+ const mainContentElement = document.getElementById(mainContainerId);
258
+ if (mainContentElement) {
259
+ mainContentElement.focus();
260
+ }
261
+ };
262
+
263
+ const pageSkipToContent = (
264
+ <SkipToContent onClick={handleClick} href={`#${mainContainerId}`}>
265
+ Skip to content
266
+ </SkipToContent>
267
+ );
255
268
 
256
269
  return (
257
270
  <Page
@@ -251,7 +251,20 @@ export const PageStickySectionGroup: React.FunctionComponent = () => {
251
251
 
252
252
  const mainContainerId = 'main-content';
253
253
 
254
- const pageSkipToContent = <SkipToContent href={`#${mainContainerId}`}>Skip to content</SkipToContent>;
254
+ const handleClick = (event) => {
255
+ event.preventDefault();
256
+
257
+ const mainContentElement = document.getElementById(mainContainerId);
258
+ if (mainContentElement) {
259
+ mainContentElement.focus();
260
+ }
261
+ };
262
+
263
+ const pageSkipToContent = (
264
+ <SkipToContent onClick={handleClick} href={`#${mainContainerId}`}>
265
+ Skip to content
266
+ </SkipToContent>
267
+ );
255
268
 
256
269
  return (
257
270
  <Page
@@ -243,7 +243,20 @@ export const PageStickySectionGroupAlternate: React.FunctionComponent = () => {
243
243
 
244
244
  const mainContainerId = 'main-content';
245
245
 
246
- const pageSkipToContent = <SkipToContent href={`#${mainContainerId}`}>Skip to content</SkipToContent>;
246
+ const handleClick = (event) => {
247
+ event.preventDefault();
248
+
249
+ const mainContentElement = document.getElementById(mainContainerId);
250
+ if (mainContentElement) {
251
+ mainContentElement.focus();
252
+ }
253
+ };
254
+
255
+ const pageSkipToContent = (
256
+ <SkipToContent onClick={handleClick} href={`#${mainContainerId}`}>
257
+ Skip to content
258
+ </SkipToContent>
259
+ );
247
260
 
248
261
  return (
249
262
  <Page
@@ -104,7 +104,21 @@ export const WizardFullPageWithDrawerDemo: React.FunctionComponent = () => {
104
104
  );
105
105
 
106
106
  const pageId = 'main-content-page-layout-default-nav';
107
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
107
+
108
+ const handleClick = (event) => {
109
+ event.preventDefault();
110
+
111
+ const mainContentElement = document.getElementById(pageId);
112
+ if (mainContentElement) {
113
+ mainContentElement.focus();
114
+ }
115
+ };
116
+
117
+ const PageSkipToContent = (
118
+ <SkipToContent onClick={handleClick} href={`#${pageId}`}>
119
+ Skip to content
120
+ </SkipToContent>
121
+ );
108
122
 
109
123
  const PageBreadcrumb = (
110
124
  <Breadcrumb>
@@ -105,7 +105,20 @@ export const WizardFullPageWithDrawerInfoStepDemo: React.FunctionComponent = ()
105
105
 
106
106
  const pageId = 'main-content-page-layout-default-nav';
107
107
 
108
- const PageSkipToContent = <SkipToContent href={`#${pageId}`}>Skip to content</SkipToContent>;
108
+ const handleClick = (event) => {
109
+ event.preventDefault();
110
+
111
+ const mainContentElement = document.getElementById(pageId);
112
+ if (mainContentElement) {
113
+ mainContentElement.focus();
114
+ }
115
+ };
116
+
117
+ const PageSkipToContent = (
118
+ <SkipToContent onClick={handleClick} href={`#${pageId}`}>
119
+ Skip to content
120
+ </SkipToContent>
121
+ );
109
122
 
110
123
  const PageBreadcrumb = (
111
124
  <Breadcrumb>
@@ -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 = {
@@ -1,126 +0,0 @@
1
- import React from 'react';
2
- import {
3
- Breadcrumb,
4
- BreadcrumbItem,
5
- Content,
6
- Nav,
7
- NavItem,
8
- NavList,
9
- Page,
10
- PageSection,
11
- PageSidebar,
12
- PageSidebarBody,
13
- SkipToContent
14
- } from '@patternfly/react-core';
15
- import DashboardHeader from '@patternfly/react-core/src/demos/examples/DashboardHeader';
16
-
17
- export const DashboardBreadcrumb = (
18
- <Breadcrumb>
19
- <BreadcrumbItem>Section home</BreadcrumbItem>
20
- <BreadcrumbItem to="#">Section title</BreadcrumbItem>
21
- <BreadcrumbItem to="#">Section title</BreadcrumbItem>
22
- <BreadcrumbItem to="#" isActive>
23
- Section landing
24
- </BreadcrumbItem>
25
- </Breadcrumb>
26
- );
27
-
28
- export const PageTemplateTitle = (
29
- <PageSection>
30
- <Content>
31
- <h1>Main title</h1>
32
- <p>This is a full page demo.</p>
33
- </Content>
34
- </PageSection>
35
- );
36
-
37
- export default class DashboardWrapper extends React.Component {
38
- constructor(props) {
39
- super(props);
40
- this.state = {
41
- activeItem: 1
42
- };
43
-
44
- this.onNavSelect = (_event, result) => {
45
- this.setState({
46
- activeItem: result.itemId
47
- });
48
- };
49
- }
50
-
51
- render() {
52
- const { activeItem } = this.state;
53
- const {
54
- children,
55
- mainContainerId,
56
- breadcrumb,
57
- masthead,
58
- sidebar,
59
- sidebarNavOpen,
60
- onPageResize = () => {},
61
- hasNoBreadcrumb,
62
- notificationDrawer,
63
- isNotificationDrawerExpanded,
64
- hasPageTemplateTitle,
65
- ...pageProps
66
- } = this.props;
67
-
68
- let renderedBreadcrumb;
69
- if (!hasNoBreadcrumb) {
70
- renderedBreadcrumb = breadcrumb !== undefined ? breadcrumb : DashboardBreadcrumb;
71
- }
72
-
73
- const PageNav = (
74
- <Nav onSelect={this.onNavSelect} aria-label="Nav">
75
- <NavList>
76
- <NavItem itemId={0} isActive={activeItem === 0} to="#system-panel">
77
- System panel
78
- </NavItem>
79
- <NavItem itemId={1} isActive={activeItem === 1} to="#policy">
80
- Policy
81
- </NavItem>
82
- <NavItem itemId={2} isActive={activeItem === 2} to="#auth">
83
- Authentication
84
- </NavItem>
85
- <NavItem itemId={3} isActive={activeItem === 3} to="#network">
86
- Network services
87
- </NavItem>
88
- <NavItem itemId={4} isActive={activeItem === 4} to="#server">
89
- Server
90
- </NavItem>
91
- </NavList>
92
- </Nav>
93
- );
94
-
95
- const _sidebar = (
96
- <PageSidebar isSidebarOpen={sidebarNavOpen || false}>
97
- <PageSidebarBody>{PageNav}</PageSidebarBody>
98
- </PageSidebar>
99
- );
100
- const PageSkipToContent = (
101
- <SkipToContent href={`#${mainContainerId ? mainContainerId : 'main-content-page-layout-default-nav'}`}>
102
- Skip to content
103
- </SkipToContent>
104
- );
105
-
106
- return (
107
- <Page
108
- masthead={masthead !== undefined ? masthead : <DashboardHeader />}
109
- sidebar={sidebar !== undefined ? sidebar : _sidebar}
110
- isManagedSidebar
111
- skipToContent={PageSkipToContent}
112
- breadcrumb={renderedBreadcrumb}
113
- mainContainerId={mainContainerId ? mainContainerId : 'main-content-page-layout-default-nav'}
114
- notificationDrawer={notificationDrawer}
115
- isNotificationDrawerExpanded={isNotificationDrawerExpanded}
116
- {...(typeof onPageResize === 'function' && {
117
- onPageResize: (event, resizeObject) => onPageResize(event, resizeObject)
118
- })}
119
- {...pageProps}
120
- >
121
- {hasPageTemplateTitle && PageTemplateTitle}
122
- {children}
123
- </Page>
124
- );
125
- }
126
- }