@patternfly/react-core 6.3.0-prerelease.2 → 6.3.0-prerelease.20
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 +99 -0
- package/CONTRIBUTING.md +3 -5
- 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/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/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 +2 -0
- package/dist/esm/components/Button/Button.d.ts +4 -0
- package/dist/esm/components/Button/Button.d.ts.map +1 -1
- package/dist/esm/components/Button/Button.js +20 -3
- package/dist/esm/components/Button/Button.js.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.js +2 -2
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelector.d.ts +5 -0
- package/dist/esm/components/DualListSelector/DualListSelector.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelector.js +4 -3
- package/dist/esm/components/DualListSelector/DualListSelector.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorContext.d.ts +1 -0
- package/dist/esm/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorContext.js +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorContext.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.js +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorTree.js +4 -1
- package/dist/esm/components/DualListSelector/DualListSelectorTree.js.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.d.ts +5 -0
- package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -1
- package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.js +8 -4
- package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -1
- package/dist/esm/components/Form/FormFieldGroupExpandable.d.ts +5 -0
- package/dist/esm/components/Form/FormFieldGroupExpandable.d.ts.map +1 -1
- package/dist/esm/components/Form/FormFieldGroupExpandable.js +2 -2
- package/dist/esm/components/Form/FormFieldGroupExpandable.js.map +1 -1
- package/dist/esm/components/Form/FormGroupLabelHelp.js +2 -2
- package/dist/esm/components/Form/FormGroupLabelHelp.js.map +1 -1
- package/dist/esm/components/Form/InternalFormFieldGroup.d.ts +5 -0
- package/dist/esm/components/Form/InternalFormFieldGroup.d.ts.map +1 -1
- package/dist/esm/components/Form/InternalFormFieldGroup.js +2 -2
- package/dist/esm/components/Form/InternalFormFieldGroup.js.map +1 -1
- package/dist/esm/components/Nav/NavExpandable.d.ts.map +1 -1
- package/dist/esm/components/Nav/NavExpandable.js +1 -1
- package/dist/esm/components/Nav/NavExpandable.js.map +1 -1
- package/dist/esm/components/SearchInput/SearchInput.d.ts +2 -0
- package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
- package/dist/esm/components/SearchInput/SearchInput.js +2 -2
- package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/esm/components/Tabs/OverflowTab.d.ts +26 -0
- package/dist/esm/components/Tabs/OverflowTab.d.ts.map +1 -1
- package/dist/esm/components/Tabs/OverflowTab.js +2 -2
- package/dist/esm/components/Tabs/OverflowTab.js.map +1 -1
- package/dist/esm/components/Tabs/Tab.d.ts.map +1 -1
- package/dist/esm/components/Tabs/Tab.js +5 -2
- package/dist/esm/components/Tabs/Tab.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.d.ts +8 -0
- package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/esm/components/Tabs/Tabs.js +41 -9
- package/dist/esm/components/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/Tabs/TabsContext.d.ts +1 -0
- package/dist/esm/components/Tabs/TabsContext.d.ts.map +1 -1
- package/dist/esm/components/Tabs/TabsContext.js +1 -0
- package/dist/esm/components/Tabs/TabsContext.js.map +1 -1
- package/dist/esm/components/TreeView/TreeViewListItem.d.ts.map +1 -1
- package/dist/esm/components/TreeView/TreeViewListItem.js +1 -1
- package/dist/esm/components/TreeView/TreeViewListItem.js.map +1 -1
- package/dist/esm/components/Truncate/Truncate.d.ts +11 -8
- package/dist/esm/components/Truncate/Truncate.d.ts.map +1 -1
- package/dist/esm/components/Truncate/Truncate.js +22 -12
- package/dist/esm/components/Truncate/Truncate.js.map +1 -1
- package/dist/esm/demos/sampleData.d.ts.map +1 -1
- package/dist/esm/demos/sampleData.js +225 -226
- package/dist/esm/demos/sampleData.js.map +1 -1
- package/dist/esm/demos/sampleDataRTL.d.ts +7 -0
- package/dist/esm/demos/sampleDataRTL.d.ts.map +1 -0
- package/dist/esm/demos/sampleDataRTL.js +128 -0
- package/dist/esm/demos/sampleDataRTL.js.map +1 -0
- package/dist/esm/helpers/KeyboardHandler.js +3 -2
- package/dist/esm/helpers/KeyboardHandler.js.map +1 -1
- package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
- package/dist/esm/helpers/Popper/Popper.js +1 -0
- package/dist/esm/helpers/Popper/Popper.js.map +1 -1
- package/dist/esm/helpers/util.d.ts +17 -0
- package/dist/esm/helpers/util.d.ts.map +1 -1
- package/dist/esm/helpers/util.js +36 -0
- package/dist/esm/helpers/util.js.map +1 -1
- package/dist/js/components/Button/Button.d.ts +4 -0
- package/dist/js/components/Button/Button.d.ts.map +1 -1
- package/dist/js/components/Button/Button.js +20 -3
- package/dist/js/components/Button/Button.js.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopy.js +2 -2
- package/dist/js/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelector.d.ts +5 -0
- package/dist/js/components/DualListSelector/DualListSelector.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelector.js +4 -3
- package/dist/js/components/DualListSelector/DualListSelector.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorContext.d.ts +1 -0
- package/dist/js/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorContext.js +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorContext.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorListWrapper.js +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorTree.js +4 -1
- package/dist/js/components/DualListSelector/DualListSelectorTree.js.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorTreeItem.d.ts +5 -0
- package/dist/js/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -1
- package/dist/js/components/DualListSelector/DualListSelectorTreeItem.js +7 -3
- package/dist/js/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -1
- package/dist/js/components/Form/FormFieldGroupExpandable.d.ts +5 -0
- package/dist/js/components/Form/FormFieldGroupExpandable.d.ts.map +1 -1
- package/dist/js/components/Form/FormFieldGroupExpandable.js +2 -2
- package/dist/js/components/Form/FormFieldGroupExpandable.js.map +1 -1
- package/dist/js/components/Form/FormGroupLabelHelp.js +2 -2
- package/dist/js/components/Form/FormGroupLabelHelp.js.map +1 -1
- package/dist/js/components/Form/InternalFormFieldGroup.d.ts +5 -0
- package/dist/js/components/Form/InternalFormFieldGroup.d.ts.map +1 -1
- package/dist/js/components/Form/InternalFormFieldGroup.js +2 -2
- package/dist/js/components/Form/InternalFormFieldGroup.js.map +1 -1
- package/dist/js/components/Nav/NavExpandable.d.ts.map +1 -1
- package/dist/js/components/Nav/NavExpandable.js +1 -1
- package/dist/js/components/Nav/NavExpandable.js.map +1 -1
- package/dist/js/components/SearchInput/SearchInput.d.ts +2 -0
- package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
- package/dist/js/components/SearchInput/SearchInput.js +2 -2
- package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
- package/dist/js/components/Tabs/OverflowTab.d.ts +26 -0
- package/dist/js/components/Tabs/OverflowTab.d.ts.map +1 -1
- package/dist/js/components/Tabs/OverflowTab.js +2 -2
- package/dist/js/components/Tabs/OverflowTab.js.map +1 -1
- package/dist/js/components/Tabs/Tab.d.ts.map +1 -1
- package/dist/js/components/Tabs/Tab.js +4 -1
- package/dist/js/components/Tabs/Tab.js.map +1 -1
- package/dist/js/components/Tabs/Tabs.d.ts +8 -0
- package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/js/components/Tabs/Tabs.js +40 -8
- package/dist/js/components/Tabs/Tabs.js.map +1 -1
- package/dist/js/components/Tabs/TabsContext.d.ts +1 -0
- package/dist/js/components/Tabs/TabsContext.d.ts.map +1 -1
- package/dist/js/components/Tabs/TabsContext.js +1 -0
- package/dist/js/components/Tabs/TabsContext.js.map +1 -1
- package/dist/js/components/TreeView/TreeViewListItem.d.ts.map +1 -1
- package/dist/js/components/TreeView/TreeViewListItem.js +1 -1
- package/dist/js/components/TreeView/TreeViewListItem.js.map +1 -1
- package/dist/js/components/Truncate/Truncate.d.ts +11 -8
- package/dist/js/components/Truncate/Truncate.d.ts.map +1 -1
- package/dist/js/components/Truncate/Truncate.js +21 -12
- package/dist/js/components/Truncate/Truncate.js.map +1 -1
- package/dist/js/demos/sampleData.d.ts.map +1 -1
- package/dist/js/demos/sampleData.js +225 -226
- package/dist/js/demos/sampleData.js.map +1 -1
- package/dist/js/demos/sampleDataRTL.d.ts +7 -0
- package/dist/js/demos/sampleDataRTL.d.ts.map +1 -0
- package/dist/js/demos/sampleDataRTL.js +131 -0
- package/dist/js/demos/sampleDataRTL.js.map +1 -0
- package/dist/js/helpers/KeyboardHandler.js +3 -2
- package/dist/js/helpers/KeyboardHandler.js.map +1 -1
- package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
- package/dist/js/helpers/Popper/Popper.js +1 -0
- package/dist/js/helpers/Popper/Popper.js.map +1 -1
- package/dist/js/helpers/util.d.ts +17 -0
- package/dist/js/helpers/util.d.ts.map +1 -1
- package/dist/js/helpers/util.js +39 -1
- package/dist/js/helpers/util.js.map +1 -1
- package/dist/styles/assets/images/icon-help.hbs +3 -0
- package/dist/styles/assets/images/icon-outlined-star.hbs +3 -0
- package/dist/styles/assets/images/icon-star.hbs +3 -0
- package/dist/styles/base-no-reset.css +11 -11
- package/dist/styles/base.css +11 -11
- package/dist/umd/assets/{output-CTQ3-b33.css → output-DzgMn5vn.css} +18950 -18401
- 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/Button/Button.tsx +48 -5
- package/src/components/Button/__tests__/Button.test.tsx +25 -0
- package/src/components/Button/examples/Button.md +8 -1
- package/src/components/Button/examples/ButtonFavorite.tsx +18 -0
- package/src/components/Card/examples/Card.md +1 -1
- package/src/components/Card/examples/CardSelectable.tsx +73 -60
- package/src/components/Card/examples/CardSingleSelectable.tsx +65 -48
- package/src/components/ClipboardCopy/ClipboardCopy.tsx +2 -1
- package/src/components/DualListSelector/DualListSelector.tsx +18 -4
- package/src/components/DualListSelector/DualListSelectorContext.ts +2 -1
- package/src/components/DualListSelector/DualListSelectorListWrapper.tsx +8 -5
- package/src/components/DualListSelector/DualListSelectorTree.tsx +4 -0
- package/src/components/DualListSelector/DualListSelectorTreeItem.tsx +17 -2
- package/src/components/DualListSelector/__tests__/DualListSelector.test.tsx +32 -1
- package/src/components/DualListSelector/__tests__/DualListSelectorTreeItem.test.tsx +55 -0
- package/src/components/DualListSelector/examples/DualListSelectorTree.tsx +1 -1
- package/src/components/Form/FormFieldGroupExpandable.tsx +7 -0
- package/src/components/Form/FormGroupLabelHelp.tsx +2 -2
- package/src/components/Form/InternalFormFieldGroup.tsx +19 -3
- package/src/components/Form/__tests__/FormFieldGroupExpandable.test.tsx +55 -0
- package/src/components/Form/examples/FormFieldGroups.tsx +7 -1
- package/src/components/LoginPage/examples/LoginPageBasic.tsx +1 -1
- package/src/components/LoginPage/examples/LoginPageLanguageSelect.tsx +1 -1
- package/src/components/LoginPage/examples/LoginPageShowHidePassword.tsx +1 -1
- package/src/components/Nav/NavExpandable.tsx +6 -1
- package/src/components/Nav/__tests__/Generated/__snapshots__/NavExpandable.test.tsx.snap +1 -0
- package/src/components/Nav/__tests__/NavExpandable.test.tsx +15 -0
- package/src/components/Nav/__tests__/__snapshots__/Nav.test.tsx.snap +3 -0
- package/src/components/Page/examples/Page.md +1 -1
- package/src/components/Page/examples/PageCenteredSection.tsx +3 -4
- package/src/components/Page/examples/PageGroupSection.tsx +9 -3
- package/src/components/Page/examples/PageHorizontalNav.tsx +9 -3
- package/src/components/Page/examples/PageMainSectionPadding.tsx +12 -4
- package/src/components/Page/examples/PageMainSectionVariations.tsx +6 -6
- package/src/components/Page/examples/PageMultipleSidebarBody.tsx +9 -3
- package/src/components/Page/examples/PageUncontrolledNav.tsx +9 -3
- package/src/components/Page/examples/PageVerticalNav.tsx +9 -3
- package/src/components/Page/examples/PageWithOrWithoutFill.tsx +8 -4
- package/src/components/SearchInput/SearchInput.tsx +8 -1
- package/src/components/Select/examples/Select.md +3 -26
- package/src/components/Skeleton/examples/SkeletonText.tsx +0 -1
- package/src/components/Tabs/OverflowTab.tsx +29 -0
- package/src/components/Tabs/Tab.tsx +6 -2
- package/src/components/Tabs/Tabs.tsx +70 -11
- package/src/components/Tabs/TabsContext.ts +2 -0
- package/src/components/Tabs/__tests__/Tabs.test.tsx +43 -1
- package/src/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +39 -26
- package/src/components/Tabs/examples/Tabs.md +1 -1
- package/src/components/Timestamp/examples/TimestampBasicFormats.tsx +1 -1
- package/src/components/Timestamp/examples/TimestampDefaultTooltip.tsx +1 -1
- package/src/components/TreeView/TreeViewListItem.tsx +1 -3
- package/src/components/TreeView/__tests__/TreeViewListItem.test.tsx +10 -0
- package/src/components/Truncate/Truncate.tsx +48 -22
- package/src/components/Truncate/__tests__/Truncate.test.tsx +28 -2
- package/src/components/Truncate/__tests__/__snapshots__/Truncate.test.tsx.snap +2 -2
- package/src/components/Truncate/examples/Truncate.md +8 -0
- package/src/components/Truncate/examples/TruncateLinks.tsx +22 -0
- package/src/demos/Banner.md +6 -6
- package/src/demos/CardDemos.md +1 -1
- package/src/demos/CardView/examples/CardView.tsx +9 -4
- package/src/demos/DataList/examples/DataListActionable.tsx +5 -3
- package/src/demos/DataList/examples/DataListBasic.tsx +2 -2
- package/src/demos/DataList/examples/DataListExpandableControlInToolbar.tsx +2 -2
- package/src/demos/DataList/examples/DataListStaticBottomPagination.tsx +4 -2
- package/src/demos/DescriptionList/examples/DescriptionListBasic.tsx +4 -4
- package/src/demos/DescriptionList/examples/DescriptionListInDrawer.tsx +5 -3
- package/src/demos/JumpLinks.md +5 -5
- package/src/demos/PasswordGenerator.md +1 -1
- package/src/demos/RTL/RTL.md +1 -0
- package/src/demos/RTL/examples/PaginatedTable.tsx +16 -44
- package/src/demos/Tabs.md +6 -6
- package/src/demos/examples/AlertGroup/AlertGroupToastWithNotificationDrawer.tsx +6 -6
- package/src/demos/examples/BackToTop/BackToTopNameDemo.tsx +2 -2
- package/src/demos/examples/Card/CardAggregateStatus.tsx +2 -6
- package/src/demos/examples/Card/CardDetails.tsx +2 -3
- package/src/demos/examples/Card/CardEventsView.tsx +2 -3
- package/src/demos/examples/Card/CardLogView.tsx +2 -3
- package/src/demos/examples/Card/CardStatus.tsx +0 -1
- package/src/demos/examples/Card/CardUtilizationDemo3.tsx +0 -1
- package/src/demos/examples/Masthead/MastheadWithHorizontalNav.tsx +5 -3
- package/src/demos/examples/Masthead/MastheadWithUtilitiesAndUserDropdownMenu.tsx +3 -3
- package/src/demos/examples/Nav/NavDefault.tsx +3 -3
- package/src/demos/examples/Nav/NavDrilldown.tsx +1 -1
- package/src/demos/examples/Nav/NavExpandable.tsx +3 -3
- package/src/demos/examples/Nav/NavFlyout.tsx +9 -3
- package/src/demos/examples/Nav/NavGrouped.tsx +14 -6
- package/src/demos/examples/Nav/NavHorizontal.tsx +3 -3
- package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +5 -5
- package/src/demos/examples/Nav/NavManual.tsx +3 -3
- package/src/demos/examples/Nav/NavWithSubnav.tsx +5 -5
- package/src/demos/examples/Tabs/ModalTabs.tsx +3 -3
- package/src/demos/examples/Tabs/NestedTabs.tsx +2 -2
- package/src/demos/examples/Tabs/NestedUnindentedTabs.tsx +2 -2
- package/src/demos/examples/Tabs/TabsAndTable.tsx +3 -3
- package/src/demos/sampleData.tsx +225 -227
- package/src/demos/sampleDataRTL.tsx +133 -0
- package/src/helpers/KeyboardHandler.tsx +2 -2
- package/src/helpers/Popper/Popper.tsx +1 -0
- package/src/helpers/util.ts +45 -0
- package/src/demos/RTL/examples/PaginatedTable.jsx +0 -504
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { memo, useContext, useEffect, useRef, useState } from 'react';
|
|
1
|
+
import { memo, useContext, useEffect, useRef, useState, cloneElement, Children, isValidElement } from 'react';
|
|
2
2
|
import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
|
|
3
3
|
import { css } from '@patternfly/react-styles';
|
|
4
4
|
import { DualListSelectorTreeItemData } from './DualListSelectorTree';
|
|
@@ -38,6 +38,11 @@ export interface DualListSelectorTreeItemProps extends React.HTMLProps<HTMLLIEle
|
|
|
38
38
|
isDisabled?: boolean;
|
|
39
39
|
/** Flag indicating the DualListSelector tree should utilize memoization to help render large data sets. */
|
|
40
40
|
useMemo?: boolean;
|
|
41
|
+
/** Flag indicating whether a tree dual list selector has animations. This will always render
|
|
42
|
+
* nested dual list selector items rather than dynamically rendering them. This prop will be removed in
|
|
43
|
+
* the next breaking change release in favor of defaulting to always-rendered items.
|
|
44
|
+
*/
|
|
45
|
+
hasAnimations?: boolean;
|
|
41
46
|
}
|
|
42
47
|
|
|
43
48
|
const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTreeItemProps> = ({
|
|
@@ -53,6 +58,7 @@ const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTree
|
|
|
53
58
|
badgeProps,
|
|
54
59
|
itemData,
|
|
55
60
|
isDisabled = false,
|
|
61
|
+
hasAnimations,
|
|
56
62
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
57
63
|
useMemo,
|
|
58
64
|
...props
|
|
@@ -65,6 +71,15 @@ const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTree
|
|
|
65
71
|
setIsExpanded(defaultExpanded);
|
|
66
72
|
}, [defaultExpanded]);
|
|
67
73
|
|
|
74
|
+
const clonedChildren = Children.map(
|
|
75
|
+
children,
|
|
76
|
+
(child) =>
|
|
77
|
+
isValidElement(child) &&
|
|
78
|
+
cloneElement(child as React.ReactElement<any>, {
|
|
79
|
+
inert: isExpanded ? undefined : ''
|
|
80
|
+
})
|
|
81
|
+
);
|
|
82
|
+
|
|
68
83
|
return (
|
|
69
84
|
<li
|
|
70
85
|
className={css(
|
|
@@ -156,7 +171,7 @@ const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTree
|
|
|
156
171
|
</span>
|
|
157
172
|
</div>
|
|
158
173
|
</div>
|
|
159
|
-
{isExpanded &&
|
|
174
|
+
{(isExpanded || hasAnimations) && clonedChildren}
|
|
160
175
|
</li>
|
|
161
176
|
);
|
|
162
177
|
};
|
|
@@ -1,6 +1,37 @@
|
|
|
1
|
-
import { render } from '@testing-library/react';
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
|
|
3
|
+
import { DualListSelector } from '../DualListSelector';
|
|
2
4
|
import { DualListSelectorPane } from '../DualListSelectorPane';
|
|
3
5
|
import { SearchInput } from '../../SearchInput';
|
|
6
|
+
|
|
7
|
+
// The following tests can be removed as part of https://github.com/patternfly/patternfly-react/issues/11838
|
|
8
|
+
describe('Opt-in animations', () => {
|
|
9
|
+
test(`Does not render with class ${styles.modifiers.animateExpand} by default`, () => {
|
|
10
|
+
render(<DualListSelector data-testid="test-id" />);
|
|
11
|
+
|
|
12
|
+
expect(screen.getByTestId('test-id')).not.toHaveClass(styles.modifiers.animateExpand);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
test(`Does not render with class ${styles.modifiers.animateExpand} when hasAnimations is true and isTree is false`, () => {
|
|
16
|
+
render(<DualListSelector hasAnimations data-testid="test-id" />);
|
|
17
|
+
|
|
18
|
+
expect(screen.getByTestId('test-id')).not.toHaveClass(styles.modifiers.animateExpand);
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test(`Does not render with class ${styles.modifiers.animateExpand} by default when isTree is true`, () => {
|
|
22
|
+
render(<DualListSelector isTree data-testid="test-id" />);
|
|
23
|
+
|
|
24
|
+
expect(screen.getByTestId('test-id')).not.toHaveClass(styles.modifiers.animateExpand);
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test(`Renders with class ${styles.modifiers.animateExpand} when both isTree and hasAnimations are true`, () => {
|
|
28
|
+
render(<DualListSelector isTree hasAnimations data-testid="test-id" />);
|
|
29
|
+
|
|
30
|
+
expect(screen.getByTestId('test-id')).toHaveClass(styles.modifiers.animateExpand);
|
|
31
|
+
});
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
// Following tests should be moved to a separate DualListSelectorPane test file
|
|
4
35
|
describe('DualListSelector', () => {
|
|
5
36
|
test('basic', () => {
|
|
6
37
|
const { asFragment } = render(<DualListSelectorPane id="basicTest" />);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
|
|
3
|
+
import { DualListSelectorTreeItem } from '../DualListSelectorTreeItem';
|
|
4
|
+
|
|
5
|
+
// The following tests checking for children to not be/to be rendered will need to be refactored
|
|
6
|
+
// as part of https://github.com/patternfly/patternfly-react/issues/11838
|
|
7
|
+
test('Does not render children by default', () => {
|
|
8
|
+
render(
|
|
9
|
+
<DualListSelectorTreeItem id="item-id" text="Test text">
|
|
10
|
+
<div>Children content</div>
|
|
11
|
+
</DualListSelectorTreeItem>
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
expect(screen.queryByText('Children content')).not.toBeInTheDocument();
|
|
15
|
+
});
|
|
16
|
+
|
|
17
|
+
test('Renders children when defaultExpanded is true', () => {
|
|
18
|
+
render(
|
|
19
|
+
<DualListSelectorTreeItem defaultExpanded id="item-id" text="Test text">
|
|
20
|
+
<div>Children content</div>
|
|
21
|
+
</DualListSelectorTreeItem>
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
expect(screen.getByText('Children content')).toBeVisible();
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
test('Renders children when hasAnimations is true', () => {
|
|
28
|
+
render(
|
|
29
|
+
<DualListSelectorTreeItem hasAnimations id="item-id" text="Test text">
|
|
30
|
+
<div>Children content</div>
|
|
31
|
+
</DualListSelectorTreeItem>
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
expect(screen.getByText('Children content')).toBeVisible();
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
test('Renders children with inert attribute by default when hasAnimations is true', () => {
|
|
38
|
+
render(
|
|
39
|
+
<DualListSelectorTreeItem hasAnimations id="item-id" text="Test text">
|
|
40
|
+
<div>Children content</div>
|
|
41
|
+
</DualListSelectorTreeItem>
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
expect(screen.getByText('Children content')).toHaveAttribute('inert', '');
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test('Does not render children with inert attribute when hasAnimations and defaultExpanded are true', () => {
|
|
48
|
+
render(
|
|
49
|
+
<DualListSelectorTreeItem hasAnimations defaultExpanded id="item-id" text="Test text">
|
|
50
|
+
<div>Children content</div>
|
|
51
|
+
</DualListSelectorTreeItem>
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
expect(screen.getByText('Children content')).not.toHaveAttribute('inert');
|
|
55
|
+
});
|
|
@@ -283,7 +283,7 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
|
|
|
283
283
|
};
|
|
284
284
|
|
|
285
285
|
return (
|
|
286
|
-
<DualListSelector isTree>
|
|
286
|
+
<DualListSelector hasAnimations isTree>
|
|
287
287
|
{buildPane(false)}
|
|
288
288
|
<DualListSelectorControlsWrapper>
|
|
289
289
|
<DualListSelectorControl
|
|
@@ -12,6 +12,11 @@ export interface FormFieldGroupExpandableProps extends Omit<React.HTMLProps<HTML
|
|
|
12
12
|
isExpanded?: boolean;
|
|
13
13
|
/** Aria-label to use on the form field group toggle button */
|
|
14
14
|
toggleAriaLabel?: string;
|
|
15
|
+
/** Flag indicating whether an expandable form field group has animations. This will always render
|
|
16
|
+
* nested field group content rather than dynamically rendering them. This prop will be removed in
|
|
17
|
+
* the next breaking change release in favor of defaulting to always-rendered items.
|
|
18
|
+
*/
|
|
19
|
+
hasAnimations?: boolean;
|
|
15
20
|
}
|
|
16
21
|
|
|
17
22
|
export const FormFieldGroupExpandable: React.FunctionComponent<FormFieldGroupExpandableProps> = ({
|
|
@@ -20,6 +25,7 @@ export const FormFieldGroupExpandable: React.FunctionComponent<FormFieldGroupExp
|
|
|
20
25
|
header,
|
|
21
26
|
isExpanded = false,
|
|
22
27
|
toggleAriaLabel,
|
|
28
|
+
hasAnimations,
|
|
23
29
|
...props
|
|
24
30
|
}: FormFieldGroupExpandableProps) => {
|
|
25
31
|
const [localIsExpanded, setIsExpanded] = useState(isExpanded);
|
|
@@ -32,6 +38,7 @@ export const FormFieldGroupExpandable: React.FunctionComponent<FormFieldGroupExp
|
|
|
32
38
|
isExpanded={localIsExpanded}
|
|
33
39
|
toggleAriaLabel={toggleAriaLabel}
|
|
34
40
|
onToggle={() => setIsExpanded(!localIsExpanded)}
|
|
41
|
+
hasAnimations={hasAnimations}
|
|
35
42
|
{...props}
|
|
36
43
|
>
|
|
37
44
|
{children}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { forwardRef, useRef } from 'react';
|
|
2
2
|
import { Button, ButtonProps } from '../Button';
|
|
3
|
-
import QuestionCircleIcon from '@patternfly/react-icons/dist/esm/icons/question-circle-icon';
|
|
4
3
|
import { KeyTypes } from '../../helpers/constants';
|
|
4
|
+
import HelpIcon from '@patternfly/react-icons/dist/esm/icons/help-icon';
|
|
5
5
|
|
|
6
6
|
/** A help button to be passed to the FormGroup's labelHelp property. This should be wrapped or linked
|
|
7
7
|
* to our Popover component.
|
|
@@ -45,7 +45,7 @@ const FormGroupLabelHelpBase: React.FunctionComponent<FormGroupLabelHelpProps> =
|
|
|
45
45
|
variant="plain"
|
|
46
46
|
hasNoPadding
|
|
47
47
|
{...props}
|
|
48
|
-
icon={<
|
|
48
|
+
icon={<HelpIcon />}
|
|
49
49
|
/>
|
|
50
50
|
);
|
|
51
51
|
};
|
|
@@ -18,6 +18,11 @@ export interface InternalFormFieldGroupProps extends Omit<React.HTMLProps<HTMLDi
|
|
|
18
18
|
onToggle?: () => void;
|
|
19
19
|
/** Aria-label to use on the form field group toggle button */
|
|
20
20
|
toggleAriaLabel?: string;
|
|
21
|
+
/** Flag indicating whether an expandable form field group has animations. This will always render
|
|
22
|
+
* nested field group content rather than dynamically rendering them. This prop will be removed in
|
|
23
|
+
* the next breaking change release in favor of defaulting to always-rendered items.
|
|
24
|
+
*/
|
|
25
|
+
hasAnimations?: boolean;
|
|
21
26
|
}
|
|
22
27
|
|
|
23
28
|
export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGroupProps> = ({
|
|
@@ -28,6 +33,7 @@ export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGr
|
|
|
28
33
|
isExpanded,
|
|
29
34
|
onToggle,
|
|
30
35
|
toggleAriaLabel,
|
|
36
|
+
hasAnimations,
|
|
31
37
|
...props
|
|
32
38
|
}: InternalFormFieldGroupProps) => {
|
|
33
39
|
const headerTitleText = header ? header.props.titleText : null;
|
|
@@ -40,7 +46,12 @@ export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGr
|
|
|
40
46
|
}
|
|
41
47
|
return (
|
|
42
48
|
<div
|
|
43
|
-
className={css(
|
|
49
|
+
className={css(
|
|
50
|
+
styles.formFieldGroup,
|
|
51
|
+
isExpanded && isExpandable && styles.modifiers.expanded,
|
|
52
|
+
hasAnimations && isExpandable && styles.modifiers.expandable,
|
|
53
|
+
className
|
|
54
|
+
)}
|
|
44
55
|
role="group"
|
|
45
56
|
{...(headerTitleText && { 'aria-labelledby': `${header.props.titleText.id}` })}
|
|
46
57
|
{...props}
|
|
@@ -59,8 +70,13 @@ export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGr
|
|
|
59
70
|
</GenerateId>
|
|
60
71
|
)}
|
|
61
72
|
{header && header}
|
|
62
|
-
{(!isExpandable || (isExpandable && isExpanded)) && (
|
|
63
|
-
<div
|
|
73
|
+
{(!isExpandable || (isExpandable && isExpanded) || (hasAnimations && isExpandable)) && (
|
|
74
|
+
<div
|
|
75
|
+
className={css(styles.formFieldGroupBody)}
|
|
76
|
+
{...(hasAnimations && isExpandable && !isExpanded && { inert: '' })}
|
|
77
|
+
>
|
|
78
|
+
{children}
|
|
79
|
+
</div>
|
|
64
80
|
)}
|
|
65
81
|
</div>
|
|
66
82
|
);
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import { FormFieldGroupExpandable } from '../FormFieldGroupExpandable';
|
|
3
|
+
import styles from '@patternfly/react-styles/css/components/Form/form';
|
|
4
|
+
|
|
5
|
+
test('Does not render children by default', () => {
|
|
6
|
+
render(<FormFieldGroupExpandable toggleAriaLabel="Toggle label">Child content</FormFieldGroupExpandable>);
|
|
7
|
+
|
|
8
|
+
expect(screen.queryByText('Child content')).not.toBeInTheDocument();
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('Renders children when isExpanded is true', () => {
|
|
12
|
+
render(
|
|
13
|
+
<FormFieldGroupExpandable isExpanded toggleAriaLabel="Toggle label">
|
|
14
|
+
Child content
|
|
15
|
+
</FormFieldGroupExpandable>
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
expect(screen.getByText('Child content')).toBeInTheDocument();
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
test('Renders children with inert attribute by default when hasAnimations is true', () => {
|
|
22
|
+
render(
|
|
23
|
+
<FormFieldGroupExpandable hasAnimations toggleAriaLabel="Toggle label">
|
|
24
|
+
Child content
|
|
25
|
+
</FormFieldGroupExpandable>
|
|
26
|
+
);
|
|
27
|
+
|
|
28
|
+
expect(screen.getByText('Child content')).toHaveAttribute('inert', '');
|
|
29
|
+
});
|
|
30
|
+
|
|
31
|
+
test('Does not render children with inert attribute when hasAnimations and isExpanded are true', () => {
|
|
32
|
+
render(
|
|
33
|
+
<FormFieldGroupExpandable hasAnimations isExpanded toggleAriaLabel="Toggle label">
|
|
34
|
+
Child content
|
|
35
|
+
</FormFieldGroupExpandable>
|
|
36
|
+
);
|
|
37
|
+
|
|
38
|
+
expect(screen.getByText('Child content')).not.toHaveAttribute('inert');
|
|
39
|
+
});
|
|
40
|
+
|
|
41
|
+
test(`Does not render with class ${styles.modifiers.expandable} by default`, () => {
|
|
42
|
+
render(<FormFieldGroupExpandable toggleAriaLabel="Toggle label">Child content</FormFieldGroupExpandable>);
|
|
43
|
+
|
|
44
|
+
expect(screen.getByRole('group')).not.toHaveClass(styles.modifiers.expandable);
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
test(`Renders with class ${styles.modifiers.expandable} when hasAnimations is true`, () => {
|
|
48
|
+
render(
|
|
49
|
+
<FormFieldGroupExpandable hasAnimations toggleAriaLabel="Toggle label">
|
|
50
|
+
Child content
|
|
51
|
+
</FormFieldGroupExpandable>
|
|
52
|
+
);
|
|
53
|
+
|
|
54
|
+
expect(screen.getByRole('group')).toHaveClass(styles.modifiers.expandable);
|
|
55
|
+
});
|
|
@@ -52,6 +52,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
|
|
|
52
52
|
<TextInput isRequired id="0-label2" name="0-label2" value={inputValues['0-label2']} onChange={handleChange} />
|
|
53
53
|
</FormGroup>
|
|
54
54
|
<FormFieldGroupExpandable
|
|
55
|
+
hasAnimations
|
|
55
56
|
isExpanded
|
|
56
57
|
toggleAriaLabel="Details"
|
|
57
58
|
header={
|
|
@@ -67,6 +68,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
|
|
|
67
68
|
}
|
|
68
69
|
>
|
|
69
70
|
<FormFieldGroupExpandable
|
|
71
|
+
hasAnimations
|
|
70
72
|
isExpanded
|
|
71
73
|
toggleAriaLabel="Details"
|
|
72
74
|
header={
|
|
@@ -97,6 +99,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
|
|
|
97
99
|
</FormGroup>
|
|
98
100
|
</FormFieldGroupExpandable>
|
|
99
101
|
<FormFieldGroupExpandable
|
|
102
|
+
hasAnimations
|
|
100
103
|
toggleAriaLabel="Details"
|
|
101
104
|
header={
|
|
102
105
|
<FormFieldGroupHeader
|
|
@@ -125,6 +128,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
|
|
|
125
128
|
</FormGroup>
|
|
126
129
|
</FormFieldGroupExpandable>
|
|
127
130
|
<FormFieldGroupExpandable
|
|
131
|
+
hasAnimations
|
|
128
132
|
toggleAriaLabel="Details"
|
|
129
133
|
header={
|
|
130
134
|
<FormFieldGroupHeader
|
|
@@ -173,6 +177,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
|
|
|
173
177
|
</FormGroup>
|
|
174
178
|
</FormFieldGroupExpandable>
|
|
175
179
|
<FormFieldGroupExpandable
|
|
180
|
+
hasAnimations
|
|
176
181
|
toggleAriaLabel="Details"
|
|
177
182
|
header={
|
|
178
183
|
<FormFieldGroupHeader
|
|
@@ -194,6 +199,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
|
|
|
194
199
|
</FormGroup>
|
|
195
200
|
</FormFieldGroupExpandable>
|
|
196
201
|
<FormFieldGroupExpandable
|
|
202
|
+
hasAnimations
|
|
197
203
|
isExpanded
|
|
198
204
|
toggleAriaLabel="Details"
|
|
199
205
|
header={
|
|
@@ -273,7 +279,7 @@ export const FormFieldGroups: React.FunctionComponent = () => {
|
|
|
273
279
|
header={
|
|
274
280
|
<FormFieldGroupHeader
|
|
275
281
|
titleText={{ text: 'Field group 4 (non-expandable)', id: 'field-group4-non-expandable-titleText-id' }}
|
|
276
|
-
titleDescription="Field group 4 description text."
|
|
282
|
+
titleDescription="Field group 4 description text fdgsdg."
|
|
277
283
|
actions={
|
|
278
284
|
<>
|
|
279
285
|
<Button variant="link">Delete all</Button> <Button variant="secondary">Add parameter</Button>
|
|
@@ -116,7 +116,7 @@ export const SimpleLoginPage: React.FunctionComponent = () => {
|
|
|
116
116
|
footerListVariants={ListVariant.inline}
|
|
117
117
|
brandImgSrc={brandImg}
|
|
118
118
|
brandImgAlt="PatternFly logo"
|
|
119
|
-
backgroundImgSrc="/assets/images/
|
|
119
|
+
backgroundImgSrc="/assets/images/pf-background.svg"
|
|
120
120
|
footerListItems={listItem}
|
|
121
121
|
textContent="This is placeholder text only. Use this area to place any information or introductory message about your application that may be relevant to users."
|
|
122
122
|
loginTitle="Log in to your account"
|
|
@@ -189,7 +189,7 @@ export const LoginPageLanguageSelect: React.FunctionComponent = () => {
|
|
|
189
189
|
footerListVariants={ListVariant.inline}
|
|
190
190
|
brandImgSrc={brandImg}
|
|
191
191
|
brandImgAlt="PatternFly logo"
|
|
192
|
-
backgroundImgSrc="/assets/images/
|
|
192
|
+
backgroundImgSrc="/assets/images/pf-background.svg"
|
|
193
193
|
footerListItems={listItem}
|
|
194
194
|
textContent="This is placeholder text only. Use this area to place any information or introductory message about your application that may be relevant to users."
|
|
195
195
|
loginTitle="Log in to your account"
|
|
@@ -117,7 +117,7 @@ export const LoginPageHideShowPassword: React.FunctionComponent = () => {
|
|
|
117
117
|
footerListVariants={ListVariant.inline}
|
|
118
118
|
brandImgSrc={brandImg}
|
|
119
119
|
brandImgAlt="PatternFly logo"
|
|
120
|
-
backgroundImgSrc="/assets/images/
|
|
120
|
+
backgroundImgSrc="/assets/images/pf-background.svg"
|
|
121
121
|
footerListItems={listItem}
|
|
122
122
|
textContent="This is placeholder text only. Use this area to place any information or introductory message about your application that may be relevant to users."
|
|
123
123
|
loginTitle="Log in to your account"
|
|
@@ -141,7 +141,12 @@ class NavExpandable extends Component<NavExpandableProps, NavExpandableState> {
|
|
|
141
141
|
</button>
|
|
142
142
|
)}
|
|
143
143
|
</PageSidebarContext.Consumer>
|
|
144
|
-
<section
|
|
144
|
+
<section
|
|
145
|
+
className={css(styles.navSubnav)}
|
|
146
|
+
aria-labelledby={this.id}
|
|
147
|
+
hidden={expandedState ? null : true}
|
|
148
|
+
{...(!expandedState && { inert: '' })}
|
|
149
|
+
>
|
|
145
150
|
{srText && (
|
|
146
151
|
<h2 className="pf-v6-screen-reader" id={this.id}>
|
|
147
152
|
{srText}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import '@testing-library/jest-dom';
|
|
3
|
+
import { NavExpandable } from '../NavExpandable';
|
|
4
|
+
|
|
5
|
+
test('Renders with the inert attribute by default', () => {
|
|
6
|
+
render(<NavExpandable id="grp-1" title="NavExpandable"></NavExpandable>);
|
|
7
|
+
|
|
8
|
+
expect(screen.getByLabelText('NavExpandable')).toHaveAttribute('inert', '');
|
|
9
|
+
});
|
|
10
|
+
|
|
11
|
+
test('Does not render with the inert attribute when isExpanded is true', () => {
|
|
12
|
+
render(<NavExpandable id="grp-1" title="NavExpandable" isExpanded={true}></NavExpandable>);
|
|
13
|
+
|
|
14
|
+
expect(screen.getByLabelText('NavExpandable')).not.toHaveAttribute('inert', '');
|
|
15
|
+
});
|
|
@@ -223,6 +223,7 @@ exports[`Nav Expandable Nav List - Trigger toggle 1`] = `
|
|
|
223
223
|
aria-labelledby="grp-1"
|
|
224
224
|
class="pf-v6-c-nav__subnav"
|
|
225
225
|
hidden=""
|
|
226
|
+
inert=""
|
|
226
227
|
>
|
|
227
228
|
<ul
|
|
228
229
|
class="pf-v6-c-nav__list"
|
|
@@ -355,6 +356,7 @@ exports[`Nav Expandable Nav List 1`] = `
|
|
|
355
356
|
aria-labelledby="grp-1"
|
|
356
357
|
class="pf-v6-c-nav__subnav"
|
|
357
358
|
hidden=""
|
|
359
|
+
inert=""
|
|
358
360
|
>
|
|
359
361
|
<ul
|
|
360
362
|
class="pf-v6-c-nav__list"
|
|
@@ -486,6 +488,7 @@ exports[`Nav Expandable Nav List with aria label 1`] = `
|
|
|
486
488
|
aria-labelledby="grp-1"
|
|
487
489
|
class="pf-v6-c-nav__subnav"
|
|
488
490
|
hidden=""
|
|
491
|
+
inert=""
|
|
489
492
|
>
|
|
490
493
|
<h2
|
|
491
494
|
class="pf-v6-screen-reader"
|
|
@@ -8,7 +8,7 @@ propComponents:
|
|
|
8
8
|
|
|
9
9
|
import { useState } from 'react';
|
|
10
10
|
import BarsIcon from '@patternfly/react-icons/dist/js/icons/bars-icon';
|
|
11
|
-
import
|
|
11
|
+
import pageSectionWidthLimitMaxWidth from '@patternfly/react-tokens/dist/esm/c_page_section_m_limit_width_MaxWidth';
|
|
12
12
|
|
|
13
13
|
## Examples
|
|
14
14
|
|
|
@@ -18,8 +18,7 @@ import {
|
|
|
18
18
|
CardBody
|
|
19
19
|
} from '@patternfly/react-core';
|
|
20
20
|
import BarsIcon from '@patternfly/react-icons/dist/esm/icons/bars-icon';
|
|
21
|
-
|
|
22
|
-
import c_page_section_m_limit_width_MaxWidth from '@patternfly/react-tokens/dist/esm/c_page_section_m_limit_width_MaxWidth';
|
|
21
|
+
import pageSectionWidthLimitMaxWidth from '@patternfly/react-tokens/dist/esm/c_page_section_m_limit_width_MaxWidth';
|
|
23
22
|
|
|
24
23
|
export const PageCenteredSection: React.FunctionComponent = () => {
|
|
25
24
|
const [isSidebarOpen, setIsSidebarOpen] = useState(true);
|
|
@@ -68,11 +67,11 @@ export const PageCenteredSection: React.FunctionComponent = () => {
|
|
|
68
67
|
|
|
69
68
|
return (
|
|
70
69
|
<Page masthead={masthead} sidebar={sidebar}>
|
|
71
|
-
<PageSection isWidthLimited isCenterAligned>
|
|
70
|
+
<PageSection isWidthLimited isCenterAligned aria-label="width limited page section">
|
|
72
71
|
<Card>
|
|
73
72
|
<CardBody>
|
|
74
73
|
When a width limited page section is wider than the value of
|
|
75
|
-
<code>{
|
|
74
|
+
<code>{pageSectionWidthLimitMaxWidth.name}</code>, the section will be centered in the main section.
|
|
76
75
|
<br />
|
|
77
76
|
<br />
|
|
78
77
|
The content in this example is placed in a card to better illustrate how the section behaves when it is
|
|
@@ -101,10 +101,16 @@ export const PageGroupSection: React.FunctionComponent = () => {
|
|
|
101
101
|
</BreadcrumbItem>
|
|
102
102
|
</Breadcrumb>
|
|
103
103
|
</PageBreadcrumb>
|
|
104
|
-
<PageSection
|
|
104
|
+
<PageSection aria-labelledby="grouped-section">
|
|
105
|
+
<h2 id="grouped-section">Grouped section</h2>
|
|
106
|
+
</PageSection>
|
|
105
107
|
</PageGroup>
|
|
106
|
-
<PageSection
|
|
107
|
-
|
|
108
|
+
<PageSection aria-labelledby="section-1">
|
|
109
|
+
<h2 id="section-1">Grouped example section 1</h2>
|
|
110
|
+
</PageSection>
|
|
111
|
+
<PageSection aria-labelledby="section-2">
|
|
112
|
+
<h2 id="section-2">Grouped example section 2</h2>
|
|
113
|
+
</PageSection>
|
|
108
114
|
</Page>
|
|
109
115
|
);
|
|
110
116
|
};
|
|
@@ -36,9 +36,15 @@ export const PageHorizontalNav: React.FunctionComponent = () => {
|
|
|
36
36
|
|
|
37
37
|
return (
|
|
38
38
|
<Page masthead={masthead}>
|
|
39
|
-
<PageSection
|
|
40
|
-
|
|
41
|
-
|
|
39
|
+
<PageSection aria-labelledby="section-1">
|
|
40
|
+
<h2 id="section-1">Horizontal nav example section 1</h2>
|
|
41
|
+
</PageSection>
|
|
42
|
+
<PageSection variant="secondary" aria-labelledby="section-2">
|
|
43
|
+
<h2 id="section-2">Horizontal nav example section 2 with secondary variant styling</h2>
|
|
44
|
+
</PageSection>
|
|
45
|
+
<PageSection aria-labelledby="section-3">
|
|
46
|
+
<h2 id="section-3">Horizontal nav example section 3</h2>
|
|
47
|
+
</PageSection>
|
|
42
48
|
</Page>
|
|
43
49
|
);
|
|
44
50
|
};
|
|
@@ -64,10 +64,18 @@ export const PageMainSectionPadding: React.FunctionComponent = () => {
|
|
|
64
64
|
|
|
65
65
|
return (
|
|
66
66
|
<Page masthead={masthead} sidebar={sidebar}>
|
|
67
|
-
<PageSection
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
<PageSection padding={{
|
|
67
|
+
<PageSection aria-labelledby="section-1">
|
|
68
|
+
<h2 id="section-1">Section with default padding</h2>
|
|
69
|
+
</PageSection>
|
|
70
|
+
<PageSection padding={{ default: 'noPadding' }} aria-labelledby="section-2">
|
|
71
|
+
<h2 id="section-2">Section with no padding</h2>
|
|
72
|
+
</PageSection>
|
|
73
|
+
<PageSection padding={{ default: 'noPadding', md: 'padding' }} aria-labelledby="section-3">
|
|
74
|
+
<h2 id="section-3">Section with padding on medium</h2>
|
|
75
|
+
</PageSection>
|
|
76
|
+
<PageSection padding={{ md: 'noPadding' }} aria-labelledby="section-4">
|
|
77
|
+
<h2 id="section-4">Section with no padding on medium</h2>
|
|
78
|
+
</PageSection>
|
|
71
79
|
</Page>
|
|
72
80
|
);
|
|
73
81
|
};
|
|
@@ -64,22 +64,22 @@ export const PageMainSectionPadding: React.FunctionComponent = () => {
|
|
|
64
64
|
|
|
65
65
|
return (
|
|
66
66
|
<Page header={header} sidebar={sidebar}>
|
|
67
|
-
<PageSection type="subnav">
|
|
67
|
+
<PageSection type="subnav" aria-label="With subnav type">
|
|
68
68
|
Section with <code>type="subnav"</code> for horizontal subnav navigation
|
|
69
69
|
</PageSection>
|
|
70
|
-
<PageSection type="nav">
|
|
70
|
+
<PageSection type="nav" aria-label="With nav type">
|
|
71
71
|
Section with <code>type="nav"</code> for tertiary navigation
|
|
72
72
|
</PageSection>
|
|
73
|
-
<PageSection type="tabs">
|
|
73
|
+
<PageSection type="tabs" aria-label="With tabs type">
|
|
74
74
|
Section with <code>type="tabs"</code> for tabs
|
|
75
75
|
</PageSection>
|
|
76
|
-
<PageSection type="breadcrumb">
|
|
76
|
+
<PageSection type="breadcrumb" aria-label="With breadcrumb type">
|
|
77
77
|
Section with <code>type="breadcrumb"</code> for breadcrumbs
|
|
78
78
|
</PageSection>
|
|
79
|
-
<PageSection>
|
|
79
|
+
<PageSection aria-label="With default type">
|
|
80
80
|
Section without <code>type</code> prop or <code>type="default"</code> for main sections
|
|
81
81
|
</PageSection>
|
|
82
|
-
<PageSection type="wizard">
|
|
82
|
+
<PageSection type="wizard" aria-label="With wizard type">
|
|
83
83
|
Section with <code>type="wizard"</code> for wizards
|
|
84
84
|
</PageSection>
|
|
85
85
|
</Page>
|
|
@@ -71,9 +71,15 @@ export const PageMultipleSidebarBody: React.FunctionComponent = () => {
|
|
|
71
71
|
|
|
72
72
|
return (
|
|
73
73
|
<Page masthead={masthead} sidebar={sidebar}>
|
|
74
|
-
<PageSection
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
<PageSection aria-labelledby="section-1">
|
|
75
|
+
<h2 id="section-1">Multiple sidebar body example section 1</h2>
|
|
76
|
+
</PageSection>
|
|
77
|
+
<PageSection aria-labelledby="section-2">
|
|
78
|
+
<h2 id="section-2">Multiple sidebar body example section 2</h2>
|
|
79
|
+
</PageSection>
|
|
80
|
+
<PageSection aria-labelledby="section-3">
|
|
81
|
+
<h2 id="section-3">Multiple sidebar body example section 3</h2>
|
|
82
|
+
</PageSection>
|
|
77
83
|
</Page>
|
|
78
84
|
);
|
|
79
85
|
};
|
|
@@ -51,9 +51,15 @@ export const PageUncontrolledNav: React.FunctionComponent = () => {
|
|
|
51
51
|
|
|
52
52
|
return (
|
|
53
53
|
<Page isManagedSidebar masthead={masthead} sidebar={sidebar}>
|
|
54
|
-
<PageSection
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
<PageSection aria-labelledby="section-1">
|
|
55
|
+
<h2 id="section-1">Uncontrolled nav example section 1</h2>
|
|
56
|
+
</PageSection>
|
|
57
|
+
<PageSection aria-labelledby="section-2">
|
|
58
|
+
<h2 id="section-2">Uncontrolled nav example section 2</h2>
|
|
59
|
+
</PageSection>
|
|
60
|
+
<PageSection aria-labelledby="section-3">
|
|
61
|
+
<h2 id="section-3">Uncontrolled nav example section 3</h2>
|
|
62
|
+
</PageSection>
|
|
57
63
|
</Page>
|
|
58
64
|
);
|
|
59
65
|
};
|