@patternfly/react-core 5.4.6 → 5.4.7
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 +4 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/Chip/package.json +1 -1
- package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/DataList/package.json +1 -1
- package/dist/dynamic/components/DatePicker/package.json +1 -1
- package/dist/dynamic/components/DescriptionList/package.json +1 -1
- package/dist/dynamic/components/Divider/package.json +1 -1
- package/dist/dynamic/components/DragDrop/package.json +1 -1
- package/dist/dynamic/components/Drawer/package.json +1 -1
- package/dist/dynamic/components/Dropdown/package.json +1 -1
- package/dist/dynamic/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/components/EmptyState/package.json +1 -1
- package/dist/dynamic/components/ExpandableSection/package.json +1 -1
- package/dist/dynamic/components/FileUpload/package.json +1 -1
- package/dist/dynamic/components/Form/package.json +1 -1
- package/dist/dynamic/components/FormSelect/package.json +1 -1
- package/dist/dynamic/components/HelperText/package.json +1 -1
- package/dist/dynamic/components/Hint/package.json +1 -1
- package/dist/dynamic/components/Icon/package.json +1 -1
- package/dist/dynamic/components/InputGroup/package.json +1 -1
- package/dist/dynamic/components/JumpLinks/package.json +1 -1
- package/dist/dynamic/components/Label/package.json +1 -1
- package/dist/dynamic/components/List/package.json +1 -1
- package/dist/dynamic/components/LoginPage/package.json +1 -1
- package/dist/dynamic/components/Masthead/package.json +1 -1
- package/dist/dynamic/components/Menu/package.json +1 -1
- package/dist/dynamic/components/MenuToggle/package.json +1 -1
- package/dist/dynamic/components/Modal/package.json +1 -1
- package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
- package/dist/dynamic/components/Nav/package.json +1 -1
- package/dist/dynamic/components/NotificationBadge/package.json +1 -1
- package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
- package/dist/dynamic/components/NumberInput/package.json +1 -1
- package/dist/dynamic/components/OverflowMenu/package.json +1 -1
- package/dist/dynamic/components/Page/package.json +1 -1
- package/dist/dynamic/components/Pagination/package.json +1 -1
- package/dist/dynamic/components/Panel/package.json +1 -1
- package/dist/dynamic/components/Popover/package.json +1 -1
- package/dist/dynamic/components/Progress/package.json +1 -1
- package/dist/dynamic/components/ProgressStepper/package.json +1 -1
- package/dist/dynamic/components/Radio/package.json +1 -1
- package/dist/dynamic/components/SearchInput/package.json +1 -1
- package/dist/dynamic/components/Select/package.json +1 -1
- package/dist/dynamic/components/Sidebar/package.json +1 -1
- package/dist/dynamic/components/SimpleList/package.json +1 -1
- package/dist/dynamic/components/Skeleton/package.json +1 -1
- package/dist/dynamic/components/SkipToContent/package.json +1 -1
- package/dist/dynamic/components/Slider/package.json +1 -1
- package/dist/dynamic/components/Spinner/package.json +1 -1
- package/dist/dynamic/components/Switch/package.json +1 -1
- package/dist/dynamic/components/Tabs/package.json +1 -1
- package/dist/dynamic/components/Text/package.json +1 -1
- package/dist/dynamic/components/TextArea/package.json +1 -1
- package/dist/dynamic/components/TextInput/package.json +1 -1
- package/dist/dynamic/components/TextInputGroup/package.json +1 -1
- package/dist/dynamic/components/Tile/package.json +1 -1
- package/dist/dynamic/components/TimePicker/package.json +1 -1
- package/dist/dynamic/components/Timestamp/package.json +1 -1
- package/dist/dynamic/components/Title/package.json +1 -1
- package/dist/dynamic/components/ToggleGroup/package.json +1 -1
- package/dist/dynamic/components/Toolbar/package.json +1 -1
- package/dist/dynamic/components/Tooltip/package.json +1 -1
- package/dist/dynamic/components/TreeView/package.json +1 -1
- package/dist/dynamic/components/Truncate/package.json +1 -1
- package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
- package/dist/dynamic/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/ApplicationLauncher/package.json +1 -1
- package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
- package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
- package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
- package/dist/dynamic/deprecated/components/Select/package.json +1 -1
- package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
- package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
- package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
- package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
- package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
- package/dist/dynamic/helpers/constants/package.json +1 -1
- package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
- package/dist/dynamic/helpers/favorites/package.json +1 -1
- package/dist/dynamic/helpers/fileUtils/package.json +1 -1
- package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
- package/dist/dynamic/helpers/package.json +1 -1
- package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
- package/dist/dynamic/helpers/typeUtils/package.json +1 -1
- package/dist/dynamic/helpers/useInterval/package.json +1 -1
- package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
- package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
- package/dist/dynamic/helpers/util/package.json +1 -1
- package/dist/dynamic/layouts/Bullseye/package.json +1 -1
- package/dist/dynamic/layouts/Flex/package.json +1 -1
- package/dist/dynamic/layouts/Gallery/package.json +1 -1
- package/dist/dynamic/layouts/Grid/package.json +1 -1
- package/dist/dynamic/layouts/Level/package.json +1 -1
- package/dist/dynamic/layouts/Split/package.json +1 -1
- package/dist/dynamic/layouts/Stack/package.json +1 -1
- package/dist/dynamic/next/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/next/components/Modal/package.json +1 -1
- package/dist/dynamic/next/components/package.json +1 -1
- package/dist/dynamic/styles/package.json +1 -1
- package/dist/esm/components/Dropdown/Dropdown.d.ts +4 -0
- package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.js +15 -5
- package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/Menu/MenuContainer.d.ts +4 -0
- package/dist/esm/components/Menu/MenuContainer.d.ts.map +1 -1
- package/dist/esm/components/Menu/MenuContainer.js +4 -4
- package/dist/esm/components/Menu/MenuContainer.js.map +1 -1
- package/dist/esm/components/Pagination/PaginationOptionsMenu.d.ts +4 -0
- package/dist/esm/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
- package/dist/esm/components/Pagination/PaginationOptionsMenu.js +4 -4
- package/dist/esm/components/Pagination/PaginationOptionsMenu.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 +13 -4
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/Tabs/OverflowTab.d.ts +4 -0
- package/dist/esm/components/Tabs/OverflowTab.d.ts.map +1 -1
- package/dist/esm/components/Tabs/OverflowTab.js +3 -3
- package/dist/esm/components/Tabs/OverflowTab.js.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.d.ts +4 -0
- package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.js +15 -5
- package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/js/components/Menu/MenuContainer.d.ts +4 -0
- package/dist/js/components/Menu/MenuContainer.d.ts.map +1 -1
- package/dist/js/components/Menu/MenuContainer.js +4 -4
- package/dist/js/components/Menu/MenuContainer.js.map +1 -1
- package/dist/js/components/Pagination/PaginationOptionsMenu.d.ts +4 -0
- package/dist/js/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
- package/dist/js/components/Pagination/PaginationOptionsMenu.js +4 -4
- package/dist/js/components/Pagination/PaginationOptionsMenu.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 +13 -4
- package/dist/js/components/Select/Select.js.map +1 -1
- package/dist/js/components/Tabs/OverflowTab.d.ts +4 -0
- package/dist/js/components/Tabs/OverflowTab.d.ts.map +1 -1
- package/dist/js/components/Tabs/OverflowTab.js +3 -3
- package/dist/js/components/Tabs/OverflowTab.js.map +1 -1
- package/dist/umd/assets/{output-D9RYQCje.css → output-DKcRun4G.css} +7051 -7051
- package/dist/umd/react-core.min.js +3 -3
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +2 -2
- package/src/components/Dropdown/Dropdown.tsx +19 -4
- package/src/components/Menu/MenuContainer.tsx +10 -4
- package/src/components/Pagination/PaginationOptionsMenu.tsx +10 -4
- package/src/components/Select/Select.tsx +18 -3
- package/src/components/Tabs/OverflowTab.tsx +8 -2
package/helpers/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"5.4.
|
|
1
|
+
{"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"5.4.6","private":true}
|
package/layouts/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"5.4.
|
|
1
|
+
{"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"5.4.6","private":true}
|
package/next/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"5.4.
|
|
1
|
+
{"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"5.4.6","private":true}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "5.4.
|
|
3
|
+
"version": "5.4.7",
|
|
4
4
|
"description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
|
|
5
5
|
"main": "dist/js/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -62,5 +62,5 @@
|
|
|
62
62
|
"react": "^17 || ^18",
|
|
63
63
|
"react-dom": "^17 || ^18"
|
|
64
64
|
},
|
|
65
|
-
"gitHead": "
|
|
65
|
+
"gitHead": "9b64d81d7401fc4dee1f43b8a2dfe3855fc68880"
|
|
66
66
|
}
|
|
@@ -71,6 +71,10 @@ export interface DropdownProps extends MenuProps, OUIAProps {
|
|
|
71
71
|
maxMenuHeight?: string;
|
|
72
72
|
/** @beta Flag indicating the first menu item should be focused after opening the dropdown. */
|
|
73
73
|
shouldFocusFirstItemOnOpen?: boolean;
|
|
74
|
+
/** Flag indicating if scroll on focus of the first menu item should occur. */
|
|
75
|
+
shouldPreventScrollOnItemFocus?: boolean;
|
|
76
|
+
/** Time in ms to wait before firing the toggles' focus event. Defaults to 0 */
|
|
77
|
+
focusTimeoutDelay?: number;
|
|
74
78
|
}
|
|
75
79
|
|
|
76
80
|
const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
@@ -92,6 +96,8 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
92
96
|
menuHeight,
|
|
93
97
|
maxMenuHeight,
|
|
94
98
|
shouldFocusFirstItemOnOpen = false,
|
|
99
|
+
shouldPreventScrollOnItemFocus = true,
|
|
100
|
+
focusTimeoutDelay = 0,
|
|
95
101
|
...props
|
|
96
102
|
}: DropdownProps) => {
|
|
97
103
|
const localMenuRef = React.useRef<HTMLDivElement>();
|
|
@@ -126,8 +132,8 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
126
132
|
const firstElement = menuRef?.current?.querySelector(
|
|
127
133
|
'li button:not(:disabled),li input:not(:disabled),li a:not([aria-disabled="true"])'
|
|
128
134
|
);
|
|
129
|
-
firstElement && (firstElement as HTMLElement).focus();
|
|
130
|
-
},
|
|
135
|
+
firstElement && (firstElement as HTMLElement).focus({ preventScroll: shouldPreventScrollOnItemFocus });
|
|
136
|
+
}, focusTimeoutDelay);
|
|
131
137
|
}
|
|
132
138
|
|
|
133
139
|
// If the event is not on the toggle and onOpenChange callback is provided, close the menu
|
|
@@ -145,7 +151,16 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
145
151
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
146
152
|
window.removeEventListener('click', handleClick);
|
|
147
153
|
};
|
|
148
|
-
}, [
|
|
154
|
+
}, [
|
|
155
|
+
isOpen,
|
|
156
|
+
menuRef,
|
|
157
|
+
toggleRef,
|
|
158
|
+
onOpenChange,
|
|
159
|
+
onOpenChangeKeys,
|
|
160
|
+
shouldPreventScrollOnItemFocus,
|
|
161
|
+
shouldFocusFirstItemOnOpen,
|
|
162
|
+
focusTimeoutDelay
|
|
163
|
+
]);
|
|
149
164
|
|
|
150
165
|
const scrollable = maxMenuHeight !== undefined || menuHeight !== undefined || isScrollable;
|
|
151
166
|
|
|
@@ -155,7 +170,7 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
155
170
|
ref={menuRef}
|
|
156
171
|
onSelect={(event, value) => {
|
|
157
172
|
onSelect && onSelect(event, value);
|
|
158
|
-
shouldFocusToggleOnSelect && toggleRef.current
|
|
173
|
+
shouldFocusToggleOnSelect && toggleRef.current?.focus();
|
|
159
174
|
}}
|
|
160
175
|
isPlain={isPlain}
|
|
161
176
|
isScrollable={scrollable}
|
|
@@ -37,6 +37,10 @@ export interface MenuContainerProps {
|
|
|
37
37
|
zIndex?: number;
|
|
38
38
|
/** Additional properties to pass to the Popper */
|
|
39
39
|
popperProps?: MenuPopperProps;
|
|
40
|
+
/** Flag indicating if scroll on focus of the first menu item should occur. */
|
|
41
|
+
shouldPreventScrollOnItemFocus?: boolean;
|
|
42
|
+
/** Time in ms to wait before firing the toggles' focus event. Defaults to 0 */
|
|
43
|
+
focusTimeoutDelay?: number;
|
|
40
44
|
}
|
|
41
45
|
|
|
42
46
|
/**
|
|
@@ -52,7 +56,9 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
|
|
|
52
56
|
onOpenChange,
|
|
53
57
|
zIndex = 9999,
|
|
54
58
|
popperProps,
|
|
55
|
-
onOpenChangeKeys = ['Escape', 'Tab']
|
|
59
|
+
onOpenChangeKeys = ['Escape', 'Tab'],
|
|
60
|
+
shouldPreventScrollOnItemFocus = true,
|
|
61
|
+
focusTimeoutDelay = 0
|
|
56
62
|
}: MenuContainerProps) => {
|
|
57
63
|
React.useEffect(() => {
|
|
58
64
|
const handleMenuKeys = (event: KeyboardEvent) => {
|
|
@@ -75,8 +81,8 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
|
|
|
75
81
|
const firstElement = menuRef?.current?.querySelector(
|
|
76
82
|
'li button:not(:disabled),li input:not(:disabled),li a:not([aria-disabled="true"])'
|
|
77
83
|
);
|
|
78
|
-
firstElement && (firstElement as HTMLElement).focus();
|
|
79
|
-
},
|
|
84
|
+
firstElement && (firstElement as HTMLElement).focus({ preventScroll: shouldPreventScrollOnItemFocus });
|
|
85
|
+
}, focusTimeoutDelay);
|
|
80
86
|
}
|
|
81
87
|
|
|
82
88
|
// If the event is not on the toggle and onOpenChange callback is provided, close the menu
|
|
@@ -94,7 +100,7 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
|
|
|
94
100
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
95
101
|
window.removeEventListener('click', handleClick);
|
|
96
102
|
};
|
|
97
|
-
}, [isOpen, menuRef, onOpenChange, onOpenChangeKeys, toggleRef]);
|
|
103
|
+
}, [focusTimeoutDelay, isOpen, menuRef, onOpenChange, onOpenChangeKeys, shouldPreventScrollOnItemFocus, toggleRef]);
|
|
98
104
|
|
|
99
105
|
return (
|
|
100
106
|
<Popper
|
|
@@ -56,6 +56,10 @@ export interface PaginationOptionsMenuProps extends React.HTMLProps<HTMLDivEleme
|
|
|
56
56
|
containerRef?: React.RefObject<HTMLDivElement>;
|
|
57
57
|
/** @beta The container to append the pagination options menu to. Overrides the containerRef prop. */
|
|
58
58
|
appendTo?: HTMLElement | (() => HTMLElement) | 'inline';
|
|
59
|
+
/** Flag indicating if scroll on focus of the first menu item should occur. */
|
|
60
|
+
shouldPreventScrollOnItemFocus?: boolean;
|
|
61
|
+
/** Time in ms to wait before firing the toggles' focus event. Defaults to 0 */
|
|
62
|
+
focusTimeoutDelay?: number;
|
|
59
63
|
}
|
|
60
64
|
|
|
61
65
|
export const PaginationOptionsMenu: React.FunctionComponent<PaginationOptionsMenuProps> = ({
|
|
@@ -80,7 +84,9 @@ export const PaginationOptionsMenu: React.FunctionComponent<PaginationOptionsMen
|
|
|
80
84
|
toggleTemplate,
|
|
81
85
|
onPerPageSelect = () => null as any,
|
|
82
86
|
containerRef,
|
|
83
|
-
appendTo
|
|
87
|
+
appendTo,
|
|
88
|
+
shouldPreventScrollOnItemFocus = true,
|
|
89
|
+
focusTimeoutDelay = 0
|
|
84
90
|
}: PaginationOptionsMenuProps) => {
|
|
85
91
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
86
92
|
const toggleRef = React.useRef<HTMLButtonElement>(null);
|
|
@@ -133,8 +139,8 @@ export const PaginationOptionsMenu: React.FunctionComponent<PaginationOptionsMen
|
|
|
133
139
|
if (isOpen && toggleRef.current?.contains(event.target as Node)) {
|
|
134
140
|
setTimeout(() => {
|
|
135
141
|
const firstElement = menuRef?.current?.querySelector('li button:not(:disabled)');
|
|
136
|
-
firstElement && (firstElement as HTMLElement).focus();
|
|
137
|
-
},
|
|
142
|
+
firstElement && (firstElement as HTMLElement).focus({ preventScroll: shouldPreventScrollOnItemFocus });
|
|
143
|
+
}, focusTimeoutDelay);
|
|
138
144
|
}
|
|
139
145
|
|
|
140
146
|
// If the event is not on the toggle, close the menu
|
|
@@ -154,7 +160,7 @@ export const PaginationOptionsMenu: React.FunctionComponent<PaginationOptionsMen
|
|
|
154
160
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
155
161
|
window.removeEventListener('click', handleClick);
|
|
156
162
|
};
|
|
157
|
-
}, [isOpen, menuRef]);
|
|
163
|
+
}, [focusTimeoutDelay, isOpen, menuRef, shouldPreventScrollOnItemFocus]);
|
|
158
164
|
|
|
159
165
|
const renderItems = () =>
|
|
160
166
|
perPageOptions.map(({ value, title }) => (
|
|
@@ -78,6 +78,10 @@ export interface SelectProps extends MenuProps, OUIAProps {
|
|
|
78
78
|
maxMenuHeight?: string;
|
|
79
79
|
/** Indicates if the select menu should be scrollable */
|
|
80
80
|
isScrollable?: boolean;
|
|
81
|
+
/** Flag indicating if scroll on focus of the first menu item should occur. */
|
|
82
|
+
shouldPreventScrollOnItemFocus?: boolean;
|
|
83
|
+
/** Time in ms to wait before firing the toggles' focus event. Defaults to 0 */
|
|
84
|
+
focusTimeoutDelay?: number;
|
|
81
85
|
}
|
|
82
86
|
|
|
83
87
|
const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
@@ -99,6 +103,8 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
99
103
|
menuHeight,
|
|
100
104
|
maxMenuHeight,
|
|
101
105
|
isScrollable,
|
|
106
|
+
shouldPreventScrollOnItemFocus = true,
|
|
107
|
+
focusTimeoutDelay = 0,
|
|
102
108
|
...props
|
|
103
109
|
}: SelectProps & OUIAProps) => {
|
|
104
110
|
const localMenuRef = React.useRef<HTMLDivElement>();
|
|
@@ -131,8 +137,8 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
131
137
|
if (isOpen && shouldFocusFirstItemOnOpen && toggleRef.current?.contains(event.target as Node)) {
|
|
132
138
|
setTimeout(() => {
|
|
133
139
|
const firstElement = menuRef?.current?.querySelector('li button:not(:disabled),li input:not(:disabled)');
|
|
134
|
-
firstElement && (firstElement as HTMLElement).focus();
|
|
135
|
-
},
|
|
140
|
+
firstElement && (firstElement as HTMLElement).focus({ preventScroll: shouldPreventScrollOnItemFocus });
|
|
141
|
+
}, focusTimeoutDelay);
|
|
136
142
|
}
|
|
137
143
|
|
|
138
144
|
// If the event is not on the toggle and onOpenChange callback is provided, close the menu
|
|
@@ -150,7 +156,16 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
150
156
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
151
157
|
window.removeEventListener('click', handleClick);
|
|
152
158
|
};
|
|
153
|
-
}, [
|
|
159
|
+
}, [
|
|
160
|
+
isOpen,
|
|
161
|
+
menuRef,
|
|
162
|
+
toggleRef,
|
|
163
|
+
onOpenChange,
|
|
164
|
+
onOpenChangeKeys,
|
|
165
|
+
shouldPreventScrollOnItemFocus,
|
|
166
|
+
shouldFocusFirstItemOnOpen,
|
|
167
|
+
focusTimeoutDelay
|
|
168
|
+
]);
|
|
154
169
|
|
|
155
170
|
const menu = (
|
|
156
171
|
<Menu
|
|
@@ -21,6 +21,10 @@ export interface OverflowTabProps extends React.HTMLProps<HTMLLIElement> {
|
|
|
21
21
|
toggleAriaLabel?: string;
|
|
22
22
|
/** z-index of the overflow tab */
|
|
23
23
|
zIndex?: number;
|
|
24
|
+
/** Flag indicating if scroll on focus of the first menu item should occur. */
|
|
25
|
+
shouldPreventScrollOnItemFocus?: boolean;
|
|
26
|
+
/** Time in ms to wait before firing the toggles' focus event. Defaults to 0 */
|
|
27
|
+
focusTimeoutDelay?: number;
|
|
24
28
|
}
|
|
25
29
|
|
|
26
30
|
export const OverflowTab: React.FunctionComponent<OverflowTabProps> = ({
|
|
@@ -30,6 +34,8 @@ export const OverflowTab: React.FunctionComponent<OverflowTabProps> = ({
|
|
|
30
34
|
defaultTitleText = 'More',
|
|
31
35
|
toggleAriaLabel,
|
|
32
36
|
zIndex = 9999,
|
|
37
|
+
shouldPreventScrollOnItemFocus = true,
|
|
38
|
+
focusTimeoutDelay = 0,
|
|
33
39
|
...props
|
|
34
40
|
}: OverflowTabProps) => {
|
|
35
41
|
const menuRef = React.useRef<HTMLDivElement>();
|
|
@@ -78,9 +84,9 @@ export const OverflowTab: React.FunctionComponent<OverflowTabProps> = ({
|
|
|
78
84
|
setTimeout(() => {
|
|
79
85
|
if (menuRef?.current) {
|
|
80
86
|
const firstElement = menuRef.current.querySelector('li > button,input:not(:disabled)');
|
|
81
|
-
firstElement && (firstElement as HTMLElement).focus();
|
|
87
|
+
firstElement && (firstElement as HTMLElement).focus({ preventScroll: shouldPreventScrollOnItemFocus });
|
|
82
88
|
}
|
|
83
|
-
},
|
|
89
|
+
}, focusTimeoutDelay);
|
|
84
90
|
};
|
|
85
91
|
|
|
86
92
|
const overflowTab = (
|