@patternfly/react-core 6.0.0-alpha.39 → 6.0.0-alpha.40

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 (343) hide show
  1. package/CHANGELOG.md +224 -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/DataList/package.json +1 -1
  23. package/dist/dynamic/components/DatePicker/package.json +1 -1
  24. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  25. package/dist/dynamic/components/Divider/package.json +1 -1
  26. package/dist/dynamic/components/DragDrop/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/Text/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/Tile/package.json +1 -1
  75. package/dist/dynamic/components/TimePicker/package.json +1 -1
  76. package/dist/dynamic/components/Timestamp/package.json +1 -1
  77. package/dist/dynamic/components/Title/package.json +1 -1
  78. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  79. package/dist/dynamic/components/Toolbar/package.json +1 -1
  80. package/dist/dynamic/components/Tooltip/package.json +1 -1
  81. package/dist/dynamic/components/TreeView/package.json +1 -1
  82. package/dist/dynamic/components/Truncate/package.json +1 -1
  83. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/ApplicationLauncher/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/ContextSelector/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Dropdown/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/OptionsMenu/package.json +1 -1
  90. package/dist/dynamic/deprecated/components/PageHeader/package.json +1 -1
  91. package/dist/dynamic/deprecated/components/Select/package.json +1 -1
  92. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  93. package/dist/dynamic/deprecated/components/package.json +1 -1
  94. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  95. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  96. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  97. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  98. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  99. package/dist/dynamic/helpers/constants/package.json +1 -1
  100. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  101. package/dist/dynamic/helpers/favorites/package.json +1 -1
  102. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  103. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  104. package/dist/dynamic/helpers/package.json +1 -1
  105. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  106. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  107. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  108. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  109. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  110. package/dist/dynamic/helpers/util/package.json +1 -1
  111. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  112. package/dist/dynamic/layouts/Flex/package.json +1 -1
  113. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  114. package/dist/dynamic/layouts/Grid/package.json +1 -1
  115. package/dist/dynamic/layouts/Level/package.json +1 -1
  116. package/dist/dynamic/layouts/Split/package.json +1 -1
  117. package/dist/dynamic/layouts/Stack/package.json +1 -1
  118. package/dist/dynamic/next/components/DualListSelector/package.json +1 -0
  119. package/dist/dynamic/next/components/Modal/package.json +1 -1
  120. package/dist/dynamic/next/components/package.json +1 -1
  121. package/dist/dynamic/styles/package.json +1 -1
  122. package/dist/esm/components/Checkbox/Checkbox.js +2 -2
  123. package/dist/esm/components/Checkbox/Checkbox.js.map +1 -1
  124. package/dist/esm/components/JumpLinks/JumpLinks.d.ts +3 -1
  125. package/dist/esm/components/JumpLinks/JumpLinks.d.ts.map +1 -1
  126. package/dist/esm/components/JumpLinks/JumpLinks.js +19 -7
  127. package/dist/esm/components/JumpLinks/JumpLinks.js.map +1 -1
  128. package/dist/esm/components/MenuToggle/MenuToggle.js +1 -1
  129. package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
  130. package/dist/esm/components/Radio/Radio.js +2 -2
  131. package/dist/esm/components/Radio/Radio.js.map +1 -1
  132. package/dist/esm/components/SearchInput/SearchInput.d.ts +2 -0
  133. package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
  134. package/dist/esm/components/SearchInput/SearchInput.js +2 -2
  135. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  136. package/dist/esm/components/Select/Select.d.ts +6 -0
  137. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  138. package/dist/esm/components/Select/Select.js +3 -3
  139. package/dist/esm/components/Select/Select.js.map +1 -1
  140. package/dist/esm/components/TextInputGroup/TextInputGroupMain.d.ts +2 -0
  141. package/dist/esm/components/TextInputGroup/TextInputGroupMain.d.ts.map +1 -1
  142. package/dist/esm/components/TextInputGroup/TextInputGroupMain.js +3 -3
  143. package/dist/esm/components/TextInputGroup/TextInputGroupMain.js.map +1 -1
  144. package/dist/esm/helpers/Popper/Popper.js +2 -2
  145. package/dist/esm/helpers/Popper/Popper.js.map +1 -1
  146. package/dist/esm/index.d.ts +0 -1
  147. package/dist/esm/index.d.ts.map +1 -1
  148. package/dist/esm/index.js +0 -1
  149. package/dist/esm/index.js.map +1 -1
  150. package/dist/esm/next/components/DualListSelector/DualListSelector.d.ts +23 -0
  151. package/dist/esm/next/components/DualListSelector/DualListSelector.d.ts.map +1 -0
  152. package/dist/esm/next/components/DualListSelector/DualListSelector.js +23 -0
  153. package/dist/esm/next/components/DualListSelector/DualListSelector.js.map +1 -0
  154. package/dist/esm/next/components/DualListSelector/DualListSelectorContext.d.ts +19 -0
  155. package/dist/esm/next/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -0
  156. package/dist/esm/next/components/DualListSelector/DualListSelectorContext.js +5 -0
  157. package/dist/esm/next/components/DualListSelector/DualListSelectorContext.js.map +1 -0
  158. package/dist/esm/next/components/DualListSelector/DualListSelectorControl.d.ts +25 -0
  159. package/dist/esm/next/components/DualListSelector/DualListSelectorControl.d.ts.map +1 -0
  160. package/dist/esm/next/components/DualListSelector/DualListSelectorControl.js +18 -0
  161. package/dist/esm/next/components/DualListSelector/DualListSelectorControl.js.map +1 -0
  162. package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts +15 -0
  163. package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +1 -0
  164. package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.js +35 -0
  165. package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.js.map +1 -0
  166. package/dist/esm/next/components/DualListSelector/DualListSelectorList.d.ts +8 -0
  167. package/dist/esm/next/components/DualListSelector/DualListSelectorList.d.ts.map +1 -0
  168. package/dist/esm/next/components/DualListSelector/DualListSelectorList.js +26 -0
  169. package/dist/esm/next/components/DualListSelector/DualListSelectorList.js.map +1 -0
  170. package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.d.ts +29 -0
  171. package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.d.ts.map +1 -0
  172. package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.js +38 -0
  173. package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.js.map +1 -0
  174. package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.d.ts +24 -0
  175. package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -0
  176. package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.js +59 -0
  177. package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -0
  178. package/dist/esm/next/components/DualListSelector/DualListSelectorPane.d.ts +31 -0
  179. package/dist/esm/next/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -0
  180. package/dist/esm/next/components/DualListSelector/DualListSelectorPane.js +27 -0
  181. package/dist/esm/next/components/DualListSelector/DualListSelectorPane.js.map +1 -0
  182. package/dist/esm/next/components/DualListSelector/DualListSelectorTree.d.ts +48 -0
  183. package/dist/esm/next/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -0
  184. package/dist/esm/next/components/DualListSelector/DualListSelectorTree.js +15 -0
  185. package/dist/esm/next/components/DualListSelector/DualListSelectorTree.js.map +1 -0
  186. package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.d.ts +32 -0
  187. package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -0
  188. package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.js +75 -0
  189. package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -0
  190. package/dist/esm/next/components/DualListSelector/index.d.ts +8 -0
  191. package/dist/esm/next/components/DualListSelector/index.d.ts.map +1 -0
  192. package/dist/esm/next/components/DualListSelector/index.js +8 -0
  193. package/dist/esm/next/components/DualListSelector/index.js.map +1 -0
  194. package/dist/esm/next/components/DualListSelector/treeUtils.d.ts +8 -0
  195. package/dist/esm/next/components/DualListSelector/treeUtils.d.ts.map +1 -0
  196. package/dist/esm/next/components/DualListSelector/treeUtils.js +68 -0
  197. package/dist/esm/next/components/DualListSelector/treeUtils.js.map +1 -0
  198. package/dist/esm/next/components/index.d.ts +1 -0
  199. package/dist/esm/next/components/index.d.ts.map +1 -1
  200. package/dist/esm/next/components/index.js +1 -0
  201. package/dist/esm/next/components/index.js.map +1 -1
  202. package/dist/js/components/Checkbox/Checkbox.js +2 -2
  203. package/dist/js/components/Checkbox/Checkbox.js.map +1 -1
  204. package/dist/js/components/JumpLinks/JumpLinks.d.ts +3 -1
  205. package/dist/js/components/JumpLinks/JumpLinks.d.ts.map +1 -1
  206. package/dist/js/components/JumpLinks/JumpLinks.js +19 -7
  207. package/dist/js/components/JumpLinks/JumpLinks.js.map +1 -1
  208. package/dist/js/components/MenuToggle/MenuToggle.js +1 -1
  209. package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
  210. package/dist/js/components/Radio/Radio.js +2 -2
  211. package/dist/js/components/Radio/Radio.js.map +1 -1
  212. package/dist/js/components/SearchInput/SearchInput.d.ts +2 -0
  213. package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
  214. package/dist/js/components/SearchInput/SearchInput.js +2 -2
  215. package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
  216. package/dist/js/components/Select/Select.d.ts +6 -0
  217. package/dist/js/components/Select/Select.d.ts.map +1 -1
  218. package/dist/js/components/Select/Select.js +3 -3
  219. package/dist/js/components/Select/Select.js.map +1 -1
  220. package/dist/js/components/TextInputGroup/TextInputGroupMain.d.ts +2 -0
  221. package/dist/js/components/TextInputGroup/TextInputGroupMain.d.ts.map +1 -1
  222. package/dist/js/components/TextInputGroup/TextInputGroupMain.js +3 -3
  223. package/dist/js/components/TextInputGroup/TextInputGroupMain.js.map +1 -1
  224. package/dist/js/helpers/Popper/Popper.js +2 -2
  225. package/dist/js/helpers/Popper/Popper.js.map +1 -1
  226. package/dist/js/index.d.ts +0 -1
  227. package/dist/js/index.d.ts.map +1 -1
  228. package/dist/js/index.js +0 -1
  229. package/dist/js/index.js.map +1 -1
  230. package/dist/js/next/components/DualListSelector/DualListSelector.d.ts +23 -0
  231. package/dist/js/next/components/DualListSelector/DualListSelector.d.ts.map +1 -0
  232. package/dist/js/next/components/DualListSelector/DualListSelector.js +26 -0
  233. package/dist/js/next/components/DualListSelector/DualListSelector.js.map +1 -0
  234. package/dist/js/next/components/DualListSelector/DualListSelectorContext.d.ts +19 -0
  235. package/dist/js/next/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -0
  236. package/dist/js/next/components/DualListSelector/DualListSelectorContext.js +9 -0
  237. package/dist/js/next/components/DualListSelector/DualListSelectorContext.js.map +1 -0
  238. package/dist/js/next/components/DualListSelector/DualListSelectorControl.d.ts +25 -0
  239. package/dist/js/next/components/DualListSelector/DualListSelectorControl.d.ts.map +1 -0
  240. package/dist/js/next/components/DualListSelector/DualListSelectorControl.js +22 -0
  241. package/dist/js/next/components/DualListSelector/DualListSelectorControl.js.map +1 -0
  242. package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts +15 -0
  243. package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +1 -0
  244. package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.js +39 -0
  245. package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.js.map +1 -0
  246. package/dist/js/next/components/DualListSelector/DualListSelectorList.d.ts +8 -0
  247. package/dist/js/next/components/DualListSelector/DualListSelectorList.d.ts.map +1 -0
  248. package/dist/js/next/components/DualListSelector/DualListSelectorList.js +30 -0
  249. package/dist/js/next/components/DualListSelector/DualListSelectorList.js.map +1 -0
  250. package/dist/js/next/components/DualListSelector/DualListSelectorListItem.d.ts +29 -0
  251. package/dist/js/next/components/DualListSelector/DualListSelectorListItem.d.ts.map +1 -0
  252. package/dist/js/next/components/DualListSelector/DualListSelectorListItem.js +42 -0
  253. package/dist/js/next/components/DualListSelector/DualListSelectorListItem.js.map +1 -0
  254. package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.d.ts +24 -0
  255. package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -0
  256. package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.js +63 -0
  257. package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -0
  258. package/dist/js/next/components/DualListSelector/DualListSelectorPane.d.ts +31 -0
  259. package/dist/js/next/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -0
  260. package/dist/js/next/components/DualListSelector/DualListSelectorPane.js +31 -0
  261. package/dist/js/next/components/DualListSelector/DualListSelectorPane.js.map +1 -0
  262. package/dist/js/next/components/DualListSelector/DualListSelectorTree.d.ts +48 -0
  263. package/dist/js/next/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -0
  264. package/dist/js/next/components/DualListSelector/DualListSelectorTree.js +19 -0
  265. package/dist/js/next/components/DualListSelector/DualListSelectorTree.js.map +1 -0
  266. package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.d.ts +32 -0
  267. package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -0
  268. package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.js +78 -0
  269. package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -0
  270. package/dist/js/next/components/DualListSelector/index.d.ts +8 -0
  271. package/dist/js/next/components/DualListSelector/index.d.ts.map +1 -0
  272. package/dist/js/next/components/DualListSelector/index.js +11 -0
  273. package/dist/js/next/components/DualListSelector/index.js.map +1 -0
  274. package/dist/js/next/components/DualListSelector/treeUtils.d.ts +8 -0
  275. package/dist/js/next/components/DualListSelector/treeUtils.d.ts.map +1 -0
  276. package/dist/js/next/components/DualListSelector/treeUtils.js +77 -0
  277. package/dist/js/next/components/DualListSelector/treeUtils.js.map +1 -0
  278. package/dist/js/next/components/index.d.ts +1 -0
  279. package/dist/js/next/components/index.d.ts.map +1 -1
  280. package/dist/js/next/components/index.js +1 -0
  281. package/dist/js/next/components/index.js.map +1 -1
  282. package/dist/umd/react-core.min.js +3 -3
  283. package/helpers/package.json +1 -1
  284. package/layouts/package.json +1 -1
  285. package/next/package.json +1 -1
  286. package/package.json +7 -6
  287. package/scripts/cleanDistExports.js +14 -0
  288. package/src/components/Accordion/__tests__/AccordionToggle.test.tsx +28 -0
  289. package/src/components/Checkbox/Checkbox.tsx +2 -2
  290. package/src/components/JumpLinks/JumpLinks.tsx +21 -7
  291. package/src/components/MenuToggle/MenuToggle.tsx +1 -1
  292. package/src/components/MenuToggle/examples/MenuToggleTypeahead.tsx +1 -1
  293. package/src/components/Radio/Radio.tsx +2 -2
  294. package/src/components/SearchInput/SearchInput.tsx +4 -0
  295. package/src/components/Select/Select.tsx +13 -1
  296. package/src/components/Select/examples/SelectMultiTypeahead.tsx +8 -1
  297. package/src/components/Select/examples/SelectMultiTypeaheadCheckbox.tsx +8 -1
  298. package/src/components/Select/examples/SelectMultiTypeaheadCreatable.tsx +8 -1
  299. package/src/components/Select/examples/SelectTypeahead.tsx +8 -1
  300. package/src/components/Select/examples/SelectTypeaheadCreatable.tsx +8 -1
  301. package/src/components/TextInputGroup/TextInputGroupMain.tsx +5 -0
  302. package/src/components/TextInputGroup/__tests__/TextInputGroupMain.test.tsx +8 -0
  303. package/src/demos/JumpLinks.md +4 -3
  304. package/src/demos/examples/JumpLinks/JumpLinksWithDrawer.js +25 -16
  305. package/src/helpers/Popper/Popper.tsx +1 -1
  306. package/src/index.ts +0 -1
  307. package/src/next/components/DualListSelector/DualListSelector.tsx +50 -0
  308. package/src/next/components/DualListSelector/DualListSelectorContext.ts +21 -0
  309. package/src/next/components/DualListSelector/DualListSelectorControl.tsx +66 -0
  310. package/src/next/components/DualListSelector/DualListSelectorControlsWrapper.tsx +87 -0
  311. package/src/next/components/DualListSelector/DualListSelectorList.tsx +57 -0
  312. package/src/next/components/DualListSelector/DualListSelectorListItem.tsx +105 -0
  313. package/src/next/components/DualListSelector/DualListSelectorListWrapper.tsx +124 -0
  314. package/src/next/components/DualListSelector/DualListSelectorPane.tsx +94 -0
  315. package/src/next/components/DualListSelector/DualListSelectorTree.tsx +110 -0
  316. package/src/next/components/DualListSelector/DualListSelectorTreeItem.tsx +184 -0
  317. package/src/next/components/DualListSelector/__tests__/DualListSelector.test.tsx +26 -0
  318. package/src/next/components/DualListSelector/__tests__/__snapshots__/DualListSelector.test.tsx.snap +122 -0
  319. package/src/next/components/DualListSelector/examples/DualListSelector.md +99 -0
  320. package/src/next/components/DualListSelector/examples/DualListSelectorBasic.tsx +157 -0
  321. package/src/next/components/DualListSelector/examples/DualListSelectorBasicSearch.tsx +211 -0
  322. package/src/next/components/DualListSelector/examples/DualListSelectorBasicTooltips.tsx +165 -0
  323. package/src/next/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +344 -0
  324. package/src/next/components/DualListSelector/examples/DualListSelectorDragDrop.tsx +184 -0
  325. package/src/next/components/DualListSelector/examples/DualListSelectorTree.tsx +373 -0
  326. package/src/next/components/DualListSelector/index.ts +7 -0
  327. package/src/next/components/DualListSelector/treeUtils.ts +81 -0
  328. package/src/next/components/index.ts +1 -0
  329. package/dist/esm/demos/index.d.ts +0 -3
  330. package/dist/esm/demos/index.d.ts.map +0 -1
  331. package/dist/esm/demos/index.js +0 -3
  332. package/dist/esm/demos/index.js.map +0 -1
  333. package/dist/js/demos/index.d.ts +0 -3
  334. package/dist/js/demos/index.d.ts.map +0 -1
  335. package/dist/js/demos/index.js +0 -6
  336. package/dist/js/demos/index.js.map +0 -1
  337. package/src/components/DataList/__tests__/__snapshots__/DataListAction.test.tsx.snap~HEAD +0 -11
  338. package/src/components/DataList/__tests__/__snapshots__/DataListAction.test.tsx.snap~main +0 -11
  339. package/src/components/DataList/__tests__/__snapshots__/DataListItemCells.test.tsx.snap~HEAD +0 -9
  340. package/src/components/DataList/__tests__/__snapshots__/DataListItemCells.test.tsx.snap~main +0 -9
  341. package/src/components/DataList/__tests__/__snapshots__/DataListItemRow.test.tsx.snap~HEAD +0 -9
  342. package/src/components/DataList/__tests__/__snapshots__/DataListItemRow.test.tsx.snap~main +0 -9
  343. package/src/demos/index.ts +0 -2
