@patternfly/react-docs 7.6.0-prerelease.8 → 7.6.0-prerelease.9

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 (163) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/LICENSE +21 -0
  3. package/package.json +12 -11
  4. package/patternfly-docs/generated/components/about-modal/react.js +0 -149
  5. package/patternfly-docs/generated/components/accordion/react.js +0 -262
  6. package/patternfly-docs/generated/components/action-list/react.js +0 -144
  7. package/patternfly-docs/generated/components/alert/react-demos.js +0 -56
  8. package/patternfly-docs/generated/components/alert/react.js +0 -1433
  9. package/patternfly-docs/generated/components/avatar/react.js +0 -166
  10. package/patternfly-docs/generated/components/back-to-top/react-demos.js +0 -60
  11. package/patternfly-docs/generated/components/back-to-top/react.js +0 -77
  12. package/patternfly-docs/generated/components/backdrop/react.js +0 -64
  13. package/patternfly-docs/generated/components/background-image/react.js +0 -62
  14. package/patternfly-docs/generated/components/badge/react.js +0 -97
  15. package/patternfly-docs/generated/components/banner/react-demos.js +0 -57
  16. package/patternfly-docs/generated/components/banner/react.js +0 -148
  17. package/patternfly-docs/generated/components/brand/react.js +0 -142
  18. package/patternfly-docs/generated/components/breadcrumb/react.js +0 -206
  19. package/patternfly-docs/generated/components/button/react-demos.js +0 -57
  20. package/patternfly-docs/generated/components/button/react.js +0 -826
  21. package/patternfly-docs/generated/components/card/react-demos.js +0 -201
  22. package/patternfly-docs/generated/components/card/react.js +0 -1015
  23. package/patternfly-docs/generated/components/charts/area-chart/-Victory.js +0 -1350
  24. package/patternfly-docs/generated/components/charts/bar-chart/-Victory.js +0 -1334
  25. package/patternfly-docs/generated/components/charts/box-plot-chart/-Victory.js +0 -1282
  26. package/patternfly-docs/generated/components/charts/bullet-chart/-Victory.js +0 -848
  27. package/patternfly-docs/generated/components/charts/colors-for-charts/-Victory.js +0 -192
  28. package/patternfly-docs/generated/components/charts/donut-chart/-Victory.js +0 -426
  29. package/patternfly-docs/generated/components/charts/donut-utilization-chart/-Victory.js +0 -804
  30. package/patternfly-docs/generated/components/charts/legends/-Victory.js +0 -3230
  31. package/patternfly-docs/generated/components/charts/line-chart/-Victory.js +0 -1178
  32. package/patternfly-docs/generated/components/charts/line-chart/ECharts.js +0 -525
  33. package/patternfly-docs/generated/components/charts/patterns/-Victory.js +0 -3382
  34. package/patternfly-docs/generated/components/charts/pie-chart/-Victory.js +0 -377
  35. package/patternfly-docs/generated/components/charts/resize-observer/-Victory.js +0 -2475
  36. package/patternfly-docs/generated/components/charts/sankey-chart/ECharts.js +0 -538
  37. package/patternfly-docs/generated/components/charts/scatter-chart/-Victory.js +0 -1551
  38. package/patternfly-docs/generated/components/charts/skeletons/-Victory.js +0 -4115
  39. package/patternfly-docs/generated/components/charts/sparkline-chart/-Victory.js +0 -955
  40. package/patternfly-docs/generated/components/charts/stack-chart/-Victory.js +0 -1173
  41. package/patternfly-docs/generated/components/charts/threshold-chart/-Victory.js +0 -1166
  42. package/patternfly-docs/generated/components/charts/tooltips/-Victory.js +0 -413
  43. package/patternfly-docs/generated/components/chip/react-deprecated.js +0 -323
  44. package/patternfly-docs/generated/components/clipboard-copy/react.js +0 -373
  45. package/patternfly-docs/generated/components/code-block/react.js +0 -148
  46. package/patternfly-docs/generated/components/code-editor/react.js +0 -659
  47. package/patternfly-docs/generated/components/compass/react-demos.js +0 -147
  48. package/patternfly-docs/generated/components/compass/react.js +0 -440
  49. package/patternfly-docs/generated/components/content/react.js +0 -248
  50. package/patternfly-docs/generated/components/data-list/react-demos.js +0 -90
  51. package/patternfly-docs/generated/components/data-list/react.js +0 -709
  52. package/patternfly-docs/generated/components/date-and-time/calendar-month/react.js +0 -283
  53. package/patternfly-docs/generated/components/date-and-time/date-and-time-picker/react-demos.js +0 -64
  54. package/patternfly-docs/generated/components/date-and-time/date-picker/react-demos.js +0 -83
  55. package/patternfly-docs/generated/components/date-and-time/date-picker/react.js +0 -395
  56. package/patternfly-docs/generated/components/date-and-time/time-picker/react.js +0 -241
  57. package/patternfly-docs/generated/components/description-list/react-demos.js +0 -58
  58. package/patternfly-docs/generated/components/description-list/react.js +0 -743
  59. package/patternfly-docs/generated/components/divider/react.js +0 -126
  60. package/patternfly-docs/generated/components/drag-and-drop/react-demos.js +0 -351
  61. package/patternfly-docs/generated/components/drag-and-drop/react-deprecated.js +0 -184
  62. package/patternfly-docs/generated/components/drag-and-drop/react.js +0 -137
  63. package/patternfly-docs/generated/components/drawer/react.js +0 -598
  64. package/patternfly-docs/generated/components/dual-list-selector/react-deprecated.js +0 -772
  65. package/patternfly-docs/generated/components/dual-list-selector/react.js +0 -594
  66. package/patternfly-docs/generated/components/empty-state/react.js +0 -199
  67. package/patternfly-docs/generated/components/expandable-section/react-demos.js +0 -65
  68. package/patternfly-docs/generated/components/expandable-section/react.js +0 -408
  69. package/patternfly-docs/generated/components/file-upload/multiple-file-upload/react-demos.js +0 -52
  70. package/patternfly-docs/generated/components/file-upload/multiple-file-upload/react.js +0 -398
  71. package/patternfly-docs/generated/components/file-upload/simple-file-upload/react.js +0 -749
  72. package/patternfly-docs/generated/components/forms/checkbox/react.js +0 -222
  73. package/patternfly-docs/generated/components/forms/form/react.js +0 -1106
  74. package/patternfly-docs/generated/components/forms/form-select/react.js +0 -208
  75. package/patternfly-docs/generated/components/forms/radio/react.js +0 -212
  76. package/patternfly-docs/generated/components/forms/text-area/react.js +0 -160
  77. package/patternfly-docs/generated/components/forms/text-input/react.js +0 -216
  78. package/patternfly-docs/generated/components/helper-text/react-demos.js +0 -180
  79. package/patternfly-docs/generated/components/helper-text/react.js +0 -164
  80. package/patternfly-docs/generated/components/hero/react.js +0 -88
  81. package/patternfly-docs/generated/components/hint/react.js +0 -169
  82. package/patternfly-docs/generated/components/icon/react.js +0 -215
  83. package/patternfly-docs/generated/components/input-group/react.js +0 -182
  84. package/patternfly-docs/generated/components/jump-links/react-demos.js +0 -154
  85. package/patternfly-docs/generated/components/jump-links/react.js +0 -212
  86. package/patternfly-docs/generated/components/label/react-demos.js +0 -57
  87. package/patternfly-docs/generated/components/label/react.js +0 -417
  88. package/patternfly-docs/generated/components/list/react.js +0 -175
  89. package/patternfly-docs/generated/components/login-page/react.js +0 -587
  90. package/patternfly-docs/generated/components/masthead/react-demos.js +0 -79
  91. package/patternfly-docs/generated/components/masthead/react.js +0 -291
  92. package/patternfly-docs/generated/components/menus/application-launcher/react-demos.js +0 -769
  93. package/patternfly-docs/generated/components/menus/context-selector/react-demos.js +0 -665
  94. package/patternfly-docs/generated/components/menus/custom-menus/react-demos.js +0 -187
  95. package/patternfly-docs/generated/components/menus/dropdown/react-templates.js +0 -163
  96. package/patternfly-docs/generated/components/menus/dropdown/react.js +0 -998
  97. package/patternfly-docs/generated/components/menus/menu/react.js +0 -1540
  98. package/patternfly-docs/generated/components/menus/menu-toggle/react.js +0 -747
  99. package/patternfly-docs/generated/components/menus/options-menu/react-demos.js +0 -508
  100. package/patternfly-docs/generated/components/menus/select/react-templates.js +0 -257
  101. package/patternfly-docs/generated/components/menus/select/react.js +0 -998
  102. package/patternfly-docs/generated/components/modal/react-deprecated.js +0 -554
  103. package/patternfly-docs/generated/components/modal/react.js +0 -597
  104. package/patternfly-docs/generated/components/navigation/react-demos.js +0 -356
  105. package/patternfly-docs/generated/components/navigation/react.js +0 -409
  106. package/patternfly-docs/generated/components/notification-badge/react.js +0 -196
  107. package/patternfly-docs/generated/components/notification-drawer/react-demos.js +0 -107
  108. package/patternfly-docs/generated/components/notification-drawer/react.js +0 -394
  109. package/patternfly-docs/generated/components/number-input/react.js +0 -210
  110. package/patternfly-docs/generated/components/overflow-menu/react.js +0 -274
  111. package/patternfly-docs/generated/components/page/react-demos.js +0 -149
  112. package/patternfly-docs/generated/components/page/react.js +0 -1352
  113. package/patternfly-docs/generated/components/pagination/react.js +0 -492
  114. package/patternfly-docs/generated/components/panel/react.js +0 -236
  115. package/patternfly-docs/generated/components/popover/react.js +0 -390
  116. package/patternfly-docs/generated/components/progress/react-demos.js +0 -59
  117. package/patternfly-docs/generated/components/progress/react.js +0 -283
  118. package/patternfly-docs/generated/components/progress-stepper/react-demos.js +0 -45
  119. package/patternfly-docs/generated/components/progress-stepper/react.js +0 -219
  120. package/patternfly-docs/generated/components/search-input/react-demos.js +0 -113
  121. package/patternfly-docs/generated/components/search-input/react.js +0 -263
  122. package/patternfly-docs/generated/components/sidebar/react.js +0 -236
  123. package/patternfly-docs/generated/components/simple-list/react.js +0 -200
  124. package/patternfly-docs/generated/components/skeleton/react-demos.js +0 -44
  125. package/patternfly-docs/generated/components/skeleton/react.js +0 -122
  126. package/patternfly-docs/generated/components/skip-to-content/react.js +0 -73
  127. package/patternfly-docs/generated/components/slider/react.js +0 -309
  128. package/patternfly-docs/generated/components/spinner/react.js +0 -111
  129. package/patternfly-docs/generated/components/switch/react.js +0 -163
  130. package/patternfly-docs/generated/components/table/react-demos.js +0 -355
  131. package/patternfly-docs/generated/components/table/react-deprecated.js +0 -1350
  132. package/patternfly-docs/generated/components/table/react.js +0 -3241
  133. package/patternfly-docs/generated/components/tabs/react-demos.js +0 -108
  134. package/patternfly-docs/generated/components/tabs/react.js +0 -1359
  135. package/patternfly-docs/generated/components/text-input-group/react-demos.js +0 -152
  136. package/patternfly-docs/generated/components/text-input-group/react.js +0 -278
  137. package/patternfly-docs/generated/components/tile/react-deprecated.js +0 -242
  138. package/patternfly-docs/generated/components/timestamp/react.js +0 -283
  139. package/patternfly-docs/generated/components/title/react.js +0 -94
  140. package/patternfly-docs/generated/components/toggle-group/react.js +0 -299
  141. package/patternfly-docs/generated/components/toolbar/react-demos.js +0 -66
  142. package/patternfly-docs/generated/components/toolbar/react.js +0 -932
  143. package/patternfly-docs/generated/components/tooltip/react.js +0 -241
  144. package/patternfly-docs/generated/components/tree-view/react.js +0 -429
  145. package/patternfly-docs/generated/components/truncate/react.js +0 -211
  146. package/patternfly-docs/generated/components/wizard/react-demos.js +0 -87
  147. package/patternfly-docs/generated/components/wizard/react-deprecated.js +0 -788
  148. package/patternfly-docs/generated/components/wizard/react.js +0 -986
  149. package/patternfly-docs/generated/developer-guides/open-ui-automation/react.js +0 -285
  150. package/patternfly-docs/generated/foundations-and-styles/layouts/bullseye/react.js +0 -70
  151. package/patternfly-docs/generated/foundations-and-styles/layouts/flex/react.js +0 -506
  152. package/patternfly-docs/generated/foundations-and-styles/layouts/gallery/react.js +0 -94
  153. package/patternfly-docs/generated/foundations-and-styles/layouts/grid/react.js +0 -272
  154. package/patternfly-docs/generated/foundations-and-styles/layouts/level/react.js +0 -87
  155. package/patternfly-docs/generated/foundations-and-styles/layouts/split/react.js +0 -124
  156. package/patternfly-docs/generated/foundations-and-styles/layouts/stack/react.js +0 -112
  157. package/patternfly-docs/generated/index.js +0 -1769
  158. package/patternfly-docs/generated/patterns/card-view/react-demos.js +0 -78
  159. package/patternfly-docs/generated/patterns/filters/react-demos.js +0 -141
  160. package/patternfly-docs/generated/patterns/password-generator/react-demos.js +0 -51
  161. package/patternfly-docs/generated/patterns/password-strength/react-demos.js +0 -61
  162. package/patternfly-docs/generated/patterns/primary-detail/react-demos.js +0 -124
  163. package/patternfly-docs/generated/patterns/right-to-left/react-demos.js +0 -81
