@patternfly/react-core 6.3.0-prerelease.8 → 6.3.0

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 (510) hide show
  1. package/CHANGELOG.md +151 -0
  2. package/CONTRIBUTING.md +3 -5
  3. package/components/package.json +1 -1
  4. package/deprecated/package.json +1 -1
  5. package/dist/dynamic/components/AboutModal/package.json +1 -1
  6. package/dist/dynamic/components/Accordion/package.json +1 -1
  7. package/dist/dynamic/components/ActionList/package.json +1 -1
  8. package/dist/dynamic/components/Alert/package.json +1 -1
  9. package/dist/dynamic/components/Avatar/package.json +1 -1
  10. package/dist/dynamic/components/BackToTop/package.json +1 -1
  11. package/dist/dynamic/components/Backdrop/package.json +1 -1
  12. package/dist/dynamic/components/BackgroundImage/package.json +1 -1
  13. package/dist/dynamic/components/Badge/package.json +1 -1
  14. package/dist/dynamic/components/Banner/package.json +1 -1
  15. package/dist/dynamic/components/Brand/package.json +1 -1
  16. package/dist/dynamic/components/Breadcrumb/package.json +1 -1
  17. package/dist/dynamic/components/Button/package.json +1 -1
  18. package/dist/dynamic/components/CalendarMonth/package.json +1 -1
  19. package/dist/dynamic/components/Card/package.json +1 -1
  20. package/dist/dynamic/components/Checkbox/package.json +1 -1
  21. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  22. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  23. package/dist/dynamic/components/Content/package.json +1 -1
  24. package/dist/dynamic/components/DataList/package.json +1 -1
  25. package/dist/dynamic/components/DatePicker/package.json +1 -1
  26. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  27. package/dist/dynamic/components/Divider/package.json +1 -1
  28. package/dist/dynamic/components/Drawer/package.json +1 -1
  29. package/dist/dynamic/components/Dropdown/package.json +1 -1
  30. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  31. package/dist/dynamic/components/EmptyState/package.json +1 -1
  32. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  33. package/dist/dynamic/components/FileUpload/package.json +1 -1
  34. package/dist/dynamic/components/Form/package.json +1 -1
  35. package/dist/dynamic/components/FormSelect/package.json +1 -1
  36. package/dist/dynamic/components/HelperText/package.json +1 -1
  37. package/dist/dynamic/components/Hint/package.json +1 -1
  38. package/dist/dynamic/components/Icon/package.json +1 -1
  39. package/dist/dynamic/components/InputGroup/package.json +1 -1
  40. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  41. package/dist/dynamic/components/Label/package.json +1 -1
  42. package/dist/dynamic/components/List/package.json +1 -1
  43. package/dist/dynamic/components/LoginPage/package.json +1 -1
  44. package/dist/dynamic/components/Masthead/package.json +1 -1
  45. package/dist/dynamic/components/Menu/package.json +1 -1
  46. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  47. package/dist/dynamic/components/Modal/package.json +1 -1
  48. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  49. package/dist/dynamic/components/Nav/package.json +1 -1
  50. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  51. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  52. package/dist/dynamic/components/NumberInput/package.json +1 -1
  53. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  54. package/dist/dynamic/components/Page/package.json +1 -1
  55. package/dist/dynamic/components/Pagination/package.json +1 -1
  56. package/dist/dynamic/components/Panel/package.json +1 -1
  57. package/dist/dynamic/components/Popover/package.json +1 -1
  58. package/dist/dynamic/components/Progress/package.json +1 -1
  59. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  60. package/dist/dynamic/components/Radio/package.json +1 -1
  61. package/dist/dynamic/components/SearchInput/package.json +1 -1
  62. package/dist/dynamic/components/Select/package.json +1 -1
  63. package/dist/dynamic/components/Sidebar/package.json +1 -1
  64. package/dist/dynamic/components/SimpleList/package.json +1 -1
  65. package/dist/dynamic/components/Skeleton/package.json +1 -1
  66. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  67. package/dist/dynamic/components/Slider/package.json +1 -1
  68. package/dist/dynamic/components/Spinner/package.json +1 -1
  69. package/dist/dynamic/components/Switch/package.json +1 -1
  70. package/dist/dynamic/components/Tabs/package.json +1 -1
  71. package/dist/dynamic/components/TextArea/package.json +1 -1
  72. package/dist/dynamic/components/TextInput/package.json +1 -1
  73. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  74. package/dist/dynamic/components/TimePicker/package.json +1 -1
  75. package/dist/dynamic/components/Timestamp/package.json +1 -1
  76. package/dist/dynamic/components/Title/package.json +1 -1
  77. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  78. package/dist/dynamic/components/Toolbar/package.json +1 -1
  79. package/dist/dynamic/components/Tooltip/package.json +1 -1
  80. package/dist/dynamic/components/TreeView/package.json +1 -1
  81. package/dist/dynamic/components/Truncate/package.json +1 -1
  82. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  83. package/dist/dynamic/components/Wizard/package.json +1 -1
  84. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/package.json +1 -1
  91. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  92. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  93. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  94. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  95. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  96. package/dist/dynamic/helpers/constants/package.json +1 -1
  97. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  98. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  99. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  100. package/dist/dynamic/helpers/package.json +1 -1
  101. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  102. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  103. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  104. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  105. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  106. package/dist/dynamic/helpers/util/package.json +1 -1
  107. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  108. package/dist/dynamic/layouts/Flex/package.json +1 -1
  109. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  110. package/dist/dynamic/layouts/Grid/package.json +1 -1
  111. package/dist/dynamic/layouts/Level/package.json +1 -1
  112. package/dist/dynamic/layouts/Split/package.json +1 -1
  113. package/dist/dynamic/layouts/Stack/package.json +1 -1
  114. package/dist/dynamic/styles/package.json +1 -1
  115. package/dist/dynamic-modules.json +2 -0
  116. package/dist/esm/components/Alert/AlertGroupInline.d.ts.map +1 -1
  117. package/dist/esm/components/Alert/AlertGroupInline.js +7 -1
  118. package/dist/esm/components/Alert/AlertGroupInline.js.map +1 -1
  119. package/dist/esm/components/Button/Button.d.ts +12 -0
  120. package/dist/esm/components/Button/Button.d.ts.map +1 -1
  121. package/dist/esm/components/Button/Button.js +33 -3
  122. package/dist/esm/components/Button/Button.js.map +1 -1
  123. package/dist/esm/components/Button/hamburgerIcon.d.ts +2 -0
  124. package/dist/esm/components/Button/hamburgerIcon.d.ts.map +1 -0
  125. package/dist/esm/components/Button/hamburgerIcon.js +7 -0
  126. package/dist/esm/components/Button/hamburgerIcon.js.map +1 -0
  127. package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
  128. package/dist/esm/components/ClipboardCopy/ClipboardCopy.js +2 -2
  129. package/dist/esm/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
  130. package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.js +1 -1
  131. package/dist/esm/components/ClipboardCopy/ClipboardCopyToggle.js.map +1 -1
  132. package/dist/esm/components/DualListSelector/DualListSelector.d.ts +5 -0
  133. package/dist/esm/components/DualListSelector/DualListSelector.d.ts.map +1 -1
  134. package/dist/esm/components/DualListSelector/DualListSelector.js +4 -3
  135. package/dist/esm/components/DualListSelector/DualListSelector.js.map +1 -1
  136. package/dist/esm/components/DualListSelector/DualListSelectorContext.d.ts +1 -0
  137. package/dist/esm/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -1
  138. package/dist/esm/components/DualListSelector/DualListSelectorContext.js +1 -1
  139. package/dist/esm/components/DualListSelector/DualListSelectorContext.js.map +1 -1
  140. package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -1
  141. package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.js +1 -1
  142. package/dist/esm/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -1
  143. package/dist/esm/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -1
  144. package/dist/esm/components/DualListSelector/DualListSelectorTree.js +4 -1
  145. package/dist/esm/components/DualListSelector/DualListSelectorTree.js.map +1 -1
  146. package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.d.ts +5 -0
  147. package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -1
  148. package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.js +8 -4
  149. package/dist/esm/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -1
  150. package/dist/esm/components/ExpandableSection/ExpandableSection.d.ts +5 -1
  151. package/dist/esm/components/ExpandableSection/ExpandableSection.d.ts.map +1 -1
  152. package/dist/esm/components/ExpandableSection/ExpandableSection.js +6 -2
  153. package/dist/esm/components/ExpandableSection/ExpandableSection.js.map +1 -1
  154. package/dist/esm/components/ExpandableSection/ExpandableSectionToggle.d.ts +2 -0
  155. package/dist/esm/components/ExpandableSection/ExpandableSectionToggle.d.ts.map +1 -1
  156. package/dist/esm/components/ExpandableSection/ExpandableSectionToggle.js +4 -3
  157. package/dist/esm/components/ExpandableSection/ExpandableSectionToggle.js.map +1 -1
  158. package/dist/esm/components/Form/FormFieldGroupExpandable.d.ts +5 -0
  159. package/dist/esm/components/Form/FormFieldGroupExpandable.d.ts.map +1 -1
  160. package/dist/esm/components/Form/FormFieldGroupExpandable.js +2 -2
  161. package/dist/esm/components/Form/FormFieldGroupExpandable.js.map +1 -1
  162. package/dist/esm/components/Form/InternalFormFieldGroup.d.ts +5 -0
  163. package/dist/esm/components/Form/InternalFormFieldGroup.d.ts.map +1 -1
  164. package/dist/esm/components/Form/InternalFormFieldGroup.js +2 -2
  165. package/dist/esm/components/Form/InternalFormFieldGroup.js.map +1 -1
  166. package/dist/esm/components/Label/Label.js +57 -57
  167. package/dist/esm/components/Label/Label.js.map +1 -1
  168. package/dist/esm/components/Menu/Menu.js +3 -3
  169. package/dist/esm/components/Menu/Menu.js.map +1 -1
  170. package/dist/esm/components/MenuToggle/MenuToggle.d.ts +2 -0
  171. package/dist/esm/components/MenuToggle/MenuToggle.d.ts.map +1 -1
  172. package/dist/esm/components/MenuToggle/MenuToggle.js +4 -3
  173. package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
  174. package/dist/esm/components/Nav/NavExpandable.d.ts.map +1 -1
  175. package/dist/esm/components/Nav/NavExpandable.js +1 -1
  176. package/dist/esm/components/Nav/NavExpandable.js.map +1 -1
  177. package/dist/esm/components/Page/PageToggleButton.d.ts +4 -0
  178. package/dist/esm/components/Page/PageToggleButton.d.ts.map +1 -1
  179. package/dist/esm/components/Page/PageToggleButton.js +2 -2
  180. package/dist/esm/components/Page/PageToggleButton.js.map +1 -1
  181. package/dist/esm/components/Popover/Popover.d.ts.map +1 -1
  182. package/dist/esm/components/Popover/Popover.js +11 -1
  183. package/dist/esm/components/Popover/Popover.js.map +1 -1
  184. package/dist/esm/components/SearchInput/AdvancedSearchMenu.d.ts.map +1 -1
  185. package/dist/esm/components/SearchInput/AdvancedSearchMenu.js +13 -19
  186. package/dist/esm/components/SearchInput/AdvancedSearchMenu.js.map +1 -1
  187. package/dist/esm/components/SearchInput/SearchInput.d.ts +4 -0
  188. package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
  189. package/dist/esm/components/SearchInput/SearchInput.js +37 -13
  190. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  191. package/dist/esm/components/Tabs/OverflowTab.d.ts +26 -0
  192. package/dist/esm/components/Tabs/OverflowTab.d.ts.map +1 -1
  193. package/dist/esm/components/Tabs/OverflowTab.js +2 -2
  194. package/dist/esm/components/Tabs/OverflowTab.js.map +1 -1
  195. package/dist/esm/components/Tabs/Tab.d.ts.map +1 -1
  196. package/dist/esm/components/Tabs/Tab.js +5 -2
  197. package/dist/esm/components/Tabs/Tab.js.map +1 -1
  198. package/dist/esm/components/Tabs/Tabs.d.ts +10 -0
  199. package/dist/esm/components/Tabs/Tabs.d.ts.map +1 -1
  200. package/dist/esm/components/Tabs/Tabs.js +46 -12
  201. package/dist/esm/components/Tabs/Tabs.js.map +1 -1
  202. package/dist/esm/components/Tabs/TabsContext.d.ts +1 -0
  203. package/dist/esm/components/Tabs/TabsContext.d.ts.map +1 -1
  204. package/dist/esm/components/Tabs/TabsContext.js +1 -0
  205. package/dist/esm/components/Tabs/TabsContext.js.map +1 -1
  206. package/dist/esm/components/TreeView/TreeView.d.ts +5 -0
  207. package/dist/esm/components/TreeView/TreeView.d.ts.map +1 -1
  208. package/dist/esm/components/TreeView/TreeView.js +5 -5
  209. package/dist/esm/components/TreeView/TreeView.js.map +1 -1
  210. package/dist/esm/components/TreeView/TreeViewListItem.d.ts +5 -0
  211. package/dist/esm/components/TreeView/TreeViewListItem.d.ts.map +1 -1
  212. package/dist/esm/components/TreeView/TreeViewListItem.js +8 -4
  213. package/dist/esm/components/TreeView/TreeViewListItem.js.map +1 -1
  214. package/dist/esm/components/TreeView/TreeViewRoot.d.ts.map +1 -1
  215. package/dist/esm/components/TreeView/TreeViewRoot.js +2 -2
  216. package/dist/esm/components/TreeView/TreeViewRoot.js.map +1 -1
  217. package/dist/esm/components/Truncate/Truncate.d.ts +11 -8
  218. package/dist/esm/components/Truncate/Truncate.d.ts.map +1 -1
  219. package/dist/esm/components/Truncate/Truncate.js +16 -9
  220. package/dist/esm/components/Truncate/Truncate.js.map +1 -1
  221. package/dist/esm/demos/DashboardHeader.d.ts.map +1 -1
  222. package/dist/esm/demos/DashboardHeader.js +1 -2
  223. package/dist/esm/demos/DashboardHeader.js.map +1 -1
  224. package/dist/esm/demos/sampleData.d.ts.map +1 -1
  225. package/dist/esm/demos/sampleData.js +225 -226
  226. package/dist/esm/demos/sampleData.js.map +1 -1
  227. package/dist/esm/demos/sampleDataRTL.d.ts +7 -0
  228. package/dist/esm/demos/sampleDataRTL.d.ts.map +1 -0
  229. package/dist/esm/demos/sampleDataRTL.js +128 -0
  230. package/dist/esm/demos/sampleDataRTL.js.map +1 -0
  231. package/dist/esm/helpers/KeyboardHandler.js +3 -2
  232. package/dist/esm/helpers/KeyboardHandler.js.map +1 -1
  233. package/dist/esm/helpers/Popper/Popper.d.ts.map +1 -1
  234. package/dist/esm/helpers/Popper/Popper.js +1 -0
  235. package/dist/esm/helpers/Popper/Popper.js.map +1 -1
  236. package/dist/esm/helpers/util.d.ts +17 -0
  237. package/dist/esm/helpers/util.d.ts.map +1 -1
  238. package/dist/esm/helpers/util.js +36 -0
  239. package/dist/esm/helpers/util.js.map +1 -1
  240. package/dist/js/components/Alert/AlertGroupInline.d.ts.map +1 -1
  241. package/dist/js/components/Alert/AlertGroupInline.js +6 -0
  242. package/dist/js/components/Alert/AlertGroupInline.js.map +1 -1
  243. package/dist/js/components/Button/Button.d.ts +12 -0
  244. package/dist/js/components/Button/Button.d.ts.map +1 -1
  245. package/dist/js/components/Button/Button.js +33 -3
  246. package/dist/js/components/Button/Button.js.map +1 -1
  247. package/dist/js/components/Button/hamburgerIcon.d.ts +2 -0
  248. package/dist/js/components/Button/hamburgerIcon.d.ts.map +1 -0
  249. package/dist/js/components/Button/hamburgerIcon.js +11 -0
  250. package/dist/js/components/Button/hamburgerIcon.js.map +1 -0
  251. package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
  252. package/dist/js/components/ClipboardCopy/ClipboardCopy.js +2 -2
  253. package/dist/js/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
  254. package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.js +1 -1
  255. package/dist/js/components/ClipboardCopy/ClipboardCopyToggle.js.map +1 -1
  256. package/dist/js/components/DualListSelector/DualListSelector.d.ts +5 -0
  257. package/dist/js/components/DualListSelector/DualListSelector.d.ts.map +1 -1
  258. package/dist/js/components/DualListSelector/DualListSelector.js +4 -3
  259. package/dist/js/components/DualListSelector/DualListSelector.js.map +1 -1
  260. package/dist/js/components/DualListSelector/DualListSelectorContext.d.ts +1 -0
  261. package/dist/js/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -1
  262. package/dist/js/components/DualListSelector/DualListSelectorContext.js +1 -1
  263. package/dist/js/components/DualListSelector/DualListSelectorContext.js.map +1 -1
  264. package/dist/js/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -1
  265. package/dist/js/components/DualListSelector/DualListSelectorListWrapper.js +1 -1
  266. package/dist/js/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -1
  267. package/dist/js/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -1
  268. package/dist/js/components/DualListSelector/DualListSelectorTree.js +4 -1
  269. package/dist/js/components/DualListSelector/DualListSelectorTree.js.map +1 -1
  270. package/dist/js/components/DualListSelector/DualListSelectorTreeItem.d.ts +5 -0
  271. package/dist/js/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -1
  272. package/dist/js/components/DualListSelector/DualListSelectorTreeItem.js +7 -3
  273. package/dist/js/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -1
  274. package/dist/js/components/ExpandableSection/ExpandableSection.d.ts +5 -1
  275. package/dist/js/components/ExpandableSection/ExpandableSection.d.ts.map +1 -1
  276. package/dist/js/components/ExpandableSection/ExpandableSection.js +6 -2
  277. package/dist/js/components/ExpandableSection/ExpandableSection.js.map +1 -1
  278. package/dist/js/components/ExpandableSection/ExpandableSectionToggle.d.ts +2 -0
  279. package/dist/js/components/ExpandableSection/ExpandableSectionToggle.d.ts.map +1 -1
  280. package/dist/js/components/ExpandableSection/ExpandableSectionToggle.js +4 -3
  281. package/dist/js/components/ExpandableSection/ExpandableSectionToggle.js.map +1 -1
  282. package/dist/js/components/Form/FormFieldGroupExpandable.d.ts +5 -0
  283. package/dist/js/components/Form/FormFieldGroupExpandable.d.ts.map +1 -1
  284. package/dist/js/components/Form/FormFieldGroupExpandable.js +2 -2
  285. package/dist/js/components/Form/FormFieldGroupExpandable.js.map +1 -1
  286. package/dist/js/components/Form/InternalFormFieldGroup.d.ts +5 -0
  287. package/dist/js/components/Form/InternalFormFieldGroup.d.ts.map +1 -1
  288. package/dist/js/components/Form/InternalFormFieldGroup.js +2 -2
  289. package/dist/js/components/Form/InternalFormFieldGroup.js.map +1 -1
  290. package/dist/js/components/Label/Label.js +57 -57
  291. package/dist/js/components/Label/Label.js.map +1 -1
  292. package/dist/js/components/Menu/Menu.js +3 -3
  293. package/dist/js/components/Menu/Menu.js.map +1 -1
  294. package/dist/js/components/MenuToggle/MenuToggle.d.ts +2 -0
  295. package/dist/js/components/MenuToggle/MenuToggle.d.ts.map +1 -1
  296. package/dist/js/components/MenuToggle/MenuToggle.js +4 -3
  297. package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
  298. package/dist/js/components/Nav/NavExpandable.d.ts.map +1 -1
  299. package/dist/js/components/Nav/NavExpandable.js +1 -1
  300. package/dist/js/components/Nav/NavExpandable.js.map +1 -1
  301. package/dist/js/components/Page/PageToggleButton.d.ts +4 -0
  302. package/dist/js/components/Page/PageToggleButton.d.ts.map +1 -1
  303. package/dist/js/components/Page/PageToggleButton.js +2 -2
  304. package/dist/js/components/Page/PageToggleButton.js.map +1 -1
  305. package/dist/js/components/Popover/Popover.d.ts.map +1 -1
  306. package/dist/js/components/Popover/Popover.js +11 -1
  307. package/dist/js/components/Popover/Popover.js.map +1 -1
  308. package/dist/js/components/SearchInput/AdvancedSearchMenu.d.ts.map +1 -1
  309. package/dist/js/components/SearchInput/AdvancedSearchMenu.js +12 -18
  310. package/dist/js/components/SearchInput/AdvancedSearchMenu.js.map +1 -1
  311. package/dist/js/components/SearchInput/SearchInput.d.ts +4 -0
  312. package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
  313. package/dist/js/components/SearchInput/SearchInput.js +36 -12
  314. package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
  315. package/dist/js/components/Tabs/OverflowTab.d.ts +26 -0
  316. package/dist/js/components/Tabs/OverflowTab.d.ts.map +1 -1
  317. package/dist/js/components/Tabs/OverflowTab.js +2 -2
  318. package/dist/js/components/Tabs/OverflowTab.js.map +1 -1
  319. package/dist/js/components/Tabs/Tab.d.ts.map +1 -1
  320. package/dist/js/components/Tabs/Tab.js +4 -1
  321. package/dist/js/components/Tabs/Tab.js.map +1 -1
  322. package/dist/js/components/Tabs/Tabs.d.ts +10 -0
  323. package/dist/js/components/Tabs/Tabs.d.ts.map +1 -1
  324. package/dist/js/components/Tabs/Tabs.js +45 -11
  325. package/dist/js/components/Tabs/Tabs.js.map +1 -1
  326. package/dist/js/components/Tabs/TabsContext.d.ts +1 -0
  327. package/dist/js/components/Tabs/TabsContext.d.ts.map +1 -1
  328. package/dist/js/components/Tabs/TabsContext.js +1 -0
  329. package/dist/js/components/Tabs/TabsContext.js.map +1 -1
  330. package/dist/js/components/TreeView/TreeView.d.ts +5 -0
  331. package/dist/js/components/TreeView/TreeView.d.ts.map +1 -1
  332. package/dist/js/components/TreeView/TreeView.js +5 -5
  333. package/dist/js/components/TreeView/TreeView.js.map +1 -1
  334. package/dist/js/components/TreeView/TreeViewListItem.d.ts +5 -0
  335. package/dist/js/components/TreeView/TreeViewListItem.d.ts.map +1 -1
  336. package/dist/js/components/TreeView/TreeViewListItem.js +7 -3
  337. package/dist/js/components/TreeView/TreeViewListItem.js.map +1 -1
  338. package/dist/js/components/TreeView/TreeViewRoot.d.ts.map +1 -1
  339. package/dist/js/components/TreeView/TreeViewRoot.js +2 -2
  340. package/dist/js/components/TreeView/TreeViewRoot.js.map +1 -1
  341. package/dist/js/components/Truncate/Truncate.d.ts +11 -8
  342. package/dist/js/components/Truncate/Truncate.d.ts.map +1 -1
  343. package/dist/js/components/Truncate/Truncate.js +15 -9
  344. package/dist/js/components/Truncate/Truncate.js.map +1 -1
  345. package/dist/js/demos/DashboardHeader.d.ts.map +1 -1
  346. package/dist/js/demos/DashboardHeader.js +1 -2
  347. package/dist/js/demos/DashboardHeader.js.map +1 -1
  348. package/dist/js/demos/sampleData.d.ts.map +1 -1
  349. package/dist/js/demos/sampleData.js +225 -226
  350. package/dist/js/demos/sampleData.js.map +1 -1
  351. package/dist/js/demos/sampleDataRTL.d.ts +7 -0
  352. package/dist/js/demos/sampleDataRTL.d.ts.map +1 -0
  353. package/dist/js/demos/sampleDataRTL.js +131 -0
  354. package/dist/js/demos/sampleDataRTL.js.map +1 -0
  355. package/dist/js/helpers/KeyboardHandler.js +3 -2
  356. package/dist/js/helpers/KeyboardHandler.js.map +1 -1
  357. package/dist/js/helpers/Popper/Popper.d.ts.map +1 -1
  358. package/dist/js/helpers/Popper/Popper.js +1 -0
  359. package/dist/js/helpers/Popper/Popper.js.map +1 -1
  360. package/dist/js/helpers/util.d.ts +17 -0
  361. package/dist/js/helpers/util.d.ts.map +1 -1
  362. package/dist/js/helpers/util.js +39 -1
  363. package/dist/js/helpers/util.js.map +1 -1
  364. package/dist/styles/assets/images/icon-help.hbs +3 -0
  365. package/dist/styles/assets/images/icon-outlined-star.hbs +3 -0
  366. package/dist/styles/assets/images/icon-star.hbs +3 -0
  367. package/dist/styles/base-no-reset.css +52 -11
  368. package/dist/styles/base.css +52 -11
  369. package/dist/umd/assets/{output-B5tbNQwm.css → output-BvTy70LD.css} +15500 -14758
  370. package/dist/umd/react-core.min.js +3 -3
  371. package/helpers/package.json +1 -1
  372. package/layouts/package.json +1 -1
  373. package/next/package.json +1 -1
  374. package/package.json +6 -6
  375. package/src/components/Alert/AlertGroupInline.tsx +13 -2
  376. package/src/components/Button/Button.tsx +78 -5
  377. package/src/components/Button/__tests__/Button.test.tsx +380 -74
  378. package/src/components/Button/__tests__/__snapshots__/Button.test.tsx.snap +1 -1
  379. package/src/components/Button/examples/Button.md +57 -14
  380. package/src/components/Button/examples/ButtonFavorite.tsx +18 -0
  381. package/src/components/Button/examples/ButtonHamburger.tsx +9 -0
  382. package/src/components/Button/examples/ButtonSettings.tsx +10 -0
  383. package/src/components/Button/hamburgerIcon.tsx +13 -0
  384. package/src/components/Card/examples/Card.md +1 -1
  385. package/src/components/Card/examples/CardSelectable.tsx +73 -60
  386. package/src/components/Card/examples/CardSingleSelectable.tsx +65 -48
  387. package/src/components/ClipboardCopy/ClipboardCopy.tsx +2 -1
  388. package/src/components/ClipboardCopy/ClipboardCopyToggle.tsx +1 -1
  389. package/src/components/ClipboardCopy/__tests__/ClipboardCopyToggle.test.tsx +7 -1
  390. package/src/components/ClipboardCopy/__tests__/__snapshots__/ClipboardCopyToggle.test.tsx.snap +0 -1
  391. package/src/components/DualListSelector/DualListSelector.tsx +18 -4
  392. package/src/components/DualListSelector/DualListSelectorContext.ts +2 -1
  393. package/src/components/DualListSelector/DualListSelectorListWrapper.tsx +8 -5
  394. package/src/components/DualListSelector/DualListSelectorTree.tsx +4 -0
  395. package/src/components/DualListSelector/DualListSelectorTreeItem.tsx +17 -2
  396. package/src/components/DualListSelector/__tests__/DualListSelector.test.tsx +32 -1
  397. package/src/components/DualListSelector/__tests__/DualListSelectorTreeItem.test.tsx +55 -0
  398. package/src/components/DualListSelector/examples/DualListSelectorTree.tsx +1 -1
  399. package/src/components/ExpandableSection/ExpandableSection.tsx +13 -1
  400. package/src/components/ExpandableSection/ExpandableSectionToggle.tsx +5 -1
  401. package/src/components/ExpandableSection/__tests__/ExpandableSection.test.tsx +85 -23
  402. package/src/components/ExpandableSection/__tests__/ExpandableSectionToggle.test.tsx +32 -0
  403. package/src/components/ExpandableSection/__tests__/__snapshots__/ExpandableSection.test.tsx.snap +1 -63
  404. package/src/components/ExpandableSection/examples/ExpandableSection.md +2 -0
  405. package/src/components/ExpandableSection/examples/ExpandableSectionDetached.tsx +1 -1
  406. package/src/components/Form/FormFieldGroupExpandable.tsx +7 -0
  407. package/src/components/Form/InternalFormFieldGroup.tsx +19 -3
  408. package/src/components/Form/__tests__/FormFieldGroupExpandable.test.tsx +55 -0
  409. package/src/components/Form/examples/FormFieldGroups.tsx +7 -1
  410. package/src/components/Label/Label.tsx +63 -63
  411. package/src/components/Masthead/examples/MastheadBasic.tsx +1 -2
  412. package/src/components/Masthead/examples/MastheadBasicMixedContent.tsx +1 -2
  413. package/src/components/Masthead/examples/MastheadDisplayInline.tsx +1 -2
  414. package/src/components/Masthead/examples/MastheadDisplayStack.tsx +1 -2
  415. package/src/components/Masthead/examples/MastheadDisplayStackInlineResponsive.tsx +1 -2
  416. package/src/components/Masthead/examples/MastheadInsets.tsx +1 -2
  417. package/src/components/Masthead/examples/MastheadLogoCustomComponent.tsx +1 -2
  418. package/src/components/Menu/Menu.tsx +3 -3
  419. package/src/components/MenuToggle/MenuToggle.tsx +6 -1
  420. package/src/components/MenuToggle/__tests__/MenuToggle.test.tsx +59 -45
  421. package/src/components/MenuToggle/__tests__/__snapshots__/MenuToggle.test.tsx.snap +9 -9
  422. package/src/components/MenuToggle/examples/MenuToggle.md +14 -30
  423. package/src/components/MenuToggle/examples/MenuToggleCustomIcon.tsx +17 -0
  424. package/src/components/MenuToggle/examples/MenuToggleSettings.tsx +8 -0
  425. package/src/components/Nav/NavExpandable.tsx +6 -1
  426. package/src/components/Nav/__tests__/Generated/__snapshots__/NavExpandable.test.tsx.snap +1 -0
  427. package/src/components/Nav/__tests__/NavExpandable.test.tsx +15 -0
  428. package/src/components/Nav/__tests__/__snapshots__/Nav.test.tsx.snap +3 -0
  429. package/src/components/Page/PageToggleButton.tsx +9 -2
  430. package/src/components/Page/examples/Page.md +1 -1
  431. package/src/components/Page/examples/PageCenteredSection.tsx +4 -8
  432. package/src/components/Page/examples/PageGroupSection.tsx +2 -5
  433. package/src/components/Page/examples/PageMainSectionPadding.tsx +2 -5
  434. package/src/components/Page/examples/PageMainSectionVariations.tsx +2 -5
  435. package/src/components/Page/examples/PageMultipleSidebarBody.tsx +2 -5
  436. package/src/components/Page/examples/PageUncontrolledNav.tsx +1 -4
  437. package/src/components/Page/examples/PageVerticalNav.tsx +2 -5
  438. package/src/components/Page/examples/PageWithOrWithoutFill.tsx +2 -5
  439. package/src/components/Popover/Popover.tsx +13 -1
  440. package/src/components/SearchInput/AdvancedSearchMenu.tsx +15 -23
  441. package/src/components/SearchInput/SearchInput.tsx +111 -15
  442. package/src/components/SearchInput/__tests__/SearchInput.test.tsx +84 -0
  443. package/src/components/SearchInput/examples/SearchInput.md +11 -2
  444. package/src/components/SearchInput/examples/SearchInputWithExpandable.tsx +6 -1
  445. package/src/components/Skeleton/examples/SkeletonText.tsx +0 -1
  446. package/src/components/Tabs/OverflowTab.tsx +29 -0
  447. package/src/components/Tabs/Tab.tsx +6 -2
  448. package/src/components/Tabs/Tabs.tsx +76 -11
  449. package/src/components/Tabs/TabsContext.ts +2 -0
  450. package/src/components/Tabs/__tests__/Tabs.test.tsx +65 -1
  451. package/src/components/Tabs/__tests__/__snapshots__/Tabs.test.tsx.snap +39 -26
  452. package/src/components/Tabs/examples/Tabs.md +1 -1
  453. package/src/components/Timestamp/examples/TimestampBasicFormats.tsx +1 -1
  454. package/src/components/Timestamp/examples/TimestampDefaultTooltip.tsx +1 -1
  455. package/src/components/TreeView/TreeView.tsx +9 -0
  456. package/src/components/TreeView/TreeViewListItem.tsx +18 -5
  457. package/src/components/TreeView/TreeViewRoot.tsx +4 -2
  458. package/src/components/TreeView/__tests__/TreeView.test.tsx +8 -1
  459. package/src/components/TreeView/__tests__/TreeViewList.test.tsx +39 -0
  460. package/src/components/TreeView/__tests__/TreeViewListItem.test.tsx +17 -3
  461. package/src/components/TreeView/__tests__/__snapshots__/TreeView.test.tsx.snap +3 -0
  462. package/src/components/TreeView/examples/TreeViewCompact.tsx +1 -1
  463. package/src/components/TreeView/examples/TreeViewCompactNoBackground.tsx +8 -1
  464. package/src/components/TreeView/examples/TreeViewGuides.tsx +1 -1
  465. package/src/components/TreeView/examples/TreeViewMultiselectable.tsx +1 -0
  466. package/src/components/TreeView/examples/TreeViewSelectionExpansion.tsx +1 -0
  467. package/src/components/TreeView/examples/TreeViewSingleSelectable.tsx +1 -0
  468. package/src/components/TreeView/examples/TreeViewWithActionItems.tsx +1 -0
  469. package/src/components/TreeView/examples/TreeViewWithBadges.tsx +1 -0
  470. package/src/components/TreeView/examples/TreeViewWithCheckboxes.tsx +9 -1
  471. package/src/components/TreeView/examples/TreeViewWithCustomBadges.tsx +1 -0
  472. package/src/components/TreeView/examples/TreeViewWithIconPerItem.tsx +1 -0
  473. package/src/components/TreeView/examples/TreeViewWithIcons.tsx +1 -0
  474. package/src/components/TreeView/examples/TreeViewWithMemoization.tsx +1 -0
  475. package/src/components/TreeView/examples/TreeViewWithSearch.tsx +1 -0
  476. package/src/components/Truncate/Truncate.tsx +40 -19
  477. package/src/components/Truncate/__tests__/Truncate.test.tsx +24 -0
  478. package/src/components/Truncate/examples/Truncate.md +8 -0
  479. package/src/components/Truncate/examples/TruncateLinks.tsx +22 -0
  480. package/src/demos/CardDemos.md +1 -1
  481. package/src/demos/DashboardHeader.tsx +2 -5
  482. package/src/demos/NotificationDrawer/examples/NotificationDrawerBasic.tsx +2 -5
  483. package/src/demos/NotificationDrawer/examples/NotificationDrawerGrouped.tsx +2 -5
  484. package/src/demos/RTL/RTL.md +1 -0
  485. package/src/demos/RTL/examples/PaginatedTable.tsx +18 -53
  486. package/src/demos/examples/Card/CardAggregateStatus.tsx +2 -6
  487. package/src/demos/examples/Card/CardDetails.tsx +2 -3
  488. package/src/demos/examples/Card/CardEventsView.tsx +2 -3
  489. package/src/demos/examples/Card/CardLogView.tsx +2 -3
  490. package/src/demos/examples/Card/CardStatus.tsx +0 -1
  491. package/src/demos/examples/Card/CardUtilizationDemo3.tsx +0 -1
  492. package/src/demos/examples/Masthead/MastheadWithHorizontalNav.tsx +1 -1
  493. package/src/demos/examples/Masthead/MastheadWithUtilitiesAndUserDropdownMenu.tsx +2 -5
  494. package/src/demos/examples/Nav/NavFlyout.tsx +3 -6
  495. package/src/demos/examples/Nav/NavHorizontal.tsx +1 -1
  496. package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +2 -5
  497. package/src/demos/examples/Nav/NavManual.tsx +3 -6
  498. package/src/demos/examples/Page/PageContextSelector.tsx +3 -6
  499. package/src/demos/examples/Page/PageStickySectionBreadcrumb.tsx +2 -5
  500. package/src/demos/examples/Page/PageStickySectionGroup.tsx +2 -5
  501. package/src/demos/examples/Page/PageStickySectionGroupAlternate.tsx +2 -5
  502. package/src/demos/examples/Toolbar/ConsoleLogViewerToolbar.tsx +2 -3
  503. package/src/demos/examples/Wizard/InPageWithDrawer.tsx +1 -4
  504. package/src/demos/examples/Wizard/InPageWithDrawerInformationalStep.tsx +1 -4
  505. package/src/demos/sampleData.tsx +225 -227
  506. package/src/demos/sampleDataRTL.tsx +133 -0
  507. package/src/helpers/KeyboardHandler.tsx +2 -2
  508. package/src/helpers/Popper/Popper.tsx +1 -0
  509. package/src/helpers/util.ts +45 -0
  510. package/src/demos/RTL/examples/PaginatedTable.jsx +0 -504
