@patternfly/react-core 4.276.1 → 4.276.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/components/ExpandableSection/ExpandableSection.d.ts +7 -0
- package/components/ExpandableSection/ExpandableSection.d.ts.map +1 -1
- package/components/ExpandableSection/ExpandableSection.js +39 -4
- package/components/ExpandableSection/ExpandableSection.js.map +1 -1
- package/components/Menu/Menu.d.ts +3 -0
- package/components/Menu/Menu.d.ts.map +1 -1
- package/components/Menu/Menu.js +6 -4
- package/components/Menu/Menu.js.map +1 -1
- package/components/Menu/MenuContext.d.ts +1 -0
- package/components/Menu/MenuContext.d.ts.map +1 -1
- package/components/Menu/MenuContext.js +2 -1
- package/components/Menu/MenuContext.js.map +1 -1
- package/components/Menu/MenuItem.d.ts.map +1 -1
- package/components/Menu/MenuItem.js +3 -2
- package/components/Menu/MenuItem.js.map +1 -1
- package/components/Menu/MenuList.d.ts +4 -0
- package/components/Menu/MenuList.d.ts.map +1 -1
- package/components/Menu/MenuList.js +4 -2
- package/components/Menu/MenuList.js.map +1 -1
- package/dist/esm/components/ExpandableSection/ExpandableSection.d.ts +7 -0
- package/dist/esm/components/ExpandableSection/ExpandableSection.d.ts.map +1 -1
- package/dist/esm/components/ExpandableSection/ExpandableSection.js +39 -4
- package/dist/esm/components/ExpandableSection/ExpandableSection.js.map +1 -1
- package/dist/esm/components/Menu/Menu.d.ts +3 -0
- package/dist/esm/components/Menu/Menu.d.ts.map +1 -1
- package/dist/esm/components/Menu/Menu.js +6 -4
- package/dist/esm/components/Menu/Menu.js.map +1 -1
- package/dist/esm/components/Menu/MenuContext.d.ts +1 -0
- package/dist/esm/components/Menu/MenuContext.d.ts.map +1 -1
- package/dist/esm/components/Menu/MenuContext.js +2 -1
- package/dist/esm/components/Menu/MenuContext.js.map +1 -1
- package/dist/esm/components/Menu/MenuItem.d.ts.map +1 -1
- package/dist/esm/components/Menu/MenuItem.js +3 -2
- package/dist/esm/components/Menu/MenuItem.js.map +1 -1
- package/dist/esm/components/Menu/MenuList.d.ts +4 -0
- package/dist/esm/components/Menu/MenuList.d.ts.map +1 -1
- package/dist/esm/components/Menu/MenuList.js +4 -2
- package/dist/esm/components/Menu/MenuList.js.map +1 -1
- package/dist/esm/next/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/next/components/Dropdown/Dropdown.js +19 -20
- package/dist/esm/next/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/next/components/Select/Select.d.ts +2 -0
- package/dist/esm/next/components/Select/Select.d.ts.map +1 -1
- package/dist/esm/next/components/Select/Select.js +21 -23
- package/dist/esm/next/components/Select/Select.js.map +1 -1
- package/dist/esm/next/components/Select/SelectList.d.ts +4 -0
- package/dist/esm/next/components/Select/SelectList.d.ts.map +1 -1
- package/dist/esm/next/components/Select/SelectList.js +2 -2
- package/dist/esm/next/components/Select/SelectList.js.map +1 -1
- package/dist/js/components/ExpandableSection/ExpandableSection.d.ts +7 -0
- package/dist/js/components/ExpandableSection/ExpandableSection.d.ts.map +1 -1
- package/dist/js/components/ExpandableSection/ExpandableSection.js +39 -4
- package/dist/js/components/ExpandableSection/ExpandableSection.js.map +1 -1
- package/dist/js/components/Menu/Menu.d.ts +3 -0
- package/dist/js/components/Menu/Menu.d.ts.map +1 -1
- package/dist/js/components/Menu/Menu.js +6 -4
- package/dist/js/components/Menu/Menu.js.map +1 -1
- package/dist/js/components/Menu/MenuContext.d.ts +1 -0
- package/dist/js/components/Menu/MenuContext.d.ts.map +1 -1
- package/dist/js/components/Menu/MenuContext.js +2 -1
- package/dist/js/components/Menu/MenuContext.js.map +1 -1
- package/dist/js/components/Menu/MenuItem.d.ts.map +1 -1
- package/dist/js/components/Menu/MenuItem.js +3 -2
- package/dist/js/components/Menu/MenuItem.js.map +1 -1
- package/dist/js/components/Menu/MenuList.d.ts +4 -0
- package/dist/js/components/Menu/MenuList.d.ts.map +1 -1
- package/dist/js/components/Menu/MenuList.js +4 -2
- package/dist/js/components/Menu/MenuList.js.map +1 -1
- package/dist/js/next/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/js/next/components/Dropdown/Dropdown.js +19 -20
- package/dist/js/next/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/js/next/components/Select/Select.d.ts +2 -0
- package/dist/js/next/components/Select/Select.d.ts.map +1 -1
- package/dist/js/next/components/Select/Select.js +21 -23
- package/dist/js/next/components/Select/Select.js.map +1 -1
- package/dist/js/next/components/Select/SelectList.d.ts +4 -0
- package/dist/js/next/components/Select/SelectList.d.ts.map +1 -1
- package/dist/js/next/components/Select/SelectList.js +2 -2
- package/dist/js/next/components/Select/SelectList.js.map +1 -1
- package/dist/umd/react-core.min.js +2 -2
- package/next/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/next/components/Dropdown/Dropdown.js +19 -20
- package/next/components/Dropdown/Dropdown.js.map +1 -1
- package/next/components/Select/Select.d.ts +2 -0
- package/next/components/Select/Select.d.ts.map +1 -1
- package/next/components/Select/Select.js +21 -23
- package/next/components/Select/Select.js.map +1 -1
- package/next/components/Select/SelectList.d.ts +4 -0
- package/next/components/Select/SelectList.d.ts.map +1 -1
- package/next/components/Select/SelectList.js +2 -2
- package/next/components/Select/SelectList.js.map +1 -1
- package/package.json +2 -2
- package/src/components/ExpandableSection/ExpandableSection.tsx +48 -4
- package/src/components/Menu/Menu.tsx +8 -2
- package/src/components/Menu/MenuContext.ts +3 -1
- package/src/components/Menu/MenuItem.tsx +5 -2
- package/src/components/Menu/MenuList.tsx +20 -5
- package/src/components/Menu/examples/Menu.md +17 -13
- package/src/components/Menu/examples/MenuOptionMultiSelect.tsx +2 -2
- package/src/components/Menu/examples/MenuOptionSingleSelect.tsx +2 -2
- package/src/next/components/Dropdown/Dropdown.tsx +12 -13
- package/src/next/components/Select/Select.tsx +16 -13
- package/src/next/components/Select/SelectList.tsx +6 -1
- package/src/next/components/Select/examples/SelectCheckbox.tsx +1 -0
- package/src/next/components/Select/examples/SelectMultiTypeahead.tsx +1 -1
|
@@ -58,28 +58,27 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
58
58
|
const menuRef = (innerRef as React.RefObject<HTMLDivElement>) || localMenuRef;
|
|
59
59
|
React.useEffect(() => {
|
|
60
60
|
const handleMenuKeys = (event: KeyboardEvent) => {
|
|
61
|
-
if (!isOpen && toggleRef.current?.contains(event.target as Node)) {
|
|
62
|
-
// toggle was clicked open, focus on first menu item
|
|
63
|
-
if (event.key === 'Enter') {
|
|
64
|
-
setTimeout(() => {
|
|
65
|
-
const firstElement = menuRef.current.querySelector('li > button:not(:disabled)');
|
|
66
|
-
firstElement && (firstElement as HTMLElement).focus();
|
|
67
|
-
}, 0);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
61
|
// Close the menu on tab or escape if onOpenChange is provided
|
|
71
62
|
if (
|
|
72
63
|
(isOpen && onOpenChange && menuRef.current?.contains(event.target as Node)) ||
|
|
73
64
|
toggleRef.current?.contains(event.target as Node)
|
|
74
65
|
) {
|
|
75
66
|
if (event.key === 'Escape' || event.key === 'Tab') {
|
|
76
|
-
onOpenChange(
|
|
67
|
+
onOpenChange(false);
|
|
77
68
|
toggleRef.current?.focus();
|
|
78
69
|
}
|
|
79
70
|
}
|
|
80
71
|
};
|
|
81
72
|
|
|
82
|
-
const
|
|
73
|
+
const handleClick = (event: MouseEvent) => {
|
|
74
|
+
// toggle was clicked open via keyboard, focus on first menu item
|
|
75
|
+
if (isOpen && toggleRef.current?.contains(event.target as Node) && event.detail === 0) {
|
|
76
|
+
setTimeout(() => {
|
|
77
|
+
const firstElement = menuRef?.current?.querySelector('li button:not(:disabled),li input:not(:disabled)');
|
|
78
|
+
firstElement && (firstElement as HTMLElement).focus();
|
|
79
|
+
}, 0);
|
|
80
|
+
}
|
|
81
|
+
|
|
83
82
|
// If the event is not on the toggle and onOpenChange callback is provided, close the menu
|
|
84
83
|
if (isOpen && onOpenChange && !toggleRef?.current?.contains(event.target as Node)) {
|
|
85
84
|
if (isOpen && !menuRef.current?.contains(event.target as Node)) {
|
|
@@ -89,11 +88,11 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
|
|
|
89
88
|
};
|
|
90
89
|
|
|
91
90
|
window.addEventListener('keydown', handleMenuKeys);
|
|
92
|
-
window.addEventListener('click',
|
|
91
|
+
window.addEventListener('click', handleClick);
|
|
93
92
|
|
|
94
93
|
return () => {
|
|
95
94
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
96
|
-
window.removeEventListener('click',
|
|
95
|
+
window.removeEventListener('click', handleClick);
|
|
97
96
|
};
|
|
98
97
|
}, [isOpen, menuRef, onOpenChange]);
|
|
99
98
|
|
|
@@ -28,6 +28,8 @@ export interface SelectProps extends MenuProps, OUIAProps {
|
|
|
28
28
|
innerRef?: React.Ref<HTMLDivElement>;
|
|
29
29
|
/** z-index of the select menu */
|
|
30
30
|
zIndex?: number;
|
|
31
|
+
/** @beta Determines the accessible role of the select. For a checkbox select pass in "menu". */
|
|
32
|
+
role?: string;
|
|
31
33
|
}
|
|
32
34
|
|
|
33
35
|
const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
@@ -42,6 +44,7 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
42
44
|
minWidth,
|
|
43
45
|
innerRef,
|
|
44
46
|
zIndex = 9999,
|
|
47
|
+
role = 'listbox',
|
|
45
48
|
...props
|
|
46
49
|
}: SelectProps & OUIAProps) => {
|
|
47
50
|
const localMenuRef = React.useRef<HTMLDivElement>();
|
|
@@ -51,28 +54,27 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
51
54
|
const menuRef = (innerRef as React.RefObject<HTMLDivElement>) || localMenuRef;
|
|
52
55
|
React.useEffect(() => {
|
|
53
56
|
const handleMenuKeys = (event: KeyboardEvent) => {
|
|
54
|
-
if (!isOpen && toggleRef.current?.contains(event.target as Node)) {
|
|
55
|
-
// toggle was clicked open, focus on first menu item
|
|
56
|
-
if (event.key === 'Enter' || event.key === 'Space') {
|
|
57
|
-
setTimeout(() => {
|
|
58
|
-
const firstElement = menuRef?.current?.querySelector('li button:not(:disabled),li input:not(:disabled)');
|
|
59
|
-
firstElement && (firstElement as HTMLElement).focus();
|
|
60
|
-
}, 0);
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
57
|
// Close the menu on tab or escape if onOpenChange is provided
|
|
64
58
|
if (
|
|
65
59
|
(isOpen && onOpenChange && menuRef.current?.contains(event.target as Node)) ||
|
|
66
60
|
toggleRef.current?.contains(event.target as Node)
|
|
67
61
|
) {
|
|
68
62
|
if (event.key === 'Escape' || event.key === 'Tab') {
|
|
69
|
-
onOpenChange(
|
|
63
|
+
onOpenChange(false);
|
|
70
64
|
toggleRef.current?.focus();
|
|
71
65
|
}
|
|
72
66
|
}
|
|
73
67
|
};
|
|
74
68
|
|
|
75
|
-
const
|
|
69
|
+
const handleClick = (event: MouseEvent) => {
|
|
70
|
+
// toggle was clicked open via keyboard, focus on first menu item
|
|
71
|
+
if (isOpen && toggleRef.current?.contains(event.target as Node) && event.detail === 0) {
|
|
72
|
+
setTimeout(() => {
|
|
73
|
+
const firstElement = menuRef?.current?.querySelector('li button:not(:disabled),li input:not(:disabled)');
|
|
74
|
+
firstElement && (firstElement as HTMLElement).focus();
|
|
75
|
+
}, 0);
|
|
76
|
+
}
|
|
77
|
+
|
|
76
78
|
// If the event is not on the toggle and onOpenChange callback is provided, close the menu
|
|
77
79
|
if (isOpen && onOpenChange && !toggleRef?.current?.contains(event.target as Node)) {
|
|
78
80
|
if (isOpen && !menuRef.current?.contains(event.target as Node)) {
|
|
@@ -82,16 +84,17 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
|
|
|
82
84
|
};
|
|
83
85
|
|
|
84
86
|
window.addEventListener('keydown', handleMenuKeys);
|
|
85
|
-
window.addEventListener('click',
|
|
87
|
+
window.addEventListener('click', handleClick);
|
|
86
88
|
|
|
87
89
|
return () => {
|
|
88
90
|
window.removeEventListener('keydown', handleMenuKeys);
|
|
89
|
-
window.removeEventListener('click',
|
|
91
|
+
window.removeEventListener('click', handleClick);
|
|
90
92
|
};
|
|
91
93
|
}, [isOpen, menuRef, onOpenChange]);
|
|
92
94
|
|
|
93
95
|
const menu = (
|
|
94
96
|
<Menu
|
|
97
|
+
role={role}
|
|
95
98
|
className={css(className)}
|
|
96
99
|
ref={menuRef}
|
|
97
100
|
onSelect={(event, itemId) => onSelect(event, itemId)}
|
|
@@ -7,14 +7,19 @@ export interface SelectListProps extends MenuListProps {
|
|
|
7
7
|
children: React.ReactNode;
|
|
8
8
|
/** Classes applied to root element of select list */
|
|
9
9
|
className?: string;
|
|
10
|
+
/** @beta Indicates to assistive technologies whether more than one item can be selected
|
|
11
|
+
* for a non-checkbox select.
|
|
12
|
+
*/
|
|
13
|
+
isAriaMultiselectable?: boolean;
|
|
10
14
|
}
|
|
11
15
|
|
|
12
16
|
export const SelectList: React.FunctionComponent<MenuListProps> = ({
|
|
13
17
|
children,
|
|
14
18
|
className,
|
|
19
|
+
isAriaMultiselectable = false,
|
|
15
20
|
...props
|
|
16
21
|
}: SelectListProps) => (
|
|
17
|
-
<MenuList className={css(className)} {...props}>
|
|
22
|
+
<MenuList isAriaMultiselectable={isAriaMultiselectable} className={css(className)} {...props}>
|
|
18
23
|
{children}
|
|
19
24
|
</MenuList>
|
|
20
25
|
);
|
|
@@ -179,7 +179,7 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
|
|
|
179
179
|
onOpenChange={() => setIsOpen(false)}
|
|
180
180
|
toggle={toggle}
|
|
181
181
|
>
|
|
182
|
-
<SelectList>
|
|
182
|
+
<SelectList isAriaMultiselectable>
|
|
183
183
|
{selectOptions.map((option, index) => (
|
|
184
184
|
<SelectOption
|
|
185
185
|
key={option.itemId || option.children}
|