@patternfly/react-core 6.6.1-prerelease.7 → 6.6.1-prerelease.9

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 (189) 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/dynamic-modules.json +2 -0
  122. package/dist/esm/components/Drawer/Drawer.d.ts +3 -0
  123. package/dist/esm/components/Drawer/Drawer.d.ts.map +1 -1
  124. package/dist/esm/components/Drawer/Drawer.js +4 -3
  125. package/dist/esm/components/Drawer/Drawer.js.map +1 -1
  126. package/dist/esm/components/Drawer/DrawerContent.d.ts +1 -1
  127. package/dist/esm/components/Drawer/DrawerContent.d.ts.map +1 -1
  128. package/dist/esm/components/Drawer/DrawerPanelContent.js +22 -25
  129. package/dist/esm/components/Drawer/DrawerPanelContent.js.map +1 -1
  130. package/dist/esm/components/Page/Page.d.ts +4 -0
  131. package/dist/esm/components/Page/Page.d.ts.map +1 -1
  132. package/dist/esm/components/Page/Page.js +4 -3
  133. package/dist/esm/components/Page/Page.js.map +1 -1
  134. package/dist/esm/components/Page/PageFooter.d.ts +11 -0
  135. package/dist/esm/components/Page/PageFooter.d.ts.map +1 -0
  136. package/dist/esm/components/Page/PageFooter.js +11 -0
  137. package/dist/esm/components/Page/PageFooter.js.map +1 -0
  138. package/dist/esm/components/Page/index.d.ts +1 -0
  139. package/dist/esm/components/Page/index.d.ts.map +1 -1
  140. package/dist/esm/components/Page/index.js +1 -0
  141. package/dist/esm/components/Page/index.js.map +1 -1
  142. package/dist/js/components/Drawer/Drawer.d.ts +3 -0
  143. package/dist/js/components/Drawer/Drawer.d.ts.map +1 -1
  144. package/dist/js/components/Drawer/Drawer.js +4 -3
  145. package/dist/js/components/Drawer/Drawer.js.map +1 -1
  146. package/dist/js/components/Drawer/DrawerContent.d.ts +1 -1
  147. package/dist/js/components/Drawer/DrawerContent.d.ts.map +1 -1
  148. package/dist/js/components/Drawer/DrawerPanelContent.js +22 -25
  149. package/dist/js/components/Drawer/DrawerPanelContent.js.map +1 -1
  150. package/dist/js/components/Page/Page.d.ts +4 -0
  151. package/dist/js/components/Page/Page.d.ts.map +1 -1
  152. package/dist/js/components/Page/Page.js +4 -3
  153. package/dist/js/components/Page/Page.js.map +1 -1
  154. package/dist/js/components/Page/PageFooter.d.ts +11 -0
  155. package/dist/js/components/Page/PageFooter.d.ts.map +1 -0
  156. package/dist/js/components/Page/PageFooter.js +15 -0
  157. package/dist/js/components/Page/PageFooter.js.map +1 -0
  158. package/dist/js/components/Page/index.d.ts +1 -0
  159. package/dist/js/components/Page/index.d.ts.map +1 -1
  160. package/dist/js/components/Page/index.js +1 -0
  161. package/dist/js/components/Page/index.js.map +1 -1
  162. package/dist/umd/assets/{output-BGwwN1RO.css → output-B35Oc6dG.css} +15784 -15727
  163. package/dist/umd/react-core.min.js +1 -1
  164. package/helpers/package.json +1 -1
  165. package/layouts/package.json +1 -1
  166. package/next/package.json +1 -1
  167. package/package.json +6 -6
  168. package/src/components/Drawer/Drawer.tsx +10 -2
  169. package/src/components/Drawer/DrawerContent.tsx +1 -1
  170. package/src/components/Drawer/DrawerPanelContent.tsx +25 -25
  171. package/src/components/Drawer/__tests__/Drawer.test.tsx +53 -0
  172. package/src/components/Drawer/examples/Drawer.md +1 -1
  173. package/src/components/Page/Page.tsx +10 -1
  174. package/src/components/Page/PageFooter.tsx +28 -0
  175. package/src/components/Page/__tests__/Page.test.tsx +46 -0
  176. package/src/components/Page/__tests__/PageFooter.test.tsx +38 -0
  177. package/src/components/Page/examples/Page.md +24 -8
  178. package/src/components/Page/examples/PageCustomFooter.tsx +59 -0
  179. package/src/components/Page/examples/PageCustomHeader.tsx +17 -0
  180. package/src/components/Page/examples/PagePlain.tsx +9 -0
  181. package/src/components/Page/index.ts +1 -0
  182. package/src/demos/CardView/CardView.md +1 -1
  183. package/src/demos/CardView/examples/CardView.tsx +1 -1
  184. package/src/demos/Drawer/Drawer.md +16 -0
  185. package/src/demos/Drawer/examples/DrawerViewport.tsx +112 -0
  186. package/src/demos/Page.md +24 -11
  187. package/src/demos/examples/Page/PagePlain.tsx +342 -0
  188. package/src/components/Page/examples/PageHeaderContent.tsx +0 -19
  189. package/src/demos/examples/Page/PageStickySectionGroupUsingPageHeader.tsx +0 -0
