@patternfly/react-core 5.3.0-prerelease.1 → 5.3.0-prerelease.10

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 (355) hide show
  1. package/CHANGELOG.md +54 -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/Chip/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/DataList/package.json +1 -1
  24. package/dist/dynamic/components/DatePicker/package.json +1 -1
  25. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  26. package/dist/dynamic/components/Divider/package.json +1 -1
  27. package/dist/dynamic/components/DragDrop/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/Text/package.json +1 -1
  72. package/dist/dynamic/components/TextArea/package.json +1 -1
  73. package/dist/dynamic/components/TextInput/package.json +1 -1
  74. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  75. package/dist/dynamic/components/Tile/package.json +1 -1
  76. package/dist/dynamic/components/TimePicker/package.json +1 -1
  77. package/dist/dynamic/components/Timestamp/package.json +1 -1
  78. package/dist/dynamic/components/Title/package.json +1 -1
  79. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  80. package/dist/dynamic/components/Toolbar/package.json +1 -1
  81. package/dist/dynamic/components/Tooltip/package.json +1 -1
  82. package/dist/dynamic/components/TreeView/package.json +1 -1
  83. package/dist/dynamic/components/Truncate/package.json +1 -1
  84. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  85. package/dist/dynamic/components/Wizard/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/ApplicationLauncher/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/CalendarMonth/CalendarMonth.d.ts.map +1 -1
  123. package/dist/esm/components/CalendarMonth/CalendarMonth.js +30 -12
  124. package/dist/esm/components/CalendarMonth/CalendarMonth.js.map +1 -1
  125. package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts +5 -5
  126. package/dist/esm/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
  127. package/dist/esm/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
  128. package/dist/esm/components/ClipboardCopy/ClipboardCopyExpanded.d.ts +1 -0
  129. package/dist/esm/components/ClipboardCopy/ClipboardCopyExpanded.d.ts.map +1 -1
  130. package/dist/esm/components/ClipboardCopy/ClipboardCopyExpanded.js.map +1 -1
  131. package/dist/esm/components/Dropdown/Dropdown.js +2 -2
  132. package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
  133. package/dist/esm/components/Menu/Menu.d.ts.map +1 -1
  134. package/dist/esm/components/Menu/Menu.js +5 -1
  135. package/dist/esm/components/Menu/Menu.js.map +1 -1
  136. package/dist/esm/components/Menu/MenuContainer.js +2 -2
  137. package/dist/esm/components/Menu/MenuContainer.js.map +1 -1
  138. package/dist/esm/components/MenuToggle/MenuToggle.js +1 -1
  139. package/dist/esm/components/MenuToggle/MenuToggle.js.map +1 -1
  140. package/dist/esm/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
  141. package/dist/esm/components/Pagination/PaginationOptionsMenu.js +2 -4
  142. package/dist/esm/components/Pagination/PaginationOptionsMenu.js.map +1 -1
  143. package/dist/esm/components/SearchInput/SearchInput.d.ts +2 -0
  144. package/dist/esm/components/SearchInput/SearchInput.d.ts.map +1 -1
  145. package/dist/esm/components/SearchInput/SearchInput.js +2 -2
  146. package/dist/esm/components/SearchInput/SearchInput.js.map +1 -1
  147. package/dist/esm/components/Select/Select.d.ts +6 -0
  148. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  149. package/dist/esm/components/Select/Select.js +5 -5
  150. package/dist/esm/components/Select/Select.js.map +1 -1
  151. package/dist/esm/components/TextInputGroup/TextInputGroupMain.d.ts +2 -0
  152. package/dist/esm/components/TextInputGroup/TextInputGroupMain.d.ts.map +1 -1
  153. package/dist/esm/components/TextInputGroup/TextInputGroupMain.js +3 -3
  154. package/dist/esm/components/TextInputGroup/TextInputGroupMain.js.map +1 -1
  155. package/dist/esm/helpers/Popper/Popper.js +2 -2
  156. package/dist/esm/helpers/Popper/Popper.js.map +1 -1
  157. package/dist/esm/index.d.ts.map +1 -1
  158. package/dist/esm/index.js.map +1 -1
  159. package/dist/esm/next/components/DualListSelector/DualListSelector.d.ts +23 -0
  160. package/dist/esm/next/components/DualListSelector/DualListSelector.d.ts.map +1 -0
  161. package/dist/esm/next/components/DualListSelector/DualListSelector.js +23 -0
  162. package/dist/esm/next/components/DualListSelector/DualListSelector.js.map +1 -0
  163. package/dist/esm/next/components/DualListSelector/DualListSelectorContext.d.ts +19 -0
  164. package/dist/esm/next/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -0
  165. package/dist/esm/next/components/DualListSelector/DualListSelectorContext.js +5 -0
  166. package/dist/esm/next/components/DualListSelector/DualListSelectorContext.js.map +1 -0
  167. package/dist/esm/next/components/DualListSelector/DualListSelectorControl.d.ts +25 -0
  168. package/dist/esm/next/components/DualListSelector/DualListSelectorControl.d.ts.map +1 -0
  169. package/dist/esm/next/components/DualListSelector/DualListSelectorControl.js +18 -0
  170. package/dist/esm/next/components/DualListSelector/DualListSelectorControl.js.map +1 -0
  171. package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts +15 -0
  172. package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +1 -0
  173. package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.js +35 -0
  174. package/dist/esm/next/components/DualListSelector/DualListSelectorControlsWrapper.js.map +1 -0
  175. package/dist/esm/next/components/DualListSelector/DualListSelectorList.d.ts +8 -0
  176. package/dist/esm/next/components/DualListSelector/DualListSelectorList.d.ts.map +1 -0
  177. package/dist/esm/next/components/DualListSelector/DualListSelectorList.js +26 -0
  178. package/dist/esm/next/components/DualListSelector/DualListSelectorList.js.map +1 -0
  179. package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.d.ts +29 -0
  180. package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.d.ts.map +1 -0
  181. package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.js +38 -0
  182. package/dist/esm/next/components/DualListSelector/DualListSelectorListItem.js.map +1 -0
  183. package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.d.ts +24 -0
  184. package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -0
  185. package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.js +59 -0
  186. package/dist/esm/next/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -0
  187. package/dist/esm/next/components/DualListSelector/DualListSelectorPane.d.ts +31 -0
  188. package/dist/esm/next/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -0
  189. package/dist/esm/next/components/DualListSelector/DualListSelectorPane.js +27 -0
  190. package/dist/esm/next/components/DualListSelector/DualListSelectorPane.js.map +1 -0
  191. package/dist/esm/next/components/DualListSelector/DualListSelectorTree.d.ts +48 -0
  192. package/dist/esm/next/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -0
  193. package/dist/esm/next/components/DualListSelector/DualListSelectorTree.js +15 -0
  194. package/dist/esm/next/components/DualListSelector/DualListSelectorTree.js.map +1 -0
  195. package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.d.ts +32 -0
  196. package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -0
  197. package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.js +75 -0
  198. package/dist/esm/next/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -0
  199. package/dist/esm/next/components/DualListSelector/index.d.ts +8 -0
  200. package/dist/esm/next/components/DualListSelector/index.d.ts.map +1 -0
  201. package/dist/esm/next/components/DualListSelector/index.js +8 -0
  202. package/dist/esm/next/components/DualListSelector/index.js.map +1 -0
  203. package/dist/esm/next/components/DualListSelector/treeUtils.d.ts +8 -0
  204. package/dist/esm/next/components/DualListSelector/treeUtils.d.ts.map +1 -0
  205. package/dist/esm/next/components/DualListSelector/treeUtils.js +68 -0
  206. package/dist/esm/next/components/DualListSelector/treeUtils.js.map +1 -0
  207. package/dist/esm/next/components/index.d.ts +1 -0
  208. package/dist/esm/next/components/index.d.ts.map +1 -1
  209. package/dist/esm/next/components/index.js +1 -0
  210. package/dist/esm/next/components/index.js.map +1 -1
  211. package/dist/js/components/CalendarMonth/CalendarMonth.d.ts.map +1 -1
  212. package/dist/js/components/CalendarMonth/CalendarMonth.js +30 -12
  213. package/dist/js/components/CalendarMonth/CalendarMonth.js.map +1 -1
  214. package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts +5 -5
  215. package/dist/js/components/ClipboardCopy/ClipboardCopy.d.ts.map +1 -1
  216. package/dist/js/components/ClipboardCopy/ClipboardCopy.js.map +1 -1
  217. package/dist/js/components/ClipboardCopy/ClipboardCopyExpanded.d.ts +1 -0
  218. package/dist/js/components/ClipboardCopy/ClipboardCopyExpanded.d.ts.map +1 -1
  219. package/dist/js/components/ClipboardCopy/ClipboardCopyExpanded.js.map +1 -1
  220. package/dist/js/components/Dropdown/Dropdown.js +2 -2
  221. package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
  222. package/dist/js/components/Menu/Menu.d.ts.map +1 -1
  223. package/dist/js/components/Menu/Menu.js +5 -1
  224. package/dist/js/components/Menu/Menu.js.map +1 -1
  225. package/dist/js/components/Menu/MenuContainer.js +2 -2
  226. package/dist/js/components/Menu/MenuContainer.js.map +1 -1
  227. package/dist/js/components/MenuToggle/MenuToggle.js +1 -1
  228. package/dist/js/components/MenuToggle/MenuToggle.js.map +1 -1
  229. package/dist/js/components/Pagination/PaginationOptionsMenu.d.ts.map +1 -1
  230. package/dist/js/components/Pagination/PaginationOptionsMenu.js +2 -4
  231. package/dist/js/components/Pagination/PaginationOptionsMenu.js.map +1 -1
  232. package/dist/js/components/SearchInput/SearchInput.d.ts +2 -0
  233. package/dist/js/components/SearchInput/SearchInput.d.ts.map +1 -1
  234. package/dist/js/components/SearchInput/SearchInput.js +2 -2
  235. package/dist/js/components/SearchInput/SearchInput.js.map +1 -1
  236. package/dist/js/components/Select/Select.d.ts +6 -0
  237. package/dist/js/components/Select/Select.d.ts.map +1 -1
  238. package/dist/js/components/Select/Select.js +5 -5
  239. package/dist/js/components/Select/Select.js.map +1 -1
  240. package/dist/js/components/TextInputGroup/TextInputGroupMain.d.ts +2 -0
  241. package/dist/js/components/TextInputGroup/TextInputGroupMain.d.ts.map +1 -1
  242. package/dist/js/components/TextInputGroup/TextInputGroupMain.js +3 -3
  243. package/dist/js/components/TextInputGroup/TextInputGroupMain.js.map +1 -1
  244. package/dist/js/helpers/Popper/Popper.js +2 -2
  245. package/dist/js/helpers/Popper/Popper.js.map +1 -1
  246. package/dist/js/index.d.ts.map +1 -1
  247. package/dist/js/index.js.map +1 -1
  248. package/dist/js/next/components/DualListSelector/DualListSelector.d.ts +23 -0
  249. package/dist/js/next/components/DualListSelector/DualListSelector.d.ts.map +1 -0
  250. package/dist/js/next/components/DualListSelector/DualListSelector.js +26 -0
  251. package/dist/js/next/components/DualListSelector/DualListSelector.js.map +1 -0
  252. package/dist/js/next/components/DualListSelector/DualListSelectorContext.d.ts +19 -0
  253. package/dist/js/next/components/DualListSelector/DualListSelectorContext.d.ts.map +1 -0
  254. package/dist/js/next/components/DualListSelector/DualListSelectorContext.js +9 -0
  255. package/dist/js/next/components/DualListSelector/DualListSelectorContext.js.map +1 -0
  256. package/dist/js/next/components/DualListSelector/DualListSelectorControl.d.ts +25 -0
  257. package/dist/js/next/components/DualListSelector/DualListSelectorControl.d.ts.map +1 -0
  258. package/dist/js/next/components/DualListSelector/DualListSelectorControl.js +22 -0
  259. package/dist/js/next/components/DualListSelector/DualListSelectorControl.js.map +1 -0
  260. package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts +15 -0
  261. package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.d.ts.map +1 -0
  262. package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.js +39 -0
  263. package/dist/js/next/components/DualListSelector/DualListSelectorControlsWrapper.js.map +1 -0
  264. package/dist/js/next/components/DualListSelector/DualListSelectorList.d.ts +8 -0
  265. package/dist/js/next/components/DualListSelector/DualListSelectorList.d.ts.map +1 -0
  266. package/dist/js/next/components/DualListSelector/DualListSelectorList.js +30 -0
  267. package/dist/js/next/components/DualListSelector/DualListSelectorList.js.map +1 -0
  268. package/dist/js/next/components/DualListSelector/DualListSelectorListItem.d.ts +29 -0
  269. package/dist/js/next/components/DualListSelector/DualListSelectorListItem.d.ts.map +1 -0
  270. package/dist/js/next/components/DualListSelector/DualListSelectorListItem.js +42 -0
  271. package/dist/js/next/components/DualListSelector/DualListSelectorListItem.js.map +1 -0
  272. package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.d.ts +24 -0
  273. package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.d.ts.map +1 -0
  274. package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.js +63 -0
  275. package/dist/js/next/components/DualListSelector/DualListSelectorListWrapper.js.map +1 -0
  276. package/dist/js/next/components/DualListSelector/DualListSelectorPane.d.ts +31 -0
  277. package/dist/js/next/components/DualListSelector/DualListSelectorPane.d.ts.map +1 -0
  278. package/dist/js/next/components/DualListSelector/DualListSelectorPane.js +31 -0
  279. package/dist/js/next/components/DualListSelector/DualListSelectorPane.js.map +1 -0
  280. package/dist/js/next/components/DualListSelector/DualListSelectorTree.d.ts +48 -0
  281. package/dist/js/next/components/DualListSelector/DualListSelectorTree.d.ts.map +1 -0
  282. package/dist/js/next/components/DualListSelector/DualListSelectorTree.js +19 -0
  283. package/dist/js/next/components/DualListSelector/DualListSelectorTree.js.map +1 -0
  284. package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.d.ts +32 -0
  285. package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.d.ts.map +1 -0
  286. package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.js +78 -0
  287. package/dist/js/next/components/DualListSelector/DualListSelectorTreeItem.js.map +1 -0
  288. package/dist/js/next/components/DualListSelector/index.d.ts +8 -0
  289. package/dist/js/next/components/DualListSelector/index.d.ts.map +1 -0
  290. package/dist/js/next/components/DualListSelector/index.js +11 -0
  291. package/dist/js/next/components/DualListSelector/index.js.map +1 -0
  292. package/dist/js/next/components/DualListSelector/treeUtils.d.ts +8 -0
  293. package/dist/js/next/components/DualListSelector/treeUtils.d.ts.map +1 -0
  294. package/dist/js/next/components/DualListSelector/treeUtils.js +77 -0
  295. package/dist/js/next/components/DualListSelector/treeUtils.js.map +1 -0
  296. package/dist/js/next/components/index.d.ts +1 -0
  297. package/dist/js/next/components/index.d.ts.map +1 -1
  298. package/dist/js/next/components/index.js +1 -0
  299. package/dist/js/next/components/index.js.map +1 -1
  300. package/dist/umd/react-core.min.js +3 -3
  301. package/helpers/package.json +1 -1
  302. package/layouts/package.json +1 -1
  303. package/next/package.json +1 -1
  304. package/package.json +6 -6
  305. package/src/components/CalendarMonth/CalendarMonth.tsx +38 -13
  306. package/src/components/ClipboardCopy/ClipboardCopy.tsx +5 -5
  307. package/src/components/ClipboardCopy/ClipboardCopyExpanded.tsx +1 -0
  308. package/src/components/Dropdown/Dropdown.tsx +2 -2
  309. package/src/components/Menu/Menu.tsx +5 -3
  310. package/src/components/Menu/MenuContainer.tsx +2 -2
  311. package/src/components/MenuToggle/MenuToggle.tsx +1 -1
  312. package/src/components/MenuToggle/examples/MenuToggleTypeahead.tsx +1 -1
  313. package/src/components/Pagination/PaginationOptionsMenu.tsx +2 -4
  314. package/src/components/SearchInput/SearchInput.tsx +4 -0
  315. package/src/components/Select/Select.tsx +15 -3
  316. package/src/components/Select/examples/SelectMultiTypeahead.tsx +8 -1
  317. package/src/components/Select/examples/SelectMultiTypeaheadCheckbox.tsx +8 -1
  318. package/src/components/Select/examples/SelectMultiTypeaheadCreatable.tsx +8 -1
  319. package/src/components/Select/examples/SelectTypeahead.tsx +8 -1
  320. package/src/components/Select/examples/SelectTypeaheadCreatable.tsx +8 -1
  321. package/src/components/TextInputGroup/TextInputGroupMain.tsx +5 -0
  322. package/src/components/TextInputGroup/__tests__/TextInputGroupMain.test.tsx +8 -0
  323. package/src/helpers/Popper/Popper.tsx +1 -1
  324. package/src/index.ts +0 -1
  325. package/src/next/components/DualListSelector/DualListSelector.tsx +50 -0
  326. package/src/next/components/DualListSelector/DualListSelectorContext.ts +21 -0
  327. package/src/next/components/DualListSelector/DualListSelectorControl.tsx +66 -0
  328. package/src/next/components/DualListSelector/DualListSelectorControlsWrapper.tsx +87 -0
  329. package/src/next/components/DualListSelector/DualListSelectorList.tsx +57 -0
  330. package/src/next/components/DualListSelector/DualListSelectorListItem.tsx +105 -0
  331. package/src/next/components/DualListSelector/DualListSelectorListWrapper.tsx +124 -0
  332. package/src/next/components/DualListSelector/DualListSelectorPane.tsx +94 -0
  333. package/src/next/components/DualListSelector/DualListSelectorTree.tsx +110 -0
  334. package/src/next/components/DualListSelector/DualListSelectorTreeItem.tsx +184 -0
  335. package/src/next/components/DualListSelector/__tests__/DualListSelector.test.tsx +26 -0
  336. package/src/next/components/DualListSelector/__tests__/__snapshots__/DualListSelector.test.tsx.snap +122 -0
  337. package/src/next/components/DualListSelector/examples/DualListSelector.md +99 -0
  338. package/src/next/components/DualListSelector/examples/DualListSelectorBasic.tsx +157 -0
  339. package/src/next/components/DualListSelector/examples/DualListSelectorBasicSearch.tsx +214 -0
  340. package/src/next/components/DualListSelector/examples/DualListSelectorBasicTooltips.tsx +165 -0
  341. package/src/next/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +347 -0
  342. package/src/next/components/DualListSelector/examples/DualListSelectorDragDrop.tsx +184 -0
  343. package/src/next/components/DualListSelector/examples/DualListSelectorTree.tsx +380 -0
  344. package/src/next/components/DualListSelector/index.ts +7 -0
  345. package/src/next/components/DualListSelector/treeUtils.ts +81 -0
  346. package/src/next/components/index.ts +1 -0
  347. package/dist/esm/demos/index.d.ts +0 -3
  348. package/dist/esm/demos/index.d.ts.map +0 -1
  349. package/dist/esm/demos/index.js +0 -3
  350. package/dist/esm/demos/index.js.map +0 -1
  351. package/dist/js/demos/index.d.ts +0 -3
  352. package/dist/js/demos/index.d.ts.map +0 -1
  353. package/dist/js/demos/index.js +0 -6
  354. package/dist/js/demos/index.js.map +0 -1
  355. 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":"5.3.0-prerelease.0","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":"5.3.0-prerelease.9","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":"5.3.0-prerelease.0","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":"5.3.0-prerelease.9","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":"5.3.0-prerelease.0","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":"5.3.0-prerelease.9","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "5.3.0-prerelease.1",
