@patternfly/react-core 6.0.0-prerelease.17 → 6.0.0-prerelease.18

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 (222) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/components/package.json +1 -1
  3. package/deprecated/package.json +1 -1
  4. package/dist/dynamic/components/AboutModal/package.json +1 -1
  5. package/dist/dynamic/components/Accordion/package.json +1 -1
  6. package/dist/dynamic/components/ActionList/package.json +1 -1
  7. package/dist/dynamic/components/Alert/package.json +1 -1
  8. package/dist/dynamic/components/Avatar/package.json +1 -1
  9. package/dist/dynamic/components/BackToTop/package.json +1 -1
  10. package/dist/dynamic/components/Backdrop/package.json +1 -1
  11. package/dist/dynamic/components/BackgroundImage/package.json +1 -1
  12. package/dist/dynamic/components/Badge/package.json +1 -1
  13. package/dist/dynamic/components/Banner/package.json +1 -1
  14. package/dist/dynamic/components/Brand/package.json +1 -1
  15. package/dist/dynamic/components/Breadcrumb/package.json +1 -1
  16. package/dist/dynamic/components/Button/package.json +1 -1
  17. package/dist/dynamic/components/CalendarMonth/package.json +1 -1
  18. package/dist/dynamic/components/Card/package.json +1 -1
  19. package/dist/dynamic/components/Checkbox/package.json +1 -1
  20. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  21. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  22. package/dist/dynamic/components/Content/package.json +1 -1
  23. package/dist/dynamic/components/DataList/package.json +1 -1
  24. package/dist/dynamic/components/DatePicker/package.json +1 -1
  25. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  26. package/dist/dynamic/components/Divider/package.json +1 -1
  27. package/dist/dynamic/components/Drawer/package.json +1 -1
  28. package/dist/dynamic/components/Dropdown/package.json +1 -1
  29. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  30. package/dist/dynamic/components/EmptyState/package.json +1 -1
  31. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  32. package/dist/dynamic/components/FileUpload/package.json +1 -1
  33. package/dist/dynamic/components/Form/package.json +1 -1
  34. package/dist/dynamic/components/FormSelect/package.json +1 -1
  35. package/dist/dynamic/components/HelperText/package.json +1 -1
  36. package/dist/dynamic/components/Hint/package.json +1 -1
  37. package/dist/dynamic/components/Icon/package.json +1 -1
  38. package/dist/dynamic/components/InputGroup/package.json +1 -1
  39. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  40. package/dist/dynamic/components/Label/package.json +1 -1
  41. package/dist/dynamic/components/List/package.json +1 -1
  42. package/dist/dynamic/components/LoginPage/package.json +1 -1
  43. package/dist/dynamic/components/Masthead/package.json +1 -1
  44. package/dist/dynamic/components/Menu/package.json +1 -1
  45. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  46. package/dist/dynamic/components/Modal/package.json +1 -1
  47. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  48. package/dist/dynamic/components/Nav/package.json +1 -1
  49. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  50. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  51. package/dist/dynamic/components/NumberInput/package.json +1 -1
  52. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  53. package/dist/dynamic/components/Page/package.json +1 -1
  54. package/dist/dynamic/components/Pagination/package.json +1 -1
  55. package/dist/dynamic/components/Panel/package.json +1 -1
  56. package/dist/dynamic/components/Popover/package.json +1 -1
  57. package/dist/dynamic/components/Progress/package.json +1 -1
  58. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  59. package/dist/dynamic/components/Radio/package.json +1 -1
  60. package/dist/dynamic/components/SearchInput/package.json +1 -1
  61. package/dist/dynamic/components/Select/package.json +1 -1
  62. package/dist/dynamic/components/Sidebar/package.json +1 -1
  63. package/dist/dynamic/components/SimpleList/package.json +1 -1
  64. package/dist/dynamic/components/Skeleton/package.json +1 -1
  65. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  66. package/dist/dynamic/components/Slider/package.json +1 -1
  67. package/dist/dynamic/components/Spinner/package.json +1 -1
  68. package/dist/dynamic/components/Switch/package.json +1 -1
  69. package/dist/dynamic/components/Tabs/package.json +1 -1
  70. package/dist/dynamic/components/TextArea/package.json +1 -1
  71. package/dist/dynamic/components/TextInput/package.json +1 -1
  72. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  73. package/dist/dynamic/components/TimePicker/package.json +1 -1
  74. package/dist/dynamic/components/Timestamp/package.json +1 -1
  75. package/dist/dynamic/components/Title/package.json +1 -1
  76. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  77. package/dist/dynamic/components/Toolbar/package.json +1 -1
  78. package/dist/dynamic/components/Tooltip/package.json +1 -1
  79. package/dist/dynamic/components/TreeView/package.json +1 -1
  80. package/dist/dynamic/components/Truncate/package.json +1 -1
  81. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  82. package/dist/dynamic/components/Wizard/package.json +1 -1
  83. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  84. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/Tile/package.json +1 -0
  88. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/package.json +1 -1
  90. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  91. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  92. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  93. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  94. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  95. package/dist/dynamic/helpers/constants/package.json +1 -1
  96. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  97. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  98. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  99. package/dist/dynamic/helpers/package.json +1 -1
  100. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  101. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  102. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  103. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  104. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  105. package/dist/dynamic/helpers/util/package.json +1 -1
  106. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  107. package/dist/dynamic/layouts/Flex/package.json +1 -1
  108. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  109. package/dist/dynamic/layouts/Grid/package.json +1 -1
  110. package/dist/dynamic/layouts/Level/package.json +1 -1
  111. package/dist/dynamic/layouts/Split/package.json +1 -1
  112. package/dist/dynamic/layouts/Stack/package.json +1 -1
  113. package/dist/dynamic/styles/package.json +1 -1
  114. package/dist/dynamic-modules.json +0 -2
  115. package/dist/esm/components/Card/CardHeader.d.ts +2 -0
  116. package/dist/esm/components/Card/CardHeader.d.ts.map +1 -1
  117. package/dist/esm/components/Card/CardHeader.js +2 -2
  118. package/dist/esm/components/Card/CardHeader.js.map +1 -1
  119. package/dist/esm/components/DataList/DataListAction.d.ts +0 -2
  120. package/dist/esm/components/DataList/DataListAction.d.ts.map +1 -1
  121. package/dist/esm/components/DataList/DataListAction.js +2 -2
  122. package/dist/esm/components/DataList/DataListAction.js.map +1 -1
  123. package/dist/esm/components/Dropdown/Dropdown.js +1 -1
  124. package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
  125. package/dist/esm/components/Menu/MenuContainer.js +1 -1
  126. package/dist/esm/components/Menu/MenuContainer.js.map +1 -1
  127. package/dist/esm/components/Select/Select.js +1 -1
  128. package/dist/esm/components/Select/Select.js.map +1 -1
  129. package/dist/esm/components/index.d.ts +0 -1
  130. package/dist/esm/components/index.d.ts.map +1 -1
  131. package/dist/esm/components/index.js +0 -1
  132. package/dist/esm/components/index.js.map +1 -1
  133. package/dist/esm/deprecated/components/Tile/Tile.d.ts.map +1 -0
  134. package/dist/esm/deprecated/components/Tile/Tile.js.map +1 -0
  135. package/dist/esm/deprecated/components/Tile/index.d.ts.map +1 -0
  136. package/dist/esm/deprecated/components/Tile/index.js.map +1 -0
  137. package/dist/esm/deprecated/components/index.d.ts +1 -0
  138. package/dist/esm/deprecated/components/index.d.ts.map +1 -1
  139. package/dist/esm/deprecated/components/index.js +1 -0
  140. package/dist/esm/deprecated/components/index.js.map +1 -1
  141. package/dist/js/components/Card/CardHeader.d.ts +2 -0
  142. package/dist/js/components/Card/CardHeader.d.ts.map +1 -1
  143. package/dist/js/components/Card/CardHeader.js +2 -2
  144. package/dist/js/components/Card/CardHeader.js.map +1 -1
  145. package/dist/js/components/DataList/DataListAction.d.ts +0 -2
  146. package/dist/js/components/DataList/DataListAction.d.ts.map +1 -1
  147. package/dist/js/components/DataList/DataListAction.js +2 -2
  148. package/dist/js/components/DataList/DataListAction.js.map +1 -1
  149. package/dist/js/components/Dropdown/Dropdown.js +1 -1
  150. package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
  151. package/dist/js/components/Menu/MenuContainer.js +1 -1
  152. package/dist/js/components/Menu/MenuContainer.js.map +1 -1
  153. package/dist/js/components/Select/Select.js +1 -1
  154. package/dist/js/components/Select/Select.js.map +1 -1
  155. package/dist/js/components/index.d.ts +0 -1
  156. package/dist/js/components/index.d.ts.map +1 -1
  157. package/dist/js/components/index.js +0 -1
  158. package/dist/js/components/index.js.map +1 -1
  159. package/dist/js/deprecated/components/Tile/Tile.d.ts.map +1 -0
  160. package/dist/js/deprecated/components/Tile/Tile.js.map +1 -0
  161. package/dist/js/deprecated/components/Tile/index.d.ts.map +1 -0
  162. package/dist/js/deprecated/components/Tile/index.js.map +1 -0
  163. package/dist/js/deprecated/components/index.d.ts +1 -0
  164. package/dist/js/deprecated/components/index.d.ts.map +1 -1
  165. package/dist/js/deprecated/components/index.js +1 -0
  166. package/dist/js/deprecated/components/index.js.map +1 -1
  167. package/dist/styles/base-no-reset.css +14 -8
  168. package/dist/styles/base.css +14 -8
  169. package/dist/umd/assets/{output-yUTd5GvQ.css → output-CWzd0B68.css} +12072 -12288
  170. package/dist/umd/react-core.min.js +1 -1
  171. package/helpers/package.json +1 -1
  172. package/layouts/package.json +1 -1
  173. package/next/package.json +1 -1
  174. package/package.json +6 -6
  175. package/src/components/Card/CardHeader.tsx +9 -2
  176. package/src/components/Card/examples/Card.md +23 -0
  177. package/src/components/Card/examples/CardTile.tsx +73 -0
  178. package/src/components/Card/examples/CardTileMulti.tsx +84 -0
  179. package/src/components/DataList/DataListAction.tsx +1 -5
  180. package/src/components/DataList/__tests__/DataListAction.test.tsx +21 -21
  181. package/src/components/DataList/examples/DataListActions.tsx +0 -1
  182. package/src/components/DataList/examples/DataListCheckboxes.tsx +0 -3
  183. package/src/components/DataList/examples/DataListClickableRows.tsx +0 -2
  184. package/src/components/DataList/examples/DataListExpandable.tsx +3 -18
  185. package/src/components/DataList/examples/DataListMixedExpandable.tsx +3 -18
  186. package/src/components/DataList/examples/DataListWidthModifiers.tsx +0 -2
  187. package/src/components/Dropdown/Dropdown.tsx +1 -1
  188. package/src/components/Menu/MenuContainer.tsx +1 -1
  189. package/src/components/Select/Select.tsx +1 -1
  190. package/src/components/index.ts +0 -1
  191. package/src/demos/DataList/examples/DataListExpandableControlInToolbar.tsx +3 -18
  192. package/src/{demos/TileDemo.md → deprecated/components/Tile/examples/Tile.md} +67 -2
  193. package/src/{components → deprecated/components}/Tile/examples/TileBasic.tsx +1 -1
  194. package/src/{components → deprecated/components}/Tile/examples/TileStacked.tsx +1 -1
  195. package/src/{components → deprecated/components}/Tile/examples/TileStackedWithLargeIcons.tsx +1 -1
  196. package/src/{components → deprecated/components}/Tile/examples/TileWithExtraContent.tsx +2 -1
  197. package/src/{components → deprecated/components}/Tile/examples/TileWithIcon.tsx +1 -1
  198. package/src/{components → deprecated/components}/Tile/examples/TileWithSubtext.tsx +1 -1
  199. package/src/deprecated/components/index.ts +1 -0
  200. package/dist/dynamic/components/Tile/package.json +0 -1
  201. package/dist/esm/components/Tile/Tile.d.ts.map +0 -1
  202. package/dist/esm/components/Tile/Tile.js.map +0 -1
  203. package/dist/esm/components/Tile/index.d.ts.map +0 -1
  204. package/dist/esm/components/Tile/index.js.map +0 -1
  205. package/dist/js/components/Tile/Tile.d.ts.map +0 -1
  206. package/dist/js/components/Tile/Tile.js.map +0 -1
  207. package/dist/js/components/Tile/index.d.ts.map +0 -1
  208. package/dist/js/components/Tile/index.js.map +0 -1
  209. package/src/components/Tile/examples/Tile.md +0 -48
  210. /package/dist/esm/{components → deprecated/components}/Tile/Tile.d.ts +0 -0
  211. /package/dist/esm/{components → deprecated/components}/Tile/Tile.js +0 -0
  212. /package/dist/esm/{components → deprecated/components}/Tile/index.d.ts +0 -0
  213. /package/dist/esm/{components → deprecated/components}/Tile/index.js +0 -0
  214. /package/dist/js/{components → deprecated/components}/Tile/Tile.d.ts +0 -0
  215. /package/dist/js/{components → deprecated/components}/Tile/Tile.js +0 -0
  216. /package/dist/js/{components → deprecated/components}/Tile/index.d.ts +0 -0
  217. /package/dist/js/{components → deprecated/components}/Tile/index.js +0 -0
  218. /package/src/{components → deprecated/components}/Tile/Tile.tsx +0 -0
  219. /package/src/{components → deprecated/components}/Tile/__tests__/Tile.test.tsx +0 -0
  220. /package/src/{components → deprecated/components}/Tile/__tests__/__snapshots__/Tile.test.tsx.snap +0 -0
  221. /package/src/{components → deprecated/components}/Tile/examples/Tile.css +0 -0
  222. /package/src/{components → deprecated/components}/Tile/index.ts +0 -0
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.0.0-prerelease.16","private":true}
1
+ {"name":"@patternfly/react-core-helpers","main":"../dist/js/helpers/index.js","module":"../dist/esm/helpers/index.js","typings":"../dist/esm/helpers/index.d.ts","version":"6.0.0-prerelease.17","private":true}
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.0.0-prerelease.16","private":true}
1
+ {"name":"@patternfly/react-core-layouts","main":"../dist/js/layouts/index.js","module":"../dist/esm/layouts/index.js","typings":"../dist/esm/layouts/index.d.ts","version":"6.0.0-prerelease.17","private":true}
package/next/package.json CHANGED
@@ -1 +1 @@
1
- {"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.0.0-prerelease.16","private":true}
1
+ {"name":"@patternfly/react-core-next","main":"../dist/js/next/index.js","module":"../dist/esm/next/index.js","typings":"../dist/esm/next/index.d.ts","version":"6.0.0-prerelease.17","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "6.0.0-prerelease.17",
3
+ "version": "6.0.0-prerelease.18",
4
4
  "description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
5
5
  "main": "dist/js/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -46,15 +46,15 @@
46
46
  "subpaths": "node ../../scripts/exportSubpaths.mjs --config subpaths.config.json"
47
47
  },