@@ -1,108 +0,0 @@
1
- import React from 'react';
2
- import { AutoLinkHeader, Example, Link as PatternflyThemeLink } from '@patternfly/documentation-framework/components';
3
- import { Fragment, useCallback, useRef, useState } from 'react';
4
- import RhUiCheckCircleFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-check-circle-fill-icon';
5
- import RhUiInformationFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-information-fill-icon';
6
- import RhUiCodeIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-code-icon';
7
- import RhUiBranchFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-branch-fill-icon';
8
- import CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon';
9
- import FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';
10
- import RhMicronsSortDownLargeToSmallIcon from '@patternfly/react-icons/dist/esm/icons/rh-microns-sort-down-large-to-small-icon';
11
- import RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';
12
- import display from '@patternfly/react-styles/css/utilities/Display/display';
13
- import sizing from '@patternfly/react-styles/css/utilities/Sizing/sizing';
14
- import spacing from '@patternfly/react-styles/css/utilities/Spacing/spacing';
15
- import { DashboardWrapper } from '@patternfly/react-core/dist/js/demos/DashboardWrapper';
16
- import srcImportgraytabs from './react-demos/gray-tabs.png';
17
- import srcImportmodaltabs from './react-demos/modal-tabs.png';
18
- import srcImportnestedtabs from './react-demos/nested-tabs.png';
19
- import srcImportnestedunindentedtabs from './react-demos/nested-unindented-tabs.png';
20
- import srcImportopentabswithsecondarytabs from './react-demos/open-tabs-with-secondary-tabs.png';
21
- import srcImportopentabs from './react-demos/open-tabs.png';
22
- import srcImporttablesandtabsautowidthtabs from './react-demos/tables-and-tabs-auto-width-tabs.png';
23
- import srcImporttablesandtabs from './react-demos/tables-and-tabs.png';
24
- const pageData = {
25
- "id": "Tabs",
26
- "section": "components",
27
- "subsection": "",
28
- "deprecated": false,
29
- "template": false,
30
- "beta": false,
31
- "demo": false,
32
- "newImplementationLink": false,
33
- "source": "react-demos",
34
- "tabName": null,
35
- "slug": "/components/tabs/react-demos",
36
- "sourceLink": "https://github.com/patternfly/patternfly-react/blob/main/packages/react-core/src/demos/Tabs.md",
37
- "relPath": "packages/react-core/src/demos/Tabs.md",
38
- "fullscreenExamples": [
39
- "Open tabs",
40
- "Open tabs with secondary tabs",
41
- "Nested tabs",
42
- "Nested, unindented tabs",
43
- "Tables and tabs",
44
- "Modal tabs"
45
- ]
46
- };
47
- pageData.liveContext = {
48
- Fragment,
49
- useCallback,
50
- useRef,
51
- useState,
52
- RhUiCheckCircleFillIcon,
53
- RhUiInformationFillIcon,
54
- RhUiCodeIcon,
55
- RhUiBranchFillIcon,
56
- CubeIcon,
57
- FilterIcon,
58
- RhMicronsSortDownLargeToSmallIcon,
59
- RhUiEllipsisVerticalFillIcon,
60
- display,
61
- sizing,
62
- spacing,
63
- DashboardWrapper
64
- };
65
- pageData.examples = {
66
- 'Open tabs': props =>
67
- <Example {...pageData} {...props} thumbnail={srcImportopentabs} {...{"code":"import { useState } from 'react';\nimport {\n PageSection,\n PageBreadcrumb,\n Breadcrumb,\n BreadcrumbItem,\n Tabs,\n Tab,\n TabContent,\n TabContentBody,\n TabTitleText,\n Title,\n DescriptionList,\n DescriptionListGroup,\n DescriptionListTerm,\n DescriptionListDescription,\n Label,\n LabelColor,\n LabelGroup,\n Flex,\n FlexItem\n} from '@patternfly/react-core';\nimport RhUiCheckCircleFillIcon from '@patternfly/react-icons/dist/js/icons/rh-ui-check-circle-fill-icon';\nimport RhUiInformationFillIcon from '@patternfly/react-icons/dist/js/icons/rh-ui-information-fill-icon';\nimport spacing from '@patternfly/react-styles/css/utilities/Spacing/spacing';\nimport { DashboardWrapper } from '@patternfly/react-core/dist/js/demos/DashboardWrapper';\n\nexport const TabsOpen: React.FunctionComponent = () => {\n const [activeTabKey, setActiveTabKey] = useState(0);\n\n // Toggle currently active tab\n const handleTabClick = (_event: React.MouseEvent<HTMLElement>, tabIndex: number | string) => {\n setActiveTabKey(tabIndex);\n };\n\n const tabsBreadcrumb = (\n <PageBreadcrumb isWidthLimited>\n <Breadcrumb>\n <BreadcrumbItem to=\"#\">Overview</BreadcrumbItem>\n <BreadcrumbItem to=\"#\">Pods</BreadcrumbItem>\n <BreadcrumbItem to=\"#\" isActive>\n Pod details{' '}\n </BreadcrumbItem>\n </Breadcrumb>\n </PageBreadcrumb>\n );\n\n const tabContent = (\n <Flex direction={{ default: 'column' }}>\n <FlexItem spacer={{ default: 'spacerLg' }}>\n <Title headingLevel=\"h2\" size=\"lg\" className={spacing.mtSm} id=\"open-tabs-example-tabs-list-details-title\">\n Pod details\n </Title>\n </FlexItem>\n <FlexItem>\n <DescriptionList columnModifier={{ lg: '2Col' }} aria-labelledby=\"open-tabs-example-tabs-list-details-title\">\n <DescriptionListGroup>\n <DescriptionListTerm>Name</DescriptionListTerm>\n <DescriptionListDescription>3scale-control-fccb6ddb9-phyqv9</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Status</DescriptionListTerm>\n <DescriptionListDescription>\n <Flex spacer={{ default: 'spacerLg' }}>\n <FlexItem>\n <RhUiCheckCircleFillIcon />\n </FlexItem>\n <FlexItem>Running</FlexItem>\n </Flex>\n </DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Namespace</DescriptionListTerm>\n <DescriptionListDescription>\n <Flex spaceItems={{ default: 'spaceItemsSm' }}>\n <FlexItem>\n <Label color={LabelColor.teal}>NS</Label>\n </FlexItem>\n <FlexItem>\n <a href=\"#\">knative-serving-ingress</a>\n </FlexItem>\n </Flex>\n </DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Restart policy</DescriptionListTerm>\n <DescriptionListDescription>Always restart</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Labels</DescriptionListTerm>\n <DescriptionListDescription>\n <LabelGroup>\n <Label>app=3scale-gateway</Label>\n <Label>pod-template-has=6747686899</Label>\n </LabelGroup>\n </DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Active deadline seconds</DescriptionListTerm>\n <DescriptionListDescription>Not configured</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Tolerations</DescriptionListTerm>\n <DescriptionListDescription>stuff</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Pod IP</DescriptionListTerm>\n <DescriptionListDescription>10.345.2.197</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Annotations</DescriptionListTerm>\n <DescriptionListDescription>stuff</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Node</DescriptionListTerm>\n <DescriptionListDescription>\n <Flex spaceItems={{ default: 'spaceItemsSm' }}>\n <FlexItem>\n <Label color={LabelColor.purple}>N</Label>\n </FlexItem>\n <FlexItem>ip-10-0-233-118.us-east-2.computer.external</FlexItem>\n </Flex>\n </DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Created at</DescriptionListTerm>\n <DescriptionListDescription>\n <time>Oct 15, 1:51 pm</time>\n </DescriptionListDescription>\n </DescriptionListGroup>\n </DescriptionList>\n </FlexItem>\n </Flex>\n );\n\n return (\n <DashboardWrapper hasNoBreadcrumb>\n {tabsBreadcrumb}\n <PageSection isWidthLimited aria-label=\"Pod header\">\n <Flex\n spaceItems={{ default: 'spaceItemsMd' }}\n alignItems={{ default: 'alignItemsFlexStart' }}\n flexWrap={{ default: 'noWrap' }}\n >\n <FlexItem>\n <Label color={LabelColor.blue}>N</Label>\n </FlexItem>\n <FlexItem>\n <Title headingLevel=\"h1\" size=\"2xl\">\n 3scale-control-fccb6ddb9-phyqv9\n </Title>\n </FlexItem>\n <FlexItem flex={{ default: 'flexNone' }}>\n <Label icon={<RhUiInformationFillIcon />}>Running</Label>\n </FlexItem>\n </Flex>\n </PageSection>\n <PageSection type=\"tabs\" isWidthLimited aria-label=\"Pod navigation tabs\">\n <Tabs activeKey={activeTabKey} onSelect={handleTabClick} usePageInsets id=\"open-tabs-example-tabs-list\">\n <Tab eventKey={0} title={<TabTitleText>Details</TabTitleText>} tabContentId={`tabContent${0}`} />\n <Tab eventKey={1} title={<TabTitleText>YAML</TabTitleText>} tabContentId={`tabContent${1}`} />\n <Tab eventKey={2} title={<TabTitleText>Environment</TabTitleText>} tabContentId={`tabContent${2}`} />\n <Tab eventKey={3} title={<TabTitleText>Events</TabTitleText>} tabContentId={`tabContent${3}`} />\n <Tab eventKey={4} title={<TabTitleText>Terminal</TabTitleText>} tabContentId={`tabContent${4}`} />\n </Tabs>\n </PageSection>\n <PageSection isWidthLimited aria-label=\"Pod content\">\n <TabContent key={0} eventKey={0} id={`tabContent${0}`} activeKey={activeTabKey} hidden={0 !== activeTabKey}>\n <TabContentBody>{tabContent}</TabContentBody>\n </TabContent>\n <TabContent key={1} eventKey={1} id={`tabContent${1}`} activeKey={activeTabKey} hidden={1 !== activeTabKey}>\n <TabContentBody>YAML panel</TabContentBody>\n </TabContent>\n <TabContent key={2} eventKey={2} id={`tabContent${2}`} activeKey={activeTabKey} hidden={2 !== activeTabKey}>\n <TabContentBody>Environment panel</TabContentBody>\n </TabContent>\n <TabContent key={3} eventKey={3} id={`tabContent${3}`} activeKey={activeTabKey} hidden={3 !== activeTabKey}>\n <TabContentBody>Events panel</TabContentBody>\n </TabContent>\n <TabContent key={4} eventKey={4} id={`tabContent${4}`} activeKey={activeTabKey} hidden={4 !== activeTabKey}>\n <TabContentBody>Terminal panel</TabContentBody>\n </TabContent>\n </PageSection>\n </DashboardWrapper>\n );\n};\n","title":"Open tabs","lang":"ts","isFullscreen":true,"className":""}}>
68
-
69
- </Example>,
70
- 'Open tabs with secondary tabs': props =>
71
- <Example {...pageData} {...props} thumbnail={srcImportopentabswithsecondarytabs} {...{"code":"import { useState } from 'react';\nimport {\n PageSection,\n PageBreadcrumb,\n Breadcrumb,\n BreadcrumbItem,\n Tabs,\n Tab,\n TabContent,\n TabContentBody,\n TabTitleText,\n Title,\n DescriptionList,\n DescriptionListGroup,\n DescriptionListTerm,\n DescriptionListDescription,\n Label,\n LabelColor,\n LabelGroup,\n Flex,\n FlexItem\n} from '@patternfly/react-core';\nimport RhUiCheckCircleFillIcon from '@patternfly/react-icons/dist/js/icons/rh-ui-check-circle-fill-icon';\nimport RhUiInformationFillIcon from '@patternfly/react-icons/dist/js/icons/rh-ui-information-fill-icon';\nimport spacing from '@patternfly/react-styles/css/utilities/Spacing/spacing';\nimport { DashboardWrapper } from '@patternfly/react-core/dist/js/demos/DashboardWrapper';\n\nexport const TabsOpenWithSecondaryTabs: React.FunctionComponent = () => {\n const [activeTabKey, setActiveTabKey] = useState<number>(0);\n const [activeTabKeySecondary, setActiveTabKeySecondary] = useState<number>(10);\n\n // Toggle currently active tab\n const handleTabClick = (_event: React.MouseEvent<HTMLElement>, tabIndex: number) => {\n setActiveTabKey(tabIndex);\n };\n\n // Toggle currently active secondary tab\n const handleTabClickSecondary = (_event: React.MouseEvent<HTMLElement>, tabIndex: number) => {\n setActiveTabKeySecondary(tabIndex);\n };\n\n const tabsBreadcrumb = (\n <PageBreadcrumb isWidthLimited>\n <Breadcrumb>\n <BreadcrumbItem to=\"#\">Overview</BreadcrumbItem>\n <BreadcrumbItem to=\"#\">Pods</BreadcrumbItem>\n <BreadcrumbItem to=\"#\" isActive>\n Pod details{' '}\n </BreadcrumbItem>\n </Breadcrumb>\n </PageBreadcrumb>\n );\n\n const tabContent = (\n <Flex direction={{ default: 'column' }}>\n <FlexItem spacer={{ default: 'spacerLg' }}>\n <Title headingLevel=\"h2\" size=\"lg\" className={spacing.mtSm} id=\"open-tabs-example-tabs-list-details-title\">\n Pod details\n </Title>\n </FlexItem>\n <FlexItem>\n <DescriptionList columnModifier={{ lg: '2Col' }} aria-labelledby=\"open-tabs-example-tabs-list-details-title\">\n <DescriptionListGroup>\n <DescriptionListTerm>Name</DescriptionListTerm>\n <DescriptionListDescription>3scale-control-fccb6ddb9-phyqv9</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Status</DescriptionListTerm>\n <DescriptionListDescription>\n <Flex spacer={{ default: 'spacerLg' }}>\n <FlexItem>\n <RhUiCheckCircleFillIcon />\n </FlexItem>\n <FlexItem>Running</FlexItem>\n </Flex>\n </DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Namespace</DescriptionListTerm>\n <DescriptionListDescription>\n <Flex spaceItems={{ default: 'spaceItemsSm' }}>\n <FlexItem>\n <Label color={LabelColor.teal}>NS</Label>\n </FlexItem>\n <FlexItem>\n <a href=\"#\">knative-serving-ingress</a>\n </FlexItem>\n </Flex>\n </DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Restart policy</DescriptionListTerm>\n <DescriptionListDescription>Always restart</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Labels</DescriptionListTerm>\n <DescriptionListDescription>\n <LabelGroup>\n <Label>app=3scale-gateway</Label>\n <Label>pod-template-has=6747686899</Label>\n </LabelGroup>\n </DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Active deadline seconds</DescriptionListTerm>\n <DescriptionListDescription>Not configured</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Tolerations</DescriptionListTerm>\n <DescriptionListDescription>stuff</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Pod IP</DescriptionListTerm>\n <DescriptionListDescription>10.345.2.197</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Annotations</DescriptionListTerm>\n <DescriptionListDescription>stuff</DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Node</DescriptionListTerm>\n <DescriptionListDescription>\n <Flex spaceItems={{ default: 'spaceItemsSm' }}>\n <FlexItem>\n <Label color={LabelColor.purple}>N</Label>\n </FlexItem>\n <FlexItem>ip-10-0-233-118.us-east-2.computer.external</FlexItem>\n </Flex>\n </DescriptionListDescription>\n </DescriptionListGroup>\n <DescriptionListGroup>\n <DescriptionListTerm>Created at</DescriptionListTerm>\n <DescriptionListDescription>\n <time>Oct 15, 1:51 pm</time>\n </DescriptionListDescription>\n </DescriptionListGroup>\n </DescriptionList>\n </FlexItem>\n </Flex>\n );\n\n return (\n <DashboardWrapper hasNoBreadcrumb>\n {tabsBreadcrumb}\n <PageSection isWidthLimited aria-label=\"Pod header\">\n <Flex\n spaceItems={{ default: 'spaceItemsMd' }}\n alignItems={{ default: 'alignItemsFlexStart' }}\n flexWrap={{ default: 'noWrap' }}\n >\n <FlexItem>\n <Label color={LabelColor.blue}>N</Label>\n </FlexItem>\n <FlexItem>\n <Title headingLevel=\"h1\" size=\"2xl\">\n 3scale-control-fccb6ddb9-phyqv9\n </Title>\n </FlexItem>\n <FlexItem flex={{ default: 'flexNone' }}>\n <Label icon={<RhUiInformationFillIcon />}>Running</Label>\n </FlexItem>\n </Flex>\n </PageSection>\n <PageSection type=\"tabs\" isWidthLimited aria-label=\"Pod navigation tabs\">\n <Tabs activeKey={activeTabKey} onSelect={handleTabClick} usePageInsets id=\"open-tabs-example-tabs-list\">\n <Tab eventKey={0} title={<TabTitleText>Details</TabTitleText>} tabContentId={`tabContent${0}`} />\n <Tab eventKey={1} title={<TabTitleText>YAML</TabTitleText>} tabContentId={`tabContent${1}`} />\n <Tab eventKey={2} title={<TabTitleText>Environment</TabTitleText>} tabContentId={`tabContent${2}`} />\n <Tab eventKey={3} title={<TabTitleText>Events</TabTitleText>} tabContentId={`tabContent${3}`} />\n <Tab eventKey={4} title={<TabTitleText>Terminal</TabTitleText>} tabContentId={`tabContent${4}`} />\n </Tabs>\n </PageSection>\n <PageSection isWidthLimited padding={{ default: 'noPadding' }} aria-label=\"Pod content\">\n <TabContent key={0} eventKey={0} id={`tabContent${0}`} activeKey={activeTabKey} hidden={0 !== activeTabKey}>\n <TabContentBody>\n <Tabs\n isSecondary\n activeKey={activeTabKeySecondary}\n onSelect={handleTabClickSecondary}\n usePageInsets\n id=\"open-with-secondary-tabs-example-tabs-list-secondary\"\n >\n <Tab\n eventKey={10}\n title={<TabTitleText>Pod information</TabTitleText>}\n tabContentId={`tabContent${10}`}\n />\n <Tab\n eventKey={11}\n title={<TabTitleText>Editable aspects</TabTitleText>}\n tabContentId={`tabContent${11}`}\n />\n </Tabs>\n <TabContent\n key={10}\n eventKey={10}\n id={`tabContent${10}`}\n activeKey={activeTabKeySecondary}\n hidden={10 !== activeTabKeySecondary}\n >\n <TabContentBody hasPadding>{tabContent}</TabContentBody>\n </TabContent>\n <TabContent\n key={11}\n eventKey={11}\n id={`tabContent${11}`}\n activeKey={activeTabKeySecondary}\n hidden={11 !== activeTabKeySecondary}\n >\n <TabContentBody>Editable aspects</TabContentBody>\n </TabContent>\n </TabContentBody>\n </TabContent>\n <TabContent key={1} eventKey={1} id={`tabContent${1}`} activeKey={activeTabKey} hidden={1 !== activeTabKey}>\n <TabContentBody>YAML panel</TabContentBody>\n </TabContent>\n <TabContent key={2} eventKey={2} id={`tabContent${2}`} activeKey={activeTabKey} hidden={2 !== activeTabKey}>\n <TabContentBody>Environment panel</TabContentBody>\n </TabContent>\n <TabContent key={3} eventKey={3} id={`tabContent${3}`} activeKey={activeTabKey} hidden={3 !== activeTabKey}>\n <TabContentBody>Events panel</TabContentBody>\n </TabContent>\n <TabContent key={4} eventKey={4} id={`tabContent${4}`} activeKey={activeTabKey} hidden={4 !== activeTabKey}>\n <TabContentBody>Terminal panel</TabContentBody>\n </TabContent>\n </PageSection>\n </DashboardWrapper>\n );\n};\n","title":"Open tabs with secondary tabs","lang":"ts","isFullscreen":true,"className":""}}>
72
-
73
- </Example>,
74
- 'Nested tabs': props =>
75
- <Example {...pageData} {...props} thumbnail={srcImportnestedtabs} {...{"code":"import { useState } from 'react';\nimport {\n Card,\n CardHeader,\n CardBody,\n Grid,\n GridItem,\n PageSection,\n Tabs,\n Tab,\n TabContent,\n TabContentBody,\n TabTitleText,\n Title,\n TitleSizes,\n Flex,\n FlexItem\n} from '@patternfly/react-core';\nimport { DashboardWrapper } from '@patternfly/react-core/dist/js/demos/DashboardWrapper';\nimport sizing from '@patternfly/react-styles/css/utilities/Sizing/sizing';\n\nexport const NestedTabs: React.FunctionComponent = () => {\n const [activeTabKey, setActiveTabKey] = useState(0);\n const [activeNestedTabKey, setActiveNestedTabKey] = useState(10);\n\n // Toggle currently active tab\n const handleTabClick = (tabIndex: number) => setActiveTabKey(tabIndex);\n\n // Toggle currently active nested tab\n const handleNestedTabClick = (tabIndex: number) => setActiveNestedTabKey(tabIndex);\n\n const tabContent = (\n <Grid hasGutter>\n <GridItem xl={8} md={6}>\n <Card>\n <CardHeader>\n <Title headingLevel=\"h2\" size={TitleSizes.lg}>\n Status\n </Title>\n </CardHeader>\n <CardBody>\n <Flex direction={{ default: 'column' }}>\n <FlexItem>\n <Tabs\n activeKey={activeNestedTabKey}\n onSelect={(_event, tabIndex) => handleNestedTabClick(Number(tabIndex))}\n id=\"nested-tabs-example-nested-tabs-list\"\n >\n <Tab eventKey={10} title={<TabTitleText>Cluster</TabTitleText>} tabContentId={`tabContent${10}`} />\n <Tab\n eventKey={11}\n title={<TabTitleText>Control plane</TabTitleText>}\n tabContentId={`tabContent${11}`}\n />\n <Tab eventKey={12} title={<TabTitleText>Operators</TabTitleText>} tabContentId={`tabContent${12}`} />\n <Tab\n eventKey={13}\n title={<TabTitleText>Virtualization</TabTitleText>}\n tabContentId={`tabContent${13}`}\n />\n </Tabs>\n </FlexItem>\n <FlexItem>\n <TabContent\n key={10}\n eventKey={10}\n id={`tabContent${10}`}\n activeKey={activeNestedTabKey}\n hidden={10 !== activeNestedTabKey}\n >\n <TabContentBody>\n {\n 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Fusce in odio porttitor, feugiat risus in, feugiat arcu. Nullam euismod enim eget fringilla condimentum. Maecenas tincidunt et metus id aliquet. Integer et fermentum purus. Nulla tempor velit arcu, vitae semper purus iaculis at. Sed malesuada auctor luctus. Pellentesque et leo urna. Aliquam vitae felis congue lacus mattis fringilla. Nullam et ultricies erat, sed dignissim elit. Cras mattis pulvinar aliquam. In ac est nulla. Pellentesque fermentum nibh ac sapien porta, ut congue orci aliquam. Sed nisl est, tempor eu pharetra eget, ullamcorper ut augue. Vestibulum eleifend libero eu nulla cursus lacinia.'\n }\n </TabContentBody>\n </TabContent>\n <TabContent\n key={11}\n eventKey={11}\n id={`tabContent${11}`}\n activeKey={activeNestedTabKey}\n hidden={11 !== activeNestedTabKey}\n >\n <TabContentBody>Control plane panel</TabContentBody>\n </TabContent>\n <TabContent\n key={12}\n eventKey={12}\n id={`tabContent${12}`}\n activeKey={activeNestedTabKey}\n hidden={12 !== activeNestedTabKey}\n >\n <TabContentBody>Operators panel</TabContentBody>\n </TabContent>\n <TabContent\n key={13}\n eventKey={13}\n id={`tabContent${13}`}\n activeKey={activeNestedTabKey}\n hidden={13 !== activeNestedTabKey}\n >\n <TabContentBody>Virtualization panel</TabContentBody>\n </TabContent>\n </FlexItem>\n </Flex>\n </CardBody>\n </Card>\n </GridItem>\n <GridItem xl={4} md={6}>\n <Flex direction={{ default: 'column' }} className={sizing.h_100}>\n <FlexItem flex={{ default: 'flex_1' }}>\n <Card isFullHeight>\n <CardHeader>\n <Title headingLevel=\"h2\" size={TitleSizes.lg}>\n Title of card\n </Title>\n </CardHeader>\n </Card>\n </FlexItem>\n <FlexItem flex={{ default: 'flex_1' }}>\n <Card isFullHeight>\n <CardHeader>\n <Title headingLevel=\"h2\" size={TitleSizes.lg}>\n Title of card\n </Title>\n </CardHeader>\n </Card>\n </FlexItem>\n </Flex>\n </GridItem>\n </Grid>\n );\n\n return (\n <DashboardWrapper hasPageTemplateTitle>\n <PageSection type=\"tabs\" isWidthLimited aria-label=\"Cluster navigation tabs\">\n <Tabs\n activeKey={activeTabKey}\n onSelect={(_event, tabIndex) => handleTabClick(Number(tabIndex))}\n usePageInsets\n id=\"nested-tabs-example-tabs-list\"\n >\n <Tab eventKey={0} title={<TabTitleText>Cluster 1</TabTitleText>} tabContentId={`tabContent${0}`} />\n <Tab eventKey={1} title={<TabTitleText>Cluster 2</TabTitleText>} tabContentId={`tabContent${1}`} />\n </Tabs>\n </PageSection>\n <PageSection isWidthLimited aria-label=\"Cluster tab panel content\">\n <TabContent key={0} eventKey={0} id={`tabContent${0}`} activeKey={activeTabKey} hidden={0 !== activeTabKey}>\n <TabContentBody>{tabContent}</TabContentBody>\n </TabContent>\n <TabContent key={1} eventKey={1} id={`tabContent${1}`} activeKey={activeTabKey} hidden={1 !== activeTabKey}>\n <TabContentBody>Cluster 2 panel</TabContentBody>\n </TabContent>\n </PageSection>\n </DashboardWrapper>\n );\n};\n","title":"Nested tabs","lang":"ts","isFullscreen":true,"className":""}}>
76
-
77
- </Example>,
78
- 'Nested, unindented tabs': props =>
79
- <Example {...pageData} {...props} thumbnail={srcImportnestedunindentedtabs} {...{"code":"import { useState } from 'react';\nimport {\n Card,\n CardHeader,\n CardBody,\n Content,\n Grid,\n GridItem,\n PageSection,\n Tabs,\n Tab,\n TabContent,\n TabContentBody,\n TabTitleText,\n Title,\n TitleSizes,\n CardTitle\n} from '@patternfly/react-core';\nimport { DashboardWrapper } from '@patternfly/react-core/dist/js/demos/DashboardWrapper';\n\nexport const NestedUnindentedTabs: React.FunctionComponent = () => {\n const [activeTabKey, setActiveTabKey] = useState(1);\n const [activeNestedTabKey, setActiveNestedTabKey] = useState(10);\n\n // Toggle currently active tab\n const handleTabClick = (tabIndex: number) => setActiveTabKey(tabIndex);\n\n // Toggle currently active nested tab\n const handleNestedTabClick = (tabIndex: number) => setActiveNestedTabKey(tabIndex);\n\n const tabContent = (\n <Grid hasGutter>\n <GridItem>\n <CardHeader>\n <Title headingLevel=\"h1\" size={TitleSizes.lg}>\n Get started with Red Hat Enterprise Linux\n </Title>\n </CardHeader>\n </GridItem>\n <GridItem>\n <Tabs\n activeKey={activeNestedTabKey}\n onSelect={(_event, tabIndex) => handleNestedTabClick(Number(tabIndex))}\n id=\"nested-tabs-example-nested-tabs-list\"\n >\n <Tab eventKey={10} title={<TabTitleText>x86 architecture</TabTitleText>} tabContentId={`tabContent${10}`} />\n <Tab\n eventKey={11}\n title={<TabTitleText>Additional Architectures</TabTitleText>}\n tabContentId={`tabContent${11}`}\n />\n </Tabs>\n </GridItem>\n <GridItem>\n <TabContent\n key={10}\n eventKey={10}\n id={`tabContent${10}`}\n activeKey={activeNestedTabKey}\n hidden={10 !== activeNestedTabKey}\n >\n <TabContentBody>\n <Grid hasGutter>\n <GridItem>\n <Content component=\"p\">\n To perform a standard x86_64 installation using the GUI, you'll need to:\n </Content>\n </GridItem>\n <Grid md={6} xl2={3} hasGutter>\n <Card component=\"div\">\n <CardTitle>Check system requirements</CardTitle>\n <CardBody>\n Your physical or virtual machine should meet the <a href=\"#\">system requirement</a>.\n </CardBody>\n </Card>\n <Card component=\"div\">\n <CardTitle>Download an installation ISO image</CardTitle>\n <CardBody>\n {' '}\n <a href=\"#\">Download</a> the binary DVD ISO.\n </CardBody>\n </Card>\n <Card component=\"div\">\n <CardTitle>Create a bootable installation media</CardTitle>\n <CardBody>\n {' '}\n <a href=\"#\">Create</a> a bootable installation media, for example a USB flash drive.\n </CardBody>\n </Card>\n </Grid>\n </Grid>\n </TabContentBody>\n </TabContent>\n <TabContent\n key={11}\n eventKey={11}\n id={`tabContent${11}`}\n activeKey={activeNestedTabKey}\n hidden={11 !== activeNestedTabKey}\n >\n <TabContentBody>Additional architectures panel</TabContentBody>\n </TabContent>\n <TabContent\n key={12}\n eventKey={12}\n id={`tabContent${12}`}\n activeKey={activeNestedTabKey}\n hidden={12 !== activeNestedTabKey}\n >\n <TabContentBody>Operators panel</TabContentBody>\n </TabContent>\n <TabContent\n key={13}\n eventKey={13}\n id={`tabContent${13}`}\n activeKey={activeNestedTabKey}\n hidden={13 !== activeNestedTabKey}\n >\n <TabContentBody>Virtualization panel</TabContentBody>\n </TabContent>\n </GridItem>\n </Grid>\n );\n\n return (\n <DashboardWrapper hasPageTemplateTitle>\n <PageSection type=\"tabs\" isWidthLimited aria-label=\"Primary navigation tabs\">\n <Tabs\n activeKey={activeTabKey}\n onSelect={(_event, tabIndex) => handleTabClick(Number(tabIndex))}\n usePageInsets\n id=\"nested-tabs-example-tabs-list\"\n >\n <Tab eventKey={0} title={<TabTitleText>What's new</TabTitleText>} tabContentId={`tabContent${0}`} />\n <Tab eventKey={1} title={<TabTitleText>Get started</TabTitleText>} tabContentId={`tabContent${1}`} />\n <Tab eventKey={2} title={<TabTitleText>Knowledge</TabTitleText>} tabContentId={`tabContent${2}`} />\n <Tab eventKey={3} title={<TabTitleText>Support</TabTitleText>} tabContentId={`tabContent${3}`} />\n </Tabs>\n </PageSection>\n <PageSection isWidthLimited aria-label=\"Primary tab content\">\n <TabContent key={0} eventKey={0} id={`tabContent${0}`} activeKey={activeTabKey} hidden={0 !== activeTabKey}>\n <TabContentBody>What's new panel</TabContentBody>\n </TabContent>\n <TabContent key={1} eventKey={1} id={`tabContent${1}`} activeKey={activeTabKey} hidden={1 !== activeTabKey}>\n <TabContentBody>{tabContent}</TabContentBody>\n </TabContent>\n <TabContent key={2} eventKey={2} id={`tabContent${2}`} activeKey={activeTabKey} hidden={2 !== activeTabKey}>\n <TabContentBody>Knowledge panel</TabContentBody>\n </TabContent>\n <TabContent key={3} eventKey={3} id={`tabContent${3}`} activeKey={activeTabKey} hidden={3 !== activeTabKey}>\n <TabContentBody>Support Panel</TabContentBody>\n </TabContent>\n </PageSection>\n </DashboardWrapper>\n );\n};\n","title":"Nested, unindented tabs","lang":"ts","isFullscreen":true,"className":""}}>
80
-
81
- </Example>,
82
- 'Tables and tabs': props =>
83
- <Example {...pageData} {...props} thumbnail={srcImporttablesandtabs} {...{"code":"import { Fragment, useRef, useState } from 'react';\n/* eslint-disable no-console */\nimport {\n Button,\n Divider,\n Drawer,\n DrawerContent,\n DrawerContentBody,\n DrawerPanelContent,\n DrawerHead,\n DrawerActions,\n DrawerCloseButton,\n DrawerPanelBody,\n Dropdown,\n DropdownList,\n Flex,\n FlexItem,\n Label,\n LabelGroup,\n MenuToggle,\n OverflowMenu,\n OverflowMenuContent,\n OverflowMenuControl,\n OverflowMenuGroup,\n OverflowMenuItem,\n PageSection,\n Progress,\n ProgressSize,\n Tabs,\n Tab,\n TabContent,\n TabContentBody,\n TabTitleText,\n Title,\n Toolbar,\n ToolbarItem,\n ToolbarContent,\n ToolbarToggleGroup\n} from '@patternfly/react-core';\nimport {\n Table,\n Thead,\n Tbody,\n Tr,\n Th,\n Td,\n IAction,\n ActionsColumn,\n CustomActionsToggleProps\n} from '@patternfly/react-table';\nimport RhUiCodeIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-code-icon';\nimport RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';\nimport RhUiBranchFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-branch-fill-icon';\nimport CubeIcon from '@patternfly/react-icons/dist/esm/icons/cube-icon';\nimport FilterIcon from '@patternfly/react-icons/dist/esm/icons/filter-icon';\nimport RhMicronsSortDownLargeToSmallIcon from '@patternfly/react-icons/dist/esm/icons/rh-microns-sort-down-large-to-small-icon';\nimport { KeyTypes } from '../../../helpers';\nimport { DashboardWrapper } from '@patternfly/react-core/src/demos/DashboardWrapper';\n\ninterface Repository {\n name: string;\n branches: number | null;\n prs: number | null;\n workspaces: number;\n lastCommit: string;\n}\n\nexport const TablesAndTabs = () => {\n // secondary tab properties\n const [secondaryActiveTabKey, setSecondaryActiveTabKey] = useState<number>(10);\n const handleSecondaryTabClick = (tabIndex: number) => {\n setSecondaryActiveTabKey(tabIndex);\n };\n\n // drawer properties\n const [isExpanded, setIsExpanded] = useState<boolean>(true);\n\n // table properties\n // In real usage, this data would come from some external source like an API via props.\n const repositories: Repository[] = [\n { name: 'Node 1', branches: 10, prs: 25, workspaces: 5, lastCommit: '2 days ago' },\n { name: 'Node 2', branches: 8, prs: 30, workspaces: 2, lastCommit: '2 days ago' },\n { name: 'Node 3', branches: 12, prs: 48, workspaces: 13, lastCommit: '30 days ago' },\n { name: 'Node 4', branches: 3, prs: 8, workspaces: 20, lastCommit: '8 days ago' },\n { name: 'Node 5', branches: 33, prs: 21, workspaces: 2, lastCommit: '26 days ago' }\n ];\n\n const columnNames = {\n name: 'Repositories',\n branches: 'Branches',\n prs: 'Pull requests',\n workspaces: 'Workspaces',\n lastCommit: 'Last commit'\n };\n\n const [selectedRepoName, setSelectedRepoName] = useState<string>(repositories[0].name);\n const isRepoSelected = (repo: Repository) => repo.name === selectedRepoName;\n const setRepoSelected = (_event: React.FormEvent<HTMLInputElement>, repo: Repository) => {\n setSelectedRepoName(repo.name);\n setIsExpanded(true);\n };\n\n const defaultActions: IAction[] = [\n {\n title: 'Some action',\n onClick: (event) => {\n event.stopPropagation();\n console.log('clicked on Some action');\n }\n },\n {\n title: <a href=\"https://www.patternfly.org\">Link action</a>,\n onClick: (event) => {\n event.stopPropagation();\n console.log('clicked on Link action');\n }\n },\n {\n isSeparator: true\n },\n {\n title: 'Third action',\n onClick: (event) => {\n event.stopPropagation();\n console.log('clicked on Third action');\n }\n }\n ];\n\n const firstActionRef = useRef<HTMLButtonElement>(null);\n\n /** Handles when the user clicks on the custom action toggle, stops propagation to prevent the drawer from opening */\n const handleActionsToggleClick = (event: React.MouseEvent, ActionsToggleProps: CustomActionsToggleProps) => {\n const { onToggle } = ActionsToggleProps;\n\n onToggle(event);\n event.stopPropagation();\n };\n\n /** Enables keyboard navigation of the custom actions toggle */\n const handleActionsToggleKeyDown = (event: React.KeyboardEvent, ActionsToggleProps: CustomActionsToggleProps) => {\n const { onToggle } = ActionsToggleProps;\n const { Enter, Space, Escape, ArrowDown, ArrowUp } = KeyTypes;\n\n const shouldToggle = [Enter, Space, Escape].includes(event.key);\n const shouldFocus = [ArrowDown, ArrowUp, Enter, Space].includes(event.key);\n\n if (shouldToggle) {\n onToggle(event);\n }\n\n if (shouldFocus) {\n setTimeout(() => {\n firstActionRef.current?.focus();\n }, 0);\n }\n };\n\n const handleDrawerClose = () => {\n setIsExpanded(false);\n setSelectedRepoName('');\n };\n\n const customActionsToggle = (props: CustomActionsToggleProps, toggleName: string) => (\n <MenuToggle\n isDisabled={props.isDisabled}\n onClick={(event: React.MouseEvent) => handleActionsToggleClick(event, props)}\n onKeyDown={(event: React.KeyboardEvent) => handleActionsToggleKeyDown(event, props)}\n variant=\"plain\"\n aria-label={`${toggleName} actions`}\n aria-haspopup=\"menu\"\n isExpanded={props.isOpen}\n ref={props.toggleRef}\n icon={<RhUiEllipsisVerticalFillIcon />}\n />\n );\n\n const toolbar = (\n <Toolbar id=\"page-layout-table-column-management-action-toolbar-top\">\n <ToolbarContent>\n <ToolbarToggleGroup toggleIcon={<FilterIcon />} breakpoint=\"xl\">\n <ToolbarItem>\n <MenuToggle>Name</MenuToggle>\n </ToolbarItem>\n </ToolbarToggleGroup>\n <ToolbarItem>\n <MenuToggle variant=\"plain\" aria-label=\"Sort columns\" icon={<RhMicronsSortDownLargeToSmallIcon />} />\n </ToolbarItem>\n <OverflowMenu breakpoint=\"md\">\n <OverflowMenuContent>\n <OverflowMenuGroup groupType=\"button\" isPersistent>\n <OverflowMenuItem isPersistent>\n <Button variant=\"primary\">Generate</Button>\n </OverflowMenuItem>\n <OverflowMenuItem isPersistent>\n <Button variant=\"secondary\">Deploy</Button>\n </OverflowMenuItem>\n </OverflowMenuGroup>\n </OverflowMenuContent>\n <OverflowMenuControl hasAdditionalOptions>\n <Dropdown\n onSelect={() => {}}\n toggle={(toggleRef) => (\n <MenuToggle\n ref={toggleRef}\n aria-label=\"overflow menu\"\n variant=\"plain\"\n onClick={() => {}}\n isExpanded={false}\n icon={<RhUiEllipsisVerticalFillIcon />}\n />\n )}\n isOpen={false}\n >\n <DropdownList>{[]}</DropdownList>\n </Dropdown>\n </OverflowMenuControl>\n </OverflowMenu>\n </ToolbarContent>\n </Toolbar>\n );\n\n const table = (\n <Table aria-label=\"`Composable` table\">\n <Thead noWrap>\n <Tr>\n <Th screenReaderText=\"Row select\" />\n <Th>{columnNames.name}</Th>\n <Th>{columnNames.branches}</Th>\n <Th>{columnNames.prs}</Th>\n <Th>{columnNames.workspaces}</Th>\n <Th>{columnNames.lastCommit}</Th>\n </Tr>\n </Thead>\n <Tbody>\n {repositories.map((repo, rowIndex) => (\n <Tr key={repo.name}>\n <Td\n key={`${rowIndex}_0`}\n select={{\n rowIndex,\n onSelect: (event) => setRepoSelected(event, repo),\n isSelected: isRepoSelected(repo),\n variant: 'radio'\n }}\n />\n <Td dataLabel={columnNames.name}>\n {repo.name}\n <div>\n {/** Preventing default behavior for demo purposes only */}\n <a onClick={(event) => event.preventDefault()} href=\"#\">\n siemur/test-space\n </a>\n </div>\n </Td>\n <Td dataLabel={columnNames.branches}>\n <Flex>\n <FlexItem>{repo.branches}</FlexItem>\n <FlexItem>\n <RhUiBranchFillIcon key=\"icon\" />\n </FlexItem>\n </Flex>\n </Td>\n <Td dataLabel={columnNames.prs}>\n <Flex>\n <FlexItem>{repo.prs}</FlexItem>\n <FlexItem>\n <RhUiCodeIcon key=\"icon\" />\n </FlexItem>\n </Flex>\n </Td>\n <Td dataLabel={columnNames.workspaces}>\n <Flex>\n <FlexItem>{repo.workspaces}</FlexItem>\n <FlexItem>\n <CubeIcon key=\"icon\" />\n </FlexItem>\n </Flex>\n </Td>\n <Td dataLabel={columnNames.lastCommit}>{repo.lastCommit}</Td>\n <Td key={`${rowIndex}_5`}>\n <ActionsColumn\n items={defaultActions}\n actionsToggle={(props: CustomActionsToggleProps) => customActionsToggle(props, repo.name)}\n firstActionItemRef={firstActionRef}\n />\n </Td>\n </Tr>\n ))}\n </Tbody>\n </Table>\n );\n\n const panelContent = (\n <DrawerPanelContent widths={{ default: 'width_33', xl: 'width_33' }}>\n <DrawerHead>\n <DrawerActions>\n <DrawerCloseButton onClick={handleDrawerClose} />\n </DrawerActions>\n <Flex spaceItems={{ default: 'spaceItemsSm' }} direction={{ default: 'column' }}>\n <FlexItem>\n <Title headingLevel=\"h2\" size=\"lg\">\n {selectedRepoName}\n </Title>\n </FlexItem>\n <FlexItem>\n {/** Preventing default behavior for demo purposes only */}\n <a onClick={(event) => event.preventDefault()} href=\"#\">\n siemur/test-space\n </a>\n </FlexItem>\n </Flex>\n </DrawerHead>\n <DrawerPanelBody hasNoPadding>\n <Tabs\n activeKey={secondaryActiveTabKey}\n onSelect={(_event, tabIndex) => handleSecondaryTabClick(Number(tabIndex))}\n isBox\n isFilled\n id=\"tabs-tables-secondary-tabs\"\n >\n <Tab eventKey={10} title={<TabTitleText>Overview</TabTitleText>} tabContentId={`tabContent${10}`} />\n <Tab eventKey={11} title={<TabTitleText>Activity</TabTitleText>} tabContentId={`tabContent${11}`} />\n </Tabs>\n </DrawerPanelBody>\n <DrawerPanelBody>\n <TabContent\n key={10}\n eventKey={10}\n id={`tabContent${10}`}\n activeKey={secondaryActiveTabKey}\n hidden={10 !== secondaryActiveTabKey}\n >\n <TabContentBody>\n <Flex direction={{ default: 'column' }} spaceItems={{ default: 'spaceItemsLg' }}>\n <FlexItem>\n <p>\n The content of the drawer really is up to you. It could have form fields, definition lists, text\n lists, labels, charts, progress bars, etc. Spacing recommendation is 24px margins. You can put tabs in\n here, and can also make the drawer scrollable.\n </p>\n </FlexItem>\n <FlexItem>\n <Progress value={33} title=\"Capacity\" size={ProgressSize.sm} />\n </FlexItem>\n <FlexItem>\n <Progress value={66} title=\"Modules\" size={ProgressSize.sm} />\n </FlexItem>\n <Flex direction={{ default: 'column' }}>\n <FlexItem>\n <Title headingLevel=\"h3\">Tags</Title>\n </FlexItem>\n <FlexItem>\n <LabelGroup>\n {[1, 2, 3, 4, 5].map((labelNumber) => (\n <Label variant=\"outline\" key={`label-${labelNumber}`}>{`Tag ${labelNumber}`}</Label>\n ))}\n </LabelGroup>\n </FlexItem>\n </Flex>\n </Flex>\n </TabContentBody>\n </TabContent>\n <TabContent\n key={11}\n eventKey={11}\n id={`tabContent${11}`}\n activeKey={secondaryActiveTabKey}\n hidden={11 !== secondaryActiveTabKey}\n >\n <TabContentBody>Activity panel</TabContentBody>\n </TabContent>\n </DrawerPanelBody>\n </DrawerPanelContent>\n );\n\n const tabContent = (\n <Drawer isExpanded={isExpanded} isInline>\n <DrawerContent panelContent={panelContent}>\n <DrawerContentBody>{table}</DrawerContentBody>\n </DrawerContent>\n </Drawer>\n );\n\n return (\n <DashboardWrapper>\n <Fragment>\n <PageSection aria-labelledby=\"nodes\">\n <Title headingLevel=\"h1\" size=\"2xl\" id=\"nodes\">\n Nodes\n </Title>\n </PageSection>\n <PageSection padding={{ default: 'noPadding' }} aria-label=\"Nodes toolbar and content\">\n {toolbar}\n <Divider />\n {tabContent}\n </PageSection>\n </Fragment>\n </DashboardWrapper>\n );\n};\n","title":"Tables and tabs","lang":"ts","isFullscreen":true,"className":""}}>
84
-
85
- </Example>,
86
- 'Modal tabs': props =>
87
- <Example {...pageData} {...props} thumbnail={srcImportmodaltabs} {...{"code":"import { Fragment, useCallback, useState } from 'react';\nimport { DashboardWrapper } from '@patternfly/react-core/dist/js/demos/DashboardWrapper';\nimport {\n PageSection,\n Content,\n Gallery,\n Card,\n CardHeader,\n CardBody,\n CardTitle,\n Modal,\n ModalBody,\n ModalHeader,\n Tab,\n Tabs,\n TabTitleText,\n List,\n ListItem,\n Grid,\n GridItem,\n TabContent\n} from '@patternfly/react-core';\n\ninterface Product {\n id: string;\n name: string;\n description: string;\n}\n\nconst products: Product[] = [\n {\n id: 'pf-card',\n name: 'PatternFly',\n description: 'PatternFly is a community project that promotes design commonality and improves user experience.'\n },\n {\n id: 'mq-card',\n name: 'ActiveMQ',\n description:\n 'The ActiveMQ component allows messages to be sent to a JMS Queue or Topic; or messages to be consumed from a JMS Queue or Topic using Apache ActiveMQ.'\n },\n {\n id: 'apache-card',\n name: 'Apache Spark',\n description: 'This documentation page covers the Apache Spark component for the Apache Camel.'\n }\n];\n\nexport const ModalTabs: React.FunctionComponent = () => {\n const [isModalOpen, setIsModalOpen] = useState(true);\n const [selectedProduct, setSelectedProduct] = useState<Product | undefined>(products[0]);\n const [activeTabKey, setActiveTabKey] = useState<string | number>(0);\n\n const onCardClick = useCallback(\n (product: Product) => () => {\n setSelectedProduct(product);\n setIsModalOpen(true);\n },\n []\n );\n\n const closeModal = useCallback(() => {\n setSelectedProduct(undefined);\n setIsModalOpen(false);\n setActiveTabKey(0);\n }, []);\n\n const onTabSelect = useCallback(\n (_event: React.MouseEvent<HTMLElement, MouseEvent>, tabIndex: string | number) => setActiveTabKey(tabIndex),\n []\n );\n\n return (\n <Fragment>\n <DashboardWrapper mainContainerId=\"main-content-card-view-default-nav\">\n <PageSection aria-labelledby=\"projects-heading\">\n <Content>\n <h1 id=\"projects-heading\">Projects</h1>\n <p>Click any project card to view tabs within modals.</p>\n </Content>\n </PageSection>\n <PageSection isFilled aria-label=\"Selectable card gallery\">\n <Gallery hasGutter aria-label=\"Selectable card container\">\n {products.map((product) => (\n <Card\n isSelectable\n isSelected={selectedProduct?.id === product.id}\n isCompact\n key={product.id}\n id={product.name.replace(/ /g, '-')}\n >\n <CardHeader\n selectableActions={{\n selectableActionId: product.id,\n selectableActionAriaLabelledby: 'single-selectable-card-example-1',\n name: 'single-selectable-card-example',\n variant: 'single',\n onChange: onCardClick(product),\n hasNoOffset: true\n }}\n >\n <CardTitle>{product.name}</CardTitle>\n </CardHeader>\n <CardBody>{product.description}</CardBody>\n </Card>\n ))}\n </Gallery>\n </PageSection>\n </DashboardWrapper>\n\n {selectedProduct && (\n <Modal\n variant=\"small\"\n isOpen={isModalOpen}\n onClose={closeModal}\n ouiaId=\"TabsModal\"\n aria-labelledby=\"tabs-modal-title\"\n aria-describedby=\"tabs-modal-box-body-basic\"\n >\n <ModalHeader title={selectedProduct.name} labelId=\"tabs-modal-title\" />\n <ModalBody id=\"tabs-modal-box-body-basic\">\n <Grid hasGutter>\n <GridItem>\n <Tabs activeKey={activeTabKey} onSelect={onTabSelect}>\n <Tab eventKey={0} tabContentId=\"details-tab\" title={<TabTitleText>Details</TabTitleText>} />\n <Tab eventKey={1} tabContentId=\"doc-tab\" title={<TabTitleText>Documentation</TabTitleText>} />\n </Tabs>\n </GridItem>\n <GridItem>\n <TabContent eventKey={0} id=\"details-tab\" hidden={activeTabKey !== 0}>\n {selectedProduct.description}\n </TabContent>\n <TabContent eventKey={1} id=\"doc-tab\" hidden={activeTabKey !== 1}>\n <List>\n <ListItem>\n <a>Doc link 1</a>\n </ListItem>\n <ListItem>\n <a>Doc link 2</a>\n </ListItem>\n <ListItem>\n <a>Doc link 3</a>\n </ListItem>\n </List>\n </TabContent>\n </GridItem>\n </Grid>\n </ModalBody>\n </Modal>\n )}\n </Fragment>\n );\n};\n","title":"Modal tabs","lang":"ts","isFullscreen":true,"className":""}}>
88
-
89
- </Example>
90
- };
91
-
92
- const Component = () => (
93
- <React.Fragment>
94
- <AutoLinkHeader {...{"id":"demos","headingLevel":"h2","className":"ws-title ws-h2"}}>
95
- {`Demos`}
96
- </AutoLinkHeader>
97
- {React.createElement(pageData.examples["Open tabs"])}
98
- {React.createElement(pageData.examples["Open tabs with secondary tabs"])}
99
- {React.createElement(pageData.examples["Nested tabs"])}
100
- {React.createElement(pageData.examples["Nested, unindented tabs"])}
101
- {React.createElement(pageData.examples["Tables and tabs"])}
102
- {React.createElement(pageData.examples["Modal tabs"])}
103
- </React.Fragment>
104
- );
105
- Component.displayName = 'ComponentsTabsReactDemosDocs';
106
- Component.pageData = pageData;
107
-
108
- export default Component;