@patternfly/react-core 5.2.0-prerelease.12 → 5.2.0-prerelease.14
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/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/package.json +1 -1
- package/dist/esm/components/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/esm/components/InputGroup/InputGroup.js +1 -51
- package/dist/esm/components/InputGroup/InputGroup.js.map +1 -1
- package/dist/esm/components/Nav/NavExpandable.d.ts +3 -3
- package/dist/esm/components/Nav/NavExpandable.d.ts.map +1 -1
- package/dist/esm/components/Nav/NavExpandable.js +2 -2
- package/dist/esm/components/Nav/NavExpandable.js.map +1 -1
- package/dist/esm/components/Nav/NavItem.d.ts +2 -0
- package/dist/esm/components/Nav/NavItem.d.ts.map +1 -1
- package/dist/esm/components/Nav/NavItem.js +2 -2
- package/dist/esm/components/Nav/NavItem.js.map +1 -1
- package/dist/js/components/InputGroup/InputGroup.d.ts.map +1 -1
- package/dist/js/components/InputGroup/InputGroup.js +1 -51
- package/dist/js/components/InputGroup/InputGroup.js.map +1 -1
- package/dist/js/components/Nav/NavExpandable.d.ts +3 -3
- package/dist/js/components/Nav/NavExpandable.d.ts.map +1 -1
- package/dist/js/components/Nav/NavExpandable.js +2 -2
- package/dist/js/components/Nav/NavExpandable.js.map +1 -1
- package/dist/js/components/Nav/NavItem.d.ts +2 -0
- package/dist/js/components/Nav/NavItem.d.ts.map +1 -1
- package/dist/js/components/Nav/NavItem.js +2 -2
- package/dist/js/components/Nav/NavItem.js.map +1 -1
- package/dist/umd/react-core.min.js +2 -2
- 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/InputGroup/InputGroup.tsx +1 -53
- package/src/components/InputGroup/__tests__/InputGroup.test.tsx +7 -44
- package/src/components/Nav/NavExpandable.tsx +5 -5
- package/src/components/Nav/NavItem.tsx +4 -1
- package/src/components/Nav/examples/Nav.md +8 -0
- package/src/components/Nav/examples/NavExpandableThirdLevel.tsx +1 -1
- package/src/components/Nav/examples/NavLinkText.tsx +109 -0
- package/src/components/Nav/examples/nav.css +1 -0
- package/src/components/NumberInput/__tests__/NumberInput.test.tsx +0 -1
- package/src/demos/Nav.md +10 -1673
- package/src/demos/examples/Nav/NavDefault.tsx +98 -0
- package/src/demos/examples/Nav/NavDrilldown.tsx +2 -0
- package/src/demos/examples/Nav/NavExpandable.tsx +124 -0
- package/src/demos/examples/Nav/NavFlyout.tsx +278 -0
- package/src/demos/examples/Nav/NavGrouped.tsx +99 -0
- package/src/demos/examples/Nav/NavHorizontal.tsx +237 -0
- package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +297 -0
- package/src/demos/examples/Nav/NavManual.tsx +273 -0
- package/src/demos/examples/Nav/NavWithSubnav.tsx +142 -0
- package/src/demos/examples/Nav/deprecated/NavLight.tsx +96 -0
- package/src/demos/examples/Nav/deprecated/NavTertiary.tsx +92 -0
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.2.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":"5.2.0-prerelease.13","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.2.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":"5.2.0-prerelease.13","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.2.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":"5.2.0-prerelease.13","private":true}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@patternfly/react-core",
|
|
3
|
-
"version": "5.2.0-prerelease.
|
|
3
|
+
"version": "5.2.0-prerelease.14",
|
|
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",
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"react": "^17 || ^18",
|
|
72
72
|
"react-dom": "^17 || ^18"
|
|
73
73
|
},
|
|
74
|
-
"gitHead": "
|
|
74
|
+
"gitHead": "7d28e1d3fd8219525537a122a54ab939b6e55647"
|
|
75
75
|
}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import styles from '@patternfly/react-styles/css/components/InputGroup/input-group';
|
|
3
3
|
import { css } from '@patternfly/react-styles';
|
|
4
|
-
import { FormSelect } from '../FormSelect';
|
|
5
|
-
import { TextArea } from '../TextArea';
|
|
6
|
-
import { TextInput } from '../TextInput';
|
|
7
4
|
|
|
8
5
|
export interface InputGroupProps extends React.HTMLProps<HTMLDivElement> {
|
|
9
6
|
/** Additional classes added to the input group. */
|
|
@@ -20,61 +17,12 @@ export const InputGroupBase: React.FunctionComponent<InputGroupProps> = ({
|
|
|
20
17
|
innerRef,
|
|
21
18
|
...props
|
|
22
19
|
}: InputGroupProps) => {
|
|
23
|
-
const getIdItem = () => {
|
|
24
|
-
const getChildId = (_children: any) =>
|
|
25
|
-
React.Children.toArray(_children).find(
|
|
26
|
-
(_child: any) => !formCtrls.includes(_child?.type?.displayName) && _child?.props?.id
|
|
27
|
-
);
|
|
28
|
-
let childId = getChildId(children);
|
|
29
|
-
if (childId) {
|
|
30
|
-
return childId;
|
|
31
|
-
}
|
|
32
|
-
React.Children.toArray(children).find((child: any) => {
|
|
33
|
-
const _childId = getChildId(child.props.children);
|
|
34
|
-
if (_childId) {
|
|
35
|
-
childId = _childId;
|
|
36
|
-
return true;
|
|
37
|
-
}
|
|
38
|
-
});
|
|
39
|
-
return childId;
|
|
40
|
-
};
|
|
41
|
-
const formCtrls = [FormSelect, TextArea, TextInput].map((comp) => comp.displayName);
|
|
42
|
-
const idItem = getIdItem() as React.ReactElement<{ id: string }>;
|
|
43
20
|
const ref = React.useRef(null);
|
|
44
21
|
const inputGroupRef = innerRef || ref;
|
|
45
22
|
|
|
46
|
-
const childrenWithId = React.Children.map(children, (child: any) => {
|
|
47
|
-
if (child?.type.displayName === 'InputGroupItem') {
|
|
48
|
-
const newChildren = React.Children.map(child.props.children, (_child) => {
|
|
49
|
-
if (!_child.props) {
|
|
50
|
-
return _child;
|
|
51
|
-
}
|
|
52
|
-
if (_child.props['aria-describedby']) {
|
|
53
|
-
return _child;
|
|
54
|
-
}
|
|
55
|
-
if (!formCtrls.includes(_child.type.displayName)) {
|
|
56
|
-
return _child;
|
|
57
|
-
}
|
|
58
|
-
return React.cloneElement(_child, {
|
|
59
|
-
'aria-describedby': _child.props['aria-describedby'] === '' ? undefined : idItem?.props?.id
|
|
60
|
-
});
|
|
61
|
-
});
|
|
62
|
-
return React.cloneElement(child, {}, newChildren);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
if (child?.props['aria-describedby']) {
|
|
66
|
-
return child;
|
|
67
|
-
}
|
|
68
|
-
if (!formCtrls.includes(child?.type.displayName)) {
|
|
69
|
-
return child;
|
|
70
|
-
}
|
|
71
|
-
return React.cloneElement(child, {
|
|
72
|
-
'aria-describedby': child.props['aria-describedby'] === '' ? undefined : idItem?.props?.id
|
|
73
|
-
});
|
|
74
|
-
});
|
|
75
23
|
return (
|
|
76
24
|
<div ref={inputGroupRef} className={css(styles.inputGroup, className)} {...props}>
|
|
77
|
-
{
|
|
25
|
+
{children}
|
|
78
26
|
</div>
|
|
79
27
|
);
|
|
80
28
|
};
|
|
@@ -8,59 +8,22 @@ import { Button } from '../../Button';
|
|
|
8
8
|
import { TextInput } from '../../TextInput';
|
|
9
9
|
|
|
10
10
|
describe('InputGroup', () => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
// If Button has an id props, this should be used in aria-describedby.
|
|
11
|
+
// Regression test for https://github.com/patternfly/patternfly-react/issues/9667
|
|
12
|
+
test('wont add aria-describedby automatically to form-control', () => {
|
|
14
13
|
render(
|
|
15
14
|
<InputGroup>
|
|
16
15
|
<InputGroupItem>
|
|
17
|
-
<TextInput
|
|
16
|
+
<TextInput aria-label="User password" />
|
|
18
17
|
</InputGroupItem>
|
|
19
18
|
<InputGroupItem>
|
|
20
|
-
<Button variant="
|
|
21
|
-
|
|
19
|
+
<Button variant="control" id="show-password-toggler">
|
|
20
|
+
Show
|
|
22
21
|
</Button>
|
|
23
22
|
</InputGroupItem>
|
|
24
23
|
</InputGroup>
|
|
25
24
|
);
|
|
26
|
-
expect(screen.getByLabelText('some text')).toHaveAttribute('aria-describedby', 'button-id');
|
|
27
|
-
});
|
|
28
25
|
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
// If Button has an id props, this should be used in aria-describedby, but this
|
|
32
|
-
// example has an empty aria-describedby to prevent that from happening.
|
|
33
|
-
render(
|
|
34
|
-
<InputGroup>
|
|
35
|
-
<InputGroupItem>
|
|
36
|
-
<TextInput value="some data" aria-describedby="" aria-label="some text" />
|
|
37
|
-
</InputGroupItem>
|
|
38
|
-
<InputGroupItem>
|
|
39
|
-
<Button id="button-id">
|
|
40
|
-
hello
|
|
41
|
-
</Button>
|
|
42
|
-
</InputGroupItem>
|
|
43
|
-
</InputGroup>
|
|
44
|
-
);
|
|
45
|
-
expect(screen.getByLabelText('some text')).not.toHaveAttribute('aria-describedby');
|
|
46
|
-
});
|
|
47
|
-
|
|
48
|
-
test('wont override aria-describedby in form-control if describedby has value', () => {
|
|
49
|
-
// In this test, TextInput is a form-control component and Button is not.
|
|
50
|
-
// If Button has an id props, this should be used in aria-describedby, but this
|
|
51
|
-
// example has a predefined aria-describedby to prevent that from happening
|
|
52
|
-
render(
|
|
53
|
-
<InputGroup>
|
|
54
|
-
<InputGroupItem>
|
|
55
|
-
<TextInput value="some data" aria-describedby="myself" aria-label="some text" />
|
|
56
|
-
</InputGroupItem>
|
|
57
|
-
<InputGroupItem>
|
|
58
|
-
<Button id="button-id">
|
|
59
|
-
hello
|
|
60
|
-
</Button>
|
|
61
|
-
</InputGroupItem>
|
|
62
|
-
</InputGroup>
|
|
63
|
-
);
|
|
64
|
-
expect(screen.getByLabelText('some text')).toHaveAttribute('aria-describedby', 'myself');
|
|
26
|
+
const formControl = screen.getByLabelText("User password");
|
|
27
|
+
expect(formControl).not.toHaveAttribute("aria-describedby");
|
|
65
28
|
});
|
|
66
29
|
});
|
|
@@ -9,10 +9,10 @@ import { PickOptional } from '../../helpers/typeUtils';
|
|
|
9
9
|
import { getOUIAProps, OUIAProps, getDefaultOUIAId } from '../../helpers';
|
|
10
10
|
|
|
11
11
|
export interface NavExpandableProps
|
|
12
|
-
extends React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>,
|
|
12
|
+
extends Omit<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>, 'title'>,
|
|
13
13
|
OUIAProps {
|
|
14
|
-
/** Title shown for the expandable list */
|
|
15
|
-
title:
|
|
14
|
+
/** Title content shown for the expandable list */
|
|
15
|
+
title: React.ReactNode;
|
|
16
16
|
/** If defined, screen readers will read this text instead of the list title */
|
|
17
17
|
srText?: string;
|
|
18
18
|
/** Boolean to programatically expand or collapse section */
|
|
@@ -126,14 +126,14 @@ class NavExpandable extends React.Component<NavExpandableProps, NavExpandableSta
|
|
|
126
126
|
<PageSidebarContext.Consumer>
|
|
127
127
|
{({ isSidebarOpen }) => (
|
|
128
128
|
<button
|
|
129
|
-
className={styles.navLink}
|
|
129
|
+
className={css(styles.navLink)}
|
|
130
130
|
id={srText ? null : this.id}
|
|
131
131
|
onClick={(event) => this.onExpand(event, context.onToggle)}
|
|
132
132
|
aria-expanded={expandedState}
|
|
133
133
|
tabIndex={isSidebarOpen ? null : -1}
|
|
134
134
|
{...buttonProps}
|
|
135
135
|
>
|
|
136
|
-
{title}
|
|
136
|
+
{typeof title !== 'string' ? <span className={css(`${styles.nav}__link-text`)}>{title}</span> : title}
|
|
137
137
|
<span className={css(styles.navToggle)}>
|
|
138
138
|
<span className={css(styles.navToggleIcon)}>
|
|
139
139
|
<AngleRightIcon aria-hidden="true" />
|
|
@@ -38,6 +38,8 @@ export interface NavItemProps extends Omit<React.HTMLProps<HTMLAnchorElement>, '
|
|
|
38
38
|
ouiaId?: number | string;
|
|
39
39
|
/** Set the value of data-ouia-safe. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false. */
|
|
40
40
|
ouiaSafe?: boolean;
|
|
41
|
+
/** @beta Adds a wrapper around the nav link text. Improves the layout when the text is a react node. */
|
|
42
|
+
hasNavLinkWrapper?: boolean;
|
|
41
43
|
}
|
|
42
44
|
|
|
43
45
|
export const NavItem: React.FunctionComponent<NavItemProps> = ({
|
|
@@ -56,6 +58,7 @@ export const NavItem: React.FunctionComponent<NavItemProps> = ({
|
|
|
56
58
|
ouiaId,
|
|
57
59
|
ouiaSafe,
|
|
58
60
|
zIndex = 9999,
|
|
61
|
+
hasNavLinkWrapper,
|
|
59
62
|
...props
|
|
60
63
|
}: NavItemProps) => {
|
|
61
64
|
const { flyoutRef, setFlyoutRef, navRef } = React.useContext(NavContext);
|
|
@@ -188,7 +191,7 @@ export const NavItem: React.FunctionComponent<NavItemProps> = ({
|
|
|
188
191
|
{...(hasFlyout && { ...ariaFlyoutProps })}
|
|
189
192
|
{...props}
|
|
190
193
|
>
|
|
191
|
-
{children}
|
|
194
|
+
{hasNavLinkWrapper ? <span className={css(`${styles.nav}__link-text`)}>{children}</span> : children}
|
|
192
195
|
{flyout && flyoutButton}
|
|
193
196
|
</Component>
|
|
194
197
|
);
|
|
@@ -7,6 +7,8 @@ ouia: true
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
9
|
import './nav.css';
|
|
10
|
+
import ArrowRightIcon from '@patternfly/react-icons/dist/esm/icons/arrow-right-icon';
|
|
11
|
+
import UserIcon from '@patternfly/react-icons/dist/esm/icons/user-icon';
|
|
10
12
|
|
|
11
13
|
## Examples
|
|
12
14
|
|
|
@@ -68,6 +70,12 @@ A flyout should be a `Menu` component. Press `space` or `right arrow` to open a
|
|
|
68
70
|
|
|
69
71
|
```
|
|
70
72
|
|
|
73
|
+
### Link text
|
|
74
|
+
|
|
75
|
+
```ts isBeta file="./NavLinkText.tsx"
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
|
|
71
79
|
## Types
|
|
72
80
|
|
|
73
81
|
### NavSelectClickHandler
|
|
@@ -62,7 +62,7 @@ export const NavExpandableThirdLevel: React.FunctionComponent = () => {
|
|
|
62
62
|
</NavItem>
|
|
63
63
|
</NavExpandable>
|
|
64
64
|
<NavExpandable
|
|
65
|
-
title=
|
|
65
|
+
title={'Expandable section title 2'}
|
|
66
66
|
groupId="nav-expand3rd-group-2"
|
|
67
67
|
isActive={activeGroup === 'nav-expand3rd-group-2'}
|
|
68
68
|
isExpanded
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { Nav, NavExpandable, NavItem, NavList } from '@patternfly/react-core';
|
|
3
|
+
import ArrowRightIcon from '@patternfly/react-icons/dist/esm/icons/arrow-right-icon';
|
|
4
|
+
import UserIcon from '@patternfly/react-icons/dist/esm/icons/user-icon';
|
|
5
|
+
|
|
6
|
+
export const NavLinkText: React.FunctionComponent = () => {
|
|
7
|
+
const [activeGroup, setActiveGroup] = React.useState('nav-expand3rd-group-1');
|
|
8
|
+
const [activeItem, setActiveItem] = React.useState('nav-expand3rd-group-1_item-1');
|
|
9
|
+
|
|
10
|
+
const onSelect = (
|
|
11
|
+
_event: React.FormEvent<HTMLInputElement>,
|
|
12
|
+
result: { itemId: number | string; groupId: number | string }
|
|
13
|
+
) => {
|
|
14
|
+
setActiveGroup(result.groupId as string);
|
|
15
|
+
setActiveItem(result.itemId as string);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const onToggle = (
|
|
19
|
+
_event: React.MouseEvent<HTMLButtonElement>,
|
|
20
|
+
result: { groupId: number | string; isExpanded: boolean }
|
|
21
|
+
) => {
|
|
22
|
+
// eslint-disable-next-line no-console
|
|
23
|
+
console.log(`Group ${result.groupId} expanded? ${result.isExpanded}`);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
<Nav onSelect={onSelect} onToggle={onToggle} aria-label="Nav link text">
|
|
28
|
+
<NavList>
|
|
29
|
+
<NavItem
|
|
30
|
+
preventDefault
|
|
31
|
+
id="link-text-link-1"
|
|
32
|
+
to="#link-text-link-1"
|
|
33
|
+
itemId="link-text-1-item-1"
|
|
34
|
+
isActive={activeItem === 'link-text-1-item-1'}
|
|
35
|
+
hasNavLinkWrapper
|
|
36
|
+
>
|
|
37
|
+
Link 1
|
|
38
|
+
<ArrowRightIcon />
|
|
39
|
+
</NavItem>
|
|
40
|
+
<NavExpandable
|
|
41
|
+
title={
|
|
42
|
+
<>
|
|
43
|
+
Link 2 <small>(small text)</small>
|
|
44
|
+
</>
|
|
45
|
+
}
|
|
46
|
+
groupId="link-text-group-1"
|
|
47
|
+
isActive={activeGroup === 'link-text-group-1'}
|
|
48
|
+
isExpanded
|
|
49
|
+
>
|
|
50
|
+
<NavItem
|
|
51
|
+
preventDefault
|
|
52
|
+
id="link-text-link-2"
|
|
53
|
+
to="#link-text-link-2"
|
|
54
|
+
groupId="link-text-group-1"
|
|
55
|
+
itemId="link-text-group-1_item-1"
|
|
56
|
+
isActive={activeItem === 'link-text-group-1_item-1'}
|
|
57
|
+
hasNavLinkWrapper
|
|
58
|
+
>
|
|
59
|
+
<UserIcon />
|
|
60
|
+
Subnav link 1
|
|
61
|
+
</NavItem>
|
|
62
|
+
<NavItem
|
|
63
|
+
preventDefault
|
|
64
|
+
id="link-text-link-3"
|
|
65
|
+
to="#link-text-link-3"
|
|
66
|
+
groupId="link-text-group-1"
|
|
67
|
+
itemId="link-text-group-1_item-2"
|
|
68
|
+
isActive={activeItem === 'link-text-group-1_item-2'}
|
|
69
|
+
hasNavLinkWrapper
|
|
70
|
+
>
|
|
71
|
+
<UserIcon />
|
|
72
|
+
Subnav link 2
|
|
73
|
+
</NavItem>
|
|
74
|
+
</NavExpandable>
|
|
75
|
+
<NavExpandable
|
|
76
|
+
title={
|
|
77
|
+
<>
|
|
78
|
+
Link 3 <strong>(strong text)</strong>
|
|
79
|
+
</>
|
|
80
|
+
}
|
|
81
|
+
groupId="link-text-group-2"
|
|
82
|
+
isActive={activeGroup === 'nav-expand3rd-group-2'}
|
|
83
|
+
isExpanded
|
|
84
|
+
>
|
|
85
|
+
<NavItem
|
|
86
|
+
preventDefault
|
|
87
|
+
id="link-text-link-4"
|
|
88
|
+
to="link-text-link-4"
|
|
89
|
+
groupId="link-text-group-2"
|
|
90
|
+
itemId="link-text-group-2_item-1"
|
|
91
|
+
isActive={activeItem === 'link-text-group-2_item-1'}
|
|
92
|
+
>
|
|
93
|
+
Subnav link 1
|
|
94
|
+
</NavItem>
|
|
95
|
+
<NavItem
|
|
96
|
+
preventDefault
|
|
97
|
+
id="link-text-link-5"
|
|
98
|
+
to="link-text-link-5"
|
|
99
|
+
groupId="link-text-group-2"
|
|
100
|
+
itemId="link-text-group-2_item-2"
|
|
101
|
+
isActive={activeItem === 'link-text-group-2_item-2'}
|
|
102
|
+
>
|
|
103
|
+
Subnav link 2
|
|
104
|
+
</NavItem>
|
|
105
|
+
</NavExpandable>
|
|
106
|
+
</NavList>
|
|
107
|
+
</Nav>
|
|
108
|
+
);
|
|
109
|
+
};
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
#ws-react-c-navigation-expandable-wsubnavigation-titles,
|
|
6
6
|
#ws-react-c-navigation-mixed,
|
|
7
7
|
#ws-react-c-navigation-expandable-third-level,
|
|
8
|
+
#ws-react-c-navigation-link-text,
|
|
8
9
|
#ws-react-c-navigation-horizontal-subnav,
|
|
9
10
|
#ws-react-c-navigation-flyout,
|
|
10
11
|
#ws-react-c-navigation-drilldown {
|