@patternfly/react-core 6.5.0-prerelease.34 → 6.5.0-prerelease.36

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.
Files changed (139) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/components/package.json +1 -1
  3. package/deprecated/package.json +1 -1
  4. package/dist/dynamic/components/AboutModal/package.json +1 -1
  5. package/dist/dynamic/components/Accordion/package.json +1 -1
  6. package/dist/dynamic/components/ActionList/package.json +1 -1
  7. package/dist/dynamic/components/Alert/package.json +1 -1
  8. package/dist/dynamic/components/Avatar/package.json +1 -1
  9. package/dist/dynamic/components/BackToTop/package.json +1 -1
  10. package/dist/dynamic/components/Backdrop/package.json +1 -1
  11. package/dist/dynamic/components/BackgroundImage/package.json +1 -1
  12. package/dist/dynamic/components/Badge/package.json +1 -1
  13. package/dist/dynamic/components/Banner/package.json +1 -1
  14. package/dist/dynamic/components/Brand/package.json +1 -1
  15. package/dist/dynamic/components/Breadcrumb/package.json +1 -1
  16. package/dist/dynamic/components/Button/package.json +1 -1
  17. package/dist/dynamic/components/CalendarMonth/package.json +1 -1
  18. package/dist/dynamic/components/Card/package.json +1 -1
  19. package/dist/dynamic/components/Checkbox/package.json +1 -1
  20. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  21. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  22. package/dist/dynamic/components/Compass/package.json +1 -1
  23. package/dist/dynamic/components/Content/package.json +1 -1
  24. package/dist/dynamic/components/DataList/package.json +1 -1
  25. package/dist/dynamic/components/DatePicker/package.json +1 -1
  26. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  27. package/dist/dynamic/components/Divider/package.json +1 -1
  28. package/dist/dynamic/components/Drawer/package.json +1 -1
  29. package/dist/dynamic/components/Dropdown/package.json +1 -1
  30. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  31. package/dist/dynamic/components/EmptyState/package.json +1 -1
  32. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  33. package/dist/dynamic/components/FileUpload/package.json +1 -1
  34. package/dist/dynamic/components/Form/package.json +1 -1
  35. package/dist/dynamic/components/FormSelect/package.json +1 -1
  36. package/dist/dynamic/components/HelperText/package.json +1 -1
  37. package/dist/dynamic/components/Hero/package.json +1 -1
  38. package/dist/dynamic/components/Hint/package.json +1 -1
  39. package/dist/dynamic/components/Icon/package.json +1 -1
  40. package/dist/dynamic/components/InputGroup/package.json +1 -1
  41. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  42. package/dist/dynamic/components/Label/package.json +1 -1
  43. package/dist/dynamic/components/List/package.json +1 -1
  44. package/dist/dynamic/components/LoginPage/package.json +1 -1
  45. package/dist/dynamic/components/Masthead/package.json +1 -1
  46. package/dist/dynamic/components/Menu/package.json +1 -1
  47. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  48. package/dist/dynamic/components/Modal/package.json +1 -1
  49. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  50. package/dist/dynamic/components/Nav/package.json +1 -1
  51. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  52. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  53. package/dist/dynamic/components/NumberInput/package.json +1 -1
  54. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  55. package/dist/dynamic/components/Page/package.json +1 -1
  56. package/dist/dynamic/components/Pagination/package.json +1 -1
  57. package/dist/dynamic/components/Panel/package.json +1 -1
  58. package/dist/dynamic/components/Popover/package.json +1 -1
  59. package/dist/dynamic/components/Progress/package.json +1 -1
  60. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  61. package/dist/dynamic/components/Radio/package.json +1 -1
  62. package/dist/dynamic/components/SearchInput/package.json +1 -1
  63. package/dist/dynamic/components/Select/package.json +1 -1
  64. package/dist/dynamic/components/Sidebar/package.json +1 -1
  65. package/dist/dynamic/components/SimpleList/package.json +1 -1
  66. package/dist/dynamic/components/Skeleton/package.json +1 -1
  67. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  68. package/dist/dynamic/components/Slider/package.json +1 -1
  69. package/dist/dynamic/components/Spinner/package.json +1 -1
  70. package/dist/dynamic/components/Switch/package.json +1 -1
  71. package/dist/dynamic/components/Tabs/package.json +1 -1
  72. package/dist/dynamic/components/TextArea/package.json +1 -1
  73. package/dist/dynamic/components/TextInput/package.json +1 -1
  74. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  75. package/dist/dynamic/components/TimePicker/package.json +1 -1
  76. package/dist/dynamic/components/Timestamp/package.json +1 -1
  77. package/dist/dynamic/components/Title/package.json +1 -1
  78. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  79. package/dist/dynamic/components/Toolbar/package.json +1 -1
  80. package/dist/dynamic/components/Tooltip/package.json +1 -1
  81. package/dist/dynamic/components/TreeView/package.json +1 -1
  82. package/dist/dynamic/components/Truncate/package.json +1 -1
  83. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  91. package/dist/dynamic/deprecated/components/package.json +1 -1
  92. package/dist/dynamic/helpers/AnimationsProvider/AnimationsProvider/package.json +1 -1
  93. package/dist/dynamic/helpers/AnimationsProvider/package.json +1 -1
  94. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  95. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  96. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  97. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  98. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  99. package/dist/dynamic/helpers/constants/package.json +1 -1
  100. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  101. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  102. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  103. package/dist/dynamic/helpers/package.json +1 -1
  104. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  105. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  106. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  107. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  108. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  109. package/dist/dynamic/helpers/util/package.json +1 -1
  110. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  111. package/dist/dynamic/layouts/Flex/package.json +1 -1
  112. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  113. package/dist/dynamic/layouts/Grid/package.json +1 -1
  114. package/dist/dynamic/layouts/Level/package.json +1 -1
  115. package/dist/dynamic/layouts/Split/package.json +1 -1
  116. package/dist/dynamic/layouts/Stack/package.json +1 -1
  117. package/dist/dynamic/styles/package.json +1 -1
  118. package/dist/esm/components/Tabs/Tabs.d.ts +4 -0
  119. package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
  120. package/dist/esm/components/Tabs/Tabs.js +2 -2
  121. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  122. package/dist/js/components/Tabs/Tabs.d.ts +4 -0
  123. package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
  124. package/dist/js/components/Tabs/Tabs.js +2 -2
  125. package/dist/js/components/Tabs/Tabs.js.map +1 -1
  126. package/dist/umd/assets/{output-C6L1Kbaz.css → output-Oj5Bp7DL.css} +17371 -17371
  127. package/dist/umd/react-core.min.js +1 -1
  128. package/helpers/package.json +1 -1
  129. package/layouts/package.json +1 -1
  130. package/next/package.json +1 -1
  131. package/package.json +2 -2
  132. package/src/components/CodeBlock/examples/CodeBlockBasic.tsx +0 -1
  133. package/src/components/CodeBlock/examples/CodeBlockExpandable.tsx +0 -1
  134. package/src/components/Tabs/Tabs.tsx +14 -1
  135. package/src/components/Tabs/__tests__/Tabs.test.tsx +48 -0
  136. package/src/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +260 -0
  137. package/src/components/Tabs/examples/Tabs.md +2 -0
  138. package/src/components/Tabs/examples/TabsNavSubtab.tsx +2 -0
  139. package/src/components/Tabs/examples/TabsSubtabs.tsx +2 -0
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.5.0-prerelease.33","private":true}
1
+ {"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.5.0-prerelease.35","private":true}
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.5.0-prerelease.33","private":true}
1
+ {"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.5.0-prerelease.35","private":true}
package/next/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.5.0-prerelease.33","private":true}
1
+ {"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.5.0-prerelease.35","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "6.5.0-prerelease.34",
3
+ "version": "6.5.0-prerelease.36",
4
4
  "description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
5
5
  "main": "dist/js/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -63,5 +63,5 @@
63
63
  "react": "^17 || ^18 || ^19",
64
64
  "react-dom": "^17 || ^18 || ^19"
65
65
  },