48
48
  "dependencies": {
49
- "@patternfly/react-icons": "^6.0.0-prerelease.5",
50
- "@patternfly/react-styles": "^6.0.0-prerelease.4",
51
- "@patternfly/react-tokens": "^6.0.0-prerelease.5",
49
+ "@patternfly/react-icons": "^6.0.0-prerelease.6",
50
+ "@patternfly/react-styles": "^6.0.0-prerelease.5",
51
+ "@patternfly/react-tokens": "^6.0.0-prerelease.6",
52
52
  "focus-trap": "7.6.0",
53
53
  "react-dropzone": "^14.2.3",
54
54
  "tslib": "^2.7.0"
55
55
  },
56
56
  "devDependencies": {
57
- "@patternfly/patternfly": "6.0.0-prerelease.7",
57
+ "@patternfly/patternfly": "6.0.0-prerelease.13",
58
58
  "case-anything": "^2.1.13",
59
59
  "css": "^3.0.0",
60
60
  "fs-extra": "^11.2.0"
@@ -63,5 +63,5 @@
63
63
  "react": "^17 || ^18",
64
64
  "react-dom": "^17 || ^18"
65
65
  },
66
- "gitHead": "40bed4fdf9e51bb6a22da6ddfb909b9381c2c02c"
66
+ "gitHead": "b9542be42e3708c0e48f4cd5336149cb334b553f"
67
67
  }
