@patternfly/react-core 6.0.0 → 6.1.0-prerelease.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +68 -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/Content/package.json +1 -1
- package/dist/dynamic/components/DataList/package.json +1 -1
- package/dist/dynamic/components/DatePicker/package.json +1 -1
- package/dist/dynamic/components/DescriptionList/package.json +1 -1
- package/dist/dynamic/components/Divider/package.json +1 -1
- package/dist/dynamic/components/Drawer/package.json +1 -1
- package/dist/dynamic/components/Dropdown/package.json +1 -1
- package/dist/dynamic/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/components/EmptyState/package.json +1 -1
- package/dist/dynamic/components/ExpandableSection/package.json +1 -1
- package/dist/dynamic/components/FileUpload/package.json +1 -1
- package/dist/dynamic/components/Form/package.json +1 -1
- package/dist/dynamic/components/FormSelect/package.json +1 -1
- package/dist/dynamic/components/HelperText/package.json +1 -1
- package/dist/dynamic/components/Hint/package.json +1 -1
- package/dist/dynamic/components/Icon/package.json +1 -1
- package/dist/dynamic/components/InputGroup/package.json +1 -1
- package/dist/dynamic/components/JumpLinks/package.json +1 -1
- package/dist/dynamic/components/Label/package.json +1 -1
- package/dist/dynamic/components/List/package.json +1 -1
- package/dist/dynamic/components/LoginPage/package.json +1 -1
- package/dist/dynamic/components/Masthead/package.json +1 -1
- package/dist/dynamic/components/Menu/package.json +1 -1
- package/dist/dynamic/components/MenuToggle/package.json +1 -1
- package/dist/dynamic/components/Modal/package.json +1 -1
- package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
- package/dist/dynamic/components/Nav/package.json +1 -1
- package/dist/dynamic/components/NotificationBadge/package.json +1 -1
- package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
- package/dist/dynamic/components/NumberInput/package.json +1 -1
- package/dist/dynamic/components/OverflowMenu/package.json +1 -1
- package/dist/dynamic/components/Page/package.json +1 -1
- package/dist/dynamic/components/Pagination/package.json +1 -1
- package/dist/dynamic/components/Panel/package.json +1 -1
- package/dist/dynamic/components/Popover/package.json +1 -1
- package/dist/dynamic/components/Progress/package.json +1 -1
- package/dist/dynamic/components/ProgressStepper/package.json +1 -1
- package/dist/dynamic/components/Radio/package.json +1 -1
- package/dist/dynamic/components/SearchInput/package.json +1 -1
- package/dist/dynamic/components/Select/package.json +1 -1
- package/dist/dynamic/components/Sidebar/package.json +1 -1
- package/dist/dynamic/components/SimpleList/package.json +1 -1
- package/dist/dynamic/components/Skeleton/package.json +1 -1
- package/dist/dynamic/components/SkipToContent/package.json +1 -1
- package/dist/dynamic/components/Slider/package.json +1 -1
- package/dist/dynamic/components/Spinner/package.json +1 -1
- package/dist/dynamic/components/Switch/package.json +1 -1
- package/dist/dynamic/components/Tabs/package.json +1 -1
- package/dist/dynamic/components/TextArea/package.json +1 -1
- package/dist/dynamic/components/TextInput/package.json +1 -1
- package/dist/dynamic/components/TextInputGroup/package.json +1 -1
- package/dist/dynamic/components/TimePicker/package.json +1 -1
- package/dist/dynamic/components/Timestamp/package.json +1 -1
- package/dist/dynamic/components/Title/package.json +1 -1
- package/dist/dynamic/components/ToggleGroup/package.json +1 -1
- package/dist/dynamic/components/Toolbar/package.json +1 -1
- package/dist/dynamic/components/Tooltip/package.json +1 -1
- package/dist/dynamic/components/TreeView/package.json +1 -1
- package/dist/dynamic/components/Truncate/package.json +1 -1
- package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
- package/dist/dynamic/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
- package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
- package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
- package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
- package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
- package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
- package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
- package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
- package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
- package/dist/dynamic/helpers/constants/package.json +1 -1
- package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
- package/dist/dynamic/helpers/fileUtils/package.json +1 -1
- package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
- package/dist/dynamic/helpers/package.json +1 -1
- package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
- package/dist/dynamic/helpers/typeUtils/package.json +1 -1
- package/dist/dynamic/helpers/useInterval/package.json +1 -1
- package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
- package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
- package/dist/dynamic/helpers/util/package.json +1 -1
- package/dist/dynamic/layouts/Bullseye/package.json +1 -1
- package/dist/dynamic/layouts/Flex/package.json +1 -1
- package/dist/dynamic/layouts/Gallery/package.json +1 -1
- package/dist/dynamic/layouts/Grid/package.json +1 -1
- package/dist/dynamic/layouts/Level/package.json +1 -1
- package/dist/dynamic/layouts/Split/package.json +1 -1
- package/dist/dynamic/layouts/Stack/package.json +1 -1
- package/dist/dynamic/styles/package.json +1 -1
- package/dist/dynamic-modules.json +1 -0
- package/dist/esm/components/Dropdown/Dropdown.d.ts +2 -0
- package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.js +12 -3
- package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/Menu/MenuContainer.d.ts +2 -0
- package/dist/esm/components/Menu/MenuContainer.d.ts.map +1 -1
- package/dist/esm/components/Menu/MenuContainer.js +21 -4
- package/dist/esm/components/Menu/MenuContainer.js.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggleCheckbox.d.ts +1 -1
- package/dist/esm/components/MenuToggle/MenuToggleCheckbox.d.ts.map +1 -1
- package/dist/esm/components/Modal/Modal.d.ts +2 -2
- package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
- package/dist/esm/components/Modal/Modal.js +13 -20
- package/dist/esm/components/Modal/Modal.js.map +1 -1
- package/dist/esm/components/Modal/ModalContent.d.ts +2 -0
- package/dist/esm/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/esm/components/Modal/ModalContent.js +2 -2
- package/dist/esm/components/Modal/ModalContent.js.map +1 -1
- package/dist/esm/components/Select/Select.d.ts +4 -0
- package/dist/esm/components/Select/Select.d.ts.map +1 -1
- package/dist/esm/components/Select/Select.js +12 -3
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/Toolbar/ToolbarFilter.d.ts.map +1 -1
- package/dist/esm/components/Toolbar/ToolbarFilter.js +4 -2
- package/dist/esm/components/Toolbar/ToolbarFilter.js.map +1 -1
- package/dist/esm/demos/DashboardHeader.d.ts.map +1 -1
- package/dist/esm/demos/DashboardHeader.js +2 -4
- package/dist/esm/demos/DashboardHeader.js.map +1 -1
- package/dist/esm/deprecated/components/Modal/Modal.d.ts +2 -2
- package/dist/esm/deprecated/components/Modal/Modal.d.ts.map +1 -1
- package/dist/esm/deprecated/components/Modal/Modal.js +13 -20
- package/dist/esm/deprecated/components/Modal/Modal.js.map +1 -1
- package/dist/esm/deprecated/components/Modal/ModalContent.d.ts +2 -0
- package/dist/esm/deprecated/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/esm/deprecated/components/Modal/ModalContent.js +2 -2
- package/dist/esm/deprecated/components/Modal/ModalContent.js.map +1 -1
- package/dist/esm/helpers/KeyboardHandler.d.ts +7 -0
- package/dist/esm/helpers/KeyboardHandler.d.ts.map +1 -1
- package/dist/esm/helpers/KeyboardHandler.js +25 -0
- package/dist/esm/helpers/KeyboardHandler.js.map +1 -1
- package/dist/esm/layouts/Split/Split.d.ts +4 -4
- package/dist/esm/layouts/Split/Split.d.ts.map +1 -1
- package/dist/esm/layouts/Split/SplitItem.d.ts +5 -3
- package/dist/esm/layouts/Split/SplitItem.d.ts.map +1 -1
- package/dist/esm/layouts/Split/SplitItem.js +3 -2
- package/dist/esm/layouts/Split/SplitItem.js.map +1 -1
- package/dist/esm/layouts/Stack/Stack.d.ts +3 -3
- package/dist/esm/layouts/Stack/Stack.d.ts.map +1 -1
- package/dist/esm/layouts/Stack/StackItem.d.ts +5 -3
- package/dist/esm/layouts/Stack/StackItem.d.ts.map +1 -1
- package/dist/esm/layouts/Stack/StackItem.js +3 -2
- package/dist/esm/layouts/Stack/StackItem.js.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.d.ts +2 -0
- package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.js +11 -2
- package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/js/components/Menu/MenuContainer.d.ts +2 -0
- package/dist/js/components/Menu/MenuContainer.d.ts.map +1 -1
- package/dist/js/components/Menu/MenuContainer.js +22 -5
- package/dist/js/components/Menu/MenuContainer.js.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggleCheckbox.d.ts +1 -1
- package/dist/js/components/MenuToggle/MenuToggleCheckbox.d.ts.map +1 -1
- package/dist/js/components/Modal/Modal.d.ts +2 -2
- package/dist/js/components/Modal/Modal.d.ts.map +1 -1
- package/dist/js/components/Modal/Modal.js +13 -20
- package/dist/js/components/Modal/Modal.js.map +1 -1
- package/dist/js/components/Modal/ModalContent.d.ts +2 -0
- package/dist/js/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/js/components/Modal/ModalContent.js +2 -2
- package/dist/js/components/Modal/ModalContent.js.map +1 -1
- package/dist/js/components/Select/Select.d.ts +4 -0
- package/dist/js/components/Select/Select.d.ts.map +1 -1
- package/dist/js/components/Select/Select.js +11 -2
- package/dist/js/components/Select/Select.js.map +1 -1
- package/dist/js/components/Toolbar/ToolbarFilter.d.ts.map +1 -1
- package/dist/js/components/Toolbar/ToolbarFilter.js +4 -2
- package/dist/js/components/Toolbar/ToolbarFilter.js.map +1 -1
- package/dist/js/demos/DashboardHeader.d.ts.map +1 -1
- package/dist/js/demos/DashboardHeader.js +2 -4
- package/dist/js/demos/DashboardHeader.js.map +1 -1
- package/dist/js/deprecated/components/Modal/Modal.d.ts +2 -2
- package/dist/js/deprecated/components/Modal/Modal.d.ts.map +1 -1
- package/dist/js/deprecated/components/Modal/Modal.js +13 -20
- package/dist/js/deprecated/components/Modal/Modal.js.map +1 -1
- package/dist/js/deprecated/components/Modal/ModalContent.d.ts +2 -0
- package/dist/js/deprecated/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/js/deprecated/components/Modal/ModalContent.js +2 -2
- package/dist/js/deprecated/components/Modal/ModalContent.js.map +1 -1
- package/dist/js/helpers/KeyboardHandler.d.ts +7 -0
- package/dist/js/helpers/KeyboardHandler.d.ts.map +1 -1
- package/dist/js/helpers/KeyboardHandler.js +27 -1
- package/dist/js/helpers/KeyboardHandler.js.map +1 -1
- package/dist/js/layouts/Split/Split.d.ts +4 -4
- package/dist/js/layouts/Split/Split.d.ts.map +1 -1
- package/dist/js/layouts/Split/SplitItem.d.ts +5 -3
- package/dist/js/layouts/Split/SplitItem.d.ts.map +1 -1
- package/dist/js/layouts/Split/SplitItem.js +3 -2
- package/dist/js/layouts/Split/SplitItem.js.map +1 -1
- package/dist/js/layouts/Stack/Stack.d.ts +3 -3
- package/dist/js/layouts/Stack/Stack.d.ts.map +1 -1
- package/dist/js/layouts/Stack/StackItem.d.ts +5 -3
- package/dist/js/layouts/Stack/StackItem.d.ts.map +1 -1
- package/dist/js/layouts/Stack/StackItem.js +3 -2
- package/dist/js/layouts/Stack/StackItem.js.map +1 -1
- package/dist/umd/assets/{output-DPVTymX-.css → output-K5btXEZY.css} +11135 -11097
- package/dist/umd/react-core.min.js +4 -4
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +9 -9
- package/src/components/ActionList/examples/ActionListSingleGroup.tsx +2 -3
- package/src/components/Card/examples/CardExpandable.tsx +2 -3
- package/src/components/Card/examples/CardExpandableWithIcon.tsx +2 -3
- package/src/components/Card/examples/CardHeaderInCardHead.tsx +2 -3
- package/src/components/Card/examples/CardOnlyActionsInCardHead.tsx +2 -3
- package/src/components/Card/examples/CardWithImageAndActions.tsx +2 -3
- package/src/components/Checkbox/examples/CheckboxReversed.tsx +1 -1
- package/src/components/DataList/examples/DataList.md +16 -4
- package/src/components/DataList/examples/DataListActions.tsx +2 -3
- package/src/components/DataList/examples/DataListCheckboxes.tsx +6 -9
- package/src/components/DataList/examples/DataListClickableRows.tsx +4 -6
- package/src/components/DataList/examples/DataListExpandable.tsx +6 -9
- package/src/components/DataList/examples/DataListMixedExpandable.tsx +6 -9
- package/src/components/DataList/examples/DataListWidthModifiers.tsx +4 -6
- package/src/components/Dropdown/Dropdown.tsx +13 -1
- package/src/components/Dropdown/examples/DropdownWithKebabToggle.tsx +2 -3
- package/src/components/DualListSelector/examples/DualListSelector.md +16 -14
- package/src/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +4 -6
- package/src/components/DualListSelector/examples/DualListSelectorTree.tsx +33 -32
- package/src/components/FileUpload/__tests__/__snapshots__/FileUpload.test.tsx.snap +1 -1
- package/src/components/Hint/examples/HintBasicWithTitle.tsx +2 -3
- package/src/components/Hint/examples/HintBasicWithoutTitle.tsx +2 -3
- package/src/components/Label/examples/LabelGroupEditableAddModal.tsx +2 -2
- package/src/components/Menu/MenuContainer.tsx +24 -3
- package/src/components/MenuToggle/MenuToggleCheckbox.tsx +1 -1
- package/src/components/MenuToggle/examples/MenuToggle.md +4 -16
- package/src/components/Modal/Modal.tsx +13 -18
- package/src/components/Modal/ModalContent.tsx +4 -1
- package/src/components/Modal/__tests__/Modal.test.tsx +45 -0
- package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUpload.test.tsx.snap +3 -3
- package/src/components/OverflowMenu/examples/OverflowMenuBreakpointOnContainer.tsx +2 -3
- package/src/components/OverflowMenu/examples/OverflowMenuGroupTypes.tsx +2 -3
- package/src/components/OverflowMenu/examples/OverflowMenuMultiGroup.tsx +2 -3
- package/src/components/OverflowMenu/examples/OverflowMenuPersistent.tsx +2 -3
- package/src/components/OverflowMenu/examples/OverflowMenuSimple.tsx +2 -3
- package/src/components/Select/Select.tsx +16 -1
- package/src/components/Select/examples/SelectMultiTypeahead.tsx +1 -1
- package/src/components/Select/examples/SelectMultiTypeaheadCheckbox.tsx +1 -1
- package/src/components/Select/examples/SelectMultiTypeaheadCreatable.tsx +1 -1
- package/src/components/Select/examples/SelectTypeahead.tsx +1 -1
- package/src/components/Select/examples/SelectTypeaheadCreatable.tsx +1 -1
- package/src/components/Toolbar/ToolbarFilter.tsx +2 -1
- package/src/components/Toolbar/examples/ToolbarStacked.tsx +2 -3
- package/src/components/Toolbar/examples/ToolbarWithFilters.tsx +2 -3
- package/src/components/TreeView/examples/TreeViewWithActionItems.tsx +2 -3
- package/src/demos/CardView/examples/CardView.tsx +4 -6
- package/src/demos/CustomMenus/examples/ApplicationLauncherDemo.tsx +2 -3
- package/src/demos/DashboardHeader.tsx +4 -6
- package/src/demos/DataList/examples/DataListBasic.tsx +1 -3
- package/src/demos/DataList/examples/DataListExpandableControlInToolbar.tsx +7 -10
- package/src/demos/NotificationDrawer/examples/NotificationDrawerBasic.tsx +12 -18
- package/src/demos/NotificationDrawer/examples/NotificationDrawerGrouped.tsx +20 -30
- package/src/demos/RTL/examples/PaginatedTable.jsx +4 -6
- package/src/demos/RTL/examples/PaginatedTable.tsx +4 -6
- package/src/demos/examples/AlertGroup/AlertGroupToastWithNotificationDrawer.tsx +4 -6
- package/src/demos/examples/Card/CardHorizontalGrid.tsx +2 -3
- package/src/demos/examples/Masthead/MastheadWithHorizontalNav.tsx +4 -6
- package/src/demos/examples/Masthead/MastheadWithUtilitiesAndUserDropdownMenu.tsx +6 -9
- package/src/demos/examples/Nav/NavFlyout.tsx +4 -6
- package/src/demos/examples/Nav/NavHorizontal.tsx +4 -6
- package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +4 -6
- package/src/demos/examples/Nav/NavManual.tsx +4 -6
- package/src/demos/examples/Page/PageContextSelector.tsx +4 -6
- package/src/demos/examples/Page/PageStickySectionBreadcrumb.tsx +4 -6
- package/src/demos/examples/Page/PageStickySectionGroup.tsx +4 -6
- package/src/demos/examples/Page/PageStickySectionGroupAlternate.tsx +4 -6
- package/src/demos/examples/PrimaryDetail/PrimaryDetailCardView.tsx +4 -6
- package/src/demos/examples/Tabs/TabsAndTable.tsx +2 -3
- package/src/deprecated/components/Modal/Modal.tsx +13 -18
- package/src/deprecated/components/Modal/ModalContent.tsx +4 -1
- package/src/deprecated/components/Modal/__tests__/Modal.test.tsx +28 -0
- package/src/helpers/KeyboardHandler.tsx +27 -0
- package/src/layouts/Split/Split.tsx +4 -4
- package/src/layouts/Split/SplitItem.tsx +14 -8
- package/src/layouts/Split/__tests__/Split.test.tsx +18 -0
- package/src/layouts/Split/__tests__/__snapshots__/Split.test.tsx.snap +28 -0
- package/src/layouts/Stack/Stack.tsx +3 -3
- package/src/layouts/Stack/StackItem.tsx +14 -8
- package/src/layouts/Stack/__tests__/Stack.test.tsx +20 -2
- package/src/layouts/Stack/__tests__/__snapshots__/Stack.test.tsx.snap +30 -2
|
@@ -87,7 +87,7 @@ exports[`simple fileupload 1`] = `
|
|
|
87
87
|
</span>
|
|
88
88
|
</div>
|
|
89
89
|
<input
|
|
90
|
-
style="
|
|
90
|
+
style="border: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); height: 1px; margin: 0px -1px -1px 0px; overflow: hidden; padding: 0px; position: absolute; width: 1px; white-space: nowrap;"
|
|
91
91
|
tabindex="-1"
|
|
92
92
|
type="file"
|
|
93
93
|
/>
|
|
@@ -200,8 +200,8 @@ export const LabelGroupEditableAddModal: React.FunctionComponent = () => {
|
|
|
200
200
|
};
|
|
201
201
|
|
|
202
202
|
const iconToggle = (
|
|
203
|
-
<MenuToggle ref={iconToggleRef} onClick={onIconToggleClick} isExpanded={isIconOpen}>
|
|
204
|
-
{icon
|
|
203
|
+
<MenuToggle ref={iconToggleRef} onClick={onIconToggleClick} isExpanded={isIconOpen} icon={icon}>
|
|
204
|
+
{icon ? '' : 'Select'}
|
|
205
205
|
</MenuToggle>
|
|
206
206
|
);
|
|
207
207
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import { Popper } from '../../helpers
|
|
2
|
+
import { onToggleArrowKeydownDefault, Popper } from '../../helpers';
|
|
3
3
|
|
|
4
4
|
export interface MenuPopperProps {
|
|
5
5
|
/** Vertical direction of the popper. If enableFlip is set to true, this will set the initial direction before the popper flips. */
|
|
@@ -17,6 +17,7 @@ export interface MenuPopperProps {
|
|
|
17
17
|
/** Flag to prevent the popper from overflowing its container and becoming partially obscured. */
|
|
18
18
|
preventOverflow?: boolean;
|
|
19
19
|
}
|
|
20
|
+
|
|
20
21
|
export interface MenuContainerProps {
|
|
21
22
|
/** Menu to be rendered */
|
|
22
23
|
menu: React.ReactElement<any, string | React.JSXElementConstructor<any>>;
|
|
@@ -33,6 +34,8 @@ export interface MenuContainerProps {
|
|
|
33
34
|
onOpenChange?: (isOpen: boolean) => void;
|
|
34
35
|
/** 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. */
|
|
35
36
|
onOpenChangeKeys?: string[];
|
|
37
|
+
/** Callback to override the toggle keydown behavior. By default, when the toggle has focus and the menu is open, pressing the up/down arrow keys will focus a valid non-disabled menu item - the first item for the down arrow key and last item for the up arrow key. */
|
|
38
|
+
onToggleKeydown?: (event: KeyboardEvent) => void;
|
|
36
39
|
/** z-index of the dropdown menu */
|
|
37
40
|
zIndex?: number;
|
|
38
41
|
/** Additional properties to pass to the Popper */
|
|
@@ -55,10 +58,11 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
|
|
|
55
58
|
toggle,
|
|
56
59
|
toggleRef,
|
|
57
60
|
onOpenChange,
|
|
61
|
+
onToggleKeydown,
|
|
58
62
|
zIndex = 9999,
|
|
59
63
|
popperProps,
|
|
60
64
|
onOpenChangeKeys = ['Escape', 'Tab'],
|
|
61
|
-
shouldFocusFirstItemOnOpen =
|
|
65
|
+
shouldFocusFirstItemOnOpen = false,
|
|
62
66
|
shouldPreventScrollOnItemFocus = true,
|
|
63
67
|
focusTimeoutDelay = 0
|
|
64
68
|
}: MenuContainerProps) => {
|
|
@@ -90,6 +94,14 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
|
|
|
90
94
|
toggleRef.current?.focus();
|
|
91
95
|
}
|
|
92
96
|
}
|
|
97
|
+
|
|
98
|
+
if (toggleRef.current?.contains(event.target as Node)) {
|
|
99
|
+
if (onToggleKeydown) {
|
|
100
|
+
onToggleKeydown(event);
|
|
101
|
+
} else if (isOpen) {
|
|
102
|
+
onToggleArrowKeydownDefault(event, menuRef);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
93
105
|
};
|
|
94
106
|
|
|
95
107
|
const handleClick = (event: MouseEvent) => {
|
|
@@ -108,7 +120,16 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
|
|
|
108
120
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
109
121
|
window.removeEventListener('click', handleClick);
|
|
110
122
|
};
|
|
111
|
-
}, [
|
|
123
|
+
}, [
|
|
124
|
+
focusTimeoutDelay,
|
|
125
|
+
isOpen,
|
|
126
|
+
menuRef,
|
|
127
|
+
onOpenChange,
|
|
128
|
+
onOpenChangeKeys,
|
|
129
|
+
onToggleKeydown,
|
|
130
|
+
shouldPreventScrollOnItemFocus,
|
|
131
|
+
toggleRef
|
|
132
|
+
]);
|
|
112
133
|
|
|
113
134
|
return (
|
|
114
135
|
<Popper
|
|
@@ -20,7 +20,7 @@ export interface MenuToggleCheckboxProps
|
|
|
20
20
|
/** Flag to set the default checked value of the checkbox when it is uncontrolled by React state.
|
|
21
21
|
* To make the checkbox controlled instead use the isChecked prop, but do not use both.
|
|
22
22
|
*/
|
|
23
|
-
defaultChecked?: boolean
|
|
23
|
+
defaultChecked?: boolean;
|
|
24
24
|
/** A callback for when the checkbox selection changes */
|
|
25
25
|
onChange?: (checked: boolean, event: React.FormEvent<HTMLInputElement>) => void;
|
|
26
26
|
/** Element to be rendered inside the <span> */
|
|
@@ -81,36 +81,24 @@ For most basic icons, it is recommended to wrap it inside our [icon component](/
|
|
|
81
81
|
|
|
82
82
|
```ts
|
|
83
83
|
import React from 'react';
|
|
84
|
-
import { MenuToggle
|
|
84
|
+
import { MenuToggle } from '@patternfly/react-core';
|
|
85
85
|
import CogIcon from '@patternfly/react-icons/dist/esm/icons/cog-icon';
|
|
86
86
|
|
|
87
87
|
<React.Fragment>
|
|
88
88
|
<MenuToggle
|
|
89
|
-
icon={
|
|
90
|
-
<Icon>
|
|
91
|
-
<CogIcon />
|
|
92
|
-
</Icon>
|
|
93
|
-
}
|
|
89
|
+
icon={<CogIcon />}
|
|
94
90
|
variant="primary"
|
|
95
91
|
>
|
|
96
92
|
Icon
|
|
97
93
|
</MenuToggle>{' '}
|
|
98
94
|
<MenuToggle
|
|
99
|
-
icon={
|
|
100
|
-
<Icon>
|
|
101
|
-
<CogIcon />
|
|
102
|
-
</Icon>
|
|
103
|
-
}
|
|
95
|
+
icon={<CogIcon />}
|
|
104
96
|
variant="secondary"
|
|
105
97
|
>
|
|
106
98
|
Icon
|
|
107
99
|
</MenuToggle>{' '}
|
|
108
100
|
<MenuToggle
|
|
109
|
-
icon={
|
|
110
|
-
<Icon>
|
|
111
|
-
<CogIcon />
|
|
112
|
-
</Icon>
|
|
113
|
-
}
|
|
101
|
+
icon={<CogIcon />}
|
|
114
102
|
variant="secondary"
|
|
115
103
|
isDisabled
|
|
116
104
|
>
|
|
@@ -60,7 +60,6 @@ export enum ModalVariant {
|
|
|
60
60
|
}
|
|
61
61
|
|
|
62
62
|
interface ModalState {
|
|
63
|
-
container: HTMLElement;
|
|
64
63
|
ouiaStateId: string;
|
|
65
64
|
}
|
|
66
65
|
|
|
@@ -68,6 +67,7 @@ class Modal extends React.Component<ModalProps, ModalState> {
|
|
|
68
67
|
static displayName = 'Modal';
|
|
69
68
|
static currentId = 0;
|
|
70
69
|
boxId = '';
|
|
70
|
+
backdropId = '';
|
|
71
71
|
|
|
72
72
|
static defaultProps: PickOptional<ModalProps> = {
|
|
73
73
|
isOpen: false,
|
|
@@ -80,10 +80,11 @@ class Modal extends React.Component<ModalProps, ModalState> {
|
|
|
80
80
|
constructor(props: ModalProps) {
|
|
81
81
|
super(props);
|
|
82
82
|
const boxIdNum = Modal.currentId++;
|
|
83
|
+
const backdropId = boxIdNum + 1;
|
|
83
84
|
this.boxId = props.id || `pf-modal-part-${boxIdNum}`;
|
|
85
|
+
this.backdropId = `pf-modal-part-${backdropId}`;
|
|
84
86
|
|
|
85
87
|
this.state = {
|
|
86
|
-
container: undefined,
|
|
87
88
|
ouiaStateId: getDefaultOUIAId(Modal.displayName, props.variant)
|
|
88
89
|
};
|
|
89
90
|
}
|
|
@@ -107,7 +108,7 @@ class Modal extends React.Component<ModalProps, ModalState> {
|
|
|
107
108
|
const target: HTMLElement = this.getElement(appendTo);
|
|
108
109
|
const bodyChildren = target.children;
|
|
109
110
|
for (const child of Array.from(bodyChildren)) {
|
|
110
|
-
if (child !== this.
|
|
111
|
+
if (child.id !== this.backdropId) {
|
|
111
112
|
hide ? child.setAttribute('aria-hidden', '' + hide) : child.removeAttribute('aria-hidden');
|
|
112
113
|
}
|
|
113
114
|
}
|
|
@@ -118,36 +119,31 @@ class Modal extends React.Component<ModalProps, ModalState> {
|
|
|
118
119
|
componentDidMount() {
|
|
119
120
|
const { appendTo } = this.props;
|
|
120
121
|
const target: HTMLElement = this.getElement(appendTo);
|
|
121
|
-
const container = document.createElement('div');
|
|
122
|
-
this.setState({ container });
|
|
123
|
-
target.appendChild(container);
|
|
124
122
|
target.addEventListener('keydown', this.handleEscKeyClick, false);
|
|
125
123
|
|
|
126
124
|
if (this.props.isOpen) {
|
|
127
125
|
target.classList.add(css(styles.backdropOpen));
|
|
128
|
-
|
|
129
|
-
target.classList.remove(css(styles.backdropOpen));
|
|
126
|
+
this.toggleSiblingsFromScreenReaders(true);
|
|
130
127
|
}
|
|
131
128
|
}
|
|
132
129
|
|
|
133
|
-
componentDidUpdate() {
|
|
130
|
+
componentDidUpdate(prevProps: ModalProps) {
|
|
134
131
|
const { appendTo } = this.props;
|
|
135
132
|
const target: HTMLElement = this.getElement(appendTo);
|
|
136
133
|
if (this.props.isOpen) {
|
|
137
134
|
target.classList.add(css(styles.backdropOpen));
|
|
138
135
|
this.toggleSiblingsFromScreenReaders(true);
|
|
139
136
|
} else {
|
|
140
|
-
|
|
141
|
-
|
|
137
|
+
if (prevProps.isOpen !== this.props.isOpen) {
|
|
138
|
+
target.classList.remove(css(styles.backdropOpen));
|
|
139
|
+
this.toggleSiblingsFromScreenReaders(false);
|
|
140
|
+
}
|
|
142
141
|
}
|
|
143
142
|
}
|
|
144
143
|
|
|
145
144
|
componentWillUnmount() {
|
|
146
145
|
const { appendTo } = this.props;
|
|
147
146
|
const target: HTMLElement = this.getElement(appendTo);
|
|
148
|
-
if (this.state.container) {
|
|
149
|
-
target.removeChild(this.state.container);
|
|
150
|
-
}
|
|
151
147
|
target.removeEventListener('keydown', this.handleEscKeyClick, false);
|
|
152
148
|
target.classList.remove(css(styles.backdropOpen));
|
|
153
149
|
this.toggleSiblingsFromScreenReaders(false);
|
|
@@ -155,7 +151,6 @@ class Modal extends React.Component<ModalProps, ModalState> {
|
|
|
155
151
|
|
|
156
152
|
render() {
|
|
157
153
|
const {
|
|
158
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
159
154
|
appendTo,
|
|
160
155
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
161
156
|
onEscapePress,
|
|
@@ -168,15 +163,15 @@ class Modal extends React.Component<ModalProps, ModalState> {
|
|
|
168
163
|
elementToFocus,
|
|
169
164
|
...props
|
|
170
165
|
} = this.props;
|
|
171
|
-
const { container } = this.state;
|
|
172
166
|
|
|
173
|
-
if (!canUseDOM || !
|
|
167
|
+
if (!canUseDOM || !this.getElement(appendTo)) {
|
|
174
168
|
return null;
|
|
175
169
|
}
|
|
176
170
|
|
|
177
171
|
return ReactDOM.createPortal(
|
|
178
172
|
<ModalContent
|
|
179
173
|
boxId={this.boxId}
|
|
174
|
+
backdropId={this.backdropId}
|
|
180
175
|
aria-label={ariaLabel}
|
|
181
176
|
aria-describedby={ariaDescribedby}
|
|
182
177
|
aria-labelledby={ariaLabelledby}
|
|
@@ -187,7 +182,7 @@ class Modal extends React.Component<ModalProps, ModalState> {
|
|
|
187
182
|
backdropClassName={props.backdropClassName}
|
|
188
183
|
{...props}
|
|
189
184
|
/>,
|
|
190
|
-
|
|
185
|
+
this.getElement(appendTo)
|
|
191
186
|
) as React.ReactElement;
|
|
192
187
|
}
|
|
193
188
|
}
|
|
@@ -16,6 +16,8 @@ export interface ModalContentProps extends OUIAProps {
|
|
|
16
16
|
'aria-labelledby'?: string;
|
|
17
17
|
/** Id of the modal box container. */
|
|
18
18
|
boxId: string;
|
|
19
|
+
/** Id of the backdrop. */
|
|
20
|
+
backdropId?: string;
|
|
19
21
|
/** Content rendered inside the modal. */
|
|
20
22
|
children: React.ReactNode;
|
|
21
23
|
/** Additional classes added to the modal box. */
|
|
@@ -63,6 +65,7 @@ export const ModalContent: React.FunctionComponent<ModalContentProps> = ({
|
|
|
63
65
|
width,
|
|
64
66
|
maxWidth,
|
|
65
67
|
boxId,
|
|
68
|
+
backdropId,
|
|
66
69
|
disableFocusTrap = false,
|
|
67
70
|
ouiaId,
|
|
68
71
|
ouiaSafe = true,
|
|
@@ -109,7 +112,7 @@ export const ModalContent: React.FunctionComponent<ModalContentProps> = ({
|
|
|
109
112
|
</ModalBox>
|
|
110
113
|
);
|
|
111
114
|
return (
|
|
112
|
-
<Backdrop className={css(backdropClassName)}>
|
|
115
|
+
<Backdrop className={css(backdropClassName)} id={backdropId}>
|
|
113
116
|
<FocusTrap
|
|
114
117
|
active={!disableFocusTrap}
|
|
115
118
|
focusTrapOptions={{
|
|
@@ -2,6 +2,7 @@ import * as React from 'react';
|
|
|
2
2
|
|
|
3
3
|
import { render, screen } from '@testing-library/react';
|
|
4
4
|
import userEvent from '@testing-library/user-event';
|
|
5
|
+
import '@testing-library/jest-dom';
|
|
5
6
|
|
|
6
7
|
import { css } from '../../../../../react-styles/dist/js';
|
|
7
8
|
import styles from '@patternfly/react-styles/css/components/Backdrop/backdrop';
|
|
@@ -38,6 +39,32 @@ const ModalWithSiblings = () => {
|
|
|
38
39
|
);
|
|
39
40
|
};
|
|
40
41
|
|
|
42
|
+
const ModalWithAdjacentModal = () => {
|
|
43
|
+
const [isOpen, setIsOpen] = React.useState(true);
|
|
44
|
+
const [isModalMounted, setIsModalMounted] = React.useState(true);
|
|
45
|
+
const modalProps = { ...props, isOpen, appendTo: target, onClose: () => setIsOpen(false) };
|
|
46
|
+
|
|
47
|
+
return (
|
|
48
|
+
<>
|
|
49
|
+
<aside>Aside sibling</aside>
|
|
50
|
+
<article>Section sibling</article>
|
|
51
|
+
{isModalMounted && (
|
|
52
|
+
<>
|
|
53
|
+
<Modal {...modalProps}>
|
|
54
|
+
<button onClick={() => setIsModalMounted(false)}>Unmount Modal</button>
|
|
55
|
+
</Modal>
|
|
56
|
+
<Modal isOpen={false} onClose={() => {}}>
|
|
57
|
+
Modal closed for test
|
|
58
|
+
</Modal>
|
|
59
|
+
<Modal isOpen={false} onClose={() => {}}>
|
|
60
|
+
modal closed for test
|
|
61
|
+
</Modal>
|
|
62
|
+
</>
|
|
63
|
+
)}
|
|
64
|
+
</>
|
|
65
|
+
);
|
|
66
|
+
};
|
|
67
|
+
|
|
41
68
|
describe('Modal', () => {
|
|
42
69
|
test('Modal creates a container element once for div', () => {
|
|
43
70
|
render(<Modal {...props} />);
|
|
@@ -128,4 +155,22 @@ describe('Modal', () => {
|
|
|
128
155
|
expect(asideSibling).not.toHaveAttribute('aria-hidden');
|
|
129
156
|
expect(articleSibling).not.toHaveAttribute('aria-hidden');
|
|
130
157
|
});
|
|
158
|
+
|
|
159
|
+
test('modal siblings have the aria-hidden attribute when it has adjacent modals', async () => {
|
|
160
|
+
const user = userEvent.setup();
|
|
161
|
+
|
|
162
|
+
render(<ModalWithAdjacentModal />, { container: document.body.appendChild(target) });
|
|
163
|
+
|
|
164
|
+
const asideSibling = screen.getByRole('complementary', { hidden: true });
|
|
165
|
+
const articleSibling = screen.getByRole('article', { hidden: true });
|
|
166
|
+
const unmountButton = screen.getByRole('button', { name: 'Unmount Modal' });
|
|
167
|
+
|
|
168
|
+
expect(asideSibling).toHaveAttribute('aria-hidden');
|
|
169
|
+
expect(articleSibling).toHaveAttribute('aria-hidden');
|
|
170
|
+
|
|
171
|
+
await user.click(unmountButton);
|
|
172
|
+
|
|
173
|
+
expect(asideSibling).not.toHaveAttribute('aria-hidden');
|
|
174
|
+
expect(articleSibling).not.toHaveAttribute('aria-hidden');
|
|
175
|
+
});
|
|
131
176
|
});
|
package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUpload.test.tsx.snap
CHANGED
|
@@ -9,7 +9,7 @@ exports[`MultipleFileUpload renders custom class names 1`] = `
|
|
|
9
9
|
>
|
|
10
10
|
<input
|
|
11
11
|
multiple=""
|
|
12
|
-
style="
|
|
12
|
+
style="border: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); height: 1px; margin: 0px -1px -1px 0px; overflow: hidden; padding: 0px; position: absolute; width: 1px; white-space: nowrap;"
|
|
13
13
|
tabindex="-1"
|
|
14
14
|
type="file"
|
|
15
15
|
/>
|
|
@@ -27,7 +27,7 @@ exports[`MultipleFileUpload renders with expected class names when horizontal 1`
|
|
|
27
27
|
>
|
|
28
28
|
<input
|
|
29
29
|
multiple=""
|
|
30
|
-
style="
|
|
30
|
+
style="border: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); height: 1px; margin: 0px -1px -1px 0px; overflow: hidden; padding: 0px; position: absolute; width: 1px; white-space: nowrap;"
|
|
31
31
|
tabindex="-1"
|
|
32
32
|
type="file"
|
|
33
33
|
/>
|
|
@@ -45,7 +45,7 @@ exports[`MultipleFileUpload renders with expected class names when not horizonta
|
|
|
45
45
|
>
|
|
46
46
|
<input
|
|
47
47
|
multiple=""
|
|
48
|
-
style="
|
|
48
|
+
style="border: 0px; clip: rect(0px, 0px, 0px, 0px); clip-path: inset(50%); height: 1px; margin: 0px -1px -1px 0px; overflow: hidden; padding: 0px; position: absolute; width: 1px; white-space: nowrap;"
|
|
49
49
|
tabindex="-1"
|
|
50
50
|
type="file"
|
|
51
51
|
/>
|
|
@@ -95,9 +95,8 @@ export const OverflowMenuBreakpointOnContainer: React.FunctionComponent = () =>
|
|
|
95
95
|
variant="plain"
|
|
96
96
|
onClick={onToggle}
|
|
97
97
|
isExpanded={isOpen}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
</MenuToggle>
|
|
98
|
+
icon={<EllipsisVIcon />}
|
|
99
|
+
/>
|
|
101
100
|
)}
|
|
102
101
|
isOpen={isOpen}
|
|
103
102
|
onOpenChange={(isOpen) => setIsOpen(isOpen)}
|
|
@@ -99,9 +99,8 @@ export const OverflowMenuGroupTypes: React.FunctionComponent = () => {
|
|
|
99
99
|
variant="plain"
|
|
100
100
|
onClick={onToggle}
|
|
101
101
|
isExpanded={isOpen}
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
</MenuToggle>
|
|
102
|
+
icon={<EllipsisVIcon />}
|
|
103
|
+
/>
|
|
105
104
|
)}
|
|
106
105
|
isOpen={isOpen}
|
|
107
106
|
onOpenChange={(isOpen) => setIsOpen(isOpen)}
|
|
@@ -88,9 +88,8 @@ export const OverflowMenuMultiGroup: React.FunctionComponent = () => {
|
|
|
88
88
|
variant="plain"
|
|
89
89
|
onClick={onToggle}
|
|
90
90
|
isExpanded={isOpen}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
</MenuToggle>
|
|
91
|
+
icon={<EllipsisVIcon />}
|
|
92
|
+
/>
|
|
94
93
|
)}
|
|
95
94
|
isOpen={isOpen}
|
|
96
95
|
onOpenChange={(isOpen) => setIsOpen(isOpen)}
|
|
@@ -62,9 +62,8 @@ export const OverflowMenuPersistent: React.FunctionComponent = () => {
|
|
|
62
62
|
variant="plain"
|
|
63
63
|
onClick={onToggle}
|
|
64
64
|
isExpanded={isOpen}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
</MenuToggle>
|
|
65
|
+
icon={<EllipsisVIcon />}
|
|
66
|
+
/>
|
|
68
67
|
)}
|
|
69
68
|
isOpen={isOpen}
|
|
70
69
|
onOpenChange={(isOpen) => setIsOpen(isOpen)}
|
|
@@ -62,9 +62,8 @@ export const OverflowMenuBreakpointOnContainer: React.FunctionComponent = () =>
|
|
|
62
62
|
variant="plain"
|
|
63
63
|
onClick={onToggle}
|
|
64
64
|
isExpanded={isOpen}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
</MenuToggle>
|
|
65
|
+
icon={<EllipsisVIcon />}
|
|
66
|
+
/>
|
|
68
67
|
)}
|
|
69
68
|
isOpen={isOpen}
|
|
70
69
|
onOpenChange={(isOpen) => setIsOpen(isOpen)}
|
|
@@ -2,7 +2,7 @@ import React from 'react';
|
|
|
2
2
|
import { css } from '@patternfly/react-styles';
|
|
3
3
|
import { Menu, MenuContent, MenuProps } from '../Menu';
|
|
4
4
|
import { Popper } from '../../helpers/Popper/Popper';
|
|
5
|
-
import { getOUIAProps, OUIAProps, getDefaultOUIAId } from '../../helpers';
|
|
5
|
+
import { getOUIAProps, OUIAProps, getDefaultOUIAId, onToggleArrowKeydownDefault } from '../../helpers';
|
|
6
6
|
|
|
7
7
|
export interface SelectPopperProps {
|
|
8
8
|
/** Vertical direction of the popper. If enableFlip is set to true, this will set the initial direction before the popper flips. */
|
|
@@ -62,6 +62,10 @@ export interface SelectProps extends MenuProps, OUIAProps {
|
|
|
62
62
|
onOpenChange?: (isOpen: boolean) => void;
|
|
63
63
|
/** 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. */
|
|
64
64
|
onOpenChangeKeys?: string[];
|
|
65
|
+
/** Callback to override the toggle keydown behavior. By default, when the toggle has focus and the menu is open, pressing the up/down arrow keys will focus a valid non-disabled menu item - the first item for the down arrow key and last item for the up arrow key. */
|
|
66
|
+
onToggleKeydown?: (event: KeyboardEvent) => void;
|
|
67
|
+
/** Select variant. For typeahead variant focus won't shift to menu items when pressing up/down arrows. */
|
|
68
|
+
variant?: 'default' | 'typeahead';
|
|
65
69
|
/** Indicates if the select should be without the outer box-shadow */
|
|
66
70
|
isPlain?: boolean;
|
|
67
71
|
/** @hide Forwarded ref */
|
|
@@ -95,6 +99,8 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
95
99
|
shouldFocusFirstItemOnOpen = false,
|
|
96
100
|
onOpenChange,
|
|
97
101
|
onOpenChangeKeys = ['Escape', 'Tab'],
|
|
102
|
+
onToggleKeydown,
|
|
103
|
+
variant,
|
|
98
104
|
isPlain,
|
|
99
105
|
innerRef,
|
|
100
106
|
zIndex = 9999,
|
|
@@ -144,6 +150,14 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
144
150
|
toggleRef.current?.focus();
|
|
145
151
|
}
|
|
146
152
|
}
|
|
153
|
+
|
|
154
|
+
if (toggleRef.current?.contains(event.target as Node)) {
|
|
155
|
+
if (onToggleKeydown) {
|
|
156
|
+
onToggleKeydown(event);
|
|
157
|
+
} else if (isOpen && variant !== 'typeahead') {
|
|
158
|
+
onToggleArrowKeydownDefault(event, menuRef);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
147
161
|
};
|
|
148
162
|
|
|
149
163
|
const handleClick = (event: MouseEvent) => {
|
|
@@ -168,6 +182,7 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
168
182
|
toggleRef,
|
|
169
183
|
onOpenChange,
|
|
170
184
|
onOpenChangeKeys,
|
|
185
|
+
onToggleKeydown,
|
|
171
186
|
shouldPreventScrollOnItemFocus,
|
|
172
187
|
shouldFocusFirstItemOnOpen,
|
|
173
188
|
focusTimeoutDelay
|
|
@@ -247,7 +247,7 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
|
|
|
247
247
|
!isOpen && closeMenu();
|
|
248
248
|
}}
|
|
249
249
|
toggle={toggle}
|
|
250
|
-
|
|
250
|
+
variant="typeahead"
|
|
251
251
|
>
|
|
252
252
|
<SelectList isAriaMultiselectable id="select-multi-typeahead-listbox">
|
|
253
253
|
{selectOptions.map((option, index) => (
|
|
@@ -241,7 +241,7 @@ export const SelectMultiTypeaheadCheckbox: React.FunctionComponent = () => {
|
|
|
241
241
|
!isOpen && closeMenu();
|
|
242
242
|
}}
|
|
243
243
|
toggle={toggle}
|
|
244
|
-
|
|
244
|
+
variant="typeahead"
|
|
245
245
|
>
|
|
246
246
|
<SelectList isAriaMultiselectable id="select-multi-typeahead-checkbox-listbox">
|
|
247
247
|
{selectOptions.map((option, index) => (
|
|
@@ -260,7 +260,7 @@ export const SelectMultiTypeaheadCreatable: React.FunctionComponent = () => {
|
|
|
260
260
|
!isOpen && closeMenu();
|
|
261
261
|
}}
|
|
262
262
|
toggle={toggle}
|
|
263
|
-
|
|
263
|
+
variant="typeahead"
|
|
264
264
|
>
|
|
265
265
|
<SelectList isAriaMultiselectable id="select-multi-create-typeahead-listbox">
|
|
266
266
|
{selectOptions.map((option, index) => (
|
|
@@ -244,7 +244,7 @@ export const SelectTypeahead: React.FunctionComponent = () => {
|
|
|
244
244
|
!isOpen && closeMenu();
|
|
245
245
|
}}
|
|
246
246
|
toggle={toggle}
|
|
247
|
-
|
|
247
|
+
variant="typeahead"
|
|
248
248
|
>
|
|
249
249
|
<SelectList id="select-typeahead-listbox">
|
|
250
250
|
{selectOptions.map((option, index) => (
|
|
@@ -251,7 +251,7 @@ export const SelectTypeaheadCreatable: React.FunctionComponent = () => {
|
|
|
251
251
|
!isOpen && closeMenu();
|
|
252
252
|
}}
|
|
253
253
|
toggle={toggle}
|
|
254
|
-
|
|
254
|
+
variant="typeahead"
|
|
255
255
|
>
|
|
256
256
|
<SelectList id="select-create-typeahead-listbox">
|
|
257
257
|
{selectOptions.map((option, index) => (
|
|
@@ -133,7 +133,8 @@ class ToolbarFilter extends React.Component<ToolbarFilterProps, ToolbarFilterSta
|
|
|
133
133
|
return (
|
|
134
134
|
<React.Fragment>
|
|
135
135
|
{showToolbarItem && <ToolbarItem {...props}>{children}</ToolbarItem>}
|
|
136
|
-
{
|
|
136
|
+
{labelGroupContentRef?.current?.firstElementChild !== null &&
|
|
137
|
+
ReactDOM.createPortal(labelGroup, labelGroupContentRef.current.firstElementChild)}
|
|
137
138
|
</React.Fragment>
|
|
138
139
|
);
|
|
139
140
|
}
|
|
@@ -229,9 +229,8 @@ export const ToolbarStacked: React.FunctionComponent = () => {
|
|
|
229
229
|
variant="plain"
|
|
230
230
|
onClick={onKebabToggle}
|
|
231
231
|
isExpanded={kebabIsOpen}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
</MenuToggle>
|
|
232
|
+
icon={<EllipsisVIcon />}
|
|
233
|
+
/>
|
|
235
234
|
)}
|
|
236
235
|
isOpen={kebabIsOpen}
|
|
237
236
|
>
|
|
@@ -231,9 +231,8 @@ export const ToolbarWithFilters: React.FunctionComponent = () => {
|
|
|
231
231
|
onClick={onKebabToggle}
|
|
232
232
|
variant="plain"
|
|
233
233
|
aria-label="Toolbar with filters example kebab toggle"
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
</MenuToggle>
|
|
234
|
+
icon={<EllipsisVIcon aria-hidden="true" />}
|
|
235
|
+
/>
|
|
237
236
|
)}
|
|
238
237
|
>
|
|
239
238
|
<DropdownList>
|
|
@@ -47,9 +47,8 @@ export const TreeViewWithActionItems: React.FunctionComponent = () => {
|
|
|
47
47
|
onClick={onToggle}
|
|
48
48
|
variant="plain"
|
|
49
49
|
aria-label="Tree view with actions example kebab toggle"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
</MenuToggle>
|
|
50
|
+
icon={<EllipsisVIcon />}
|
|
51
|
+
/>
|
|
53
52
|
)}
|
|
54
53
|
>
|
|
55
54
|
<DropdownList>
|
|
@@ -427,9 +427,8 @@ export const CardViewBasic: React.FunctionComponent = () => {
|
|
|
427
427
|
variant="plain"
|
|
428
428
|
onClick={onToolbarKebabDropdownToggle}
|
|
429
429
|
isExpanded={isLowerToolbarKebabDropdownOpen}
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
</MenuToggle>
|
|
430
|
+
icon={<EllipsisVIcon />}
|
|
431
|
+
/>
|
|
433
432
|
)}
|
|
434
433
|
isOpen={isLowerToolbarKebabDropdownOpen}
|
|
435
434
|
onOpenChange={(isOpen) => setIsLowerToolbarDropdownOpen(isOpen)}
|
|
@@ -518,9 +517,8 @@ export const CardViewBasic: React.FunctionComponent = () => {
|
|
|
518
517
|
onCardKebabDropdownToggle(e, key.toString());
|
|
519
518
|
}}
|
|
520
519
|
isExpanded={!!state[key]}
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
</MenuToggle>
|
|
520
|
+
icon={<EllipsisVIcon />}
|
|
521
|
+
/>
|
|
524
522
|
)}
|
|
525
523
|
popperProps={{ position: 'right' }}
|
|
526
524
|
>
|
|
@@ -215,9 +215,8 @@ export const ApplicationLauncherDemo: React.FunctionComponent = () => {
|
|
|
215
215
|
onClick={onToggleClick}
|
|
216
216
|
isExpanded={isOpen}
|
|
217
217
|
style={{ width: 'auto' }}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
</MenuToggle>
|
|
218
|
+
icon={<ThIcon />}
|
|
219
|
+
/>
|
|
221
220
|
)}
|
|
222
221
|
ref={menuRef}
|
|
223
222
|
onActionClick={onFavorite}
|