@patternfly/react-core 6.5.0-prerelease.5 → 6.5.0-prerelease.7

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 (156) hide show
  1. package/CHANGELOG.md +10 -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/Hint/package.json +1 -1
  38. package/dist/dynamic/components/Icon/package.json +1 -1
  39. package/dist/dynamic/components/InputGroup/package.json +1 -1
  40. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  41. package/dist/dynamic/components/Label/package.json +1 -1
  42. package/dist/dynamic/components/List/package.json +1 -1
  43. package/dist/dynamic/components/LoginPage/package.json +1 -1
  44. package/dist/dynamic/components/Masthead/package.json +1 -1
  45. package/dist/dynamic/components/Menu/package.json +1 -1
  46. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  47. package/dist/dynamic/components/Modal/package.json +1 -1
  48. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  49. package/dist/dynamic/components/Nav/package.json +1 -1
  50. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  51. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  52. package/dist/dynamic/components/NumberInput/package.json +1 -1
  53. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  54. package/dist/dynamic/components/Page/package.json +1 -1
  55. package/dist/dynamic/components/Pagination/package.json +1 -1
  56. package/dist/dynamic/components/Panel/package.json +1 -1
  57. package/dist/dynamic/components/Popover/package.json +1 -1
  58. package/dist/dynamic/components/Progress/package.json +1 -1
  59. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  60. package/dist/dynamic/components/Radio/package.json +1 -1
  61. package/dist/dynamic/components/SearchInput/package.json +1 -1
  62. package/dist/dynamic/components/Select/package.json +1 -1
  63. package/dist/dynamic/components/Sidebar/package.json +1 -1
  64. package/dist/dynamic/components/SimpleList/package.json +1 -1
  65. package/dist/dynamic/components/Skeleton/package.json +1 -1
  66. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  67. package/dist/dynamic/components/Slider/package.json +1 -1
  68. package/dist/dynamic/components/Spinner/package.json +1 -1
  69. package/dist/dynamic/components/Switch/package.json +1 -1
  70. package/dist/dynamic/components/Tabs/package.json +1 -1
  71. package/dist/dynamic/components/TextArea/package.json +1 -1
  72. package/dist/dynamic/components/TextInput/package.json +1 -1
  73. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  74. package/dist/dynamic/components/TimePicker/package.json +1 -1
  75. package/dist/dynamic/components/Timestamp/package.json +1 -1
  76. package/dist/dynamic/components/Title/package.json +1 -1
  77. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  78. package/dist/dynamic/components/Toolbar/package.json +1 -1
  79. package/dist/dynamic/components/Tooltip/package.json +1 -1
  80. package/dist/dynamic/components/TreeView/package.json +1 -1
  81. package/dist/dynamic/components/Truncate/package.json +1 -1
  82. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  83. package/dist/dynamic/components/Wizard/package.json +1 -1
  84. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/package.json +1 -1
  91. package/dist/dynamic/helpers/AnimationsProvider/AnimationsProvider/package.json +1 -1
  92. package/dist/dynamic/helpers/AnimationsProvider/package.json +1 -1
  93. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  94. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  95. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  96. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  97. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  98. package/dist/dynamic/helpers/constants/package.json +1 -1
  99. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  100. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  101. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  102. package/dist/dynamic/helpers/package.json +1 -1
  103. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  104. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  105. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  106. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  107. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  108. package/dist/dynamic/helpers/util/package.json +1 -1
  109. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  110. package/dist/dynamic/layouts/Flex/package.json +1 -1
  111. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  112. package/dist/dynamic/layouts/Grid/package.json +1 -1
  113. package/dist/dynamic/layouts/Level/package.json +1 -1
  114. package/dist/dynamic/layouts/Split/package.json +1 -1
  115. package/dist/dynamic/layouts/Stack/package.json +1 -1
  116. package/dist/dynamic/styles/package.json +1 -1
  117. package/dist/esm/components/Card/CardSubtitle.d.ts +9 -0
  118. package/dist/esm/components/Card/CardSubtitle.d.ts.map +1 -0
  119. package/dist/esm/components/Card/CardSubtitle.js +10 -0
  120. package/dist/esm/components/Card/CardSubtitle.js.map +1 -0
  121. package/dist/esm/components/Card/CardTitle.d.ts +2 -0
  122. package/dist/esm/components/Card/CardTitle.d.ts.map +1 -1
  123. package/dist/esm/components/Card/CardTitle.js +5 -3
  124. package/dist/esm/components/Card/CardTitle.js.map +1 -1
  125. package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
  126. package/dist/esm/components/Tabs/Tabs.js +2 -2
  127. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  128. package/dist/js/components/Card/CardSubtitle.d.ts +9 -0
  129. package/dist/js/components/Card/CardSubtitle.d.ts.map +1 -0
  130. package/dist/js/components/Card/CardSubtitle.js +14 -0
  131. package/dist/js/components/Card/CardSubtitle.js.map +1 -0
  132. package/dist/js/components/Card/CardTitle.d.ts +2 -0
  133. package/dist/js/components/Card/CardTitle.d.ts.map +1 -1
  134. package/dist/js/components/Card/CardTitle.js +4 -2
  135. package/dist/js/components/Card/CardTitle.js.map +1 -1
  136. package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
  137. package/dist/js/components/Tabs/Tabs.js +2 -2
  138. package/dist/js/components/Tabs/Tabs.js.map +1 -1
  139. package/dist/styles/base-no-reset.css +5 -0
  140. package/dist/styles/base.css +12 -0
  141. package/dist/umd/assets/{output-m_8X2Duh.css → output-B9OM_nT0.css} +14404 -14381
  142. package/dist/umd/react-core.min.js +2 -2
  143. package/helpers/package.json +1 -1
  144. package/layouts/package.json +1 -1
  145. package/next/package.json +1 -1
  146. package/package.json +6 -6
  147. package/src/components/Card/CardSubtitle.tsx +20 -0
  148. package/src/components/Card/CardTitle.tsx +6 -0
  149. package/src/components/Card/__tests__/CardSubtitle.test.tsx +16 -0
  150. package/src/components/Card/__tests__/__snapshots__/CardSubtitle.test.tsx.snap +12 -0
  151. package/src/components/Card/examples/Card.md +16 -1
  152. package/src/components/Card/examples/CardSubtitle.tsx +9 -0
  153. package/src/components/Card/examples/CardSubtitleActions.tsx +107 -0
  154. package/src/components/Tabs/Tabs.tsx +2 -2
  155. package/src/components/Tabs/examples/Tabs.md +8 -0
  156. package/src/components/Tabs/examples/TabsSiteNav.tsx +40 -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.4","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.6","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.4","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.6","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.4","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.6","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "6.5.0-prerelease.5",
