@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,1015 +0,0 @@
1
- import React from 'react';
2
- import { AutoLinkHeader, Example, Link as PatternflyThemeLink } from '@patternfly/documentation-framework/components';
3
- import { Fragment, useState } from 'react';
4
- import pfLogo from '../../../../../react-core/src/components/Card/examples/../../assets/PF-HorizontalLogo-Color.svg';
5
- import pfLogoSmall from '../../../../../react-core/src/components/Card/examples/../../assets/PF-IconLogo.svg';
6
- import RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';
7
- import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
8
- const pageData = {
9
- "id": "Card",
10
- "section": "components",
11
- "subsection": "",
12
- "deprecated": false,
13
- "template": false,
14
- "beta": false,
15
- "demo": false,
16
- "newImplementationLink": false,
17
- "source": "react",
18
- "tabName": null,
19
- "slug": "/components/card/react",
20
- "sourceLink": "https://github.com/patternfly/patternfly-react/blob/main/packages/react-core/src/components/Card/examples/Card.md",
21
- "relPath": "packages/react-core/src/components/Card/examples/Card.md",
22
- "propComponents": [
23
- {
24
- "name": "Card",
25
- "description": "",
26
- "props": [
27
- {
28
- "name": "children",
29
- "type": "React.ReactNode",
30
- "description": "Content rendered inside the Card"
31
- },
32
- {
33
- "name": "className",
34
- "type": "string",
35
- "description": "Additional classes added to the Card"
36
- },
37
- {
38
- "name": "component",
39
- "type": "React.JSX.IntrinsicElements",
40
- "description": "Sets the base component to render. defaults to div"
41
- },
42
- {
43
- "name": "id",
44
- "type": "string",
45
- "description": "ID of the Card. Also passed back in the CardHeader onExpand callback."
46
- },
47
- {
48
- "name": "isClickable",
49
- "type": "boolean",
50
- "description": "Flag indicating that the card is clickable and contains some action that triggers on click."
51
- },
52
- {
53
- "name": "isClicked",
54
- "type": "boolean",
55
- "description": "Flag indicating whether a card that is either only clickable or that is both clickable and selectable\nis currently clicked and has clicked styling."
56
- },
57
- {
58
- "name": "isCompact",
59
- "type": "boolean",
60
- "description": "Modifies the card to include compact styling. Should not be used with isLarge."
61
- },
62
- {
63
- "name": "isDisabled",
64
- "type": "boolean",
65
- "description": "Flag indicating that a clickable or selectable card is disabled."
66
- },
67
- {
68
- "name": "isExpanded",
69
- "type": "boolean",
70
- "description": "Flag indicating if a card is expanded. Modifies the card to be expandable."
71
- },
72
- {
73
- "name": "isFullHeight",
74
- "type": "boolean",
75
- "description": "Cause component to consume the available height of its container"
76
- },
77
- {
78
- "name": "isGlass",
79
- "type": "boolean",
80
- "description": "Modifies the card to include glass styling when glass theme is enabled"
81
- },
82
- {
83
- "name": "isLarge",
84
- "type": "boolean",
85
- "description": "Modifies the card to be large. Should not be used with isCompact."
86
- },
87
- {
88
- "name": "isPlain",
89
- "type": "boolean",
90
- "description": "Modifies the card to include plain styling; this removes border and background"
91
- },
92
- {
93
- "name": "isSelectable",
94
- "type": "boolean",
95
- "description": "Flag indicating that the card is selectable."
96
- },
97
- {
98
- "name": "isSelected",
99
- "type": "boolean",
100
- "description": "Flag indicating whether a card that is either selectable only or both clickable and selectable is\ncurrently selected and has selected styling."
101
- },
102
- {
103
- "name": "ouiaId",
104
- "type": "number | string",
105
- "description": "Value to overwrite the randomly generated data-ouia-component-id."
106
- },
107
- {
108
- "name": "ouiaSafe",
109
- "type": "boolean",
110
- "description": "Set the value of data-ouia-safe. Only set to true when the component is in a static state, i.e. no animations are occurring. At all other times, this value must be false."
111
- },
112
- {
113
- "name": "variant",
114
- "type": "'default' | 'secondary'",
115
- "description": "Card background color variant"
116
- }
117
- ]
118
- },
119
- {
120
- "name": "CardHeader",
121
- "description": "",
122
- "props": [
123
- {
124
- "name": "actions",
125
- "type": "CardHeaderActionsObject",
126
- "description": "Actions of the card header"
127
- },
128
- {
129
- "name": "children",
130
- "type": "React.ReactNode",
131
- "description": "Content rendered inside the card header"
132
- },
133
- {
134
- "name": "className",
135
- "type": "string",
136
- "description": "Additional classes added to the card header"
137
- },
138
- {
139
- "name": "hasWrap",
140
- "type": "boolean",
141
- "description": "Flag indicating that header wrapping is enabled"
142
- },
143
- {
144
- "name": "id",
145
- "type": "string",
146
- "description": "ID of the card header."
147
- },
148
- {
149
- "name": "isToggleRightAligned",
150
- "type": "boolean",
151
- "description": "Whether to right-align expandable toggle button"
152
- },
153
- {
154
- "name": "onExpand",
155
- "type": "(event: React.MouseEvent, id: string) => void",
156
- "description": "Callback expandable card"
157
- },
158
- {
159
- "name": "selectableActions",
160
- "type": "CardHeaderSelectableActionsObject",
161
- "description": "Selectable actions of the card header"
162
- },
163
- {
164
- "name": "toggleButtonProps",
165
- "type": "any",
166
- "description": "Additional props for expandable toggle button"
167
- }
168
- ]
169
- },
170
- {
171
- "name": "CardHeaderActionsObject",
172
- "description": "",
173
- "props": [
174
- {
175
- "name": "actions",
176
- "type": "React.ReactNode",
177
- "description": "Actions of the card header",
178
- "required": true
179
- },
180
- {
181
- "name": "className",
182
- "type": "string",
183
- "description": "Additional classes added to the actions wrapper"
184
- },
185
- {
186
- "name": "hasNoOffset",
187
- "type": "boolean",
188
- "description": "Flag indicating that the actions have no offset"
189
- }
190
- ]
191
- },
192
- {
193
- "name": "CardHeaderSelectableActionsObject",
194
- "description": "",
195
- "props": [
196
- {
197
- "name": "className",
198
- "type": "string",
199
- "description": "Additional classes added to the selectable actions wrapper"
200
- },
201
- {
202
- "name": "hasNoOffset",
203
- "type": "boolean",
204
- "description": "Flag indicating that the actions have no offset"
205
- },
206
- {
207
- "name": "isChecked",
208
- "type": "boolean",
209
- "description": ""
210
- },
211
- {
212
- "name": "isExternalLink",
213
- "type": "boolean",
214
- "description": "Flag to indicate whether a clickable-only card's link should open in a new tab/window."
215
- },
216
- {
217
- "name": "isHidden",
218
- "type": "boolean",
219
- "description": "Flag indicating the action is hidden"
220
- },
221
- {
222
- "name": "name",
223
- "type": "string",
224
- "description": "Name for the input element of a selectable card."
225
- },
226
- {
227
- "name": "onChange",
228
- "type": "(event: React.FormEvent<HTMLInputElement>, checked: boolean) => void",
229
- "description": "Callback for when a selectable card input changes"
230
- },
231
- {
232
- "name": "onClickAction",
233
- "type": "(event: React.MouseEvent) => void",
234
- "description": "Action to call when a clickable-only card is clicked. This cannot be combined with the to prop."
235
- },
236
- {
237
- "name": "selectableActionAriaLabel",
238
- "type": "string",
239
- "description": "Adds an accessible name to the input of a selectable card or clickable button/anchor of a clickable-only card.\nThis or selectableActionAriaLabelledby is required for clickable-only cards."
240
- },
241
- {
242
- "name": "selectableActionAriaLabelledby",
243
- "type": "string",
244
- "description": "A single or list of space-delimited ID's that provide an accessible name to the input of a selectable card\nor clickable button/anchor of a clickable-only card. This or selectableActionAriaLabelledby is required\nfor clickable-only cards."
245
- },
246
- {
247
- "name": "selectableActionId",
248
- "type": "string",
249
- "description": "Custom ID passed to the selectable card's input or a clickable-only card's button/anchor.\nIf omitted, a random unique ID will be assigned to a selectable card's input."
250
- },
251
- {
252
- "name": "selectableActionProps",
253
- "type": "any",
254
- "description": "Additional props spread to a selectable card input or clickable-only card's button/anchor."
255
- },
256
- {
257
- "name": "to",
258
- "type": "string",
259
- "description": "Link to navigate to when a clickable-only card is clicked. This cannot be combined with the onClickAction prop."
260
- },
261
- {
262
- "name": "variant",
263
- "type": "'single' | 'multiple'",
264
- "description": "Determines the type of input to be used for a selectable card."
265
- }
266
- ]
267
- },
268
- {
269
- "name": "CardTitle",
270
- "description": "",
271
- "props": [
272
- {
273
- "name": "children",
274
- "type": "React.ReactNode",
275
- "description": "Content rendered inside the CardTitle"
276
- },
277
- {
278
- "name": "className",
279
- "type": "string",
280
- "description": "Additional classes added to the CardTitle"
281
- },
282
- {
283
- "name": "component",
284
- "type": "React.JSX.IntrinsicElements",
285
- "description": "Sets the base component to render. defaults to div",
286
- "defaultValue": "'div'"
287
- },
288
- {
289
- "name": "subtitle",
290
- "type": "React.ReactNode",
291
- "description": "Subtitle of the card title",
292
- "beta": true
293
- }
294
- ]
295
- },
296
- {
297
- "name": "CardBody",
298
- "description": "",
299
- "props": [
300
- {
301
- "name": "children",
302
- "type": "React.ReactNode",
303
- "description": "Content rendered inside the Card Body"
304
- },
305
- {
306
- "name": "className",
307
- "type": "string",
308
- "description": "Additional classes added to the Card Body"
309
- },
310
- {
311
- "name": "component",
312
- "type": "JSX.IntrinsicElements",
313
- "description": "Sets the base component to render. defaults to div",
314
- "defaultValue": "'div'"
315
- },
316
- {
317
- "name": "isFilled",
318
- "type": "boolean",
319
- "description": "Enables the body Content to fill the height of the card",
320
- "defaultValue": "true"
321
- }
322
- ]
323
- },
324
- {
325
- "name": "CardFooter",
326
- "description": "",
327
- "props": [
328
- {
329
- "name": "children",
330
- "type": "React.ReactNode",
331
- "description": "Content rendered inside the Card Footer"
332
- },
333
- {
334
- "name": "className",
335
- "type": "string",
336
- "description": "Additional classes added to the Footer"
337
- },
338
- {
339
- "name": "component",
340
- "type": "JSX.IntrinsicElements",
341
- "description": "Sets the base component to render. defaults to div",
342
- "defaultValue": "'div'"
343
- }
344
- ]
345
- },
346
- {
347
- "name": "CardExpandableContent",
348
- "description": "",
349
- "props": [
350
- {
351
- "name": "children",
352
- "type": "React.ReactNode",
353
- "description": "Content rendered inside the Card Body"
354
- },
355
- {
356
- "name": "className",
357
- "type": "string",
358
- "description": "Additional classes added to the Card Body"
359
- }
360
- ]
361
- }
362
- ],
363
- "cssPrefix": [
364
- "pf-v6-c-card"
365
- ],
366
- "examples": [
367
- "Basic cards",
368
- "Card with subtitle",
369
- "Card with subtitle and Actions",
370
- "Secondary cards",
371
- "Modifiers",
372
- "Header images and actions",
373
- "Title inline with images and actions",
374
- "Card header without title",
375
- "Card with header that wraps",
376
- "With HTML heading element",
377
- "With multiple body sections",
378
- "With a primary body section that fills",
379
- "Selectable",
380
- "Single selectable",
381
- "Actionable",
382
- "Actionable and selectable",
383
- "Expandable cards",
384
- "Expandable with icon",
385
- "Card with dividers",
386
- "Single selectable tiles",
387
- "Multi selectable tiles"
388
- ]
389
- };
390
- pageData.liveContext = {
391
- Fragment,
392
- useState,
393
- pfLogo,
394
- pfLogoSmall,
395
- RhUiEllipsisVerticalFillIcon,
396
- PlusIcon
397
- };
398
- pageData.examples = {
399
- 'Basic cards': props =>
400
- <Example {...pageData} {...props} {...{"code":"import { Card, CardTitle, CardBody, CardFooter } from '@patternfly/react-core';\n\nexport const CardBasic: React.FunctionComponent = () => (\n <Card ouiaId=\"BasicCard\">\n <CardTitle>Title</CardTitle>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </Card>\n);\n","title":"Basic cards","lang":"ts","className":""}}>
401
-
402
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
403
- {`Basic cards typically have a `}
404
-
405
- <code {...{"className":"ws-code "}}>
406
- {`<CardTitle>`}
407
- </code>
408
- {`, `}
409
-
410
- <code {...{"className":"ws-code "}}>
411
- {`<CardBody>`}
412
- </code>
413
- {` and `}
414
-
415
- <code {...{"className":"ws-code "}}>
416
- {`<CardFooter>`}
417
- </code>
418
- {`. You may omit these components as needed, but it is recommended to at least include a `}
419
-
420
- <code {...{"className":"ws-code "}}>
421
- {`<CardBody>`}
422
- </code>
423
- {` to provide details about the card item.`}
424
- </p>
425
- </Example>,
426
- 'Card with subtitle': props =>
427
- <Example {...pageData} {...props} {...{"code":"import { Card, CardTitle, CardBody, CardFooter } from '@patternfly/react-core';\n\nexport const CardSubtitle: React.FunctionComponent = () => (\n <Card ouiaId=\"CardSubtitle\">\n <CardTitle subtitle=\"Subtitle\">Title</CardTitle>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </Card>\n);\n","title":"Card with subtitle","lang":"ts","isBeta":true,"className":""}}>
428
-
429
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
430
- {`A basic card that also has a subtitle`}
431
- </p>
432
- </Example>,
433
- 'Card with subtitle and Actions': props =>
434
- <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport {\n Brand,\n Card,\n CardHeader,\n CardTitle,\n CardBody,\n CardFooter,\n Checkbox,\n Dropdown,\n DropdownList,\n DropdownItem,\n MenuToggle,\n MenuToggleElement,\n Divider\n} from '@patternfly/react-core';\nimport RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';\nimport pfLogo from '../../assets/PF-HorizontalLogo-Color.svg';\n\nexport const CardWithImageAndActions: React.FunctionComponent = () => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [isChecked, setIsChecked] = useState<boolean>(false);\n const [hasNoOffset, setHasNoOffset] = useState<boolean>(false);\n\n const onSelect = () => {\n setIsOpen(!isOpen);\n };\n const onClick = (checked: boolean) => {\n setIsChecked(checked);\n };\n const toggleOffset = (checked: boolean) => {\n setHasNoOffset(checked);\n };\n\n const dropdownItems = (\n <>\n <DropdownItem key=\"action\">Action</DropdownItem>\n {/* Prevent default onClick functionality for example purposes */}\n <DropdownItem key=\"link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Link\n </DropdownItem>\n <DropdownItem key=\"disabled action\" isDisabled>\n Disabled Action\n </DropdownItem>\n <DropdownItem key=\"disabled link\" isDisabled to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Disabled Link\n </DropdownItem>\n <Divider component=\"li\" key=\"separator\" />\n <DropdownItem key=\"separated action\">Separated Action</DropdownItem>\n <DropdownItem key=\"separated link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Separated Link\n </DropdownItem>\n </>\n );\n\n const headerActions = (\n <>\n <Dropdown\n onSelect={onSelect}\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n isExpanded={isOpen}\n onClick={() => setIsOpen(!isOpen)}\n variant=\"plain\"\n aria-label=\"Card header images and actions example kebab toggle\"\n icon={<RhUiEllipsisVerticalFillIcon />}\n />\n )}\n isOpen={isOpen}\n onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}\n >\n <DropdownList>{dropdownItems}</DropdownList>\n </Dropdown>\n <Checkbox\n isChecked={isChecked}\n onChange={(_event, checked) => onClick(checked)}\n aria-label=\"card checkbox example\"\n id=\"check-1\"\n name=\"check1\"\n />\n </>\n );\n\n return (\n <>\n <Checkbox\n label=\"actions hasNoOffset\"\n isChecked={hasNoOffset}\n onChange={(_event, checked) => toggleOffset(checked)}\n aria-label=\"remove actions offset\"\n id=\"toggle-actions-offset\"\n name=\"toggle-actions-offset\"\n />\n <div style={{ marginTop: '15px' }}>\n <Card>\n <CardHeader actions={{ actions: headerActions, hasNoOffset }}>\n <Brand src={pfLogo} alt=\"PatternFly logo\" style={{ width: '300px' }} />\n </CardHeader>\n <CardTitle subtitle=\"Subtitle\">Title</CardTitle>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </Card>\n </div>\n </>\n );\n};\n","title":"Card with subtitle and Actions","lang":"ts","isBeta":true,"className":""}}>
435
-
436
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
437
- {`This card demonstrates having an image, action, and subtitle in a single card.`}
438
- </p>
439
- </Example>,
440
- 'Secondary cards': props =>
441
- <Example {...pageData} {...props} {...{"code":"import { Card, CardTitle, CardBody, CardFooter } from '@patternfly/react-core';\n\nexport const CardSecondary: React.FunctionComponent = () => (\n <Card ouiaId=\"SecondaryCard\" variant=\"secondary\">\n <CardTitle>Title</CardTitle>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </Card>\n);\n","title":"Secondary cards","lang":"ts","className":""}}>
442
-
443
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
444
- {`You can apply secondary background color styling to a card by setting the `}
445
-
446
- <code {...{"className":"ws-code "}}>
447
- {`variant`}
448
- </code>
449
- {` property to `}
450
-
451
- <code {...{"className":"ws-code "}}>
452
- {`secondary`}
453
- </code>
454
- {`.`}
455
- </p>
456
- </Example>,
457
- 'Modifiers': props =>
458
- <Example {...pageData} {...props} {...{"code":"import { Fragment, useState } from 'react';\nimport { Card, CardTitle, CardBody, CardFooter, Checkbox } from '@patternfly/react-core';\n\nexport const CardWithModifiers: React.FunctionComponent = () => {\n const mods = ['isCompact', 'isLarge', 'isFullHeight', 'isPlain'];\n const [modifiers, setModifiers] = useState({});\n\n return (\n <Fragment>\n <div style={{ marginBottom: '12px' }}>\n {mods.map((mod) => (\n <Checkbox\n id={mod}\n key={mod}\n label={mod}\n isChecked={modifiers[mod]}\n onChange={(_event, checked) => {\n modifiers[mod] = checked;\n setModifiers({ ...modifiers });\n }}\n />\n ))}\n </div>\n <div style={{ height: '15rem' }}>\n <Card {...modifiers}>\n <CardTitle>Title</CardTitle>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </Card>\n </div>\n </Fragment>\n );\n};\n","title":"Modifiers","lang":"ts","className":""}}>
459
-
460
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
461
- {`You can further modify the styling of the card's content by using the properties outlined below. In this example, you can enable each modifier by selecting its respective checkbox.`}
462
- </p>
463
-
464
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
465
- {`Most modifiers can be used in combination with each other, except for `}
466
-
467
- <code {...{"className":"ws-code "}}>
468
- {`isCompact`}
469
- </code>
470
- {` and `}
471
-
472
- <code {...{"className":"ws-code "}}>
473
- {`isLarge`}
474
- </code>
475
- {`, since they are contradictory.`}
476
- </p>
477
- </Example>,
478
- 'Header images and actions': props =>
479
- <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport {\n Brand,\n Card,\n CardHeader,\n CardTitle,\n CardBody,\n CardFooter,\n Checkbox,\n Dropdown,\n DropdownList,\n DropdownItem,\n MenuToggle,\n MenuToggleElement,\n Divider\n} from '@patternfly/react-core';\nimport RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';\nimport pfLogo from '../../assets/PF-HorizontalLogo-Color.svg';\n\nexport const CardWithImageAndActions: React.FunctionComponent = () => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [isChecked, setIsChecked] = useState<boolean>(false);\n const [hasNoOffset, setHasNoOffset] = useState<boolean>(false);\n\n const onSelect = () => {\n setIsOpen(!isOpen);\n };\n const onClick = (checked: boolean) => {\n setIsChecked(checked);\n };\n const toggleOffset = (checked: boolean) => {\n setHasNoOffset(checked);\n };\n\n const dropdownItems = (\n <>\n <DropdownItem key=\"action\">Action</DropdownItem>\n {/* Prevent default onClick functionality for example purposes */}\n <DropdownItem key=\"link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Link\n </DropdownItem>\n <DropdownItem key=\"disabled action\" isDisabled>\n Disabled Action\n </DropdownItem>\n <DropdownItem key=\"disabled link\" isDisabled to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Disabled Link\n </DropdownItem>\n <Divider component=\"li\" key=\"separator\" />\n <DropdownItem key=\"separated action\">Separated Action</DropdownItem>\n <DropdownItem key=\"separated link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Separated Link\n </DropdownItem>\n </>\n );\n\n const headerActions = (\n <>\n <Dropdown\n onSelect={onSelect}\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n isExpanded={isOpen}\n onClick={() => setIsOpen(!isOpen)}\n variant=\"plain\"\n aria-label=\"Card header images and actions example kebab toggle\"\n icon={<RhUiEllipsisVerticalFillIcon />}\n />\n )}\n isOpen={isOpen}\n onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}\n >\n <DropdownList>{dropdownItems}</DropdownList>\n </Dropdown>\n <Checkbox\n isChecked={isChecked}\n onChange={(_event, checked) => onClick(checked)}\n aria-label=\"card checkbox example\"\n id=\"check-1\"\n name=\"check1\"\n />\n </>\n );\n\n return (\n <>\n <Checkbox\n label=\"actions hasNoOffset\"\n isChecked={hasNoOffset}\n onChange={(_event, checked) => toggleOffset(checked)}\n aria-label=\"remove actions offset\"\n id=\"toggle-actions-offset\"\n name=\"toggle-actions-offset\"\n />\n <div style={{ marginTop: '15px' }}>\n <Card>\n <CardHeader actions={{ actions: headerActions, hasNoOffset }}>\n <Brand src={pfLogo} alt=\"PatternFly logo\" style={{ width: '300px' }} />\n </CardHeader>\n <CardTitle>Title</CardTitle>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </Card>\n </div>\n </>\n );\n};\n","title":"Header images and actions","lang":"ts","className":""}}>
480
-
481
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
482
- {`You can include header actions with the `}
483
-
484
- <code {...{"className":"ws-code "}}>
485
- {`actions`}
486
- </code>
487
- {` property of `}
488
-
489
- <code {...{"className":"ws-code "}}>
490
- {`<CardHeader>`}
491
- </code>
492
- {` . The following example includes an image using the `}
493
-
494
- <PatternflyThemeLink {...{"to":"/components/brand","className":""}}>
495
- {`Brand`}
496
- </PatternflyThemeLink>
497
- {` component, and also includes a kebab dropdown and a checkbox in `}
498
-
499
- <code {...{"className":"ws-code "}}>
500
- {`<CardHeader>`}
501
- </code>
502
- {` actions.`}
503
- </p>
504
-
505
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
506
- {`The `}
507
-
508
- <code {...{"className":"ws-code "}}>
509
- {`actions`}
510
- </code>
511
- {` property for `}
512
-
513
- <code {...{"className":"ws-code "}}>
514
- {`<CardHeader>`}
515
- </code>
516
- {` includes the `}
517
-
518
- <code {...{"className":"ws-code "}}>
519
- {`hasNoOffset`}
520
- </code>
521
- {` property, which is `}
522
-
523
- <code {...{"className":"ws-code "}}>
524
- {`false`}
525
- </code>
526
- {` by default. When `}
527
-
528
- <code {...{"className":"ws-code "}}>
529
- {`hasNoOffset`}
530
- </code>
531
- {` is `}
532
-
533
- <code {...{"className":"ws-code "}}>
534
- {`false`}
535
- </code>
536
- {`, a negative margin is applied to help align default-sized card titles with card actions.`}
537
- </p>
538
-
539
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
540
- {`You may use `}
541
-
542
- <code {...{"className":"ws-code "}}>
543
- {`hasNoOffset`}
544
- </code>
545
- {` to remove this negative margin, which better aligns card actions in implementations that use large card titles or tall header images, for example.`}
546
- </p>
547
-
548
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
549
- {`Select the "actions hasNoOffset" checkbox in the example below to illustrate this behavior.`}
550
- </p>
551
- </Example>,
552
- 'Title inline with images and actions': props =>
553
- <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport {\n Card,\n CardHeader,\n CardTitle,\n CardBody,\n CardFooter,\n Checkbox,\n Dropdown,\n DropdownList,\n DropdownItem,\n MenuToggle,\n MenuToggleElement,\n Divider\n} from '@patternfly/react-core';\nimport RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';\n\nexport const CardTitleInHeader: React.FunctionComponent = () => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [isChecked, setIsChecked] = useState<boolean>(false);\n\n const onSelect = () => {\n setIsOpen(!isOpen);\n };\n const onClick = (checked: boolean) => {\n setIsChecked(checked);\n };\n\n const dropdownItems = (\n <>\n <DropdownItem key=\"action\">Action</DropdownItem>\n {/* Prevent default onClick functionality for example purposes */}\n <DropdownItem key=\"link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Link\n </DropdownItem>\n <DropdownItem key=\"disabled action\" isDisabled>\n Disabled Action\n </DropdownItem>\n <DropdownItem key=\"disabled link\" isDisabled to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Disabled Link\n </DropdownItem>\n <Divider component=\"li\" key=\"separator\" />\n <DropdownItem key=\"separated action\">Separated Action</DropdownItem>\n <DropdownItem key=\"separated link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Separated Link\n </DropdownItem>\n </>\n );\n\n const headerActions = (\n <>\n <Dropdown\n onSelect={onSelect}\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n isExpanded={isOpen}\n onClick={() => setIsOpen(!isOpen)}\n variant=\"plain\"\n aria-label=\"Card title inline with images and actions example kebab toggle\"\n icon={<RhUiEllipsisVerticalFillIcon />}\n />\n )}\n isOpen={isOpen}\n onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}\n >\n <DropdownList>{dropdownItems}</DropdownList>\n </Dropdown>\n <Checkbox\n isChecked={isChecked}\n onChange={(_event, checked) => onClick(checked)}\n aria-label=\"card checkbox example\"\n id=\"check-2\"\n name=\"check2\"\n />\n </>\n );\n\n return (\n <Card>\n <CardHeader actions={{ actions: headerActions }}>\n <CardTitle>\n This is a really really really really really really really really really really long header\n </CardTitle>\n </CardHeader>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </Card>\n );\n};\n","title":"Title inline with images and actions","lang":"ts","className":""}}>
554
-
555
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
556
- {`Moving `}
557
-
558
- <code {...{"className":"ws-code "}}>
559
- {`<CardTitle>`}
560
- </code>
561
- {` within the `}
562
-
563
- <code {...{"className":"ws-code "}}>
564
- {`<CardHeader>`}
565
- </code>
566
- {` will style it inline with any images or actions.`}
567
- </p>
568
- </Example>,
569
- 'Card header without title': props =>
570
- <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport {\n Checkbox,\n Card,\n CardHeader,\n CardBody,\n Dropdown,\n DropdownList,\n DropdownItem,\n MenuToggle,\n MenuToggleElement,\n Divider\n} from '@patternfly/react-core';\nimport RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';\n\nexport const CardOnlyActionsInCardHead: React.FunctionComponent = () => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [isChecked, setIsChecked] = useState<boolean>(false);\n\n const onSelect = () => {\n setIsOpen(!isOpen);\n };\n const onClick = (checked: boolean) => {\n setIsChecked(checked);\n };\n\n const dropdownItems = (\n <>\n <DropdownItem key=\"action\">Action</DropdownItem>\n {/* Prevent default onClick functionality for example purposes */}\n <DropdownItem key=\"link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Link\n </DropdownItem>\n <DropdownItem key=\"disabled action\" isDisabled>\n Disabled Action\n </DropdownItem>\n <DropdownItem key=\"disabled link\" isDisabled to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Disabled Link\n </DropdownItem>\n <Divider component=\"li\" key=\"separator\" />\n <DropdownItem key=\"separated action\">Separated Action</DropdownItem>\n <DropdownItem key=\"separated link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Separated Link\n </DropdownItem>\n </>\n );\n\n const headerActions = (\n <>\n <Dropdown\n onSelect={onSelect}\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n isExpanded={isOpen}\n onClick={() => setIsOpen(!isOpen)}\n variant=\"plain\"\n aria-label=\"Card header without title example kebab toggle\"\n icon={<RhUiEllipsisVerticalFillIcon />}\n />\n )}\n isOpen={isOpen}\n onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}\n >\n <DropdownList>{dropdownItems}</DropdownList>\n </Dropdown>\n <Checkbox\n isChecked={isChecked}\n onChange={(_event, checked) => onClick(checked)}\n aria-label=\"card checkbox example\"\n id=\"check-3\"\n name=\"check3\"\n />\n </>\n );\n\n return (\n <Card>\n <CardHeader actions={{ actions: headerActions }} />\n <CardBody>This is the card body. There are only actions in the card head.</CardBody>\n </Card>\n );\n};\n","title":"Card header without title","lang":"ts","className":""}}>
571
-
572
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
573
- {`Card actions can be placed in the card header even without a `}
574
-
575
- <code {...{"className":"ws-code "}}>
576
- {`<CardTitle>`}
577
- </code>
578
- {`.`}
579
- </p>
580
-
581
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
582
- {`Images can also be placed in the card header without a `}
583
-
584
- <code {...{"className":"ws-code "}}>
585
- {`<CardTitle>`}
586
- </code>
587
- {`.`}
588
- </p>
589
- </Example>,
590
- 'Card with header that wraps': props =>
591
- <Example {...pageData} {...props} {...{"code":"import { Card, CardBody, CardHeader, Button, CardTitle } from '@patternfly/react-core';\n\nexport const CardBasic: React.FunctionComponent = () => (\n <Card ouiaId=\"BasicCard\">\n <CardHeader\n hasWrap\n actions={{\n hasNoOffset: true,\n actions: [\n <Button variant=\"primary\" ouiaId=\"Primary\" key=\"primary\">\n Primary action\n </Button>,\n <Button variant=\"secondary\" ouiaId=\"Secondary\" key=\"secondary\">\n Secondary action\n </Button>,\n <Button variant=\"tertiary\" ouiaId=\"Tertiary\" key=\"tertiary\">\n Tertiary action\n </Button>\n ]\n }}\n >\n <CardTitle>This is a longer card title that takes up more space</CardTitle>\n </CardHeader>\n <CardBody>This is the card body</CardBody>\n </Card>\n);\n","title":"Card with header that wraps","lang":"ts","className":""}}>
592
-
593
- </Example>,
594
- 'With HTML heading element': props =>
595
- <Example {...pageData} {...props} {...{"code":"import { Card, CardTitle, CardBody, CardFooter } from '@patternfly/react-core';\n\nexport const CardWithHeadingElement: React.FunctionComponent = () => (\n <Card>\n <CardTitle component=\"h4\">Title within an {'<h4>'} element</CardTitle>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </Card>\n);\n","title":"With HTML heading element","lang":"ts","className":""}}>
596
-
597
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
598
- {`You may use the `}
599
-
600
- <code {...{"className":"ws-code "}}>
601
- {`component`}
602
- </code>
603
- {` property to place the card's title within an HTML heading element.`}
604
- </p>
605
- </Example>,
606
- 'With multiple body sections': props =>
607
- <Example {...pageData} {...props} {...{"code":"import { Card, CardTitle, CardBody, CardFooter } from '@patternfly/react-core';\n\nexport const CardWithMultipleBodySections: React.FunctionComponent = () => (\n <Card>\n <CardTitle>Title</CardTitle>\n <CardBody>Body</CardBody>\n <CardBody>Body</CardBody>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </Card>\n);\n","title":"With multiple body sections","lang":"ts","className":""}}>
608
-
609
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
610
- {`You may use multiple body sections to visually separate blocks of content.`}
611
- </p>
612
- </Example>,
613
- 'With a primary body section that fills': props =>
614
- <Example {...pageData} {...props} {...{"code":"import { Card, CardTitle, CardBody, CardFooter } from '@patternfly/react-core';\n\nexport const CardWithBodySectionFills: React.FunctionComponent = () => (\n <Card style={{ minHeight: '30em' }}>\n <CardTitle>Title</CardTitle>\n <CardBody isFilled={false}>Body pf-m-no-fill</CardBody>\n <CardBody isFilled={false}>Body pf-m-no-fill</CardBody>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </Card>\n);\n","title":"With a primary body section that fills","lang":"ts","className":""}}>
615
-
616
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
617
-
618
- <code {...{"className":"ws-code "}}>
619
- {`<CardBody>`}
620
- </code>
621
- {` sections will fill the available height of the card when `}
622
-
623
- <code {...{"className":"ws-code "}}>
624
- {`isFilled`}
625
- </code>
626
- {` equals `}
627
-
628
- <code {...{"className":"ws-code "}}>
629
- {`{true}`}
630
- </code>
631
- {`, which is the default value. Set `}
632
-
633
- <code {...{"className":"ws-code "}}>
634
- {`isFilled`}
635
- </code>
636
- {` to `}
637
-
638
- <code {...{"className":"ws-code "}}>
639
- {`{false}`}
640
- </code>
641
- {` to disable this behavior for one or more body sections. The remaining available height of the card will be split between any `}
642
-
643
- <code {...{"className":"ws-code "}}>
644
- {`<CardBody>`}
645
- </code>
646
- {` section that does not set `}
647
-
648
- <code {...{"className":"ws-code "}}>
649
- {`isFilled`}
650
- </code>
651
- {` to `}
652
-
653
- <code {...{"className":"ws-code "}}>
654
- {`{false}`}
655
- </code>
656
- {`.`}
657
- </p>
658
-
659
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
660
- {`A common use case of this is to set all but one body section to `}
661
-
662
- <code {...{"className":"ws-code "}}>
663
- {`isFilled={false}`}
664
- </code>
665
- {` so that a primary body section fills the available space of the card as seen in the example below. This example has 3 `}
666
-
667
- <code {...{"className":"ws-code "}}>
668
- {`<CardBody>`}
669
- </code>
670
- {` sections, two of which set `}
671
-
672
- <code {...{"className":"ws-code "}}>
673
- {`isFilled`}
674
- </code>
675
- {` to `}
676
-
677
- <code {...{"className":"ws-code "}}>
678
- {`{false}`}
679
- </code>
680
- {`. The third `}
681
-
682
- <code {...{"className":"ws-code "}}>
683
- {`<CardBody>`}
684
- </code>
685
- {` fills the remaining height of the card.`}
686
- </p>
687
- </Example>,
688
- 'Selectable': props =>
689
- <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { Card, CardHeader, CardTitle, CardBody, Checkbox, Gallery } from '@patternfly/react-core';\n\nexport const SelectableCard: React.FunctionComponent = () => {\n const [isChecked1, setIsChecked1] = useState(false);\n const [isChecked2, setIsChecked2] = useState(false);\n const [isChecked3, setIsChecked3] = useState(false);\n const [isSecondary, setIsSecondary] = useState(false);\n const [displayCheckbox, setDisplayCheckbox] = useState(false);\n\n const id1 = 'selectable-card-input-1';\n const id2 = 'selectable-card-input-2';\n const id3 = 'selectable-card-input-3';\n\n const onChange = (event: React.FormEvent<HTMLInputElement>, checked: boolean) => {\n const name = event.currentTarget.name;\n\n switch (name) {\n case id1:\n setIsChecked1(checked);\n break;\n case id2:\n setIsChecked2(checked);\n break;\n case id3:\n setIsChecked3(checked);\n break;\n }\n };\n\n const toggleVariant = (checked: boolean) => {\n setIsSecondary(checked);\n };\n\n const toggleHide = (checked: boolean) => {\n setDisplayCheckbox(checked);\n };\n\n return (\n <>\n <Checkbox\n label=\"Secondary card styling\"\n isChecked={isSecondary}\n onChange={(_event, checked) => toggleVariant(checked)}\n id=\"toggle-variant-selectable\"\n name=\"toggle-variant\"\n />\n <Checkbox\n label=\"Hide checkbox\"\n isChecked={displayCheckbox}\n onChange={(_event, checked) => toggleHide(checked)}\n id=\"selectable-toggle-hide-checkbox\"\n name=\"toggle-hide\"\n />\n <Gallery hasGutter style={{ marginTop: '15px' }}>\n <Card\n id=\"selectable-card-example-1\"\n isSelectable\n isSelected={isChecked1}\n variant={isSecondary ? 'secondary' : 'default'}\n >\n <CardHeader\n selectableActions={{\n selectableActionId: id1,\n selectableActionAriaLabelledby: 'selectable-card-example-1',\n name: id1,\n onChange,\n hasNoOffset: true,\n isHidden: displayCheckbox\n }}\n >\n <CardTitle>First card</CardTitle>\n </CardHeader>\n <CardBody>This card is selectable.</CardBody>\n </Card>\n <Card\n id=\"selectable-card-example-2\"\n isSelectable\n isSelected={isChecked2}\n variant={isSecondary ? 'secondary' : 'default'}\n >\n <CardHeader\n selectableActions={{\n selectableActionId: id2,\n selectableActionAriaLabelledby: 'selectable-card-example-2',\n name: id2,\n onChange,\n hasNoOffset: true,\n isHidden: displayCheckbox\n }}\n >\n <CardTitle>Second card</CardTitle>\n </CardHeader>\n <CardBody>This card is selectable.</CardBody>\n </Card>\n <Card\n id=\"selectable-card-example-3\"\n isSelectable\n isDisabled\n isSelected={isChecked3}\n variant={isSecondary ? 'secondary' : 'default'}\n >\n <CardHeader\n selectableActions={{\n selectableActionId: id3,\n selectableActionAriaLabelledby: 'selectable-card-example-3',\n name: id3,\n onChange,\n hasNoOffset: true,\n isHidden: displayCheckbox\n }}\n >\n <CardTitle>Third card</CardTitle>\n </CardHeader>\n <CardBody>This card is selectable but disabled.</CardBody>\n </Card>\n </Gallery>\n </>\n );\n};\n","title":"Selectable","lang":"ts","className":""}}>
690
-
691
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
692
- {`A selectable card can be selected by clicking anywhere within the card.`}
693
- </p>
694
-
695
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
696
- {`You must avoid rendering any other interactive content within the `}
697
-
698
- <code {...{"className":"ws-code "}}>
699
- {`<Card>`}
700
- </code>
701
- {` when it is meant to be selectable only. Refer to our `}
702
-
703
- <PatternflyThemeLink {...{"to":"#clickable-and-selectable-cards","className":""}}>
704
- {`actionable and selectable example`}
705
- </PatternflyThemeLink>
706
- {` if you need a card that is both selectable and has other interactive, actionable content.`}
707
- </p>
708
- </Example>,
709
- 'Single selectable': props =>
710
- <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { Card, CardHeader, CardTitle, CardBody, Gallery, Checkbox } from '@patternfly/react-core';\n\nexport const SingleSelectableCard: React.FunctionComponent = () => {\n const [isChecked, setIsChecked] = useState('');\n const id1 = 'single-selectable-card-input-1';\n const id2 = 'single-selectable-card-input-2';\n const id3 = 'single-selectable-card-input-3';\n const [displayRadioButton, setDisplayRadioButton] = useState(false);\n\n const onChange = (event: React.FormEvent<HTMLInputElement>) => {\n setIsChecked(event.currentTarget.id);\n };\n\n const toggleHide = (checked: boolean) => {\n setDisplayRadioButton(checked);\n };\n\n return (\n <>\n <Checkbox\n label=\"Hide radio button\"\n isChecked={displayRadioButton}\n onChange={(_event, checked) => toggleHide(checked)}\n id=\"single-select-toggle-hide-radio-button\"\n name=\"toggle-hide\"\n />\n <Gallery hasGutter style={{ marginTop: '15px' }}>\n <Card id=\"single-selectable-card-example-1\" isSelectable isSelected={isChecked === id1}>\n <CardHeader\n selectableActions={{\n selectableActionId: id1,\n selectableActionAriaLabelledby: 'single-selectable-card-example-1',\n name: 'single-selectable-card-example',\n variant: 'single',\n onChange,\n hasNoOffset: true,\n isHidden: displayRadioButton\n }}\n >\n <CardTitle>First card</CardTitle>\n </CardHeader>\n <CardBody>This card is single selectable.</CardBody>\n </Card>\n <Card id=\"single-selectable-card-example-2\" isSelectable isSelected={isChecked === id2}>\n <CardHeader\n selectableActions={{\n selectableActionId: id2,\n selectableActionAriaLabelledby: 'single-selectable-card-example-2',\n name: 'single-selectable-card-example',\n variant: 'single',\n onChange,\n hasNoOffset: true,\n isHidden: displayRadioButton\n }}\n >\n <CardTitle>Second card</CardTitle>\n </CardHeader>\n <CardBody>This card is single selectable.</CardBody>\n </Card>\n <Card id=\"single-selectable-card-example-3\" isSelectable isDisabled isSelected={isChecked === id3}>\n <CardHeader\n selectableActions={{\n selectableActionId: id3,\n selectableActionAriaLabelledby: 'single-selectable-card-example-3',\n name: 'single-selectable-card-example',\n variant: 'single',\n onChange,\n hasNoOffset: true,\n isHidden: displayRadioButton\n }}\n >\n <CardTitle>Third card</CardTitle>\n </CardHeader>\n <CardBody>This card is single selectable but disabled.</CardBody>\n </Card>\n </Gallery>\n </>\n );\n};\n","title":"Single selectable","lang":"ts","className":""}}>
711
-
712
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
713
- {`When a group of single selectable cards are related, you must pass the same `}
714
-
715
- <code {...{"className":"ws-code "}}>
716
- {`name`}
717
- </code>
718
- {` property to each card's `}
719
-
720
- <code {...{"className":"ws-code "}}>
721
- {`selectableActions`}
722
- </code>
723
- {` property. For more guidance on selectable cards with hidden input, see our `}
724
-
725
- <PatternflyThemeLink {...{"to":"#cards-as-tiles","className":""}}>
726
- {`cards as tiles examples`}
727
- </PatternflyThemeLink>
728
- {`.`}
729
- </p>
730
- </Example>,
731
- 'Actionable': props =>
732
- <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { Card, CardHeader, CardTitle, CardBody, Checkbox, Gallery } from '@patternfly/react-core';\n\nexport const CardClickable: React.FunctionComponent = () => {\n const [isSecondary, setIsSecondary] = useState<boolean>(false);\n\n const toggleVariant = (checked: boolean) => {\n setIsSecondary(checked);\n };\n\n return (\n <>\n <Checkbox\n label=\"secondary styling\"\n isChecked={isSecondary}\n onChange={(_event, checked) => toggleVariant(checked)}\n aria-label=\"add secondary styling\"\n id=\"toggle-variant-clickable\"\n name=\"toggle-variant\"\n />\n <div style={{ marginTop: '15px' }}>\n <Gallery hasGutter>\n <Card isClickable variant={isSecondary ? 'secondary' : 'default'}>\n <CardHeader\n selectableActions={{\n // eslint-disable-next-line no-console\n onClickAction: () => console.log(`First card in actionable example clicked`),\n selectableActionAriaLabelledby: 'clickable-card-example-title-1'\n }}\n >\n <CardTitle id=\"clickable-card-example-title-1\">First card in the actionable example</CardTitle>\n </CardHeader>\n <CardBody>This card performs an action on click.</CardBody>\n </Card>\n <Card isClickable variant={isSecondary ? 'secondary' : 'default'}>\n <CardHeader\n selectableActions={{\n to: '#',\n selectableActionAriaLabelledby: 'clickable-card-example-title-2'\n }}\n >\n <CardTitle id=\"clickable-card-example-title-2\">Second card in the actionable example</CardTitle>\n </CardHeader>\n <CardBody>This card can navigate to a link on click.</CardBody>\n </Card>\n <Card isClickable isDisabled variant={isSecondary ? 'secondary' : 'default'}>\n <CardHeader\n selectableActions={{\n // eslint-disable-next-line no-console\n onClickAction: () => console.log(`Third card in actionable example clicked`),\n selectableActionAriaLabelledby: 'clickable-card-example-title-3'\n }}\n >\n <CardTitle id=\"clickable-card-example-title-3\">Third card in the actionable example</CardTitle>\n </CardHeader>\n <CardBody>This card is clickable but disabled.</CardBody>\n </Card>\n </Gallery>\n </div>\n </>\n );\n};\n","title":"Actionable","lang":"ts","className":""}}>
733
-
734
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
735
- {`An actionable card can perform an action or navigate to a link by clicking anywhere within the card. To open a link in a new tab or window, pass the `}
736
-
737
- <code {...{"className":"ws-code "}}>
738
- {`isExternalLink`}
739
- </code>
740
- {` property to `}
741
-
742
- <code {...{"className":"ws-code "}}>
743
- {`selectableActions`}
744
- </code>
745
- {`.`}
746
- </p>
747
-
748
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
749
- {`You can pass the `}
750
-
751
- <code {...{"className":"ws-code "}}>
752
- {`isClicked`}
753
- </code>
754
- {` property to `}
755
-
756
- <code {...{"className":"ws-code "}}>
757
- {`<Card>`}
758
- </code>
759
- {` to convey that a card is the currently clicked one, such as when clicking a card would open a `}
760
-
761
- <PatternflyThemeLink {...{"to":"/patterns/primary-detail","className":""}}>
762
- {`primary-detail view`}
763
- </PatternflyThemeLink>
764
- {`. This must not be used simply for "selection" of a card, and you should instead use our `}
765
-
766
- <PatternflyThemeLink {...{"to":"#selectable","className":""}}>
767
- {`selectable card`}
768
- </PatternflyThemeLink>
769
- {` or `}
770
-
771
- <PatternflyThemeLink {...{"to":"#single-selectable","className":""}}>
772
- {`single selectable card`}
773
- </PatternflyThemeLink>
774
- {`.`}
775
- </p>
776
-
777
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
778
- {`When a card is meant to be actionable only, you must avoid rendering any other interactive content within the `}
779
-
780
- <code {...{"className":"ws-code "}}>
781
- {`<Card>`}
782
- </code>
783
- {`, similar to selectable cards.`}
784
- </p>
785
- </Example>,
786
- 'Actionable and selectable': props =>
787
- <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { Card, CardHeader, CardTitle, CardBody, Button, Checkbox, Gallery } from '@patternfly/react-core';\n\nexport const CardClickable: React.FunctionComponent = () => {\n const [isChecked1, setIsChecked1] = useState(false);\n const [isChecked2, setIsChecked2] = useState(false);\n const [isChecked3, setIsChecked3] = useState(false);\n const [isClicked, setIsClicked] = useState(false);\n const [isSecondary, setIsSecondary] = useState<boolean>(false);\n\n const id1 = 'clickable-selectable-card-input-1';\n const id2 = 'clickable-selectable-card-input-2';\n const id3 = 'clickable-selectable-card-input-3';\n\n const onClick = () => {\n setIsClicked((prevState) => !prevState);\n };\n\n const onChange = (event: React.FormEvent<HTMLInputElement>, checked: boolean) => {\n const name = event.currentTarget.name;\n\n switch (name) {\n case id1:\n setIsChecked1(checked);\n break;\n case id2:\n setIsChecked2(checked);\n break;\n case id3:\n setIsChecked3(checked);\n break;\n }\n };\n\n const toggleVariant = (checked: boolean) => {\n setIsSecondary(checked);\n };\n\n return (\n <>\n <Checkbox\n label=\"secondary styling\"\n isChecked={isSecondary}\n onChange={(_event, checked) => toggleVariant(checked)}\n aria-label=\"add secondary styling\"\n id=\"toggle-variant-clickable-selectable\"\n name=\"toggle-variant\"\n />\n <div style={{ marginTop: '15px' }}>\n <Gallery hasGutter>\n <Card\n id=\"clickable-selectable-card-example-1\"\n isClickable\n isSelectable\n isSelected={isChecked1}\n isClicked={isClicked}\n variant={isSecondary ? 'secondary' : 'default'}\n >\n <CardHeader\n selectableActions={{\n selectableActionId: id1,\n selectableActionAriaLabelledby: 'clickable-selectable-card-example-1',\n name: id1,\n onChange,\n hasNoOffset: true\n }}\n >\n <CardTitle>\n <Button variant=\"link\" isInline onClick={onClick}>\n First card\n </Button>\n </CardTitle>\n </CardHeader>\n <CardBody>This card performs an action upon clicking the card title and is selectable.</CardBody>\n </Card>\n <Card\n id=\"clickable-selectable-card-example-2\"\n isClickable\n isSelectable\n isSelected={isChecked2}\n variant={isSecondary ? 'secondary' : 'default'}\n >\n <CardHeader\n selectableActions={{\n selectableActionId: id2,\n selectableActionAriaLabelledby: 'clickable-selectable-card-example-2',\n name: id2,\n onChange,\n hasNoOffset: true\n }}\n >\n <CardTitle>Second Card</CardTitle>\n </CardHeader>\n <CardBody>\n This card is selectable and has a link in the card body that navigates to{' '}\n <Button variant=\"link\" isInline component=\"a\" href=\"#\">\n Patternfly\n </Button>\n .\n </CardBody>\n </Card>\n <Card\n id=\"clickable-selectable-card-example-3\"\n isClickable\n isSelectable\n isDisabled\n isSelected={isChecked3}\n variant={isSecondary ? 'secondary' : 'default'}\n >\n <CardHeader\n selectableActions={{\n selectableActionId: id3,\n selectableActionAriaLabelledby: 'clickable-selectable-card-example-3',\n name: id3,\n onChange,\n hasNoOffset: true\n }}\n >\n <CardTitle>\n <Button isDisabled variant=\"link\" isInline component=\"a\" href=\"https://www.patternfly.org/\">\n Third card\n </Button>\n </CardTitle>\n </CardHeader>\n <CardBody>This card is clickable and selectable, but disabled.</CardBody>\n </Card>\n </Gallery>\n </div>\n </>\n );\n};\n","title":"Actionable and selectable","lang":"ts","className":""}}>
788
-
789
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
790
- {`A card can be selectable and have additional interactive content by passing both the `}
791
-
792
- <code {...{"className":"ws-code "}}>
793
- {`isClickable`}
794
- </code>
795
- {` and `}
796
-
797
- <code {...{"className":"ws-code "}}>
798
- {`isSelectable`}
799
- </code>
800
- {` properties to `}
801
-
802
- <code {...{"className":"ws-code "}}>
803
- {`<Card>`}
804
- </code>
805
- {`. The following example shows how the actionable functionality can be rendered anywhere within a selectable card.`}
806
- </p>
807
-
808
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
809
- {`When passing interactive content to an actionable and selectable card that is disabled, you should also ensure the interactive content is disabled as well, if applicable.`}
810
- </p>
811
- </Example>,
812
- 'Expandable cards': props =>
813
- <Example {...pageData} {...props} {...{"code":"import { Fragment, useState } from 'react';\nimport {\n Card,\n CardHeader,\n CardTitle,\n CardBody,\n CardFooter,\n CardExpandableContent,\n Checkbox,\n Dropdown,\n DropdownList,\n DropdownItem,\n Divider,\n MenuToggle,\n MenuToggleElement\n} from '@patternfly/react-core';\nimport RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';\n\nexport const CardExpandable: React.FunctionComponent = () => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [isChecked, setIsChecked] = useState<boolean>(false);\n const [isExpanded, setIsExpanded] = useState<boolean>(false);\n const [isToggleRightAligned, setIsToggleRightAligned] = useState<boolean>(false);\n\n const onSelect = () => {\n setIsOpen(!isOpen);\n };\n\n const onClick = (checked: boolean) => {\n setIsChecked(checked);\n };\n\n const onExpand = (event: React.MouseEvent, id: string) => {\n // eslint-disable-next-line no-console\n console.log(id);\n setIsExpanded(!isExpanded);\n };\n\n const onRightAlign = () => {\n setIsToggleRightAligned(!isToggleRightAligned);\n };\n\n const dropdownItems = (\n <>\n <DropdownItem key=\"action\">Action</DropdownItem>\n {/* Prevent default onClick functionality for example purposes */}\n <DropdownItem key=\"link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Link\n </DropdownItem>\n <DropdownItem key=\"disabled action\" isDisabled>\n Disabled Action\n </DropdownItem>\n <DropdownItem key=\"disabled link\" isDisabled to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Disabled Link\n </DropdownItem>\n <Divider component=\"li\" key=\"separator\" />\n <DropdownItem key=\"separated action\">Separated Action</DropdownItem>\n <DropdownItem key=\"separated link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Separated Link\n </DropdownItem>\n </>\n );\n const headerActions = (\n <>\n <Dropdown\n onSelect={onSelect}\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n isExpanded={isOpen}\n onClick={() => setIsOpen(!isOpen)}\n variant=\"plain\"\n aria-label=\"Card expandable example kebab toggle\"\n icon={<RhUiEllipsisVerticalFillIcon />}\n />\n )}\n isOpen={isOpen}\n onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}\n >\n <DropdownList>{dropdownItems}</DropdownList>\n </Dropdown>\n <Checkbox\n isChecked={isChecked}\n onChange={(_event, checked) => onClick(checked)}\n aria-label=\"card checkbox example\"\n id=\"check-4\"\n name=\"check4\"\n />\n </>\n );\n\n return (\n <Fragment>\n <div style={{ marginBottom: '12px' }}>\n <Checkbox\n id={'isToggleRightAligned-1'}\n key={'isToggleRightAligned'}\n label={'isToggleRightAligned'}\n isChecked={isToggleRightAligned}\n onChange={onRightAlign}\n />\n </div>\n <Card id=\"expandable-card\" isExpanded={isExpanded}>\n <CardHeader\n actions={{ actions: headerActions }}\n onExpand={onExpand}\n isToggleRightAligned={isToggleRightAligned}\n toggleButtonProps={{\n id: 'toggle-button1',\n 'aria-label': 'Details',\n 'aria-labelledby': 'expandable-card-title toggle-button1',\n 'aria-expanded': isExpanded\n }}\n >\n <CardTitle id=\"expandable-card-title\">Title</CardTitle>\n </CardHeader>\n <CardExpandableContent>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </CardExpandableContent>\n </Card>\n </Fragment>\n );\n};\n","title":"Expandable cards","lang":"ts","className":""}}>
814
-
815
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
816
- {`A card can be made expandable using the `}
817
-
818
- <code {...{"className":"ws-code "}}>
819
- {`isExpanded`}
820
- </code>
821
- {` property. In the collapsed state, only the card header is shown, and the user can click the caret to view the rest of the card content.`}
822
- </p>
823
-
824
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
825
- {`Place any content that you want to be hidden within the `}
826
-
827
- <code {...{"className":"ws-code "}}>
828
- {`<CardExpandableContent>`}
829
- </code>
830
- {` component.`}
831
- </p>
832
- </Example>,
833
- 'Expandable with icon': props =>
834
- <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport {\n Card,\n CardHeader,\n CardBody,\n CardFooter,\n CardExpandableContent,\n Checkbox,\n Dropdown,\n DropdownList,\n DropdownItem,\n Divider,\n MenuToggle,\n MenuToggleElement\n} from '@patternfly/react-core';\nimport pfLogoSmall from '../../PF-IconLogo.svg';\nimport RhUiEllipsisVerticalFillIcon from '@patternfly/react-icons/dist/esm/icons/rh-ui-ellipsis-vertical-fill-icon';\n\nexport const CardExpandableWithIcon: React.FunctionComponent = () => {\n const [isOpen, setIsOpen] = useState<boolean>(false);\n const [isChecked, setIsChecked] = useState<boolean>(false);\n const [isExpanded, setIsExpanded] = useState<boolean>(false);\n\n const onSelect = () => {\n setIsOpen(!isOpen);\n };\n\n const onClick = (checked: boolean) => {\n setIsChecked(checked);\n };\n\n const onExpand = (event: React.MouseEvent, id: string) => {\n // eslint-disable-next-line no-console\n console.log(id);\n setIsExpanded(!isExpanded);\n };\n\n const dropdownItems = (\n <>\n <DropdownItem key=\"action\">Action</DropdownItem>\n {/* Prevent default onClick functionality for example purposes */}\n <DropdownItem key=\"link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Link\n </DropdownItem>\n <DropdownItem key=\"disabled action\" isDisabled>\n Disabled Action\n </DropdownItem>\n <DropdownItem key=\"disabled link\" isDisabled to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Disabled Link\n </DropdownItem>\n <Divider component=\"li\" key=\"separator\" />\n <DropdownItem key=\"separated action\">Separated Action</DropdownItem>\n <DropdownItem key=\"separated link\" to=\"#\" onClick={(event: any) => event.preventDefault()}>\n Separated Link\n </DropdownItem>\n </>\n );\n\n const headerActions = (\n <>\n <Dropdown\n onSelect={onSelect}\n toggle={(toggleRef: React.Ref<MenuToggleElement>) => (\n <MenuToggle\n ref={toggleRef}\n isExpanded={isOpen}\n onClick={() => setIsOpen(!isOpen)}\n variant=\"plain\"\n aria-label=\"Card expandable with icon example kebab toggle\"\n icon={<RhUiEllipsisVerticalFillIcon />}\n />\n )}\n isOpen={isOpen}\n onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}\n >\n <DropdownList>{dropdownItems}</DropdownList>\n </Dropdown>\n <Checkbox\n isChecked={isChecked}\n onChange={(_event, checked) => onClick(checked)}\n aria-label=\"card checkbox example\"\n id=\"check-5\"\n name=\"check5\"\n />\n </>\n );\n\n return (\n <Card id=\"expandable-card-icon\" isExpanded={isExpanded}>\n <CardHeader\n actions={{ actions: headerActions }}\n onExpand={onExpand}\n toggleButtonProps={{\n id: 'toggle-button2',\n 'aria-label': 'Patternfly Details',\n 'aria-expanded': isExpanded\n }}\n >\n <img src={pfLogoSmall} alt=\"PatternFly logo\" width=\"27px\" />\n </CardHeader>\n <CardExpandableContent>\n <CardBody>Body</CardBody>\n <CardFooter>Footer</CardFooter>\n </CardExpandableContent>\n </Card>\n );\n};\n","title":"Expandable with icon","lang":"ts","className":""}}>
835
-
836
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
837
- {`An image can be placed in the card header to show users an icon beside the expansion caret.`}
838
- </p>
839
- </Example>,
840
- 'Card with dividers': props =>
841
- <Example {...pageData} {...props} {...{"code":"import { Card, CardTitle, CardBody, CardFooter, Divider } from '@patternfly/react-core';\n\nexport const CardWithDividers: React.FunctionComponent = () => (\n <Card ouiaId=\"CardWithDividers\">\n <CardTitle>Title</CardTitle>\n <Divider />\n <CardBody>Body</CardBody>\n <Divider />\n <CardBody>Body</CardBody>\n <Divider />\n <CardFooter>Footer</CardFooter>\n </Card>\n);\n","title":"Card with dividers","lang":"ts","className":""}}>
842
-
843
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
844
- {`Dividers can be placed between sections of the card.`}
845
- </p>
846
- </Example>,
847
- 'Single selectable tiles': props =>
848
- <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { Card, CardHeader, CardBody, Gallery, Flex } from '@patternfly/react-core';\nimport PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';\n\nexport const CardTile: React.FunctionComponent = () => {\n const [isChecked, setIsChecked] = useState('');\n const id1 = 'tile-1';\n const id2 = 'tile-2';\n const id3 = 'tile-3';\n\n const onChange = (event: React.FormEvent<HTMLInputElement>) => {\n setIsChecked(event.currentTarget.id);\n };\n\n return (\n <Gallery hasGutter>\n <Card id=\"tile-example-1\" isSelectable isSelected={isChecked === id1}>\n <CardHeader\n selectableActions={{\n selectableActionId: id1,\n selectableActionAriaLabelledby: 'tile-example-1',\n name: id1,\n variant: 'single',\n onChange,\n isHidden: true\n }}\n >\n <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>\n <PlusIcon />\n <b>Tile header</b>\n </Flex>\n </CardHeader>\n <CardBody>Tile content and description</CardBody>\n </Card>\n <Card id=\"tile-example-2\" isSelectable isSelected={isChecked === id2}>\n <CardHeader\n selectableActions={{\n selectableActionId: id2,\n selectableActionAriaLabelledby: 'tile-example-2',\n name: id2,\n variant: 'single',\n onChange,\n isHidden: true\n }}\n >\n <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>\n <PlusIcon />\n <b>Tile header</b>\n </Flex>\n </CardHeader>\n <CardBody>Tile content and description</CardBody>\n </Card>\n <Card id=\"tile-example-3\" isSelectable isDisabled isSelected={isChecked === id3}>\n <CardHeader\n selectableActions={{\n selectableActionId: id3,\n selectableActionAriaLabelledby: 'tile-example-3',\n name: id3,\n variant: 'single',\n onChange,\n isHidden: true\n }}\n >\n <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>\n <PlusIcon />\n <b>Tile header (disabled)</b>\n </Flex>\n </CardHeader>\n <CardBody>Tile content and description</CardBody>\n </Card>\n </Gallery>\n );\n};\n","title":"Single selectable tiles","lang":"ts","className":""}}>
849
-
850
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
851
- {`To prevent users from selecting more than 1 tile in a set, set `}
852
-
853
- <code {...{"className":"ws-code "}}>
854
- {`variant`}
855
- </code>
856
- {` to "single" within the `}
857
-
858
- <code {...{"className":"ws-code "}}>
859
- {`selectableActions`}
860
- </code>
861
- {` object of `}
862
-
863
- <code {...{"className":"ws-code "}}>
864
- {`<CardHeader>`}
865
- </code>
866
- {`.`}
867
- </p>
868
- </Example>,
869
- 'Multi selectable tiles': props =>
870
- <Example {...pageData} {...props} {...{"code":"import { useState } from 'react';\nimport { Card, CardHeader, CardBody, Gallery, Flex } from '@patternfly/react-core';\nimport PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';\n\nexport const CardTileMulti: React.FunctionComponent = () => {\n const [isChecked1, setIsChecked1] = useState(false);\n const [isChecked2, setIsChecked2] = useState(false);\n const [isChecked3, setIsChecked3] = useState(false);\n const id1 = 'multi-tile-1';\n const id2 = 'multi-tile-2';\n const id3 = 'multi-tile-3';\n\n const onChange = (event: React.FormEvent<HTMLInputElement>, checked: boolean) => {\n const name = event.currentTarget.name;\n\n switch (name) {\n case id1:\n setIsChecked1(checked);\n break;\n case id2:\n setIsChecked2(checked);\n break;\n case id3:\n setIsChecked3(checked);\n break;\n }\n };\n\n return (\n <Gallery hasGutter>\n <Card id=\"multi-tile-example-1\" isSelectable isSelected={isChecked1}>\n <CardHeader\n selectableActions={{\n selectableActionId: id1,\n selectableActionAriaLabelledby: 'multi-tile-example-1',\n name: id1,\n onChange,\n isHidden: true\n }}\n >\n <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>\n <PlusIcon />\n <b>Tile header</b>\n </Flex>\n </CardHeader>\n <CardBody>Tile content and description</CardBody>\n </Card>\n <Card id=\"multi-tile-example-2\" isSelectable isSelected={isChecked2}>\n <CardHeader\n selectableActions={{\n selectableActionId: id2,\n selectableActionAriaLabelledby: 'multi-tile-example-2',\n name: id2,\n onChange,\n isHidden: true\n }}\n >\n <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>\n <PlusIcon />\n <b>Tile header</b>\n </Flex>\n </CardHeader>\n <CardBody>Tile content and description</CardBody>\n </Card>\n <Card id=\"multi-tile-example-3\" isSelectable isDisabled isSelected={isChecked3}>\n <CardHeader\n selectableActions={{\n selectableActionId: id3,\n selectableActionAriaLabelledby: 'multi-tile-example-3',\n name: id3,\n onChange,\n isHidden: true\n }}\n >\n <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>\n <PlusIcon />\n <b>Tile header (disabled)</b>\n </Flex>\n </CardHeader>\n <CardBody>Tile content and description</CardBody>\n </Card>\n </Gallery>\n );\n};\n","title":"Multi selectable tiles","lang":"ts","className":""}}>
871
-
872
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
873
- {`To allow users to select more than 1 tile in a set, do not set `}
874
-
875
- <code {...{"className":"ws-code "}}>
876
- {`variant`}
877
- </code>
878
- {` within the `}
879
-
880
- <code {...{"className":"ws-code "}}>
881
- {`selectableActions`}
882
- </code>
883
- {` object of `}
884
-
885
- <code {...{"className":"ws-code "}}>
886
- {`<CardHeader>`}
887
- </code>
888
- {`.`}
889
- </p>
890
- </Example>
891
- };
892
-
893
- const Component = () => (
894
- <React.Fragment>
895
- <AutoLinkHeader {...{"id":"examples","headingLevel":"h2","className":"ws-title ws-h2"}}>
896
- {`Examples`}
897
- </AutoLinkHeader>
898
- {React.createElement(pageData.examples["Basic cards"])}
899
- {React.createElement(pageData.examples["Card with subtitle"])}
900
- {React.createElement(pageData.examples["Card with subtitle and Actions"])}
901
- {React.createElement(pageData.examples["Secondary cards"])}
902
- {React.createElement(pageData.examples["Modifiers"])}
903
- <table {...{"className":"ws-table pf-v6-c-table pf-m-grid-lg pf-m-compact","role":"grid"}}>
904
- <thead {...{"className":"pf-v6-c-table__thead"}}>
905
- <tr {...{"role":"row","className":"pf-v6-c-table__tr"}}>
906
- <th {...{"className":"undefined pf-v6-c-table__th pf-m-wrap","role":"columnheader","scope":"col"}}>
907
- <div {...{"className":""}}>
908
- {`Modifier`}
909
- </div>
910
- </th>
911
- <th {...{"className":"undefined pf-v6-c-table__th pf-m-wrap","role":"columnheader","scope":"col"}}>
912
- <div {...{"className":""}}>
913
- {`Description`}
914
- </div>
915
- </th>
916
- </tr>
917
- </thead>
918
- <tbody {...{"role":"rowgroup","className":"pf-v6-c-table__tbody"}}>
919
- <tr {...{"role":"row","className":"pf-v6-c-table__tr"}}>
920
- <td {...{"role":"cell","className":"pf-v6-c-table__td","data-label":"Modifier"}}>
921
- <div {...{"className":""}}>
922
- {`isCompact`}
923
- </div>
924
- </td>
925
- <td {...{"role":"cell","className":"pf-v6-c-table__td","data-label":"Description"}}>
926
- <div {...{"className":""}}>
927
- {`Modifies the card to include compact styling. Should not be used with isLarge.`}
928
- </div>
929
- </td>
930
- </tr>
931
- <tr {...{"role":"row","className":"pf-v6-c-table__tr"}}>
932
- <td {...{"role":"cell","className":"pf-v6-c-table__td","data-label":"Modifier"}}>
933
- <div {...{"className":""}}>
934
- {`isLarge`}
935
- </div>
936
- </td>
937
- <td {...{"role":"cell","className":"pf-v6-c-table__td","data-label":"Description"}}>
938
- <div {...{"className":""}}>
939
- {`Modifies the card to be large. Should not be used with isCompact.`}
940
- </div>
941
- </td>
942
- </tr>
943
- <tr {...{"role":"row","className":"pf-v6-c-table__tr"}}>
944
- <td {...{"role":"cell","className":"pf-v6-c-table__td","data-label":"Modifier"}}>
945
- <div {...{"className":""}}>
946
- {`isFullHeight`}
947
- </div>
948
- </td>
949
- <td {...{"role":"cell","className":"pf-v6-c-table__td","data-label":"Description"}}>
950
- <div {...{"className":""}}>
951
- {`Modifies the card so that it fills the total available height of its container.`}
952
- </div>
953
- </td>
954
- </tr>
955
- <tr {...{"role":"row","className":"pf-v6-c-table__tr"}}>
956
- <td {...{"role":"cell","className":"pf-v6-c-table__td","data-label":"Modifier"}}>
957
- <div {...{"className":""}}>
958
- {`isPlain`}
959
- </div>
960
- </td>
961
- <td {...{"role":"cell","className":"pf-v6-c-table__td","data-label":"Description"}}>
962
- <div {...{"className":""}}>
963
- {`Modifies the card to include plain styling, which removes the border and background.`}
964
- </div>
965
- </td>
966
- </tr>
967
- </tbody>
968
- </table>
969
- {React.createElement(pageData.examples["Header images and actions"])}
970
- {React.createElement(pageData.examples["Title inline with images and actions"])}
971
- {React.createElement(pageData.examples["Card header without title"])}
972
- {React.createElement(pageData.examples["Card with header that wraps"])}
973
- {React.createElement(pageData.examples["With HTML heading element"])}
974
- {React.createElement(pageData.examples["With multiple body sections"])}
975
- {React.createElement(pageData.examples["With a primary body section that fills"])}
976
- {React.createElement(pageData.examples["Selectable"])}
977
- {React.createElement(pageData.examples["Single selectable"])}
978
- {React.createElement(pageData.examples["Actionable"])}
979
- {React.createElement(pageData.examples["Actionable and selectable"])}
980
- {React.createElement(pageData.examples["Expandable cards"])}
981
- {React.createElement(pageData.examples["Expandable with icon"])}
982
- {React.createElement(pageData.examples["Card with dividers"])}
983
- <AutoLinkHeader {...{"id":"cards-as-tiles","headingLevel":"h2","className":"ws-title ws-h2"}}>
984
- {`Cards as tiles`}
985
- </AutoLinkHeader>
986
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
987
- {`Sets of selectable cards can be used as tiles, which are static options that users can select.`}
988
- </p>
989
- <p {...{"className":"pf-v6-c-content--p pf-m-editorial ws-p "}}>
990
- {`They can be either single selectable or multi selectable, by passing the `}
991
- <code {...{"className":"ws-code "}}>
992
- {`variant`}
993
- </code>
994
- {` property to the `}
995
- <code {...{"className":"ws-code "}}>
996
- {`selectableActions`}
997
- </code>
998
- {` object. You can also toggle the visibility of the radio or checkbox by passing the `}
999
- <code {...{"className":"ws-code "}}>
1000
- {`isHidden`}
1001
- </code>
1002
- {` property to the `}
1003
- <code {...{"className":"ws-code "}}>
1004
- {`selectableActions`}
1005
- </code>
1006
- {` object.`}
1007
- </p>
1008
- {React.createElement(pageData.examples["Single selectable tiles"])}
1009
- {React.createElement(pageData.examples["Multi selectable tiles"])}
1010
- </React.Fragment>
1011
- );
1012
- Component.displayName = 'ComponentsCardReactDocs';
1013
- Component.pageData = pageData;
1014
-
1015
- export default Component;