@@ -0,0 +1,112 @@
1
+ import { Fragment, useRef, useState } from 'react';
2
+ import {
3
+ Backdrop,
4
+ Button,
5
+ Drawer,
6
+ DrawerActions,
7
+ DrawerCloseButton,
8
+ DrawerContent,
9
+ DrawerHead,
10
+ DrawerPanelContent,
11
+ Masthead,
12
+ MastheadBrand,
13
+ MastheadContent,
14
+ MastheadLogo,
15
+ MastheadMain,
16
+ MastheadToggle,
17
+ Page,
18
+ PageSection,
19
+ PageSidebar,
20
+ PageSidebarBody,
21
+ PageToggleButton,
22
+ Toolbar,
23
+ ToolbarContent,
24
+ ToolbarItem
25
+ } from '@patternfly/react-core';
26
+
27
+ export const DrawerViewport: React.FunctionComponent = () => {
28
+ const [isExpanded, setIsExpanded] = useState(true);
29
+ const drawerRef = useRef<HTMLSpanElement>(null);
30
+
31
+ const onExpand = () => {
32
+ drawerRef.current && drawerRef.current.focus();
33
+ };
34
+
35
+ const onClick = () => {
36
+ setIsExpanded(!isExpanded);
37
+ };
38
+
39
+ const onCloseClick = () => {
40
+ setIsExpanded(false);
41
+ };
42
+
43
+ const onResize = (_event: MouseEvent | TouchEvent | React.KeyboardEvent, newWidth: number, id: string) => {
44
+ // eslint-disable-next-line no-console
45
+ console.log(`${id} has new width of: ${newWidth}`);
46
+ };
47
+
48
+ const headerToolbar = (
49
+ <Toolbar id="viewport-drawer-toolbar">
50
+ <ToolbarContent>
51
+ <ToolbarItem>
52
+ <Button aria-expanded={isExpanded} onClick={onClick}>
53
+ Toggle drawer
54
+ </Button>
55
+ </ToolbarItem>
56
+ </ToolbarContent>
57
+ </Toolbar>
58
+ );
59
+
60
+ const masthead = (
61
+ <Masthead>
62
+ <MastheadMain>
63
+ <MastheadToggle>
64
+ <PageToggleButton isHamburgerButton aria-label="Global navigation" id="viewport-drawer-nav-toggle" />
65
+ </MastheadToggle>
66
+ <MastheadBrand>
67
+ <MastheadLogo href="https://patternfly.org" target="_blank">
68
+ Logo
69
+ </MastheadLogo>
70
+ </MastheadBrand>
71
+ </MastheadMain>
72
+ <MastheadContent>{headerToolbar}</MastheadContent>
73
+ </Masthead>
74
+ );
75
+
76
+ const sidebar = (
77
+ <PageSidebar id="viewport-drawer-sidebar">
78
+ <PageSidebarBody>Navigation</PageSidebarBody>
79
+ </PageSidebar>
80
+ );
81
+
82
+ const panelContent = (
83
+ <DrawerPanelContent isResizable onResize={onResize} id="viewport-resize-panel" minSize="150px">
84
+ <DrawerHead>
85
+ <span tabIndex={isExpanded ? 0 : -1} ref={drawerRef}>
86
+ Drawer panel header
87
+ </span>
88
+ <DrawerActions>
89
+ <DrawerCloseButton onClick={onCloseClick} />
90
+ </DrawerActions>
91
+ </DrawerHead>
92
+ </DrawerPanelContent>
93
+ );
94
+
95
+ return (
96
+ <Fragment>
97
+ <Page isManagedSidebar masthead={masthead} sidebar={sidebar}>
98
+ <PageSection aria-labelledby="viewport-drawer-section">
99
+ <h2 id="viewport-drawer-section">Viewport drawer example</h2>
100
+ <p>
101
+ The viewport drawer is a sibling of Page. DrawerContent is left empty so the panel overlays the page without
102
+ affecting page layout or scrolling.
103
+ </p>
104
+ </PageSection>
105
+ </Page>
106
+ {isExpanded && <Backdrop onClick={onCloseClick}></Backdrop>}
107
+ <Drawer isExpanded={isExpanded} isViewport onExpand={onExpand}>
108
+ <DrawerContent panelContent={panelContent} />
109
+ </Drawer>
110
+ </Fragment>
111
+ );
112
+ };
package/src/demos/Page.md CHANGED
@@ -4,18 +4,25 @@ section: components
4
4
  ---