3
+ "version": "6.5.0-prerelease.7",
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",
@@ -46,15 +46,15 @@
46
46
  "subpaths": "node ../../scripts/exportSubpaths.mjs --config subpaths.config.json"
47
47
  },
48
48
  "dependencies": {
49
- "@patternfly/react-icons": "^6.5.0-prerelease.2",
50
- "@patternfly/react-styles": "^6.5.0-prerelease.2",
51
- "@patternfly/react-tokens": "^6.5.0-prerelease.2",
49
+ "@patternfly/react-icons": "^6.5.0-prerelease.3",
50
+ "@patternfly/react-styles": "^6.5.0-prerelease.3",
51
+ "@patternfly/react-tokens": "^6.5.0-prerelease.3",
52
52
  "focus-trap": "7.6.4",
53
53
  "react-dropzone": "^14.3.5",
54
54
  "tslib": "^2.8.1"
55
55
  },
56
56
  "devDependencies": {
57
- "@patternfly/patternfly": "6.5.0-prerelease.12",
57
+ "@patternfly/patternfly": "6.5.0-prerelease.14",
58
58
  "case-anything": "^3.1.2",
59
59
  "css": "^3.0.0",
60
60
  "fs-extra": "^11.3.0"
@@ -63,5 +63,5 @@
63
63
  "react": "^17 || ^18 || ^19",
64
64
  "react-dom": "^17 || ^18 || ^19"
65
65
  },
66
- "gitHead": "0f921f1c919501506e043b7c8b2febc71644b15a"
66
+ "gitHead": "d09b3a3cb11d10807ada3c9fbde44254818f2fa2"
67
67
  }