@@ -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-alpha.38","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-alpha.39","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-alpha.38","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-alpha.39","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-alpha.38","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-alpha.39","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "6.0.0-alpha.39",
3
+ "version": "6.0.0-alpha.40",
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",
@@ -43,12 +43,13 @@
43
43
  "build:single:packages": "node ../../scripts/build-single-packages.js --config single-packages.config.json",
44
44
  "clean": "rimraf dist components layouts helpers next deprecated node_modules",
45
45
  "generate": "node scripts/copyStyles.js",
46
- "subpaths": "node ../../scripts/exportSubpaths.js --config subpaths.config.json"
46
+ "subpaths": "node ../../scripts/exportSubpaths.js --config subpaths.config.json",
47
+ "clean:exports": "node scripts/cleanDistExports.js"
47
48
  },
48
49
  "dependencies": {
49
- "@patternfly/react-icons": "^6.0.0-alpha.14",
50
- "@patternfly/react-styles": "^6.0.0-alpha.14",
51
- "@patternfly/react-tokens": "^6.0.0-alpha.14",
50
+ "@patternfly/react-icons": "^6.0.0-alpha.15",
51
+ "@patternfly/react-styles": "^6.0.0-alpha.15",
52
+ "@patternfly/react-tokens": "^6.0.0-alpha.15",
52
53
  "focus-trap": "7.5.2",
53
54
  "react-dropzone": "^14.2.3",
54
55
  "tslib": "^2.5.0"
@@ -73,5 +74,5 @@
73
74
  "react": "^17 || ^18",
74
75
  "react-dom": "^17 || ^18"
75
76
  },
