@patternfly/react-core 6.0.0-alpha.39 → 6.0.0-alpha.40
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 +224 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/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/Chip/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/Checkbox/Checkbox.js +2 -2
- package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/esm/components/JumpLinks/JumpLinks.d.ts +3 -1
- package/dist/esm/components/JumpLinks/JumpLinks.d.ts.map +1 -1
- package/dist/esm/components/JumpLinks/JumpLinks.js +19 -7
- package/dist/esm/components/JumpLinks/JumpLinks.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/Radio/Radio.js +2 -2
- package/dist/esm/components/Radio/Radio.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 +3 -3
- 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 +0 -1
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +0 -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/Checkbox/Checkbox.js +2 -2
- package/dist/js/components/Checkbox/Checkbox.js.map +1 -1
- package/dist/js/components/JumpLinks/JumpLinks.d.ts +3 -1
- package/dist/js/components/JumpLinks/JumpLinks.d.ts.map +1 -1
- package/dist/js/components/JumpLinks/JumpLinks.js +19 -7
- package/dist/js/components/JumpLinks/JumpLinks.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/Radio/Radio.js +2 -2
- package/dist/js/components/Radio/Radio.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 +3 -3
- 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 +0 -1
- package/dist/js/index.d.ts.map +1 -1
- package/dist/js/index.js +0 -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 +7 -6
- package/scripts/cleanDistExports.js +14 -0
- package/src/components/Accordion/__tests__/AccordionToggle.test.tsx +28 -0
- package/src/components/Checkbox/Checkbox.tsx +2 -2
- package/src/components/JumpLinks/JumpLinks.tsx +21 -7
- package/src/components/MenuToggle/MenuToggle.tsx +1 -1
- package/src/components/MenuToggle/examples/MenuToggleTypeahead.tsx +1 -1
- package/src/components/Radio/Radio.tsx +2 -2
- package/src/components/SearchInput/SearchInput.tsx +4 -0
- package/src/components/Select/Select.tsx +13 -1
- 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/demos/JumpLinks.md +4 -3
- package/src/demos/examples/JumpLinks/JumpLinksWithDrawer.js +25 -16
- 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 +211 -0
- package/src/next/components/DualListSelector/examples/DualListSelectorBasicTooltips.tsx +165 -0
- package/src/next/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +344 -0
- package/src/next/components/DualListSelector/examples/DualListSelectorDragDrop.tsx +184 -0
- package/src/next/components/DualListSelector/examples/DualListSelectorTree.tsx +373 -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/components/DataList/__tests__/__snapshots__/DataListAction.test.tsx.snap~HEAD +0 -11
- package/src/components/DataList/__tests__/__snapshots__/DataListAction.test.tsx.snap~main +0 -11
- package/src/components/DataList/__tests__/__snapshots__/DataListItemCells.test.tsx.snap~HEAD +0 -9
- package/src/components/DataList/__tests__/__snapshots__/DataListItemCells.test.tsx.snap~main +0 -9
- package/src/components/DataList/__tests__/__snapshots__/DataListItemRow.test.tsx.snap~HEAD +0 -9
- package/src/components/DataList/__tests__/__snapshots__/DataListItemRow.test.tsx.snap~main +0 -9
- 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":"6.0.0-alpha.
|
|
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.0.0-alpha.39","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.0.0-alpha.
|
|
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.0.0-alpha.39","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.0.0-alpha.
|
|
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.0.0-alpha.39","private":true}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "6.0.0-alpha.
|
|
3
|
+
"version": "6.0.0-alpha.40",
|
|
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",
|
|
@@ -43,12 +43,13 @@
|
|
|
43
43
|
"build:single:packages": "node ../../scripts/build-single-packages.js --config single-packages.config.json",
|
|
44
44
|
"clean": "rimraf dist components layouts helpers next deprecated node_modules",
|
|
45
45
|
"generate": "node scripts/copyStyles.js",
|
|
46
|
-
"subpaths": "node ../../scripts/exportSubpaths.js --config subpaths.config.json"
|
|
46
|
+
"subpaths": "node ../../scripts/exportSubpaths.js --config subpaths.config.json",
|
|
47
|
+
"clean:exports": "node scripts/cleanDistExports.js"
|
|
47
48
|
},
|
|
48
49
|
"dependencies": {
|
|
49
|
-
"@patternfly/react-icons": "^6.0.0-alpha.
|
|
50
|
-
"@patternfly/react-styles": "^6.0.0-alpha.
|
|
51
|
-
"@patternfly/react-tokens": "^6.0.0-alpha.
|
|
50
|
+
"@patternfly/react-icons": "^6.0.0-alpha.15",
|
|
51
|
+
"@patternfly/react-styles": "^6.0.0-alpha.15",
|
|
52
|
+
"@patternfly/react-tokens": "^6.0.0-alpha.15",
|
|
52
53
|
"focus-trap": "7.5.2",
|
|
53
54
|
"react-dropzone": "^14.2.3",
|
|
54
55
|
"tslib": "^2.5.0"
|
|
@@ -73,5 +74,5 @@
|
|
|
73
74
|
"react": "^17 || ^18",
|
|
74
75
|
"react-dom": "^17 || ^18"
|
|
75
76
|
},
|
|
76
|
-
"gitHead": "
|
|
77
|
+
"gitHead": "296ac2be2f24ef201a347384c1561a311d0c8c54"
|
|
77
78
|
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
const path = require('path');
|
|
3
|
+
|
|
4
|
+
const distIndexFiles = ['esm', 'js'].map((dir) => path.join(process.cwd(), 'dist', dir, 'index.js'));
|
|
5
|
+
const distIndexDeclarationFiles = ['esm', 'js'].map((dir) => path.join(process.cwd(), 'dist', dir, 'index.d.ts'));
|
|
6
|
+
|
|
7
|
+
[...distIndexFiles, ...distIndexDeclarationFiles].forEach((file) => {
|
|
8
|
+
const fileContents = fs.readFileSync(file, 'utf8');
|
|
9
|
+
const newFileContents = fileContents
|
|
10
|
+
.split('\n')
|
|
11
|
+
.filter((line) => !line.includes('demos'))
|
|
12
|
+
.join('\n');
|
|
13
|
+
fs.writeFileSync(file, newFileContents);
|
|
14
|
+
});
|
|
@@ -183,6 +183,34 @@ test('Renders toggle icon before toggle text when togglePosition from context =
|
|
|
183
183
|
expect(toggle.firstChild).toHaveClass(styles.accordionToggleIcon);
|
|
184
184
|
});
|
|
185
185
|
|
|
186
|
+
test('Renders toggle text before toggle icon by default', () => {
|
|
187
|
+
render(
|
|
188
|
+
<AccordionContext.Provider value={{ ToggleContainer: 'h3' }}>
|
|
189
|
+
<AccordionToggle id="accordion-toggle" isExpanded>
|
|
190
|
+
Test
|
|
191
|
+
</AccordionToggle>
|
|
192
|
+
</AccordionContext.Provider>
|
|
193
|
+
);
|
|
194
|
+
|
|
195
|
+
const toggle = screen.getByRole('button');
|
|
196
|
+
|
|
197
|
+
expect(toggle.firstChild).toHaveClass(styles.accordionToggleText);
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
test('Renders toggle icon before toggle text when togglePosition from context = "start"', () => {
|
|
201
|
+
render(
|
|
202
|
+
<AccordionContext.Provider value={{ ToggleContainer: 'h3', togglePosition: 'start' }}>
|
|
203
|
+
<AccordionToggle id="accordion-toggle" isExpanded>
|
|
204
|
+
Test
|
|
205
|
+
</AccordionToggle>
|
|
206
|
+
</AccordionContext.Provider>
|
|
207
|
+
);
|
|
208
|
+
|
|
209
|
+
const toggle = screen.getByRole('button');
|
|
210
|
+
|
|
211
|
+
expect(toggle.firstChild).toHaveClass(styles.accordionToggleIcon);
|
|
212
|
+
});
|
|
213
|
+
|
|
186
214
|
test('Matches the snapshot', () => {
|
|
187
215
|
const { asFragment } = render(
|
|
188
216
|
<AccordionContext.Provider value={{ ToggleContainer: 'h3' }}>
|
|
@@ -137,7 +137,7 @@ class Checkbox extends React.Component<CheckboxProps, CheckboxState> {
|
|
|
137
137
|
const labelRendered = label ? (
|
|
138
138
|
<Label
|
|
139
139
|
className={css(styles.checkLabel, isDisabled && styles.modifiers.disabled)}
|
|
140
|
-
htmlFor={!wrapWithLabel
|
|
140
|
+
htmlFor={!wrapWithLabel ? props.id : undefined}
|
|
141
141
|
>
|
|
142
142
|
{label}
|
|
143
143
|
{isRequired && (
|
|
@@ -154,7 +154,7 @@ class Checkbox extends React.Component<CheckboxProps, CheckboxState> {
|
|
|
154
154
|
return (
|
|
155
155
|
<Component
|
|
156
156
|
className={css(styles.check, !label && styles.modifiers.standalone, className)}
|
|
157
|
-
htmlFor={wrapWithLabel
|
|
157
|
+
htmlFor={wrapWithLabel ? props.id : undefined}
|
|
158
158
|
>
|
|
159
159
|
{isLabelBeforeButton ? (
|
|
160
160
|
<>
|
|
@@ -21,7 +21,9 @@ export interface JumpLinksProps extends Omit<React.HTMLProps<HTMLElement>, 'labe
|
|
|
21
21
|
alwaysShowLabel?: boolean;
|
|
22
22
|
/** Adds an accessible label to the internal nav element. Defaults to the value of the label prop. */
|
|
23
23
|
'aria-label'?: string;
|
|
24
|
-
/**
|
|
24
|
+
/** Reference to the scrollable element to spy on. Takes precedence over scrollableSelector. Not passing a scrollableRef or scrollableSelector disables spying. */
|
|
25
|
+
scrollableRef?: HTMLElement | (() => HTMLElement) | React.RefObject<HTMLElement>;
|
|
26
|
+
/** Selector for the scrollable element to spy on. Not passing a scrollableSelector or scrollableRef disables spying. */
|
|
25
27
|
scrollableSelector?: string;
|
|
26
28
|
/** The index of the child Jump link to make active. */
|
|
27
29
|
activeIndex?: number;
|
|
@@ -81,6 +83,7 @@ export const JumpLinks: React.FunctionComponent<JumpLinksProps> = ({
|
|
|
81
83
|
children,
|
|
82
84
|
label,
|
|
83
85
|
'aria-label': ariaLabel = typeof label === 'string' ? label : null,
|
|
86
|
+
scrollableRef,
|
|
84
87
|
scrollableSelector,
|
|
85
88
|
activeIndex: activeIndexProp = 0,
|
|
86
89
|
offset = 0,
|
|
@@ -91,18 +94,29 @@ export const JumpLinks: React.FunctionComponent<JumpLinksProps> = ({
|
|
|
91
94
|
className,
|
|
92
95
|
...props
|
|
93
96
|
}: JumpLinksProps) => {
|
|
94
|
-
const hasScrollSpy = Boolean(scrollableSelector);
|
|
97
|
+
const hasScrollSpy = Boolean(scrollableRef || scrollableSelector);
|
|
95
98
|
const [scrollItems, setScrollItems] = React.useState(hasScrollSpy ? getScrollItems(children, []) : []);
|
|
96
99
|
const [activeIndex, setActiveIndex] = React.useState(activeIndexProp);
|
|
97
100
|
const [isExpanded, setIsExpanded] = React.useState(isExpandedProp);
|
|
98
101
|
// Boolean to disable scroll listener from overriding active state of clicked jumplink
|
|
99
102
|
const isLinkClicked = React.useRef(false);
|
|
100
|
-
// Allow expanding to be controlled for a niche use case
|
|
101
|
-
React.useEffect(() => setIsExpanded(isExpandedProp), [isExpandedProp]);
|
|
102
103
|
const navRef = React.useRef<HTMLElement>();
|
|
103
104
|
|
|
104
105
|
let scrollableElement: HTMLElement;
|
|
105
106
|
|
|
107
|
+
const getScrollableElement = () => {
|
|
108
|
+
if (scrollableRef) {
|
|
109
|
+
if (scrollableRef instanceof HTMLElement) {
|
|
110
|
+
return scrollableRef;
|
|
111
|
+
} else if (typeof scrollableRef === 'function') {
|
|
112
|
+
return scrollableRef();
|
|
113
|
+
}
|
|
114
|
+
return (scrollableRef as React.RefObject<HTMLElement>).current;
|
|
115
|
+
} else if (scrollableSelector) {
|
|
116
|
+
return document.querySelector(scrollableSelector) as HTMLElement;
|
|
117
|
+
}
|
|
118
|
+
};
|
|
119
|
+
|
|
106
120
|
const scrollSpy = React.useCallback(() => {
|
|
107
121
|
if (!canUseDOM || !hasScrollSpy || !(scrollableElement instanceof HTMLElement)) {
|
|
108
122
|
return;
|
|
@@ -139,14 +153,14 @@ export const JumpLinks: React.FunctionComponent<JumpLinksProps> = ({
|
|
|
139
153
|
}, [scrollItems, hasScrollSpy, scrollableElement, offset]);
|
|
140
154
|
|
|
141
155
|
React.useEffect(() => {
|
|
142
|
-
scrollableElement =
|
|
156
|
+
scrollableElement = getScrollableElement();
|
|
143
157
|
if (!(scrollableElement instanceof HTMLElement)) {
|
|
144
158
|
return;
|
|
145
159
|
}
|
|
146
160
|
scrollableElement.addEventListener('scroll', scrollSpy);
|
|
147
161
|
|
|
148
162
|
return () => scrollableElement.removeEventListener('scroll', scrollSpy);
|
|
149
|
-
}, [
|
|
163
|
+
}, [scrollableElement, scrollSpy, getScrollableElement]);
|
|
150
164
|
|
|
151
165
|
React.useEffect(() => {
|
|
152
166
|
scrollSpy();
|
|
@@ -174,7 +188,7 @@ export const JumpLinks: React.FunctionComponent<JumpLinksProps> = ({
|
|
|
174
188
|
|
|
175
189
|
if (newScrollItem) {
|
|
176
190
|
// we have to support scrolling to an offset due to sticky sidebar
|
|
177
|
-
const scrollableElement =
|
|
191
|
+
const scrollableElement = getScrollableElement() as HTMLElement;
|
|
178
192
|
if (scrollableElement instanceof HTMLElement) {
|
|
179
193
|
if (isResponsive(navRef.current)) {
|
|
180
194
|
// Remove class immediately so we can get collapsed height
|
|
@@ -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}
|
|
@@ -119,7 +119,7 @@ class Radio extends React.Component<RadioProps, { ouiaStateId: string }> {
|
|
|
119
119
|
const labelRendered = label ? (
|
|
120
120
|
<Label
|
|
121
121
|
className={css(styles.radioLabel, isDisabled && styles.modifiers.disabled)}
|
|
122
|
-
htmlFor={!wrapWithLabel
|
|
122
|
+
htmlFor={!wrapWithLabel ? props.id : undefined}
|
|
123
123
|
>
|
|
124
124
|
{label}
|
|
125
125
|
</Label>
|
|
@@ -130,7 +130,7 @@ class Radio extends React.Component<RadioProps, { ouiaStateId: string }> {
|
|
|
130
130
|
return (
|
|
131
131
|
<Component
|
|
132
132
|
className={css(styles.radio, !label && styles.modifiers.standalone, className)}
|
|
133
|
-
htmlFor={wrapWithLabel
|
|
133
|
+
htmlFor={wrapWithLabel ? props.id : undefined}
|
|
134
134
|
>
|
|
135
135
|
{isLabelBeforeButton ? (
|
|
136
136
|
<>
|
|
@@ -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>();
|
|
@@ -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
|
|
package/src/demos/JumpLinks.md
CHANGED
|
@@ -9,9 +9,10 @@ import mastheadStyles from '@patternfly/react-styles/css/components/Masthead/mas
|
|
|
9
9
|
|
|
10
10
|
JumpLinks has a scrollspy built-in to make your implementation easier. When implementing JumpLinks be sure to:
|
|
11
11
|
|
|
12
|
-
1. Find the correct
|
|
12
|
+
1. Find the correct scrollable element for your page via [Firefox's debugging scrollable overflow](https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Debug_Scrollable_Overflow) or by adding `hasOverflowScroll` to a [PageSection](/components/page#pagesection) or [PageGroup](/components/page#pagegroup).
|
|
13
13
|
- If you add `hasOverflowScroll` to a Page sub-component you should also add a relevant aria-label to that component as well.
|
|
14
|
-
2. Provide
|
|
14
|
+
2. Provide a reference to the scrollable element to `scrollableRef` prop or a CSS selector of the scrollable element to `scrollableSelector` prop.
|
|
15
|
+
3. Provide `href`s to your JumpLinksItems which match the `id` of elements you want to spy on. If you wish to scroll to a different item than you're linking to use the `node` prop.
|
|
15
16
|
|
|
16
17
|
### Scrollspy with subsections
|
|
17
18
|
|
|
@@ -141,7 +142,7 @@ ScrollspyH2 = () => {
|
|
|
141
142
|
|
|
142
143
|
This demo shows how jump links can be used in combination with a drawer.
|
|
143
144
|
|
|
144
|
-
|
|
145
|
+
This demo uses a `scrollableRef` prop on the JumpLinks component, which is a React ref to the `DrawerContent` component.
|
|
145
146
|
|
|
146
147
|
```js isFullscreen file="./examples/JumpLinks/JumpLinksWithDrawer.js"
|
|
147
148
|
```
|
|
@@ -16,11 +16,33 @@ import {
|
|
|
16
16
|
SidebarContent,
|
|
17
17
|
SidebarPanel,
|
|
18
18
|
TextContent,
|
|
19
|
-
getResizeObserver
|
|
19
|
+
getResizeObserver,
|
|
20
|
+
DrawerContext
|
|
20
21
|
} from '@patternfly/react-core';
|
|
21
22
|
import { DashboardWrapper } from '@patternfly/react-core/src/demos/DashboardWrapper';
|
|
22
23
|
import mastheadStyles from '@patternfly/react-styles/css/components/Masthead/masthead';
|
|
23
24
|
|
|
25
|
+
const JumpLinksWrapper = ({ offsetHeight, headings }) => {
|
|
26
|
+
const { drawerContentRef } = React.useContext(DrawerContext);
|
|
27
|
+
|
|
28
|
+
return (
|
|
29
|
+
<JumpLinks
|
|
30
|
+
isVertical={true}
|
|
31
|
+
label="Jump to section"
|
|
32
|
+
scrollableRef={drawerContentRef}
|
|
33
|
+
offset={offsetHeight}
|
|
34
|
+
expandable={{ default: 'expandable', md: 'nonExpandable' }}
|
|
35
|
+
>
|
|
36
|
+
{headings.map((heading) => (
|
|
37
|
+
<JumpLinksItem key={heading} href={`#jump-links-drawer-jump-links-${heading.toLowerCase()}`}>
|
|
38
|
+
{`${heading} section`}
|
|
39
|
+
<JumpLinksList></JumpLinksList>
|
|
40
|
+
</JumpLinksItem>
|
|
41
|
+
))}
|
|
42
|
+
</JumpLinks>
|
|
43
|
+
);
|
|
44
|
+
};
|
|
45
|
+
|
|
24
46
|
export const JumpLinksWithDrawer = () => {
|
|
25
47
|
const headings = ['First', 'Second', 'Third', 'Fourth', 'Fifth'];
|
|
26
48
|
|
|
@@ -65,25 +87,12 @@ export const JumpLinksWithDrawer = () => {
|
|
|
65
87
|
return (
|
|
66
88
|
<DashboardWrapper breadcrumb={null} mainContainerId="scrollable-element">
|
|
67
89
|
<Drawer isExpanded={isExpanded}>
|
|
68
|
-
<DrawerContent panelContent={panelContent}
|
|
90
|
+
<DrawerContent panelContent={panelContent}>
|
|
69
91
|
<DrawerContentBody>
|
|
70
92
|
<Sidebar>
|
|
71
93
|
<SidebarPanel variant="sticky">
|
|
72
94
|
<PageSection>
|
|
73
|
-
<
|
|
74
|
-
isVertical={true}
|
|
75
|
-
label="Jump to section"
|
|
76
|
-
scrollableSelector="#jump-links-drawer-drawer-scrollable-container"
|
|
77
|
-
offset={offsetHeight}
|
|
78
|
-
expandable={{ default: 'expandable', md: 'nonExpandable' }}
|
|
79
|
-
>
|
|
80
|
-
{headings.map((heading) => (
|
|
81
|
-
<JumpLinksItem key={heading} href={`#jump-links-drawer-jump-links-${heading.toLowerCase()}`}>
|
|
82
|
-
{`${heading} section`}
|
|
83
|
-
<JumpLinksList></JumpLinksList>
|
|
84
|
-
</JumpLinksItem>
|
|
85
|
-
))}
|
|
86
|
-
</JumpLinks>
|
|
95
|
+
<JumpLinksWrapper offsetHeight={offsetHeight} headings={headings} />
|
|
87
96
|
</PageSection>
|
|
88
97
|
</SidebarPanel>
|
|
89
98
|
<SidebarContent>
|
|
@@ -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 });
|