@patternfly/react-core 5.0.0-alpha.107 → 5.0.0-alpha.109
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 +12 -0
- package/dist/esm/components/AboutModal/package.json +1 -1
- package/dist/esm/components/Accordion/package.json +1 -1
- package/dist/esm/components/ActionList/package.json +1 -1
- package/dist/esm/components/Alert/package.json +1 -1
- package/dist/esm/components/Avatar/package.json +1 -1
- package/dist/esm/components/BackToTop/package.json +1 -1
- package/dist/esm/components/Backdrop/package.json +1 -1
- package/dist/esm/components/BackgroundImage/package.json +1 -1
- package/dist/esm/components/Badge/package.json +1 -1
- package/dist/esm/components/Banner/package.json +1 -1
- package/dist/esm/components/Brand/package.json +1 -1
- package/dist/esm/components/Breadcrumb/package.json +1 -1
- package/dist/esm/components/Button/package.json +1 -1
- package/dist/esm/components/CalendarMonth/package.json +1 -1
- package/dist/esm/components/Card/Card.d.ts +12 -5
- package/dist/esm/components/Card/Card.d.ts.map +1 -1
- package/dist/esm/components/Card/Card.js +17 -5
- package/dist/esm/components/Card/Card.js.map +1 -1
- package/dist/esm/components/Card/CardHeader.d.ts +30 -0
- package/dist/esm/components/Card/CardHeader.d.ts.map +1 -1
- package/dist/esm/components/Card/CardHeader.js +40 -5
- package/dist/esm/components/Card/CardHeader.js.map +1 -1
- package/dist/esm/components/Card/CardSelectableActions.d.ts +9 -0
- package/dist/esm/components/Card/CardSelectableActions.d.ts.map +1 -0
- package/dist/esm/components/Card/CardSelectableActions.js +10 -0
- package/dist/esm/components/Card/CardSelectableActions.js.map +1 -0
- package/dist/esm/components/Card/package.json +1 -1
- package/dist/esm/components/Checkbox/Checkbox.d.ts +2 -0
- package/dist/esm/components/Checkbox/Checkbox.d.ts.map +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/Checkbox/package.json +1 -1
- package/dist/esm/components/Chip/package.json +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.js +4 -4
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
- package/dist/esm/components/ClipboardCopy/package.json +1 -1
- package/dist/esm/components/CodeBlock/package.json +1 -1
- package/dist/esm/components/DataList/package.json +1 -1
- package/dist/esm/components/DatePicker/package.json +1 -1
- package/dist/esm/components/DescriptionList/package.json +1 -1
- package/dist/esm/components/Divider/package.json +1 -1
- package/dist/esm/components/DragDrop/package.json +1 -1
- package/dist/esm/components/Drawer/package.json +1 -1
- package/dist/esm/components/Dropdown/Dropdown.d.ts +11 -3
- package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.js +11 -5
- package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/Dropdown/package.json +1 -1
- package/dist/esm/components/DualListSelector/package.json +1 -1
- package/dist/esm/components/EmptyState/package.json +1 -1
- package/dist/esm/components/ExpandableSection/package.json +1 -1
- package/dist/esm/components/FileUpload/FileUploadField.js +2 -2
- package/dist/esm/components/FileUpload/FileUploadField.js.map +1 -1
- package/dist/esm/components/FileUpload/package.json +1 -1
- package/dist/esm/components/Form/package.json +1 -1
- package/dist/esm/components/FormControl/FormControlIcon.d.ts +16 -0
- package/dist/esm/components/FormControl/FormControlIcon.d.ts.map +1 -0
- package/dist/esm/components/FormControl/FormControlIcon.js +18 -0
- package/dist/esm/components/FormControl/FormControlIcon.js.map +1 -0
- package/dist/esm/components/FormSelect/FormSelect.d.ts +0 -2
- package/dist/esm/components/FormSelect/FormSelect.d.ts.map +1 -1
- package/dist/esm/components/FormSelect/FormSelect.js +9 -3
- package/dist/esm/components/FormSelect/FormSelect.js.map +1 -1
- package/dist/esm/components/FormSelect/package.json +1 -1
- package/dist/esm/components/HelperText/package.json +1 -1
- package/dist/esm/components/Hint/package.json +1 -1
- package/dist/esm/components/Icon/package.json +1 -1
- package/dist/esm/components/InputGroup/package.json +1 -1
- package/dist/esm/components/JumpLinks/package.json +1 -1
- package/dist/esm/components/Label/package.json +1 -1
- package/dist/esm/components/List/package.json +1 -1
- package/dist/esm/components/LoginPage/package.json +1 -1
- package/dist/esm/components/Masthead/package.json +1 -1
- package/dist/esm/components/Menu/package.json +1 -1
- package/dist/esm/components/MenuToggle/package.json +1 -1
- package/dist/esm/components/Modal/package.json +1 -1
- package/dist/esm/components/MultipleFileUpload/package.json +1 -1
- package/dist/esm/components/Nav/package.json +1 -1
- package/dist/esm/components/NotificationBadge/package.json +1 -1
- package/dist/esm/components/NotificationDrawer/package.json +1 -1
- package/dist/esm/components/NumberInput/package.json +1 -1
- package/dist/esm/components/OverflowMenu/package.json +1 -1
- package/dist/esm/components/Page/package.json +1 -1
- package/dist/esm/components/Pagination/package.json +1 -1
- package/dist/esm/components/Panel/package.json +1 -1
- package/dist/esm/components/Popover/package.json +1 -1
- package/dist/esm/components/Progress/package.json +1 -1
- package/dist/esm/components/ProgressStepper/package.json +1 -1
- package/dist/esm/components/Radio/Radio.d.ts +5 -1
- package/dist/esm/components/Radio/Radio.d.ts.map +1 -1
- package/dist/esm/components/Radio/Radio.js +3 -3
- package/dist/esm/components/Radio/Radio.js.map +1 -1
- package/dist/esm/components/Radio/package.json +1 -1
- package/dist/esm/components/SearchInput/package.json +1 -1
- package/dist/esm/components/Select/Select.d.ts +31 -5
- package/dist/esm/components/Select/Select.d.ts.map +1 -1
- package/dist/esm/components/Select/Select.js +16 -10
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/Select/SelectGroup.d.ts +3 -0
- package/dist/esm/components/Select/SelectGroup.d.ts.map +1 -1
- package/dist/esm/components/Select/SelectGroup.js.map +1 -1
- package/dist/esm/components/Select/SelectOption.d.ts +14 -1
- package/dist/esm/components/Select/SelectOption.d.ts.map +1 -1
- package/dist/esm/components/Select/SelectOption.js +4 -3
- package/dist/esm/components/Select/SelectOption.js.map +1 -1
- package/dist/esm/components/Select/package.json +1 -1
- package/dist/esm/components/Sidebar/package.json +1 -1
- package/dist/esm/components/SimpleList/package.json +1 -1
- package/dist/esm/components/Skeleton/package.json +1 -1
- package/dist/esm/components/SkipToContent/package.json +1 -1
- package/dist/esm/components/Slider/Slider.d.ts.map +1 -1
- package/dist/esm/components/Slider/Slider.js +1 -1
- package/dist/esm/components/Slider/Slider.js.map +1 -1
- package/dist/esm/components/Slider/package.json +1 -1
- package/dist/esm/components/Spinner/package.json +1 -1
- package/dist/esm/components/Switch/package.json +1 -1
- package/dist/esm/components/Tabs/package.json +1 -1
- package/dist/esm/components/Text/package.json +1 -1
- package/dist/esm/components/TextArea/TextArea.d.ts +0 -4
- package/dist/esm/components/TextArea/TextArea.d.ts.map +1 -1
- package/dist/esm/components/TextArea/TextArea.js +11 -7
- package/dist/esm/components/TextArea/TextArea.js.map +1 -1
- package/dist/esm/components/TextArea/package.json +1 -1
- package/dist/esm/components/TextInput/TextInput.d.ts +8 -11
- package/dist/esm/components/TextInput/TextInput.d.ts.map +1 -1
- package/dist/esm/components/TextInput/TextInput.js +10 -13
- package/dist/esm/components/TextInput/TextInput.js.map +1 -1
- package/dist/esm/components/TextInput/package.json +1 -1
- package/dist/esm/components/TextInputGroup/package.json +1 -1
- package/dist/esm/components/Tile/package.json +1 -1
- package/dist/esm/components/TimePicker/TimePicker.d.ts.map +1 -1
- package/dist/esm/components/TimePicker/TimePicker.js +2 -2
- package/dist/esm/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/esm/components/TimePicker/package.json +1 -1
- package/dist/esm/components/Timestamp/package.json +1 -1
- package/dist/esm/components/Title/package.json +1 -1
- package/dist/esm/components/ToggleGroup/package.json +1 -1
- package/dist/esm/components/Toolbar/package.json +1 -1
- package/dist/esm/components/Tooltip/package.json +1 -1
- package/dist/esm/components/TreeView/TreeViewSearch.d.ts.map +1 -1
- package/dist/esm/components/TreeView/TreeViewSearch.js +6 -1
- package/dist/esm/components/TreeView/TreeViewSearch.js.map +1 -1
- package/dist/esm/components/TreeView/package.json +1 -1
- package/dist/esm/components/Truncate/package.json +1 -1
- package/dist/esm/components/Wizard/hooks/package.json +1 -1
- package/dist/esm/components/Wizard/package.json +1 -1
- package/dist/esm/components/package.json +1 -1
- package/dist/esm/deprecated/components/ApplicationLauncher/package.json +1 -1
- package/dist/esm/deprecated/components/ContextSelector/package.json +1 -1
- package/dist/esm/deprecated/components/Dropdown/package.json +1 -1
- package/dist/esm/deprecated/components/OptionsMenu/package.json +1 -1
- package/dist/esm/deprecated/components/PageHeader/package.json +1 -1
- package/dist/esm/deprecated/components/Select/Select.d.ts.map +1 -1
- package/dist/esm/deprecated/components/Select/Select.js +16 -18
- package/dist/esm/deprecated/components/Select/Select.js.map +1 -1
- package/dist/esm/deprecated/components/Select/package.json +1 -1
- package/dist/esm/deprecated/components/Wizard/package.json +1 -1
- package/dist/esm/deprecated/components/package.json +1 -1
- package/dist/esm/deprecated/package.json +1 -1
- package/dist/esm/helpers/Popper/Popper.d.ts +1 -1
- package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
- package/dist/esm/helpers/Popper/thirdparty/popper-core/package.json +1 -1
- package/dist/esm/helpers/package.json +1 -1
- package/dist/esm/layouts/Bullseye/package.json +1 -1
- package/dist/esm/layouts/Flex/package.json +1 -1
- package/dist/esm/layouts/Gallery/package.json +1 -1
- package/dist/esm/layouts/Grid/package.json +1 -1
- package/dist/esm/layouts/Level/package.json +1 -1
- package/dist/esm/layouts/Split/package.json +1 -1
- package/dist/esm/layouts/Stack/package.json +1 -1
- package/dist/esm/layouts/package.json +1 -1
- package/dist/esm/next/components/package.json +1 -1
- package/dist/esm/next/package.json +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/js/components/AboutModal/package.json +1 -1
- package/dist/js/components/Accordion/package.json +1 -1
- package/dist/js/components/ActionList/package.json +1 -1
- package/dist/js/components/Alert/package.json +1 -1
- package/dist/js/components/Avatar/package.json +1 -1
- package/dist/js/components/BackToTop/package.json +1 -1
- package/dist/js/components/Backdrop/package.json +1 -1
- package/dist/js/components/BackgroundImage/package.json +1 -1
- package/dist/js/components/Badge/package.json +1 -1
- package/dist/js/components/Banner/package.json +1 -1
- package/dist/js/components/Brand/package.json +1 -1
- package/dist/js/components/Breadcrumb/package.json +1 -1
- package/dist/js/components/Button/package.json +1 -1
- package/dist/js/components/CalendarMonth/package.json +1 -1
- package/dist/js/components/Card/Card.d.ts +12 -5
- package/dist/js/components/Card/Card.d.ts.map +1 -1
- package/dist/js/components/Card/Card.js +17 -5
- package/dist/js/components/Card/Card.js.map +1 -1
- package/dist/js/components/Card/CardHeader.d.ts +30 -0
- package/dist/js/components/Card/CardHeader.d.ts.map +1 -1
- package/dist/js/components/Card/CardHeader.js +40 -5
- package/dist/js/components/Card/CardHeader.js.map +1 -1
- package/dist/js/components/Card/CardSelectableActions.d.ts +9 -0
- package/dist/js/components/Card/CardSelectableActions.d.ts.map +1 -0
- package/dist/js/components/Card/CardSelectableActions.js +14 -0
- package/dist/js/components/Card/CardSelectableActions.js.map +1 -0
- package/dist/js/components/Card/package.json +1 -1
- package/dist/js/components/Checkbox/Checkbox.d.ts +2 -0
- package/dist/js/components/Checkbox/Checkbox.d.ts.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/Checkbox/package.json +1 -1
- package/dist/js/components/Chip/package.json +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopy.js +4 -4
- package/dist/js/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
- package/dist/js/components/ClipboardCopy/package.json +1 -1
- package/dist/js/components/CodeBlock/package.json +1 -1
- package/dist/js/components/DataList/package.json +1 -1
- package/dist/js/components/DatePicker/package.json +1 -1
- package/dist/js/components/DescriptionList/package.json +1 -1
- package/dist/js/components/Divider/package.json +1 -1
- package/dist/js/components/DragDrop/package.json +1 -1
- package/dist/js/components/Drawer/package.json +1 -1
- package/dist/js/components/Dropdown/Dropdown.d.ts +11 -3
- package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.js +11 -5
- package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/js/components/Dropdown/package.json +1 -1
- package/dist/js/components/DualListSelector/package.json +1 -1
- package/dist/js/components/EmptyState/package.json +1 -1
- package/dist/js/components/ExpandableSection/package.json +1 -1
- package/dist/js/components/FileUpload/FileUploadField.js +2 -2
- package/dist/js/components/FileUpload/FileUploadField.js.map +1 -1
- package/dist/js/components/FileUpload/package.json +1 -1
- package/dist/js/components/Form/package.json +1 -1
- package/dist/js/components/FormControl/FormControlIcon.d.ts +16 -0
- package/dist/js/components/FormControl/FormControlIcon.d.ts.map +1 -0
- package/dist/js/components/FormControl/FormControlIcon.js +22 -0
- package/dist/js/components/FormControl/FormControlIcon.js.map +1 -0
- package/dist/js/components/FormSelect/FormSelect.d.ts +0 -2
- package/dist/js/components/FormSelect/FormSelect.d.ts.map +1 -1
- package/dist/js/components/FormSelect/FormSelect.js +9 -3
- package/dist/js/components/FormSelect/FormSelect.js.map +1 -1
- package/dist/js/components/FormSelect/package.json +1 -1
- package/dist/js/components/HelperText/package.json +1 -1
- package/dist/js/components/Hint/package.json +1 -1
- package/dist/js/components/Icon/package.json +1 -1
- package/dist/js/components/InputGroup/package.json +1 -1
- package/dist/js/components/JumpLinks/package.json +1 -1
- package/dist/js/components/Label/package.json +1 -1
- package/dist/js/components/List/package.json +1 -1
- package/dist/js/components/LoginPage/package.json +1 -1
- package/dist/js/components/Masthead/package.json +1 -1
- package/dist/js/components/Menu/package.json +1 -1
- package/dist/js/components/MenuToggle/package.json +1 -1
- package/dist/js/components/Modal/package.json +1 -1
- package/dist/js/components/MultipleFileUpload/package.json +1 -1
- package/dist/js/components/Nav/package.json +1 -1
- package/dist/js/components/NotificationBadge/package.json +1 -1
- package/dist/js/components/NotificationDrawer/package.json +1 -1
- package/dist/js/components/NumberInput/package.json +1 -1
- package/dist/js/components/OverflowMenu/package.json +1 -1
- package/dist/js/components/Page/package.json +1 -1
- package/dist/js/components/Pagination/package.json +1 -1
- package/dist/js/components/Panel/package.json +1 -1
- package/dist/js/components/Popover/package.json +1 -1
- package/dist/js/components/Progress/package.json +1 -1
- package/dist/js/components/ProgressStepper/package.json +1 -1
- package/dist/js/components/Radio/Radio.d.ts +5 -1
- package/dist/js/components/Radio/Radio.d.ts.map +1 -1
- package/dist/js/components/Radio/Radio.js +3 -3
- package/dist/js/components/Radio/Radio.js.map +1 -1
- package/dist/js/components/Radio/package.json +1 -1
- package/dist/js/components/SearchInput/package.json +1 -1
- package/dist/js/components/Select/Select.d.ts +31 -5
- package/dist/js/components/Select/Select.d.ts.map +1 -1
- package/dist/js/components/Select/Select.js +16 -10
- package/dist/js/components/Select/Select.js.map +1 -1
- package/dist/js/components/Select/SelectGroup.d.ts +3 -0
- package/dist/js/components/Select/SelectGroup.d.ts.map +1 -1
- package/dist/js/components/Select/SelectGroup.js.map +1 -1
- package/dist/js/components/Select/SelectOption.d.ts +14 -1
- package/dist/js/components/Select/SelectOption.d.ts.map +1 -1
- package/dist/js/components/Select/SelectOption.js +4 -4
- package/dist/js/components/Select/SelectOption.js.map +1 -1
- package/dist/js/components/Select/package.json +1 -1
- package/dist/js/components/Sidebar/package.json +1 -1
- package/dist/js/components/SimpleList/package.json +1 -1
- package/dist/js/components/Skeleton/package.json +1 -1
- package/dist/js/components/SkipToContent/package.json +1 -1
- package/dist/js/components/Slider/Slider.d.ts.map +1 -1
- package/dist/js/components/Slider/Slider.js +1 -1
- package/dist/js/components/Slider/Slider.js.map +1 -1
- package/dist/js/components/Slider/package.json +1 -1
- package/dist/js/components/Spinner/package.json +1 -1
- package/dist/js/components/Switch/package.json +1 -1
- package/dist/js/components/Tabs/package.json +1 -1
- package/dist/js/components/Text/package.json +1 -1
- package/dist/js/components/TextArea/TextArea.d.ts +0 -4
- package/dist/js/components/TextArea/TextArea.d.ts.map +1 -1
- package/dist/js/components/TextArea/TextArea.js +11 -7
- package/dist/js/components/TextArea/TextArea.js.map +1 -1
- package/dist/js/components/TextArea/package.json +1 -1
- package/dist/js/components/TextInput/TextInput.d.ts +8 -11
- package/dist/js/components/TextInput/TextInput.d.ts.map +1 -1
- package/dist/js/components/TextInput/TextInput.js +10 -13
- package/dist/js/components/TextInput/TextInput.js.map +1 -1
- package/dist/js/components/TextInput/package.json +1 -1
- package/dist/js/components/TextInputGroup/package.json +1 -1
- package/dist/js/components/Tile/package.json +1 -1
- package/dist/js/components/TimePicker/TimePicker.d.ts.map +1 -1
- package/dist/js/components/TimePicker/TimePicker.js +2 -2
- package/dist/js/components/TimePicker/TimePicker.js.map +1 -1
- package/dist/js/components/TimePicker/package.json +1 -1
- package/dist/js/components/Timestamp/package.json +1 -1
- package/dist/js/components/Title/package.json +1 -1
- package/dist/js/components/ToggleGroup/package.json +1 -1
- package/dist/js/components/Toolbar/package.json +1 -1
- package/dist/js/components/Tooltip/package.json +1 -1
- package/dist/js/components/TreeView/TreeViewSearch.d.ts.map +1 -1
- package/dist/js/components/TreeView/TreeViewSearch.js +6 -1
- package/dist/js/components/TreeView/TreeViewSearch.js.map +1 -1
- package/dist/js/components/TreeView/package.json +1 -1
- package/dist/js/components/Truncate/package.json +1 -1
- package/dist/js/components/Wizard/hooks/package.json +1 -1
- package/dist/js/components/Wizard/package.json +1 -1
- package/dist/js/components/package.json +1 -1
- package/dist/js/deprecated/components/ApplicationLauncher/package.json +1 -1
- package/dist/js/deprecated/components/ContextSelector/package.json +1 -1
- package/dist/js/deprecated/components/Dropdown/package.json +1 -1
- package/dist/js/deprecated/components/OptionsMenu/package.json +1 -1
- package/dist/js/deprecated/components/PageHeader/package.json +1 -1
- package/dist/js/deprecated/components/Select/Select.d.ts.map +1 -1
- package/dist/js/deprecated/components/Select/Select.js +16 -18
- package/dist/js/deprecated/components/Select/Select.js.map +1 -1
- package/dist/js/deprecated/components/Select/package.json +1 -1
- package/dist/js/deprecated/components/Wizard/package.json +1 -1
- package/dist/js/deprecated/components/package.json +1 -1
- package/dist/js/deprecated/package.json +1 -1
- package/dist/js/helpers/Popper/Popper.d.ts +1 -1
- package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
- package/dist/js/helpers/Popper/thirdparty/popper-core/package.json +1 -1
- package/dist/js/helpers/package.json +1 -1
- package/dist/js/layouts/Bullseye/package.json +1 -1
- package/dist/js/layouts/Flex/package.json +1 -1
- package/dist/js/layouts/Gallery/package.json +1 -1
- package/dist/js/layouts/Grid/package.json +1 -1
- package/dist/js/layouts/Level/package.json +1 -1
- package/dist/js/layouts/Split/package.json +1 -1
- package/dist/js/layouts/Stack/package.json +1 -1
- package/dist/js/layouts/package.json +1 -1
- package/dist/js/next/components/package.json +1 -1
- package/dist/js/next/package.json +1 -1
- package/dist/js/package.json +1 -1
- package/dist/umd/react-core.min.js +2 -2
- package/package.json +6 -6
- package/src/components/Card/Card.tsx +34 -9
- package/src/components/Card/CardHeader.tsx +94 -2
- package/src/components/Card/CardSelectableActions.tsx +21 -0
- package/src/components/Card/__tests__/Card.test.tsx +11 -7
- package/src/components/Card/__tests__/__snapshots__/CardHeader.test.tsx.snap +1 -3
- package/src/components/Card/examples/Card.md +59 -16
- package/src/components/Card/examples/CardClickable.tsx +54 -0
- package/src/components/Card/examples/CardClickableSelectable.tsx +94 -0
- package/src/components/Card/examples/{CardLegacySelectable.tsx → CardDeprecatedSelectable.tsx} +2 -0
- package/src/components/Card/examples/{CardSelectableA11yHighlight.tsx → CardDeprecatedSelectableA11yHighlight.tsx} +1 -1
- package/src/components/Card/examples/CardSelectable.tsx +60 -115
- package/src/components/Card/examples/CardSingleSelectable.tsx +52 -0
- package/src/components/Checkbox/Checkbox.tsx +5 -2
- package/src/components/ClipboardCopy/ClipboardCopy.tsx +4 -4
- package/src/components/ClipboardCopy/__tests__/Generated/__snapshots__/ClipboardCopy.test.tsx.snap +13 -10
- package/src/components/DatePicker/__tests__/__snapshots__/DatePicker.test.tsx.snap +67 -60
- package/src/components/Dropdown/Dropdown.tsx +25 -11
- package/src/components/Dropdown/examples/Dropdown.md +10 -1
- package/src/components/Dropdown/examples/DropdownBasic.tsx +2 -6
- package/src/components/Dropdown/examples/DropdownWithDescriptions.tsx +2 -6
- package/src/components/Dropdown/examples/DropdownWithGroups.tsx +2 -6
- package/src/components/Dropdown/examples/DropdownWithKebabToggle.tsx +2 -6
- package/src/components/FileUpload/FileUploadField.tsx +1 -1
- package/src/components/FileUpload/__tests__/__snapshots__/FileUpload.test.tsx.snap +28 -22
- package/src/components/FileUpload/__tests__/__snapshots__/FileUploadField.test.tsx.snap +28 -22
- package/src/components/FormControl/FormControlIcon.tsx +31 -0
- package/src/components/FormSelect/FormSelect.tsx +26 -20
- package/src/components/FormSelect/__tests__/FormSelect.test.tsx +2 -2
- package/src/components/FormSelect/__tests__/__snapshots__/FormSelect.test.tsx.snap +421 -178
- package/src/components/FormSelect/examples/FormSelect.md +7 -6
- package/src/components/LoginPage/__tests__/__snapshots__/LoginForm.test.tsx.snap +84 -66
- package/src/components/NumberInput/__tests__/__snapshots__/NumberInput.test.tsx.snap +217 -133
- package/src/components/Radio/Radio.tsx +7 -2
- package/src/components/SearchInput/__tests__/__snapshots__/SearchInput.test.tsx.snap +36 -27
- package/src/components/Select/Select.tsx +62 -24
- package/src/components/Select/SelectGroup.tsx +3 -0
- package/src/components/Select/SelectOption.tsx +22 -2
- package/src/components/Select/examples/Select.md +49 -2
- package/src/components/Select/examples/SelectBasic.tsx +27 -17
- package/src/components/Select/examples/SelectCheckbox.tsx +1 -3
- package/src/components/Select/examples/SelectFooter.tsx +57 -0
- package/src/components/Select/examples/SelectGrouped.tsx +14 -6
- package/src/components/Select/examples/SelectMultiTypeahead.tsx +7 -12
- package/src/components/Select/examples/SelectMultiTypeaheadCheckbox.tsx +204 -0
- package/src/components/Select/examples/SelectMultiTypeaheadCreatable.tsx +222 -0
- package/src/components/Select/examples/SelectOptionVariations.tsx +70 -0
- package/src/components/Select/examples/SelectTypeahead.tsx +13 -13
- package/src/components/Select/examples/SelectTypeaheadCreatable.tsx +220 -0
- package/src/components/Select/examples/SelectViewMore.tsx +146 -0
- package/src/components/Slider/Slider.tsx +0 -1
- package/src/components/Slider/_tests_/__snapshots__/Slider.test.tsx.snap +52 -40
- package/src/components/TextArea/TextArea.tsx +33 -26
- package/src/components/TextArea/__tests__/TextArea.test.tsx +6 -6
- package/src/components/TextArea/__tests__/__snapshots__/TextArea.test.tsx.snap +11 -8
- package/src/components/TextArea/examples/TextArea.md +8 -6
- package/src/components/TextInput/TextInput.tsx +43 -47
- package/src/components/TextInput/__tests__/TextInput.test.tsx +2 -2
- package/src/components/TextInput/__tests__/__snapshots__/TextInput.test.tsx.snap +130 -72
- package/src/components/TextInput/examples/TextInput.md +14 -5
- package/src/components/TextInput/examples/TextInputCustomIcon.tsx +30 -0
- package/src/components/TextInput/examples/TextInputCustomIconInvalid.tsx +20 -0
- package/src/components/TimePicker/TimePicker.tsx +2 -4
- package/src/components/TreeView/TreeViewSearch.tsx +9 -9
- package/src/components/TreeView/__tests__/__snapshots__/TreeView.test.tsx.snap +29 -7
- package/src/demos/ComposableMenu/ComposableMenu.md +14 -0
- package/src/demos/examples/DateTimePicker/DateTimePicker.tsx +1 -1
- package/src/deprecated/components/Select/Select.tsx +21 -25
- package/src/deprecated/components/Select/__tests__/__snapshots__/Select.test.tsx.snap +1 -2
- package/src/helpers/Popper/Popper.tsx +1 -1
- package/src/components/FormSelect/examples/FormSelectIconSpriteVariant.tsx +0 -63
- package/src/components/TextArea/examples/TextAreaIconSprite.tsx +0 -41
- package/src/components/TextInput/examples/TextInputIcon.tsx +0 -39
- package/src/components/TextInput/examples/TextInputIconSprite.tsx +0 -63
|
@@ -1,9 +1,35 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { css } from '@patternfly/react-styles';
|
|
3
3
|
import { Menu, MenuContent, MenuProps } from '../Menu';
|
|
4
|
-
import { Popper
|
|
4
|
+
import { Popper } from '../../helpers/Popper/Popper';
|
|
5
5
|
import { getOUIAProps, OUIAProps, getDefaultOUIAId } from '../../helpers';
|
|
6
6
|
|
|
7
|
+
export interface SelectPopperProps {
|
|
8
|
+
/** Vertical direction of the popper. If enableFlip is set to true, this will set the initial direction before the popper flips. */
|
|
9
|
+
direction?: 'up' | 'down';
|
|
10
|
+
/** Horizontal position of the popper */
|
|
11
|
+
position?: 'right' | 'left' | 'center';
|
|
12
|
+
/** Custom width of the popper. If the value is "trigger", it will set the width to the select toggle's width */
|
|
13
|
+
width?: string | 'trigger';
|
|
14
|
+
/** Minimum width of the popper. If the value is "trigger", it will set the min width to the select toggle's width */
|
|
15
|
+
minWidth?: string | 'trigger';
|
|
16
|
+
/** Maximum width of the popper. If the value is "trigger", it will set the max width to the select toggle's width */
|
|
17
|
+
maxWidth?: string | 'trigger';
|
|
18
|
+
/** Enable to flip the popper when it reaches the boundary */
|
|
19
|
+
enableFlip?: boolean;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export interface SelectToggleProps {
|
|
23
|
+
/** Select toggle node. */
|
|
24
|
+
toggleNode: React.ReactNode;
|
|
25
|
+
/** Reference to the toggle. */
|
|
26
|
+
toggleRef?: React.RefObject<HTMLButtonElement>;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* See the Menu documentation for additional props that may be passed.
|
|
31
|
+
*/
|
|
32
|
+
|
|
7
33
|
export interface SelectProps extends MenuProps, OUIAProps {
|
|
8
34
|
/** Anything which can be rendered in a select */
|
|
9
35
|
children?: React.ReactNode;
|
|
@@ -13,13 +39,17 @@ export interface SelectProps extends MenuProps, OUIAProps {
|
|
|
13
39
|
isOpen?: boolean;
|
|
14
40
|
/** Single itemId for single select menus, or array of itemIds for multi select. You can also specify isSelected on the SelectOption. */
|
|
15
41
|
selected?: any | any[];
|
|
16
|
-
/**
|
|
17
|
-
toggle: (toggleRef: React.RefObject<any>) => React.ReactNode;
|
|
42
|
+
/** Select toggle. The toggle should either be a renderer function which forwards the given toggle ref, or a direct ReactNode that should be passed along with the toggleRef property. */
|
|
43
|
+
toggle: SelectToggleProps | ((toggleRef: React.RefObject<any>) => React.ReactNode);
|
|
44
|
+
/** Flag indicating the toggle should be focused after a selection. If this use case is too restrictive, the optional toggleRef property with a node toggle may be used to control focus. */
|
|
45
|
+
shouldFocusToggleOnSelect?: boolean;
|
|
18
46
|
/** Function callback when user selects an option. */
|
|
19
47
|
onSelect?: (event?: React.MouseEvent<Element, MouseEvent>, itemId?: string | number) => void;
|
|
20
48
|
/** Callback to allow the select component to change the open state of the menu.
|
|
21
|
-
* Triggered by clicking outside of the menu, or by pressing
|
|
49
|
+
* Triggered by clicking outside of the menu, or by pressing any keys specificed in onOpenChangeKeys. */
|
|
22
50
|
onOpenChange?: (isOpen: boolean) => void;
|
|
51
|
+
/** @beta Keys that trigger onOpenChange, defaults to tab and escape. It is highly recommended to include Escape in the array, while Tab may be omitted if the menu contains non-menu items that are focusable. */
|
|
52
|
+
onOpenChangeKeys?: string[];
|
|
23
53
|
/** Indicates if the select should be without the outer box-shadow */
|
|
24
54
|
isPlain?: boolean;
|
|
25
55
|
/** @hide Forwarded ref */
|
|
@@ -29,7 +59,7 @@ export interface SelectProps extends MenuProps, OUIAProps {
|
|
|
29
59
|
/** @beta Determines the accessible role of the select. For a checkbox select pass in "menu". */
|
|
30
60
|
role?: string;
|
|
31
61
|
/** Additional properties to pass to the popper */
|
|
32
|
-
popperProps?:
|
|
62
|
+
popperProps?: SelectPopperProps;
|
|
33
63
|
}
|
|
34
64
|
|
|
35
65
|
const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
@@ -39,7 +69,9 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
39
69
|
isOpen,
|
|
40
70
|
selected,
|
|
41
71
|
toggle,
|
|
72
|
+
shouldFocusToggleOnSelect = false,
|
|
42
73
|
onOpenChange,
|
|
74
|
+
onOpenChangeKeys = ['Escape', 'Tab'],
|
|
43
75
|
isPlain,
|
|
44
76
|
innerRef,
|
|
45
77
|
zIndex = 9999,
|
|
@@ -48,18 +80,24 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
48
80
|
...props
|
|
49
81
|
}: SelectProps & OUIAProps) => {
|
|
50
82
|
const localMenuRef = React.useRef<HTMLDivElement>();
|
|
51
|
-
const
|
|
52
|
-
const containerRef = React.useRef<HTMLDivElement>();
|
|
83
|
+
const localToggleRef = React.useRef<HTMLButtonElement>();
|
|
53
84
|
|
|
54
85
|
const menuRef = (innerRef as React.RefObject<HTMLDivElement>) || localMenuRef;
|
|
86
|
+
const toggleRef =
|
|
87
|
+
typeof toggle === 'function' || (typeof toggle !== 'function' && !toggle.toggleRef)
|
|
88
|
+
? localToggleRef
|
|
89
|
+
: (toggle?.toggleRef as React.RefObject<HTMLButtonElement>);
|
|
90
|
+
|
|
55
91
|
React.useEffect(() => {
|
|
56
92
|
const handleMenuKeys = (event: KeyboardEvent) => {
|
|
57
93
|
// Close the menu on tab or escape if onOpenChange is provided
|
|
58
94
|
if (
|
|
59
|
-
|
|
60
|
-
|
|
95
|
+
isOpen &&
|
|
96
|
+
onOpenChange &&
|
|
97
|
+
(menuRef.current?.contains(event.target as Node) || toggleRef.current?.contains(event.target as Node))
|
|
61
98
|
) {
|
|
62
|
-
if (
|
|
99
|
+
if (onOpenChangeKeys.includes(event.key)) {
|
|
100
|
+
event.preventDefault();
|
|
63
101
|
onOpenChange(false);
|
|
64
102
|
toggleRef.current?.focus();
|
|
65
103
|
}
|
|
@@ -90,14 +128,17 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
90
128
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
91
129
|
window.removeEventListener('click', handleClick);
|
|
92
130
|
};
|
|
93
|
-
}, [isOpen, menuRef, onOpenChange]);
|
|
131
|
+
}, [isOpen, menuRef, toggleRef, onOpenChange, onOpenChangeKeys]);
|
|
94
132
|
|
|
95
133
|
const menu = (
|
|
96
134
|
<Menu
|
|
97
135
|
role={role}
|
|
98
136
|
className={css(className)}
|
|
99
137
|
ref={menuRef}
|
|
100
|
-
onSelect={(event, itemId) =>
|
|
138
|
+
onSelect={(event, itemId) => {
|
|
139
|
+
onSelect && onSelect(event, itemId);
|
|
140
|
+
shouldFocusToggleOnSelect && toggleRef.current.focus();
|
|
141
|
+
}}
|
|
101
142
|
isPlain={isPlain}
|
|
102
143
|
selected={selected}
|
|
103
144
|
{...getOUIAProps(
|
|
@@ -111,18 +152,15 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
111
152
|
</Menu>
|
|
112
153
|
);
|
|
113
154
|
return (
|
|
114
|
-
<
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
{...popperProps}
|
|
124
|
-
/>
|
|
125
|
-
</div>
|
|
155
|
+
<Popper
|
|
156
|
+
trigger={typeof toggle === 'function' ? toggle(toggleRef) : toggle.toggleNode}
|
|
157
|
+
triggerRef={toggleRef}
|
|
158
|
+
popper={menu}
|
|
159
|
+
popperRef={menuRef}
|
|
160
|
+
isVisible={isOpen}
|
|
161
|
+
zIndex={zIndex}
|
|
162
|
+
{...popperProps}
|
|
163
|
+
/>
|
|
126
164
|
);
|
|
127
165
|
};
|
|
128
166
|
|
|
@@ -2,6 +2,9 @@ import React from 'react';
|
|
|
2
2
|
import { css } from '@patternfly/react-styles';
|
|
3
3
|
import { MenuGroupProps, MenuGroup } from '../Menu';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* See the MenuGroup section of the Menu documentation for additional props that may be passed.
|
|
7
|
+
*/
|
|
5
8
|
export interface SelectGroupProps extends Omit<MenuGroupProps, 'ref'> {
|
|
6
9
|
/** Anything which can be rendered in a select group */
|
|
7
10
|
children: React.ReactNode;
|
|
@@ -2,11 +2,17 @@ import React from 'react';
|
|
|
2
2
|
import { css } from '@patternfly/react-styles';
|
|
3
3
|
import { MenuItemProps, MenuItem } from '../Menu';
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* See the MenuItem section of the Menu documentation for additional props that may be passed.
|
|
7
|
+
*/
|
|
8
|
+
|
|
5
9
|
export interface SelectOptionProps extends Omit<MenuItemProps, 'ref'> {
|
|
6
10
|
/** Anything which can be rendered in a select option */
|
|
7
11
|
children?: React.ReactNode;
|
|
8
12
|
/** Classes applied to root element of select option */
|
|
9
13
|
className?: string;
|
|
14
|
+
/** @hide Forwarded ref */
|
|
15
|
+
innerRef?: React.Ref<HTMLAnchorElement | HTMLButtonElement>;
|
|
10
16
|
/** Identifies the component in the Select onSelect callback */
|
|
11
17
|
itemId?: any;
|
|
12
18
|
/** Indicates the option has a checkbox */
|
|
@@ -17,15 +23,29 @@ export interface SelectOptionProps extends Omit<MenuItemProps, 'ref'> {
|
|
|
17
23
|
isSelected?: boolean;
|
|
18
24
|
/** Indicates the option is focused */
|
|
19
25
|
isFocused?: boolean;
|
|
26
|
+
/** Render an external link icon on focus or hover, and set the link's
|
|
27
|
+
* "target" attribute to a value of "_blank".
|
|
28
|
+
*/
|
|
29
|
+
isExternalLink?: boolean;
|
|
30
|
+
/** Render option with icon */
|
|
31
|
+
icon?: React.ReactNode;
|
|
32
|
+
/** Description of the option */
|
|
33
|
+
description?: React.ReactNode;
|
|
20
34
|
}
|
|
21
35
|
|
|
22
|
-
|
|
36
|
+
const SelectOptionBase: React.FunctionComponent<MenuItemProps> = ({
|
|
23
37
|
children,
|
|
24
38
|
className,
|
|
39
|
+
innerRef,
|
|
25
40
|
...props
|
|
26
41
|
}: SelectOptionProps) => (
|
|
27
|
-
<MenuItem className={css(className)} {...props}>
|
|
42
|
+
<MenuItem ref={innerRef} className={css(className)} {...props}>
|
|
28
43
|
{children}
|
|
29
44
|
</MenuItem>
|
|
30
45
|
);
|
|
46
|
+
|
|
47
|
+
export const SelectOption = React.forwardRef((props: SelectOptionProps, ref: React.Ref<any>) => (
|
|
48
|
+
<SelectOptionBase {...props} innerRef={ref} />
|
|
49
|
+
));
|
|
50
|
+
|
|
31
51
|
SelectOption.displayName = 'SelectOption';
|
|
@@ -3,35 +3,82 @@ id: Select
|
|
|
3
3
|
section: components
|
|
4
4
|
subsection: menus
|
|
5
5
|
cssPrefix: pf-c-select
|
|
6
|
-
propComponents:
|
|
6
|
+
propComponents:
|
|
7
|
+
['Select', 'SelectOption', 'SelectGroup', 'SelectList', 'MenuToggle', 'SelectToggleProps', 'SelectPopperProps']
|
|
7
8
|
ouia: true
|
|
8
9
|
---
|
|
9
10
|
|
|
10
11
|
import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
|
|
12
|
+
import BellIcon from '@patternfly/react-icons/dist/esm/icons/bell-icon';
|
|
11
13
|
|
|
12
14
|
## Examples
|
|
13
15
|
|
|
16
|
+
`Select` builds off of the Menu component suite to wrap commonly used properties and functions for a select menu. See the [Menu documentation](/components/menus/menu) for a full list of properties that may be passed through `Select` to further customize the select menu, or the [custom menu examples](/components/menus/custom-menus) for additional examples of fully functional menus.
|
|
17
|
+
|
|
14
18
|
### Single
|
|
15
19
|
|
|
16
20
|
```ts file="./SelectBasic.tsx"
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
### Option variations
|
|
25
|
+
|
|
26
|
+
Showcases different option variants and customizations that are commonly used in a select menu. For a more complete list, see the [Menu documentation](/components/menus/menu).
|
|
27
|
+
|
|
28
|
+
```ts file="./SelectOptionVariations.tsx"
|
|
29
|
+
|
|
17
30
|
```
|
|
18
31
|
|
|
19
32
|
### Grouped single
|
|
20
33
|
|
|
21
34
|
```ts file="./SelectGrouped.tsx"
|
|
35
|
+
|
|
22
36
|
```
|
|
23
37
|
|
|
24
38
|
### Checkbox
|
|
25
39
|
|
|
26
40
|
```ts file="./SelectCheckbox.tsx"
|
|
41
|
+
|
|
27
42
|
```
|
|
28
43
|
|
|
29
44
|
### Typeahead
|
|
30
45
|
|
|
31
46
|
```ts file="./SelectTypeahead.tsx"
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Typeahead with create option
|
|
51
|
+
|
|
52
|
+
```ts file="./SelectTypeaheadCreatable.tsx"
|
|
53
|
+
|
|
32
54
|
```
|
|
33
55
|
|
|
34
|
-
### Multiple
|
|
56
|
+
### Multiple typeahead with chips
|
|
35
57
|
|
|
36
58
|
```ts file="./SelectMultiTypeahead.tsx"
|
|
59
|
+
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Multiple typeahead with create option
|
|
63
|
+
|
|
64
|
+
```ts file="./SelectMultiTypeaheadCreatable.tsx"
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Multiple typeahead with checkboxes
|
|
69
|
+
|
|
70
|
+
```ts file="./SelectMultiTypeaheadCheckbox.tsx"
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### View more
|
|
75
|
+
|
|
76
|
+
```ts file="./SelectViewMore.tsx"
|
|
77
|
+
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Footer
|
|
81
|
+
|
|
82
|
+
```ts file="./SelectFooter.tsx"
|
|
83
|
+
|
|
37
84
|
```
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Select, SelectOption, SelectList, MenuToggle, MenuToggleElement } from '@patternfly/react-core';
|
|
2
|
+
import { Select, SelectOption, SelectList, MenuToggle, MenuToggleElement, Checkbox } from '@patternfly/react-core';
|
|
3
3
|
|
|
4
4
|
export const SelectBasic: React.FunctionComponent = () => {
|
|
5
5
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
6
6
|
const [selected, setSelected] = React.useState<string>('Select a value');
|
|
7
|
-
const
|
|
7
|
+
const [isDisabled, setIsDisabled] = React.useState<boolean>(false);
|
|
8
8
|
|
|
9
9
|
const onToggleClick = () => {
|
|
10
10
|
setIsOpen(!isOpen);
|
|
@@ -23,6 +23,7 @@ export const SelectBasic: React.FunctionComponent = () => {
|
|
|
23
23
|
ref={toggleRef}
|
|
24
24
|
onClick={onToggleClick}
|
|
25
25
|
isExpanded={isOpen}
|
|
26
|
+
isDisabled={isDisabled}
|
|
26
27
|
style={
|
|
27
28
|
{
|
|
28
29
|
width: '200px'
|
|
@@ -34,20 +35,29 @@ export const SelectBasic: React.FunctionComponent = () => {
|
|
|
34
35
|
);
|
|
35
36
|
|
|
36
37
|
return (
|
|
37
|
-
<
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
38
|
+
<React.Fragment>
|
|
39
|
+
<Checkbox
|
|
40
|
+
id="toggle-disabled"
|
|
41
|
+
label="isDisabled"
|
|
42
|
+
isChecked={isDisabled}
|
|
43
|
+
onChange={(_event, checked) => setIsDisabled(checked)}
|
|
44
|
+
style={{ marginBottom: 20 }}
|
|
45
|
+
/>
|
|
46
|
+
<Select
|
|
47
|
+
id="single-select"
|
|
48
|
+
isOpen={isOpen}
|
|
49
|
+
selected={selected}
|
|
50
|
+
onSelect={onSelect}
|
|
51
|
+
onOpenChange={(isOpen) => setIsOpen(isOpen)}
|
|
52
|
+
toggle={toggle}
|
|
53
|
+
shouldFocusToggleOnSelect
|
|
54
|
+
>
|
|
55
|
+
<SelectList>
|
|
56
|
+
<SelectOption itemId="Option 1">Option 1</SelectOption>
|
|
57
|
+
<SelectOption itemId="Option 2">Option 2</SelectOption>
|
|
58
|
+
<SelectOption itemId="Option 3">Option 3</SelectOption>
|
|
59
|
+
</SelectList>
|
|
60
|
+
</Select>
|
|
61
|
+
</React.Fragment>
|
|
52
62
|
);
|
|
53
63
|
};
|
|
@@ -4,7 +4,6 @@ import { Select, SelectOption, SelectList, MenuToggle, MenuToggleElement, Badge
|
|
|
4
4
|
export const SelectCheckbox: React.FunctionComponent = () => {
|
|
5
5
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
6
6
|
const [selectedItems, setSelectedItems] = React.useState<number[]>([]);
|
|
7
|
-
const menuRef = React.useRef<HTMLDivElement>(null);
|
|
8
7
|
|
|
9
8
|
const onToggleClick = () => {
|
|
10
9
|
setIsOpen(!isOpen);
|
|
@@ -15,7 +14,7 @@ export const SelectCheckbox: React.FunctionComponent = () => {
|
|
|
15
14
|
console.log('selected', itemId);
|
|
16
15
|
|
|
17
16
|
if (selectedItems.includes(itemId as number)) {
|
|
18
|
-
setSelectedItems(selectedItems.filter(id => id !== itemId));
|
|
17
|
+
setSelectedItems(selectedItems.filter((id) => id !== itemId));
|
|
19
18
|
} else {
|
|
20
19
|
setSelectedItems([...selectedItems, itemId as number]);
|
|
21
20
|
}
|
|
@@ -41,7 +40,6 @@ export const SelectCheckbox: React.FunctionComponent = () => {
|
|
|
41
40
|
<Select
|
|
42
41
|
role="menu"
|
|
43
42
|
id="checkbox-select"
|
|
44
|
-
ref={menuRef}
|
|
45
43
|
isOpen={isOpen}
|
|
46
44
|
selected={selectedItems}
|
|
47
45
|
onSelect={onSelect}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { MenuToggle, MenuFooter, Select, SelectList, SelectOption, Button } from '@patternfly/react-core';
|
|
3
|
+
|
|
4
|
+
export const SelectFooter: React.FunctionComponent = () => {
|
|
5
|
+
const [isOpen, setIsOpen] = React.useState<boolean>(false);
|
|
6
|
+
const [selected, setSelected] = React.useState<string>('Select a value');
|
|
7
|
+
|
|
8
|
+
const onToggleClick = () => {
|
|
9
|
+
setIsOpen(!isOpen);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const toggle = (toggleRef) => (
|
|
13
|
+
<MenuToggle
|
|
14
|
+
ref={toggleRef}
|
|
15
|
+
onClick={onToggleClick}
|
|
16
|
+
isExpanded={isOpen}
|
|
17
|
+
style={
|
|
18
|
+
{
|
|
19
|
+
width: '200px'
|
|
20
|
+
} as React.CSSProperties
|
|
21
|
+
}
|
|
22
|
+
>
|
|
23
|
+
{selected}
|
|
24
|
+
</MenuToggle>
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
function onSelect(event: React.MouseEvent | undefined, itemId: string | number | undefined) {
|
|
28
|
+
if (typeof itemId === 'undefined') {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
setSelected(itemId.toString());
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return (
|
|
36
|
+
<Select
|
|
37
|
+
isOpen={isOpen}
|
|
38
|
+
onOpenChange={(isOpen) => setIsOpen(isOpen)}
|
|
39
|
+
onOpenChangeKeys={['Escape']}
|
|
40
|
+
toggle={toggle}
|
|
41
|
+
id="menu-with-footer"
|
|
42
|
+
onSelect={onSelect}
|
|
43
|
+
selected={selected}
|
|
44
|
+
>
|
|
45
|
+
<SelectList>
|
|
46
|
+
<SelectOption itemId="Option 1">Option 1</SelectOption>
|
|
47
|
+
<SelectOption itemId="Option 2">Option 2</SelectOption>
|
|
48
|
+
<SelectOption itemId="Option 3">Option 3</SelectOption>
|
|
49
|
+
</SelectList>
|
|
50
|
+
<MenuFooter>
|
|
51
|
+
<Button variant="link" isInline>
|
|
52
|
+
Footer action
|
|
53
|
+
</Button>
|
|
54
|
+
</MenuFooter>
|
|
55
|
+
</Select>
|
|
56
|
+
);
|
|
57
|
+
};
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import {
|
|
3
|
+
Select,
|
|
4
|
+
SelectOption,
|
|
5
|
+
SelectList,
|
|
6
|
+
SelectGroup,
|
|
7
|
+
MenuToggle,
|
|
8
|
+
MenuToggleElement,
|
|
9
|
+
Divider
|
|
10
|
+
} from '@patternfly/react-core';
|
|
3
11
|
|
|
4
|
-
export const
|
|
12
|
+
export const SelectGrouped: React.FunctionComponent = () => {
|
|
5
13
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
6
14
|
const [selected, setSelected] = React.useState<string>('Select a value');
|
|
7
|
-
const menuRef = React.useRef<HTMLDivElement>(null);
|
|
8
15
|
|
|
9
16
|
const onToggleClick = () => {
|
|
10
17
|
setIsOpen(!isOpen);
|
|
@@ -35,13 +42,13 @@ export const SelectBasic: React.FunctionComponent = () => {
|
|
|
35
42
|
|
|
36
43
|
return (
|
|
37
44
|
<Select
|
|
38
|
-
id="single-select"
|
|
39
|
-
ref={menuRef}
|
|
45
|
+
id="single-grouped-select"
|
|
40
46
|
isOpen={isOpen}
|
|
41
47
|
selected={selected}
|
|
42
48
|
onSelect={onSelect}
|
|
43
|
-
onOpenChange={isOpen => setIsOpen(isOpen)}
|
|
49
|
+
onOpenChange={(isOpen) => setIsOpen(isOpen)}
|
|
44
50
|
toggle={toggle}
|
|
51
|
+
shouldFocusToggleOnSelect
|
|
45
52
|
>
|
|
46
53
|
<SelectGroup label="Group 1">
|
|
47
54
|
<SelectList>
|
|
@@ -50,6 +57,7 @@ export const SelectBasic: React.FunctionComponent = () => {
|
|
|
50
57
|
<SelectOption itemId="Option 3">Option 3</SelectOption>
|
|
51
58
|
</SelectList>
|
|
52
59
|
</SelectGroup>
|
|
60
|
+
<Divider />
|
|
53
61
|
<SelectGroup label="Group 2">
|
|
54
62
|
<SelectList>
|
|
55
63
|
<SelectOption itemId="Option 4">Option 4</SelectOption>
|
|
@@ -31,8 +31,6 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
|
|
|
31
31
|
const [selectOptions, setSelectOptions] = React.useState<SelectOptionProps[]>(initialSelectOptions);
|
|
32
32
|
const [focusedItemIndex, setFocusedItemIndex] = React.useState<number | null>(null);
|
|
33
33
|
const [activeItem, setActiveItem] = React.useState<string | null>(null);
|
|
34
|
-
|
|
35
|
-
const menuRef = React.useRef<HTMLDivElement>(null);
|
|
36
34
|
const textInputRef = React.useRef<HTMLInputElement>();
|
|
37
35
|
|
|
38
36
|
React.useEffect(() => {
|
|
@@ -40,10 +38,8 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
|
|
|
40
38
|
|
|
41
39
|
// Filter menu items based on the text input value when one exists
|
|
42
40
|
if (inputValue) {
|
|
43
|
-
newSelectOptions = initialSelectOptions.filter(menuItem =>
|
|
44
|
-
String(menuItem.children)
|
|
45
|
-
.toLowerCase()
|
|
46
|
-
.includes(inputValue.toLowerCase())
|
|
41
|
+
newSelectOptions = initialSelectOptions.filter((menuItem) =>
|
|
42
|
+
String(menuItem.children).toLowerCase().includes(inputValue.toLowerCase())
|
|
47
43
|
);
|
|
48
44
|
|
|
49
45
|
// When no options are found after filtering, display 'No results found'
|
|
@@ -87,13 +83,13 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
|
|
|
87
83
|
}
|
|
88
84
|
|
|
89
85
|
setFocusedItemIndex(indexToFocus);
|
|
90
|
-
const focusedItem = selectOptions.filter(option => !option.isDisabled)[indexToFocus];
|
|
86
|
+
const focusedItem = selectOptions.filter((option) => !option.isDisabled)[indexToFocus];
|
|
91
87
|
setActiveItem(`select-multi-typeahead-${focusedItem.itemId.replace(' ', '-')}`);
|
|
92
88
|
}
|
|
93
89
|
};
|
|
94
90
|
|
|
95
91
|
const onInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {
|
|
96
|
-
const enabledMenuItems = selectOptions.filter(menuItem => !menuItem.isDisabled);
|
|
92
|
+
const enabledMenuItems = selectOptions.filter((menuItem) => !menuItem.isDisabled);
|
|
97
93
|
const [firstMenuItem] = enabledMenuItems;
|
|
98
94
|
const focusedItem = focusedItemIndex ? enabledMenuItems[focusedItemIndex] : firstMenuItem;
|
|
99
95
|
|
|
@@ -101,7 +97,7 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
|
|
|
101
97
|
// Select the first available option
|
|
102
98
|
case 'Enter':
|
|
103
99
|
if (!isOpen) {
|
|
104
|
-
setIsOpen(prevIsOpen => !prevIsOpen);
|
|
100
|
+
setIsOpen((prevIsOpen) => !prevIsOpen);
|
|
105
101
|
} else if (isOpen && focusedItem.itemId !== 'no results') {
|
|
106
102
|
onSelect(focusedItem.itemId as string);
|
|
107
103
|
}
|
|
@@ -133,7 +129,7 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
|
|
|
133
129
|
|
|
134
130
|
if (itemId && itemId !== 'no results') {
|
|
135
131
|
setSelected(
|
|
136
|
-
selected.includes(itemId) ? selected.filter(selection => selection !== itemId) : [...selected, itemId]
|
|
132
|
+
selected.includes(itemId) ? selected.filter((selection) => selection !== itemId) : [...selected, itemId]
|
|
137
133
|
);
|
|
138
134
|
}
|
|
139
135
|
|
|
@@ -161,7 +157,7 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
|
|
|
161
157
|
{selected.map((selection, index) => (
|
|
162
158
|
<Chip
|
|
163
159
|
key={index}
|
|
164
|
-
onClick={ev => {
|
|
160
|
+
onClick={(ev) => {
|
|
165
161
|
ev.stopPropagation();
|
|
166
162
|
onSelect(selection);
|
|
167
163
|
}}
|
|
@@ -193,7 +189,6 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
|
|
|
193
189
|
return (
|
|
194
190
|
<Select
|
|
195
191
|
id="multi-typeahead-select"
|
|
196
|
-
ref={menuRef}
|
|
197
192
|
isOpen={isOpen}
|
|
198
193
|
selected={selected}
|
|
199
194
|
onSelect={(ev, selection) => onSelect(selection as string)}
|