76
- "gitHead": "46db661285dacdab56d6ddc78f0cd31f56a1edea"
77
+ "gitHead": "296ac2be2f24ef201a347384c1561a311d0c8c54"
77
78
  }
@@ -0,0 +1,14 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ const distIndexFiles = ['esm', 'js'].map((dir) => path.join(process.cwd(), 'dist', dir, 'index.js'));
5
+ const distIndexDeclarationFiles = ['esm', 'js'].map((dir) => path.join(process.cwd(), 'dist', dir, 'index.d.ts'));
6
+
7
+ [...distIndexFiles, ...distIndexDeclarationFiles].forEach((file) => {
8
+ const fileContents = fs.readFileSync(file, 'utf8');
9
+ const newFileContents = fileContents
10
+ .split('\n')
11
+ .filter((line) => !line.includes('demos'))
12
+ .join('\n');
13
+ fs.writeFileSync(file, newFileContents);
14
+ });
@@ -183,6 +183,34 @@ test('Renders toggle icon before toggle text when togglePosition from context =
183
183
  expect(toggle.firstChild).toHaveClass(styles.accordionToggleIcon);
184
184
  });
185
185
 
186
+ test('Renders toggle text before toggle icon by default', () => {
187
+ render(
188
+ <AccordionContext.Provider value={{ ToggleContainer: 'h3' }}>
189
+ <AccordionToggle id="accordion-toggle" isExpanded>
190
+ Test
191
+ </AccordionToggle>
192
+ </AccordionContext.Provider>
193
+ );
194
+
195
+ const toggle = screen.getByRole('button');
196
+
197
+ expect(toggle.firstChild).toHaveClass(styles.accordionToggleText);
198
+ });
199
+
200
+ test('Renders toggle icon before toggle text when togglePosition from context = "start"', () => {
201
+ render(
202
+ <AccordionContext.Provider value={{ ToggleContainer: 'h3', togglePosition: 'start' }}>
203
+ <AccordionToggle id="accordion-toggle" isExpanded>
204
+ Test
205
+ </AccordionToggle>
206
+ </AccordionContext.Provider>
207
+ );
208
+
209
+ const toggle = screen.getByRole('button');
210
+
211
+ expect(toggle.firstChild).toHaveClass(styles.accordionToggleIcon);
212
+ });
213
+
186
214
  test('Matches the snapshot', () => {
187
215
  const { asFragment } = render(
188
216
  <AccordionContext.Provider value={{ ToggleContainer: 'h3' }}>
@@ -137,7 +137,7 @@ class Checkbox extends React.Component<CheckboxProps, CheckboxState> {
137
137
  const labelRendered = label ? (
138
138
  <Label
139
139
  className={css(styles.checkLabel, isDisabled && styles.modifiers.disabled)}
140
- htmlFor={!wrapWithLabel && props.id}
140
+ htmlFor={!wrapWithLabel ? props.id : undefined}
141
141
  >
142
142
  {label}
143
143
  {isRequired && (
@@ -154,7 +154,7 @@ class Checkbox extends React.Component<CheckboxProps, CheckboxState> {
154
154
  return (
155
155
  <Component
156
156
  className={css(styles.check, !label && styles.modifiers.standalone, className)}
157
- htmlFor={wrapWithLabel && props.id}
157
+ htmlFor={wrapWithLabel ? props.id : undefined}
158
158
  >
159
159
  {isLabelBeforeButton ? (
160
160
  <>
@@ -21,7 +21,9 @@ export interface JumpLinksProps extends Omit<React.HTMLProps<HTMLElement>, 'labe
21
21
  alwaysShowLabel?: boolean;
22
22
  /** Adds an accessible label to the internal nav element. Defaults to the value of the label prop. */
23
23
  'aria-label'?: string;
24
- /** Selector for the scrollable element to spy on. Not passing a selector disables spying. */
24
+ /** Reference to the scrollable element to spy on. Takes precedence over scrollableSelector. Not passing a scrollableRef or scrollableSelector disables spying. */
25
+ scrollableRef?: HTMLElement | (() => HTMLElement) | React.RefObject<HTMLElement>;
26
+ /** Selector for the scrollable element to spy on. Not passing a scrollableSelector or scrollableRef disables spying. */
25
27
  scrollableSelector?: string;
26
28
  /** The index of the child Jump link to make active. */
27
29
  activeIndex?: number;
@@ -81,6 +83,7 @@ export const JumpLinks: React.FunctionComponent<JumpLinksProps> = ({
81
83
  children,
82
84
  label,
83
85
  'aria-label': ariaLabel = typeof label === 'string' ? label : null,
86
+ scrollableRef,
84
87
  scrollableSelector,
85
88
  activeIndex: activeIndexProp = 0,
86
89
  offset = 0,
@@ -91,18 +94,29 @@ export const JumpLinks: React.FunctionComponent<JumpLinksProps> = ({
91
94
  className,
92
95
  ...props
93
96
  }: JumpLinksProps) => {
94
- const hasScrollSpy = Boolean(scrollableSelector);
97
+ const hasScrollSpy = Boolean(scrollableRef || scrollableSelector);
95
98
  const [scrollItems, setScrollItems] = React.useState(hasScrollSpy ? getScrollItems(children, []) : []);
96
99
  const [activeIndex, setActiveIndex] = React.useState(activeIndexProp);
97
100
  const [isExpanded, setIsExpanded] = React.useState(isExpandedProp);
98
101
  // Boolean to disable scroll listener from overriding active state of clicked jumplink
99
102
  const isLinkClicked = React.useRef(false);
100
- // Allow expanding to be controlled for a niche use case
101
- React.useEffect(() => setIsExpanded(isExpandedProp), [isExpandedProp]);
102
103
  const navRef = React.useRef<HTMLElement>();
103
104
 
104
105
  let scrollableElement: HTMLElement;
105
106
 
107
+ const getScrollableElement = () => {
108
+ if (scrollableRef) {
109
+ if (scrollableRef instanceof HTMLElement) {
110
+ return scrollableRef;
111
+ } else if (typeof scrollableRef === 'function') {
112
+ return scrollableRef();
113
+ }
114
+ return (scrollableRef as React.RefObject<HTMLElement>).current;
115
+ } else if (scrollableSelector) {
116
+ return document.querySelector(scrollableSelector) as HTMLElement;
117
+ }
118
+ };
119
+
106
120
  const scrollSpy = React.useCallback(() => {
107
121
  if (!canUseDOM || !hasScrollSpy || !(scrollableElement instanceof HTMLElement)) {
108
122
  return;
@@ -139,14 +153,14 @@ export const JumpLinks: React.FunctionComponent<JumpLinksProps> = ({
139
153
  }, [scrollItems, hasScrollSpy, scrollableElement, offset]);
140
154
 
141
155
  React.useEffect(() => {
142
- scrollableElement = document.querySelector(scrollableSelector) as HTMLElement;
156
+ scrollableElement = getScrollableElement();
143
157
  if (!(scrollableElement instanceof HTMLElement)) {
144
158
  return;
145
159
  }
146
160
  scrollableElement.addEventListener('scroll', scrollSpy);
147
161
 
148
162
  return () => scrollableElement.removeEventListener('scroll', scrollSpy);
149
- }, [scrollableSelector, scrollSpy]);
163
+ }, [scrollableElement, scrollSpy, getScrollableElement]);
150
164
 
151
165
  React.useEffect(() => {
152
166
  scrollSpy();
@@ -174,7 +188,7 @@ export const JumpLinks: React.FunctionComponent<JumpLinksProps> = ({
174
188
 
175
189
  if (newScrollItem) {
176
190
  // we have to support scrolling to an offset due to sticky sidebar
177
- const scrollableElement = document.querySelector(scrollableSelector) as HTMLElement;
191
+ const scrollableElement = getScrollableElement() as HTMLElement;
178
192
  if (scrollableElement instanceof HTMLElement) {
179
193
  if (isResponsive(navRef.current)) {
180
194
  // Remove class immediately so we can get collapsed height
@@ -96,7 +96,7 @@ class MenuToggleBase extends React.Component<MenuToggleProps> {
96
96
  className={css(styles.menuToggleButton)}
97
97
  aria-expanded={isExpanded}
98
98
  onClick={onClick}
99
- aria-label="Menu toggle"
99
+ aria-label={ariaLabel || 'Menu toggle'}
100
100
  >
101
101
  {toggleControls}
102
102
  </button>
@@ -16,7 +16,7 @@ export const MenuToggleTypeahead: React.FunctionComponent = () => {
16
16
  };
17
17
 
18
18
  return (
19
- <MenuToggle variant="typeahead" isFullWidth>
19
+ <MenuToggle variant="typeahead" isFullWidth aria-label="Typeahead menu toggle">
20
20
  <TextInputGroup isPlain>
21
21
  <TextInputGroupMain
22
22
  value={inputValue}
@@ -119,7 +119,7 @@ class Radio extends React.Component<RadioProps, { ouiaStateId: string }> {
119
119
  const labelRendered = label ? (
120
120
  <Label
121
121
  className={css(styles.radioLabel, isDisabled && styles.modifiers.disabled)}
122
- htmlFor={!wrapWithLabel && props.id}
122
+ htmlFor={!wrapWithLabel ? props.id : undefined}
123
123
  >
124
124
  {label}
125
125
  </Label>
@@ -130,7 +130,7 @@ class Radio extends React.Component<RadioProps, { ouiaStateId: string }> {
130
130
  return (
131
131
  <Component
132
132
  className={css(styles.radio, !label && styles.modifiers.standalone, className)}
133
- htmlFor={wrapWithLabel && props.id}
133
+ htmlFor={wrapWithLabel ? props.id : undefined}
134
134
  >
135
135
  {isLabelBeforeButton ? (
136
136
  <>
@@ -75,6 +75,8 @@ export interface SearchInputProps extends Omit<React.HTMLProps<HTMLDivElement>,
75
75
  hasWordsAttrLabel?: React.ReactNode;
76
76
  /** A suggestion for autocompleting. */
77
77
  hint?: string;
78
+ /** Id for the search input */
79
+ searchInputId?: string;
78
80
  /** @hide A reference object to attach to the input box. */
79
81
  innerRef?: React.RefObject<any>;
80
82
  /** A flag for controlling the open state of a custom advanced search implementation. */
@@ -126,6 +128,7 @@ export interface SearchInputProps extends Omit<React.HTMLProps<HTMLDivElement>,
126
128
 
127
129
  const SearchInputBase: React.FunctionComponent<SearchInputProps> = ({
128
130
  className,
131
+ searchInputId,
129
132
  value = '',
130
133
  attributes = [] as string[],
131
134
  formAdditionalItems,
@@ -298,6 +301,7 @@ const SearchInputBase: React.FunctionComponent<SearchInputProps> = ({
298
301
  onKeyDown={onEnter}
299
302
  onChange={onChangeHandler}
300
303
  name={name}
304
+ inputId={searchInputId}
301
305
  />
302
306
  {(renderUtilities || areUtilitiesDisplayed) && (
303
307
  <TextInputGroupUtilities>
@@ -70,6 +70,12 @@ export interface SelectProps extends MenuProps, OUIAProps {
70
70
  role?: string;
71
71
  /** Additional properties to pass to the popper */
72
72
  popperProps?: SelectPopperProps;
73
+ /** Height of the select menu */
74
+ menuHeight?: string;
75
+ /** Maximum height of select menu */
76
+ maxMenuHeight?: string;
77
+ /** Indicates if the select menu should be scrollable */
78
+ isScrollable?: boolean;
73
79
  }
74
80
 
75
81
  const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
@@ -87,6 +93,9 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
87
93
  zIndex = 9999,
88
94
  role = 'listbox',
89
95
  popperProps,
96
+ menuHeight,
97
+ maxMenuHeight,
98
+ isScrollable,
90
99
  ...props
91
100
  }: SelectProps & OUIAProps) => {
92
101
  const localMenuRef = React.useRef<HTMLDivElement>();
@@ -151,6 +160,7 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
151
160
  }}
152
161
  isPlain={isPlain}
153
162
  selected={selected}
163
+ isScrollable={isScrollable}
154
164
  {...getOUIAProps(
155
165
  Select.displayName,
156
166
  props.ouiaId !== undefined ? props.ouiaId : getDefaultOUIAId(Select.displayName),
@@ -158,7 +168,9 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
158
168
  )}
159
169
  {...props}
160
170
  >
161
- <MenuContent>{children}</MenuContent>
171
+ <MenuContent menuHeight={menuHeight} maxMenuHeight={maxMenuHeight}>
172
+ {children}
173
+ </MenuContent>
162
174
  </Menu>
163
175
  );
164
176
  return (
@@ -137,7 +137,14 @@ export const SelectMultiTypeahead: React.FunctionComponent = () => {
137
137
  };
138
138
 
139
139
  const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
140
- <MenuToggle variant="typeahead" onClick={onToggleClick} innerRef={toggleRef} isExpanded={isOpen} isFullWidth>
140
+ <MenuToggle
141
+ variant="typeahead"
142
+ aria-label="Multi typeahead menu toggle"
143
+ onClick={onToggleClick}
144
+ innerRef={toggleRef}
145
+ isExpanded={isOpen}
146
+ isFullWidth
147
+ >
141
148
  <TextInputGroup isPlain>
142
149
  <TextInputGroupMain
143
150
  value={inputValue}
@@ -140,7 +140,14 @@ export const SelectMultiTypeaheadCheckbox: React.FunctionComponent = () => {
140
140
  }, [selected]);
141
141
 
142
142
  const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
143
- <MenuToggle variant="typeahead" onClick={onToggleClick} innerRef={toggleRef} isExpanded={isOpen} isFullWidth>
143
+ <MenuToggle
144
+ variant="typeahead"
145
+ aria-label="Multi typeahead checkbox menu toggle"
146
+ onClick={onToggleClick}
147
+ innerRef={toggleRef}
148
+ isExpanded={isOpen}
149
+ isFullWidth
150
+ >
144
151
  <TextInputGroup isPlain>
145
152
  <TextInputGroupMain
146
153
  value={inputValue}
@@ -147,7 +147,14 @@ export const SelectMultiTypeaheadCreatable: React.FunctionComponent = () => {
147
147
  };
148
148
 
149
149
  const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
150
- <MenuToggle variant="typeahead" onClick={onToggleClick} innerRef={toggleRef} isExpanded={isOpen} isFullWidth>
150
+ <MenuToggle
151
+ variant="typeahead"
152
+ aria-label="Multi typeahead creatable menu toggle"
153
+ onClick={onToggleClick}
154
+ innerRef={toggleRef}
155
+ isExpanded={isOpen}
156
+ isFullWidth
157
+ >
151
158
  <TextInputGroup isPlain>
152
159
  <TextInputGroupMain
153
160
  value={inputValue}
@@ -143,7 +143,14 @@ export const SelectBasic: React.FunctionComponent = () => {
143
143
  };
144
144
 
145
145
  const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
146
- <MenuToggle ref={toggleRef} variant="typeahead" onClick={onToggleClick} isExpanded={isOpen} isFullWidth>
146
+ <MenuToggle
147
+ ref={toggleRef}
148
+ variant="typeahead"
149
+ aria-label="Typeahead menu toggle"
150
+ onClick={onToggleClick}
151
+ isExpanded={isOpen}
152
+ isFullWidth
153
+ >
147
154
  <TextInputGroup isPlain>
148
155
  <TextInputGroupMain
149
156
  value={inputValue}
@@ -154,7 +154,14 @@ export const SelectTypeaheadCreatable: React.FunctionComponent = () => {
154
154
  };
155
155
 
156
156
  const toggle = (toggleRef: React.Ref<MenuToggleElement>) => (
157
- <MenuToggle ref={toggleRef} variant="typeahead" onClick={onToggleClick} isExpanded={isOpen} isFullWidth>
157
+ <MenuToggle
158
+ ref={toggleRef}
159
+ variant="typeahead"
160
+ aria-label="Typeahead creatable menu toggle"
161
+ onClick={onToggleClick}
162
+ isExpanded={isOpen}
163
+ isFullWidth
164
+ >
158
165
  <TextInputGroup isPlain>
159
166
  <TextInputGroupMain
160
167
  value={inputValue}
@@ -53,6 +53,8 @@ export interface TextInputGroupMainProps extends Omit<React.HTMLProps<HTMLDivEle
53
53
  isExpanded?: boolean;
54
54
  /** @beta The id of the element(s) controlled by the input. Required if role has a value of "combobox". */
55
55
  'aria-controls'?: string;
56
+ /** The id of the input element */
57
+ inputId?: string;
56
58
  }
57
59
 
58
60
  const TextInputGroupMainBase: React.FunctionComponent<TextInputGroupMainProps> = ({
@@ -73,6 +75,7 @@ const TextInputGroupMainBase: React.FunctionComponent<TextInputGroupMainProps> =
73
75
  role,
74
76
  isExpanded,
75
77
  'aria-controls': ariaControls,
78
+ inputId,
76
79
  ...props
77
80
  }: TextInputGroupMainProps) => {
78
81
  const { isDisabled } = React.useContext(TextInputGroupContext);
@@ -94,6 +97,7 @@ const TextInputGroupMainBase: React.FunctionComponent<TextInputGroupMainProps> =
94
97
  disabled
95
98
  aria-hidden="true"
96
99
  value={hint}
100
+ id={inputId}
97
101
  />
98
102
  )}
99
103
  {icon && <span className={css(styles.textInputGroupIcon)}>{icon}</span>}
@@ -110,6 +114,7 @@ const TextInputGroupMainBase: React.FunctionComponent<TextInputGroupMainProps> =
110
114
  placeholder={inputPlaceHolder}
111
115
  name={name}
112
116
  aria-activedescendant={ariaActivedescendant}
117
+ id={inputId}
113
118
  {...(role && { role })}
114
119
  {...(isExpanded !== undefined && { 'aria-expanded': isExpanded })}
115
120
  {...(ariaControls && { 'aria-controls': ariaControls })}
@@ -109,6 +109,14 @@ describe('TextInputGroupMain', () => {
109
109
  expect(inputValue).toBeVisible();
110
110
  });
111
111
 
112
+ it('passes the inputId prop to the input', () => {
113
+ render(<TextInputGroupMain inputId="input-id">Test</TextInputGroupMain>);
114
+
115
+ const input = screen.getByRole('textbox');
116
+
117
+ expect(input).toHaveAttribute('id', 'input-id');
118
+ });
119
+
112
120
  it('passes the placeholder prop to the input', () => {
113
121
  render(<TextInputGroupMain placeholder="placeholder text">Test</TextInputGroupMain>);
114
122
 
@@ -9,9 +9,10 @@ import mastheadStyles from '@patternfly/react-styles/css/components/Masthead/mas
9
9
 
10
10
  JumpLinks has a scrollspy built-in to make your implementation easier. When implementing JumpLinks be sure to:
11
11
 
12
- 1. Find the correct `scrollableSelector` for your page via [Firefox's debugging scrollable overflow](https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Debug_Scrollable_Overflow) or by adding `hasOverflowScroll` to a [PageSection](/components/page#pagesection) or [PageGroup](/components/page#pagegroup).
12
+ 1. Find the correct scrollable element for your page via [Firefox's debugging scrollable overflow](https://developer.mozilla.org/en-US/docs/Tools/Page_Inspector/How_to/Debug_Scrollable_Overflow) or by adding `hasOverflowScroll` to a [PageSection](/components/page#pagesection) or [PageGroup](/components/page#pagegroup).
13
13
  - If you add `hasOverflowScroll` to a Page sub-component you should also add a relevant aria-label to that component as well.
14
- 2. Provide `href`s to your JumpLinksItems which match the `id` of elements you want to spy on. If you wish to scroll to a different item than you're linking to use the `node` prop.
14
+ 2. Provide a reference to the scrollable element to `scrollableRef` prop or a CSS selector of the scrollable element to `scrollableSelector` prop.
15
+ 3. Provide `href`s to your JumpLinksItems which match the `id` of elements you want to spy on. If you wish to scroll to a different item than you're linking to use the `node` prop.
15
16
 
16
17
  ### Scrollspy with subsections
17
18
 
@@ -141,7 +142,7 @@ ScrollspyH2 = () => {
141
142
 
142
143
  This demo shows how jump links can be used in combination with a drawer.
143
144
 
144
- The `scrollableSelector` prop passed to the jump links component is an `id` that was placed on the `DrawerContent` component.
145
+ This demo uses a `scrollableRef` prop on the JumpLinks component, which is a React ref to the `DrawerContent` component.
145
146
 
146
147
  ```js isFullscreen file="./examples/JumpLinks/JumpLinksWithDrawer.js"
147
148
  ```
@@ -16,11 +16,33 @@ import {
16
16
  SidebarContent,
17
17
  SidebarPanel,
18
18
  TextContent,
19
- getResizeObserver
19
+ getResizeObserver,
20
+ DrawerContext
20
21
  } from '@patternfly/react-core';
21
22
  import { DashboardWrapper } from '@patternfly/react-core/src/demos/DashboardWrapper';
22
23
  import mastheadStyles from '@patternfly/react-styles/css/components/Masthead/masthead';
23
24
 
25
+ const JumpLinksWrapper = ({ offsetHeight, headings }) => {
26
+ const { drawerContentRef } = React.useContext(DrawerContext);
27
+
28
+ return (
29
+ <JumpLinks
30
+ isVertical={true}
31
+ label="Jump to section"
32
+ scrollableRef={drawerContentRef}
33
+ offset={offsetHeight}
34
+ expandable={{ default: 'expandable', md: 'nonExpandable' }}
35
+ >
36
+ {headings.map((heading) => (
37
+ <JumpLinksItem key={heading} href={`#jump-links-drawer-jump-links-${heading.toLowerCase()}`}>
38
+ {`${heading} section`}
39
+ <JumpLinksList></JumpLinksList>
40
+ </JumpLinksItem>
41
+ ))}
42
+ </JumpLinks>
43
+ );
44
+ };
45
+
24
46
  export const JumpLinksWithDrawer = () => {
25
47
  const headings = ['First', 'Second', 'Third', 'Fourth', 'Fifth'];
26
48
 
@@ -65,25 +87,12 @@ export const JumpLinksWithDrawer = () => {
65
87
  return (
66
88
  <DashboardWrapper breadcrumb={null} mainContainerId="scrollable-element">
67
89
  <Drawer isExpanded={isExpanded}>
68
- <DrawerContent panelContent={panelContent} id="jump-links-drawer-drawer-scrollable-container">
90
+ <DrawerContent panelContent={panelContent}>
69
91
  <DrawerContentBody>
70
92
  <Sidebar>
71
93
  <SidebarPanel variant="sticky">
72
94
  <PageSection>
73
- <JumpLinks
74
- isVertical={true}
75
- label="Jump to section"
76
- scrollableSelector="#jump-links-drawer-drawer-scrollable-container"
77
- offset={offsetHeight}
78
- expandable={{ default: 'expandable', md: 'nonExpandable' }}
79
- >
80
- {headings.map((heading) => (
81
- <JumpLinksItem key={heading} href={`#jump-links-drawer-jump-links-${heading.toLowerCase()}`}>
82
- {`${heading} section`}
83
- <JumpLinksList></JumpLinksList>
84
- </JumpLinksItem>
85
- ))}
86
- </JumpLinks>
95
+ <JumpLinksWrapper offsetHeight={offsetHeight} headings={headings} />
87
96
  </PageSection>
88
97
  </SidebarPanel>
89
98
  <SidebarContent>
@@ -449,7 +449,7 @@ export const Popper: React.FunctionComponent<PopperProps> = ({
449
449
  React.useEffect(() => {
450
450
  // currentPopperContent = {tooltip children} || {dropdown children}
451
451
  const currentPopperContent =
452
- popper?.props?.children[1]?.props?.children || popper?.props?.children?.props?.children;
452
+ popper?.props?.children?.[1]?.props?.children || popper?.props?.children?.props?.children;
453
453
  setPopperContent(currentPopperContent);
454
454
 
455
455
  if (currentPopperContent && popperContent && currentPopperContent !== popperContent) {
package/src/index.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  export * from './components';
2
- export * from './demos';
3
2
  export * from './layouts';
4
3
  export * from './helpers';
5
4
  export * from './styles';
@@ -0,0 +1,50 @@
1
+ import * as React from 'react';
2
+ import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
3
+ import { css } from '@patternfly/react-styles';
4
+ import { GenerateId, PickOptional } from '../../../helpers';
5
+ import { DualListSelectorContext } from './DualListSelectorContext';
6
+
7
+ /** Acts as a container for all other DualListSelector sub-components when using a
8
+ * composable dual list selector.
9
+ */
10
+
11
+ export interface DualListSelectorProps {
12
+ /** Additional classes applied to the dual list selector. */
13
+ className?: string;
14
+ /** ID of the dual list selector. */
15
+ id?: string;
16
+ /** Flag indicating if the dual list selector uses trees instead of simple lists. */
17
+ isTree?: boolean;
18
+ /** Content to be rendered in the dual list selector. */
19
+ children?: React.ReactNode;
20
+ }
21
+
22
+ class DualListSelector extends React.Component<DualListSelectorProps> {
23
+ static displayName = 'DualListSelector';
24
+ static defaultProps: PickOptional<DualListSelectorProps> = {
25
+ children: '',
26
+ isTree: false
27
+ };
28
+
29
+ constructor(props: DualListSelectorProps) {
30
+ super(props);
31
+ }
32
+
33
+ render() {
34
+ const { className, children, id, isTree, ...props } = this.props;
35
+
36
+ return (
37
+ <DualListSelectorContext.Provider value={{ isTree }}>
38
+ <GenerateId>
39
+ {(randomId) => (
40
+ <div className={css(styles.dualListSelector, className)} id={id || randomId} {...props}>
41
+ {children}
42
+ </div>
43
+ )}
44
+ </GenerateId>
45
+ </DualListSelectorContext.Provider>
46
+ );
47
+ }
48
+ }
49
+
50
+ export { DualListSelector };
@@ -0,0 +1,21 @@
1
+ import * as React from 'react';
2
+
3
+ export const DualListSelectorContext = React.createContext<{
4
+ isTree?: boolean;
5
+ }>({ isTree: false });
6
+
7
+ export const DualListSelectorListContext = React.createContext<{
8
+ setFocusedOption?: (id: string) => void;
9
+ isTree?: boolean;
10
+ ariaLabelledBy?: string;
11
+ focusedOption?: string;
12
+ displayOption?: (option: React.ReactNode) => boolean;
13
+ selectedOptions?: string[] | number[];
14
+ id?: string;
15
+ options?: React.ReactNode[];
16
+ isDisabled?: boolean;
17
+ }>({});
18
+
19
+ export const DualListSelectorPaneContext = React.createContext<{
20
+ isChosen: boolean;
21
+ }>({ isChosen: false });