@@ -0,0 +1,20 @@
1
+ import { css } from '@patternfly/react-styles';
2
+ import styles from '@patternfly/react-styles/css/components/Card/card';
3
+
4
+ export interface CardSubtitleProps {
5
+ /** Content rendered inside the description. */
6
+ children?: React.ReactNode;
7
+ /** Id of the description. */
8
+ id?: string;
9
+ }
10
+
11
+ export const CardSubtitle: React.FunctionComponent<CardSubtitleProps> = ({
12
+ children = null,
13
+ id = '',
14
+ ...props
15
+ }: CardSubtitleProps) => (
16
+ <div {...props} id={id} className={css(styles.cardSubtitle)}>
17
+ {children}
18
+ </div>
19
+ );
20
+ CardSubtitle.displayName = 'CardSubtitle';
@@ -2,6 +2,7 @@ import { useContext } from 'react';
2
2
  import { css } from '@patternfly/react-styles';
3
3
  import styles from '@patternfly/react-styles/css/components/Card/card';
4
4
  import { CardContext } from './Card';
5
+ import { CardSubtitle } from './CardSubtitle';
5
6
 
6
7
  export interface CardTitleProps extends React.HTMLProps<HTMLDivElement> {
7
8
  /** Content rendered inside the CardTitle */
@@ -10,23 +11,28 @@ export interface CardTitleProps extends React.HTMLProps<HTMLDivElement> {
10
11
  className?: string;
11
12
  /** Sets the base component to render. defaults to div */
12
13
  component?: keyof React.JSX.IntrinsicElements;
14
+ /** @beta Subtitle of the card title */
15
+ subtitle?: React.ReactNode;
13
16
  }
14
17
 
15
18
  export const CardTitle: React.FunctionComponent<CardTitleProps> = ({
16
19
  children,
17
20
  className,
18
21
  component = 'div',
22
+ subtitle,
19
23
  ...props
20
24
  }: CardTitleProps) => {
21
25
  const { cardId } = useContext(CardContext);
22
26
  const Component = component as any;
23
27
  const titleId = cardId ? `${cardId}-title` : '';
28
+ const subtitleId = cardId ? `${cardId}-subtitle` : '';
24
29
 
25
30
  return (
26
31
  <div className={css(styles.cardTitle)}>
27
32
  <Component className={css(styles.cardTitleText, className)} id={titleId || undefined} {...props}>
28
33
  {children}
29
34
  </Component>
35
+ {subtitle && <CardSubtitle id={subtitleId}>{subtitle}</CardSubtitle>}
30
36
  </div>
31
37
  );
32
38
  };
@@ -0,0 +1,16 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import { CardSubtitle } from '../CardSubtitle';
3
+
4
+ describe('CardSubtitle', () => {
5
+ test('renders with PatternFly Core styles', () => {
6
+ const { asFragment } = render(<CardSubtitle>text</CardSubtitle>);
7
+ expect(asFragment()).toMatchSnapshot();
8
+ });
9
+
10
+ test('extra props are spread to the root element', () => {
11
+ const testId = 'card-subtitle';
12
+
13
+ render(<CardSubtitle data-testid={testId} />);
14
+ expect(screen.getByTestId(testId)).toBeInTheDocument();
15
+ });
16
+ });
@@ -0,0 +1,12 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`CardSubtitle renders with PatternFly Core styles 1`] = `
4
+ <DocumentFragment>
5
+ <div
6
+ class="pf-v6-c-card__subtitle"
7
+ id=""
8
+ >
9
+ text
10
+ </div>
11
+ </DocumentFragment>
12
+ `;
@@ -28,7 +28,20 @@ import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
28
28
 
29
29
  Basic cards typically have a `<CardTitle>`, `<CardBody>` and `<CardFooter>`. You may omit these components as needed, but it is recommended to at least include a `<CardBody>` to provide details about the card item.
30
30
 
31
- ```ts file='./CardBasic.tsx'
31
+ ```ts file='./CardBasic.tsx'
32
+
33
+ ```
34
+ ### Card with subtitle
35
+
36
+ A basic card that also has a subtitle
37
+
38
+ ```ts file='./CardSubtitle.tsx' isBeta
39
+
40
+ ```
41
+ ### Card with subtitle and Actions
42
+ This card demonstrates having an image, action, and subtitle in a single card.
43
+
44
+ ```ts file='./CardSubtitleActions.tsx' isBeta
32
45
 
33
46
  ```
34
47
 
@@ -71,6 +84,8 @@ Select the "actions hasNoOffset" checkbox in the example below to illustrate thi
71
84
 
72
85
  ```