66
- "gitHead": "1e5d932bb15d8f512a2602455fd3cd0c1d9d9d1e"
66
+ "gitHead": "ed7da1340a8cc0688d935410ec2984af9101bbab"
67
67
  }
@@ -37,7 +37,6 @@ url: https://raw.githubusercontent.com/Azure-Samples/helm-charts/master/docs`;
37
37
  <CodeBlockAction>
38
38
  <ClipboardCopyButton
39
39
  id="basic-copy-button"
40
- textId="code-content"
41
40
  aria-label="Copy to clipboard basic example code block"
42
41
  onClick={(e) => onClick(e, code)}
43
42
  exitDelay={copied ? 1500 : 600}
@@ -53,7 +53,6 @@ url: https://raw.githubusercontent.com/Azure-Samples/helm-charts/master/docs`;
53
53
  <CodeBlockAction>
54
54
  <ClipboardCopyButton
55
55
  id="expandable-copy-button"
56
- textId="code-content"
57
56
  aria-label="Copy to clipboard"
58
57
  onClick={(e) => onClick(e, copyBlock)}
59
58
  exitDelay={copied ? 1500 : 600}
@@ -60,6 +60,10 @@ export interface TabsProps
60
60
  onAdd?: (event: React.MouseEvent<HTMLElement, MouseEvent>) => void;