@@ -56,14 +56,17 @@ export const DualListSelectorListWrapperBase: React.FunctionComponent<DualListSe
56
56
  }
57
57
  event.stopImmediatePropagation();
58
58
  const validOptions = isTree
59
- ? (Array.from(
60
- menuRef.current.querySelectorAll(
61
- `.${styles.dualListSelectorItemToggle}, .${styles.dualListSelectorItemCheck} > input`
62
- )
63
- ) as Element[])
59
+ ? (
60
+ Array.from(
61
+ menuRef.current.querySelectorAll(
62
+ `.${styles.dualListSelectorItemToggle}, .${styles.dualListSelectorItemCheck} > input`
63
+ )
64
+ ) as Element[]
65
+ ).filter((item) => !item.closest(`.${styles.dualListSelectorList}[inert]`))
64
66
  : (Array.from(menuRef.current.getElementsByTagName('LI')) as Element[]).filter(
65
67
  (el) => !el.classList.contains('pf-m-disabled')
66
68
  );
69
+
67
70
  const activeElement = document.activeElement;
68
71
  handleArrows(
69
72
  event,
@@ -1,5 +1,7 @@
1
+ import { useContext } from 'react';
1
2
  import { css } from '@patternfly/react-styles';
2
3
  import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
4
+ import { DualListSelectorContext } from './DualListSelectorContext';
3
5
  import { DualListSelectorTreeItem } from './DualListSelectorTreeItem';
4
6
 
5
7
  export interface DualListSelectorTreeItemData {
@@ -68,11 +70,13 @@ export const DualListSelectorTree: React.FunctionComponent<DualListSelectorTreeP
68
70
  isDisabled = false,
69
71
  ...props
70
72
  }: DualListSelectorTreeProps) => {
73
+ const { hasAnimations } = useContext(DualListSelectorContext);
71
74
  const dataToRender = typeof data === 'function' ? data() : data;
72
75
  const tree = dataToRender.map((item) => (
73
76
  <DualListSelectorTreeItem
74
77
  key={item.id}
75
78
  text={item.text}
79
+ hasAnimations={hasAnimations}
76
80
  id={item.id}
77
81
  defaultExpanded={item.defaultExpanded !== undefined ? item.defaultExpanded : defaultAllExpanded}
78
82
  onOptionCheck={onOptionCheck}
@@ -1,4 +1,4 @@
1
- import { memo, useContext, useEffect, useRef, useState } from 'react';
1
+ import { memo, useContext, useEffect, useRef, useState, cloneElement, Children, isValidElement } from 'react';
2
2
  import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
3
3
  import { css } from '@patternfly/react-styles';
4
4
  import { DualListSelectorTreeItemData } from './DualListSelectorTree';
@@ -38,6 +38,11 @@ export interface DualListSelectorTreeItemProps extends React.HTMLProps<HTMLLIEle
38
38
  isDisabled?: boolean;
39
39
  /** Flag indicating the DualListSelector tree should utilize memoization to help render large data sets. */
40
40
  useMemo?: boolean;
41
+ /** Flag indicating whether a tree dual list selector has animations. This will always render
42
+ * nested dual list selector items rather than dynamically rendering them. This prop will be removed in
43
+ * the next breaking change release in favor of defaulting to always-rendered items.
44
+ */
45
+ hasAnimations?: boolean;
41
46
  }
42
47
 
43
48
  const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTreeItemProps> = ({
@@ -53,6 +58,7 @@ const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTree
53
58
  badgeProps,
54
59
  itemData,
55
60
  isDisabled = false,
61
+ hasAnimations,
56
62
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
57
63
  useMemo,
58
64
  ...props
@@ -65,6 +71,15 @@ const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTree
65
71
  setIsExpanded(defaultExpanded);
66
72
  }, [defaultExpanded]);
67
73
 
74
+ const clonedChildren = Children.map(
75
+ children,
76
+ (child) =>
77
+ isValidElement(child) &&
78
+ cloneElement(child as React.ReactElement<any>, {
79
+ inert: isExpanded ? undefined : ''
80
+ })
81
+ );
82
+
68
83
  return (
69
84
  <li
70
85
  className={css(
@@ -156,7 +171,7 @@ const DualListSelectorTreeItemBase: React.FunctionComponent<DualListSelectorTree
156
171
  </span>
157
172
  </div>
158
173
  </div>
159
- {isExpanded && children}
174
+ {(isExpanded || hasAnimations) && clonedChildren}
160
175
  </li>
161
176
  );
162
177
  };
@@ -1,6 +1,37 @@
1
- import { render } from '@testing-library/react';
1
+ import { render, screen } from '@testing-library/react';
2
+ import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
3
+ import { DualListSelector } from '../DualListSelector';
2
4
  import { DualListSelectorPane } from '../DualListSelectorPane';
3
5
  import { SearchInput } from '../../SearchInput';
6
+
7
+ // The following tests can be removed as part of https://github.com/patternfly/patternfly-react/issues/11838
8
+ describe('Opt-in animations', () => {
9
+ test(`Does not render with class ${styles.modifiers.animateExpand} by default`, () => {
10
+ render(<DualListSelector data-testid="test-id" />);
11
+
12
+ expect(screen.getByTestId('test-id')).not.toHaveClass(styles.modifiers.animateExpand);
13
+ });
14
+
15
+ test(`Does not render with class ${styles.modifiers.animateExpand} when hasAnimations is true and isTree is false`, () => {
16
+ render(<DualListSelector hasAnimations data-testid="test-id" />);
17
+
18
+ expect(screen.getByTestId('test-id')).not.toHaveClass(styles.modifiers.animateExpand);
19
+ });
20
+
21
+ test(`Does not render with class ${styles.modifiers.animateExpand} by default when isTree is true`, () => {
22
+ render(<DualListSelector isTree data-testid="test-id" />);
23
+
24
+ expect(screen.getByTestId('test-id')).not.toHaveClass(styles.modifiers.animateExpand);
25
+ });
26
+
27
+ test(`Renders with class ${styles.modifiers.animateExpand} when both isTree and hasAnimations are true`, () => {
28
+ render(<DualListSelector isTree hasAnimations data-testid="test-id" />);
29
+
30
+ expect(screen.getByTestId('test-id')).toHaveClass(styles.modifiers.animateExpand);
31
+ });
32
+ });
33
+
34
+ // Following tests should be moved to a separate DualListSelectorPane test file
4
35
  describe('DualListSelector', () => {
5
36
  test('basic', () => {
6
37
  const { asFragment } = render(<DualListSelectorPane id="basicTest" />);
@@ -0,0 +1,55 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
3
+ import { DualListSelectorTreeItem } from '../DualListSelectorTreeItem';
4
+
5
+ // The following tests checking for children to not be/to be rendered will need to be refactored
6
+ // as part of https://github.com/patternfly/patternfly-react/issues/11838
7
+ test('Does not render children by default', () => {
8
+ render(
9
+ <DualListSelectorTreeItem id="item-id" text="Test text">
10
+ <div>Children content</div>
11
+ </DualListSelectorTreeItem>
12
+ );
13
+
14
+ expect(screen.queryByText('Children content')).not.toBeInTheDocument();
15
+ });
16
+
17
+ test('Renders children when defaultExpanded is true', () => {
18
+ render(
19
+ <DualListSelectorTreeItem defaultExpanded id="item-id" text="Test text">
20
+ <div>Children content</div>
21
+ </DualListSelectorTreeItem>
22
+ );
23
+
24
+ expect(screen.getByText('Children content')).toBeVisible();
25
+ });
26
+
27
+ test('Renders children when hasAnimations is true', () => {
28
+ render(
29
+ <DualListSelectorTreeItem hasAnimations id="item-id" text="Test text">
30
+ <div>Children content</div>
31
+ </DualListSelectorTreeItem>
32
+ );
33
+
34
+ expect(screen.getByText('Children content')).toBeVisible();
35
+ });
36
+
37
+ test('Renders children with inert attribute by default when hasAnimations is true', () => {
38
+ render(
39
+ <DualListSelectorTreeItem hasAnimations id="item-id" text="Test text">
40
+ <div>Children content</div>
41
+ </DualListSelectorTreeItem>
42
+ );
43
+
44
+ expect(screen.getByText('Children content')).toHaveAttribute('inert', '');
45
+ });
46
+
47
+ test('Does not render children with inert attribute when hasAnimations and defaultExpanded are true', () => {
48
+ render(
49
+ <DualListSelectorTreeItem hasAnimations defaultExpanded id="item-id" text="Test text">
50
+ <div>Children content</div>
51
+ </DualListSelectorTreeItem>
52
+ );
53
+
54
+ expect(screen.getByText('Children content')).not.toHaveAttribute('inert');
55
+ });
@@ -283,7 +283,7 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
283
283
  };
284
284
 
285
285
  return (
286
- <DualListSelector isTree>
286
+ <DualListSelector hasAnimations isTree>
287
287
  {buildPane(false)}
288
288
  <DualListSelectorControlsWrapper>
289
289
  <DualListSelectorControl
@@ -32,7 +32,7 @@ export interface ExpandableSectionProps extends Omit<React.HTMLProps<HTMLDivElem
32
32
  toggleId?: string;
33
33
  /** Display size variant. Set to "lg" for disclosure styling. */
34
34
  displaySize?: 'default' | 'lg';
35
- /** Indicates the expandable section has a detached toggle. */
35
+ /** Flag indicating that the expandable section and expandable toggle are detached from one another. */
36
36
  isDetached?: boolean;
37
37
  /** Flag to indicate if the content is expanded. */
38
38
  isExpanded?: boolean;
@@ -64,6 +64,10 @@ export interface ExpandableSectionProps extends Omit<React.HTMLProps<HTMLDivElem
64
64
  * variant, the expandable content will be truncated after 3 lines by default.
65
65
  */
66
66
  variant?: 'default' | 'truncate';
67
+ /** Sets the direction of the expandable animation when isDetached is true. If this prop is not passed,
68
+ * animation will not occur.
69
+ */
70
+ direction?: 'up' | 'down';
67
71
  }
68
72
 
69
73
  interface ExpandableSectionState {
@@ -72,6 +76,11 @@ interface ExpandableSectionState {
72
76
  previousWidth: number;
73
77
  }
74
78
 
79
+ const directionClassMap = {
80
+ up: styles.modifiers.expandTop,
81
+ down: styles.modifiers.expandBottom
82
+ };
83
+
75
84
  const setLineClamp = (lines: number, element: HTMLDivElement) => {
76
85
  if (!element || lines < 1) {
77
86
  return;
@@ -198,6 +207,7 @@ class ExpandableSection extends Component<ExpandableSectionProps, ExpandableSect
198
207
  variant,
199
208
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
200
209
  truncateMaxLines,
210
+ direction,
201
211
  ...props
202
212
  } = this.props;
203
213
 
@@ -258,6 +268,8 @@ class ExpandableSection extends Component<ExpandableSectionProps, ExpandableSect
258
268
  displaySize === 'lg' && styles.modifiers.displayLg,
259
269
  isWidthLimited && styles.modifiers.limitWidth,
260
270
  isIndented && styles.modifiers.indented,
271
+ isDetached && direction && directionClassMap[direction],
272
+ isDetached && direction && 'pf-m-detached',
261
273
  variant === ExpandableSectionVariant.truncate && styles.modifiers.truncate,
262
274
  className
263
275
  )}
@@ -28,6 +28,8 @@ export interface ExpandableSectionToggleProps extends Omit<React.HTMLProps<HTMLD
28
28
  isExpanded?: boolean;
29
29
  /** Callback function to toggle the expandable content. */
30
30
  onToggle?: (isExpanded: boolean) => void;
31
+ /** Flag indicating that the expandable section and expandable toggle are detached from one another. */
32
+ isDetached?: boolean;
31
33
  }
32
34
 
33
35
  export const ExpandableSectionToggle: React.FunctionComponent<ExpandableSectionToggleProps> = ({
@@ -39,6 +41,7 @@ export const ExpandableSectionToggle: React.FunctionComponent<ExpandableSectionT
39
41
  toggleId,
40
42
  direction = 'down',
41
43
  hasTruncatedContent = false,
44
+ isDetached,
42
45
  ...props
43
46
  }: ExpandableSectionToggleProps) => (
44
47
  <div
@@ -46,6 +49,7 @@ export const ExpandableSectionToggle: React.FunctionComponent<ExpandableSectionT
46
49
  styles.expandableSection,
47
50
  isExpanded && styles.modifiers.expanded,
48
51
  hasTruncatedContent && styles.modifiers.truncate,
52
+ isDetached && 'pf-m-detached',
49
53
  className
50
54
  )}
51
55
  {...props}
@@ -63,7 +67,7 @@ export const ExpandableSectionToggle: React.FunctionComponent<ExpandableSectionT
63
67
  <span
64
68
  className={css(
65
69
  styles.expandableSectionToggleIcon,
66
- isExpanded && direction === 'up' && styles.modifiers.expandTop
70
+ isExpanded && direction === 'up' && styles.modifiers.expandTop // TODO: next breaking change move this class to the outer styles.expandableSection wrapper
67
71
  )}
68
72
  >
69
73
  <AngleRightIcon />
@@ -1,9 +1,8 @@
1
- import { Fragment } from 'react';
2
1
  import { render, screen } from '@testing-library/react';
3
2
  import userEvent from '@testing-library/user-event';
4
3
 
5
4
  import { ExpandableSection, ExpandableSectionVariant } from '../ExpandableSection';
6
- import { ExpandableSectionToggle } from '../ExpandableSectionToggle';
5
+ import styles from '@patternfly/react-styles/css/components/ExpandableSection/expandable-section';
7
6
 
8
7
  const props = { contentId: 'content-id', toggleId: 'toggle-id' };
9
8
 
@@ -22,7 +21,7 @@ test('Renders ExpandableSection expanded', () => {
22
21
  expect(asFragment()).toMatchSnapshot();
23
22
  });
24
23
 
25
- test('ExpandableSection onToggle called', async () => {
24
+ test('Calls onToggle when clicked', async () => {
26
25
  const mockfn = jest.fn();
27
26
  const user = userEvent.setup();
28
27
 
@@ -32,6 +31,21 @@ test('ExpandableSection onToggle called', async () => {
32
31
  expect(mockfn.mock.calls).toHaveLength(1);
33
32
  });
34
33
 
34
+ test('Does not call onToggle when not clicked', async () => {
35
+ const mockfn = jest.fn();
36
+ const user = userEvent.setup();
37
+
38
+ render(
39
+ <>
40
+ <ExpandableSection onToggle={mockfn}> test </ExpandableSection>
41
+ <button onClick={() => {}}>Test clicker</button>
42
+ </>
43
+ );
44
+
45
+ await user.click(screen.getByRole('button', { name: 'Test clicker' }));
46
+ expect(mockfn).not.toHaveBeenCalled();
47
+ });
48
+
35
49
  test('Renders Uncontrolled ExpandableSection', () => {
36
50
  const { asFragment } = render(
37
51
  <ExpandableSection {...props} toggleText="Show More">
@@ -42,20 +56,6 @@ test('Renders Uncontrolled ExpandableSection', () => {
42
56
  expect(asFragment()).toMatchSnapshot();
43
57
  });
44
58
 
45
- test('Detached ExpandableSection renders successfully', () => {
46
- const { asFragment } = render(
47
- <Fragment>
48
- <ExpandableSection isExpanded isDetached {...props}>
49
- test
50
- </ExpandableSection>
51
- <ExpandableSectionToggle isExpanded direction="up" {...props}>
52
- Toggle text
53
- </ExpandableSectionToggle>
54
- </Fragment>
55
- );
56
- expect(asFragment()).toMatchSnapshot();
57
- });
58
-
59
59
  test('Disclosure ExpandableSection', () => {
60
60
  const { asFragment } = render(
61
61
  <ExpandableSection {...props} displaySize="lg" isWidthLimited>
@@ -75,22 +75,22 @@ test('Renders ExpandableSection indented', () => {
75
75
  expect(asFragment()).toMatchSnapshot();
76
76
  });
77
77
 
78
- test('Does not render with pf-m-truncate class when variant is not passed', () => {
78
+ test(`Does not render with ${styles.modifiers.truncate} class when variant is not passed`, () => {
79
79
  render(<ExpandableSection>test</ExpandableSection>);
80
80
 
81
- expect(screen.getByText('test').parentElement).not.toHaveClass('pf-m-truncate');
81
+ expect(screen.getByText('test').parentElement).not.toHaveClass(styles.modifiers.truncate);
82
82
  });
83
83
 
84
- test('Does not render with pf-m-truncate class when variant is not truncate', () => {
84
+ test(`Does not render with ${styles.modifiers.truncate} class when variant is not truncate`, () => {
85
85
  render(<ExpandableSection variant={ExpandableSectionVariant.default}>test</ExpandableSection>);
86
86
 
87
- expect(screen.getByText('test').parentElement).not.toHaveClass('pf-m-truncate');
87
+ expect(screen.getByText('test').parentElement).not.toHaveClass(styles.modifiers.truncate);
88
88
  });
89
89
 
90
- test('Renders with pf-m-truncate class when variant is truncate', () => {
90
+ test(`Renders with ${styles.modifiers.truncate} class when variant is truncate`, () => {
91
91
  render(<ExpandableSection variant={ExpandableSectionVariant.truncate}>test</ExpandableSection>);
92
92
 
93
- expect(screen.getByText('test').parentElement).toHaveClass('pf-m-truncate');
93
+ expect(screen.getByText('test').parentElement).toHaveClass(styles.modifiers.truncate);
94
94
  });
95
95
 
96
96
  test('Renders with value passed to contentId', () => {
@@ -129,3 +129,65 @@ test('Renders with ARIA attributes when contentId and toggleId are passed', () =
129
129
  expect(wrapper).toContainHTML('aria-labelledby="toggle-id"');
130
130
  expect(wrapper).toContainHTML('aria-controls="content-id"');
131
131
  });
132
+
133
+ test(`Does not render with classes ${styles.modifiers.expandTop} nor ${styles.modifiers.expandBottom} by default`, () => {
134
+ render(<ExpandableSection>Test content</ExpandableSection>);
135
+
136
+ expect(screen.getByText('Test content').parentElement).not.toHaveClass('pf-m-expand-top');
137
+ expect(screen.getByText('Test content').parentElement).not.toHaveClass('pf-m-expand-bottom');
138
+ });
139
+
140
+ test(`Does not render with classes ${styles.modifiers.expandTop} nor ${styles.modifiers.expandBottom} when only isDetached is true`, () => {
141
+ render(<ExpandableSection isDetached>Test content</ExpandableSection>);
142
+
143
+ expect(screen.getByText('Test content').parentElement).not.toHaveClass('pf-m-expand-top');
144
+ expect(screen.getByText('Test content').parentElement).not.toHaveClass('pf-m-expand-bottom');
145
+ });
146
+
147
+ test(`Does not render with class ${styles.modifiers.expandTop} when direction="up" and isDetached is false`, () => {
148
+ render(<ExpandableSection direction="up">Test content</ExpandableSection>);
149
+
150
+ expect(screen.getByText('Test content').parentElement).not.toHaveClass('pf-m-expand-top');
151
+ });
152
+
153
+ test(`Does not render with class ${styles.modifiers.expandBottom} when direction="down" and isDetached is false`, () => {
154
+ render(<ExpandableSection direction="down">Test content</ExpandableSection>);
155
+
156
+ expect(screen.getByText('Test content').parentElement).not.toHaveClass('pf-m-expand-bottom');
157
+ });
158
+
159
+ test(`Renders with class ${styles.modifiers.expandTop} when isDetached is true and direction="up"`, () => {
160
+ render(
161
+ <ExpandableSection isDetached direction="up">
162
+ Test content
163
+ </ExpandableSection>
164
+ );
165
+
166
+ expect(screen.getByText('Test content').parentElement).toHaveClass('pf-m-expand-top');
167
+ });
168
+
169
+ test(`Renders with class ${styles.modifiers.expandBottom} when isDetached is true and direction="down"`, () => {
170
+ render(
171
+ <ExpandableSection isDetached direction="down">
172
+ Test content
173
+ </ExpandableSection>
174
+ );
175
+
176
+ expect(screen.getByText('Test content').parentElement).toHaveClass('pf-m-expand-bottom');
177
+ });
178
+
179
+ test('Does not render with class pf-m-detached when isDetached is true and direction is not passed', () => {
180
+ render(<ExpandableSection isDetached>Test content</ExpandableSection>);
181
+
182
+ expect(screen.getByText('Test content').parentElement).not.toHaveClass('pf-m-detached');
183
+ });
184
+
185
+ test('Renders with class pf-m-detached when isDetached is true and direction is passed', () => {
186
+ render(
187
+ <ExpandableSection isDetached direction="up">
188
+ Test content
189
+ </ExpandableSection>
190
+ );
191
+
192
+ expect(screen.getByText('Test content').parentElement).toHaveClass('pf-m-detached');
193
+ });
@@ -0,0 +1,32 @@
1
+ import { render, screen } from '@testing-library/react';
2
+ import userEvent from '@testing-library/user-event';
3
+ import { ExpandableSectionToggle } from '../ExpandableSectionToggle';
4
+ import styles from '@patternfly/react-styles/css/components/ExpandableSection/expandable-section';
5
+
6
+ test('Renders without children', () => {
7
+ render(<ExpandableSectionToggle></ExpandableSectionToggle>);
8
+
9
+ expect(screen.getByRole('button')).toBeInTheDocument();
10
+ });
11
+
12
+ test('Renders with children', () => {
13
+ render(<ExpandableSectionToggle>Toggle test</ExpandableSectionToggle>);
14
+
15
+ expect(screen.getByRole('button')).toHaveTextContent('Toggle test');
16
+ });
17
+
18
+ test('Does not render with class pf-m-detached by default', () => {
19
+ render(<ExpandableSectionToggle data-testid="test-id">Toggle test</ExpandableSectionToggle>);
20
+
21
+ expect(screen.getByTestId('test-id')).not.toHaveClass('pf-m-detached');
22
+ });
23
+
24
+ test('Renders with class pf-m-detached when isDetached is true', () => {
25
+ render(
26
+ <ExpandableSectionToggle data-testid="test-id" isDetached>
27
+ Toggle test
28
+ </ExpandableSectionToggle>
29
+ );
30
+
31
+ expect(screen.getByTestId('test-id')).toHaveClass('pf-m-detached');
32
+ });
@@ -1,67 +1,5 @@
1
1
  // Jest Snapshot v1, https://goo.gl/fbAQLP
2
2
 
3
- exports[`Detached ExpandableSection renders successfully 1`] = `
4
- <DocumentFragment>
5
- <div
6
- class="pf-v6-c-expandable-section pf-m-expanded"
7
- >
8
- <div
9
- aria-labelledby="toggle-id"
10
- class="pf-v6-c-expandable-section__content"
11
- id="content-id"
12
- role="region"
13
- >
14
- test
15
- </div>
16
- </div>
17
- <div
18
- class="pf-v6-c-expandable-section pf-m-expanded"
19
- >
20
- <div
21
- class="pf-v6-c-expandable-section__toggle"
22
- >
23
- <button
24
- aria-controls="content-id"
25
- aria-expanded="true"
26
- class="pf-v6-c-button pf-m-link"
27
- data-ouia-component-id="OUIA-Generated-Button-link-5"
28
- data-ouia-component-type="PF6/Button"
29
- data-ouia-safe="true"
30
- id="toggle-id"
31
- type="button"
32
- >
33
- <span
34
- class="pf-v6-c-button__icon pf-m-start"
35
- >
36
- <span
37
- class="pf-v6-c-expandable-section__toggle-icon pf-m-expand-top"
38
- >
39
- <svg
40
- aria-hidden="true"
41
- class="pf-v6-svg"
42
- fill="currentColor"
43
- height="1em"
44
- role="img"
45
- viewBox="0 0 256 512"
46
- width="1em"
47
- >
48
- <path
49
- d="M224.3 273l-136 136c-9.4 9.4-24.6 9.4-33.9 0l-22.6-22.6c-9.4-9.4-9.4-24.6 0-33.9l96.4-96.4-96.4-96.4c-9.4-9.4-9.4-24.6 0-33.9L54.3 103c9.4-9.4 24.6-9.4 33.9 0l136 136c9.5 9.4 9.5 24.6.1 34z"
50
- />
51
- </svg>
52
- </span>
53
- </span>
54
- <span
55
- class="pf-v6-c-button__text"
56
- >
57
- Toggle text
58
- </span>
59
- </button>
60
- </div>
61
- </div>
62
- </DocumentFragment>
63
- `;
64
-
65
3
  exports[`Disclosure ExpandableSection 1`] = `
66
4
  <DocumentFragment>
67
5
  <div
@@ -285,7 +223,7 @@ exports[`Renders Uncontrolled ExpandableSection 1`] = `
285
223
  <button
286
224
  aria-controls="content-id"
287
225
  class="pf-v6-c-button pf-m-link"
288
- data-ouia-component-id="OUIA-Generated-Button-link-4"
226
+ data-ouia-component-id="OUIA-Generated-Button-link-5"
289
227
  data-ouia-component-type="PF6/Button"
290
228
  data-ouia-safe="true"
291
229
  id="toggle-id"
@@ -32,6 +32,8 @@ import CheckCircleIcon from '@patternfly/react-icons/dist/esm/icons/check-circle
32
32
 
33
33
  When passing the `isDetached` property into `<ExpandableSection>`, you must also manually pass in the same `toggleId` and `contentId` properties to both `<ExpandableSection>` and `<ExpandableSectionToggle>`. This will link the content to the toggle via ARIA attributes.
34
34
 
35
+ By default animations will not be enabled for a detached `<ExpandableSection>`. You must manually pass the `direction` property with an appropriate value based on where the expandable content is rendered. If the expandable content is above the expandable toggle, `direction="up"` must be passed like in this example.
36
+
35
37
  ```ts file="ExpandableSectionDetached.tsx"
36
38
 
37
39
  ```
@@ -13,7 +13,7 @@ export const ExpandableSectionDetached: React.FunctionComponent = () => {
13
13
  return (
14
14
  <Stack hasGutter>
15
15
  <StackItem>
16
- <ExpandableSection isExpanded={isExpanded} isDetached toggleId={toggleId} contentId={contentId}>
16
+ <ExpandableSection isExpanded={isExpanded} isDetached direction="up" toggleId={toggleId} contentId={contentId}>
17
17
  This content is visible only when the component is expanded.
18
18
  </ExpandableSection>
19
19
  </StackItem>
@@ -12,6 +12,11 @@ export interface FormFieldGroupExpandableProps extends Omit<React.HTMLProps<HTML
12
12
  isExpanded?: boolean;
13
13
  /** Aria-label to use on the form field group toggle button */
14
14
  toggleAriaLabel?: string;
15
+ /** Flag indicating whether an expandable form field group has animations. This will always render
16
+ * nested field group content rather than dynamically rendering them. This prop will be removed in
17
+ * the next breaking change release in favor of defaulting to always-rendered items.
18
+ */
19
+ hasAnimations?: boolean;
15
20
  }
16
21
 
17
22
  export const FormFieldGroupExpandable: React.FunctionComponent<FormFieldGroupExpandableProps> = ({
@@ -20,6 +25,7 @@ export const FormFieldGroupExpandable: React.FunctionComponent<FormFieldGroupExp
20
25
  header,
21
26
  isExpanded = false,
22
27
  toggleAriaLabel,
28
+ hasAnimations,
23
29
  ...props
24
30
  }: FormFieldGroupExpandableProps) => {
25
31
  const [localIsExpanded, setIsExpanded] = useState(isExpanded);
@@ -32,6 +38,7 @@ export const FormFieldGroupExpandable: React.FunctionComponent<FormFieldGroupExp
32
38
  isExpanded={localIsExpanded}
33
39
  toggleAriaLabel={toggleAriaLabel}
34
40
  onToggle={() => setIsExpanded(!localIsExpanded)}
41
+ hasAnimations={hasAnimations}
35
42
  {...props}
36
43
  >
37
44
  {children}
@@ -18,6 +18,11 @@ export interface InternalFormFieldGroupProps extends Omit<React.HTMLProps<HTMLDi
18
18
  onToggle?: () => void;
19
19
  /** Aria-label to use on the form field group toggle button */
20
20
  toggleAriaLabel?: string;
21
+ /** Flag indicating whether an expandable form field group has animations. This will always render
22
+ * nested field group content rather than dynamically rendering them. This prop will be removed in
23
+ * the next breaking change release in favor of defaulting to always-rendered items.
24
+ */
25
+ hasAnimations?: boolean;
21
26
  }
22
27
 
23
28
  export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGroupProps> = ({
@@ -28,6 +33,7 @@ export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGr
28
33
  isExpanded,
29
34
  onToggle,
30
35
  toggleAriaLabel,
36
+ hasAnimations,
31
37
  ...props
32
38
  }: InternalFormFieldGroupProps) => {
33
39
  const headerTitleText = header ? header.props.titleText : null;
@@ -40,7 +46,12 @@ export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGr
40
46
  }
41
47
  return (
42
48
  <div
43
- className={css(styles.formFieldGroup, isExpanded && isExpandable && styles.modifiers.expanded, className)}
49
+ className={css(
50
+ styles.formFieldGroup,
51
+ isExpanded && isExpandable && styles.modifiers.expanded,
52
+ hasAnimations && isExpandable && styles.modifiers.expandable,
53
+ className
54
+ )}
44
55
  role="group"
45
56
  {...(headerTitleText && { 'aria-labelledby': `${header.props.titleText.id}` })}
46
57
  {...props}
@@ -59,8 +70,13 @@ export const InternalFormFieldGroup: React.FunctionComponent<InternalFormFieldGr
59
70
  </GenerateId>
60
71
  )}
61
72
  {header && header}
62
- {(!isExpandable || (isExpandable && isExpanded)) && (
63
- <div className={css(styles.formFieldGroupBody)}>{children}</div>
73
+ {(!isExpandable || (isExpandable && isExpanded) || (hasAnimations && isExpandable)) && (
74
+ <div
75
+ className={css(styles.formFieldGroupBody)}
76
+ {...(hasAnimations && isExpandable && !isExpanded && { inert: '' })}
77
+ >
78
+ {children}
79
+ </div>
64
80
  )}
65
81
  </div>
66
82
  );