3
+ "version": "5.3.0-prerelease.10",
4
4
  "description": "This library provides a set of common React components for use with the PatternFly reference implementation.",
5
5
  "main": "dist/js/index.js",
6
6
  "module": "dist/esm/index.js",
@@ -46,15 +46,15 @@
46
46
  "clean:exports": "node scripts/cleanDistExports.js"
47
47
  },
48
48
  "dependencies": {
49
- "@patternfly/react-icons": "^5.3.0-prerelease.0",
50
- "@patternfly/react-styles": "^5.3.0-prerelease.0",
51
- "@patternfly/react-tokens": "^5.3.0-prerelease.0",
49
+ "@patternfly/react-icons": "^5.3.0-prerelease.1",
50
+ "@patternfly/react-styles": "^5.3.0-prerelease.1",
51
+ "@patternfly/react-tokens": "^5.3.0-prerelease.1",
52
52
  "focus-trap": "7.5.2",
53
53
  "react-dropzone": "^14.2.3",
54
54
  "tslib": "^2.5.0"
55
55
  },
56
56
  "devDependencies": {
57
- "@patternfly/patternfly": "5.2.0",
57
+ "@patternfly/patternfly": "5.2.1",
58
58
  "@rollup/plugin-commonjs": "^25.0.0",
59
59
  "@rollup/plugin-node-resolve": "^15.0.2",
60
60
  "@rollup/plugin-replace": "^5.0.2",
@@ -72,5 +72,5 @@
72
72
  "react": "^17 || ^18",
73
73
  "react-dom": "^17 || ^18"
74
74
  },