61
61
  /** Aria-label for the add button */
62
62
  addButtonAriaLabel?: string;
63
+ /** A readable string to create an accessible name for the tablist element. This can be used to differentiate multiple tablists on a page, and should be used for subtabs. */
64
+ tabListAriaLabel?: string;
65
+ /** Id of an element that provides an accessible name for the tablist. Use this when a visible label already exists on the page. */
66
+ tabListAriaLabelledBy?: string;
63
67
  /** Uniquely identifies the tabs */
64
68
  id?: string;
65
69
  /** Flag indicating that the add button is disabled when onAdd is passed in */
@@ -499,6 +503,8 @@ class Tabs extends Component<TabsProps, TabsState> {
499
503
  toggleText,
500
504
  toggleAriaLabel,
501
505
  addButtonAriaLabel,
506
+ tabListAriaLabel,
507
+ tabListAriaLabelledBy,
502
508
  onToggle,
503
509
  onClose,
504
510
  onAdd,
@@ -625,7 +631,14 @@ class Tabs extends Component<TabsProps, TabsState> {
625
631
  />
626
632
  </div>
627
633
  )}
628
- <ul className={css(styles.tabsList)} ref={this.tabList} onScroll={this.handleScrollButtons} role="tablist">
634
+ <ul
635
+ aria-label={tabListAriaLabel}
636
+ aria-labelledby={tabListAriaLabelledBy}
637
+ className={css(styles.tabsList)}
638
+ ref={this.tabList}
639
+ onScroll={this.handleScrollButtons}
640
+ role="tablist"
641
+ >
629
642
  {isOverflowHorizontal ? filteredChildrenWithoutOverflow : filteredChildren}
630
643
  {hasOverflowTab && <OverflowTab overflowingTabs={overflowingTabProps} {...overflowObjectProps} />}
631
644
  </ul>
@@ -742,3 +742,51 @@ test(`should render with custom inline style and accent position inline style`,
742
742
 
743
743
  expect(screen.getByRole('region')).toHaveStyle(`background-color: #12345;--pf-v6-c-tabs--link-accent--start: 0px;`);
744
744
  });
745
+
746
+ test('should render tablist aria-label when provided', () => {
747
+ const { asFragment } = render(
748
+ <Tabs id="tabListLabelTabs" tabListAriaLabel="Primary tab list">
749
+ <Tab id="tab1" eventKey={0} title={<TabTitleText>"Tab item 1"</TabTitleText>}>
750
+ Tab 1 section
751
+ </Tab>
752
+ <Tab id="tab2" eventKey={1} title={<TabTitleText>"Tab item 2"</TabTitleText>}>
753
+ Tab 2 section
754
+ </Tab>
755
+ </Tabs>
756
+ );
757
+
758
+ expect(asFragment()).toMatchSnapshot();
759
+ });
760
+
761
+ test('should render tablist aria-labelledby when provided', () => {
762
+ const { asFragment } = render(
763
+ <>
764
+ <h2 id="tablistHeading">My tabs heading</h2>
765
+ <Tabs id="tabListLabelledByTabs" tabListAriaLabelledBy="tablistHeading">
766
+ <Tab id="tab1" eventKey={0} title={<TabTitleText>"Tab item 1"</TabTitleText>}>
767
+ Tab 1 section
768
+ </Tab>
769
+ <Tab id="tab2" eventKey={1} title={<TabTitleText>"Tab item 2"</TabTitleText>}>
770
+ Tab 2 section
771
+ </Tab>
772
+ </Tabs>
773
+ </>
774
+ );
775
+
776
+ expect(asFragment()).toMatchSnapshot();
777
+ });
778
+
779
+ test('should not render tablist aria-label or aria-labelledby when neither is provided', () => {
780
+ const { asFragment } = render(
781
+ <Tabs id="noTabListLabelTabs">
782
+ <Tab id="tab1" eventKey={0} title={<TabTitleText>"Tab item 1"</TabTitleText>}>
783
+ Tab 1 section
784
+ </Tab>
785
+ <Tab id="tab2" eventKey={1} title={<TabTitleText>"Tab item 2"</TabTitleText>}>
786
+ Tab 2 section
787
+ </Tab>
788
+ </Tabs>
789
+ );
790
+
791
+ expect(asFragment()).toMatchSnapshot();
792
+ });
@@ -1118,6 +1118,266 @@ exports[`should render subtabs 1`] = `
1118
1118
  </DocumentFragment>
1119
1119
  `;
