@patternfly/react-core 6.4.1-prerelease.9 → 6.5.0-prerelease.10
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.
- package/CHANGELOG.md +73 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/Compass/package.json +1 -0
- package/dist/dynamic/components/Content/package.json +1 -1
- package/dist/dynamic/components/DataList/package.json +1 -1
- package/dist/dynamic/components/DatePicker/package.json +1 -1
- package/dist/dynamic/components/DescriptionList/package.json +1 -1
- package/dist/dynamic/components/Divider/package.json +1 -1
- package/dist/dynamic/components/Drawer/package.json +1 -1
- package/dist/dynamic/components/Dropdown/package.json +1 -1
- package/dist/dynamic/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/components/EmptyState/package.json +1 -1
- package/dist/dynamic/components/ExpandableSection/package.json +1 -1
- package/dist/dynamic/components/FileUpload/package.json +1 -1
- package/dist/dynamic/components/Form/package.json +1 -1
- package/dist/dynamic/components/FormSelect/package.json +1 -1
- package/dist/dynamic/components/HelperText/package.json +1 -1
- package/dist/dynamic/components/Hint/package.json +1 -1
- package/dist/dynamic/components/Icon/package.json +1 -1
- package/dist/dynamic/components/InputGroup/package.json +1 -1
- package/dist/dynamic/components/JumpLinks/package.json +1 -1
- package/dist/dynamic/components/Label/package.json +1 -1
- package/dist/dynamic/components/List/package.json +1 -1
- package/dist/dynamic/components/LoginPage/package.json +1 -1
- package/dist/dynamic/components/Masthead/package.json +1 -1
- package/dist/dynamic/components/Menu/package.json +1 -1
- package/dist/dynamic/components/MenuToggle/package.json +1 -1
- package/dist/dynamic/components/Modal/package.json +1 -1
- package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
- package/dist/dynamic/components/Nav/package.json +1 -1
- package/dist/dynamic/components/NotificationBadge/package.json +1 -1
- package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
- package/dist/dynamic/components/NumberInput/package.json +1 -1
- package/dist/dynamic/components/OverflowMenu/package.json +1 -1
- package/dist/dynamic/components/Page/package.json +1 -1
- package/dist/dynamic/components/Pagination/package.json +1 -1
- package/dist/dynamic/components/Panel/package.json +1 -1
- package/dist/dynamic/components/Popover/package.json +1 -1
- package/dist/dynamic/components/Progress/package.json +1 -1
- package/dist/dynamic/components/ProgressStepper/package.json +1 -1
- package/dist/dynamic/components/Radio/package.json +1 -1
- package/dist/dynamic/components/SearchInput/package.json +1 -1
- package/dist/dynamic/components/Select/package.json +1 -1
- package/dist/dynamic/components/Sidebar/package.json +1 -1
- package/dist/dynamic/components/SimpleList/package.json +1 -1
- package/dist/dynamic/components/Skeleton/package.json +1 -1
- package/dist/dynamic/components/SkipToContent/package.json +1 -1
- package/dist/dynamic/components/Slider/package.json +1 -1
- package/dist/dynamic/components/Spinner/package.json +1 -1
- package/dist/dynamic/components/Switch/package.json +1 -1
- package/dist/dynamic/components/Tabs/package.json +1 -1
- package/dist/dynamic/components/TextArea/package.json +1 -1
- package/dist/dynamic/components/TextInput/package.json +1 -1
- package/dist/dynamic/components/TextInputGroup/package.json +1 -1
- package/dist/dynamic/components/TimePicker/package.json +1 -1
- package/dist/dynamic/components/Timestamp/package.json +1 -1
- package/dist/dynamic/components/Title/package.json +1 -1
- package/dist/dynamic/components/ToggleGroup/package.json +1 -1
- package/dist/dynamic/components/Toolbar/package.json +1 -1
- package/dist/dynamic/components/Tooltip/package.json +1 -1
- package/dist/dynamic/components/TreeView/package.json +1 -1
- package/dist/dynamic/components/Truncate/package.json +1 -1
- package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
- package/dist/dynamic/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
- package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
- package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
- package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
- package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/dynamic/helpers/AnimationsProvider/AnimationsProvider/package.json +1 -1
- package/dist/dynamic/helpers/AnimationsProvider/package.json +1 -1
- package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
- package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
- package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
- package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
- package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
- package/dist/dynamic/helpers/constants/package.json +1 -1
- package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
- package/dist/dynamic/helpers/fileUtils/package.json +1 -1
- package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
- package/dist/dynamic/helpers/package.json +1 -1
- package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
- package/dist/dynamic/helpers/typeUtils/package.json +1 -1
- package/dist/dynamic/helpers/useInterval/package.json +1 -1
- package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
- package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
- package/dist/dynamic/helpers/util/package.json +1 -1
- package/dist/dynamic/layouts/Bullseye/package.json +1 -1
- package/dist/dynamic/layouts/Flex/package.json +1 -1
- package/dist/dynamic/layouts/Gallery/package.json +1 -1
- package/dist/dynamic/layouts/Grid/package.json +1 -1
- package/dist/dynamic/layouts/Level/package.json +1 -1
- package/dist/dynamic/layouts/Split/package.json +1 -1
- package/dist/dynamic/layouts/Stack/package.json +1 -1
- package/dist/dynamic/styles/package.json +1 -1
- package/dist/dynamic-modules.json +8 -0
- package/dist/esm/components/ActionList/ActionList.d.ts +2 -0
- package/dist/esm/components/ActionList/ActionList.d.ts.map +1 -1
- package/dist/esm/components/ActionList/ActionList.js +2 -2
- package/dist/esm/components/ActionList/ActionList.js.map +1 -1
- package/dist/esm/components/Button/Button.d.ts +2 -0
- package/dist/esm/components/Button/Button.d.ts.map +1 -1
- package/dist/esm/components/Button/Button.js +2 -2
- package/dist/esm/components/Button/Button.js.map +1 -1
- package/dist/esm/components/Card/CardSubtitle.d.ts +9 -0
- package/dist/esm/components/Card/CardSubtitle.d.ts.map +1 -0
- package/dist/esm/components/Card/CardSubtitle.js +10 -0
- package/dist/esm/components/Card/CardSubtitle.js.map +1 -0
- package/dist/esm/components/Card/CardTitle.d.ts +2 -0
- package/dist/esm/components/Card/CardTitle.d.ts.map +1 -1
- package/dist/esm/components/Card/CardTitle.js +5 -3
- package/dist/esm/components/Card/CardTitle.js.map +1 -1
- package/dist/esm/components/Compass/Compass.d.ts +34 -0
- package/dist/esm/components/Compass/Compass.d.ts.map +1 -0
- package/dist/esm/components/Compass/Compass.js +25 -0
- package/dist/esm/components/Compass/Compass.js.map +1 -0
- package/dist/esm/components/Compass/CompassContent.d.ts +15 -0
- package/dist/esm/components/Compass/CompassContent.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassContent.js +16 -0
- package/dist/esm/components/Compass/CompassContent.js.map +1 -0
- package/dist/esm/components/Compass/CompassHeader.d.ts +12 -0
- package/dist/esm/components/Compass/CompassHeader.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassHeader.js +6 -0
- package/dist/esm/components/Compass/CompassHeader.js.map +1 -0
- package/dist/esm/components/Compass/CompassHero.d.ts +26 -0
- package/dist/esm/components/Compass/CompassHero.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassHero.js +47 -0
- package/dist/esm/components/Compass/CompassHero.js.map +1 -0
- package/dist/esm/components/Compass/CompassMainHeader.d.ts +14 -0
- package/dist/esm/components/Compass/CompassMainHeader.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassMainHeader.js +13 -0
- package/dist/esm/components/Compass/CompassMainHeader.js.map +1 -0
- package/dist/esm/components/Compass/CompassMessageBar.d.ts +10 -0
- package/dist/esm/components/Compass/CompassMessageBar.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassMessageBar.js +10 -0
- package/dist/esm/components/Compass/CompassMessageBar.js.map +1 -0
- package/dist/esm/components/Compass/CompassPanel.d.ts +22 -0
- package/dist/esm/components/Compass/CompassPanel.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassPanel.js +10 -0
- package/dist/esm/components/Compass/CompassPanel.js.map +1 -0
- package/dist/esm/components/Compass/index.d.ts +8 -0
- package/dist/esm/components/Compass/index.d.ts.map +1 -0
- package/dist/esm/components/Compass/index.js +8 -0
- package/dist/esm/components/Compass/index.js.map +1 -0
- package/dist/esm/components/DataList/DataList.d.ts +2 -0
- package/dist/esm/components/DataList/DataList.d.ts.map +1 -1
- package/dist/esm/components/DataList/DataList.js +2 -2
- package/dist/esm/components/DataList/DataList.js.map +1 -1
- package/dist/esm/components/Drawer/Drawer.d.ts +2 -0
- package/dist/esm/components/Drawer/Drawer.d.ts.map +1 -1
- package/dist/esm/components/Drawer/Drawer.js +2 -2
- package/dist/esm/components/Drawer/Drawer.js.map +1 -1
- package/dist/esm/components/Drawer/DrawerPanelContent.d.ts +2 -0
- package/dist/esm/components/Drawer/DrawerPanelContent.d.ts.map +1 -1
- package/dist/esm/components/Drawer/DrawerPanelContent.js +2 -2
- package/dist/esm/components/Drawer/DrawerPanelContent.js.map +1 -1
- package/dist/esm/components/ExpandableSection/ExpandableSection.d.ts +9 -2
- package/dist/esm/components/ExpandableSection/ExpandableSection.d.ts.map +1 -1
- package/dist/esm/components/ExpandableSection/ExpandableSection.js +5 -3
- package/dist/esm/components/ExpandableSection/ExpandableSection.js.map +1 -1
- package/dist/esm/components/ExpandableSection/ExpandableSectionToggle.d.ts +5 -0
- package/dist/esm/components/ExpandableSection/ExpandableSectionToggle.d.ts.map +1 -1
- package/dist/esm/components/ExpandableSection/ExpandableSectionToggle.js +3 -2
- package/dist/esm/components/ExpandableSection/ExpandableSectionToggle.js.map +1 -1
- package/dist/esm/components/Menu/Menu.d.ts +0 -1
- package/dist/esm/components/Menu/Menu.d.ts.map +1 -1
- package/dist/esm/components/Menu/Menu.js +5 -8
- package/dist/esm/components/Menu/Menu.js.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggle.d.ts +2 -0
- package/dist/esm/components/MenuToggle/MenuToggle.d.ts.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggle.js +3 -2
- package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
- package/dist/esm/components/Page/Page.d.ts.map +1 -1
- package/dist/esm/components/Page/Page.js +1 -0
- package/dist/esm/components/Page/Page.js.map +1 -1
- package/dist/esm/components/Page/PageContext.d.ts +1 -0
- package/dist/esm/components/Page/PageContext.d.ts.map +1 -1
- package/dist/esm/components/Page/PageContext.js +1 -0
- package/dist/esm/components/Page/PageContext.js.map +1 -1
- package/dist/esm/components/Page/PageSidebar.js +2 -2
- package/dist/esm/components/Page/PageSidebar.js.map +1 -1
- package/dist/esm/components/Progress/Progress.d.ts +2 -0
- package/dist/esm/components/Progress/Progress.d.ts.map +1 -1
- package/dist/esm/components/Progress/Progress.js +2 -2
- package/dist/esm/components/Progress/Progress.js.map +1 -1
- package/dist/esm/components/Progress/ProgressContainer.d.ts +2 -0
- package/dist/esm/components/Progress/ProgressContainer.d.ts.map +1 -1
- package/dist/esm/components/Progress/ProgressContainer.js +2 -2
- package/dist/esm/components/Progress/ProgressContainer.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.d.ts +2 -0
- package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/esm/components/Tabs/Tabs.js +5 -4
- package/dist/esm/components/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/Truncate/Truncate.d.ts.map +1 -1
- package/dist/esm/components/Truncate/Truncate.js +5 -4
- package/dist/esm/components/Truncate/Truncate.js.map +1 -1
- package/dist/esm/components/index.d.ts +1 -0
- package/dist/esm/components/index.d.ts.map +1 -1
- package/dist/esm/components/index.js +1 -0
- package/dist/esm/components/index.js.map +1 -1
- package/dist/js/components/ActionList/ActionList.d.ts +2 -0
- package/dist/js/components/ActionList/ActionList.d.ts.map +1 -1
- package/dist/js/components/ActionList/ActionList.js +2 -2
- package/dist/js/components/ActionList/ActionList.js.map +1 -1
- package/dist/js/components/Button/Button.d.ts +2 -0
- package/dist/js/components/Button/Button.d.ts.map +1 -1
- package/dist/js/components/Button/Button.js +2 -2
- package/dist/js/components/Button/Button.js.map +1 -1
- package/dist/js/components/Card/CardSubtitle.d.ts +9 -0
- package/dist/js/components/Card/CardSubtitle.d.ts.map +1 -0
- package/dist/js/components/Card/CardSubtitle.js +14 -0
- package/dist/js/components/Card/CardSubtitle.js.map +1 -0
- package/dist/js/components/Card/CardTitle.d.ts +2 -0
- package/dist/js/components/Card/CardTitle.d.ts.map +1 -1
- package/dist/js/components/Card/CardTitle.js +4 -2
- package/dist/js/components/Card/CardTitle.js.map +1 -1
- package/dist/js/components/Compass/Compass.d.ts +34 -0
- package/dist/js/components/Compass/Compass.d.ts.map +1 -0
- package/dist/js/components/Compass/Compass.js +29 -0
- package/dist/js/components/Compass/Compass.js.map +1 -0
- package/dist/js/components/Compass/CompassContent.d.ts +15 -0
- package/dist/js/components/Compass/CompassContent.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassContent.js +20 -0
- package/dist/js/components/Compass/CompassContent.js.map +1 -0
- package/dist/js/components/Compass/CompassHeader.d.ts +12 -0
- package/dist/js/components/Compass/CompassHeader.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassHeader.js +11 -0
- package/dist/js/components/Compass/CompassHeader.js.map +1 -0
- package/dist/js/components/Compass/CompassHero.d.ts +26 -0
- package/dist/js/components/Compass/CompassHero.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassHero.js +51 -0
- package/dist/js/components/Compass/CompassHero.js.map +1 -0
- package/dist/js/components/Compass/CompassMainHeader.d.ts +14 -0
- package/dist/js/components/Compass/CompassMainHeader.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassMainHeader.js +17 -0
- package/dist/js/components/Compass/CompassMainHeader.js.map +1 -0
- package/dist/js/components/Compass/CompassMessageBar.d.ts +10 -0
- package/dist/js/components/Compass/CompassMessageBar.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassMessageBar.js +14 -0
- package/dist/js/components/Compass/CompassMessageBar.js.map +1 -0
- package/dist/js/components/Compass/CompassPanel.d.ts +22 -0
- package/dist/js/components/Compass/CompassPanel.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassPanel.js +14 -0
- package/dist/js/components/Compass/CompassPanel.js.map +1 -0
- package/dist/js/components/Compass/index.d.ts +8 -0
- package/dist/js/components/Compass/index.d.ts.map +1 -0
- package/dist/js/components/Compass/index.js +11 -0
- package/dist/js/components/Compass/index.js.map +1 -0
- package/dist/js/components/DataList/DataList.d.ts +2 -0
- package/dist/js/components/DataList/DataList.d.ts.map +1 -1
- package/dist/js/components/DataList/DataList.js +2 -2
- package/dist/js/components/DataList/DataList.js.map +1 -1
- package/dist/js/components/Drawer/Drawer.d.ts +2 -0
- package/dist/js/components/Drawer/Drawer.d.ts.map +1 -1
- package/dist/js/components/Drawer/Drawer.js +2 -2
- package/dist/js/components/Drawer/Drawer.js.map +1 -1
- package/dist/js/components/Drawer/DrawerPanelContent.d.ts +2 -0
- package/dist/js/components/Drawer/DrawerPanelContent.d.ts.map +1 -1
- package/dist/js/components/Drawer/DrawerPanelContent.js +2 -2
- package/dist/js/components/Drawer/DrawerPanelContent.js.map +1 -1
- package/dist/js/components/ExpandableSection/ExpandableSection.d.ts +9 -2
- package/dist/js/components/ExpandableSection/ExpandableSection.d.ts.map +1 -1
- package/dist/js/components/ExpandableSection/ExpandableSection.js +5 -3
- package/dist/js/components/ExpandableSection/ExpandableSection.js.map +1 -1
- package/dist/js/components/ExpandableSection/ExpandableSectionToggle.d.ts +5 -0
- package/dist/js/components/ExpandableSection/ExpandableSectionToggle.d.ts.map +1 -1
- package/dist/js/components/ExpandableSection/ExpandableSectionToggle.js +3 -2
- package/dist/js/components/ExpandableSection/ExpandableSectionToggle.js.map +1 -1
- package/dist/js/components/Menu/Menu.d.ts +0 -1
- package/dist/js/components/Menu/Menu.d.ts.map +1 -1
- package/dist/js/components/Menu/Menu.js +5 -8
- package/dist/js/components/Menu/Menu.js.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggle.d.ts +2 -0
- package/dist/js/components/MenuToggle/MenuToggle.d.ts.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggle.js +3 -2
- package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
- package/dist/js/components/Page/Page.d.ts.map +1 -1
- package/dist/js/components/Page/Page.js +1 -0
- package/dist/js/components/Page/Page.js.map +1 -1
- package/dist/js/components/Page/PageContext.d.ts +1 -0
- package/dist/js/components/Page/PageContext.d.ts.map +1 -1
- package/dist/js/components/Page/PageContext.js +1 -0
- package/dist/js/components/Page/PageContext.js.map +1 -1
- package/dist/js/components/Page/PageSidebar.js +2 -2
- package/dist/js/components/Page/PageSidebar.js.map +1 -1
- package/dist/js/components/Progress/Progress.d.ts +2 -0
- package/dist/js/components/Progress/Progress.d.ts.map +1 -1
- package/dist/js/components/Progress/Progress.js +2 -2
- package/dist/js/components/Progress/Progress.js.map +1 -1
- package/dist/js/components/Progress/ProgressContainer.d.ts +2 -0
- package/dist/js/components/Progress/ProgressContainer.d.ts.map +1 -1
- package/dist/js/components/Progress/ProgressContainer.js +2 -2
- package/dist/js/components/Progress/ProgressContainer.js.map +1 -1
- package/dist/js/components/Tabs/Tabs.d.ts +2 -0
- package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/js/components/Tabs/Tabs.js +5 -4
- package/dist/js/components/Tabs/Tabs.js.map +1 -1
- package/dist/js/components/Truncate/Truncate.d.ts.map +1 -1
- package/dist/js/components/Truncate/Truncate.js +5 -4
- package/dist/js/components/Truncate/Truncate.js.map +1 -1
- package/dist/js/components/index.d.ts +1 -0
- package/dist/js/components/index.d.ts.map +1 -1
- package/dist/js/components/index.js +1 -0
- package/dist/js/components/index.js.map +1 -1
- package/dist/styles/assets/images/RHAiExperienceIcon.svg +27 -0
- package/dist/styles/assets/images/RHAutomationsLogo.svg +96 -0
- package/dist/styles/assets/images/RHServerStackIcon.svg +16 -0
- package/dist/styles/assets/images/compass--hero-bg.png +0 -0
- package/dist/styles/assets/images/compass--rh-wallpaper-dark.png +0 -0
- package/dist/styles/assets/images/compass--rh-wallpaper-light.png +0 -0
- package/dist/styles/assets/images/compass--wallpaper-dark.png +0 -0
- package/dist/styles/assets/images/compass--wallpaper-light.png +0 -0
- package/dist/styles/base-no-reset.css +97 -0
- package/dist/styles/base.css +104 -0
- package/dist/umd/assets/{output-CJfbZNQh.css → output-4DDCBaXc.css} +21118 -20783
- package/dist/umd/react-core.min.js +3 -3
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +6 -6
- package/src/components/ActionList/ActionList.tsx +12 -1
- package/src/components/ActionList/__tests__/ActionList.test.tsx +12 -0
- package/src/components/ActionList/examples/ActionList.md +6 -0
- package/src/components/ActionList/examples/ActionListVertical.tsx +46 -0
- package/src/components/Button/Button.tsx +4 -0
- package/src/components/Button/__tests__/Button.test.tsx +5 -0
- package/src/components/Button/__tests__/__snapshots__/Button.test.tsx.snap +1 -1
- package/src/components/Button/examples/Button.md +8 -0
- package/src/components/Button/examples/ButtonCircle.tsx +63 -0
- package/src/components/Card/CardSubtitle.tsx +20 -0
- package/src/components/Card/CardTitle.tsx +6 -0
- package/src/components/Card/__tests__/CardSubtitle.test.tsx +48 -0
- package/src/components/Card/__tests__/CardTitle.test.tsx +27 -17
- package/src/components/Card/__tests__/__snapshots__/CardSubtitle.test.tsx.snap +21 -0
- package/src/components/Card/__tests__/__snapshots__/CardTitle.test.tsx.snap +1 -1
- package/src/components/Card/examples/Card.md +16 -1
- package/src/components/Card/examples/CardSubtitle.tsx +9 -0
- package/src/components/Card/examples/CardSubtitleActions.tsx +107 -0
- package/src/components/ClipboardCopy/__tests__/ClipboardCopyTruncateIntegration.test.tsx +32 -0
- package/src/components/Compass/Compass.tsx +109 -0
- package/src/components/Compass/CompassContent.tsx +42 -0
- package/src/components/Compass/CompassHeader.tsx +21 -0
- package/src/components/Compass/CompassHero.tsx +87 -0
- package/src/components/Compass/CompassMainHeader.tsx +43 -0
- package/src/components/Compass/CompassMessageBar.tsx +21 -0
- package/src/components/Compass/CompassPanel.tsx +51 -0
- package/src/components/Compass/__tests__/Compass.test.tsx +172 -0
- package/src/components/Compass/__tests__/CompassContent.test.tsx +46 -0
- package/src/components/Compass/__tests__/CompassHeader.test.tsx +56 -0
- package/src/components/Compass/__tests__/CompassHero.test.tsx +150 -0
- package/src/components/Compass/__tests__/CompassMainHeader.test.tsx +90 -0
- package/src/components/Compass/__tests__/CompassMessageBar.test.tsx +41 -0
- package/src/components/Compass/__tests__/CompassPanel.test.tsx +86 -0
- package/src/components/Compass/__tests__/__snapshots__/Compass.test.tsx.snap +108 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassContent.test.tsx.snap +40 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassHeader.test.tsx.snap +27 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassHero.test.tsx.snap +18 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassMainHeader.test.tsx.snap +42 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassMessageBar.test.tsx.snap +13 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassPanel.test.tsx.snap +25 -0
- package/src/components/Compass/examples/Compass.md +47 -0
- package/src/components/Compass/examples/CompassBasic.tsx +33 -0
- package/src/components/Compass/examples/CompassDemo.tsx +151 -0
- package/src/components/Compass/examples/compass.css +11 -0
- package/src/components/Compass/index.ts +7 -0
- package/src/components/DataList/DataList.tsx +4 -0
- package/src/components/DataList/__tests__/DataList.test.tsx +6 -0
- package/src/components/DataList/examples/DataList.md +6 -0
- package/src/components/DataList/examples/DataListPlain.tsx +32 -0
- package/src/components/Drawer/Drawer.tsx +4 -0
- package/src/components/Drawer/DrawerPanelContent.tsx +4 -0
- package/src/components/Drawer/__tests__/Drawer.test.tsx +26 -1
- package/src/components/Drawer/__tests__/DrawerPanelContent.test.tsx +10 -0
- package/src/components/Drawer/examples/Drawer.md +13 -0
- package/src/components/Drawer/examples/DrawerBasicPill.tsx +57 -0
- package/src/components/Drawer/examples/DrawerPillInline.tsx +57 -0
- package/src/components/ExpandableSection/ExpandableSection.tsx +17 -5
- package/src/components/ExpandableSection/ExpandableSectionToggle.tsx +48 -38
- package/src/components/ExpandableSection/__tests__/ExpandableSection.test.tsx +63 -0
- package/src/components/ExpandableSection/__tests__/ExpandableSectionToggle.test.tsx +28 -0
- package/src/components/ExpandableSection/examples/ExpandableSection.md +16 -0
- package/src/components/ExpandableSection/examples/ExpandableSectionCustomToggle.tsx +31 -16
- package/src/components/ExpandableSection/examples/ExpandableSectionUncontrolledDynamicToggleFunction.tsx +13 -0
- package/src/components/ExpandableSection/examples/ExpandableSectionWithHeading.tsx +89 -0
- package/src/components/Menu/Menu.tsx +1 -6
- package/src/components/MenuToggle/MenuToggle.tsx +5 -1
- package/src/components/MenuToggle/__tests__/MenuToggle.test.tsx +20 -0
- package/src/components/MenuToggle/examples/MenuToggle.md +18 -0
- package/src/components/MenuToggle/examples/MenuTogglePlainCircle.tsx +11 -0
- package/src/components/Page/Page.tsx +1 -0
- package/src/components/Page/PageContext.tsx +2 -0
- package/src/components/Page/PageSidebar.tsx +2 -2
- package/src/components/Page/__tests__/Generated/__snapshots__/PageSidebar.test.tsx.snap +1 -1
- package/src/components/Page/__tests__/__snapshots__/Page.test.tsx.snap +12 -12
- package/src/components/Progress/Progress.tsx +4 -0
- package/src/components/Progress/ProgressContainer.tsx +5 -2
- package/src/components/Progress/__tests__/Generated/ProgressContainer.test.tsx +1 -0
- package/src/components/Progress/__tests__/Progress.test.tsx +32 -0
- package/src/components/Progress/examples/Progress.md +2 -14
- package/src/components/Progress/examples/ProgressInteractiveFailure.tsx +55 -0
- package/src/components/Tabs/Tabs.tsx +7 -2
- package/src/components/Tabs/__tests__/Tabs.test.tsx +60 -0
- package/src/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +13 -13
- package/src/components/Tabs/examples/Tabs.md +8 -0
- package/src/components/Tabs/examples/TabsSiteNav.tsx +40 -0
- package/src/components/Truncate/Truncate.tsx +5 -4
- package/src/components/Truncate/__tests__/Truncate.test.tsx +21 -3
- package/src/components/Truncate/__tests__/__snapshots__/Truncate.test.tsx.snap +3 -9
- package/src/components/index.ts +1 -0
- package/src/components/Progress/examples/ProgressFailureWithoutMeasure.tsx +0 -5
- package/src/components/Progress/examples/ProgressInsideSuccess.tsx +0 -10
- package/src/components/Progress/examples/ProgressOutsideFailure.tsx +0 -10
|
@@ -34,6 +34,11 @@ export interface ExpandableSectionToggleProps extends Omit<React.HTMLProps<HTMLD
|
|
|
34
34
|
toggleAriaLabel?: string;
|
|
35
35
|
/** Accessible name via space delimtted list of IDs for the expandable section toggle. */
|
|
36
36
|
toggleAriaLabelledBy?: string;
|
|
37
|
+
/** The HTML element to use for the toggle wrapper. Can be 'div' (default) or any heading level.
|
|
38
|
+
* When using heading elements, the button will be rendered inside the heading for proper semantics.
|
|
39
|
+
* This is useful when the toggle text should function as a heading in the document structure.
|
|
40
|
+
*/
|
|
41
|
+
toggleWrapper?: 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
|
|
37
42
|
}
|
|
38
43
|
|
|
39
44
|
export const ExpandableSectionToggle: React.FunctionComponent<ExpandableSectionToggleProps> = ({
|
|
@@ -48,45 +53,50 @@ export const ExpandableSectionToggle: React.FunctionComponent<ExpandableSectionT
|
|
|
48
53
|
isDetached,
|
|
49
54
|
toggleAriaLabel,
|
|
50
55
|
toggleAriaLabelledBy,
|
|
56
|
+
toggleWrapper = 'div',
|
|
51
57
|
...props
|
|
52
|
-
}: ExpandableSectionToggleProps) =>
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
58
|
+
}: ExpandableSectionToggleProps) => {
|
|
59
|
+
const ToggleWrapper = toggleWrapper as any;
|
|
60
|
+
|
|
61
|
+
return (
|
|
62
|
+
<div
|
|
63
|
+
className={css(
|
|
64
|
+
styles.expandableSection,
|
|
65
|
+
isExpanded && styles.modifiers.expanded,
|
|
66
|
+
hasTruncatedContent && styles.modifiers.truncate,
|
|
67
|
+
isDetached && 'pf-m-detached',
|
|
68
|
+
className
|
|
69
|
+
)}
|
|
70
|
+
{...props}
|
|
71
|
+
>
|
|
72
|
+
<ToggleWrapper className={`${styles.expandableSection}__toggle`}>
|
|
73
|
+
<Button
|
|
74
|
+
variant="link"
|
|
75
|
+
{...(hasTruncatedContent && { isInline: true })}
|
|
76
|
+
aria-expanded={isExpanded}
|
|
77
|
+
aria-controls={contentId}
|
|
78
|
+
onClick={() => onToggle(!isExpanded)}
|
|
79
|
+
id={toggleId}
|
|
80
|
+
{...(!hasTruncatedContent && {
|
|
81
|
+
icon: (
|
|
82
|
+
<span
|
|
83
|
+
className={css(
|
|
84
|
+
styles.expandableSectionToggleIcon,
|
|
85
|
+
isExpanded && direction === 'up' && styles.modifiers.expandTop // TODO: next breaking change move this class to the outer styles.expandableSection wrapper
|
|
86
|
+
)}
|
|
87
|
+
>
|
|
88
|
+
<AngleRightIcon />
|
|
89
|
+
</span>
|
|
90
|
+
)
|
|
91
|
+
})}
|
|
92
|
+
aria-label={toggleAriaLabel}
|
|
93
|
+
aria-labelledby={toggleAriaLabelledBy}
|
|
94
|
+
>
|
|
95
|
+
{children}
|
|
96
|
+
</Button>
|
|
97
|
+
</ToggleWrapper>
|
|
88
98
|
</div>
|
|
89
|
-
|
|
90
|
-
|
|
99
|
+
);
|
|
100
|
+
};
|
|
91
101
|
|
|
92
102
|
ExpandableSectionToggle.displayName = 'ExpandableSectionToggle';
|
|
@@ -208,3 +208,66 @@ test('Renders with aria-labelledby when toggleAriaLabelledBy is passed', () => {
|
|
|
208
208
|
|
|
209
209
|
expect(screen.getByRole('button')).toHaveAccessibleName('Test label');
|
|
210
210
|
});
|
|
211
|
+
|
|
212
|
+
test('Renders toggleContent as a function in uncontrolled mode (collapsed)', () => {
|
|
213
|
+
render(
|
|
214
|
+
<ExpandableSection toggleContent={(isExpanded) => (isExpanded ? 'Hide details' : 'Show details')}>
|
|
215
|
+
Test content
|
|
216
|
+
</ExpandableSection>
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
expect(screen.getByRole('button', { name: 'Show details' })).toBeInTheDocument();
|
|
220
|
+
});
|
|
221
|
+
|
|
222
|
+
test('Renders toggleContent as a function in uncontrolled mode (expanded after click)', async () => {
|
|
223
|
+
const user = userEvent.setup();
|
|
224
|
+
|
|
225
|
+
render(
|
|
226
|
+
<ExpandableSection toggleContent={(isExpanded) => (isExpanded ? 'Hide details' : 'Show details')}>
|
|
227
|
+
Test content
|
|
228
|
+
</ExpandableSection>
|
|
229
|
+
);
|
|
230
|
+
|
|
231
|
+
const button = screen.getByRole('button', { name: 'Show details' });
|
|
232
|
+
await user.click(button);
|
|
233
|
+
|
|
234
|
+
expect(screen.getByRole('button', { name: 'Hide details' })).toBeInTheDocument();
|
|
235
|
+
});
|
|
236
|
+
|
|
237
|
+
test('Renders toggleContent as a function in controlled mode', () => {
|
|
238
|
+
render(
|
|
239
|
+
<ExpandableSection isExpanded={true} toggleContent={(isExpanded) => (isExpanded ? 'Collapse' : 'Expand')}>
|
|
240
|
+
Test content
|
|
241
|
+
</ExpandableSection>
|
|
242
|
+
);
|
|
243
|
+
|
|
244
|
+
expect(screen.getByRole('button', { name: 'Collapse' })).toBeInTheDocument();
|
|
245
|
+
});
|
|
246
|
+
|
|
247
|
+
test('Renders with default div wrapper when toggleWrapper is not specified', () => {
|
|
248
|
+
render(<ExpandableSection data-testid="test-id">Test content</ExpandableSection>);
|
|
249
|
+
|
|
250
|
+
const toggle = screen.getByRole('button').parentElement;
|
|
251
|
+
expect(toggle?.tagName).toBe('DIV');
|
|
252
|
+
});
|
|
253
|
+
|
|
254
|
+
test('Renders with h2 wrapper when toggleWrapper="h2"', () => {
|
|
255
|
+
render(
|
|
256
|
+
<ExpandableSection data-testid="test-id" toggleWrapper="h2">
|
|
257
|
+
Test content
|
|
258
|
+
</ExpandableSection>
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
expect(screen.getByRole('heading', { level: 2 })).toBeInTheDocument();
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
test('Renders with div wrapper when toggleWrapper="div"', () => {
|
|
265
|
+
render(
|
|
266
|
+
<ExpandableSection data-testid="test-id" toggleWrapper="div">
|
|
267
|
+
Test content
|
|
268
|
+
</ExpandableSection>
|
|
269
|
+
);
|
|
270
|
+
|
|
271
|
+
const toggle = screen.getByRole('button').parentElement;
|
|
272
|
+
expect(toggle?.tagName).toBe('DIV');
|
|
273
|
+
});
|
|
@@ -47,3 +47,31 @@ test('Renders with aria-labelledby when toggleAriaLabelledBy is passed', () => {
|
|
|
47
47
|
|
|
48
48
|
expect(screen.getByRole('button')).toHaveAccessibleName('Test label');
|
|
49
49
|
});
|
|
50
|
+
|
|
51
|
+
test('Renders with default div wrapper when toggleWrapper is not specified', () => {
|
|
52
|
+
render(<ExpandableSectionToggle data-testid="test-id">Toggle test</ExpandableSectionToggle>);
|
|
53
|
+
|
|
54
|
+
const toggle = screen.getByRole('button').parentElement;
|
|
55
|
+
expect(toggle?.tagName).toBe('DIV');
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
test('Renders with h2 wrapper when toggleWrapper="h2"', () => {
|
|
59
|
+
render(
|
|
60
|
+
<ExpandableSectionToggle data-testid="test-id" toggleWrapper="h2">
|
|
61
|
+
Toggle test
|
|
62
|
+
</ExpandableSectionToggle>
|
|
63
|
+
);
|
|
64
|
+
|
|
65
|
+
expect(screen.getByRole('heading', { level: 2 })).toBeInTheDocument();
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
test('Renders with div wrapper when toggleWrapper="div"', () => {
|
|
69
|
+
render(
|
|
70
|
+
<ExpandableSectionToggle data-testid="test-id" toggleWrapper="div">
|
|
71
|
+
Toggle test
|
|
72
|
+
</ExpandableSectionToggle>
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
const toggle = screen.getByRole('button').parentElement;
|
|
76
|
+
expect(toggle?.tagName).toBe('DIV');
|
|
77
|
+
});
|
|
@@ -28,6 +28,14 @@ import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle
|
|
|
28
28
|
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
+
### Uncontrolled with dynamic toggle content (function)
|
|
32
|
+
|
|
33
|
+
Use `toggleContent` as a function to dynamically render different content based on the expanded state without managing state yourself.
|
|
34
|
+
|
|
35
|
+
```ts file="ExpandableSectionUncontrolledDynamicToggleFunction.tsx"
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
|
|
31
39
|
### Detached
|
|
32
40
|
|
|
33
41
|
When passing the `isDetached` property into `<ExpandableSection>`, you must also manually pass in the same `toggleId` and `contentId` properties to both `<ExpandableSection>` and `<ExpandableSectionToggle>`. This will link the content to the toggle via ARIA attributes.
|
|
@@ -62,6 +70,14 @@ By using the `toggleContent` prop, you can pass in content other than a simple s
|
|
|
62
70
|
|
|
63
71
|
```
|
|
64
72
|
|
|
73
|
+
### With heading semantics
|
|
74
|
+
|
|
75
|
+
When the toggle text should function as a heading in the document structure, use the `toggleWrapper` prop to specify a heading element (h1-h6). This ensures proper semantic structure for screen readers and other assistive technologies. The component automatically uses a native button element when heading wrappers are used, allowing the heading styles to display properly.
|
|
76
|
+
|
|
77
|
+
```ts file="ExpandableSectionWithHeading.tsx"
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
|
|
65
81
|
### Truncate expansion
|
|
66
82
|
|
|
67
83
|
By passing in `variant="truncate"`, the expandable content will be visible up to a maximum number of lines before being truncated, with the toggle revealing or hiding the truncated content. By default the expandable content will truncate after 3 lines, and this can be customized by also passing in the `truncateMaxLines` prop.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
|
-
import { ExpandableSection, Badge } from '@patternfly/react-core';
|
|
2
|
+
import { ExpandableSection, Badge, Stack, StackItem } from '@patternfly/react-core';
|
|
3
3
|
import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle-icon';
|
|
4
4
|
|
|
5
5
|
export const ExpandableSectionCustomToggle: React.FunctionComponent = () => {
|
|
@@ -10,20 +10,35 @@ export const ExpandableSectionCustomToggle: React.FunctionComponent = () => {
|
|
|
10
10
|
};
|
|
11
11
|
|
|
12
12
|
return (
|
|
13
|
-
<
|
|
14
|
-
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
13
|
+
<Stack hasGutter>
|
|
14
|
+
<StackItem>
|
|
15
|
+
<h3>Custom Toggle Content</h3>
|
|
16
|
+
<p>You can use custom content such as icons and badges in the toggle:</p>
|
|
17
|
+
<ExpandableSection
|
|
18
|
+
toggleContent={
|
|
19
|
+
<div>
|
|
20
|
+
<span>You can also use icons </span>
|
|
21
|
+
<CheckCircleIcon />
|
|
22
|
+
<span> or badges </span>
|
|
23
|
+
<Badge isRead={true}>4</Badge>
|
|
24
|
+
<span> !</span>
|
|
25
|
+
</div>
|
|
26
|
+
}
|
|
27
|
+
onToggle={onToggle}
|
|
28
|
+
isExpanded={isExpanded}
|
|
29
|
+
>
|
|
30
|
+
This content is visible only when the component is expanded.
|
|
31
|
+
</ExpandableSection>
|
|
32
|
+
</StackItem>
|
|
33
|
+
|
|
34
|
+
<StackItem>
|
|
35
|
+
<h3>Accessibility Note</h3>
|
|
36
|
+
<p>
|
|
37
|
+
<strong>Important:</strong> If you need the toggle text to function as a heading in the document structure, do
|
|
38
|
+
NOT put heading elements (h1-h6) inside the <code>toggleContent</code> prop, as this creates invalid HTML
|
|
39
|
+
structure. Instead, use the <code>toggleWrapper</code> prop.
|
|
40
|
+
</p>
|
|
41
|
+
</StackItem>
|
|
42
|
+
</Stack>
|
|
28
43
|
);
|
|
29
44
|
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { ExpandableSection } from '@patternfly/react-core';
|
|
2
|
+
|
|
3
|
+
export const ExpandableSectionUncontrolledDynamicToggleFunction: React.FunctionComponent = () => (
|
|
4
|
+
<ExpandableSection
|
|
5
|
+
toggleContent={(isExpanded) =>
|
|
6
|
+
isExpanded
|
|
7
|
+
? 'Show less uncontrolled dynamic toggle example content'
|
|
8
|
+
: 'Show more uncontrolled dynamic toggle example content'
|
|
9
|
+
}
|
|
10
|
+
>
|
|
11
|
+
This content is visible only when the component is expanded.
|
|
12
|
+
</ExpandableSection>
|
|
13
|
+
);
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { useState, MouseEvent } from 'react';
|
|
2
|
+
import { ExpandableSection, ExpandableSectionToggle, Stack, StackItem } from '@patternfly/react-core';
|
|
3
|
+
import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle-icon';
|
|
4
|
+
|
|
5
|
+
export const ExpandableSectionWithHeading = () => {
|
|
6
|
+
const [isExpanded1, setIsExpanded1] = useState(false);
|
|
7
|
+
const [isExpanded2, setIsExpanded2] = useState(false);
|
|
8
|
+
const [isExpandedDetached, setIsExpandedDetached] = useState(false);
|
|
9
|
+
|
|
10
|
+
const onToggle1 = (_event: MouseEvent, isExpanded: boolean) => {
|
|
11
|
+
setIsExpanded1(isExpanded);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const onToggle2 = (_event: MouseEvent, isExpanded: boolean) => {
|
|
15
|
+
setIsExpanded2(isExpanded);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const onToggleDetached = (isExpanded: boolean) => {
|
|
19
|
+
setIsExpandedDetached(isExpanded);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
return (
|
|
23
|
+
<Stack hasGutter>
|
|
24
|
+
<StackItem>
|
|
25
|
+
<h4>Document with Expandable Sections</h4>
|
|
26
|
+
<p>This demonstrates how to use expandable sections with proper heading semantics.</p>
|
|
27
|
+
|
|
28
|
+
{/* Using toggleWrapper prop for proper heading semantics */}
|
|
29
|
+
<ExpandableSection
|
|
30
|
+
toggleWrapper="h5"
|
|
31
|
+
toggleText="Toggle as a heading"
|
|
32
|
+
onToggle={onToggle1}
|
|
33
|
+
isExpanded={isExpanded1}
|
|
34
|
+
>
|
|
35
|
+
<p>
|
|
36
|
+
This content is visible only when the component is expanded. The toggle text above functions as a proper
|
|
37
|
+
heading in the document structure, which is important for screen readers and other assistive technologies.
|
|
38
|
+
</p>
|
|
39
|
+
<p>
|
|
40
|
+
When using the <code>toggleWrapper</code> prop with heading elements (h1-h6), the button is rendered inside
|
|
41
|
+
the heading element, maintaining proper semantic structure.
|
|
42
|
+
</p>
|
|
43
|
+
</ExpandableSection>
|
|
44
|
+
</StackItem>
|
|
45
|
+
|
|
46
|
+
<StackItem>
|
|
47
|
+
<h4>Detached Variant with Heading</h4>
|
|
48
|
+
<p>You can also use the detached variant with heading semantics:</p>
|
|
49
|
+
|
|
50
|
+
<ExpandableSectionToggle
|
|
51
|
+
toggleWrapper="h5"
|
|
52
|
+
toggleId="detached-heading-toggle"
|
|
53
|
+
contentId="detached-heading-content"
|
|
54
|
+
isExpanded={isExpandedDetached}
|
|
55
|
+
onToggle={onToggleDetached}
|
|
56
|
+
>
|
|
57
|
+
Detached Toggle with Heading
|
|
58
|
+
</ExpandableSectionToggle>
|
|
59
|
+
|
|
60
|
+
<ExpandableSection
|
|
61
|
+
isDetached
|
|
62
|
+
toggleId="detached-heading-toggle"
|
|
63
|
+
contentId="detached-heading-content"
|
|
64
|
+
isExpanded={isExpandedDetached}
|
|
65
|
+
>
|
|
66
|
+
<p>This is detached content that can be positioned anywhere in the DOM.</p>
|
|
67
|
+
</ExpandableSection>
|
|
68
|
+
</StackItem>
|
|
69
|
+
|
|
70
|
+
<StackItem>
|
|
71
|
+
<h4>Custom Content with Heading</h4>
|
|
72
|
+
<p>You can also use custom content within heading wrappers:</p>
|
|
73
|
+
|
|
74
|
+
<ExpandableSection
|
|
75
|
+
toggleWrapper="h5"
|
|
76
|
+
toggleContent={
|
|
77
|
+
<span>
|
|
78
|
+
<CheckCircleIcon /> Custom Heading Content with Icon
|
|
79
|
+
</span>
|
|
80
|
+
}
|
|
81
|
+
onToggle={onToggle2}
|
|
82
|
+
isExpanded={isExpanded2}
|
|
83
|
+
>
|
|
84
|
+
<p>This expandable section uses custom content with an icon inside a heading wrapper.</p>
|
|
85
|
+
</ExpandableSection>
|
|
86
|
+
</StackItem>
|
|
87
|
+
</Stack>
|
|
88
|
+
);
|
|
89
|
+
};
|
|
@@ -70,7 +70,6 @@ export interface MenuState {
|
|
|
70
70
|
ouiaStateId: string;
|
|
71
71
|
transitionMoveTarget: HTMLElement;
|
|
72
72
|
flyoutRef: React.Ref<HTMLLIElement> | null;
|
|
73
|
-
disableHover: boolean;
|
|
74
73
|
currentDrilldownMenuId: string;
|
|
75
74
|
}
|
|
76
75
|
|
|
@@ -99,7 +98,6 @@ class MenuBase extends Component<MenuProps, MenuState> {
|
|
|
99
98
|
ouiaStateId: getDefaultOUIAId(Menu.displayName),
|
|
100
99
|
transitionMoveTarget: null,
|
|
101
100
|
flyoutRef: null,
|
|
102
|
-
disableHover: false,
|
|
103
101
|
currentDrilldownMenuId: this.props.id
|
|
104
102
|
};
|
|
105
103
|
|
|
@@ -117,9 +115,6 @@ class MenuBase extends Component<MenuProps, MenuState> {
|
|
|
117
115
|
}
|
|
118
116
|
|
|
119
117
|
componentDidMount() {
|
|
120
|
-
if (this.context) {
|
|
121
|
-
this.setState({ disableHover: this.context.disableHover });
|
|
122
|
-
}
|
|
123
118
|
if (canUseDOM && this.props.containsDrilldown && this.props.isRootMenu) {
|
|
124
119
|
window.addEventListener('transitionend', this.handleDrilldownTransition);
|
|
125
120
|
}
|
|
@@ -284,7 +279,7 @@ class MenuBase extends Component<MenuProps, MenuState> {
|
|
|
284
279
|
onGetMenuHeight,
|
|
285
280
|
flyoutRef: this.state.flyoutRef,
|
|
286
281
|
setFlyoutRef: (flyoutRef) => this.setState({ flyoutRef }),
|
|
287
|
-
disableHover: this.
|
|
282
|
+
disableHover: this.context?.disableHover ?? false,
|
|
288
283
|
role
|
|
289
284
|
}}
|
|
290
285
|
>
|
|
@@ -45,6 +45,8 @@ export interface MenuToggleProps
|
|
|
45
45
|
isFullWidth?: boolean;
|
|
46
46
|
/** Flag indicating the toggle contains placeholder text */
|
|
47
47
|
isPlaceholder?: boolean;
|
|
48
|
+
/** @beta Flag indicating the toggle has circular styling. Can only be applied to plain toggles. */
|
|
49
|
+
isCircle?: boolean;
|
|
48
50
|
/** Flag indicating whether the toggle is a settings toggle. This will override the icon property */
|
|
49
51
|
isSettings?: boolean;
|
|
50
52
|
/** Elements to display before the toggle button. When included, renders the menu toggle as a split button. */
|
|
@@ -84,6 +86,7 @@ class MenuToggleBase extends Component<MenuToggleProps, MenuToggleState> {
|
|
|
84
86
|
isFullWidth: false,
|
|
85
87
|
isFullHeight: false,
|
|
86
88
|
isPlaceholder: false,
|
|
89
|
+
isCircle: false,
|
|
87
90
|
size: 'default',
|
|
88
91
|
ouiaSafe: true
|
|
89
92
|
};
|
|
@@ -103,6 +106,7 @@ class MenuToggleBase extends Component<MenuToggleProps, MenuToggleState> {
|
|
|
103
106
|
isFullHeight,
|
|
104
107
|
isFullWidth,
|
|
105
108
|
isPlaceholder,
|
|
109
|
+
isCircle,
|
|
106
110
|
isSettings,
|
|
107
111
|
splitButtonItems,
|
|
108
112
|
variant,
|
|
@@ -225,7 +229,7 @@ class MenuToggleBase extends Component<MenuToggleProps, MenuToggleState> {
|
|
|
225
229
|
|
|
226
230
|
return (
|
|
227
231
|
<button
|
|
228
|
-
className={css(commonStyles)}
|
|
232
|
+
className={css(commonStyles, isCircle && isPlain && styles.modifiers.circle)}
|
|
229
233
|
type="button"
|
|
230
234
|
aria-label={ariaLabel}
|
|
231
235
|
aria-expanded={isExpanded}
|
|
@@ -55,6 +55,8 @@ describe('Old Snapshot tests - remove when refactoring', () => {
|
|
|
55
55
|
});
|
|
56
56
|
});
|
|
57
57
|
|
|
58
|
+
const toggleVariants = ['default', 'plain', 'primary', 'plainText', 'secondary', 'typeahead'];
|
|
59
|
+
|
|
58
60
|
test(`Renders with class ${styles.modifiers.small} when size="sm" is passed`, () => {
|
|
59
61
|
render(<MenuToggle size="sm">Toggle</MenuToggle>);
|
|
60
62
|
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.small);
|
|
@@ -110,6 +112,24 @@ test(`Renders with class ${styles.modifiers.settings} when isSettings is passed`
|
|
|
110
112
|
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.settings);
|
|
111
113
|
});
|
|
112
114
|
|
|
115
|
+
test(`Renders with class ${styles.modifiers.circle} when variant="plain" and isCircle is true`, () => {
|
|
116
|
+
render(<MenuToggle isCircle variant="plain" aria-label="Toggle"></MenuToggle>);
|
|
117
|
+
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.circle);
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
toggleVariants
|
|
121
|
+
.filter((variant) => variant !== 'plain')
|
|
122
|
+
.forEach((variant) => {
|
|
123
|
+
test(`Does not with class ${styles.modifiers.circle} when variant="${variant}" and isCircle is true`, () => {
|
|
124
|
+
render(
|
|
125
|
+
<MenuToggle isCircle variant={variant as 'default' | 'primary' | 'plainText' | 'secondary' | 'typeahead'}>
|
|
126
|
+
Toggle
|
|
127
|
+
</MenuToggle>
|
|
128
|
+
);
|
|
129
|
+
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.circle);
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
|
|
113
133
|
test('Does not render custom icon when icon prop and isSettings are passed', () => {
|
|
114
134
|
render(
|
|
115
135
|
<MenuToggle isSettings icon={<div>Custom icon</div>}>
|
|
@@ -20,6 +20,7 @@ import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
|
|
|
20
20
|
A toggle is collapsed until it is selected by a user.
|
|
21
21
|
|
|
22
22
|
```ts file="MenuToggleCollapsed.tsx"
|
|
23
|
+
|
|
23
24
|
```
|
|
24
25
|
|
|
25
26
|
### Expanded toggle
|
|
@@ -27,6 +28,7 @@ A toggle is collapsed until it is selected by a user.
|
|
|
27
28
|
When a user selects a toggle, it becomes expanded and is styled with a blue underline. To flag expanded toggles, and apply expanded styling, use the `isExpanded` property .
|
|
28
29
|
|
|
29
30
|
```ts file ="MenuToggleExpanded.tsx"
|
|
31
|
+
|
|
30
32
|
```
|
|
31
33
|
|
|
32
34
|
### Small toggle
|
|
@@ -42,6 +44,7 @@ You can pass `size="sm"` to a MenuToggle to style it as a small toggle, such as
|
|
|
42
44
|
To disable the selection and expansion of a toggle, use the `isDisabled` property.
|
|
43
45
|
|
|
44
46
|
```ts file="MenuToggleDisabled.tsx"
|
|
47
|
+
|
|
45
48
|
```
|
|
46
49
|
|
|
47
50
|
### With a badge
|
|
@@ -49,6 +52,7 @@ To disable the selection and expansion of a toggle, use the `isDisabled` propert
|
|
|
49
52
|
To display a count of selected items in a toggle, use the `badge` property. You can also pass in `variant="plainText"` for a badge only toggle.
|
|
50
53
|
|
|
51
54
|
```ts file="MenuToggleBadge.tsx"
|
|
55
|
+
|
|
52
56
|
```
|
|
53
57
|
|
|
54
58
|
### Settings toggle
|
|
@@ -76,6 +80,7 @@ You can also pass images into the `icon` property. The following example passes
|
|
|
76
80
|
This can be used alongside a text label that provides more context for the image.
|
|
77
81
|
|
|
78
82
|
```ts file="MenuToggleAvatarText.tsx"
|
|
83
|
+
|
|
79
84
|
```
|
|
80
85
|
|
|
81
86
|
### Variant styles
|
|
@@ -83,6 +88,7 @@ This can be used alongside a text label that provides more context for the image
|
|
|
83
88
|
Variant styling can be applied to menu toggles. In the following example, the toggle uses primary styling by passing `variant="primary"` into the `<MenuToggle>` component. Additional variant options include “default”, “plain”, “plainText”, “secondary”, and “typeahead”.
|
|
84
89
|
|
|
85
90
|
```ts file="MenuToggleVariantStyles.tsx"
|
|
91
|
+
|
|
86
92
|
```
|
|
87
93
|
|
|
88
94
|
### Plain toggle with icon
|
|
@@ -92,6 +98,15 @@ To apply plain styling to a menu toggle with an icon, pass in `variant="plain"`.
|
|
|
92
98
|
If the toggle does not have any visible text content, use the `aria-label` property to provide an accessible name.
|
|
93
99
|
|
|
94
100
|
```ts file="MenuTogglePlainIcon.tsx"
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Plain circle toggle
|
|
105
|
+
|
|
106
|
+
You can also pass the `isCircle` property to a plain, icon-only toggle to adjust the styling to a complete circular shape, rather than a rounded square.
|
|
107
|
+
|
|
108
|
+
```ts file="MenuTogglePlainCircle.tsx"
|
|
109
|
+
|
|
95
110
|
```
|
|
96
111
|
|
|
97
112
|
### Plain toggle with text label
|
|
@@ -99,6 +114,7 @@ If the toggle does not have any visible text content, use the `aria-label` prope
|
|
|
99
114
|
To apply plain styling to a menu toggle with a text label, pass in `variant="plainText"`. Unlike the “plain” variant, “plainText” adds a caret pointing down in the toggle.
|
|
100
115
|
|
|
101
116
|
```ts file="MenuTogglePlainTextLabel.tsx"
|
|
117
|
+
|
|
102
118
|
```
|
|
103
119
|
|
|
104
120
|
### Split toggle with checkbox
|
|
@@ -150,6 +166,7 @@ A full height toggle fills the height of its parent. To flag a full height toggl
|
|
|
150
166
|
In the following example, the toggle fills the size of the "80px" `<div>` element that it is within.
|
|
151
167
|
|
|
152
168
|
```ts file="MenuToggleFullHeight.tsx"
|
|
169
|
+
|
|
153
170
|
```
|
|
154
171
|
|
|
155
172
|
### Full width toggle
|
|
@@ -159,6 +176,7 @@ A full width toggle fills the width of its parent. To flag a full width toggle,
|
|
|
159
176
|
In the following example, the toggle fills the width of its parent as the window size changes.
|
|
160
177
|
|
|
161
178
|
```ts file="MenuToggleFullWidth.tsx"
|
|
179
|
+
|
|
162
180
|
```
|
|
163
181
|
|
|
164
182
|
### Typeahead toggle
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Fragment } from 'react';
|
|
2
|
+
import { MenuToggle } from '@patternfly/react-core';
|
|
3
|
+
import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
|
|
4
|
+
|
|
5
|
+
export const MenuTogglePlainCircle: React.FunctionComponent = () => (
|
|
6
|
+
<Fragment>
|
|
7
|
+
<MenuToggle isCircle icon={<EllipsisVIcon />} variant="plain" aria-label="plain circle kebab" />{' '}
|
|
8
|
+
<MenuToggle isCircle icon={<EllipsisVIcon />} variant="plain" isExpanded aria-label="plain circle expanded kebab" />{' '}
|
|
9
|
+
<MenuToggle isCircle icon={<EllipsisVIcon />} variant="plain" isDisabled aria-label="disabled plain circle kebab" />
|
|
10
|
+
</Fragment>
|
|
11
|
+
);
|
|
@@ -266,6 +266,7 @@ class Page extends Component<PageProps, PageState> {
|
|
|
266
266
|
isManagedSidebar,
|
|
267
267
|
onSidebarToggle: mobileView ? this.onSidebarToggleMobile : this.onSidebarToggleDesktop,
|
|
268
268
|
isSidebarOpen: mobileView ? mobileIsSidebarOpen : desktopIsSidebarOpen,
|
|
269
|
+
isMobile: mobileView,
|
|
269
270
|
width,
|
|
270
271
|
height,
|
|
271
272
|
getBreakpoint,
|
|
@@ -6,6 +6,7 @@ export interface PageContextProps {
|
|
|
6
6
|
isManagedSidebar: boolean;
|
|
7
7
|
onSidebarToggle: () => void;
|
|
8
8
|
isSidebarOpen: boolean;
|
|
9
|
+
isMobile: boolean;
|
|
9
10
|
width: number;
|
|
10
11
|
height: number;
|
|
11
12
|
getBreakpoint: (width: number | null) => 'default' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
@@ -16,6 +17,7 @@ export const pageContextDefaults: PageContextProps = {
|
|
|
16
17
|
isManagedSidebar: false,
|
|
17
18
|
isSidebarOpen: false,
|
|
18
19
|
onSidebarToggle: () => null,
|
|
20
|
+
isMobile: false,
|
|
19
21
|
width: null,
|
|
20
22
|
height: null,
|
|
21
23
|
getBreakpoint,
|
|
@@ -35,7 +35,7 @@ export const PageSidebar: React.FunctionComponent<PageSidebarProps> = ({
|
|
|
35
35
|
...props
|
|
36
36
|
}: PageSidebarProps) => (
|
|
37
37
|
<PageContextConsumer>
|
|
38
|
-
{({ isManagedSidebar, isSidebarOpen: managedIsNavOpen }
|
|
38
|
+
{({ isManagedSidebar, isSidebarOpen: managedIsNavOpen, isMobile }) => {
|
|
39
39
|
const sidebarOpen = isManagedSidebar ? managedIsNavOpen : isSidebarOpen;
|
|
40
40
|
|
|
41
41
|
return (
|
|
@@ -43,7 +43,7 @@ export const PageSidebar: React.FunctionComponent<PageSidebarProps> = ({
|
|
|
43
43
|
id={id}
|
|
44
44
|
className={css(
|
|
45
45
|
styles.pageSidebar,
|
|
46
|
-
sidebarOpen && styles.modifiers.expanded,
|
|
46
|
+
sidebarOpen && isMobile && styles.modifiers.expanded,
|
|
47
47
|
!sidebarOpen && styles.modifiers.collapsed,
|
|
48
48
|
className
|
|
49
49
|
)}
|