@patternfly/react-core 4.211.1 → 4.211.4
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 +30 -0
- package/dist/esm/components/Menu/Menu.js +1 -1
- package/dist/esm/components/Menu/Menu.js.map +1 -1
- package/dist/esm/components/Modal/Modal.d.ts +4 -0
- package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
- package/dist/esm/components/Modal/Modal.js +2 -2
- package/dist/esm/components/Modal/Modal.js.map +1 -1
- package/dist/esm/components/Modal/ModalContent.d.ts +4 -0
- package/dist/esm/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/esm/components/Modal/ModalContent.js +3 -2
- package/dist/esm/components/Modal/ModalContent.js.map +1 -1
- package/dist/esm/components/Page/PageBreadcrumb.d.ts.map +1 -1
- package/dist/esm/components/Page/PageBreadcrumb.js +1 -1
- package/dist/esm/components/Page/PageBreadcrumb.js.map +1 -1
- package/dist/esm/components/Page/PageGroup.d.ts.map +1 -1
- package/dist/esm/components/Page/PageGroup.js +1 -1
- package/dist/esm/components/Page/PageGroup.js.map +1 -1
- package/dist/esm/components/Page/PageNavigation.d.ts.map +1 -1
- package/dist/esm/components/Page/PageNavigation.js +1 -1
- package/dist/esm/components/Page/PageNavigation.js.map +1 -1
- package/dist/esm/components/Page/PageSection.d.ts.map +1 -1
- package/dist/esm/components/Page/PageSection.js +1 -1
- package/dist/esm/components/Page/PageSection.js.map +1 -1
- package/dist/esm/components/Panel/Panel.d.ts +3 -1
- package/dist/esm/components/Panel/Panel.d.ts.map +1 -1
- package/dist/esm/components/Panel/Panel.js +4 -3
- package/dist/esm/components/Panel/Panel.js.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.d.ts +6 -0
- package/dist/esm/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js +2 -2
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/helpers/KeyboardHandler.d.ts +2 -0
- package/dist/esm/helpers/KeyboardHandler.d.ts.map +1 -1
- package/dist/esm/helpers/KeyboardHandler.js +3 -2
- package/dist/esm/helpers/KeyboardHandler.js.map +1 -1
- package/dist/js/components/Menu/Menu.js +1 -1
- package/dist/js/components/Menu/Menu.js.map +1 -1
- package/dist/js/components/Modal/Modal.d.ts +4 -0
- package/dist/js/components/Modal/Modal.d.ts.map +1 -1
- package/dist/js/components/Modal/Modal.js +2 -2
- package/dist/js/components/Modal/Modal.js.map +1 -1
- package/dist/js/components/Modal/ModalContent.d.ts +4 -0
- package/dist/js/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/js/components/Modal/ModalContent.js +3 -2
- package/dist/js/components/Modal/ModalContent.js.map +1 -1
- package/dist/js/components/Page/PageBreadcrumb.d.ts.map +1 -1
- package/dist/js/components/Page/PageBreadcrumb.js +1 -1
- package/dist/js/components/Page/PageBreadcrumb.js.map +1 -1
- package/dist/js/components/Page/PageGroup.d.ts.map +1 -1
- package/dist/js/components/Page/PageGroup.js +1 -1
- package/dist/js/components/Page/PageGroup.js.map +1 -1
- package/dist/js/components/Page/PageNavigation.d.ts.map +1 -1
- package/dist/js/components/Page/PageNavigation.js +1 -1
- package/dist/js/components/Page/PageNavigation.js.map +1 -1
- package/dist/js/components/Page/PageSection.d.ts.map +1 -1
- package/dist/js/components/Page/PageSection.js +1 -1
- package/dist/js/components/Page/PageSection.js.map +1 -1
- package/dist/js/components/Panel/Panel.d.ts +3 -1
- package/dist/js/components/Panel/Panel.d.ts.map +1 -1
- package/dist/js/components/Panel/Panel.js +4 -4
- package/dist/js/components/Panel/Panel.js.map +1 -1
- package/dist/js/components/Tooltip/Tooltip.d.ts +6 -0
- package/dist/js/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/js/components/Tooltip/Tooltip.js +2 -2
- package/dist/js/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/js/helpers/KeyboardHandler.d.ts +2 -0
- package/dist/js/helpers/KeyboardHandler.d.ts.map +1 -1
- package/dist/js/helpers/KeyboardHandler.js +3 -2
- package/dist/js/helpers/KeyboardHandler.js.map +1 -1
- package/dist/umd/react-core.css +5 -0
- package/dist/umd/react-core.js +19 -16
- package/dist/umd/react-core.min.css +5 -0
- package/dist/umd/react-core.min.js +4 -4
- package/package.json +6 -6
- package/src/components/Menu/Menu.tsx +1 -1
- package/src/components/Modal/Modal.tsx +8 -0
- package/src/components/Modal/ModalContent.tsx +14 -1
- package/src/components/Modal/__tests__/Modal.test.tsx +56 -0
- package/src/components/Modal/examples/Modal.md +7 -0
- package/src/components/Modal/examples/ModalWithOverflowingContent.tsx +71 -0
- package/src/components/Page/PageBreadcrumb.tsx +1 -0
- package/src/components/Page/PageGroup.tsx +1 -0
- package/src/components/Page/PageNavigation.tsx +1 -0
- package/src/components/Page/PageSection.tsx +1 -0
- package/src/components/Page/__tests__/__snapshots__/PageBreadcrumb.test.tsx.snap +1 -0
- package/src/components/Page/__tests__/__snapshots__/PageGroup.test.tsx.snap +1 -0
- package/src/components/Page/__tests__/__snapshots__/PageNavigation.test.tsx.snap +1 -0
- package/src/components/Page/__tests__/__snapshots__/PageSection.test.tsx.snap +1 -0
- package/src/components/Panel/Panel.tsx +8 -1
- package/src/components/Tabs/examples/Tabs.md +144 -25
- package/src/components/Tooltip/Tooltip.tsx +8 -0
- package/src/components/Tooltip/examples/Tooltip.md +86 -41
- package/src/demos/ComposableMenu/ComposableMenu.md +2 -0
- package/src/demos/ComposableMenu/examples/ComposableTreeViewMenu.tsx +62 -28
- package/src/helpers/KeyboardHandler.tsx +7 -2
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import {
|
|
3
3
|
MenuToggle,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
Panel,
|
|
5
|
+
PanelMain,
|
|
6
|
+
PanelMainBody,
|
|
7
|
+
Title,
|
|
8
8
|
Popper,
|
|
9
9
|
TreeView,
|
|
10
10
|
TreeViewDataItem
|
|
@@ -14,6 +14,7 @@ export const ComposableTreeViewMenu: React.FunctionComponent = () => {
|
|
|
14
14
|
const [isOpen, setIsOpen] = React.useState<boolean>(false);
|
|
15
15
|
const [checkedItems, setCheckedItems] = React.useState<TreeViewDataItem[]>([]);
|
|
16
16
|
const toggleRef = React.useRef<HTMLButtonElement>();
|
|
17
|
+
const containerRef = React.useRef<HTMLDivElement>();
|
|
17
18
|
const menuRef = React.useRef<HTMLDivElement>();
|
|
18
19
|
|
|
19
20
|
const statusOptions: TreeViewDataItem[] = [
|
|
@@ -85,7 +86,7 @@ export const ComposableTreeViewMenu: React.FunctionComponent = () => {
|
|
|
85
86
|
customBadgeContent: 0
|
|
86
87
|
}
|
|
87
88
|
];
|
|
88
|
-
// Helper functions
|
|
89
|
+
// Helper functions for tree
|
|
89
90
|
const isChecked = (dataItem: TreeViewDataItem) => checkedItems.some(item => item.id === dataItem.id);
|
|
90
91
|
const areAllDescendantsChecked = (dataItem: TreeViewDataItem) =>
|
|
91
92
|
dataItem.children ? dataItem.children.every(child => areAllDescendantsChecked(child)) : isChecked(dataItem);
|
|
@@ -163,18 +164,32 @@ export const ComposableTreeViewMenu: React.FunctionComponent = () => {
|
|
|
163
164
|
);
|
|
164
165
|
};
|
|
165
166
|
|
|
167
|
+
// Controls keys that should open/close the menu
|
|
166
168
|
const handleMenuKeys = (event: KeyboardEvent) => {
|
|
167
169
|
if (!isOpen) {
|
|
168
170
|
return;
|
|
169
171
|
}
|
|
170
172
|
if (menuRef.current.contains(event.target as Node) || toggleRef.current.contains(event.target as Node)) {
|
|
171
|
-
|
|
173
|
+
// The escape key when pressed while inside the menu should close the menu and refocus the toggle
|
|
174
|
+
if (event.key === 'Escape') {
|
|
172
175
|
setIsOpen(!isOpen);
|
|
173
176
|
toggleRef.current.focus();
|
|
174
177
|
}
|
|
178
|
+
|
|
179
|
+
// The tab key when pressed while inside the menu and on the contained last tree view should close the menu and refocus the toggle
|
|
180
|
+
// Shift tab should keep the default behavior to return to a previous tree view
|
|
181
|
+
if (event.key === 'Tab' && !event.shiftKey) {
|
|
182
|
+
const treeList = menuRef.current.querySelectorAll('.pf-c-tree-view');
|
|
183
|
+
if (treeList[treeList.length - 1].contains(event.target as Node)) {
|
|
184
|
+
event.preventDefault();
|
|
185
|
+
setIsOpen(!isOpen);
|
|
186
|
+
toggleRef.current.focus();
|
|
187
|
+
}
|
|
188
|
+
}
|
|
175
189
|
}
|
|
176
190
|
};
|
|
177
191
|
|
|
192
|
+
// Controls that a click outside the menu while the menu is open should close the menu
|
|
178
193
|
const handleClickOutside = (event: MouseEvent) => {
|
|
179
194
|
if (isOpen && !menuRef.current.contains(event.target as Node)) {
|
|
180
195
|
setIsOpen(false);
|
|
@@ -194,7 +209,7 @@ export const ComposableTreeViewMenu: React.FunctionComponent = () => {
|
|
|
194
209
|
ev.stopPropagation(); // Stop handleClickOutside from handling
|
|
195
210
|
setTimeout(() => {
|
|
196
211
|
if (menuRef.current) {
|
|
197
|
-
const firstElement = menuRef.current.querySelector('li
|
|
212
|
+
const firstElement = menuRef.current.querySelector('li button:not(:disabled)');
|
|
198
213
|
firstElement && (firstElement as HTMLElement).focus();
|
|
199
214
|
}
|
|
200
215
|
}, 0);
|
|
@@ -202,39 +217,58 @@ export const ComposableTreeViewMenu: React.FunctionComponent = () => {
|
|
|
202
217
|
};
|
|
203
218
|
|
|
204
219
|
const toggle = (
|
|
205
|
-
<
|
|
206
|
-
{
|
|
207
|
-
|
|
220
|
+
<div ref={containerRef}>
|
|
221
|
+
<MenuToggle ref={toggleRef} onClick={onToggleClick} isExpanded={isOpen}>
|
|
222
|
+
{isOpen ? 'Expanded' : 'Collapsed'}
|
|
223
|
+
</MenuToggle>
|
|
224
|
+
</div>
|
|
208
225
|
);
|
|
209
226
|
const statusMapped = statusOptions.map(mapTree);
|
|
210
227
|
const roleMapped = roleOptions.map(mapTree);
|
|
211
228
|
const menu = (
|
|
212
|
-
<
|
|
229
|
+
<Panel
|
|
213
230
|
ref={menuRef}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
'--pf-c-menu--Width': '300px'
|
|
219
|
-
} as React.CSSProperties
|
|
220
|
-
}
|
|
231
|
+
variant="raised"
|
|
232
|
+
style={{
|
|
233
|
+
width: '300px'
|
|
234
|
+
}}
|
|
221
235
|
>
|
|
222
|
-
<
|
|
223
|
-
<
|
|
224
|
-
<
|
|
236
|
+
<PanelMain>
|
|
237
|
+
<section>
|
|
238
|
+
<PanelMainBody style={{ paddingBottom: 0 }}>
|
|
239
|
+
<Title headingLevel="h1" size={'md'}>
|
|
240
|
+
Status
|
|
241
|
+
</Title>
|
|
242
|
+
</PanelMainBody>
|
|
243
|
+
<PanelMainBody style={{ padding: 0 }}>
|
|
225
244
|
<TreeView
|
|
226
245
|
data={statusMapped}
|
|
227
246
|
hasBadges
|
|
228
247
|
hasChecks
|
|
229
248
|
onCheck={(event, item) => onCheck(event, item, 'status')}
|
|
230
249
|
/>
|
|
231
|
-
</
|
|
232
|
-
|
|
250
|
+
</PanelMainBody>
|
|
251
|
+
</section>
|
|
252
|
+
<section>
|
|
253
|
+
<PanelMainBody style={{ paddingBottom: 0, paddingTop: 0 }}>
|
|
254
|
+
<Title headingLevel="h1" size={'md'}>
|
|
255
|
+
Roles
|
|
256
|
+
</Title>
|
|
257
|
+
</PanelMainBody>
|
|
258
|
+
<PanelMainBody style={{ padding: 0 }}>
|
|
233
259
|
<TreeView data={roleMapped} hasBadges hasChecks onCheck={(event, item) => onCheck(event, item, 'role')} />
|
|
234
|
-
</
|
|
235
|
-
</
|
|
236
|
-
</
|
|
237
|
-
</
|
|
260
|
+
</PanelMainBody>
|
|
261
|
+
</section>
|
|
262
|
+
</PanelMain>
|
|
263
|
+
</Panel>
|
|
264
|
+
);
|
|
265
|
+
return (
|
|
266
|
+
<Popper
|
|
267
|
+
trigger={toggle}
|
|
268
|
+
popper={menu}
|
|
269
|
+
isVisible={isOpen}
|
|
270
|
+
appendTo={containerRef.current}
|
|
271
|
+
popperMatchesTriggerWidth={false}
|
|
272
|
+
/>
|
|
238
273
|
);
|
|
239
|
-
return <Popper trigger={toggle} popper={menu} isVisible={isOpen} popperMatchesTriggerWidth={false} />;
|
|
240
274
|
};
|
|
@@ -18,6 +18,8 @@ export interface KeyboardHandlerProps {
|
|
|
18
18
|
validSiblingTags?: string[];
|
|
19
19
|
/** Flag indicating that the tabIndex of the currently focused element and next focused element should be updated, in the case of using a roving tabIndex */
|
|
20
20
|
updateTabIndex?: boolean;
|
|
21
|
+
/** Flag indicating that next focusable element of a horizontal movement will be this element's sibling */
|
|
22
|
+
onlyTraverseSiblings?: boolean;
|
|
21
23
|
/** Flag indicating that the included vertical arrow key handling should be ignored */
|
|
22
24
|
noVerticalArrowHandling?: boolean;
|
|
23
25
|
/** Flag indicating that the included horizontal arrow key handling should be ignored */
|
|
@@ -176,6 +178,7 @@ export class KeyboardHandler extends React.Component<KeyboardHandlerProps> {
|
|
|
176
178
|
isActiveElement: (navigableElement: Element) => document.activeElement === navigableElement,
|
|
177
179
|
getFocusableElement: (navigableElement: Element) => navigableElement,
|
|
178
180
|
validSiblingTags: ['BUTTON', 'A'],
|
|
181
|
+
onlyTraverseSiblings: true,
|
|
179
182
|
updateTabIndex: true,
|
|
180
183
|
noHorizontalArrowHandling: false,
|
|
181
184
|
noVerticalArrowHandling: false,
|
|
@@ -212,7 +215,8 @@ export class KeyboardHandler extends React.Component<KeyboardHandlerProps> {
|
|
|
212
215
|
updateTabIndex,
|
|
213
216
|
validSiblingTags,
|
|
214
217
|
additionalKeyHandler,
|
|
215
|
-
createNavigableElements
|
|
218
|
+
createNavigableElements,
|
|
219
|
+
onlyTraverseSiblings
|
|
216
220
|
} = this.props;
|
|
217
221
|
|
|
218
222
|
// Pass the event off to be handled by any custom handler
|
|
@@ -256,7 +260,8 @@ export class KeyboardHandler extends React.Component<KeyboardHandlerProps> {
|
|
|
256
260
|
validSiblingTags,
|
|
257
261
|
noVerticalArrowHandling,
|
|
258
262
|
noHorizontalArrowHandling,
|
|
259
|
-
updateTabIndex
|
|
263
|
+
updateTabIndex,
|
|
264
|
+
onlyTraverseSiblings
|
|
260
265
|
);
|
|
261
266
|
};
|
|
262
267
|
|