1120
1120
 
1121
+ exports[`should render tablist aria-label when provided 1`] = `
1122
+ <DocumentFragment>
1123
+ <div
1124
+ class="pf-v6-c-tabs pf-m-animate-current pf-m-initializing-accent"
1125
+ data-ouia-component-id="OUIA-Generated-Tabs-38"
1126
+ data-ouia-component-type="PF6/Tabs"
1127
+ data-ouia-safe="true"
1128
+ id="tabListLabelTabs"
1129
+ style="--pf-v6-c-tabs--link-accent--length: 0px; --pf-v6-c-tabs--link-accent--start: 0px;"
1130
+ >
1131
+ <ul
1132
+ aria-label="Primary tab list"
1133
+ class="pf-v6-c-tabs__list"
1134
+ role="tablist"
1135
+ >
1136
+ <li
1137
+ class="pf-v6-c-tabs__item pf-m-current"
1138
+ role="presentation"
1139
+ >
1140
+ <button
1141
+ aria-controls="pf-tab-section-0-tab1"
1142
+ aria-selected="true"
1143
+ class="pf-v6-c-tabs__link"
1144
+ data-ouia-component-type="PF6/TabButton"
1145
+ data-ouia-safe="true"
1146
+ id="pf-tab-0-tab1"
1147
+ role="tab"
1148
+ type="button"
1149
+ >
1150
+ <span
1151
+ class="pf-v6-c-tabs__item-text"
1152
+ >
1153
+ "Tab item 1"
1154
+ </span>
1155
+ </button>
1156
+ </li>
1157
+ <li
1158
+ class="pf-v6-c-tabs__item"
1159
+ role="presentation"
1160
+ >
1161
+ <button
1162
+ aria-controls="pf-tab-section-1-tab2"
1163
+ aria-selected="false"
1164
+ class="pf-v6-c-tabs__link"
1165
+ data-ouia-component-type="PF6/TabButton"
1166
+ data-ouia-safe="true"
1167
+ id="pf-tab-1-tab2"
1168
+ role="tab"
1169
+ type="button"
1170
+ >
1171
+ <span
1172
+ class="pf-v6-c-tabs__item-text"
1173
+ >
1174
+ "Tab item 2"
1175
+ </span>
1176
+ </button>
1177
+ </li>
1178
+ </ul>
1179
+ </div>
1180
+ <section
1181
+ aria-labelledby="pf-tab-0-tab1"
1182
+ class="pf-v6-c-tab-content"
1183
+ data-ouia-component-type="PF6/TabContent"
1184
+ data-ouia-safe="true"
1185
+ id="pf-tab-section-0-tab1"
1186
+ role="tabpanel"
1187
+ tabindex="0"
1188
+ >
1189
+ Tab 1 section
1190
+ </section>
1191
+ <section
1192
+ aria-labelledby="pf-tab-1-tab2"
1193
+ class="pf-v6-c-tab-content"
1194
+ data-ouia-component-type="PF6/TabContent"
1195
+ data-ouia-safe="true"
1196
+ hidden=""
1197
+ id="pf-tab-section-1-tab2"
1198
+ role="tabpanel"
1199
+ tabindex="0"
1200
+ >
1201
+ Tab 2 section
1202
+ </section>
1203
+ </DocumentFragment>
1204
+ `;
1205
+
1206
+ exports[`should render tablist aria-labelledby when provided 1`] = `
1207
+ <DocumentFragment>
1208
+ <h2
1209
+ id="tablistHeading"
1210
+ >
1211
+ My tabs heading
1212
+ </h2>
1213
+ <div
1214
+ class="pf-v6-c-tabs pf-m-animate-current pf-m-initializing-accent"
1215
+ data-ouia-component-id="OUIA-Generated-Tabs-39"
1216
+ data-ouia-component-type="PF6/Tabs"
1217
+ data-ouia-safe="true"
1218
+ id="tabListLabelledByTabs"
1219
+ style="--pf-v6-c-tabs--link-accent--length: 0px; --pf-v6-c-tabs--link-accent--start: 0px;"
1220
+ >
1221
+ <ul
1222
+ aria-labelledby="tablistHeading"
1223
+ class="pf-v6-c-tabs__list"
1224
+ role="tablist"
1225
+ >
1226
+ <li
1227
+ class="pf-v6-c-tabs__item pf-m-current"
1228
+ role="presentation"
1229
+ >
1230
+ <button
1231
+ aria-controls="pf-tab-section-0-tab1"
1232
+ aria-selected="true"
1233
+ class="pf-v6-c-tabs__link"
1234
+ data-ouia-component-type="PF6/TabButton"
1235
+ data-ouia-safe="true"
1236
+ id="pf-tab-0-tab1"
1237
+ role="tab"
1238
+ type="button"
1239
+ >
1240
+ <span
1241
+ class="pf-v6-c-tabs__item-text"
1242
+ >
1243
+ "Tab item 1"
1244
+ </span>
1245
+ </button>
1246
+ </li>
1247
+ <li
1248
+ class="pf-v6-c-tabs__item"
1249
+ role="presentation"
1250
+ >
1251
+ <button
1252
+ aria-controls="pf-tab-section-1-tab2"
1253
+ aria-selected="false"
1254
+ class="pf-v6-c-tabs__link"
1255
+ data-ouia-component-type="PF6/TabButton"
1256
+ data-ouia-safe="true"
1257
+ id="pf-tab-1-tab2"
1258
+ role="tab"
1259
+ type="button"
1260
+ >
1261
+ <span
1262
+ class="pf-v6-c-tabs__item-text"
1263
+ >
1264
+ "Tab item 2"
1265
+ </span>
1266
+ </button>
1267
+ </li>
1268
+ </ul>
1269
+ </div>
1270
+ <section
1271
+ aria-labelledby="pf-tab-0-tab1"
1272
+ class="pf-v6-c-tab-content"
1273
+ data-ouia-component-type="PF6/TabContent"
1274
+ data-ouia-safe="true"
1275
+ id="pf-tab-section-0-tab1"
1276
+ role="tabpanel"
1277
+ tabindex="0"
1278
+ >
1279
+ Tab 1 section
1280
+ </section>
1281
+ <section
1282
+ aria-labelledby="pf-tab-1-tab2"
1283
+ class="pf-v6-c-tab-content"
1284
+ data-ouia-component-type="PF6/TabContent"
1285
+ data-ouia-safe="true"
1286
+ hidden=""
1287
+ id="pf-tab-section-1-tab2"
1288
+ role="tabpanel"
1289
+ tabindex="0"
1290
+ >
1291
+ Tab 2 section
1292
+ </section>
1293
+ </DocumentFragment>
1294
+ `;
1295
+
1296
+
1297
+ exports[`should not render tablist aria-label or aria-labelledby when neither is provided 1`] = `
1298
+ <DocumentFragment>
1299
+ <div
1300
+ class="pf-v6-c-tabs pf-m-animate-current pf-m-initializing-accent"
1301
+ data-ouia-component-id="OUIA-Generated-Tabs-40"
1302
+ data-ouia-component-type="PF6/Tabs"
1303
+ data-ouia-safe="true"
1304
+ id="noTabListLabelTabs"
1305
+ style="--pf-v6-c-tabs--link-accent--length: 0px; --pf-v6-c-tabs--link-accent--start: 0px;"
1306
+ >
1307
+ <ul
1308
+ class="pf-v6-c-tabs__list"
1309
+ role="tablist"
1310
+ >
1311
+ <li
1312
+ class="pf-v6-c-tabs__item pf-m-current"
1313
+ role="presentation"
1314
+ >
1315
+ <button
1316
+ aria-controls="pf-tab-section-0-tab1"
1317
+ aria-selected="true"
1318
+ class="pf-v6-c-tabs__link"
1319
+ data-ouia-component-type="PF6/TabButton"
1320
+ data-ouia-safe="true"
1321
+ id="pf-tab-0-tab1"
1322
+ role="tab"
1323
+ type="button"
1324
+ >
1325
+ <span
1326
+ class="pf-v6-c-tabs__item-text"
1327
+ >
1328
+ "Tab item 1"
1329
+ </span>
1330
+ </button>
1331
+ </li>
1332
+ <li
1333
+ class="pf-v6-c-tabs__item"
1334
+ role="presentation"
1335
+ >
1336
+ <button
1337
+ aria-controls="pf-tab-section-1-tab2"
1338
+ aria-selected="false"
1339
+ class="pf-v6-c-tabs__link"
1340
+ data-ouia-component-type="PF6/TabButton"
1341
+ data-ouia-safe="true"
1342
+ id="pf-tab-1-tab2"
1343
+ role="tab"
1344
+ type="button"
1345
+ >
1346
+ <span
1347
+ class="pf-v6-c-tabs__item-text"
1348
+ >
1349
+ "Tab item 2"
1350
+ </span>
1351
+ </button>
1352
+ </li>
1353
+ </ul>
1354
+ </div>
1355
+ <section
1356
+ aria-labelledby="pf-tab-0-tab1"
1357
+ class="pf-v6-c-tab-content"
1358
+ data-ouia-component-type="PF6/TabContent"
1359
+ data-ouia-safe="true"
1360
+ id="pf-tab-section-0-tab1"
1361
+ role="tabpanel"
1362
+ tabindex="0"
1363
+ >
1364
+ Tab 1 section
1365
+ </section>
1366
+ <section
1367
+ aria-labelledby="pf-tab-1-tab2"
1368
+ class="pf-v6-c-tab-content"
1369
+ data-ouia-component-type="PF6/TabContent"
1370
+ data-ouia-safe="true"
1371
+ hidden=""
1372
+ id="pf-tab-section-1-tab2"
1373
+ role="tabpanel"
1374
+ tabindex="0"
1375
+ >
1376
+ Tab 2 section
1377
+ </section>
1378
+ </DocumentFragment>
1379
+ `;
1380
+
1121
1381
  exports[`should render tabs with eventKey Strings 1`] = `
1122
1382
  <DocumentFragment>
1123
1383
  <div
@@ -159,6 +159,8 @@ Use subtabs within other components, like modals. Subtabs have less visually pro
159
159
 
160
160
  To apply subtab styling to tabs, use the `isSubtab` property.
161
161
 
162
+ For accessibility, give the primary tablist an accessible name (for example, `tabListAriaLabel="Primary"`) and give any subtab tablist an accessible name that matches the currently selected primary tab (for example, `tabListAriaLabel="Users"`).
163
+
162
164
  ```ts file="./TabsSubtabs.tsx"