5
5
 
6
6
  import { useState, useRef, useEffect } from 'react';
7
- import RhUiNotificationFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-notification-fill-icon';
8
- import RhUiSettingsFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-settings-fill-icon';
9
- import RhUiQuestionMarkCircleIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-question-mark-circle-icon';
10
- import RhUiQuestionMarkCircleFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-question-mark-circle-fill-icon';
11
- import imgAvatar from '@patternfly/react-core/src/components/assets/avatarImg.svg';
12
- import RhUiMenuBarsIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-menu-bars-icon';
13
- import LightbulbIcon from '@patternfly/react-icons/dist/esm/icons/lightbulb-icon';
14
7
  import RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';
15
- import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon';
16
- import RhUiCloudFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-cloud-fill-icon';
17
- import pfLogo from '@patternfly/react-core/src/demos/assets/PF-HorizontalLogo-Color.svg';
18
- import pfIconLogo from '@patternfly/react-core/src/demos/assets/PF-IconLogo-color.svg';
8
+ import RhUiAddCircleFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-add-circle-fill-icon';
9
+ import RhUiTrashFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-trash-fill-icon';
10
+ import RhUiPortIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-port-icon';
11
+ import RhUiContainerIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-container-icon';
12
+ import RhUiAutomationIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-automation-icon';
13
+ import RhUiConnectedIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-connected-icon';
14
+ import RhUiArrowRightIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-arrow-right-icon';
15
+ import pfIcon from '@patternfly/react-core/src/demos/assets/PF-IconLogo.svg';
16
+ import activeMQIcon from '@patternfly/react-core/src/demos/assets/activemq-core_200x150.png';
17
+ import avroIcon from '@patternfly/react-core/src/demos/assets/camel-avro_200x150.png';
18
+ import dropBoxIcon from '@patternfly/react-core/src/demos/assets/camel-dropbox_200x150.png';
19
+ import infinispanIcon from '@patternfly/react-core/src/demos/assets/camel-infinispan_200x150.png';
20
+ import saxonIcon from '@patternfly/react-core/src/demos/assets/camel-saxon_200x150.png';
21
+ import sparkIcon from '@patternfly/react-core/src/demos/assets/camel-spark_200x150.png';
22
+ import swaggerIcon from '@patternfly/react-core/src/demos/assets/camel-swagger-java_200x150.png';
23
+ import azureIcon from '@patternfly/react-core/src/demos/assets/FuseConnector_Icons_AzureServices.png';
24
+ import restIcon from '@patternfly/react-core/src/demos/assets/FuseConnector_Icons_REST.png';
25
+ import { data } from '@patternfly/react-core/src/demos/CardView/examples/CardViewData.jsx';
19
26
 