@@ -54,6 +54,8 @@ export interface CardHeaderSelectableActionsObject {
54
54
  * the isSelected prop on the card component instead.
55
55
  */
56
56
  isChecked?: boolean;
57
+ /** Flag indicating the action is hidden */
58
+ isHidden?: boolean;
57
59
  }
58
60
 
59
61
  export interface CardHeaderProps extends React.HTMLProps<HTMLDivElement> {
@@ -133,7 +135,8 @@ export const CardHeader: React.FunctionComponent<CardHeaderProps> = ({
133
135
 
134
136
  const SelectableCardInput = selectableActions?.variant === 'single' ? Radio : Checkbox;
135
137
  const getSelectableProps = () => ({
136
- className: 'pf-m-standalone',
138
+ className: css('pf-m-standalone'),
139
+ inputClassName: css(selectableActions?.isHidden && 'pf-v6-screen-reader'),
137
140
  label: <></>,
138
141
  'aria-label': selectableActions.selectableActionAriaLabel,
139
142
  'aria-labelledby': selectableActions.selectableActionAriaLabelledby,
@@ -150,7 +153,11 @@ export const CardHeader: React.FunctionComponent<CardHeaderProps> = ({
150
153
  const getClickableProps = () => {
151
154
  const isDisabledLinkCard = isCardDisabled && isClickableLinkCard;
152
155
  const baseProps = {
153
- className: css('pf-v6-c-card__clickable-action', isDisabledLinkCard && styles.modifiers.disabled),
156
+ className: css(
157
+ 'pf-v6-c-card__clickable-action',
158
+ isDisabledLinkCard && styles.modifiers.disabled,
159
+ selectableActions?.isHidden && 'pf-v6-screen-reader'
160
+ ),
154
161
  id: selectableActions.selectableActionId,
155
162
  'aria-label': selectableActions.selectableActionAriaLabel,
156
163
  'aria-labelledby': selectableActions.selectableActionAriaLabelledby,
@@ -19,6 +19,7 @@ ouia: true
19
19
  import pfLogo from '../../assets/PF-HorizontalLogo-Color.svg';
20
20
  import pfLogoSmall from '../../assets/PF-IconLogo.svg';
21
21
  import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
22
+ import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
22
23
 
23
24
  ## Examples
24
25
 
@@ -178,3 +179,25 @@ Dividers can be placed between sections of the card.
178
179
  ```ts file='./CardWithDividers.tsx'
179
180
 
180
181
  ```
182
+
183
+ ## Cards as tiles
184
+
185
+ Sets of selectable cards can be used as tiles, which are static options that users can select.
186
+
187
+ They can be either single selectable or multi selectable, by passing the `variant` property to the `selectableActions` object. You can also toggle the visibility of the radio or checkbox by passing the `isHidden` property to the `selectableActions` object.
188
+
189
+ ### Single selectable tiles
190
+
191
+ To prevent users from selecting more than 1 tile in a set, set `variant` to "single" within the `selectableActions` object of `<CardHeader>`.
192
+
193
+ ```ts file='./CardTile.tsx'
194
+
195
+ ```
196
+
197
+ ### Multi selectable tiles
198
+
199
+ To allow users to select more than 1 tile in a set, do not set `variant` within the `selectableActions` object of `<CardHeader>`.
200
+
201
+ ```ts file='./CardTileMulti.tsx'
202
+
203
+ ```
@@ -0,0 +1,73 @@
1
+ import React from 'react';
2
+ import { Card, CardHeader, CardBody, Gallery, Flex } from '@patternfly/react-core';
3
+ import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
4
+
5
+ export const CardTile: React.FunctionComponent = () => {
6
+ const [isChecked, setIsChecked] = React.useState('');
7
+ const id1 = 'tile-1';
8
+ const id2 = 'tile-2';
9
+ const id3 = 'tile-3';
10
+
11
+ const onChange = (event: React.FormEvent<HTMLInputElement>) => {
12
+ setIsChecked(event.currentTarget.id);
13
+ };
14
+
15
+ return (
16
+ <Gallery hasGutter>
17
+ <Card id="tile-example-1" isSelectable isSelected={isChecked === id1}>
18
+ <CardHeader
19
+ selectableActions={{
20
+ selectableActionId: id1,
21
+ selectableActionAriaLabelledby: 'tile-example-1',
22
+ name: id1,
23
+ variant: 'single',
24
+ onChange,
25
+ isHidden: true
26
+ }}
27
+ >
28
+ <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>
29
+ <PlusIcon />
30
+ <b>Tile header</b>
31
+ </Flex>
32
+ </CardHeader>
33
+ <CardBody>Tile content and description</CardBody>
34
+ </Card>
35
+ <Card id="tile-example-2" isSelectable isSelected={isChecked === id2}>
36
+ <CardHeader
37
+ selectableActions={{
38
+ selectableActionId: id2,
39
+ selectableActionAriaLabelledby: 'tile-example-2',
40
+ name: id2,
41
+ variant: 'single',
42
+ onChange,
43
+ isHidden: true
44
+ }}
45
+ >
46
+ <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>
47
+ <PlusIcon />
48
+ <b>Tile header</b>
49
+ </Flex>
50
+ </CardHeader>
51
+ <CardBody>Tile content and description</CardBody>
52
+ </Card>
53
+ <Card id="tile-example-3" isSelectable isDisabled isSelected={isChecked === id3}>
54
+ <CardHeader
55
+ selectableActions={{
56
+ selectableActionId: id3,
57
+ selectableActionAriaLabelledby: 'tile-example-3',
58
+ name: id3,
59
+ variant: 'single',
60
+ onChange,
61
+ isHidden: true
62
+ }}
63
+ >
64
+ <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>
65
+ <PlusIcon />
66
+ <b>Tile header (disabled)</b>
67
+ </Flex>
68
+ </CardHeader>
69
+ <CardBody>Tile content and description</CardBody>
70
+ </Card>
71
+ </Gallery>
72
+ );
73
+ };
@@ -0,0 +1,84 @@
1
+ import React from 'react';
2
+ import { Card, CardHeader, CardBody, Gallery, Flex } from '@patternfly/react-core';
3
+ import PlusIcon from '@patternfly/react-icons/dist/esm/icons/plus-icon';
4
+
5
+ export const CardTileMulti: React.FunctionComponent = () => {
6
+ const [isChecked1, setIsChecked1] = React.useState(false);
7
+ const [isChecked2, setIsChecked2] = React.useState(false);
8
+ const [isChecked3, setIsChecked3] = React.useState(false);
9
+ const id1 = 'multi-tile-1';
10
+ const id2 = 'multi-tile-2';
11
+ const id3 = 'multi-tile-3';
12
+
13
+ const onChange = (event: React.FormEvent<HTMLInputElement>, checked: boolean) => {
14
+ const name = event.currentTarget.name;
15
+
16
+ switch (name) {
17
+ case id1:
18
+ setIsChecked1(checked);
19
+ break;
20
+ case id2:
21
+ setIsChecked2(checked);
22
+ break;
23
+ case id3:
24
+ setIsChecked3(checked);
25
+ break;
26
+ }
27
+ };
28
+
29
+ return (
30
+ <Gallery hasGutter>
31
+ <Card id="multi-tile-example-1" isSelectable isSelected={isChecked1}>
32
+ <CardHeader
33
+ selectableActions={{
34
+ selectableActionId: id1,
35
+ selectableActionAriaLabelledby: 'multi-tile-example-1',
36
+ name: id1,
37
+ onChange,
38
+ isHidden: true
39
+ }}
40
+ >
41
+ <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>
42
+ <PlusIcon />
43
+ <b>Tile header</b>
44
+ </Flex>
45
+ </CardHeader>
46
+ <CardBody>Tile content and description</CardBody>
47
+ </Card>
48
+ <Card id="multi-tile-example-2" isSelectable isSelected={isChecked2}>
49
+ <CardHeader
50
+ selectableActions={{
51
+ selectableActionId: id2,
52
+ selectableActionAriaLabelledby: 'multi-tile-example-2',
53
+ name: id2,
54
+ onChange,
55
+ isHidden: true
56
+ }}
57
+ >
58
+ <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>
59
+ <PlusIcon />
60
+ <b>Tile header</b>
61
+ </Flex>
62
+ </CardHeader>
63
+ <CardBody>Tile content and description</CardBody>
64
+ </Card>
65
+ <Card id="multi-tile-example-3" isSelectable isDisabled isSelected={isChecked3}>
66
+ <CardHeader
67
+ selectableActions={{
68
+ selectableActionId: id3,
69
+ selectableActionAriaLabelledby: 'multi-tile-example-3',
70
+ name: id3,
71
+ onChange,
72
+ isHidden: true
73
+ }}
74
+ >
75
+ <Flex gap={{ default: 'gapSm' }} alignItems={{ default: 'alignItemsCenter' }}>
76
+ <PlusIcon />
77
+ <b>Tile header (disabled)</b>
78
+ </Flex>
79
+ </CardHeader>
80
+ <CardBody>Tile content and description</CardBody>
81
+ </Card>
82
+ </Gallery>
83
+ );
84
+ };
@@ -23,8 +23,6 @@ export interface DataListActionProps extends Omit<React.HTMLProps<HTMLDivElement
23
23
  xl?: 'hidden' | 'visible';
24
24
  '2xl'?: 'hidden' | 'visible';
25
25
  };
26
- /** Flag to indicate that the action is a plain button (e.g. kebab dropdown toggle) so that styling is applied to align the button */
27
- isPlainButtonAction?: boolean;
28
26
  }
29
27
 
30
28
  export const DataListAction: React.FunctionComponent<DataListActionProps> = ({
@@ -35,12 +33,10 @@ export const DataListAction: React.FunctionComponent<DataListActionProps> = ({
35
33
  id,
36
34
  'aria-label': ariaLabel,
37
35
  'aria-labelledby': ariaLabelledBy,
38
-
39
- isPlainButtonAction,
40
36
  ...props
41
37
  }: DataListActionProps) => (
42
38
  <div className={css(styles.dataListItemAction, formatBreakpointMods(visibility, styles), className)} {...props}>
43
- {isPlainButtonAction ? <div className={css(styles.dataListAction)}>{children}</div> : children}
39
+ {children}
44
40
  </div>
45
41
  );
46
42
  DataListAction.displayName = 'DataListAction';
@@ -1,5 +1,7 @@
1
1
  import React from 'react';
2
2
  import { render, screen } from '@testing-library/react';
3
+ import '@testing-library/jest-dom';
4
+
3
5
  import { DataListAction } from '../DataListAction';
4
6
 
5
7
  import styles from '@patternfly/react-styles/css/components/DataList/data-list';
@@ -15,38 +17,35 @@ test('Renders to match snapshot', () => {
15
17
 
16
18
  test(`Renders with default class ${styles.dataListItemAction}`, () => {
17
19
  render(
18
- <DataListAction aria-label="Actions" aria-labelledby="ex-action" id="ex-action">
20
+ <DataListAction aria-label="Actions" data-testid="actions" aria-labelledby="ex-action" id="ex-action">
19
21
  test
20
22
  </DataListAction>
21
23
  );
22
- expect(screen.getByText('test')).toHaveClass(styles.dataListItemAction, { exact: true });
24
+ expect(screen.getByTestId('actions')).toHaveClass(styles.dataListItemAction, { exact: true });
23
25
  });
24
26
 
25
27
  test(`Renders with custom class when className is passed`, () => {
26
28
  render(
27
- <DataListAction aria-label="Actions" aria-labelledby="ex-action" id="ex-action" className="test-class">
29
+ <DataListAction
30
+ aria-label="Actions"
31
+ data-testid="actions"
32
+ aria-labelledby="ex-action"
33
+ id="ex-action"
34
+ className="test-class"
35
+ >
28
36
  test
29
37
  </DataListAction>
30
38
  );
31
- expect(screen.getByText('test')).toHaveClass('test-class');
39
+ expect(screen.getByTestId('actions')).toHaveClass('test-class');
32
40
  });
33
41
 
34
42
  test(`Renders with spread props`, () => {
35
43
  render(
36
- <DataListAction dir="rtl" aria-label="Actions" aria-labelledby="ex-action" id="ex-action">
37
- test
38
- </DataListAction>
39
- );
40
- expect(screen.getByText('test')).toHaveAttribute('dir', 'rtl');
41
- });
42
-
43
- test(`Renders with class ${styles.dataListAction} when isPlainButtonAction = true`, () => {
44
- render(
45
- <DataListAction id="id" aria-label="Actions" aria-labelledby="ex-action" isPlainButtonAction>
44
+ <DataListAction dir="rtl" data-testid="actions" aria-label="Actions" aria-labelledby="ex-action" id="ex-action">
46
45
  test
47
46
  </DataListAction>
48
47
  );
49
- expect(screen.getByText('test')).toHaveClass(styles.dataListAction);
48
+ expect(screen.getByTestId('actions')).toHaveAttribute('dir', 'rtl');
50
49
  });
51
50
 
52
51
  ['hidden', 'visible'].forEach((vis) => {
@@ -58,18 +57,19 @@ test(`Renders with class ${styles.dataListAction} when isPlainButtonAction = tru
58
57
  aria-labelledby="check-action-item2 check-action-action2"
59
58
  id="check-action-action2"
60
59
  aria-label="Actions"
60
+ data-testid="actions"
61
61
  >
62
62
  test
63
63
  </DataListAction>
64
64
  );
65
65
 
66
66
  if (visMod === 'hidden') {
67
- expect(screen.getByText('test')).toHaveClass(styles.modifiers[`${visMod}`]);
67
+ expect(screen.getByTestId('actions')).toHaveClass(styles.modifiers[`${visMod}`]);
68
68
  }
69
- expect(screen.getByText('test')).toHaveClass(styles.modifiers[`${visMod}OnSm`]);
70
- expect(screen.getByText('test')).toHaveClass(styles.modifiers[`${visMod}OnMd`]);
71
- expect(screen.getByText('test')).toHaveClass(styles.modifiers[`${visMod}OnLg`]);
72
- expect(screen.getByText('test')).toHaveClass(styles.modifiers[`${visMod}OnXl`]);
73
- expect(screen.getByText('test')).toHaveClass(styles.modifiers[`${visMod}On_2xl`]);
69
+ expect(screen.getByTestId('actions')).toHaveClass(styles.modifiers[`${visMod}OnSm`]);
70
+ expect(screen.getByTestId('actions')).toHaveClass(styles.modifiers[`${visMod}OnMd`]);
71
+ expect(screen.getByTestId('actions')).toHaveClass(styles.modifiers[`${visMod}OnLg`]);
72
+ expect(screen.getByTestId('actions')).toHaveClass(styles.modifiers[`${visMod}OnXl`]);
73
+ expect(screen.getByTestId('actions')).toHaveClass(styles.modifiers[`${visMod}On_2xl`]);
74
74
  });
75
75
  });
@@ -75,7 +75,6 @@ export const DataListActions: React.FunctionComponent = () => {
75
75
  aria-labelledby="multi-actions-item1 multi-actions-action1"
76
76
  id="multi-actions-action1"
77
77
  aria-label="Actions"
78
- isPlainButtonAction
79
78
  >
80
79
  <Dropdown
81
80
  popperProps={{ position: 'right' }}
@@ -73,7 +73,6 @@ export const DataListCheckboxes: React.FunctionComponent = () => {
73
73
  aria-labelledby="check-action-item1 check-action-action1"
74
74
  id="check-action-action1"
75
75
  aria-label="Actions"
76
- isPlainButtonAction
77
76
  >
78
77
  <Dropdown
79
78
  popperProps={{ position: 'right' }}
@@ -129,7 +128,6 @@ export const DataListCheckboxes: React.FunctionComponent = () => {
129
128
  aria-labelledby="check-action-item2 check-action-action2"
130
129
  id="check-action-action2"
131
130
  aria-label="Actions"
132
- isPlainButtonAction
133
131
  >
134
132
  <Dropdown
135
133
  popperProps={{ position: 'right' }}
@@ -194,7 +192,6 @@ export const DataListCheckboxes: React.FunctionComponent = () => {
194
192
  aria-labelledby="check-action-item3 check-action-action3"
195
193
  id="check-action-action3"
196
194
  aria-label="Actions"
197
- isPlainButtonAction
198
195
  >
199
196
  <Dropdown
200
197
  popperProps={{ position: 'right' }}
@@ -65,7 +65,6 @@ export const DataListClickableRows: React.FunctionComponent = () => {
65
65
  aria-labelledby="clickable-action-item1 clickable-action-action1"
66
66
  id="clickable-action-action1"
67
67
  aria-label="Actions"
68
- isPlainButtonAction
69
68
  >
70
69
  <Dropdown
71
70
  popperProps={{ position: 'right' }}
@@ -116,7 +115,6 @@ export const DataListClickableRows: React.FunctionComponent = () => {
116
115
  aria-labelledby="clickable-actions-item2 clickable-actions-action2"
117
116
  id="clickable-actions-action2"
118
117
  aria-label="Actions"
119
- isPlainButtonAction
120
118
  >
121
119
  <Dropdown
122
120
  popperProps={{ position: 'right' }}
@@ -81,12 +81,7 @@ export const DataListExpandable: React.FunctionComponent = () => {
81
81
  </DataListCell>
82
82
  ]}
83
83
  />
84
- <DataListAction
85
- aria-labelledby="ex-item1 ex-action1"
86
- id="ex-action1"
87
- aria-label="Actions"
88
- isPlainButtonAction
89
- >
84
+ <DataListAction aria-labelledby="ex-item1 ex-action1" id="ex-action1" aria-label="Actions">
90
85
  <Dropdown
91
86
  popperProps={{ position: 'right' }}
92
87
  onSelect={onSelect1}
@@ -157,12 +152,7 @@ export const DataListExpandable: React.FunctionComponent = () => {
157
152
  </DataListCell>
158
153
  ]}
159
154
  />
160
- <DataListAction
161
- aria-labelledby="ex-item2 ex-action2"
162
- id="ex-action2"
163
- aria-label="Actions"
164
- isPlainButtonAction
165
- >
155
+ <DataListAction aria-labelledby="ex-item2 ex-action2" id="ex-action2" aria-label="Actions">
166
156
  <Dropdown
167
157
  popperProps={{ position: 'right' }}
168
158
  onSelect={onSelect2}
@@ -233,12 +223,7 @@ export const DataListExpandable: React.FunctionComponent = () => {
233
223
  </DataListCell>
234
224
  ]}
235
225
  />
236
- <DataListAction
237
- aria-labelledby="ex-item3 ex-action3"
238
- id="ex-action3"
239
- aria-label="Actions"
240
- isPlainButtonAction
241
- >
226
+ <DataListAction aria-labelledby="ex-item3 ex-action3" id="ex-action3" aria-label="Actions">
242
227
  <Dropdown
243
228
  popperProps={{ position: 'right' }}
244
229
  onSelect={onSelect3}
@@ -83,12 +83,7 @@ export const DataListMixedExpandable: React.FunctionComponent = () => {
83
83
  </DataListCell>
84
84
  ]}
85
85
  />
86
- <DataListAction
87
- aria-labelledby="m-ex-item1 m-ex-action1"
88
- id="m-ex-action1"
89
- aria-label="Actions"
90
- isPlainButtonAction
91
- >
86
+ <DataListAction aria-labelledby="m-ex-item1 m-ex-action1" id="m-ex-action1" aria-label="Actions">
92
87
  <Dropdown
93
88
  popperProps={{ position: 'right' }}
94
89
  onSelect={onSelect1}
@@ -161,12 +156,7 @@ export const DataListMixedExpandable: React.FunctionComponent = () => {
161
156
  </DataListCell>
162
157
  ]}
163
158
  />
164
- <DataListAction
165
- aria-labelledby="m-ex-item2 m-ex-action2"
166
- id="m-ex-action2"
167
- aria-label="Actions"
168
- isPlainButtonAction
169
- >
159
+ <DataListAction aria-labelledby="m-ex-item2 m-ex-action2" id="m-ex-action2" aria-label="Actions">
170
160
  <Dropdown
171
161
  popperProps={{ position: 'right' }}
172
162
  onSelect={onSelect2}
@@ -227,12 +217,7 @@ export const DataListMixedExpandable: React.FunctionComponent = () => {
227
217
  </DataListCell>
228
218
  ]}
229
219
  />
230
- <DataListAction
231
- aria-labelledby="m-ex-item3 m-ex-action3"
232
- id="m-ex-action3"
233
- aria-label="Actions"
234
- isPlainButtonAction
235
- >
220
+ <DataListAction aria-labelledby="m-ex-item3 m-ex-action3" id="m-ex-action3" aria-label="Actions">
236
221
  <Dropdown
237
222
  popperProps={{ position: 'right' }}
238
223
  onSelect={onSelect3}
@@ -92,7 +92,6 @@ export const DataListWidthModifiers: React.FunctionComponent = () => {
92
92
  aria-labelledby="width-ex2-item1 width-ex2-action1"
93
93
  id="width-ex2-action1"
94
94
  aria-label="Actions"
95
- isPlainButtonAction
96
95
  >
97
96
  <Dropdown
98
97
  popperProps={{ position: 'right' }}
@@ -167,7 +166,6 @@ export const DataListWidthModifiers: React.FunctionComponent = () => {
167
166
  aria-labelledby="width-ex3-item1 width-ex3-action1"
168
167
  id="width-ex3-action1"
169
168
  aria-label="Actions"
170
- isPlainButtonAction
171
169
  >
172
170
  <Dropdown
173
171
  popperProps={{ position: 'right' }}
@@ -113,7 +113,7 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
113
113
  'li button:not(:disabled),li input:not(:disabled),li a:not([aria-disabled="true"])'
114
114
  );
115
115
  firstElement && (firstElement as HTMLElement).focus();
116
- }, 0);
116
+ }, 10);
117
117
  }
118
118
 
119
119
  prevIsOpen.current = isOpen;
@@ -65,7 +65,7 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
65
65
  'li button:not(:disabled),li input:not(:disabled),li a:not([aria-disabled="true"])'
66
66
  );
67
67
  firstElement && (firstElement as HTMLElement).focus();
68
- }, 0);
68
+ }, 10);
69
69
  }
70
70
 
71
71
  prevIsOpen.current = isOpen;
@@ -117,7 +117,7 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
117
117
  setTimeout(() => {
118
118
  const firstElement = menuRef?.current?.querySelector('li button:not(:disabled),li input:not(:disabled)');
119
119
  firstElement && (firstElement as HTMLElement).focus();
120
- }, 0);
120
+ }, 10);
121
121
  }
122
122
 
123
123
  prevIsOpen.current = isOpen;
@@ -65,7 +65,6 @@ export * from './Switch';
65
65
  export * from './Tabs';
66
66
  export * from './TextArea';
67
67
  export * from './TextInput';
68
- export * from './Tile';
69
68
  export * from './TimePicker';
70
69
  export * from './Timestamp';
71
70
  export * from './Title';
@@ -169,12 +169,7 @@ export const DataListExpandableControlInToolbar: React.FunctionComponent = () =>
169
169
  </DataListCell>
170
170
  ]}
171
171
  />
172
- <DataListAction
173
- aria-labelledby="ex-item1 ex-action1"
174
- id="ex-action1"
175
- aria-label="Actions"
176
- isPlainButtonAction
177
- >
172
+ <DataListAction aria-labelledby="ex-item1 ex-action1" id="ex-action1" aria-label="Actions">
178
173
  <Dropdown
179
174
  isOpen={isOpen1}
180
175
  onSelect={onSelect1}
@@ -251,12 +246,7 @@ export const DataListExpandableControlInToolbar: React.FunctionComponent = () =>
251
246
  </DataListCell>
252
247
  ]}
253
248
  />
254
- <DataListAction
255
- aria-labelledby="ex-item2 ex-action2"
256
- id="ex-action2"
257
- aria-label="Actions"
258
- isPlainButtonAction
259
- >
249
+ <DataListAction aria-labelledby="ex-item2 ex-action2" id="ex-action2" aria-label="Actions">
260
250
  <Dropdown
261
251
  isOpen={isOpen2}
262
252
  onSelect={onSelect2}
@@ -333,12 +323,7 @@ export const DataListExpandableControlInToolbar: React.FunctionComponent = () =>
333
323
  </DataListCell>
334
324
  ]}
335
325
  />
336
- <DataListAction
337
- aria-labelledby="ex-item3 ex-action3"
338
- id="ex-action3"
339
- aria-label="Actions"
340
- isPlainButtonAction
341
- >
326
+ <DataListAction aria-labelledby="ex-item3 ex-action3" id="ex-action3" aria-label="Actions">
342
327
  <Dropdown
343
328
  isOpen={isOpen3}
344
329
  onSelect={onSelect3}