@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
package/helpers/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.3.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.3.0-prerelease.19","private":true}
|
package/layouts/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.3.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.3.0-prerelease.19","private":true}
|
package/next/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.3.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.3.0-prerelease.19","private":true}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "6.3.0-prerelease.
|
|
3
|
+
"version": "6.3.0-prerelease.20",
|
|
4
4
|
"description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
|
|
5
5
|
"main": "dist/js/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -46,15 +46,15 @@
|
|
|
46
46
|
"subpaths": "node ../../scripts/exportSubpaths.mjs --config subpaths.config.json"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@patternfly/react-icons": "^6.3.0-prerelease.
|
|
50
|
-
"@patternfly/react-styles": "^6.3.0-prerelease.
|
|
51
|
-
"@patternfly/react-tokens": "^6.3.0-prerelease.
|
|
49
|
+
"@patternfly/react-icons": "^6.3.0-prerelease.5",
|
|
50
|
+
"@patternfly/react-styles": "^6.3.0-prerelease.5",
|
|
51
|
+
"@patternfly/react-tokens": "^6.3.0-prerelease.5",
|
|
52
52
|
"focus-trap": "7.6.4",
|
|
53
53
|
"react-dropzone": "^14.3.5",
|
|
54
54
|
"tslib": "^2.8.1"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@patternfly/patternfly": "6.3.0-prerelease.
|
|
57
|
+
"@patternfly/patternfly": "6.3.0-prerelease.26",
|
|
58
58
|
"case-anything": "^3.1.2",
|
|
59
59
|
"css": "^3.0.0",
|
|
60
60
|
"fs-extra": "^11.3.0"
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"react": "^17 || ^18 || ^19",
|
|
64
64
|
"react-dom": "^17 || ^18 || ^19"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "9e7c8ba6afb5ad01cbac427089f8f9032e523628"
|
|
67
67
|
}
|
|
@@ -4,6 +4,8 @@ import { css } from '@patternfly/react-styles';
|
|
|
4
4
|
import { Spinner, spinnerSize } from '../Spinner';
|
|
5
5
|
import { useOUIAProps, OUIAProps } from '../../helpers/OUIA/ouia';
|
|
6
6
|
import { Badge } from '../Badge';
|
|
7
|
+
import StarIcon from '@patternfly/react-icons/dist/esm/icons/star-icon';
|
|
8
|
+
import OutlinedStarIcon from '@patternfly/react-icons/dist/esm/icons/outlined-star-icon';
|
|
7
9
|
|
|
8
10
|
export enum ButtonVariant {
|
|
9
11
|
primary = 'primary',
|
|
@@ -71,6 +73,10 @@ export interface ButtonProps extends Omit<React.HTMLProps<HTMLButtonElement>, 'r
|
|
|
71
73
|
inoperableEvents?: string[];
|
|
72
74
|
/** Adds inline styling to a link button */
|
|
73
75
|
isInline?: boolean;
|
|
76
|
+
/** Adds favorite styling to a button */
|
|
77
|
+
isFavorite?: boolean;
|
|
78
|
+
/** Flag indicating whether the button is favorited or not, only when isFavorite is true. */
|
|
79
|
+
isFavorited?: boolean;
|
|
74
80
|
/** Adds styling which affects the size of the button */
|
|
75
81
|
size?: 'default' | 'sm' | 'lg';
|
|
76
82
|
/** Sets button type */
|
|
@@ -117,6 +123,8 @@ const ButtonBase: React.FunctionComponent<ButtonProps> = ({
|
|
|
117
123
|
size = ButtonSize.default,
|
|
118
124
|
inoperableEvents = ['onClick', 'onKeyPress'],
|
|
119
125
|
isInline = false,
|
|
126
|
+
isFavorite = false,
|
|
127
|
+
isFavorited = false,
|
|
120
128
|
type = ButtonType.button,
|
|
121
129
|
variant = ButtonVariant.primary,
|
|
122
130
|
state = ButtonState.unread,
|
|
@@ -132,11 +140,19 @@ const ButtonBase: React.FunctionComponent<ButtonProps> = ({
|
|
|
132
140
|
countOptions,
|
|
133
141
|
...props
|
|
134
142
|
}: ButtonProps) => {
|
|
143
|
+
if (isFavorite && !ariaLabel && !props['aria-labelledby']) {
|
|
144
|
+
// eslint-disable-next-line no-console
|
|
145
|
+
console.error(
|
|
146
|
+
'Button: Each favorite button must have a unique accessible name provided via aria-label or aria-labelledby'
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
|
|
135
150
|
const ouiaProps = useOUIAProps(Button.displayName, ouiaId, ouiaSafe, variant);
|
|
136
151
|
const Component = component as any;
|
|
137
152
|
const isButtonElement = Component === 'button';
|
|
138
153
|
const isInlineSpan = isInline && Component === 'span';
|
|
139
154
|
const isIconAlignedAtEnd = iconPosition === 'end' || iconPosition === 'right';
|
|
155
|
+
const shouldOverrideIcon = isFavorite;
|
|
140
156
|
|
|
141
157
|
const preventedEvents = inoperableEvents.reduce(
|
|
142
158
|
(handlers, eventToPrevent) => ({
|
|
@@ -158,11 +174,36 @@ const ButtonBase: React.FunctionComponent<ButtonProps> = ({
|
|
|
158
174
|
}
|
|
159
175
|
};
|
|
160
176
|
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
177
|
+
const renderIcon = () => {
|
|
178
|
+
let iconContent;
|
|
179
|
+
|
|
180
|
+
if (isFavorite) {
|
|
181
|
+
iconContent = (
|
|
182
|
+
<>
|
|
183
|
+
<span className={css('pf-v6-c-button__icon-favorite')}>
|
|
184
|
+
<OutlinedStarIcon />
|
|
185
|
+
</span>
|
|
186
|
+
<span className={css('pf-v6-c-button__icon-favorited')}>
|
|
187
|
+
<StarIcon />
|
|
188
|
+
</span>
|
|
189
|
+
</>
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
if (icon && !shouldOverrideIcon) {
|
|
194
|
+
iconContent = icon;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
return (
|
|
198
|
+
iconContent && (
|
|
199
|
+
<span className={css(styles.buttonIcon, children && styles.modifiers[isIconAlignedAtEnd ? 'end' : 'start'])}>
|
|
200
|
+
{iconContent}
|
|
201
|
+
</span>
|
|
202
|
+
)
|
|
203
|
+
);
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
const _icon = renderIcon();
|
|
166
207
|
const _children = children && <span className={css('pf-v6-c-button__text')}>{children}</span>;
|
|
167
208
|
// We only want to render the aria-disabled attribute when true, similar to the disabled attribute natively.
|
|
168
209
|
const shouldRenderAriaDisabled = isAriaDisabled || (!isButtonElement && isDisabled);
|
|
@@ -181,6 +222,8 @@ const ButtonBase: React.FunctionComponent<ButtonProps> = ({
|
|
|
181
222
|
isAriaDisabled && styles.modifiers.ariaDisabled,
|
|
182
223
|
isClicked && styles.modifiers.clicked,
|
|
183
224
|
isInline && variant === ButtonVariant.link && styles.modifiers.inline,
|
|
225
|
+
isFavorite && styles.modifiers.favorite,
|
|
226
|
+
isFavorite && isFavorited && styles.modifiers.favorited,
|
|
184
227
|
isDanger && (variant === ButtonVariant.secondary || variant === ButtonVariant.link) && styles.modifiers.danger,
|
|
185
228
|
isLoading !== null && variant !== ButtonVariant.plain && styles.modifiers.progress,
|
|
186
229
|
isLoading && styles.modifiers.inProgress,
|
|
@@ -248,3 +248,28 @@ test(`Renders basic button`, () => {
|
|
|
248
248
|
const { asFragment } = render(<Button aria-label="basic button">Basic Button</Button>);
|
|
249
249
|
expect(asFragment()).toMatchSnapshot();
|
|
250
250
|
});
|
|
251
|
+
|
|
252
|
+
test(`Renders with class ${styles.modifiers.favorite} when isFavorite is true`, () => {
|
|
253
|
+
render(<Button isFavorite />);
|
|
254
|
+
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.favorite);
|
|
255
|
+
});
|
|
256
|
+
|
|
257
|
+
test(`Renders with class ${styles.modifiers.favorited} when isFavorite is true and isFavorited is true`, () => {
|
|
258
|
+
render(<Button isFavorite isFavorited />);
|
|
259
|
+
expect(screen.getByRole('button')).toHaveClass(styles.modifiers.favorited);
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
test(`Does not render with class ${styles.modifiers.favorite} when isFavorite is false`, () => {
|
|
263
|
+
render(<Button />);
|
|
264
|
+
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.favorite);
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
test(`Does not render with class ${styles.modifiers.favorited} when isFavorite is true and isFavorited is false`, () => {
|
|
268
|
+
render(<Button isFavorite />);
|
|
269
|
+
expect(screen.getByRole('button')).not.toHaveClass(styles.modifiers.favorited);
|
|
270
|
+
});
|
|
271
|
+
|
|
272
|
+
test('Overrides icon prop when isFavorite is true', () => {
|
|
273
|
+
render(<Button isFavorite icon={<div>Icon content</div>} />);
|
|
274
|
+
expect(screen.queryByText('Icon content')).not.toBeInTheDocument();
|
|
275
|
+
});
|
|
@@ -125,6 +125,13 @@ Stateful buttons are ideal for displaying the state of notifications. Use `varia
|
|
|
125
125
|
```ts file="./ButtonStateful.tsx"
|
|
126
126
|
```
|
|
127
127
|
|
|
128
|
+
### Favorite
|
|
129
|
+
|
|
130
|
+
You can pass both the `isFavorite` and `variant="plain"` properties into the `<Button>` to create a favorite button. Passing the `isFavorited` property will determine the current favorited state and update styling accordingly.
|
|
131
|
+
|
|
132
|
+
```ts file = "./ButtonFavorite.tsx"
|
|
133
|
+
```
|
|
134
|
+
|
|
128
135
|
## Using router links
|
|
129
136
|
|
|
130
137
|
Router links can be used for in-app linking in React environments to prevent page reloading. To use a `Link` component from a router package, you can follow our [custom component example](#custom-component) and pass a callback to the `component` property of the `Button`:
|
|
@@ -133,4 +140,4 @@ Router links can be used for in-app linking in React environments to prevent pag
|
|
|
133
140
|
<Button variant="link" component={(props: any) => <Link {...props} to="#" />}>
|
|
134
141
|
Router link
|
|
135
142
|
</Button>
|
|
136
|
-
```
|
|
143
|
+
```
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useState } from 'react';
|
|
2
|
+
import { Button } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const ButtonFavorite: React.FunctionComponent = () => {
|
|
5
|
+
const [isFavorited, setIsFavorited] = useState(false);
|
|
6
|
+
const toggleFavorite = () => {
|
|
7
|
+
setIsFavorited(!isFavorited);
|
|
8
|
+
};
|
|
9
|
+
return (
|
|
10
|
+
<Button
|
|
11
|
+
variant="plain"
|
|
12
|
+
aria-label={isFavorited ? 'Favorite example favorited' : 'Favorite example not favorited'}
|
|
13
|
+
isFavorite
|
|
14
|
+
isFavorited={isFavorited}
|
|
15
|
+
onClick={toggleFavorite}
|
|
16
|
+
/>
|
|
17
|
+
);
|
|
18
|
+
};
|
|
@@ -131,7 +131,7 @@ You must avoid rendering any other interactive content within the `<Card>` when
|
|
|
131
131
|
|
|
132
132
|
### Single selectable
|
|
133
133
|
|
|
134
|
-
When a group of single selectable cards are related, you must pass the same `name` property to each card's `selectableActions` property.
|
|
134
|
+
When a group of single selectable cards are related, you must pass the same `name` property to each card's `selectableActions` property. For more guidance on selectable cards with hidden input, see our [cards as tiles examples](#cards-as-tiles).
|
|
135
135
|
|
|
136
136
|
```ts file='./CardSingleSelectable.tsx'
|
|
137
137
|
|
|
@@ -5,7 +5,8 @@ export const SelectableCard: React.FunctionComponent = () => {
|
|
|
5
5
|
const [isChecked1, setIsChecked1] = useState(false);
|
|
6
6
|
const [isChecked2, setIsChecked2] = useState(false);
|
|
7
7
|
const [isChecked3, setIsChecked3] = useState(false);
|
|
8
|
-
const [isSecondary, setIsSecondary] = useState
|
|
8
|
+
const [isSecondary, setIsSecondary] = useState(false);
|
|
9
|
+
const [displayCheckbox, setDisplayCheckbox] = useState(false);
|
|
9
10
|
|
|
10
11
|
const id1 = 'selectable-card-input-1';
|
|
11
12
|
const id2 = 'selectable-card-input-2';
|
|
@@ -31,6 +32,10 @@ export const SelectableCard: React.FunctionComponent = () => {
|
|
|
31
32
|
setIsSecondary(checked);
|
|
32
33
|
};
|
|
33
34
|
|
|
35
|
+
const toggleHide = (checked: boolean) => {
|
|
36
|
+
setDisplayCheckbox(checked);
|
|
37
|
+
};
|
|
38
|
+
|
|
34
39
|
return (
|
|
35
40
|
<>
|
|
36
41
|
<Checkbox
|
|
@@ -40,68 +45,76 @@ export const SelectableCard: React.FunctionComponent = () => {
|
|
|
40
45
|
id="toggle-variant-selectable"
|
|
41
46
|
name="toggle-variant"
|
|
42
47
|
/>
|
|
43
|
-
<
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
48
|
+
<Checkbox
|
|
49
|
+
label="Hide checkbox"
|
|
50
|
+
isChecked={displayCheckbox}
|
|
51
|
+
onChange={(_event, checked) => toggleHide(checked)}
|
|
52
|
+
id="selectable-toggle-hide-checkbox"
|
|
53
|
+
name="toggle-hide"
|
|
54
|
+
/>
|
|
55
|
+
<Gallery hasGutter style={{ marginTop: '15px' }}>
|
|
56
|
+
<Card
|
|
57
|
+
id="selectable-card-example-1"
|
|
58
|
+
isSelectable
|
|
59
|
+
isSelected={isChecked1}
|
|
60
|
+
variant={isSecondary ? 'secondary' : 'default'}
|
|
61
|
+
>
|
|
62
|
+
<CardHeader
|
|
63
|
+
selectableActions={{
|
|
64
|
+
selectableActionId: id1,
|
|
65
|
+
selectableActionAriaLabelledby: 'selectable-card-example-1',
|
|
66
|
+
name: id1,
|
|
67
|
+
onChange,
|
|
68
|
+
hasNoOffset: true,
|
|
69
|
+
isHidden: displayCheckbox
|
|
70
|
+
}}
|
|
50
71
|
>
|
|
51
|
-
<
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
72
|
+
<CardTitle>First card</CardTitle>
|
|
73
|
+
</CardHeader>
|
|
74
|
+
<CardBody>This card is selectable.</CardBody>
|
|
75
|
+
</Card>
|
|
76
|
+
<Card
|
|
77
|
+
id="selectable-card-example-2"
|
|
78
|
+
isSelectable
|
|
79
|
+
isSelected={isChecked2}
|
|
80
|
+
variant={isSecondary ? 'secondary' : 'default'}
|
|
81
|
+
>
|
|
82
|
+
<CardHeader
|
|
83
|
+
selectableActions={{
|
|
84
|
+
selectableActionId: id2,
|
|
85
|
+
selectableActionAriaLabelledby: 'selectable-card-example-2',
|
|
86
|
+
name: id2,
|
|
87
|
+
onChange,
|
|
88
|
+
hasNoOffset: true,
|
|
89
|
+
isHidden: displayCheckbox
|
|
90
|
+
}}
|
|
69
91
|
>
|
|
70
|
-
<
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
92
|
+
<CardTitle>Second card</CardTitle>
|
|
93
|
+
</CardHeader>
|
|
94
|
+
<CardBody>This card is selectable.</CardBody>
|
|
95
|
+
</Card>
|
|
96
|
+
<Card
|
|
97
|
+
id="selectable-card-example-3"
|
|
98
|
+
isSelectable
|
|
99
|
+
isDisabled
|
|
100
|
+
isSelected={isChecked3}
|
|
101
|
+
variant={isSecondary ? 'secondary' : 'default'}
|
|
102
|
+
>
|
|
103
|
+
<CardHeader
|
|
104
|
+
selectableActions={{
|
|
105
|
+
selectableActionId: id3,
|
|
106
|
+
selectableActionAriaLabelledby: 'selectable-card-example-3',
|
|
107
|
+
name: id3,
|
|
108
|
+
onChange,
|
|
109
|
+
hasNoOffset: true,
|
|
110
|
+
isHidden: displayCheckbox
|
|
111
|
+
}}
|
|
89
112
|
>
|
|
90
|
-
<
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
onChange,
|
|
96
|
-
hasNoOffset: true
|
|
97
|
-
}}
|
|
98
|
-
>
|
|
99
|
-
<CardTitle>Third card</CardTitle>
|
|
100
|
-
</CardHeader>
|
|
101
|
-
<CardBody>This card is selectable but disabled.</CardBody>
|
|
102
|
-
</Card>
|
|
103
|
-
</Gallery>
|
|
104
|
-
</div>
|
|
113
|
+
<CardTitle>Third card</CardTitle>
|
|
114
|
+
</CardHeader>
|
|
115
|
+
<CardBody>This card is selectable but disabled.</CardBody>
|
|
116
|
+
</Card>
|
|
117
|
+
</Gallery>
|
|
105
118
|
</>
|
|
106
119
|
);
|
|
107
120
|
};
|
|
@@ -1,63 +1,80 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
|
-
import { Card, CardHeader, CardTitle, CardBody, Gallery } from '@patternfly/react-core';
|
|
2
|
+
import { Card, CardHeader, CardTitle, CardBody, Gallery, Checkbox } from '@patternfly/react-core';
|
|
3
3
|
|
|
4
4
|
export const SingleSelectableCard: React.FunctionComponent = () => {
|
|
5
5
|
const [isChecked, setIsChecked] = useState('');
|
|
6
6
|
const id1 = 'single-selectable-card-input-1';
|
|
7
7
|
const id2 = 'single-selectable-card-input-2';
|
|
8
8
|
const id3 = 'single-selectable-card-input-3';
|
|
9
|
+
const [displayRadioButton, setDisplayRadioButton] = useState(false);
|
|
9
10
|
|
|
10
11
|
const onChange = (event: React.FormEvent<HTMLInputElement>) => {
|
|
11
12
|
setIsChecked(event.currentTarget.id);
|
|
12
13
|
};
|
|
13
14
|
|
|
15
|
+
const toggleHide = (checked: boolean) => {
|
|
16
|
+
setDisplayRadioButton(checked);
|
|
17
|
+
};
|
|
18
|
+
|
|
14
19
|
return (
|
|
15
|
-
|
|
16
|
-
<
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
>
|
|
57
|
-
<
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
20
|
+
<>
|
|
21
|
+
<Checkbox
|
|
22
|
+
label="Hide radio button"
|
|
23
|
+
isChecked={displayRadioButton}
|
|
24
|
+
onChange={(_event, checked) => toggleHide(checked)}
|
|
25
|
+
id="single-select-toggle-hide-radio-button"
|
|
26
|
+
name="toggle-hide"
|
|
27
|
+
/>
|
|
28
|
+
<Gallery hasGutter style={{ marginTop: '15px' }}>
|
|
29
|
+
<Card id="single-selectable-card-example-1" isSelectable isSelected={isChecked === id1}>
|
|
30
|
+
<CardHeader
|
|
31
|
+
selectableActions={{
|
|
32
|
+
selectableActionId: id1,
|
|
33
|
+
selectableActionAriaLabelledby: 'single-selectable-card-example-1',
|
|
34
|
+
name: 'single-selectable-card-example',
|
|
35
|
+
variant: 'single',
|
|
36
|
+
onChange,
|
|
37
|
+
hasNoOffset: true,
|
|
38
|
+
isHidden: displayRadioButton
|
|
39
|
+
}}
|
|
40
|
+
>
|
|
41
|
+
<CardTitle>First card</CardTitle>
|
|
42
|
+
</CardHeader>
|
|
43
|
+
<CardBody>This card is single selectable.</CardBody>
|
|
44
|
+
</Card>
|
|
45
|
+
<Card id="single-selectable-card-example-2" isSelectable isSelected={isChecked === id2}>
|
|
46
|
+
<CardHeader
|
|
47
|
+
selectableActions={{
|
|
48
|
+
selectableActionId: id2,
|
|
49
|
+
selectableActionAriaLabelledby: 'single-selectable-card-example-2',
|
|
50
|
+
name: 'single-selectable-card-example',
|
|
51
|
+
variant: 'single',
|
|
52
|
+
onChange,
|
|
53
|
+
hasNoOffset: true,
|
|
54
|
+
isHidden: displayRadioButton
|
|
55
|
+
}}
|
|
56
|
+
>
|
|
57
|
+
<CardTitle>Second card</CardTitle>
|
|
58
|
+
</CardHeader>
|
|
59
|
+
<CardBody>This card is single selectable.</CardBody>
|
|
60
|
+
</Card>
|
|
61
|
+
<Card id="single-selectable-card-example-3" isSelectable isDisabled isSelected={isChecked === id3}>
|
|
62
|
+
<CardHeader
|
|
63
|
+
selectableActions={{
|
|
64
|
+
selectableActionId: id3,
|
|
65
|
+
selectableActionAriaLabelledby: 'single-selectable-card-example-3',
|
|
66
|
+
name: 'single-selectable-card-example',
|
|
67
|
+
variant: 'single',
|
|
68
|
+
onChange,
|
|
69
|
+
hasNoOffset: true,
|
|
70
|
+
isHidden: displayRadioButton
|
|
71
|
+
}}
|
|
72
|
+
>
|
|
73
|
+
<CardTitle>Third card</CardTitle>
|
|
74
|
+
</CardHeader>
|
|
75
|
+
<CardBody>This card is single selectable but disabled.</CardBody>
|
|
76
|
+
</Card>
|
|
77
|
+
</Gallery>
|
|
78
|
+
</>
|
|
62
79
|
);
|
|
63
80
|
};
|
|
@@ -204,7 +204,7 @@ class ClipboardCopy extends Component<ClipboardCopyProps, ClipboardCopyState> {
|
|
|
204
204
|
const shouldTruncate = variant === ClipboardCopyVariant.inlineCompact && truncation;
|
|
205
205
|
const inlineCompactContent = shouldTruncate ? (
|
|
206
206
|
<Truncate
|
|
207
|
-
|
|
207
|
+
tooltipProps={{ triggerRef: this.clipboardRef }}
|
|
208
208
|
content={copyableText}
|
|
209
209
|
{...(typeof truncation === 'object' && truncation)}
|
|
210
210
|
/>
|
|
@@ -223,6 +223,7 @@ class ClipboardCopy extends Component<ClipboardCopyProps, ClipboardCopyState> {
|
|
|
223
223
|
className
|
|
224
224
|
)}
|
|
225
225
|
ref={this.clipboardRef}
|
|
226
|
+
{...(shouldTruncate && { tabIndex: 0 })}
|
|
226
227
|
{...divProps}
|
|
227
228
|
{...getOUIAProps(ClipboardCopy.displayName, ouiaId, ouiaSafe)}
|
|
228
229
|
>
|
|
@@ -17,13 +17,19 @@ export interface DualListSelectorProps {
|
|
|
17
17
|
isTree?: boolean;
|
|
18
18
|
/** Content to be rendered in the dual list selector. */
|
|
19
19
|
children?: React.ReactNode;
|
|
20
|
+
/** Flag indicating whether a tree dual list selector has animations. This will always render
|
|
21
|
+
* nested dual list selector items rather than dynamically rendering them. This prop will be removed in
|
|
22
|
+
* the next breaking change release in favor of defaulting to always-rendered items.
|
|
23
|
+
*/
|
|
24
|
+
hasAnimations?: boolean;
|
|
20
25
|
}
|
|
21
26
|
|
|
22
27
|
class DualListSelector extends Component<DualListSelectorProps> {
|
|
23
28
|
static displayName = 'DualListSelector';
|
|
24
29
|
static defaultProps: PickOptional<DualListSelectorProps> = {
|
|
25
30
|
children: '',
|
|
26
|
-
isTree: false
|
|
31
|
+
isTree: false,
|
|
32
|
+
hasAnimations: false
|
|
27
33
|
};
|
|
28
34
|
|
|
29
35
|
constructor(props: DualListSelectorProps) {
|
|
@@ -31,13 +37,21 @@ class DualListSelector extends Component<DualListSelectorProps> {
|
|
|
31
37
|
}
|
|
32
38
|
|
|
33
39
|
render() {
|
|
34
|
-
const { className, children, id, isTree, ...props } = this.props;
|
|
40
|
+
const { className, children, id, isTree, hasAnimations, ...props } = this.props;
|
|
35
41
|
|
|
36
42
|
return (
|
|
37
|
-
<DualListSelectorContext.Provider value={{ isTree }}>
|
|
43
|
+
<DualListSelectorContext.Provider value={{ isTree, hasAnimations }}>
|
|
38
44
|
<GenerateId>
|
|
39
45
|
{(randomId) => (
|
|
40
|
-
<div
|
|
46
|
+
<div
|
|
47
|
+
className={css(
|
|
48
|
+
styles.dualListSelector,
|
|
49
|
+
hasAnimations && isTree && styles.modifiers.animateExpand,
|
|
50
|
+
className
|
|
51
|
+
)}
|
|
52
|
+
id={id || randomId}
|
|
53
|
+
{...props}
|
|
54
|
+
>
|
|
41
55
|
{children}
|
|
42
56
|
</div>
|
|
43
57
|
)}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { createContext } from 'react';
|
|
2
2
|
export const DualListSelectorContext = createContext<{
|
|
3
3
|
isTree?: boolean;
|
|
4
|
-
|
|
4
|
+
hasAnimations?: boolean;
|
|
5
|
+
}>({ isTree: false, hasAnimations: false });
|
|
5
6
|
|
|
6
7
|
export const DualListSelectorListContext = createContext<{
|
|
7
8
|
setFocusedOption?: (id: string) => void;
|
|
@@ -56,14 +56,17 @@ export const DualListSelectorListWrapperBase: React.FunctionComponent<DualListSe
|
|
|
56
56
|
}
|
|
57
57
|
event.stopImmediatePropagation();
|
|
58
58
|
const validOptions = isTree
|
|
59
|
-
? (
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
59
|
+
? (
|
|
60
|
+
Array.from(
|
|
61
|
+
menuRef.current.querySelectorAll(
|
|
62
|
+
`.${styles.dualListSelectorItemToggle}, .${styles.dualListSelectorItemCheck} > input`
|
|
63
|
+
)
|
|
64
|
+
) as Element[]
|
|
65
|
+
).filter((item) => !item.closest(`.${styles.dualListSelectorList}[inert]`))
|
|
64
66
|
: (Array.from(menuRef.current.getElementsByTagName('LI')) as Element[]).filter(
|
|
65
67
|
(el) => !el.classList.contains('pf-m-disabled')
|
|
66
68
|
);
|
|
69
|
+
|
|
67
70
|
const activeElement = document.activeElement;
|
|
68
71
|
handleArrows(
|
|
69
72
|
event,
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import { useContext } from 'react';
|
|
1
2
|
import { css } from '@patternfly/react-styles';
|
|
2
3
|
import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
|
|
4
|
+
import { DualListSelectorContext } from './DualListSelectorContext';
|
|
3
5
|
import { DualListSelectorTreeItem } from './DualListSelectorTreeItem';
|
|
4
6
|
|
|
5
7
|
export interface DualListSelectorTreeItemData {
|
|
@@ -68,11 +70,13 @@ export const DualListSelectorTree: React.FunctionComponent<DualListSelectorTreeP
|
|
|
68
70
|
isDisabled = false,
|
|
69
71
|
...props
|
|
70
72
|
}: DualListSelectorTreeProps) => {
|
|
73
|
+
const { hasAnimations } = useContext(DualListSelectorContext);
|
|
71
74
|
const dataToRender = typeof data === 'function' ? data() : data;
|
|
72
75
|
const tree = dataToRender.map((item) => (
|
|
73
76
|
<DualListSelectorTreeItem
|
|
74
77
|
key={item.id}
|
|
75
78
|
text={item.text}
|
|
79
|
+
hasAnimations={hasAnimations}
|
|
76
80
|
id={item.id}
|
|
77
81
|
defaultExpanded={item.defaultExpanded !== undefined ? item.defaultExpanded : defaultAllExpanded}
|
|
78
82
|
onOptionCheck={onOptionCheck}
|