163
165
 
164
166
  ```
@@ -27,6 +27,7 @@ export const TabsNavSubtab: React.FunctionComponent = () => {
27
27
  onSelect={handleTabClickFirst}
28
28
  component={TabsComponent.nav}
29
29
  aria-label="Tabs in the sub tabs with nav element example"
30
+ tabListAriaLabel="Primary"
30
31
  >
31
32
  <Tab eventKey={0} title={<TabTitleText>Users</TabTitleText>} href="#" aria-label="Subtabs with nav content users">
32
33
  <Tabs
@@ -35,6 +36,7 @@ export const TabsNavSubtab: React.FunctionComponent = () => {
35
36
  onSelect={handleTabClickSecond}
36
37
  aria-label="Local secondary"
37
38
  component={TabsComponent.nav}
39
+ tabListAriaLabel="Users"
38
40
  >
39
41
  <Tab eventKey={20} title={<TabTitleText>Item 1</TabTitleText>} href="#">
40
42
  Item 1 item section
@@ -33,6 +33,7 @@ export const TabsSubtabs: React.FunctionComponent = () => {
33
33
  onSelect={handleTabClickFirst}
34
34
  isBox={isBox}
35
35
  aria-label="Tabs in the tabs with subtabs example"
36
+ tabListAriaLabel="Primary"
36
37
  role="region"
37
38
  >
38
39
  <Tab eventKey={0} title={<TabTitleText>Users</TabTitleText>} aria-label="Tabs with subtabs content users">
@@ -41,6 +42,7 @@ export const TabsSubtabs: React.FunctionComponent = () => {
41
42
  role="region"
42
43
  activeKey={activeTabKey2}
43
44
  isSubtab
45
+ tabListAriaLabel="Users"
44
46
  onSelect={handleTabClickSecond}
45
47
  >
46
48
  <Tab eventKey={20} title={<TabTitleText>Subtab item 1</TabTitleText>}>