@patternfly/react-core 5.3.0-prerelease.1 → 5.3.0-prerelease.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +54 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/Chip/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/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/DragDrop/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/Text/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/Tile/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/ApplicationLauncher/package.json +1 -1
- package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
- package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
- package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
- package/dist/dynamic/deprecated/components/Select/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/favorites/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/next/components/DualListSelector/package.json +1 -0
- package/dist/dynamic/next/components/Modal/package.json +1 -1
- package/dist/dynamic/next/components/package.json +1 -1
- package/dist/dynamic/styles/package.json +1 -1
- package/dist/esm/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
- package/dist/esm/components/CalendarMonth/CalendarMonth.js +30 -12
- package/dist/esm/components/CalendarMonth/CalendarMonth.js.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts +5 -5
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyExpanded.d.ts +1 -0
- package/dist/esm/components/ClipboardCopy/ClipboardCopyExpanded.d.ts.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyExpanded.js.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.js +2 -2
- package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/Menu/Menu.d.ts.map +1 -1
- package/dist/esm/components/Menu/Menu.js +5 -1
- package/dist/esm/components/Menu/Menu.js.map +1 -1
- package/dist/esm/components/Menu/MenuContainer.js +2 -2
- package/dist/esm/components/Menu/MenuContainer.js.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggle.js +1 -1
- package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
- package/dist/esm/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
- package/dist/esm/components/Pagination/PaginationOptionsMenu.js +2 -4
- package/dist/esm/components/Pagination/PaginationOptionsMenu.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/Select/Select.d.ts +6 -0
- package/dist/esm/components/Select/Select.d.ts.map +1 -1
- package/dist/esm/components/Select/Select.js +5 -5
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/TextInputGroup/TextInputGroupMain.d.ts +2 -0
- package/dist/esm/components/TextInputGroup/TextInputGroupMain.d.ts.map +1 -1
- package/dist/esm/components/TextInputGroup/TextInputGroupMain.js +3 -3
- package/dist/esm/components/TextInputGroup/TextInputGroupMain.js.map +1 -1
- package/dist/esm/helpers/Popper/Popper.js +2 -2
- package/dist/esm/helpers/Popper/Popper.js.map +1 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/next/components/DualListSelector/DualListSelector.d.ts +23 -0
- package/dist/esm/next/components/DualListSelector/DualListSelector.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelector.js +23 -0
- package/dist/esm/next/components/DualListSelector/DualListSelector.js.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorContext.d.ts +19 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorContext.js +5 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorContext.js.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorControl.d.ts +25 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorControl.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorControl.js +18 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorControl.js.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts +15 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.js +35 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.js.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorList.d.ts +8 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorList.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorList.js +26 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorList.js.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.d.ts +29 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.js +38 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.js.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.d.ts +24 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.js +59 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorPane.d.ts +31 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorPane.js +27 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorPane.js.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorTree.d.ts +48 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorTree.js +15 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorTree.js.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.d.ts +32 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.js +75 -0
- package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -0
- package/dist/esm/next/components/DualListSelector/index.d.ts +8 -0
- package/dist/esm/next/components/DualListSelector/index.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/index.js +8 -0
- package/dist/esm/next/components/DualListSelector/index.js.map +1 -0
- package/dist/esm/next/components/DualListSelector/treeUtils.d.ts +8 -0
- package/dist/esm/next/components/DualListSelector/treeUtils.d.ts.map +1 -0
- package/dist/esm/next/components/DualListSelector/treeUtils.js +68 -0
- package/dist/esm/next/components/DualListSelector/treeUtils.js.map +1 -0
- package/dist/esm/next/components/index.d.ts +1 -0
- package/dist/esm/next/components/index.d.ts.map +1 -1
- package/dist/esm/next/components/index.js +1 -0
- package/dist/esm/next/components/index.js.map +1 -1
- package/dist/js/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
- package/dist/js/components/CalendarMonth/CalendarMonth.js +30 -12
- package/dist/js/components/CalendarMonth/CalendarMonth.js.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts +5 -5
- package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyExpanded.d.ts +1 -0
- package/dist/js/components/ClipboardCopy/ClipboardCopyExpanded.d.ts.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyExpanded.js.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.js +2 -2
- package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/js/components/Menu/Menu.d.ts.map +1 -1
- package/dist/js/components/Menu/Menu.js +5 -1
- package/dist/js/components/Menu/Menu.js.map +1 -1
- package/dist/js/components/Menu/MenuContainer.js +2 -2
- package/dist/js/components/Menu/MenuContainer.js.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggle.js +1 -1
- package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
- package/dist/js/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
- package/dist/js/components/Pagination/PaginationOptionsMenu.js +2 -4
- package/dist/js/components/Pagination/PaginationOptionsMenu.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/Select/Select.d.ts +6 -0
- package/dist/js/components/Select/Select.d.ts.map +1 -1
- package/dist/js/components/Select/Select.js +5 -5
- package/dist/js/components/Select/Select.js.map +1 -1
- package/dist/js/components/TextInputGroup/TextInputGroupMain.d.ts +2 -0
- package/dist/js/components/TextInputGroup/TextInputGroupMain.d.ts.map +1 -1
- package/dist/js/components/TextInputGroup/TextInputGroupMain.js +3 -3
- package/dist/js/components/TextInputGroup/TextInputGroupMain.js.map +1 -1
- package/dist/js/helpers/Popper/Popper.js +2 -2
- package/dist/js/helpers/Popper/Popper.js.map +1 -1
- package/dist/js/index.d.ts.map +1 -1
- package/dist/js/index.js.map +1 -1
- package/dist/js/next/components/DualListSelector/DualListSelector.d.ts +23 -0
- package/dist/js/next/components/DualListSelector/DualListSelector.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelector.js +26 -0
- package/dist/js/next/components/DualListSelector/DualListSelector.js.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorContext.d.ts +19 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorContext.js +9 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorContext.js.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorControl.d.ts +25 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorControl.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorControl.js +22 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorControl.js.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts +15 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.js +39 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.js.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorList.d.ts +8 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorList.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorList.js +30 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorList.js.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorListItem.d.ts +29 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorListItem.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorListItem.js +42 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorListItem.js.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.d.ts +24 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.js +63 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorPane.d.ts +31 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorPane.js +31 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorPane.js.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorTree.d.ts +48 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorTree.js +19 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorTree.js.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.d.ts +32 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.js +78 -0
- package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -0
- package/dist/js/next/components/DualListSelector/index.d.ts +8 -0
- package/dist/js/next/components/DualListSelector/index.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/index.js +11 -0
- package/dist/js/next/components/DualListSelector/index.js.map +1 -0
- package/dist/js/next/components/DualListSelector/treeUtils.d.ts +8 -0
- package/dist/js/next/components/DualListSelector/treeUtils.d.ts.map +1 -0
- package/dist/js/next/components/DualListSelector/treeUtils.js +77 -0
- package/dist/js/next/components/DualListSelector/treeUtils.js.map +1 -0
- package/dist/js/next/components/index.d.ts +1 -0
- package/dist/js/next/components/index.d.ts.map +1 -1
- package/dist/js/next/components/index.js +1 -0
- package/dist/js/next/components/index.js.map +1 -1
- 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/CalendarMonth/CalendarMonth.tsx +38 -13
- package/src/components/ClipboardCopy/ClipboardCopy.tsx +5 -5
- package/src/components/ClipboardCopy/ClipboardCopyExpanded.tsx +1 -0
- package/src/components/Dropdown/Dropdown.tsx +2 -2
- package/src/components/Menu/Menu.tsx +5 -3
- package/src/components/Menu/MenuContainer.tsx +2 -2
- package/src/components/MenuToggle/MenuToggle.tsx +1 -1
- package/src/components/MenuToggle/examples/MenuToggleTypeahead.tsx +1 -1
- package/src/components/Pagination/PaginationOptionsMenu.tsx +2 -4
- package/src/components/SearchInput/SearchInput.tsx +4 -0
- package/src/components/Select/Select.tsx +15 -3
- package/src/components/Select/examples/SelectMultiTypeahead.tsx +8 -1
- package/src/components/Select/examples/SelectMultiTypeaheadCheckbox.tsx +8 -1
- package/src/components/Select/examples/SelectMultiTypeaheadCreatable.tsx +8 -1
- package/src/components/Select/examples/SelectTypeahead.tsx +8 -1
- package/src/components/Select/examples/SelectTypeaheadCreatable.tsx +8 -1
- package/src/components/TextInputGroup/TextInputGroupMain.tsx +5 -0
- package/src/components/TextInputGroup/__tests__/TextInputGroupMain.test.tsx +8 -0
- package/src/helpers/Popper/Popper.tsx +1 -1
- package/src/index.ts +0 -1
- package/src/next/components/DualListSelector/DualListSelector.tsx +50 -0
- package/src/next/components/DualListSelector/DualListSelectorContext.ts +21 -0
- package/src/next/components/DualListSelector/DualListSelectorControl.tsx +66 -0
- package/src/next/components/DualListSelector/DualListSelectorControlsWrapper.tsx +87 -0
- package/src/next/components/DualListSelector/DualListSelectorList.tsx +57 -0
- package/src/next/components/DualListSelector/DualListSelectorListItem.tsx +105 -0
- package/src/next/components/DualListSelector/DualListSelectorListWrapper.tsx +124 -0
- package/src/next/components/DualListSelector/DualListSelectorPane.tsx +94 -0
- package/src/next/components/DualListSelector/DualListSelectorTree.tsx +110 -0
- package/src/next/components/DualListSelector/DualListSelectorTreeItem.tsx +184 -0
- package/src/next/components/DualListSelector/__tests__/DualListSelector.test.tsx +26 -0
- package/src/next/components/DualListSelector/__tests__/__snapshots__/DualListSelector.test.tsx.snap +122 -0
- package/src/next/components/DualListSelector/examples/DualListSelector.md +99 -0
- package/src/next/components/DualListSelector/examples/DualListSelectorBasic.tsx +157 -0
- package/src/next/components/DualListSelector/examples/DualListSelectorBasicSearch.tsx +214 -0
- package/src/next/components/DualListSelector/examples/DualListSelectorBasicTooltips.tsx +165 -0
- package/src/next/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +347 -0
- package/src/next/components/DualListSelector/examples/DualListSelectorDragDrop.tsx +184 -0
- package/src/next/components/DualListSelector/examples/DualListSelectorTree.tsx +380 -0
- package/src/next/components/DualListSelector/index.ts +7 -0
- package/src/next/components/DualListSelector/treeUtils.ts +81 -0
- package/src/next/components/index.ts +1 -0
- package/dist/esm/demos/index.d.ts +0 -3
- package/dist/esm/demos/index.d.ts.map +0 -1
- package/dist/esm/demos/index.js +0 -3
- package/dist/esm/demos/index.js.map +0 -1
- package/dist/js/demos/index.d.ts +0 -3
- package/dist/js/demos/index.d.ts.map +0 -1
- package/dist/js/demos/index.js +0 -6
- package/dist/js/demos/index.js.map +0 -1
- package/src/demos/index.ts +0 -2
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":"5.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":"5.3.0-prerelease.9","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":"5.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":"5.3.0-prerelease.9","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":"5.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":"5.3.0-prerelease.9","private":true}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "5.3.0-prerelease.
|
|
3
|
+
"version": "5.3.0-prerelease.10",
|
|
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
|
"clean:exports": "node scripts/cleanDistExports.js"
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@patternfly/react-icons": "^5.3.0-prerelease.
|
|
50
|
-
"@patternfly/react-styles": "^5.3.0-prerelease.
|
|
51
|
-
"@patternfly/react-tokens": "^5.3.0-prerelease.
|
|
49
|
+
"@patternfly/react-icons": "^5.3.0-prerelease.1",
|
|
50
|
+
"@patternfly/react-styles": "^5.3.0-prerelease.1",
|
|
51
|
+
"@patternfly/react-tokens": "^5.3.0-prerelease.1",
|
|
52
52
|
"focus-trap": "7.5.2",
|
|
53
53
|
"react-dropzone": "^14.2.3",
|
|
54
54
|
"tslib": "^2.5.0"
|
|
55
55
|
},
|
|
56
56
|
"devDependencies": {
|
|
57
|
-
"@patternfly/patternfly": "5.2.
|
|
57
|
+
"@patternfly/patternfly": "5.2.1",
|
|
58
58
|
"@rollup/plugin-commonjs": "^25.0.0",
|
|
59
59
|
"@rollup/plugin-node-resolve": "^15.0.2",
|
|
60
60
|
"@rollup/plugin-replace": "^5.0.2",
|
|
@@ -72,5 +72,5 @@
|
|
|
72
72
|
"react": "^17 || ^18",
|
|
73
73
|
"react-dom": "^17 || ^18"
|
|
74
74
|
},
|
|
75
|
-
"gitHead": "
|
|
75
|
+
"gitHead": "ef374e4148bb132e4d08632800f60a6159950744"
|
|
76
76
|
}
|
|
@@ -83,9 +83,6 @@ export interface CalendarProps extends CalendarFormat, Omit<React.HTMLProps<HTML
|
|
|
83
83
|
validators?: ((date: Date) => boolean)[];
|
|
84
84
|
}
|
|
85
85
|
|
|
86
|
-
// Must be numeric given current header design
|
|
87
|
-
const yearFormat = (date: Date) => date.getFullYear();
|
|
88
|
-
|
|
89
86
|
const buildCalendar = (year: number, month: number, weekStart: number, validators: ((date: Date) => boolean)[]) => {
|
|
90
87
|
const defaultDate = new Date(year, month);
|
|
91
88
|
|
|
@@ -164,6 +161,13 @@ export const CalendarMonth = ({
|
|
|
164
161
|
};
|
|
165
162
|
const initialDate = getInitialDate();
|
|
166
163
|
const [focusedDate, setFocusedDate] = React.useState(initialDate);
|
|
164
|
+
|
|
165
|
+
// Must be numeric given current header design
|
|
166
|
+
const yearFormat = (date: Date) => date.getFullYear();
|
|
167
|
+
//
|
|
168
|
+
const yearFormatted = yearFormat(focusedDate);
|
|
169
|
+
const [yearInput, setYearInput] = React.useState(yearFormatted.toString());
|
|
170
|
+
|
|
167
171
|
const [hoveredDate, setHoveredDate] = React.useState(new Date(focusedDate));
|
|
168
172
|
const focusRef = React.useRef<HTMLButtonElement>();
|
|
169
173
|
const [hiddenMonthId] = React.useState(getUniqueId('hidden-month-span'));
|
|
@@ -191,6 +195,7 @@ export const CalendarMonth = ({
|
|
|
191
195
|
setHoveredDate(newDate);
|
|
192
196
|
setShouldFocus(false);
|
|
193
197
|
onMonthChange(ev, newDate);
|
|
198
|
+
setYearInput(yearFormat(newDate).toString());
|
|
194
199
|
};
|
|
195
200
|
|
|
196
201
|
const onKeyDown = (ev: React.KeyboardEvent<HTMLTableSectionElement>) => {
|
|
@@ -217,6 +222,34 @@ export const CalendarMonth = ({
|
|
|
217
222
|
const changeMonth = (newMonth: number, newYear?: number) =>
|
|
218
223
|
new Date(newYear ?? focusedDate.getFullYear(), newMonth, 1);
|
|
219
224
|
|
|
225
|
+
const MIN_YEAR = 1900;
|
|
226
|
+
const MAX_YEAR = 2100;
|
|
227
|
+
|
|
228
|
+
const handleYearInputChange = (event: React.FormEvent<HTMLInputElement>, yearStr: string) => {
|
|
229
|
+
if (!/^\d{0,4}$/.test(yearStr)) {
|
|
230
|
+
return;
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
setYearInput(yearStr);
|
|
234
|
+
|
|
235
|
+
if (yearStr.length === 4) {
|
|
236
|
+
const yearNum = Number(yearStr);
|
|
237
|
+
|
|
238
|
+
if (yearNum >= MIN_YEAR && yearNum <= MAX_YEAR) {
|
|
239
|
+
const newDate = changeYear(yearNum);
|
|
240
|
+
setFocusedDate(newDate);
|
|
241
|
+
setHoveredDate(newDate);
|
|
242
|
+
setShouldFocus(false);
|
|
243
|
+
|
|
244
|
+
// We need to manually focus the year input in FireFox when the scroll buttons are clicked, as FireFox doesn't place focus automatically
|
|
245
|
+
(event.target as HTMLElement).focus();
|
|
246
|
+
onMonthChange(event, newDate);
|
|
247
|
+
} else {
|
|
248
|
+
setYearInput(yearFormatted.toString());
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
};
|
|
252
|
+
|
|
220
253
|
const addMonth = (toAdd: -1 | 1) => {
|
|
221
254
|
let newMonth = focusedDate.getMonth() + toAdd;
|
|
222
255
|
let newYear = focusedDate.getFullYear();
|
|
@@ -254,7 +287,6 @@ export const CalendarMonth = ({
|
|
|
254
287
|
}
|
|
255
288
|
const isHoveredDateValid = isValidated(hoveredDate);
|
|
256
289
|
const monthFormatted = monthFormat(focusedDate);
|
|
257
|
-
const yearFormatted = yearFormat(focusedDate);
|
|
258
290
|
|
|
259
291
|
const calendarToRender = (
|
|
260
292
|
<div className={css(styles.calendarMonth, className)} {...props}>
|
|
@@ -321,15 +353,8 @@ export const CalendarMonth = ({
|
|
|
321
353
|
<TextInput
|
|
322
354
|
aria-label={yearInputAriaLabel}
|
|
323
355
|
type="number"
|
|
324
|
-
value={
|
|
325
|
-
onChange={
|
|
326
|
-
const newDate = changeYear(Number(year));
|
|
327
|
-
setFocusedDate(newDate);
|
|
328
|
-
setHoveredDate(newDate);
|
|
329
|
-
setShouldFocus(false);
|
|
330
|
-
focusRef.current?.blur(); // will unfocus a date when changing year via up/down arrows
|
|
331
|
-
onMonthChange(ev, newDate);
|
|
332
|
-
}}
|
|
356
|
+
value={yearInput}
|
|
357
|
+
onChange={handleYearInputChange}
|
|
333
358
|
/>
|
|
334
359
|
</div>
|
|
335
360
|
</InputGroupItem>
|
|
@@ -10,7 +10,7 @@ import { ClipboardCopyToggle } from './ClipboardCopyToggle';
|
|
|
10
10
|
import { ClipboardCopyExpanded } from './ClipboardCopyExpanded';
|
|
11
11
|
import { getOUIAProps, OUIAProps } from '../../helpers';
|
|
12
12
|
|
|
13
|
-
export const clipboardCopyFunc = (event: React.ClipboardEvent<HTMLDivElement>, text?:
|
|
13
|
+
export const clipboardCopyFunc = (event: React.ClipboardEvent<HTMLDivElement>, text?: React.ReactNode) => {
|
|
14
14
|
navigator.clipboard.writeText(text.toString());
|
|
15
15
|
};
|
|
16
16
|
|
|
@@ -27,7 +27,7 @@ export interface ClipboardCopyState {
|
|
|
27
27
|
textWhenExpanded: string;
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
export interface ClipboardCopyProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onChange'
|
|
30
|
+
export interface ClipboardCopyProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onChange'>, OUIAProps {
|
|
31
31
|
/** Additional classes added to the clipboard copy container. */
|
|
32
32
|
className?: string;
|
|
33
33
|
/** Tooltip message to display when hover the copy button */
|
|
@@ -71,12 +71,12 @@ export interface ClipboardCopyProps extends Omit<React.HTMLProps<HTMLDivElement>
|
|
|
71
71
|
/** Delay in ms before the tooltip appears. */
|
|
72
72
|
entryDelay?: number;
|
|
73
73
|
/** A function that is triggered on clicking the copy button. */
|
|
74
|
-
onCopy?: (event: React.ClipboardEvent<HTMLDivElement>, text?:
|
|
74
|
+
onCopy?: (event: React.ClipboardEvent<HTMLDivElement>, text?: React.ReactNode) => void;
|
|
75
75
|
/** A function that is triggered on changing the text. */
|
|
76
76
|
onChange?: (event: React.FormEvent, text?: string) => void;
|
|
77
77
|
/** The text which is copied. */
|
|
78
|
-
children:
|
|
79
|
-
/** Additional actions for inline clipboard copy. Should be wrapped with ClipboardCopyAction. */
|
|
78
|
+
children: React.ReactNode;
|
|
79
|
+
/** Additional actions for inline-compact clipboard copy. Should be wrapped with ClipboardCopyAction. */
|
|
80
80
|
additionalActions?: React.ReactNode;
|
|
81
81
|
/** Value to overwrite the randomly generated data-ouia-component-id.*/
|
|
82
82
|
ouiaId?: number | string;
|
|
@@ -6,6 +6,7 @@ import { PickOptional } from '../../helpers/typeUtils';
|
|
|
6
6
|
|
|
7
7
|
export interface ClipboardCopyExpandedProps extends Omit<ClipboardCopyProps, 'onChange'> {
|
|
8
8
|
className?: string;
|
|
9
|
+
children: React.ReactNode;
|
|
9
10
|
onChange?: (e: React.FormEvent<HTMLDivElement>, text: string) => void;
|
|
10
11
|
isReadOnly?: boolean;
|
|
11
12
|
isCode?: boolean;
|
|
@@ -111,8 +111,8 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
111
111
|
};
|
|
112
112
|
|
|
113
113
|
const handleClick = (event: MouseEvent) => {
|
|
114
|
-
// toggle was
|
|
115
|
-
if (isOpen && toggleRef.current?.contains(event.target as Node)
|
|
114
|
+
// toggle was opened, focus on first menu item
|
|
115
|
+
if (isOpen && toggleRef.current?.contains(event.target as Node)) {
|
|
116
116
|
setTimeout(() => {
|
|
117
117
|
const firstElement = menuRef?.current?.querySelector(
|
|
118
118
|
'li button:not(:disabled),li input:not(:disabled),li a:not([aria-disabled="true"])'
|
|
@@ -156,8 +156,11 @@ class MenuBase extends React.Component<MenuProps, MenuState> {
|
|
|
156
156
|
this.setState({ transitionMoveTarget: null });
|
|
157
157
|
} else {
|
|
158
158
|
const nextMenu = current.querySelector('#' + this.props.activeMenu) || current || null;
|
|
159
|
-
const
|
|
160
|
-
|
|
159
|
+
const nextMenuLists = nextMenu.getElementsByTagName('UL');
|
|
160
|
+
if (nextMenuLists.length === 0) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
const nextMenuChildren = Array.from(nextMenuLists[0].children);
|
|
161
164
|
if (!this.state.currentDrilldownMenuId || nextMenu.id !== this.state.currentDrilldownMenuId) {
|
|
162
165
|
this.setState({ currentDrilldownMenuId: nextMenu.id });
|
|
163
166
|
} else {
|
|
@@ -167,7 +170,6 @@ class MenuBase extends React.Component<MenuProps, MenuState> {
|
|
|
167
170
|
const nextTarget = nextMenuChildren.filter(
|
|
168
171
|
(el) => !(el.classList.contains('pf-m-disabled') || el.classList.contains(styles.divider))
|
|
169
172
|
)[0].firstChild;
|
|
170
|
-
|
|
171
173
|
(nextTarget as HTMLElement).focus();
|
|
172
174
|
(nextTarget as HTMLElement).tabIndex = 0;
|
|
173
175
|
}
|
|
@@ -69,8 +69,8 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
|
|
|
69
69
|
};
|
|
70
70
|
|
|
71
71
|
const handleClick = (event: MouseEvent) => {
|
|
72
|
-
// toggle was
|
|
73
|
-
if (isOpen && toggleRef.current?.contains(event.target as Node)
|
|
72
|
+
// toggle was opened, focus on first menu item
|
|
73
|
+
if (isOpen && toggleRef.current?.contains(event.target as Node)) {
|
|
74
74
|
setTimeout(() => {
|
|
75
75
|
const firstElement = menuRef?.current?.querySelector(
|
|
76
76
|
'li button:not(:disabled),li input:not(:disabled),li a:not([aria-disabled="true"])'
|
|
@@ -96,7 +96,7 @@ class MenuToggleBase extends React.Component<MenuToggleProps> {
|
|
|
96
96
|
className={css(styles.menuToggleButton)}
|
|
97
97
|
aria-expanded={isExpanded}
|
|
98
98
|
onClick={onClick}
|
|
99
|
-
aria-label=
|
|
99
|
+
aria-label={ariaLabel || 'Menu toggle'}
|
|
100
100
|
>
|
|
101
101
|
{toggleControls}
|
|
102
102
|
</button>
|
|
@@ -16,7 +16,7 @@ export const MenuToggleTypeahead: React.FunctionComponent = () => {
|
|
|
16
16
|
};
|
|
17
17
|
|
|
18
18
|
return (
|
|
19
|
-
<MenuToggle variant="typeahead" isFullWidth>
|
|
19
|
+
<MenuToggle variant="typeahead" isFullWidth aria-label="Typeahead menu toggle">
|
|
20
20
|
<TextInputGroup isPlain>
|
|
21
21
|
<TextInputGroupMain
|
|
22
22
|
value={inputValue}
|
|
@@ -124,10 +124,8 @@ export const PaginationOptionsMenu: React.FunctionComponent<PaginationOptionsMen
|
|
|
124
124
|
};
|
|
125
125
|
|
|
126
126
|
const handleClick = (event: MouseEvent) => {
|
|
127
|
-
//
|
|
128
|
-
|
|
129
|
-
// https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
|
|
130
|
-
if (event.detail === 0 && isOpen && toggleRef.current?.contains(event.target as Node)) {
|
|
127
|
+
// Focus the first non-disabled menu item on toggle 'click'
|
|
128
|
+
if (isOpen && toggleRef.current?.contains(event.target as Node)) {
|
|
131
129
|
setTimeout(() => {
|
|
132
130
|
const firstElement = menuRef?.current?.querySelector('li button:not(:disabled)');
|
|
133
131
|
firstElement && (firstElement as HTMLElement).focus();
|
|
@@ -75,6 +75,8 @@ export interface SearchInputProps extends Omit<React.HTMLProps<HTMLDivElement>,
|
|
|
75
75
|
hasWordsAttrLabel?: React.ReactNode;
|
|
76
76
|
/** A suggestion for autocompleting. */
|
|
77
77
|
hint?: string;
|
|
78
|
+
/** Id for the search input */
|
|
79
|
+
searchInputId?: string;
|
|
78
80
|
/** @hide A reference object to attach to the input box. */
|
|
79
81
|
innerRef?: React.RefObject<any>;
|
|
80
82
|
/** A flag for controlling the open state of a custom advanced search implementation. */
|
|
@@ -126,6 +128,7 @@ export interface SearchInputProps extends Omit<React.HTMLProps<HTMLDivElement>,
|
|
|
126
128
|
|
|
127
129
|
const SearchInputBase: React.FunctionComponent<SearchInputProps> = ({
|
|
128
130
|
className,
|
|
131
|
+
searchInputId,
|
|
129
132
|
value = '',
|
|
130
133
|
attributes = [] as string[],
|
|
131
134
|
formAdditionalItems,
|
|
@@ -298,6 +301,7 @@ const SearchInputBase: React.FunctionComponent<SearchInputProps> = ({
|
|
|
298
301
|
onKeyDown={onEnter}
|
|
299
302
|
onChange={onChangeHandler}
|
|
300
303
|
name={name}
|
|
304
|
+
inputId={searchInputId}
|
|
301
305
|
/>
|
|
302
306
|
{(renderUtilities || areUtilitiesDisplayed) && (
|
|
303
307
|
<TextInputGroupUtilities>
|
|
@@ -70,6 +70,12 @@ export interface SelectProps extends MenuProps, OUIAProps {
|
|
|
70
70
|
role?: string;
|
|
71
71
|
/** Additional properties to pass to the popper */
|
|
72
72
|
popperProps?: SelectPopperProps;
|
|
73
|
+
/** Height of the select menu */
|
|
74
|
+
menuHeight?: string;
|
|
75
|
+
/** Maximum height of select menu */
|
|
76
|
+
maxMenuHeight?: string;
|
|
77
|
+
/** Indicates if the select menu should be scrollable */
|
|
78
|
+
isScrollable?: boolean;
|
|
73
79
|
}
|
|
74
80
|
|
|
75
81
|
const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
@@ -87,6 +93,9 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
87
93
|
zIndex = 9999,
|
|
88
94
|
role = 'listbox',
|
|
89
95
|
popperProps,
|
|
96
|
+
menuHeight,
|
|
97
|
+
maxMenuHeight,
|
|
98
|
+
isScrollable,
|
|
90
99
|
...props
|
|
91
100
|
}: SelectProps & OUIAProps) => {
|
|
92
101
|
const localMenuRef = React.useRef<HTMLDivElement>();
|
|
@@ -115,8 +124,8 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
115
124
|
};
|
|
116
125
|
|
|
117
126
|
const handleClick = (event: MouseEvent) => {
|
|
118
|
-
// toggle was
|
|
119
|
-
if (isOpen && toggleRef.current?.contains(event.target as Node)
|
|
127
|
+
// toggle was opened, focus on first menu item
|
|
128
|
+
if (isOpen && toggleRef.current?.contains(event.target as Node)) {
|
|
120
129
|
setTimeout(() => {
|
|
121
130
|
const firstElement = menuRef?.current?.querySelector('li button:not(:disabled),li input:not(:disabled)');
|
|
122
131
|
firstElement && (firstElement as HTMLElement).focus();
|
|
@@ -151,6 +160,7 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
151
160
|
}}
|
|
152
161
|
isPlain={isPlain}
|
|
153
162
|
selected={selected}
|
|
163
|
+
isScrollable={isScrollable}
|
|
154
164
|
{...getOUIAProps(
|
|
155
165
|
Select.displayName,
|
|
156
166
|
props.ouiaId !== undefined ? props.ouiaId : getDefaultOUIAId(Select.displayName),
|
|
@@ -158,7 +168,9 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
158
168
|
)}
|
|
159
169
|
{...props}
|
|
160
170
|
>
|
|
161
|
-
<MenuContent
|
|
171
|
+
<MenuContent menuHeight={menuHeight} maxMenuHeight={maxMenuHeight}>
|
|
172
|
+
{children}
|
|
173
|
+
</MenuContent>
|
|
162
174
|
</Menu>
|
|
163
175
|
);
|
|
164
176
|
return (
|
|
@@ -137,7 +137,14 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
|
|
|
137
137
|
};
|
|
138
138
|
|
|
139
139
|
const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
|
|
140
|
-
<MenuToggle
|
|
140
|
+
<MenuToggle
|
|
141
|
+
variant="typeahead"
|
|
142
|
+
aria-label="Multi typeahead menu toggle"
|
|
143
|
+
onClick={onToggleClick}
|
|
144
|
+
innerRef={toggleRef}
|
|
145
|
+
isExpanded={isOpen}
|
|
146
|
+
isFullWidth
|
|
147
|
+
>
|
|
141
148
|
<TextInputGroup isPlain>
|
|
142
149
|
<TextInputGroupMain
|
|
143
150
|
value={inputValue}
|
|
@@ -140,7 +140,14 @@ export const SelectMultiTypeaheadCheckbox: React.FunctionComponent = () => {
|
|
|
140
140
|
}, [selected]);
|
|
141
141
|
|
|
142
142
|
const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
|
|
143
|
-
<MenuToggle
|
|
143
|
+
<MenuToggle
|
|
144
|
+
variant="typeahead"
|
|
145
|
+
aria-label="Multi typeahead checkbox menu toggle"
|
|
146
|
+
onClick={onToggleClick}
|
|
147
|
+
innerRef={toggleRef}
|
|
148
|
+
isExpanded={isOpen}
|
|
149
|
+
isFullWidth
|
|
150
|
+
>
|
|
144
151
|
<TextInputGroup isPlain>
|
|
145
152
|
<TextInputGroupMain
|
|
146
153
|
value={inputValue}
|
|
@@ -147,7 +147,14 @@ export const SelectMultiTypeaheadCreatable: React.FunctionComponent = () => {
|
|
|
147
147
|
};
|
|
148
148
|
|
|
149
149
|
const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
|
|
150
|
-
<MenuToggle
|
|
150
|
+
<MenuToggle
|
|
151
|
+
variant="typeahead"
|
|
152
|
+
aria-label="Multi typeahead creatable menu toggle"
|
|
153
|
+
onClick={onToggleClick}
|
|
154
|
+
innerRef={toggleRef}
|
|
155
|
+
isExpanded={isOpen}
|
|
156
|
+
isFullWidth
|
|
157
|
+
>
|
|
151
158
|
<TextInputGroup isPlain>
|
|
152
159
|
<TextInputGroupMain
|
|
153
160
|
value={inputValue}
|
|
@@ -143,7 +143,14 @@ export const SelectBasic: React.FunctionComponent = () => {
|
|
|
143
143
|
};
|
|
144
144
|
|
|
145
145
|
const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
|
|
146
|
-
<MenuToggle
|
|
146
|
+
<MenuToggle
|
|
147
|
+
ref={toggleRef}
|
|
148
|
+
variant="typeahead"
|
|
149
|
+
aria-label="Typeahead menu toggle"
|
|
150
|
+
onClick={onToggleClick}
|
|
151
|
+
isExpanded={isOpen}
|
|
152
|
+
isFullWidth
|
|
153
|
+
>
|
|
147
154
|
<TextInputGroup isPlain>
|
|
148
155
|
<TextInputGroupMain
|
|
149
156
|
value={inputValue}
|
|
@@ -154,7 +154,14 @@ export const SelectTypeaheadCreatable: React.FunctionComponent = () => {
|
|
|
154
154
|
};
|
|
155
155
|
|
|
156
156
|
const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
|
|
157
|
-
<MenuToggle
|
|
157
|
+
<MenuToggle
|
|
158
|
+
ref={toggleRef}
|
|
159
|
+
variant="typeahead"
|
|
160
|
+
aria-label="Typeahead creatable menu toggle"
|
|
161
|
+
onClick={onToggleClick}
|
|
162
|
+
isExpanded={isOpen}
|
|
163
|
+
isFullWidth
|
|
164
|
+
>
|
|
158
165
|
<TextInputGroup isPlain>
|
|
159
166
|
<TextInputGroupMain
|
|
160
167
|
value={inputValue}
|
|
@@ -53,6 +53,8 @@ export interface TextInputGroupMainProps extends Omit<React.HTMLProps<HTMLDivEle
|
|
|
53
53
|
isExpanded?: boolean;
|
|
54
54
|
/** @beta The id of the element(s) controlled by the input. Required if role has a value of "combobox". */
|
|
55
55
|
'aria-controls'?: string;
|
|
56
|
+
/** The id of the input element */
|
|
57
|
+
inputId?: string;
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
const TextInputGroupMainBase: React.FunctionComponent<TextInputGroupMainProps> = ({
|
|
@@ -73,6 +75,7 @@ const TextInputGroupMainBase: React.FunctionComponent<TextInputGroupMainProps> =
|
|
|
73
75
|
role,
|
|
74
76
|
isExpanded,
|
|
75
77
|
'aria-controls': ariaControls,
|
|
78
|
+
inputId,
|
|
76
79
|
...props
|
|
77
80
|
}: TextInputGroupMainProps) => {
|
|
78
81
|
const { isDisabled } = React.useContext(TextInputGroupContext);
|
|
@@ -94,6 +97,7 @@ const TextInputGroupMainBase: React.FunctionComponent<TextInputGroupMainProps> =
|
|
|
94
97
|
disabled
|
|
95
98
|
aria-hidden="true"
|
|
96
99
|
value={hint}
|
|
100
|
+
id={inputId}
|
|
97
101
|
/>
|
|
98
102
|
)}
|
|
99
103
|
{icon && <span className={css(styles.textInputGroupIcon)}>{icon}</span>}
|
|
@@ -110,6 +114,7 @@ const TextInputGroupMainBase: React.FunctionComponent<TextInputGroupMainProps> =
|
|
|
110
114
|
placeholder={inputPlaceHolder}
|
|
111
115
|
name={name}
|
|
112
116
|
aria-activedescendant={ariaActivedescendant}
|
|
117
|
+
id={inputId}
|
|
113
118
|
{...(role && { role })}
|
|
114
119
|
{...(isExpanded !== undefined && { 'aria-expanded': isExpanded })}
|
|
115
120
|
{...(ariaControls && { 'aria-controls': ariaControls })}
|
|
@@ -109,6 +109,14 @@ describe('TextInputGroupMain', () => {
|
|
|
109
109
|
expect(inputValue).toBeVisible();
|
|
110
110
|
});
|
|
111
111
|
|
|
112
|
+
it('passes the inputId prop to the input', () => {
|
|
113
|
+
render(<TextInputGroupMain inputId="input-id">Test</TextInputGroupMain>);
|
|
114
|
+
|
|
115
|
+
const input = screen.getByRole('textbox');
|
|
116
|
+
|
|
117
|
+
expect(input).toHaveAttribute('id', 'input-id');
|
|
118
|
+
});
|
|
119
|
+
|
|
112
120
|
it('passes the placeholder prop to the input', () => {
|
|
113
121
|
render(<TextInputGroupMain placeholder="placeholder text">Test</TextInputGroupMain>);
|
|
114
122
|
|
|
@@ -449,7 +449,7 @@ export const Popper: React.FunctionComponent<PopperProps> = ({
|
|
|
449
449
|
React.useEffect(() => {
|
|
450
450
|
// currentPopperContent = {tooltip children} || {dropdown children}
|
|
451
451
|
const currentPopperContent =
|
|
452
|
-
popper?.props?.children[1]?.props?.children || popper?.props?.children?.props?.children;
|
|
452
|
+
popper?.props?.children?.[1]?.props?.children || popper?.props?.children?.props?.children;
|
|
453
453
|
setPopperContent(currentPopperContent);
|
|
454
454
|
|
|
455
455
|
if (currentPopperContent && popperContent && currentPopperContent !== popperContent) {
|
package/src/index.ts
CHANGED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
|
|
3
|
+
import { css } from '@patternfly/react-styles';
|
|
4
|
+
import { GenerateId, PickOptional } from '../../../helpers';
|
|
5
|
+
import { DualListSelectorContext } from './DualListSelectorContext';
|
|
6
|
+
|
|
7
|
+
/** Acts as a container for all other DualListSelector sub-components when using a
|
|
8
|
+
* composable dual list selector.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export interface DualListSelectorProps {
|
|
12
|
+
/** Additional classes applied to the dual list selector. */
|
|
13
|
+
className?: string;
|
|
14
|
+
/** ID of the dual list selector. */
|
|
15
|
+
id?: string;
|
|
16
|
+
/** Flag indicating if the dual list selector uses trees instead of simple lists. */
|
|
17
|
+
isTree?: boolean;
|
|
18
|
+
/** Content to be rendered in the dual list selector. */
|
|
19
|
+
children?: React.ReactNode;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
class DualListSelector extends React.Component<DualListSelectorProps> {
|
|
23
|
+
static displayName = 'DualListSelector';
|
|
24
|
+
static defaultProps: PickOptional<DualListSelectorProps> = {
|
|
25
|
+
children: '',
|
|
26
|
+
isTree: false
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
constructor(props: DualListSelectorProps) {
|
|
30
|
+
super(props);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
render() {
|
|
34
|
+
const { className, children, id, isTree, ...props } = this.props;
|
|
35
|
+
|
|
36
|
+
return (
|
|
37
|
+
<DualListSelectorContext.Provider value={{ isTree }}>
|
|
38
|
+
<GenerateId>
|
|
39
|
+
{(randomId) => (
|
|
40
|
+
<div className={css(styles.dualListSelector, className)} id={id || randomId} {...props}>
|
|
41
|
+
{children}
|
|
42
|
+
</div>
|
|
43
|
+
)}
|
|
44
|
+
</GenerateId>
|
|
45
|
+
</DualListSelectorContext.Provider>
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export { DualListSelector };
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
|
|
3
|
+
export const DualListSelectorContext = React.createContext<{
|
|
4
|
+
isTree?: boolean;
|
|
5
|
+
}>({ isTree: false });
|
|
6
|
+
|
|
7
|
+
export const DualListSelectorListContext = React.createContext<{
|
|
8
|
+
setFocusedOption?: (id: string) => void;
|
|
9
|
+
isTree?: boolean;
|
|
10
|
+
ariaLabelledBy?: string;
|
|
11
|
+
focusedOption?: string;
|
|
12
|
+
displayOption?: (option: React.ReactNode) => boolean;
|
|
13
|
+
selectedOptions?: string[] | number[];
|
|
14
|
+
id?: string;
|
|
15
|
+
options?: React.ReactNode[];
|
|
16
|
+
isDisabled?: boolean;
|
|
17
|
+
}>({});
|
|
18
|
+
|
|
19
|
+
export const DualListSelectorPaneContext = React.createContext<{
|
|
20
|
+
isChosen: boolean;
|
|
21
|
+
}>({ isChosen: false });
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import * as React from 'react';
|
|
2
|
+
import { css } from '@patternfly/react-styles';
|
|
3
|
+
import { Button, ButtonVariant } from '../../../components/Button';
|
|
4
|
+
import { Tooltip } from '../../../components/Tooltip';
|
|
5
|
+
import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
|
|
6
|
+
|
|
7
|
+
/** Renders an individual control button for moving selected options between each
|
|
8
|
+
* dual list selector pane.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export interface DualListSelectorControlProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onClick'> {
|
|
12
|
+
/** Content to be rendered in the dual list selector control. */
|
|
13
|
+
children?: React.ReactNode;
|
|
14
|
+
/** @hide forwarded ref */
|
|
15
|
+
innerRef?: React.Ref<any>;
|
|
16
|
+
/** Flag indicating the control is disabled. */
|
|
17
|
+
isDisabled?: boolean;
|
|
18
|
+
/** Additional classes applied to the dual list selector control. */
|
|
19
|
+
className?: string;
|
|
20
|
+
/** Callback fired when dual list selector control is selected. */
|
|
21
|
+
onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
|
|
22
|
+
/** Accessible label for the dual list selector control. */
|
|
23
|
+
'aria-label'?: string;
|
|
24
|
+
/** Content to be displayed in a tooltip on hover of control. */
|
|
25
|
+
tooltipContent?: React.ReactNode;
|
|
26
|
+
/** Additional tooltip properties passed to the tooltip. */
|
|
27
|
+
tooltipProps?: any;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const DualListSelectorControlBase: React.FunctionComponent<DualListSelectorControlProps> = ({
|
|
31
|
+
innerRef,
|
|
32
|
+
children,
|
|
33
|
+
className,
|
|
34
|
+
'aria-label': ariaLabel,
|
|
35
|
+
isDisabled = true,
|
|
36
|
+
onClick = () => {},
|
|
37
|
+
tooltipContent,
|
|
38
|
+
tooltipProps = {} as any,
|
|
39
|
+
...props
|
|
40
|
+
}: DualListSelectorControlProps) => {
|
|
41
|
+
const privateRef = React.useRef(null);
|
|
42
|
+
const ref = innerRef || privateRef;
|
|
43
|
+
return (
|
|
44
|
+
<div className={css(styles.dualListSelectorControlsItem, className)} {...props}>
|
|
45
|
+
<Button
|
|
46
|
+
isDisabled={isDisabled}
|
|
47
|
+
aria-disabled={isDisabled}
|
|
48
|
+
variant={ButtonVariant.plain}
|
|
49
|
+
onClick={onClick}
|
|
50
|
+
aria-label={ariaLabel}
|
|
51
|
+
tabIndex={-1}
|
|
52
|
+
ref={ref}
|
|
53
|
+
>
|
|
54
|
+
{children}
|
|
55
|
+
</Button>
|
|
56
|
+
{tooltipContent && <Tooltip content={tooltipContent} position="left" triggerRef={ref} {...tooltipProps} />}
|
|
57
|
+
</div>
|
|
58
|
+
);
|
|
59
|
+
};
|
|
60
|
+
DualListSelectorControlBase.displayName = 'DualListSelectorControlBase';
|
|
61
|
+
|
|
62
|
+
export const DualListSelectorControl = React.forwardRef((props: DualListSelectorControlProps, ref: React.Ref<any>) => (
|
|
63
|
+
<DualListSelectorControlBase innerRef={ref} {...props} />
|
|
64
|
+
));
|
|
65
|
+
|
|
66
|
+
DualListSelectorControl.displayName = 'DualListSelectorControl';
|