@patternfly/react-core 6.5.0-prerelease.2 → 6.5.0-prerelease.21
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 +122 -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 -1
- 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/Hero/package.json +1 -0
- 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 +23 -0
- package/dist/esm/components/Alert/AlertIcon.d.ts +5 -5
- 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.map +1 -1
- package/dist/esm/components/Compass/Compass.js +2 -2
- package/dist/esm/components/Compass/Compass.js.map +1 -1
- package/dist/esm/components/Compass/CompassContent.d.ts +1 -2
- package/dist/esm/components/Compass/CompassContent.d.ts.map +1 -1
- package/dist/esm/components/Compass/CompassContent.js.map +1 -1
- package/dist/esm/components/Compass/CompassHeader.d.ts +1 -2
- package/dist/esm/components/Compass/CompassHeader.d.ts.map +1 -1
- package/dist/esm/components/Compass/CompassHeader.js.map +1 -1
- package/dist/esm/components/Compass/CompassHero.d.ts +2 -18
- package/dist/esm/components/Compass/CompassHero.d.ts.map +1 -1
- package/dist/esm/components/Compass/CompassHero.js +2 -39
- package/dist/esm/components/Compass/CompassHero.js.map +1 -1
- package/dist/esm/components/Compass/CompassMainFooter.d.ts +12 -0
- package/dist/esm/components/Compass/CompassMainFooter.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassMainFooter.js +10 -0
- package/dist/esm/components/Compass/CompassMainFooter.js.map +1 -0
- package/dist/esm/components/Compass/CompassMainHeader.d.ts +11 -4
- package/dist/esm/components/Compass/CompassMainHeader.d.ts.map +1 -1
- package/dist/esm/components/Compass/CompassMainHeader.js +5 -3
- package/dist/esm/components/Compass/CompassMainHeader.js.map +1 -1
- package/dist/esm/components/Compass/CompassMainHeaderContent.d.ts +12 -0
- package/dist/esm/components/Compass/CompassMainHeaderContent.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassMainHeaderContent.js +10 -0
- package/dist/esm/components/Compass/CompassMainHeaderContent.js.map +1 -0
- package/dist/esm/components/Compass/CompassMainHeaderTitle.d.ts +12 -0
- package/dist/esm/components/Compass/CompassMainHeaderTitle.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassMainHeaderTitle.js +10 -0
- package/dist/esm/components/Compass/CompassMainHeaderTitle.js.map +1 -0
- package/dist/esm/components/Compass/CompassMainHeaderToolbar.d.ts +12 -0
- package/dist/esm/components/Compass/CompassMainHeaderToolbar.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassMainHeaderToolbar.js +10 -0
- package/dist/esm/components/Compass/CompassMainHeaderToolbar.js.map +1 -0
- package/dist/esm/components/Compass/CompassMessageBar.d.ts +1 -2
- package/dist/esm/components/Compass/CompassMessageBar.d.ts.map +1 -1
- package/dist/esm/components/Compass/CompassMessageBar.js.map +1 -1
- package/dist/esm/components/Compass/CompassNavContent.d.ts +9 -0
- package/dist/esm/components/Compass/CompassNavContent.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassNavContent.js +10 -0
- package/dist/esm/components/Compass/CompassNavContent.js.map +1 -0
- package/dist/esm/components/Compass/CompassNavHome.d.ts +13 -0
- package/dist/esm/components/Compass/CompassNavHome.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassNavHome.js +15 -0
- package/dist/esm/components/Compass/CompassNavHome.js.map +1 -0
- package/dist/esm/components/Compass/CompassNavMain.d.ts +9 -0
- package/dist/esm/components/Compass/CompassNavMain.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassNavMain.js +10 -0
- package/dist/esm/components/Compass/CompassNavMain.js.map +1 -0
- package/dist/esm/components/Compass/CompassNavSearch.d.ts +13 -0
- package/dist/esm/components/Compass/CompassNavSearch.d.ts.map +1 -0
- package/dist/esm/components/Compass/CompassNavSearch.js +15 -0
- package/dist/esm/components/Compass/CompassNavSearch.js.map +1 -0
- package/dist/esm/components/Compass/CompassPanel.d.ts +1 -2
- package/dist/esm/components/Compass/CompassPanel.d.ts.map +1 -1
- package/dist/esm/components/Compass/CompassPanel.js.map +1 -1
- package/dist/esm/components/Compass/index.d.ts +8 -0
- package/dist/esm/components/Compass/index.d.ts.map +1 -1
- package/dist/esm/components/Compass/index.js +8 -0
- package/dist/esm/components/Compass/index.js.map +1 -1
- 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/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/Dropdown/Dropdown.d.ts +6 -0
- package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.js +5 -2
- package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/ExpandableSection/ExpandableSection.d.ts +13 -2
- package/dist/esm/components/ExpandableSection/ExpandableSection.d.ts.map +1 -1
- package/dist/esm/components/ExpandableSection/ExpandableSection.js +8 -5
- 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/FormControl/FormControlIcon.d.ts +3 -3
- package/dist/esm/components/Hero/Hero.d.ts +32 -0
- package/dist/esm/components/Hero/Hero.d.ts.map +1 -0
- package/dist/esm/components/Hero/Hero.js +51 -0
- package/dist/esm/components/Hero/Hero.js.map +1 -0
- package/dist/esm/components/Hero/index.d.ts +2 -0
- package/dist/esm/components/Hero/index.d.ts.map +1 -0
- package/dist/esm/components/Hero/index.js +2 -0
- package/dist/esm/components/Hero/index.js.map +1 -0
- package/dist/esm/components/NotificationDrawer/NotificationDrawerListItemHeader.d.ts +5 -5
- 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.map +1 -1
- package/dist/esm/components/Tabs/Tabs.js +2 -2
- 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/esm/helpers/constants.d.ts +5 -5
- 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.map +1 -1
- package/dist/js/components/Compass/Compass.js +1 -1
- package/dist/js/components/Compass/Compass.js.map +1 -1
- package/dist/js/components/Compass/CompassContent.d.ts +1 -2
- package/dist/js/components/Compass/CompassContent.d.ts.map +1 -1
- package/dist/js/components/Compass/CompassContent.js.map +1 -1
- package/dist/js/components/Compass/CompassHeader.d.ts +1 -2
- package/dist/js/components/Compass/CompassHeader.d.ts.map +1 -1
- package/dist/js/components/Compass/CompassHeader.js.map +1 -1
- package/dist/js/components/Compass/CompassHero.d.ts +2 -18
- package/dist/js/components/Compass/CompassHero.d.ts.map +1 -1
- package/dist/js/components/Compass/CompassHero.js +2 -39
- package/dist/js/components/Compass/CompassHero.js.map +1 -1
- package/dist/js/components/Compass/CompassMainFooter.d.ts +12 -0
- package/dist/js/components/Compass/CompassMainFooter.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassMainFooter.js +14 -0
- package/dist/js/components/Compass/CompassMainFooter.js.map +1 -0
- package/dist/js/components/Compass/CompassMainHeader.d.ts +11 -4
- package/dist/js/components/Compass/CompassMainHeader.d.ts.map +1 -1
- package/dist/js/components/Compass/CompassMainHeader.js +5 -3
- package/dist/js/components/Compass/CompassMainHeader.js.map +1 -1
- package/dist/js/components/Compass/CompassMainHeaderContent.d.ts +12 -0
- package/dist/js/components/Compass/CompassMainHeaderContent.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassMainHeaderContent.js +14 -0
- package/dist/js/components/Compass/CompassMainHeaderContent.js.map +1 -0
- package/dist/js/components/Compass/CompassMainHeaderTitle.d.ts +12 -0
- package/dist/js/components/Compass/CompassMainHeaderTitle.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassMainHeaderTitle.js +14 -0
- package/dist/js/components/Compass/CompassMainHeaderTitle.js.map +1 -0
- package/dist/js/components/Compass/CompassMainHeaderToolbar.d.ts +12 -0
- package/dist/js/components/Compass/CompassMainHeaderToolbar.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassMainHeaderToolbar.js +14 -0
- package/dist/js/components/Compass/CompassMainHeaderToolbar.js.map +1 -0
- package/dist/js/components/Compass/CompassMessageBar.d.ts +1 -2
- package/dist/js/components/Compass/CompassMessageBar.d.ts.map +1 -1
- package/dist/js/components/Compass/CompassMessageBar.js.map +1 -1
- package/dist/js/components/Compass/CompassNavContent.d.ts +9 -0
- package/dist/js/components/Compass/CompassNavContent.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassNavContent.js +14 -0
- package/dist/js/components/Compass/CompassNavContent.js.map +1 -0
- package/dist/js/components/Compass/CompassNavHome.d.ts +13 -0
- package/dist/js/components/Compass/CompassNavHome.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassNavHome.js +19 -0
- package/dist/js/components/Compass/CompassNavHome.js.map +1 -0
- package/dist/js/components/Compass/CompassNavMain.d.ts +9 -0
- package/dist/js/components/Compass/CompassNavMain.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassNavMain.js +14 -0
- package/dist/js/components/Compass/CompassNavMain.js.map +1 -0
- package/dist/js/components/Compass/CompassNavSearch.d.ts +13 -0
- package/dist/js/components/Compass/CompassNavSearch.d.ts.map +1 -0
- package/dist/js/components/Compass/CompassNavSearch.js +19 -0
- package/dist/js/components/Compass/CompassNavSearch.js.map +1 -0
- package/dist/js/components/Compass/CompassPanel.d.ts +1 -2
- package/dist/js/components/Compass/CompassPanel.d.ts.map +1 -1
- package/dist/js/components/Compass/CompassPanel.js.map +1 -1
- package/dist/js/components/Compass/index.d.ts +8 -0
- package/dist/js/components/Compass/index.d.ts.map +1 -1
- package/dist/js/components/Compass/index.js +8 -0
- package/dist/js/components/Compass/index.js.map +1 -1
- 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/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/Dropdown/Dropdown.d.ts +6 -0
- package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.js +5 -2
- package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/js/components/ExpandableSection/ExpandableSection.d.ts +13 -2
- package/dist/js/components/ExpandableSection/ExpandableSection.d.ts.map +1 -1
- package/dist/js/components/ExpandableSection/ExpandableSection.js +8 -5
- 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/Hero/Hero.d.ts +32 -0
- package/dist/js/components/Hero/Hero.d.ts.map +1 -0
- package/dist/js/components/Hero/Hero.js +55 -0
- package/dist/js/components/Hero/Hero.js.map +1 -0
- package/dist/js/components/Hero/index.d.ts +2 -0
- package/dist/js/components/Hero/index.d.ts.map +1 -0
- package/dist/js/components/Hero/index.js +5 -0
- package/dist/js/components/Hero/index.js.map +1 -0
- 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.map +1 -1
- package/dist/js/components/Tabs/Tabs.js +2 -2
- 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/base-no-reset.css +46 -0
- package/dist/styles/base.css +53 -0
- package/dist/umd/assets/{output-DxVGusJA.css → output-Bhl00hr4.css} +12673 -12499
- 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/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 +5 -3
- package/src/components/Compass/CompassContent.tsx +2 -2
- package/src/components/Compass/CompassHeader.tsx +6 -2
- package/src/components/Compass/CompassHero.tsx +7 -72
- package/src/components/Compass/CompassMainFooter.tsx +24 -0
- package/src/components/Compass/CompassMainHeader.tsx +22 -11
- package/src/components/Compass/CompassMainHeaderContent.tsx +25 -0
- package/src/components/Compass/CompassMainHeaderTitle.tsx +25 -0
- package/src/components/Compass/CompassMainHeaderToolbar.tsx +25 -0
- package/src/components/Compass/CompassMessageBar.tsx +2 -2
- package/src/components/Compass/CompassNavContent.tsx +20 -0
- package/src/components/Compass/CompassNavHome.tsx +77 -0
- package/src/components/Compass/CompassNavMain.tsx +21 -0
- package/src/components/Compass/CompassNavSearch.tsx +70 -0
- package/src/components/Compass/CompassPanel.tsx +2 -2
- package/src/components/Compass/__tests__/CompassHero.test.tsx +7 -119
- package/src/components/Compass/__tests__/CompassMainFooter.test.tsx +52 -0
- package/src/components/Compass/__tests__/CompassMainHeader.test.tsx +45 -2
- package/src/components/Compass/__tests__/CompassMainHeaderContent.test.tsx +28 -0
- package/src/components/Compass/__tests__/CompassMainHeaderTitle.test.tsx +28 -0
- package/src/components/Compass/__tests__/CompassMainHeaderToolbar.test.tsx +28 -0
- package/src/components/Compass/__tests__/CompassNavContent.test.tsx +37 -0
- package/src/components/Compass/__tests__/CompassNavHome.test.tsx +89 -0
- package/src/components/Compass/__tests__/CompassNavMain.test.tsx +37 -0
- package/src/components/Compass/__tests__/CompassNavSearch.test.tsx +87 -0
- package/src/components/Compass/__tests__/__snapshots__/Compass.test.tsx.snap +32 -28
- package/src/components/Compass/__tests__/__snapshots__/CompassHero.test.tsx.snap +2 -9
- package/src/components/Compass/__tests__/__snapshots__/CompassMainFooter.test.tsx.snap +11 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassMainHeader.test.tsx.snap +3 -3
- package/src/components/Compass/__tests__/__snapshots__/CompassMainHeaderContent.test.tsx.snap +11 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassMainHeaderTitle.test.tsx.snap +11 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassMainHeaderToolbar.test.tsx.snap +11 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassNavContent.test.tsx.snap +13 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassNavHome.test.tsx.snap +107 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassNavMain.test.tsx.snap +13 -0
- package/src/components/Compass/__tests__/__snapshots__/CompassNavSearch.test.tsx.snap +93 -0
- package/src/components/Compass/examples/Compass.md +42 -5
- package/src/components/Compass/examples/CompassBasic.tsx +15 -2
- package/src/components/Compass/examples/CompassDemo.tsx +63 -48
- package/src/components/Compass/examples/CompassMainFooterDemo.tsx +43 -0
- package/src/components/Compass/examples/compass.css +14 -2
- package/src/components/Compass/index.ts +8 -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/DrawerPanelContent.tsx +4 -0
- package/src/components/Drawer/__tests__/DrawerPanelContent.test.tsx +10 -0
- package/src/components/Dropdown/Dropdown.tsx +15 -1
- package/src/components/Dropdown/__tests__/Dropdown.test.tsx +26 -0
- package/src/components/ExpandableSection/ExpandableSection.tsx +27 -12
- package/src/components/ExpandableSection/ExpandableSectionToggle.tsx +48 -38
- package/src/components/ExpandableSection/__tests__/ExpandableSection.test.tsx +94 -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/Hero/Hero.tsx +102 -0
- package/src/components/Hero/__tests__/Hero.test.tsx +175 -0
- package/src/components/Hero/__tests__/__snapshots__/Hero.test.tsx.snap +30 -0
- package/src/components/Hero/examples/Hero.md +19 -0
- package/src/components/Hero/examples/HeroBasic.tsx +3 -0
- package/src/components/Hero/index.ts +1 -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 +2 -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/deprecated/components/Modal/examples/Modal.md +2 -2
- package/src/deprecated/components/Tile/examples/Tile.md +0 -2
- package/src/helpers/OUIA/OUIA.md +2 -2
- package/src/layouts/Bullseye/examples/Bullseye.md +2 -1
- package/src/layouts/Flex/examples/Flex.md +2 -1
- package/src/layouts/Gallery/examples/Gallery.md +2 -1
- package/src/layouts/Grid/examples/Grid.md +2 -1
- package/src/layouts/Level/examples/Level.md +2 -1
- package/src/layouts/Split/examples/Split.md +2 -1
- package/src/layouts/Stack/examples/Stack.md +2 -1
- 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
|
@@ -44,8 +44,10 @@ export interface ExpandableSectionProps extends Omit<React.HTMLProps<HTMLDivElem
|
|
|
44
44
|
* use the onToggle property of the expandable section toggle sub-component.
|
|
45
45
|
*/
|
|
46
46
|
onToggle?: (event: React.MouseEvent, isExpanded: boolean) => void;
|
|
47
|
-
/** React node that appears in the attached toggle in place of the toggleText property.
|
|
48
|
-
|
|
47
|
+
/** React node that appears in the attached toggle in place of the toggleText property.
|
|
48
|
+
* Can also be a function that receives the expanded state and returns a React node.
|
|
49
|
+
*/
|
|
50
|
+
toggleContent?: React.ReactNode | ((isExpanded: boolean) => React.ReactNode);
|
|
49
51
|
/** Text that appears in the attached toggle. */
|
|
50
52
|
toggleText?: string;
|
|
51
53
|
/** Text that appears in the attached toggle when collapsed (will override toggleText if
|
|
@@ -60,6 +62,10 @@ export interface ExpandableSectionProps extends Omit<React.HTMLProps<HTMLDivElem
|
|
|
60
62
|
toggleAriaLabel?: string;
|
|
61
63
|
/** Accessible name via space delimtted list of IDs for the expandable section toggle. */
|
|
62
64
|
toggleAriaLabelledBy?: string;
|
|
65
|
+
/** Icon shown in toggle when variant is not truncated. */
|
|
66
|
+
toggleIcon?: React.ReactNode;
|
|
67
|
+
/** Whether to show a toggle icon when variant is not truncated. If omitted, it is important to ensure the current state of the ExpandableSection is conveyed, most likely by having dynamic toggle text. */
|
|
68
|
+
hasToggleIcon?: boolean;
|
|
63
69
|
/** Truncates the expandable content to the specified number of lines when using the
|
|
64
70
|
* "truncate" variant.
|
|
65
71
|
*/
|
|
@@ -72,6 +78,11 @@ export interface ExpandableSectionProps extends Omit<React.HTMLProps<HTMLDivElem
|
|
|
72
78
|
* animation will not occur.
|
|
73
79
|
*/
|
|
74
80
|
direction?: 'up' | 'down';
|
|
81
|
+
/** The HTML element to use for the toggle wrapper. Can be 'div' (default) or any heading level.
|
|
82
|
+
* When using heading elements, the button will be rendered inside the heading for proper semantics.
|
|
83
|
+
* This is useful when the toggle text should function as a heading in the document structure.
|
|
84
|
+
*/
|
|
85
|
+
toggleWrapper?: 'div' | 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6';
|
|
75
86
|
}
|
|
76
87
|
|
|
77
88
|
interface ExpandableSectionState {
|
|
@@ -204,6 +215,8 @@ class ExpandableSection extends Component<ExpandableSectionProps, ExpandableSect
|
|
|
204
215
|
toggleContent,
|
|
205
216
|
toggleAriaLabel,
|
|
206
217
|
toggleAriaLabelledBy,
|
|
218
|
+
toggleIcon = <AngleRightIcon />,
|
|
219
|
+
hasToggleIcon = true,
|
|
207
220
|
children,
|
|
208
221
|
isExpanded,
|
|
209
222
|
isDetached,
|
|
@@ -216,6 +229,7 @@ class ExpandableSection extends Component<ExpandableSectionProps, ExpandableSect
|
|
|
216
229
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
217
230
|
truncateMaxLines,
|
|
218
231
|
direction,
|
|
232
|
+
toggleWrapper = 'div',
|
|
219
233
|
...props
|
|
220
234
|
} = this.props;
|
|
221
235
|
|
|
@@ -246,8 +260,12 @@ class ExpandableSection extends Component<ExpandableSectionProps, ExpandableSect
|
|
|
246
260
|
propOrStateIsExpanded
|
|
247
261
|
);
|
|
248
262
|
|
|
263
|
+
const computedToggleContent =
|
|
264
|
+
typeof toggleContent === 'function' ? toggleContent(propOrStateIsExpanded) : toggleContent;
|
|
265
|
+
const ToggleWrapper = toggleWrapper as any;
|
|
266
|
+
|
|
249
267
|
const expandableToggle = !isDetached && (
|
|
250
|
-
<
|
|
268
|
+
<ToggleWrapper className={`${styles.expandableSection}__toggle`}>
|
|
251
269
|
<Button
|
|
252
270
|
variant="link"
|
|
253
271
|
{...(variant === ExpandableSectionVariant.truncate && { isInline: true })}
|
|
@@ -255,19 +273,16 @@ class ExpandableSection extends Component<ExpandableSectionProps, ExpandableSect
|
|
|
255
273
|
aria-controls={uniqueContentId}
|
|
256
274
|
id={uniqueToggleId}
|
|
257
275
|
onClick={(event) => onToggle(event, !propOrStateIsExpanded)}
|
|
258
|
-
{...(variant !== ExpandableSectionVariant.truncate &&
|
|
259
|
-
|
|
260
|
-
<span className={css(styles.expandableSectionToggleIcon)}>
|
|
261
|
-
|
|
262
|
-
</span>
|
|
263
|
-
)
|
|
264
|
-
})}
|
|
276
|
+
{...(variant !== ExpandableSectionVariant.truncate &&
|
|
277
|
+
hasToggleIcon && {
|
|
278
|
+
icon: <span className={css(styles.expandableSectionToggleIcon)}>{toggleIcon}</span>
|
|
279
|
+
})}
|
|
265
280
|
aria-label={toggleAriaLabel}
|
|
266
281
|
aria-labelledby={toggleAriaLabelledBy}
|
|
267
282
|
>
|
|
268
|
-
{
|
|
283
|
+
{computedToggleContent || computedToggleText}
|
|
269
284
|
</Button>
|
|
270
|
-
</
|
|
285
|
+
</ToggleWrapper>
|
|
271
286
|
);
|
|
272
287
|
|
|
273
288
|
return (
|
|
@@ -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';
|
|
@@ -3,6 +3,7 @@ import userEvent from '@testing-library/user-event';
|
|
|
3
3
|
|
|
4
4
|
import { ExpandableSection, ExpandableSectionVariant } from '../ExpandableSection';
|
|
5
5
|
import styles from '@patternfly/react-styles/css/components/ExpandableSection/expandable-section';
|
|
6
|
+
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
6
7
|
|
|
7
8
|
const props = { contentId: 'content-id', toggleId: 'toggle-id' };
|
|
8
9
|
|
|
@@ -208,3 +209,96 @@ test('Renders with aria-labelledby when toggleAriaLabelledBy is passed', () => {
|
|
|
208
209
|
|
|
209
210
|
expect(screen.getByRole('button')).toHaveAccessibleName('Test label');
|
|
210
211
|
});
|
|
212
|
+
|
|
213
|
+
test('Renders toggleContent as a function in uncontrolled mode (collapsed)', () => {
|
|
214
|
+
render(
|
|
215
|
+
<ExpandableSection toggleContent={(isExpanded) => (isExpanded ? 'Hide details' : 'Show details')}>
|
|
216
|
+
Test content
|
|
217
|
+
</ExpandableSection>
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
expect(screen.getByRole('button', { name: 'Show details' })).toBeInTheDocument();
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
test('Renders toggleContent as a function in uncontrolled mode (expanded after click)', async () => {
|
|
224
|
+
const user = userEvent.setup();
|
|
225
|
+
|
|
226
|
+
render(
|
|
227
|
+
<ExpandableSection toggleContent={(isExpanded) => (isExpanded ? 'Hide details' : 'Show details')}>
|
|
228
|
+
Test content
|
|
229
|
+
</ExpandableSection>
|
|
230
|
+
);
|
|
231
|
+
|
|
232
|
+
const button = screen.getByRole('button', { name: 'Show details' });
|
|
233
|
+
await user.click(button);
|
|
234
|
+
|
|
235
|
+
expect(screen.getByRole('button', { name: 'Hide details' })).toBeInTheDocument();
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
test('Renders toggleContent as a function in controlled mode', () => {
|
|
239
|
+
render(
|
|
240
|
+
<ExpandableSection isExpanded={true} toggleContent={(isExpanded) => (isExpanded ? 'Collapse' : 'Expand')}>
|
|
241
|
+
Test content
|
|
242
|
+
</ExpandableSection>
|
|
243
|
+
);
|
|
244
|
+
|
|
245
|
+
expect(screen.getByRole('button', { name: 'Collapse' })).toBeInTheDocument();
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
test('Renders with default div wrapper when toggleWrapper is not specified', () => {
|
|
249
|
+
render(<ExpandableSection data-testid="test-id">Test content</ExpandableSection>);
|
|
250
|
+
|
|
251
|
+
const toggle = screen.getByRole('button').parentElement;
|
|
252
|
+
expect(toggle?.tagName).toBe('DIV');
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
test('Renders with h2 wrapper when toggleWrapper="h2"', () => {
|
|
256
|
+
render(
|
|
257
|
+
<ExpandableSection data-testid="test-id" toggleWrapper="h2">
|
|
258
|
+
Test content
|
|
259
|
+
</ExpandableSection>
|
|
260
|
+
);
|
|
261
|
+
|
|
262
|
+
expect(screen.getByRole('heading', { level: 2 })).toBeInTheDocument();
|
|
263
|
+
});
|
|
264
|
+
|
|
265
|
+
test('Renders with div wrapper when toggleWrapper="div"', () => {
|
|
266
|
+
render(
|
|
267
|
+
<ExpandableSection data-testid="test-id" toggleWrapper="div">
|
|
268
|
+
Test content
|
|
269
|
+
</ExpandableSection>
|
|
270
|
+
);
|
|
271
|
+
|
|
272
|
+
const toggle = screen.getByRole('button').parentElement;
|
|
273
|
+
expect(toggle?.tagName).toBe('DIV');
|
|
274
|
+
});
|
|
275
|
+
|
|
276
|
+
test('Can render custom toggle icon', () => {
|
|
277
|
+
render(<ExpandableSection toggleIcon={<BellIcon data-testid="bell-icon" />}>Test content</ExpandableSection>);
|
|
278
|
+
|
|
279
|
+
expect(screen.getByTestId('bell-icon')).toBeInTheDocument();
|
|
280
|
+
});
|
|
281
|
+
|
|
282
|
+
test('Does not render toggle icon when hasToggleIcon is false', () => {
|
|
283
|
+
render(<ExpandableSection hasToggleIcon={false}>Test content</ExpandableSection>);
|
|
284
|
+
|
|
285
|
+
const button = screen.getByRole('button');
|
|
286
|
+
expect(button.querySelector('.pf-v6-c-expandable-section__toggle-icon')).not.toBeInTheDocument();
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
test('Does not render custom toggle icon when hasToggleIcon is false', () => {
|
|
290
|
+
render(
|
|
291
|
+
<ExpandableSection toggleIcon={<BellIcon data-testid="bell-icon" />} hasToggleIcon={false}>
|
|
292
|
+
Test content
|
|
293
|
+
</ExpandableSection>
|
|
294
|
+
);
|
|
295
|
+
|
|
296
|
+
expect(screen.queryByTestId('bell-icon')).not.toBeInTheDocument();
|
|
297
|
+
});
|
|
298
|
+
|
|
299
|
+
test('Renders toggle icon by default when hasToggleIcon is true', () => {
|
|
300
|
+
render(<ExpandableSection>Test content</ExpandableSection>);
|
|
301
|
+
|
|
302
|
+
const button = screen.getByRole('button');
|
|
303
|
+
expect(button.querySelector('.pf-v6-c-expandable-section__toggle-icon')).toBeInTheDocument();
|
|
304
|
+
});
|
|
@@ -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
|
+
};
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import styles from '@patternfly/react-styles/css/components/Hero/hero';
|
|
2
|
+
import { css } from '@patternfly/react-styles';
|
|
3
|
+
import heroBackgroundImageLight from '@patternfly/react-tokens/dist/esm/c_hero_BackgroundImage_light';
|
|
4
|
+
import heroBackgroundImageDark from '@patternfly/react-tokens/dist/esm/c_hero_BackgroundImage_dark';
|
|
5
|
+
import heroGradientStop1Light from '@patternfly/react-tokens/dist/esm/c_hero_gradient_stop_1_light';
|
|
6
|
+
import heroGradientStop2Light from '@patternfly/react-tokens/dist/esm/c_hero_gradient_stop_2_light';
|
|
7
|
+
import heroGradientStop3Light from '@patternfly/react-tokens/dist/esm/c_hero_gradient_stop_3_light';
|
|
8
|
+
import heroGradientStop1Dark from '@patternfly/react-tokens/dist/esm/c_hero_gradient_stop_1_dark';
|
|
9
|
+
import heroGradientStop2Dark from '@patternfly/react-tokens/dist/esm/c_hero_gradient_stop_2_dark';
|
|
10
|
+
import heroGradientStop3Dark from '@patternfly/react-tokens/dist/esm/c_hero_gradient_stop_3_dark';
|
|
11
|
+
import heroBodyWidth from '@patternfly/react-tokens/dist/esm/c_hero__body_Width';
|
|
12
|
+
import heroBodyMaxWidth from '@patternfly/react-tokens/dist/esm/c_hero__body_MaxWidth';
|
|
13
|
+
|
|
14
|
+
/** The main Hero component that allows adjusting of its background images and gradients in different color modes (such as light and dark). */
|
|
15
|
+
|
|
16
|
+
export interface HeroProps extends Omit<React.HTMLProps<HTMLDivElement>, 'content'> {
|
|
17
|
+
/** Content of the hero */
|
|
18
|
+
children?: React.ReactNode;
|
|
19
|
+
/** Additional classes added to the hero */
|
|
20
|
+
className?: string;
|
|
21
|
+
/** Light theme background image path of the hero */
|
|
22
|
+
backgroundSrcLight?: string;
|
|
23
|
+
/** Dark theme background image path of the hero */
|
|
24
|
+
backgroundSrcDark?: string;
|
|
25
|
+
/** Light theme gradient of the hero, taking any valid CSS color values for each stop property. */
|
|
26
|
+
gradientLight?: {
|
|
27
|
+
stop1?: string;
|
|
28
|
+
stop2?: string;
|
|
29
|
+
stop3?: string;
|
|
30
|
+
};
|
|
31
|
+
/** Dark theme gradient of the hero, taking any valid CSS color values for each stop property. */
|
|
32
|
+
gradientDark?: {
|
|
33
|
+
stop1?: string;
|
|
34
|
+
stop2?: string;
|
|
35
|
+
stop3?: string;
|
|
36
|
+
};
|
|
37
|
+
/** Flag indicating whether glass styles are removed from the hero when a glass theme is applied. */
|
|
38
|
+
hasNoGlass?: boolean;
|
|
39
|
+
/** Modifies the width of the hero body. */
|
|
40
|
+
bodyWidth?: string;
|
|
41
|
+
/** Modifies the max-width of the hero body. */
|
|
42
|
+
bodyMaxWidth?: string;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export const Hero: React.FunctionComponent<HeroProps> = ({
|
|
46
|
+
className,
|
|
47
|
+
children,
|
|
48
|
+
backgroundSrcLight,
|
|
49
|
+
backgroundSrcDark,
|
|
50
|
+
gradientLight,
|
|
51
|
+
gradientDark,
|
|
52
|
+
hasNoGlass = false,
|
|
53
|
+
bodyWidth,
|
|
54
|
+
bodyMaxWidth,
|
|
55
|
+
...props
|
|
56
|
+
}) => {
|
|
57
|
+
const customStyles: { [key: string]: string } = {};
|
|
58
|
+
if (backgroundSrcLight) {
|
|
59
|
+
customStyles[heroBackgroundImageLight.name] = `url(${backgroundSrcLight})`;
|
|
60
|
+
}
|
|
61
|
+
if (backgroundSrcDark) {
|
|
62
|
+
customStyles[heroBackgroundImageDark.name] = `url(${backgroundSrcDark})`;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (gradientLight?.stop1) {
|
|
66
|
+
customStyles[heroGradientStop1Light.name] = gradientLight.stop1;
|
|
67
|
+
}
|
|
68
|
+
if (gradientLight?.stop2) {
|
|
69
|
+
customStyles[heroGradientStop2Light.name] = gradientLight.stop2;
|
|
70
|
+
}
|
|
71
|
+
if (gradientLight?.stop3) {
|
|
72
|
+
customStyles[heroGradientStop3Light.name] = gradientLight.stop3;
|
|
73
|
+
}
|
|
74
|
+
if (gradientDark?.stop1) {
|
|
75
|
+
customStyles[heroGradientStop1Dark.name] = gradientDark.stop1;
|
|
76
|
+
}
|
|
77
|
+
if (gradientDark?.stop2) {
|
|
78
|
+
customStyles[heroGradientStop2Dark.name] = gradientDark.stop2;
|
|
79
|
+
}
|
|
80
|
+
if (gradientDark?.stop3) {
|
|
81
|
+
customStyles[heroGradientStop3Dark.name] = gradientDark.stop3;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
if (bodyWidth) {
|
|
85
|
+
customStyles[heroBodyWidth.name] = bodyWidth;
|
|
86
|
+
}
|
|
87
|
+
if (bodyMaxWidth) {
|
|
88
|
+
customStyles[heroBodyMaxWidth.name] = bodyMaxWidth;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
return (
|
|
92
|
+
<div
|
|
93
|
+
className={css(styles.hero, hasNoGlass && styles.modifiers.noGlass, className)}
|
|
94
|
+
style={{ ...props.style, ...customStyles }}
|
|
95
|
+
{...props}
|
|
96
|
+
>
|
|
97
|
+
<div className={css(styles.heroBody)}>{children}</div>
|
|
98
|
+
</div>
|
|
99
|
+
);
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
Hero.displayName = 'Hero';
|