@patternfly/react-core 6.0.0-prerelease.22 → 6.0.0-prerelease.23
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 +6 -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/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-Bp-lCm1j.css → output-DoqXbFTn.css} +5567 -5567
- package/dist/umd/react-core.min.js +1 -1
- 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":"6.0.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.0.0-prerelease.22","private":true}
|
package/layouts/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.0.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.0.0-prerelease.22","private":true}
|
package/next/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.0.0-prerelease.
|
|
1
|
+
{"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.0.0-prerelease.22","private":true}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "6.0.0-prerelease.
|
|
3
|
+
"version": "6.0.0-prerelease.23",
|
|
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",
|
|
@@ -63,5 +63,5 @@
|
|
|
63
63
|
"react": "^17 || ^18",
|
|
64
64
|
"react-dom": "^17 || ^18"
|
|
65
65
|
},
|
|
66
|
-
"gitHead": "
|
|
66
|
+
"gitHead": "02e05796b8fa29e9f5a3f769bd1d47723ea7d926"
|
|
67
67
|
}
|
|
@@ -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>();
|
|
@@ -112,8 +118,8 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
112
118
|
const firstElement = menuRef?.current?.querySelector(
|
|
113
119
|
'li button:not(:disabled),li input:not(:disabled),li a:not([aria-disabled="true"])'
|
|
114
120
|
);
|
|
115
|
-
firstElement && (firstElement as HTMLElement).focus();
|
|
116
|
-
},
|
|
121
|
+
firstElement && (firstElement as HTMLElement).focus({ preventScroll: shouldPreventScrollOnItemFocus });
|
|
122
|
+
}, focusTimeoutDelay);
|
|
117
123
|
}
|
|
118
124
|
|
|
119
125
|
prevIsOpen.current = isOpen;
|
|
@@ -151,7 +157,16 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
151
157
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
152
158
|
window.removeEventListener('click', handleClick);
|
|
153
159
|
};
|
|
154
|
-
}, [
|
|
160
|
+
}, [
|
|
161
|
+
isOpen,
|
|
162
|
+
menuRef,
|
|
163
|
+
toggleRef,
|
|
164
|
+
onOpenChange,
|
|
165
|
+
onOpenChangeKeys,
|
|
166
|
+
shouldPreventScrollOnItemFocus,
|
|
167
|
+
shouldFocusFirstItemOnOpen,
|
|
168
|
+
focusTimeoutDelay
|
|
169
|
+
]);
|
|
155
170
|
|
|
156
171
|
const scrollable = maxMenuHeight !== undefined || menuHeight !== undefined || isScrollable;
|
|
157
172
|
|
|
@@ -161,7 +176,7 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
161
176
|
ref={menuRef}
|
|
162
177
|
onSelect={(event, value) => {
|
|
163
178
|
onSelect && onSelect(event, value);
|
|
164
|
-
shouldFocusToggleOnSelect && toggleRef.current
|
|
179
|
+
shouldFocusToggleOnSelect && toggleRef.current?.focus();
|
|
165
180
|
}}
|
|
166
181
|
isPlain={isPlain}
|
|
167
182
|
isScrollable={scrollable}
|
|
@@ -39,6 +39,10 @@ export interface MenuContainerProps {
|
|
|
39
39
|
popperProps?: MenuPopperProps;
|
|
40
40
|
/** @beta Flag indicating the first menu item should be focused after opening the dropdown. */
|
|
41
41
|
shouldFocusFirstItemOnOpen?: boolean;
|
|
42
|
+
/** Flag indicating if scroll on focus of the first menu item should occur. */
|
|
43
|
+
shouldPreventScrollOnItemFocus?: boolean;
|
|
44
|
+
/** Time in ms to wait before firing the toggles' focus event. Defaults to 0 */
|
|
45
|
+
focusTimeoutDelay?: number;
|
|
42
46
|
}
|
|
43
47
|
|
|
44
48
|
/**
|
|
@@ -54,7 +58,9 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
|
|
|
54
58
|
zIndex = 9999,
|
|
55
59
|
popperProps,
|
|
56
60
|
onOpenChangeKeys = ['Escape', 'Tab'],
|
|
57
|
-
shouldFocusFirstItemOnOpen = true
|
|
61
|
+
shouldFocusFirstItemOnOpen = true,
|
|
62
|
+
shouldPreventScrollOnItemFocus = true,
|
|
63
|
+
focusTimeoutDelay = 0
|
|
58
64
|
}: MenuContainerProps) => {
|
|
59
65
|
const prevIsOpen = React.useRef<boolean>(isOpen);
|
|
60
66
|
React.useEffect(() => {
|
|
@@ -64,8 +70,8 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
|
|
|
64
70
|
const firstElement = menuRef?.current?.querySelector(
|
|
65
71
|
'li button:not(:disabled),li input:not(:disabled),li a:not([aria-disabled="true"])'
|
|
66
72
|
);
|
|
67
|
-
firstElement && (firstElement as HTMLElement).focus();
|
|
68
|
-
},
|
|
73
|
+
firstElement && (firstElement as HTMLElement).focus({ preventScroll: shouldPreventScrollOnItemFocus });
|
|
74
|
+
}, focusTimeoutDelay);
|
|
69
75
|
}
|
|
70
76
|
|
|
71
77
|
prevIsOpen.current = isOpen;
|
|
@@ -102,7 +108,7 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
|
|
|
102
108
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
103
109
|
window.removeEventListener('click', handleClick);
|
|
104
110
|
};
|
|
105
|
-
}, [isOpen, menuRef, onOpenChange, onOpenChangeKeys, toggleRef]);
|
|
111
|
+
}, [focusTimeoutDelay, isOpen, menuRef, onOpenChange, onOpenChangeKeys, shouldPreventScrollOnItemFocus, toggleRef]);
|
|
106
112
|
|
|
107
113
|
return (
|
|
108
114
|
<Popper
|
|
@@ -57,6 +57,10 @@ export interface PaginationOptionsMenuProps extends React.HTMLProps<HTMLDivEleme
|
|
|
57
57
|
containerRef?: React.RefObject<HTMLDivElement>;
|
|
58
58
|
/** @beta The container to append the pagination options menu to. Overrides the containerRef prop. */
|
|
59
59
|
appendTo?: HTMLElement | (() => HTMLElement) | 'inline';
|
|
60
|
+
/** Flag indicating if scroll on focus of the first menu item should occur. */
|
|
61
|
+
shouldPreventScrollOnItemFocus?: boolean;
|
|
62
|
+
/** Time in ms to wait before firing the toggles' focus event. Defaults to 0 */
|
|
63
|
+
focusTimeoutDelay?: number;
|
|
60
64
|
}
|
|
61
65
|
|
|
62
66
|
export const PaginationOptionsMenu: React.FunctionComponent<PaginationOptionsMenuProps> = ({
|
|
@@ -81,7 +85,9 @@ export const PaginationOptionsMenu: React.FunctionComponent<PaginationOptionsMen
|
|
|
81
85
|
toggleTemplate,
|
|
82
86
|
onPerPageSelect = () => null as any,
|
|
83
87
|
containerRef,
|
|
84
|
-
appendTo
|
|
88
|
+
appendTo,
|
|
89
|
+
shouldPreventScrollOnItemFocus = true,
|
|
90
|
+
focusTimeoutDelay = 0
|
|
85
91
|
}: PaginationOptionsMenuProps) => {
|
|
86
92
|
const [isOpen, setIsOpen] = React.useState(false);
|
|
87
93
|
const toggleRef = React.useRef<HTMLButtonElement>(null);
|
|
@@ -134,8 +140,8 @@ export const PaginationOptionsMenu: React.FunctionComponent<PaginationOptionsMen
|
|
|
134
140
|
if (isOpen && toggleRef.current?.contains(event.target as Node)) {
|
|
135
141
|
setTimeout(() => {
|
|
136
142
|
const firstElement = menuRef?.current?.querySelector('li button:not(:disabled)');
|
|
137
|
-
firstElement && (firstElement as HTMLElement).focus();
|
|
138
|
-
},
|
|
143
|
+
firstElement && (firstElement as HTMLElement).focus({ preventScroll: shouldPreventScrollOnItemFocus });
|
|
144
|
+
}, focusTimeoutDelay);
|
|
139
145
|
}
|
|
140
146
|
|
|
141
147
|
// If the event is not on the toggle, close the menu
|
|
@@ -155,7 +161,7 @@ export const PaginationOptionsMenu: React.FunctionComponent<PaginationOptionsMen
|
|
|
155
161
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
156
162
|
window.removeEventListener('click', handleClick);
|
|
157
163
|
};
|
|
158
|
-
}, [isOpen, menuRef]);
|
|
164
|
+
}, [focusTimeoutDelay, isOpen, menuRef, shouldPreventScrollOnItemFocus]);
|
|
159
165
|
|
|
160
166
|
const renderItems = () =>
|
|
161
167
|
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>();
|
|
@@ -116,8 +122,8 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
116
122
|
if (prevIsOpen.current === false && isOpen === true && shouldFocusFirstItemOnOpen) {
|
|
117
123
|
setTimeout(() => {
|
|
118
124
|
const firstElement = menuRef?.current?.querySelector('li button:not(:disabled),li input:not(:disabled)');
|
|
119
|
-
firstElement && (firstElement as HTMLElement).focus();
|
|
120
|
-
},
|
|
125
|
+
firstElement && (firstElement as HTMLElement).focus({ preventScroll: shouldPreventScrollOnItemFocus });
|
|
126
|
+
}, focusTimeoutDelay);
|
|
121
127
|
}
|
|
122
128
|
|
|
123
129
|
prevIsOpen.current = isOpen;
|
|
@@ -156,7 +162,16 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
156
162
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
157
163
|
window.removeEventListener('click', handleClick);
|
|
158
164
|
};
|
|
159
|
-
}, [
|
|
165
|
+
}, [
|
|
166
|
+
isOpen,
|
|
167
|
+
menuRef,
|
|
168
|
+
toggleRef,
|
|
169
|
+
onOpenChange,
|
|
170
|
+
onOpenChangeKeys,
|
|
171
|
+
shouldPreventScrollOnItemFocus,
|
|
172
|
+
shouldFocusFirstItemOnOpen,
|
|
173
|
+
focusTimeoutDelay
|
|
174
|
+
]);
|
|
160
175
|
|
|
161
176
|
const menu = (
|
|
162
177
|
<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 = (
|