20
27
  - All examples set the `isManagedSidebar` prop on the Page component to have the sidebar automatically close for smaller screen widths. You can also manually control this behavior by not adding the `isManagedSidebar` prop and instead:
21
28
  1. Add an onNavToggle callback to PageHeader
@@ -50,3 +57,9 @@ When adding a context selector/perspective switcher in a `PageSidebar`, you must
50
57
  ```ts file='./examples/Page/PageContextSelector.tsx' isFullscreen
51
58
 
52
59
  ```
60
+
61
+ ### Plain
62
+
63
+ ```ts file='./examples/Page/PagePlain.tsx' isFullscreen
64
+
65
+ ```
@@ -0,0 +1,342 @@
1
+ import { useState } from 'react';
2
+ import {
3
+ Bullseye,
4
+ Button,
5
+ ButtonVariant,
6
+ Card,
7
+ CardBody,
8
+ CardExpandableContent,
9
+ CardFooter,
10
+ CardHeader,
11
+ CardTitle,
12
+ Content,
13
+ Divider,
14
+ Dropdown,
15
+ DropdownItem,
16
+ DropdownList,
17
+ EmptyState,
18
+ EmptyStateActions,
19
+ EmptyStateFooter,
20
+ EmptyStateVariant,
21
+ Flex,
22
+ FlexItem,
23
+ Gallery,
24
+ GalleryItem,
25
+ Icon,
26
+ Label,
27
+ LabelColor,
28
+ LabelGroup,
29
+ LabelStatus,
30
+ MenuToggle,
31
+ MenuToggleElement,
32
+ Page,
33
+ PageBody,
34
+ PageFooter,
35
+ PageHeader,
36
+ PageSection,
37
+ Panel,
38
+ PanelMain,
39
+ PanelMainBody,
40
+ SkipToContent,
41
+ Title
42
+ } from '@patternfly/react-core';
43
+ import RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';
44
+ import RhUiAddCircleFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-add-circle-fill-icon';
45
+ import RhUiTrashFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-trash-fill-icon';
46
+ import RhUiPortIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-port-icon';
47
+ import RhUiContainerIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-container-icon';
48
+ import RhUiAutomationIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-automation-icon';
49
+ import RhUiConnectedIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-connected-icon';
50
+ import RhUiArrowRightIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-arrow-right-icon';
51
+ import pfIcon from '@patternfly/react-core/src/demos/assets/PF-IconLogo.svg';
52
+ import activeMQIcon from '@patternfly/react-core/src/demos/assets/activemq-core_200x150.png';
53
+ import avroIcon from '@patternfly/react-core/src/demos/assets/camel-avro_200x150.png';
54
+ import dropBoxIcon from '@patternfly/react-core/src/demos/assets/camel-dropbox_200x150.png';
55
+ import infinispanIcon from '@patternfly/react-core/src/demos/assets/camel-infinispan_200x150.png';
56
+ import saxonIcon from '@patternfly/react-core/src/demos/assets/camel-saxon_200x150.png';
57
+ import sparkIcon from '@patternfly/react-core/src/demos/assets/camel-spark_200x150.png';
58
+ import swaggerIcon from '@patternfly/react-core/src/demos/assets/camel-swagger-java_200x150.png';
59
+ import azureIcon from '@patternfly/react-core/src/demos/assets/FuseConnector_Icons_AzureServices.png';
60
+ import restIcon from '@patternfly/react-core/src/demos/assets/FuseConnector_Icons_REST.png';
61
+ import { data } from '@patternfly/react-core/src/demos/CardView/examples/CardViewData.jsx';
62
+
63
+ export const PagePlain: React.FunctionComponent = () => {
64
+ const [isPathwayExpanded, setIsPathwayExpanded] = useState(true);
65
+ const [isPathwayKebabOpen, setIsPathwayKebabOpen] = useState(false);
66
+ const [selectedItems, setSelectedItems] = useState<number[]>([]);
67
+ const [openCardMenu, setOpenCardMenu] = useState<number | null>(null);
68
+ const mainContainerId = 'main-content-page-demo-plain';
69
+
70
+ const icons = {
71
+ pfIcon,
72
+ activeMQIcon,
73
+ avroIcon,
74
+ dropBoxIcon,
75
+ infinispanIcon,
76
+ saxonIcon,
77
+ sparkIcon,
78
+ swaggerIcon,
79
+ azureIcon,
80
+ restIcon
81
+ };
82
+
83
+ const cards = data.map((product) => (
84
+ <GalleryItem key={product.name} component="li">
85
+ <Card isCompact isGlass isClickable isSelectable isFullHeight id={product.name.replace(/ /g, '-')}>
86
+ <CardHeader
87
+ selectableActions={{
88
+ isChecked: selectedItems.includes(product.id),
89
+ selectableActionId: `page-demo-plain-selectable-${product.id}`,
90
+ selectableActionAriaLabelledby: `${product.name.replace(/ /g, '-')}-title`,
91
+ selectableActionProps: { isLabelWrapped: true },
92
+ name: `page-demo-plain-check-${product.id}`,
93
+ onChange: (_event, checked) => {
94
+ setSelectedItems((items) =>
95
+ checked ? [...items, product.id] : items.filter((item) => item !== product.id)
96
+ );
97
+ }
98
+ }}
99
+ actions={{
100
+ actions: (
101
+ <Dropdown
102
+ isOpen={openCardMenu === product.id}
103
+ onOpenChange={(isOpen) => setOpenCardMenu(isOpen ? product.id : null)}
104
+ toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
105
+ <MenuToggle
106
+ ref={toggleRef}
107
+ aria-label={`${product.name} actions`}
108
+ variant="plain"
109
+ onClick={() => setOpenCardMenu(openCardMenu === product.id ? null : product.id)}
110
+ isExpanded={openCardMenu === product.id}
111
+ icon={<RhUiEllipsisVerticalFillIcon />}
112
+ />
113
+ )}
114
+ >
115
+ <DropdownList>
116
+ <DropdownItem onClick={() => setOpenCardMenu(null)}>
117
+ <RhUiTrashFillIcon /> Delete
118
+ </DropdownItem>
119
+ </DropdownList>
120
+ </Dropdown>
121
+ )
122
+ }}
123
+ >
124
+ <img src={icons[product.icon]} alt="" style={{ maxWidth: '60px' }} />
125
+ </CardHeader>
126
+ <CardTitle>{product.name}</CardTitle>
127
+ <CardBody>{product.description}</CardBody>
128
+ </Card>
129
+ </GalleryItem>
130
+ ));
131
+
132
+ const renderPathwayCard = (
133
+ category: React.ReactNode,
134
+ systems: number,
135
+ description: string,
136
+ rebootRequired: boolean,
137
+ hasIncident: boolean
138
+ ) => (
139
+ <FlexItem flex={{ default: 'flex_1' }} alignSelf={{ default: 'alignSelfStretch' }}>
140
+ <Card isPlain isFullHeight>
141
+ <CardBody>
142
+ <Flex direction={{ default: 'column' }} spaceItems={{ default: 'spaceItemsSm' }} className="pf-v6-u-h-100">
143
+ <Flex
144
+ spaceItems={{ default: 'spaceItemsSm' }}
145
+ direction={{ md: 'column', lg: 'row' }}
146
+ spacer={{ md: 'spacerMd', lg: 'spacerSm' }}
147
+ >
148
+ {category}
149
+ <Button variant={ButtonVariant.link} isInline component="a" href="#">
150
+ {systems} systems
151
+ </Button>
152
+ </Flex>
153
+ <FlexItem spacer={{ default: 'spacerMd' }}>
154
+ <p>{description}</p>
155
+ </FlexItem>
156
+ <Flex
157
+ grow={{ default: 'grow' }}
158
+ direction={{ default: 'column', lg: 'row' }}
159
+ justifyContent={{ default: 'justifyContentFlexEnd', lg: 'justifyContentFlexStart' }}
160
+ alignContent={{ lg: 'alignContentFlexEnd' }}
161
+ rowGap={{ default: 'rowGapMd' }}
162
+ >
163
+ {hasIncident && (
164
+ <FlexItem style={{ marginBlockEnd: '-.25em' }}>
165
+ <Label status={LabelStatus.danger}>Incident</Label>
166
+ </FlexItem>
167
+ )}
168
+ <Flex
169
+ spaceItems={{ default: 'spaceItemsSm' }}
170
+ alignItems={{ default: 'alignItemsCenter' }}
171
+ flexWrap={{ default: 'nowrap' }}
172
+ rowGap={{ default: 'rowGapMd' }}
173
+ >
174
+ <Icon status={rebootRequired ? 'danger' : 'success'}>
175
+ <RhUiConnectedIcon />
176
+ </Icon>
177
+ <p className="pf-v6-u-color-200">
178
+ System reboot <b className="pf-v6-u-color-100">{rebootRequired ? 'is' : 'is not'}</b> required
179
+ </p>
180
+ </Flex>
181
+ </Flex>
182
+ </Flex>
183
+ </CardBody>
184
+ <CardFooter>
185
+ <Button
186
+ variant={ButtonVariant.link}
187
+ isInline
188
+ component="a"
189
+ href="#"
190
+ icon={<RhUiArrowRightIcon />}
191
+ iconPosition="end"
192
+ >
193
+ View pathway
194
+ </Button>
195
+ </CardFooter>
196
+ </Card>
197
+ </FlexItem>
198
+ );
199
+
200
+ const recommendedPathwaysCard = (
201
+ <Card isExpanded={isPathwayExpanded} isGlass>
202
+ <CardHeader
203
+ onExpand={() => setIsPathwayExpanded(!isPathwayExpanded)}
204
+ toggleButtonProps={{
205
+ id: 'page-demo-plain-expandable-status-card-1-toggle',
206
+ 'aria-label': 'Details',
207
+ 'aria-labelledby':
208
+ 'page-demo-plain-expandable-status-card-1-title page-demo-plain-expandable-status-card-1-toggle',
209
+ 'aria-expanded': isPathwayExpanded
210
+ }}
211
+ actions={{
212
+ actions: (
213
+ <Dropdown
214
+ isOpen={isPathwayKebabOpen}
215
+ onOpenChange={(isOpen) => setIsPathwayKebabOpen(isOpen)}
216
+ toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
217
+ <MenuToggle
218
+ ref={toggleRef}
219
+ id="page-demo-plain-expandable-status-card-1-action-kebab"
220
+ aria-label="Menu toggle"
221
+ variant="plain"
222
+ onClick={() => setIsPathwayKebabOpen(!isPathwayKebabOpen)}
223
+ isExpanded={isPathwayKebabOpen}
224
+ icon={<RhUiEllipsisVerticalFillIcon />}
225
+ />
226
+ )}
227
+ >
228
+ <DropdownList>
229
+ <DropdownItem onClick={() => setIsPathwayKebabOpen(false)}>Action</DropdownItem>
230
+ </DropdownList>
231
+ </Dropdown>
232
+ )
233
+ }}
234
+ >
235
+ <CardTitle id="page-demo-plain-expandable-status-card-1-title">
236
+ <Title headingLevel="h2" size="xl">
237
+ Improve recommended pathways
238
+ </Title>
239
+ </CardTitle>
240
+ </CardHeader>
241
+ <CardExpandableContent>
242
+ <Flex direction={{ default: 'column', md: 'row' }} alignItems={{ default: 'alignItemsStretch' }}>
243
+ {renderPathwayCard(
244
+ <LabelGroup aria-label="Group of labels">
245
+ <Label variant="outline" color={LabelColor.blue} icon={<RhUiPortIcon />}>
246
+ Performance
247
+ </Label>
248
+ </LabelGroup>,
249
+ 378,
250
+ 'Upgrade your kernel version to remediate ntpd time sync issues, kernel panics, network instabilities and issues with system performance',
251
+ true,
252
+ true
253
+ )}
254
+ <Divider orientation={{ md: 'vertical' }} inset={{ default: 'inset3xl' }} />
255
+ {renderPathwayCard(
256
+ <LabelGroup numLabels={1} aria-label="Group of labels">
257
+ <Label variant="outline" color={LabelColor.blue} icon={<RhUiContainerIcon />}>
258
+ Stability
259
+ </Label>
260
+ <Label variant="outline" color={LabelColor.blue}>
261
+ Availability
262
+ </Label>
263
+ </LabelGroup>,
264
+ 211,
265
+ 'Adjust your networking configuration to get ahead of network performance degradations and packet losses',
266
+ false,
267
+ false
268
+ )}
269
+ <Divider orientation={{ md: 'vertical' }} inset={{ default: 'inset3xl' }} />
270
+ {renderPathwayCard(
271
+ <LabelGroup aria-label="Group of labels">
272
+ <Label variant="outline" color={LabelColor.blue} icon={<RhUiAutomationIcon />}>
273
+ Availability
274
+ </Label>
275
+ </LabelGroup>,
276
+ 166,
277
+ 'Fine tune your Oracle DB configuration to improve database performance and avoid process failure',
278
+ true,
279
+ true
280
+ )}
281
+ </Flex>
282
+ </CardExpandableContent>
283
+ </Card>
284
+ );
285
+
286
+ const footer = (
287
+ <PageFooter>
288
+ <PageBody>custom footer</PageBody>
289
+ </PageFooter>
290
+ );
291
+
292
+ return (
293
+ <Page
294
+ id="page-demo-plain"
295
+ isPlain
296
+ masthead={<PageHeader>Custom header</PageHeader>}
297
+ skipToContent={<SkipToContent href={`#${mainContainerId}`}>Skip to content</SkipToContent>}
298
+ mainContainerId={mainContainerId}
299
+ footer={footer}
300
+ sidebar={null}
301
+ >
302
+ <PageSection isPlain padding={{ default: 'noPadding' }}>
303
+ <Panel isGlass variant="bordered">
304
+ <PanelMain>
305
+ <PanelMainBody>
306
+ <Content>
307
+ <h1>Page title</h1>
308
+ <p>This is a full page demo.</p>
309
+ </Content>
310
+ </PanelMainBody>
311
+ </PanelMain>
312
+ </Panel>
313
+ </PageSection>
314
+ <PageSection isPlain padding={{ default: 'noPadding' }}>
315
+ {recommendedPathwaysCard}
316
+ </PageSection>
317
+ <PageSection isPlain padding={{ default: 'noPadding' }} isFilled>
318
+ <Gallery component="ul" hasGutter aria-label="Selectable card container">
319
+ <GalleryItem component="li">
320
+ <Card isCompact isGlass isFullHeight>
321
+ <Bullseye>
322
+ <EmptyState
323
+ headingLevel="h2"
324
+ titleText="Add a new card to your page"
325
+ icon={RhUiAddCircleFillIcon}
326
+ variant={EmptyStateVariant.xs}
327
+ >
328
+ <EmptyStateFooter>
329
+ <EmptyStateActions>
330
+ <Button variant={ButtonVariant.link}>Add card</Button>
331
+ </EmptyStateActions>
332
+ </EmptyStateFooter>
333
+ </EmptyState>
334
+ </Bullseye>
335
+ </Card>
336
+ </GalleryItem>
337
+ {cards}
338
+ </Gallery>
339
+ </PageSection>
340
+ </Page>
341
+ );
342
+ };
@@ -1,19 +0,0 @@
1
- import { Page, PageHeader, PageSection } from '@patternfly/react-core';
2
-
3
- export const PageHeaderContent: React.FunctionComponent = () => {
4
- const pageHeader = <PageHeader>Page header</PageHeader>;
5
-
6
- return (
7
- <Page masthead={pageHeader}>
8
- <PageSection aria-labelledby="header-example-section-1">
9
- <h2 id="header-example-section-1">Page header example section 1</h2>
10
- </PageSection>
11
- <PageSection variant="secondary" aria-labelledby="header-example-section-2">
12
- <h2 id="header-example-section-2">Page header example section 2 with secondary variant styling</h2>
13
- </PageSection>
14
- <PageSection aria-labelledby="header-example-section-3">
15
- <h2 id="header-example-section-3">Page header example section 3</h2>
16
- </PageSection>
17
- </Page>
18
- );
19
- };