73
86
 
87
+
88
+
74
89
  ### Title inline with images and actions
75
90
 
76
91
  Moving `<CardTitle>` within the `<CardHeader>` will style it inline with any images or actions.
@@ -0,0 +1,9 @@
1
+ import { Card, CardTitle, CardBody, CardFooter } from '@patternfly/react-core';
2
+
3
+ export const CardSubtitle: React.FunctionComponent = () => (
4
+ <Card ouiaId="CardSubtitle">
5
+ <CardTitle subtitle="Subtitle">Title</CardTitle>
6
+ <CardBody>Body</CardBody>
7
+ <CardFooter>Footer</CardFooter>
8
+ </Card>
9
+ );
@@ -0,0 +1,107 @@
1
+ import { useState } from 'react';
2
+ import {
3
+ Brand,
4
+ Card,
5
+ CardHeader,
6
+ CardTitle,
7
+ CardBody,
8
+ CardFooter,
9
+ Checkbox,
10
+ Dropdown,
11
+ DropdownList,
12
+ DropdownItem,
13
+ MenuToggle,
14
+ MenuToggleElement,
15
+ Divider
16
+ } from '@patternfly/react-core';
17
+ import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
18
+ import pfLogo from '../../assets/PF-HorizontalLogo-Color.svg';
19
+
20
+ export const CardWithImageAndActions: React.FunctionComponent = () => {
21
+ const [isOpen, setIsOpen] = useState<boolean>(false);
22
+ const [isChecked, setIsChecked] = useState<boolean>(false);
23
+ const [hasNoOffset, setHasNoOffset] = useState<boolean>(false);
24
+
25
+ const onSelect = () => {
26
+ setIsOpen(!isOpen);
27
+ };
28
+ const onClick = (checked: boolean) => {
29
+ setIsChecked(checked);
30
+ };
31
+ const toggleOffset = (checked: boolean) => {
32
+ setHasNoOffset(checked);
33
+ };
34
+
35
+ const dropdownItems = (
36
+ <>
37
+ <DropdownItem key="action">Action</DropdownItem>
38
+ {/* Prevent default onClick functionality for example purposes */}
39
+ <DropdownItem key="link" to="#" onClick={(event: any) => event.preventDefault()}>
40
+ Link
41
+ </DropdownItem>
42
+ <DropdownItem key="disabled action" isDisabled>
43
+ Disabled Action
44
+ </DropdownItem>
45
+ <DropdownItem key="disabled link" isDisabled to="#" onClick={(event: any) => event.preventDefault()}>
46
+ Disabled Link
47
+ </DropdownItem>
48
+ <Divider component="li" key="separator" />
49
+ <DropdownItem key="separated action">Separated Action</DropdownItem>
50
+ <DropdownItem key="separated link" to="#" onClick={(event: any) => event.preventDefault()}>
51
+ Separated Link
52
+ </DropdownItem>
53
+ </>
54
+ );
55
+
56
+ const headerActions = (
57
+ <>
58
+ <Dropdown
59
+ onSelect={onSelect}
60
+ toggle={(toggleRef: React.Ref<MenuToggleElement>) => (
61
+ <MenuToggle
62
+ ref={toggleRef}
63
+ isExpanded={isOpen}
64
+ onClick={() => setIsOpen(!isOpen)}
65
+ variant="plain"
66
+ aria-label="Card header images and actions example kebab toggle"
67
+ icon={<EllipsisVIcon />}
68
+ />
69
+ )}
70
+ isOpen={isOpen}
71
+ onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
72
+ >
73
+ <DropdownList>{dropdownItems}</DropdownList>
74
+ </Dropdown>
75
+ <Checkbox
76
+ isChecked={isChecked}
77
+ onChange={(_event, checked) => onClick(checked)}
78
+ aria-label="card checkbox example"
79
+ id="check-1"
80
+ name="check1"
81
+ />
82
+ </>
83
+ );
84
+
85
+ return (
86
+ <>
87
+ <Checkbox
88
+ label="actions hasNoOffset"
89
+ isChecked={hasNoOffset}
90
+ onChange={(_event, checked) => toggleOffset(checked)}
91
+ aria-label="remove actions offset"
92
+ id="toggle-actions-offset"
93
+ name="toggle-actions-offset"
94
+ />
95
+ <div style={{ marginTop: '15px' }}>
96
+ <Card>
97
+ <CardHeader actions={{ actions: headerActions, hasNoOffset }}>
98
+ <Brand src={pfLogo} alt="PatternFly logo" style={{ width: '300px' }} />
99
+ </CardHeader>
100
+ <CardTitle subtitle="Subtitle">Title</CardTitle>
101
+ <CardBody>Body</CardBody>
102
+ <CardFooter>Footer</CardFooter>
103
+ </Card>
104
+ </div>
105
+ </>
106
+ );
107
+ };
@@ -206,7 +206,6 @@ class Tabs extends Component<TabsProps, TabsState> {
206
206
  backScrollAriaLabel: 'Scroll back',
207
207
  rightScrollAriaLabel: 'Scroll right',
208
208
  forwardScrollAriaLabel: 'Scroll forward',
209
- component: TabsComponent.div,
210
209
  mountOnEnter: false,
211
210
  unmountOnExit: false,
212
211
  ouiaSafe: true,
@@ -529,7 +528,8 @@ class Tabs extends Component<TabsProps, TabsState> {
529
528
  const overflowingTabProps = filteredChildrenOverflowing.map((child: React.ReactElement<TabProps>) => child.props);
530
529
 
531
530
  const uniqueId = id || getUniqueId();
532
- const Component: any = component === TabsComponent.nav ? 'nav' : 'div';
531
+ const defaultComponent = isNav && !component ? 'nav' : 'div';
532
+ const Component: any = component !== undefined ? component : defaultComponent;
533
533
  const localActiveKey = defaultActiveKey !== undefined ? uncontrolledActiveKey : activeKey;
534
534
 
535
535
  const isExpandedLocal = defaultIsExpanded !== undefined ? uncontrolledIsExpandedLocal : isExpanded;
@@ -189,6 +189,14 @@ Subtabs can also link to nav elements.
189
189
 
190
190
  ```
191
191
 
192
+ ### Tabs used for site navigation
193
+
194
+ Site navigation tabs
195
+
196
+ ```ts file="./TabsSiteNav.tsx"
197
+
198
+ ```
199
+
192
200
  ### With separate content
193
201
 
194
202
  If a `<TabContent>` component is defined outside of a `<Tabs>` component, use the `tabContentRef` and `tabContentId` properties. The `hidden` property is used on `TabContent` to set the initial visible content.
@@ -0,0 +1,40 @@
1
+ import { useState } from 'react';
2
+ import { Tabs, Tab, TabTitleText } from '@patternfly/react-core';
3
+
4
+ export const TabsSiteNav: React.FunctionComponent = () => {
5
+ const [activeTabKey, setActiveTabKey] = useState<string | number>(0);
6
+ // Toggle currently active tab
7
+ const handleTabClick = (
8
+ event: React.MouseEvent<any> | React.KeyboardEvent | MouseEvent,
9
+ tabIndex: string | number
10
+ ) => {
11
+ setActiveTabKey(tabIndex);
12
+ };
13
+ return (
14
+ <Tabs
15
+ activeKey={activeTabKey}
16
+ onSelect={handleTabClick}
17
+ isNav={true}
18
+ aria-label="Site navigation with nav styling example"
19
+ >
20
+ <Tab eventKey={0} title={<TabTitleText>Users</TabTitleText>} href="#users" aria-label="Nav element content users">
21
+ Users
22
+ </Tab>
23
+ <Tab eventKey={1} title={<TabTitleText>Containers</TabTitleText>} href="#containers">
24
+ Containers
25
+ </Tab>
26
+ <Tab eventKey={2} title={<TabTitleText>Database</TabTitleText>} href="#database">
27
+ Database
28
+ </Tab>
29
+ <Tab eventKey={3} title={<TabTitleText>Disabled</TabTitleText>} isDisabled href="#disabled">
30
+ Disabled
31
+ </Tab>
32
+ <Tab eventKey={4} title={<TabTitleText>ARIA Disabled</TabTitleText>} isAriaDisabled href="#aria-disabled">
33
+ ARIA Disabled
34
+ </Tab>
35
+ <Tab eventKey={6} title={<TabTitleText>Network</TabTitleText>} href="#network">
36
+ Network
37
+ </Tab>
38
+ </Tabs>
39
+ );
40
+ };