75
- "gitHead": "9bb6a230ddff7d6177053198bbc7d72aaee40c90"
75
+ "gitHead": "ef374e4148bb132e4d08632800f60a6159950744"
76
76
  }
@@ -83,9 +83,6 @@ export interface CalendarProps extends CalendarFormat, Omit<React.HTMLProps<HTML
83
83
  validators?: ((date: Date) => boolean)[];
84
84
  }
85
85
 
86
- // Must be numeric given current header design
87
- const yearFormat = (date: Date) => date.getFullYear();
88
-
89
86
  const buildCalendar = (year: number, month: number, weekStart: number, validators: ((date: Date) => boolean)[]) => {
90
87
  const defaultDate = new Date(year, month);
91
88
 
@@ -164,6 +161,13 @@ export const CalendarMonth = ({
164
161
  };
165
162
  const initialDate = getInitialDate();
166
163
  const [focusedDate, setFocusedDate] = React.useState(initialDate);
164
+
165
+ // Must be numeric given current header design
166
+ const yearFormat = (date: Date) => date.getFullYear();
167
+ //
168
+ const yearFormatted = yearFormat(focusedDate);
169
+ const [yearInput, setYearInput] = React.useState(yearFormatted.toString());
170
+
167
171
  const [hoveredDate, setHoveredDate] = React.useState(new Date(focusedDate));
168
172
  const focusRef = React.useRef<HTMLButtonElement>();
169
173
  const [hiddenMonthId] = React.useState(getUniqueId('hidden-month-span'));
@@ -191,6 +195,7 @@ export const CalendarMonth = ({
191
195
  setHoveredDate(newDate);
192
196
  setShouldFocus(false);
193
197
  onMonthChange(ev, newDate);
198
+ setYearInput(yearFormat(newDate).toString());
194
199
  };
195
200
 
196
201
  const onKeyDown = (ev: React.KeyboardEvent<HTMLTableSectionElement>) => {
@@ -217,6 +222,34 @@ export const CalendarMonth = ({
217
222
  const changeMonth = (newMonth: number, newYear?: number) =>
218
223
  new Date(newYear ?? focusedDate.getFullYear(), newMonth, 1);
219
224
 
225
+ const MIN_YEAR = 1900;
226
+ const MAX_YEAR = 2100;
227
+
228
+ const handleYearInputChange = (event: React.FormEvent<HTMLInputElement>, yearStr: string) => {
229
+ if (!/^\d{0,4}$/.test(yearStr)) {
230
+ return;
231
+ }
232
+
233
+ setYearInput(yearStr);
234
+
235
+ if (yearStr.length === 4) {
236
+ const yearNum = Number(yearStr);
237
+
238
+ if (yearNum >= MIN_YEAR && yearNum <= MAX_YEAR) {
239
+ const newDate = changeYear(yearNum);
240
+ setFocusedDate(newDate);
241
+ setHoveredDate(newDate);
242
+ setShouldFocus(false);
243
+
244
+ // We need to manually focus the year input in FireFox when the scroll buttons are clicked, as FireFox doesn't place focus automatically
245
+ (event.target as HTMLElement).focus();
246
+ onMonthChange(event, newDate);
247
+ } else {
248
+ setYearInput(yearFormatted.toString());
249
+ }
250
+ }
251
+ };
252
+
220
253
  const addMonth = (toAdd: -1 | 1) => {
221
254
  let newMonth = focusedDate.getMonth() + toAdd;
222
255
  let newYear = focusedDate.getFullYear();
@@ -254,7 +287,6 @@ export const CalendarMonth = ({
254
287
  }
255
288
  const isHoveredDateValid = isValidated(hoveredDate);
256
289
  const monthFormatted = monthFormat(focusedDate);
257
- const yearFormatted = yearFormat(focusedDate);
258
290
 
259
291
  const calendarToRender = (
260
292
  <div className={css(styles.calendarMonth, className)} {...props}>
@@ -321,15 +353,8 @@ export const CalendarMonth = ({
321
353
  <TextInput
322
354
  aria-label={yearInputAriaLabel}
323
355
  type="number"
324
- value={yearFormatted}
325
- onChange={(ev: React.FormEvent<HTMLInputElement>, year: string) => {
326
- const newDate = changeYear(Number(year));
327
- setFocusedDate(newDate);
328
- setHoveredDate(newDate);
329
- setShouldFocus(false);
330
- focusRef.current?.blur(); // will unfocus a date when changing year via up/down arrows
331
- onMonthChange(ev, newDate);
332
- }}
356
+ value={yearInput}
357
+ onChange={handleYearInputChange}
333
358
  />
334
359
  </div>
335
360
  </InputGroupItem>
@@ -10,7 +10,7 @@ import { ClipboardCopyToggle } from './ClipboardCopyToggle';
10
10
  import { ClipboardCopyExpanded } from './ClipboardCopyExpanded';
11
11
  import { getOUIAProps, OUIAProps } from '../../helpers';
12
12
 
13
- export const clipboardCopyFunc = (event: React.ClipboardEvent<HTMLDivElement>, text?: string) => {
13
+ export const clipboardCopyFunc = (event: React.ClipboardEvent<HTMLDivElement>, text?: React.ReactNode) => {
14
14
  navigator.clipboard.writeText(text.toString());
15
15
  };
16
16
 
@@ -27,7 +27,7 @@ export interface ClipboardCopyState {
27
27
  textWhenExpanded: string;
28
28
  }
29
29
 
30
- export interface ClipboardCopyProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onChange' | 'children'>, OUIAProps {
30
+ export interface ClipboardCopyProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onChange'>, OUIAProps {
31
31
  /** Additional classes added to the clipboard copy container. */
32
32
  className?: string;
33
33
  /** Tooltip message to display when hover the copy button */
@@ -71,12 +71,12 @@ export interface ClipboardCopyProps extends Omit<React.HTMLProps<HTMLDivElement>
71
71
  /** Delay in ms before the tooltip appears. */
72
72
  entryDelay?: number;
73
73
  /** A function that is triggered on clicking the copy button. */
74
- onCopy?: (event: React.ClipboardEvent<HTMLDivElement>, text?: string) => void;
74
+ onCopy?: (event: React.ClipboardEvent<HTMLDivElement>, text?: React.ReactNode) => void;
75
75
  /** A function that is triggered on changing the text. */
76
76
  onChange?: (event: React.FormEvent, text?: string) => void;
77
77
  /** The text which is copied. */
78
- children: string;
79
- /** Additional actions for inline clipboard copy. Should be wrapped with ClipboardCopyAction. */
78
+ children: React.ReactNode;
79
+ /** Additional actions for inline-compact clipboard copy. Should be wrapped with ClipboardCopyAction. */
80
80
  additionalActions?: React.ReactNode;
81
81
  /** Value to overwrite the randomly generated data-ouia-component-id.*/
82
82
  ouiaId?: number | string;
@@ -6,6 +6,7 @@ import { PickOptional } from '../../helpers/typeUtils';
6
6
 
7
7
  export interface ClipboardCopyExpandedProps extends Omit<ClipboardCopyProps, 'onChange'> {
8
8
  className?: string;
9
+ children: React.ReactNode;
9
10
  onChange?: (e: React.FormEvent<HTMLDivElement>, text: string) => void;
10
11
  isReadOnly?: boolean;
11
12
  isCode?: boolean;
@@ -111,8 +111,8 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
111
111
  };
112
112
 
113
113
  const handleClick = (event: MouseEvent) => {
114
- // toggle was clicked open via keyboard, focus on first menu item
115
- if (isOpen && toggleRef.current?.contains(event.target as Node) && event.detail === 0) {
114
+ // toggle was opened, focus on first menu item
115
+ if (isOpen && toggleRef.current?.contains(event.target as Node)) {
116
116
  setTimeout(() => {
117
117
  const firstElement = menuRef?.current?.querySelector(
118
118
  'li button:not(:disabled),li input:not(:disabled),li a:not([aria-disabled="true"])'
@@ -156,8 +156,11 @@ class MenuBase extends React.Component<MenuProps, MenuState> {
156
156
  this.setState({ transitionMoveTarget: null });
157
157
  } else {
158
158
  const nextMenu = current.querySelector('#' + this.props.activeMenu) || current || null;
159
- const nextMenuChildren = Array.from(nextMenu.getElementsByTagName('UL')[0].children);
160
-
159
+ const nextMenuLists = nextMenu.getElementsByTagName('UL');
160
+ if (nextMenuLists.length === 0) {
161
+ return;
162
+ }
163
+ const nextMenuChildren = Array.from(nextMenuLists[0].children);
161
164
  if (!this.state.currentDrilldownMenuId || nextMenu.id !== this.state.currentDrilldownMenuId) {
162
165
  this.setState({ currentDrilldownMenuId: nextMenu.id });
163
166
  } else {
@@ -167,7 +170,6 @@ class MenuBase extends React.Component<MenuProps, MenuState> {
167
170
  const nextTarget = nextMenuChildren.filter(
168
171
  (el) => !(el.classList.contains('pf-m-disabled') || el.classList.contains(styles.divider))
169
172
  )[0].firstChild;
170
-
171
173
  (nextTarget as HTMLElement).focus();
172
174
  (nextTarget as HTMLElement).tabIndex = 0;
173
175
  }
@@ -69,8 +69,8 @@ export const MenuContainer: React.FunctionComponent<MenuContainerProps> = ({
69
69
  };
70
70
 
71
71
  const handleClick = (event: MouseEvent) => {
72
- // toggle was clicked open via keyboard, focus on first menu item
73
- if (isOpen && toggleRef.current?.contains(event.target as Node) && event.detail === 0) {
72
+ // toggle was opened, focus on first menu item
73
+ if (isOpen && toggleRef.current?.contains(event.target as Node)) {
74
74
  setTimeout(() => {
75
75
  const firstElement = menuRef?.current?.querySelector(
76
76
  'li button:not(:disabled),li input:not(:disabled),li a:not([aria-disabled="true"])'
@@ -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}
@@ -124,10 +124,8 @@ export const PaginationOptionsMenu: React.FunctionComponent<PaginationOptionsMen
124
124
  };
125
125
 
126
126
  const handleClick = (event: MouseEvent) => {
127
- // If the event is on the toggle and was fired via keyboard 'click', focus the first
128
- // non-disabled menu item
129
- // https://developer.mozilla.org/en-US/docs/Web/API/UIEvent/detail
130
- if (event.detail === 0 && isOpen && toggleRef.current?.contains(event.target as Node)) {
127
+ // Focus the first non-disabled menu item on toggle 'click'
128
+ if (isOpen && toggleRef.current?.contains(event.target as Node)) {
131
129
  setTimeout(() => {
132
130
  const firstElement = menuRef?.current?.querySelector('li button:not(:disabled)');
133
131
  firstElement && (firstElement as HTMLElement).focus();
@@ -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>();
@@ -115,8 +124,8 @@ const SelectBase: React.FunctionComponent<SelectProps & OUIAProps> = ({
115
124
  };
116
125
 
117
126
  const handleClick = (event: MouseEvent) => {
118
- // toggle was clicked open via keyboard, focus on first menu item
119
- if (isOpen && toggleRef.current?.contains(event.target as Node) && event.detail === 0) {
127
+ // toggle was opened, focus on first menu item
128
+ if (isOpen && toggleRef.current?.contains(event.target as Node)) {
120
129
  setTimeout(() => {
121
130
  const firstElement = menuRef?.current?.querySelector('li button:not(:disabled),li input:not(:disabled)');
122
131
  firstElement && (firstElement as HTMLElement).focus();
@@ -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
 
@@ -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 });
@@ -0,0 +1,66 @@
1
+ import * as React from 'react';
2
+ import { css } from '@patternfly/react-styles';
3
+ import { Button, ButtonVariant } from '../../../components/Button';
4
+ import { Tooltip } from '../../../components/Tooltip';
5
+ import styles from '@patternfly/react-styles/css/components/DualListSelector/dual-list-selector';
6
+
7
+ /** Renders an individual control button for moving selected options between each
8
+ * dual list selector pane.
9
+ */
10
+
11
+ export interface DualListSelectorControlProps extends Omit<React.HTMLProps<HTMLDivElement>, 'onClick'> {
12
+ /** Content to be rendered in the dual list selector control. */
13
+ children?: React.ReactNode;
14
+ /** @hide forwarded ref */
15
+ innerRef?: React.Ref<any>;
16
+ /** Flag indicating the control is disabled. */
17
+ isDisabled?: boolean;
18
+ /** Additional classes applied to the dual list selector control. */
19
+ className?: string;
20
+ /** Callback fired when dual list selector control is selected. */
21
+ onClick?: (event: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;
22
+ /** Accessible label for the dual list selector control. */
23
+ 'aria-label'?: string;
24
+ /** Content to be displayed in a tooltip on hover of control. */
25
+ tooltipContent?: React.ReactNode;
26
+ /** Additional tooltip properties passed to the tooltip. */
27
+ tooltipProps?: any;
28
+ }
29
+
30
+ export const DualListSelectorControlBase: React.FunctionComponent<DualListSelectorControlProps> = ({
31
+ innerRef,
32
+ children,
33
+ className,
34
+ 'aria-label': ariaLabel,
35
+ isDisabled = true,
36
+ onClick = () => {},
37
+ tooltipContent,
38
+ tooltipProps = {} as any,
39
+ ...props
40
+ }: DualListSelectorControlProps) => {
41
+ const privateRef = React.useRef(null);
42
+ const ref = innerRef || privateRef;
43
+ return (
44
+ <div className={css(styles.dualListSelectorControlsItem, className)} {...props}>
45
+ <Button
46
+ isDisabled={isDisabled}
47
+ aria-disabled={isDisabled}
48
+ variant={ButtonVariant.plain}
49
+ onClick={onClick}
50
+ aria-label={ariaLabel}
51
+ tabIndex={-1}
52
+ ref={ref}
53
+ >
54
+ {children}
55
+ </Button>
56
+ {tooltipContent && <Tooltip content={tooltipContent} position="left" triggerRef={ref} {...tooltipProps} />}
57
+ </div>
58
+ );
59
+ };
60
+ DualListSelectorControlBase.displayName = 'DualListSelectorControlBase';
61
+
62
+ export const DualListSelectorControl = React.forwardRef((props: DualListSelectorControlProps, ref: React.Ref<any>) => (
63
+ <DualListSelectorControlBase innerRef={ref} {...props} />
64
+ ));
65
+
66
+ DualListSelectorControl.displayName = 'DualListSelectorControl';