@patternfly/react-core 6.3.1-prerelease.1 → 6.3.1-prerelease.10
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 +48 -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/ClipboardCopy/ClipboardCopy.d.ts +2 -0
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.js +3 -3
- package/dist/esm/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.d.ts +2 -2
- package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js +2 -2
- package/dist/esm/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.d.ts +0 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.d.ts.map +1 -1
- package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.js +2 -2
- package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.js.map +1 -1
- package/dist/esm/components/JumpLinks/JumpLinks.d.ts +2 -0
- package/dist/esm/components/JumpLinks/JumpLinks.d.ts.map +1 -1
- package/dist/esm/components/JumpLinks/JumpLinks.js +15 -3
- package/dist/esm/components/JumpLinks/JumpLinks.js.map +1 -1
- package/dist/esm/components/Label/LabelGroup.js +2 -2
- package/dist/esm/components/Label/LabelGroup.js.map +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatusItem.d.ts +2 -0
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatusItem.d.ts.map +1 -1
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatusItem.js +2 -2
- package/dist/esm/components/MultipleFileUpload/MultipleFileUploadStatusItem.js.map +1 -1
- package/dist/esm/components/Progress/Progress.d.ts +2 -0
- package/dist/esm/components/Progress/Progress.d.ts.map +1 -1
- package/dist/esm/components/Progress/Progress.js +6 -2
- package/dist/esm/components/Progress/Progress.js.map +1 -1
- package/dist/esm/components/Progress/ProgressBar.d.ts +1 -0
- package/dist/esm/components/Progress/ProgressBar.d.ts.map +1 -1
- package/dist/esm/components/Progress/ProgressBar.js +1 -1
- package/dist/esm/components/Progress/ProgressBar.js.map +1 -1
- package/dist/esm/components/Progress/ProgressContainer.js +1 -1
- package/dist/esm/components/Progress/ProgressContainer.js.map +1 -1
- package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/esm/components/Tabs/Tabs.js +3 -0
- package/dist/esm/components/Tabs/Tabs.js.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/esm/components/Tooltip/Tooltip.js +68 -3
- package/dist/esm/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/esm/components/Wizard/WizardNavItem.js +1 -1
- package/dist/esm/components/Wizard/WizardNavItem.js.map +1 -1
- package/dist/esm/deprecated/components/Wizard/WizardNavItem.js +1 -1
- package/dist/esm/deprecated/components/Wizard/WizardNavItem.js.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts +2 -0
- package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopy.js +3 -3
- package/dist/js/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyButton.d.ts +2 -2
- package/dist/js/components/ClipboardCopy/ClipboardCopyButton.d.ts.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyButton.js +2 -2
- package/dist/js/components/ClipboardCopy/ClipboardCopyButton.js.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.d.ts +0 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.d.ts.map +1 -1
- package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.js +2 -2
- package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.js.map +1 -1
- package/dist/js/components/JumpLinks/JumpLinks.d.ts +2 -0
- package/dist/js/components/JumpLinks/JumpLinks.d.ts.map +1 -1
- package/dist/js/components/JumpLinks/JumpLinks.js +14 -2
- package/dist/js/components/JumpLinks/JumpLinks.js.map +1 -1
- package/dist/js/components/Label/LabelGroup.js +2 -2
- package/dist/js/components/Label/LabelGroup.js.map +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatusItem.d.ts +2 -0
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatusItem.d.ts.map +1 -1
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatusItem.js +2 -2
- package/dist/js/components/MultipleFileUpload/MultipleFileUploadStatusItem.js.map +1 -1
- package/dist/js/components/Progress/Progress.d.ts +2 -0
- package/dist/js/components/Progress/Progress.d.ts.map +1 -1
- package/dist/js/components/Progress/Progress.js +6 -2
- package/dist/js/components/Progress/Progress.js.map +1 -1
- package/dist/js/components/Progress/ProgressBar.d.ts +1 -0
- package/dist/js/components/Progress/ProgressBar.d.ts.map +1 -1
- package/dist/js/components/Progress/ProgressBar.js +1 -1
- package/dist/js/components/Progress/ProgressBar.js.map +1 -1
- package/dist/js/components/Progress/ProgressContainer.js +1 -1
- package/dist/js/components/Progress/ProgressContainer.js.map +1 -1
- package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
- package/dist/js/components/Tabs/Tabs.js +3 -0
- package/dist/js/components/Tabs/Tabs.js.map +1 -1
- package/dist/js/components/Tooltip/Tooltip.d.ts.map +1 -1
- package/dist/js/components/Tooltip/Tooltip.js +68 -3
- package/dist/js/components/Tooltip/Tooltip.js.map +1 -1
- package/dist/js/components/Wizard/WizardNavItem.js +1 -1
- package/dist/js/components/Wizard/WizardNavItem.js.map +1 -1
- package/dist/js/deprecated/components/Wizard/WizardNavItem.js +1 -1
- package/dist/js/deprecated/components/Wizard/WizardNavItem.js.map +1 -1
- package/dist/styles/base-no-reset.css +1209 -1
- package/dist/styles/base.css +1213 -1
- package/dist/umd/assets/{output-CqyiGvp-.css → output-R-jtt1kZ.css} +20170 -19881
- 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 +6 -6
- package/src/components/ClipboardCopy/ClipboardCopy.tsx +5 -5
- package/src/components/ClipboardCopy/ClipboardCopyButton.tsx +2 -4
- package/src/components/ClipboardCopy/ClipboardCopyToggle.tsx +0 -3
- package/src/components/ClipboardCopy/__tests__/ClipboardCopy.test.tsx +16 -0
- package/src/components/ClipboardCopy/__tests__/ClipboardCopyButton.test.tsx +5 -28
- package/src/components/ClipboardCopy/__tests__/ClipboardCopyToggle.test.tsx +3 -4
- package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopy.test.tsx.snap +1 -1
- package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyButton.test.tsx.snap +0 -1
- package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyToggle.test.tsx.snap +0 -1
- package/src/components/ClipboardCopy/examples/ClipboardCopyBasic.tsx +1 -1
- package/src/components/ClipboardCopy/examples/ClipboardCopyExpanded.tsx +7 -1
- package/src/components/ClipboardCopy/examples/ClipboardCopyExpandedWithArray.tsx +7 -1
- package/src/components/ClipboardCopy/examples/ClipboardCopyInlineCompact.tsx +1 -1
- package/src/components/ClipboardCopy/examples/ClipboardCopyInlineCompactCode.tsx +7 -1
- package/src/components/ClipboardCopy/examples/ClipboardCopyInlineCompactInSentence.tsx +19 -3
- package/src/components/ClipboardCopy/examples/ClipboardCopyInlineCompactTruncation.tsx +14 -2
- package/src/components/ClipboardCopy/examples/ClipboardCopyInlineCompactWithAdditionalAction.tsx +1 -0
- package/src/components/ClipboardCopy/examples/ClipboardCopyJSONObject.tsx +8 -1
- package/src/components/ClipboardCopy/examples/ClipboardCopyReadOnly.tsx +1 -1
- package/src/components/ClipboardCopy/examples/ClipboardCopyReadOnlyExpanded.tsx +8 -1
- package/src/components/ClipboardCopy/examples/ClipboardCopyReadOnlyExpandedByDefault.tsx +9 -1
- package/src/components/JumpLinks/JumpLinks.tsx +33 -5
- package/src/components/JumpLinks/__tests__/JumpLinks.test.tsx +196 -1
- package/src/components/JumpLinks/__tests__/__snapshots__/JumpLinks.test.tsx.snap +9 -9
- package/src/components/JumpLinks/examples/JumpLinksBasic.tsx +1 -1
- package/src/components/JumpLinks/examples/JumpLinksExpandableVerticalWithSubsection.tsx +2 -2
- package/src/components/JumpLinks/examples/JumpLinksVertical.tsx +1 -1
- package/src/components/JumpLinks/examples/JumpLinksVerticalWithLabel.tsx +1 -1
- package/src/components/JumpLinks/examples/JumpLinksWithCenteredList.tsx +1 -1
- package/src/components/JumpLinks/examples/JumpLinksWithLabel.tsx +2 -2
- package/src/components/Label/LabelGroup.tsx +3 -3
- package/src/components/Label/__tests__/__snapshots__/LabelGroup.test.tsx.snap +3 -3
- package/src/components/MultipleFileUpload/MultipleFileUploadStatusItem.tsx +4 -0
- package/src/components/MultipleFileUpload/examples/MultipleFileUploadBasic.tsx +5 -4
- package/src/components/Progress/Progress.tsx +9 -1
- package/src/components/Progress/ProgressBar.tsx +2 -1
- package/src/components/Progress/ProgressContainer.tsx +1 -1
- package/src/components/Progress/__tests__/Generated/__snapshots__/ProgressBar.test.tsx.snap +1 -0
- package/src/components/Progress/__tests__/ProgressBar.test.tsx +19 -0
- package/src/components/Progress/examples/Progress.md +67 -23
- package/src/components/Progress/examples/ProgressHelperText.tsx +8 -2
- package/src/components/Tabs/Tabs.tsx +4 -0
- package/src/components/Tabs/__tests__/Tabs.test.tsx +48 -0
- package/src/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +14 -14
- package/src/components/Toolbar/__tests__/__snapshots__/Toolbar.test.tsx.snap +3 -3
- package/src/components/Tooltip/Tooltip.tsx +76 -3
- package/src/components/Tooltip/__tests__/Tooltip.test.tsx +126 -0
- package/src/components/Wizard/WizardNavItem.tsx +1 -1
- package/src/demos/DataList/examples/DataListBasic.tsx +74 -19
- package/src/demos/DataList/examples/DataListStaticBottomPagination.tsx +16 -3
- package/src/demos/DataListDemo.md +5 -2
- package/src/demos/examples/PrimaryDetail/PrimaryDetailCardView.tsx +1 -1
- package/src/deprecated/components/Wizard/WizardNavItem.tsx +1 -1
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
import { render } from '@testing-library/react';
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
2
|
import { JumpLinks } from '../JumpLinks';
|
|
3
3
|
import { JumpLinksItem } from '../JumpLinksItem';
|
|
4
4
|
import { JumpLinksList } from '../JumpLinksList';
|
|
5
|
+
import * as utils from '../../../helpers/util';
|
|
6
|
+
|
|
7
|
+
jest.spyOn(utils, 'getUniqueId').mockReturnValue('unique_id_mock');
|
|
5
8
|
|
|
6
9
|
test('simple jumplinks', () => {
|
|
7
10
|
const { asFragment } = render(
|
|
@@ -75,3 +78,195 @@ test('expandable vertical with subsection', () => {
|
|
|
75
78
|
);
|
|
76
79
|
expect(asFragment()).toMatchSnapshot();
|
|
77
80
|
});
|
|
81
|
+
|
|
82
|
+
// Revamped tests begin here
|
|
83
|
+
|
|
84
|
+
const jumpLinksItems = (
|
|
85
|
+
<>
|
|
86
|
+
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
87
|
+
<JumpLinksItem href="#" isActive>
|
|
88
|
+
Active section
|
|
89
|
+
</JumpLinksItem>
|
|
90
|
+
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
91
|
+
</>
|
|
92
|
+
);
|
|
93
|
+
|
|
94
|
+
const expandableJumpLinksItems = (
|
|
95
|
+
<>
|
|
96
|
+
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
97
|
+
<JumpLinksItem href="#">
|
|
98
|
+
Section with active subsection
|
|
99
|
+
<JumpLinksList>
|
|
100
|
+
<JumpLinksItem href="#" isActive>
|
|
101
|
+
Active subsection
|
|
102
|
+
</JumpLinksItem>
|
|
103
|
+
<JumpLinksItem href="#">Inactive subsection</JumpLinksItem>
|
|
104
|
+
<JumpLinksItem href="#">Inactive subsection</JumpLinksItem>
|
|
105
|
+
</JumpLinksList>
|
|
106
|
+
</JumpLinksItem>
|
|
107
|
+
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
108
|
+
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
109
|
+
</>
|
|
110
|
+
);
|
|
111
|
+
|
|
112
|
+
test('renders label be default', () => {
|
|
113
|
+
render(<JumpLinks label="Jump to section">{jumpLinksItems}</JumpLinks>);
|
|
114
|
+
expect(screen.getByText(/Jump to section/i)).toBeTruthy();
|
|
115
|
+
});
|
|
116
|
+
|
|
117
|
+
test('does not render label when alwaysShowLabel is false', () => {
|
|
118
|
+
render(
|
|
119
|
+
<JumpLinks label="Jump to section" alwaysShowLabel={false}>
|
|
120
|
+
{jumpLinksItems}
|
|
121
|
+
</JumpLinks>
|
|
122
|
+
);
|
|
123
|
+
expect(screen.queryByText(/Jump to section/i)).toBeFalsy();
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
test('uses aria-labelledby over aria-label when label and alwaysShowLabel are passed in', () => {
|
|
127
|
+
render(<JumpLinks label="Jump to section">{expandableJumpLinksItems}</JumpLinks>);
|
|
128
|
+
const navigation = screen.getByRole('navigation', { name: /Jump to section/i });
|
|
129
|
+
expect(navigation).toHaveAttribute('aria-labelledby');
|
|
130
|
+
expect(navigation).not.toHaveAttribute('aria-label');
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
test('uses aria-labelledby over aria-label when expandable is passed in', () => {
|
|
134
|
+
render(<JumpLinks expandable={{ default: 'expandable' }}>{expandableJumpLinksItems}</JumpLinks>);
|
|
135
|
+
const navigation = screen.getByRole('navigation', { name: /Toggle jump links/i });
|
|
136
|
+
expect(navigation).toHaveAttribute('aria-labelledby');
|
|
137
|
+
expect(navigation).not.toHaveAttribute('aria-label');
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
test('random id is used with aria-labelledby by default in expandable case', () => {
|
|
141
|
+
render(<JumpLinks expandable={{ default: 'expandable' }}>{expandableJumpLinksItems}</JumpLinks>);
|
|
142
|
+
const navigation = screen.getByRole('navigation', { name: /Toggle jump links/i });
|
|
143
|
+
expect(navigation).toHaveAttribute('aria-labelledby', 'unique_id_mock');
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
test('random id is used with aria-labelledby by default in label case', () => {
|
|
147
|
+
render(
|
|
148
|
+
<JumpLinks label="Jump to section" alwaysShowLabel>
|
|
149
|
+
{expandableJumpLinksItems}
|
|
150
|
+
</JumpLinks>
|
|
151
|
+
);
|
|
152
|
+
const navigation = screen.getByRole('navigation', { name: /Jump to section/i });
|
|
153
|
+
expect(navigation).toHaveAttribute('aria-labelledby', 'unique_id_mock');
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
test('custom labelId is used with aria-labelledby when it is passed in in expandable case', () => {
|
|
157
|
+
render(
|
|
158
|
+
<JumpLinks labelId="custom-id" expandable={{ default: 'expandable' }}>
|
|
159
|
+
{expandableJumpLinksItems}
|
|
160
|
+
</JumpLinks>
|
|
161
|
+
);
|
|
162
|
+
const navigation = screen.getByRole('navigation', { name: /Toggle jump links/i });
|
|
163
|
+
expect(navigation).toHaveAttribute('aria-labelledby', 'custom-id');
|
|
164
|
+
});
|
|
165
|
+
|
|
166
|
+
test('custom labelId is used with aria-labelledby when it is passed in in label case', () => {
|
|
167
|
+
render(
|
|
168
|
+
<JumpLinks label="Jump to section" labelId="custom-id" alwaysShowLabel>
|
|
169
|
+
{expandableJumpLinksItems}
|
|
170
|
+
</JumpLinks>
|
|
171
|
+
);
|
|
172
|
+
const navigation = screen.getByRole('navigation', { name: /Jump to section/i });
|
|
173
|
+
expect(navigation).toHaveAttribute('aria-labelledby', 'custom-id');
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
test('uses aria-label instead of aria-labelledby by default', () => {
|
|
177
|
+
render(<JumpLinks aria-label="Custom aria label">{jumpLinksItems}</JumpLinks>);
|
|
178
|
+
const navigation = screen.getByRole('navigation', { name: /Custom aria label/i });
|
|
179
|
+
expect(navigation).toHaveAttribute('aria-label', 'Custom aria label');
|
|
180
|
+
expect(navigation).not.toHaveAttribute('aria-labelledby');
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
test('uses aria-label instead of aria-labelledby when label is provided but alwaysShowLabel is false', () => {
|
|
184
|
+
render(
|
|
185
|
+
<JumpLinks label="Jump to section" aria-label="Custom aria label" alwaysShowLabel={false}>
|
|
186
|
+
{jumpLinksItems}
|
|
187
|
+
</JumpLinks>
|
|
188
|
+
);
|
|
189
|
+
const navigation = screen.getByRole('navigation', { name: /Custom aria label/i });
|
|
190
|
+
expect(navigation).toHaveAttribute('aria-label', 'Custom aria label');
|
|
191
|
+
expect(navigation).not.toHaveAttribute('aria-labelledby');
|
|
192
|
+
});
|
|
193
|
+
|
|
194
|
+
test('aria-labelledby is used with provided labelId even when aria-label is also provided in expandable case', () => {
|
|
195
|
+
render(
|
|
196
|
+
<JumpLinks labelId="custom-id" aria-label="Custom aria label" expandable={{ default: 'expandable' }}>
|
|
197
|
+
{expandableJumpLinksItems}
|
|
198
|
+
</JumpLinks>
|
|
199
|
+
);
|
|
200
|
+
const navigation = screen.getByRole('navigation');
|
|
201
|
+
expect(navigation).toHaveAttribute('aria-labelledby', 'custom-id');
|
|
202
|
+
expect(navigation).not.toHaveAttribute('aria-label');
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
test('aria-labelledby is used with provided labelId even when aria-label is also provided in label case', () => {
|
|
206
|
+
render(
|
|
207
|
+
<JumpLinks labelId="custom-id" aria-label="Custom aria label" label="Jump to section">
|
|
208
|
+
{jumpLinksItems}
|
|
209
|
+
</JumpLinks>
|
|
210
|
+
);
|
|
211
|
+
const navigation = screen.getByRole('navigation');
|
|
212
|
+
expect(navigation).toHaveAttribute('aria-labelledby', 'custom-id');
|
|
213
|
+
expect(navigation).not.toHaveAttribute('aria-label');
|
|
214
|
+
});
|
|
215
|
+
|
|
216
|
+
test('does not throw error when there is a label passed in"', () => {
|
|
217
|
+
const warnMock = jest.fn() as any;
|
|
218
|
+
global.console = { warn: warnMock } as any;
|
|
219
|
+
render(
|
|
220
|
+
<JumpLinks alwaysShowLabel label="Jump to section">
|
|
221
|
+
{jumpLinksItems}
|
|
222
|
+
</JumpLinks>
|
|
223
|
+
);
|
|
224
|
+
expect(warnMock).not.toHaveBeenCalled();
|
|
225
|
+
});
|
|
226
|
+
|
|
227
|
+
test('does not throw error when there is an aria-label passed in"', () => {
|
|
228
|
+
const warnMock = jest.fn() as any;
|
|
229
|
+
global.console = { warn: warnMock } as any;
|
|
230
|
+
render(
|
|
231
|
+
<JumpLinks alwaysShowLabel aria-label="Jump to section">
|
|
232
|
+
{jumpLinksItems}
|
|
233
|
+
</JumpLinks>
|
|
234
|
+
);
|
|
235
|
+
expect(warnMock).not.toHaveBeenCalled();
|
|
236
|
+
});
|
|
237
|
+
|
|
238
|
+
test('throws error when no label or ariaLabel are passed in', () => {
|
|
239
|
+
const warnMock = jest.fn() as any;
|
|
240
|
+
global.console = { warn: warnMock } as any;
|
|
241
|
+
render(<JumpLinks alwaysShowLabel>{jumpLinksItems}</JumpLinks>);
|
|
242
|
+
expect(warnMock).toHaveBeenCalled();
|
|
243
|
+
});
|
|
244
|
+
|
|
245
|
+
test('does not throw error when there is a toggleAriaLabel and expandable prop passed in', () => {
|
|
246
|
+
const warnMock = jest.fn() as any;
|
|
247
|
+
global.console = { warn: warnMock } as any;
|
|
248
|
+
render(
|
|
249
|
+
<JumpLinks label="Jump to section" toggleAriaLabel="Jump to section" expandable={{ default: 'expandable' }}>
|
|
250
|
+
{expandableJumpLinksItems}
|
|
251
|
+
</JumpLinks>
|
|
252
|
+
);
|
|
253
|
+
expect(warnMock).not.toHaveBeenCalled();
|
|
254
|
+
});
|
|
255
|
+
|
|
256
|
+
test('does not throw error when there is an aria-label and expandable prop passed in', () => {
|
|
257
|
+
const warnMock = jest.fn() as any;
|
|
258
|
+
global.console = { warn: warnMock } as any;
|
|
259
|
+
render(
|
|
260
|
+
<JumpLinks aria-label="Jump to section" expandable={{ default: 'expandable' }}>
|
|
261
|
+
{expandableJumpLinksItems}
|
|
262
|
+
</JumpLinks>
|
|
263
|
+
);
|
|
264
|
+
expect(warnMock).not.toHaveBeenCalled();
|
|
265
|
+
});
|
|
266
|
+
|
|
267
|
+
test('throws error when there is no toggle aria-label or aria-label but expandable is passed in', () => {
|
|
268
|
+
const warnMock = jest.fn() as any;
|
|
269
|
+
global.console = { warn: warnMock } as any;
|
|
270
|
+
render(<JumpLinks expandable={{ default: 'expandable' }}>{expandableJumpLinksItems}</JumpLinks>);
|
|
271
|
+
expect(warnMock).toHaveBeenCalled();
|
|
272
|
+
});
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
exports[`expandable vertical with subsection 1`] = `
|
|
4
4
|
<DocumentFragment>
|
|
5
5
|
<nav
|
|
6
|
-
aria-
|
|
6
|
+
aria-labelledby="unique_id_mock"
|
|
7
7
|
class="pf-v6-c-jump-links pf-m-vertical pf-m-expandable"
|
|
8
8
|
>
|
|
9
9
|
<div
|
|
@@ -17,11 +17,11 @@ exports[`expandable vertical with subsection 1`] = `
|
|
|
17
17
|
>
|
|
18
18
|
<button
|
|
19
19
|
aria-expanded="false"
|
|
20
|
-
aria-label="Toggle jump links"
|
|
21
20
|
class="pf-v6-c-button pf-m-plain"
|
|
22
21
|
data-ouia-component-id="OUIA-Generated-Button-plain-1"
|
|
23
22
|
data-ouia-component-type="PF6/Button"
|
|
24
23
|
data-ouia-safe="true"
|
|
24
|
+
id="unique_id_mock"
|
|
25
25
|
type="button"
|
|
26
26
|
>
|
|
27
27
|
<span
|
|
@@ -52,13 +52,9 @@ exports[`expandable vertical with subsection 1`] = `
|
|
|
52
52
|
</span>
|
|
53
53
|
</button>
|
|
54
54
|
</div>
|
|
55
|
-
<div
|
|
56
|
-
class="pf-v6-c-jump-links__label"
|
|
57
|
-
>
|
|
58
|
-
Jump to section
|
|
59
|
-
</div>
|
|
60
55
|
</div>
|
|
61
56
|
<ul
|
|
57
|
+
aria-labelledby="unique_id_mock"
|
|
62
58
|
class="pf-v6-c-jump-links__list"
|
|
63
59
|
role="list"
|
|
64
60
|
>
|
|
@@ -349,7 +345,7 @@ exports[`jumplinks centered 1`] = `
|
|
|
349
345
|
exports[`jumplinks with label 1`] = `
|
|
350
346
|
<DocumentFragment>
|
|
351
347
|
<nav
|
|
352
|
-
aria-
|
|
348
|
+
aria-labelledby="unique_id_mock"
|
|
353
349
|
class="pf-v6-c-jump-links pf-m-center"
|
|
354
350
|
>
|
|
355
351
|
<div
|
|
@@ -360,11 +356,13 @@ exports[`jumplinks with label 1`] = `
|
|
|
360
356
|
>
|
|
361
357
|
<div
|
|
362
358
|
class="pf-v6-c-jump-links__label"
|
|
359
|
+
id="unique_id_mock"
|
|
363
360
|
>
|
|
364
361
|
Jump to section
|
|
365
362
|
</div>
|
|
366
363
|
</div>
|
|
367
364
|
<ul
|
|
365
|
+
aria-labelledby="unique_id_mock"
|
|
368
366
|
class="pf-v6-c-jump-links__list"
|
|
369
367
|
role="list"
|
|
370
368
|
>
|
|
@@ -550,7 +548,7 @@ exports[`simple jumplinks 1`] = `
|
|
|
550
548
|
exports[`vertical with label 1`] = `
|
|
551
549
|
<DocumentFragment>
|
|
552
550
|
<nav
|
|
553
|
-
aria-
|
|
551
|
+
aria-labelledby="unique_id_mock"
|
|
554
552
|
class="pf-v6-c-jump-links pf-m-vertical"
|
|
555
553
|
>
|
|
556
554
|
<div
|
|
@@ -561,11 +559,13 @@ exports[`vertical with label 1`] = `
|
|
|
561
559
|
>
|
|
562
560
|
<div
|
|
563
561
|
class="pf-v6-c-jump-links__label"
|
|
562
|
+
id="unique_id_mock"
|
|
564
563
|
>
|
|
565
564
|
Jump to section
|
|
566
565
|
</div>
|
|
567
566
|
</div>
|
|
568
567
|
<ul
|
|
568
|
+
aria-labelledby="unique_id_mock"
|
|
569
569
|
class="pf-v6-c-jump-links__list"
|
|
570
570
|
role="list"
|
|
571
571
|
>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { JumpLinks, JumpLinksItem } from '@patternfly/react-core';
|
|
2
2
|
|
|
3
3
|
export const JumpLinksBasic: React.FunctionComponent = () => (
|
|
4
|
-
<JumpLinks>
|
|
4
|
+
<JumpLinks aria-label="Jump to basic example sections">
|
|
5
5
|
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
6
6
|
<JumpLinksItem href="#" isActive>
|
|
7
7
|
Active section
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
import { JumpLinks, JumpLinksItem, JumpLinksList } from '@patternfly/react-core';
|
|
2
2
|
|
|
3
3
|
export const JumpLinksExpandableVerticalWithSubsection: React.FunctionComponent = () => (
|
|
4
|
-
<JumpLinks isVertical label="Jump to section" expandable={{ default: 'expandable' }}>
|
|
4
|
+
<JumpLinks isVertical label="Jump to expandable vertical section" expandable={{ default: 'expandable' }}>
|
|
5
5
|
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
6
6
|
<JumpLinksItem href="#">
|
|
7
7
|
Section with active subsection
|
|
8
|
-
<JumpLinksList>
|
|
8
|
+
<JumpLinksList aria-label="Expandable vertical section subsection">
|
|
9
9
|
<JumpLinksItem href="#" isActive>
|
|
10
10
|
Active subsection
|
|
11
11
|
</JumpLinksItem>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { JumpLinks, JumpLinksItem } from '@patternfly/react-core';
|
|
2
2
|
|
|
3
3
|
export const JumpLinksVertical: React.FunctionComponent = () => (
|
|
4
|
-
<JumpLinks isVertical>
|
|
4
|
+
<JumpLinks isVertical aria-label="Jump to vertical example sections">
|
|
5
5
|
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
6
6
|
<JumpLinksItem href="#" isActive>
|
|
7
7
|
Active section
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { JumpLinks, JumpLinksItem } from '@patternfly/react-core';
|
|
2
2
|
|
|
3
3
|
export const JumpLinksVerticalWithLabel: React.FunctionComponent = () => (
|
|
4
|
-
<JumpLinks isVertical label="Jump to
|
|
4
|
+
<JumpLinks isVertical label="Jump to vertical example sections with labels">
|
|
5
5
|
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
6
6
|
<JumpLinksItem href="#" isActive>
|
|
7
7
|
Active section
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { JumpLinks, JumpLinksItem } from '@patternfly/react-core';
|
|
2
2
|
|
|
3
3
|
export const JumpLinksWithCenteredList: React.FunctionComponent = () => (
|
|
4
|
-
<JumpLinks isCentered>
|
|
4
|
+
<JumpLinks isCentered aria-label="Jump to centered example sections">
|
|
5
5
|
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
6
6
|
<JumpLinksItem href="#" isActive>
|
|
7
7
|
Active section
|
|
@@ -2,14 +2,14 @@ import { JumpLinks, JumpLinksItem } from '@patternfly/react-core';
|
|
|
2
2
|
|
|
3
3
|
export const JumpLinksWithLabel: React.FunctionComponent = () => (
|
|
4
4
|
<>
|
|
5
|
-
<JumpLinks label="Jump to section">
|
|
5
|
+
<JumpLinks label="Jump to first section in jump links with label example">
|
|
6
6
|
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
7
7
|
<JumpLinksItem href="#" isActive>
|
|
8
8
|
Active section
|
|
9
9
|
</JumpLinksItem>
|
|
10
10
|
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
11
11
|
</JumpLinks>
|
|
12
|
-
<JumpLinks isCentered label="Jump to section">
|
|
12
|
+
<JumpLinks isCentered label="Jump to second section in jump links with label example">
|
|
13
13
|
<JumpLinksItem href="#">Inactive section</JumpLinksItem>
|
|
14
14
|
<JumpLinksItem href="#" isActive>
|
|
15
15
|
Active section
|
|
@@ -5,7 +5,7 @@ import { css } from '@patternfly/react-styles';
|
|
|
5
5
|
import { Button } from '../Button';
|
|
6
6
|
import { Label } from './Label';
|
|
7
7
|
import { Tooltip, TooltipPosition } from '../Tooltip';
|
|
8
|
-
import
|
|
8
|
+
import TimesIcon from '@patternfly/react-icons/dist/esm/icons/times-icon';
|
|
9
9
|
import { fillTemplate } from '../../helpers';
|
|
10
10
|
import { GenerateId } from '../../helpers/GenerateId/GenerateId';
|
|
11
11
|
|
|
@@ -205,12 +205,12 @@ class LabelGroup extends Component<LabelGroupProps, LabelGroupState> {
|
|
|
205
205
|
<div className={css(styles.labelGroupClose)}>
|
|
206
206
|
<Button
|
|
207
207
|
variant="plain"
|
|
208
|
-
|
|
208
|
+
size="sm"
|
|
209
209
|
aria-label={closeBtnAriaLabel}
|
|
210
210
|
onClick={onClick}
|
|
211
211
|
id={`remove_group_${id}`}
|
|
212
212
|
aria-labelledby={`remove_group_${id} ${id}`}
|
|
213
|
-
icon={<
|
|
213
|
+
icon={<TimesIcon />}
|
|
214
214
|
/>
|
|
215
215
|
</div>
|
|
216
216
|
);
|
|
@@ -255,7 +255,7 @@ exports[`LabelGroup label group with closable category 1`] = `
|
|
|
255
255
|
<button
|
|
256
256
|
aria-label="Close label group"
|
|
257
257
|
aria-labelledby="remove_group_generated-id generated-id"
|
|
258
|
-
class="pf-v6-c-button pf-m-plain pf-m-
|
|
258
|
+
class="pf-v6-c-button pf-m-plain pf-m-small"
|
|
259
259
|
data-ouia-component-id="OUIA-Generated-Button-plain-1"
|
|
260
260
|
data-ouia-component-type="PF6/Button"
|
|
261
261
|
data-ouia-safe="true"
|
|
@@ -271,11 +271,11 @@ exports[`LabelGroup label group with closable category 1`] = `
|
|
|
271
271
|
fill="currentColor"
|
|
272
272
|
height="1em"
|
|
273
273
|
role="img"
|
|
274
|
-
viewBox="0 0
|
|
274
|
+
viewBox="0 0 352 512"
|
|
275
275
|
width="1em"
|
|
276
276
|
>
|
|
277
277
|
<path
|
|
278
|
-
d="
|
|
278
|
+
d="M242.72 256l100.07-100.07c12.28-12.28 12.28-32.19 0-44.48l-22.24-22.24c-12.28-12.28-32.19-12.28-44.48 0L176 189.28 75.93 89.21c-12.28-12.28-32.19-12.28-44.48 0L9.21 111.45c-12.28 12.28-12.28 32.19 0 44.48L109.28 256 9.21 356.07c-12.28 12.28-12.28 32.19 0 44.48l22.24 22.24c12.28 12.28 32.2 12.28 44.48 0L176 322.72l100.07 100.07c12.28 12.28 32.2 12.28 44.48 0l22.24-22.24c12.28-12.28 12.28-32.19 0-44.48L242.72 256z"
|
|
279
279
|
/>
|
|
280
280
|
</svg>
|
|
281
281
|
</span>
|
|
@@ -50,6 +50,8 @@ export interface MultipleFileUploadStatusItemProps extends React.HTMLProps<HTMLL
|
|
|
50
50
|
progressAriaLabel?: string;
|
|
51
51
|
/** Associates the progress bar with it's label for accessibility purposes. Required when title not used */
|
|
52
52
|
progressAriaLabelledBy?: string;
|
|
53
|
+
/** Adds an accessible description to the ProgressBar via space separated list of ids. Required when helperText is passed in. */
|
|
54
|
+
progressAriaDescribedBy?: string;
|
|
53
55
|
/** Modifies the text announced by assistive technologies when the progress bar updates. */
|
|
54
56
|
progressAriaLiveMessage?: string | ((loadPercentage: number) => string);
|
|
55
57
|
/** Unique identifier for progress. Generated if not specified. */
|
|
@@ -74,6 +76,7 @@ export const MultipleFileUploadStatusItem: React.FunctionComponent<MultipleFileU
|
|
|
74
76
|
progressVariant,
|
|
75
77
|
progressAriaLabel,
|
|
76
78
|
progressAriaLabelledBy,
|
|
79
|
+
progressAriaDescribedBy,
|
|
77
80
|
progressId,
|
|
78
81
|
progressAriaLiveMessage,
|
|
79
82
|
buttonAriaLabel = 'Remove from list',
|
|
@@ -161,6 +164,7 @@ export const MultipleFileUploadStatusItem: React.FunctionComponent<MultipleFileU
|
|
|
161
164
|
variant={variant}
|
|
162
165
|
aria-label={progressAriaLabel}
|
|
163
166
|
aria-labelledby={progressAriaLabelledBy}
|
|
167
|
+
aria-describedby={progressAriaDescribedBy}
|
|
164
168
|
id={progressId}
|
|
165
169
|
helperText={progressHelperText}
|
|
166
170
|
/>
|
|
@@ -96,11 +96,11 @@ export const MultipleFileUploadBasic: React.FunctionComponent = () => {
|
|
|
96
96
|
};
|
|
97
97
|
|
|
98
98
|
// add helper text to a status item showing any error encountered during the file reading process
|
|
99
|
-
const createHelperText = (file: File) => {
|
|
99
|
+
const createHelperText = (file: File, fileIndex: number) => {
|
|
100
100
|
const fileResult = readFileData.find((readFile) => readFile.fileName === file.name);
|
|
101
101
|
if (fileResult?.loadError) {
|
|
102
102
|
return (
|
|
103
|
-
<HelperText isLiveRegion>
|
|
103
|
+
<HelperText id={`multiple-file-upload-basic-example-help-text-${fileIndex}`} isLiveRegion>
|
|
104
104
|
<HelperTextItem variant="error">{fileResult.loadError.toString()}</HelperTextItem>
|
|
105
105
|
</HelperText>
|
|
106
106
|
);
|
|
@@ -135,14 +135,15 @@ export const MultipleFileUploadBasic: React.FunctionComponent = () => {
|
|
|
135
135
|
statusToggleIcon={statusIcon}
|
|
136
136
|
aria-label="Current uploads"
|
|
137
137
|
>
|
|
138
|
-
{currentFiles.map((file) => (
|
|
138
|
+
{currentFiles.map((file, index) => (
|
|
139
139
|
<MultipleFileUploadStatusItem
|
|
140
140
|
file={file}
|
|
141
141
|
key={file.name}
|
|
142
142
|
onClearClick={() => removeFiles([file.name])}
|
|
143
143
|
onReadSuccess={handleReadSuccess}
|
|
144
144
|
onReadFail={handleReadFail}
|
|
145
|
-
progressHelperText={createHelperText(file)}
|
|
145
|
+
progressHelperText={createHelperText(file, index)}
|
|
146
|
+
progressAriaDescribedBy={`multiple-file-upload-basic-example-help-text-${index}`}
|
|
146
147
|
/>
|
|
147
148
|
))}
|
|
148
149
|
</MultipleFileUploadStatus>
|
|
@@ -42,6 +42,8 @@ export interface ProgressProps extends Omit<React.HTMLProps<HTMLDivElement>, 'si
|
|
|
42
42
|
'aria-label'?: string;
|
|
43
43
|
/** Associates the ProgressBar with it's label for accessibility purposes. Required when title not used */
|
|
44
44
|
'aria-labelledby'?: string;
|
|
45
|
+
/** Adds an accessible description to the ProgressBar via space separated list of ids. Required when helperText is passed in. */
|
|
46
|
+
'aria-describedby'?: string;
|
|
45
47
|
/** Content which can be used to convey additional information about the progress component.
|
|
46
48
|
* We recommend the helper text component as it was designed for this purpose.
|
|
47
49
|
*/
|
|
@@ -65,7 +67,8 @@ class Progress extends Component<ProgressProps> {
|
|
|
65
67
|
isTitleTruncated: false,
|
|
66
68
|
tooltipPosition: 'top' as 'auto' | 'top' | 'bottom' | 'left' | 'right',
|
|
67
69
|
'aria-label': null as string,
|
|
68
|
-
'aria-labelledby': null as string
|
|
70
|
+
'aria-labelledby': null as string,
|
|
71
|
+
'aria-describedby': null as string
|
|
69
72
|
};
|
|
70
73
|
|
|
71
74
|
id = this.props.id || getUniqueId();
|
|
@@ -89,6 +92,7 @@ class Progress extends Component<ProgressProps> {
|
|
|
89
92
|
tooltipPosition,
|
|
90
93
|
'aria-label': ariaLabel,
|
|
91
94
|
'aria-labelledby': ariaLabelledBy,
|
|
95
|
+
'aria-describedby': ariaDescribedBy,
|
|
92
96
|
helperText,
|
|
93
97
|
...props
|
|
94
98
|
} = this.props;
|
|
@@ -107,6 +111,10 @@ class Progress extends Component<ProgressProps> {
|
|
|
107
111
|
progressBarAriaProps['aria-label'] = ariaLabel;
|
|
108
112
|
}
|
|
109
113
|
|
|
114
|
+
if (ariaDescribedBy) {
|
|
115
|
+
progressBarAriaProps['aria-describedby'] = ariaDescribedBy;
|
|
116
|
+
}
|
|
117
|
+
|
|
110
118
|
if (valueText) {
|
|
111
119
|
progressBarAriaProps['aria-valuetext'] = valueText;
|
|
112
120
|
}
|
|
@@ -4,6 +4,7 @@ import { css } from '@patternfly/react-styles';
|
|
|
4
4
|
export interface AriaProps {
|
|
5
5
|
'aria-labelledby'?: string;
|
|
6
6
|
'aria-label'?: string;
|
|
7
|
+
'aria-describedby'?: string;
|
|
7
8
|
'aria-valuemin'?: number;
|
|
8
9
|
'aria-valuenow'?: number;
|
|
9
10
|
'aria-valuemax'?: number;
|
|
@@ -28,7 +29,7 @@ export const ProgressBar: React.FunctionComponent<ProgressBarProps> = ({
|
|
|
28
29
|
value,
|
|
29
30
|
...props
|
|
30
31
|
}: ProgressBarProps) => (
|
|
31
|
-
<div {...props} className={css(styles.progressBar, className)} {...progressBarAriaProps}>
|
|
32
|
+
<div role="progressbar" {...props} className={css(styles.progressBar, className)} {...progressBarAriaProps}>
|
|
32
33
|
<div className={css(styles.progressIndicator)} style={{ width: `${value}%` }}>
|
|
33
34
|
<span className={css(styles.progressMeasure)}>{children}</span>
|
|
34
35
|
</div>
|
|
@@ -130,7 +130,7 @@ export const ProgressContainer: React.FunctionComponent<ProgressContainerProps>
|
|
|
130
130
|
)}
|
|
131
131
|
</div>
|
|
132
132
|
)}
|
|
133
|
-
<ProgressBar
|
|
133
|
+
<ProgressBar progressBarAriaProps={progressBarAriaProps} value={value}>
|
|
134
134
|
{measureLocation === ProgressMeasureLocation.inside && `${value}%`}
|
|
135
135
|
</ProgressBar>
|
|
136
136
|
{helperText && <ProgressHelperText>{helperText}</ProgressHelperText>}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { render, screen } from '@testing-library/react';
|
|
2
|
+
import { ProgressBar } from '../ProgressBar';
|
|
3
|
+
|
|
4
|
+
test('Does not render with aria-describedby by default', () => {
|
|
5
|
+
render(<ProgressBar value={33} />);
|
|
6
|
+
|
|
7
|
+
expect(screen.getByRole('progressbar')).not.toHaveAccessibleDescription();
|
|
8
|
+
});
|
|
9
|
+
|
|
10
|
+
test('Renders with aria-describedby when progressBarAriaProps is passed in', () => {
|
|
11
|
+
render(
|
|
12
|
+
<>
|
|
13
|
+
<div id="test-id">Test description</div>
|
|
14
|
+
<ProgressBar value={33} progressBarAriaProps={{ 'aria-describedby': 'test-id' }} />
|
|
15
|
+
</>
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
expect(screen.getByRole('progressbar')).toHaveAccessibleDescription('Test description');
|
|
19
|
+
});
|