@patternfly/react-core 6.0.0 → 6.1.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 (304) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/components/package.json +1 -1
  3. package/deprecated/package.json +1 -1
  4. package/dist/dynamic/components/AboutModal/package.json +1 -1
  5. package/dist/dynamic/components/Accordion/package.json +1 -1
  6. package/dist/dynamic/components/ActionList/package.json +1 -1
  7. package/dist/dynamic/components/Alert/package.json +1 -1
  8. package/dist/dynamic/components/Avatar/package.json +1 -1
  9. package/dist/dynamic/components/BackToTop/package.json +1 -1
  10. package/dist/dynamic/components/Backdrop/package.json +1 -1
  11. package/dist/dynamic/components/BackgroundImage/package.json +1 -1
  12. package/dist/dynamic/components/Badge/package.json +1 -1
  13. package/dist/dynamic/components/Banner/package.json +1 -1
  14. package/dist/dynamic/components/Brand/package.json +1 -1
  15. package/dist/dynamic/components/Breadcrumb/package.json +1 -1
  16. package/dist/dynamic/components/Button/package.json +1 -1
  17. package/dist/dynamic/components/CalendarMonth/package.json +1 -1
  18. package/dist/dynamic/components/Card/package.json +1 -1
  19. package/dist/dynamic/components/Checkbox/package.json +1 -1
  20. package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
  21. package/dist/dynamic/components/CodeBlock/package.json +1 -1
  22. package/dist/dynamic/components/Content/package.json +1 -1
  23. package/dist/dynamic/components/DataList/package.json +1 -1
  24. package/dist/dynamic/components/DatePicker/package.json +1 -1
  25. package/dist/dynamic/components/DescriptionList/package.json +1 -1
  26. package/dist/dynamic/components/Divider/package.json +1 -1
  27. package/dist/dynamic/components/Drawer/package.json +1 -1
  28. package/dist/dynamic/components/Dropdown/package.json +1 -1
  29. package/dist/dynamic/components/DualListSelector/package.json +1 -1
  30. package/dist/dynamic/components/EmptyState/package.json +1 -1
  31. package/dist/dynamic/components/ExpandableSection/package.json +1 -1
  32. package/dist/dynamic/components/FileUpload/package.json +1 -1
  33. package/dist/dynamic/components/Form/package.json +1 -1
  34. package/dist/dynamic/components/FormSelect/package.json +1 -1
  35. package/dist/dynamic/components/HelperText/package.json +1 -1
  36. package/dist/dynamic/components/Hint/package.json +1 -1
  37. package/dist/dynamic/components/Icon/package.json +1 -1
  38. package/dist/dynamic/components/InputGroup/package.json +1 -1
  39. package/dist/dynamic/components/JumpLinks/package.json +1 -1
  40. package/dist/dynamic/components/Label/package.json +1 -1
  41. package/dist/dynamic/components/List/package.json +1 -1
  42. package/dist/dynamic/components/LoginPage/package.json +1 -1
  43. package/dist/dynamic/components/Masthead/package.json +1 -1
  44. package/dist/dynamic/components/Menu/package.json +1 -1
  45. package/dist/dynamic/components/MenuToggle/package.json +1 -1
  46. package/dist/dynamic/components/Modal/package.json +1 -1
  47. package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
  48. package/dist/dynamic/components/Nav/package.json +1 -1
  49. package/dist/dynamic/components/NotificationBadge/package.json +1 -1
  50. package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
  51. package/dist/dynamic/components/NumberInput/package.json +1 -1
  52. package/dist/dynamic/components/OverflowMenu/package.json +1 -1
  53. package/dist/dynamic/components/Page/package.json +1 -1
  54. package/dist/dynamic/components/Pagination/package.json +1 -1
  55. package/dist/dynamic/components/Panel/package.json +1 -1
  56. package/dist/dynamic/components/Popover/package.json +1 -1
  57. package/dist/dynamic/components/Progress/package.json +1 -1
  58. package/dist/dynamic/components/ProgressStepper/package.json +1 -1
  59. package/dist/dynamic/components/Radio/package.json +1 -1
  60. package/dist/dynamic/components/SearchInput/package.json +1 -1
  61. package/dist/dynamic/components/Select/package.json +1 -1
  62. package/dist/dynamic/components/Sidebar/package.json +1 -1
  63. package/dist/dynamic/components/SimpleList/package.json +1 -1
  64. package/dist/dynamic/components/Skeleton/package.json +1 -1
  65. package/dist/dynamic/components/SkipToContent/package.json +1 -1
  66. package/dist/dynamic/components/Slider/package.json +1 -1
  67. package/dist/dynamic/components/Spinner/package.json +1 -1
  68. package/dist/dynamic/components/Switch/package.json +1 -1
  69. package/dist/dynamic/components/Tabs/package.json +1 -1
  70. package/dist/dynamic/components/TextArea/package.json +1 -1
  71. package/dist/dynamic/components/TextInput/package.json +1 -1
  72. package/dist/dynamic/components/TextInputGroup/package.json +1 -1
  73. package/dist/dynamic/components/TimePicker/package.json +1 -1
  74. package/dist/dynamic/components/Timestamp/package.json +1 -1
  75. package/dist/dynamic/components/Title/package.json +1 -1
  76. package/dist/dynamic/components/ToggleGroup/package.json +1 -1
  77. package/dist/dynamic/components/Toolbar/package.json +1 -1
  78. package/dist/dynamic/components/Tooltip/package.json +1 -1
  79. package/dist/dynamic/components/TreeView/package.json +1 -1
  80. package/dist/dynamic/components/Truncate/package.json +1 -1
  81. package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
  82. package/dist/dynamic/components/Wizard/package.json +1 -1
  83. package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
  84. package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
  85. package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
  86. package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
  87. package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
  88. package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
  89. package/dist/dynamic/deprecated/components/package.json +1 -1
  90. package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
  91. package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
  92. package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
  93. package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
  94. package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
  95. package/dist/dynamic/helpers/constants/package.json +1 -1
  96. package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
  97. package/dist/dynamic/helpers/fileUtils/package.json +1 -1
  98. package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
  99. package/dist/dynamic/helpers/package.json +1 -1
  100. package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
  101. package/dist/dynamic/helpers/typeUtils/package.json +1 -1
  102. package/dist/dynamic/helpers/useInterval/package.json +1 -1
  103. package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
  104. package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
  105. package/dist/dynamic/helpers/util/package.json +1 -1
  106. package/dist/dynamic/layouts/Bullseye/package.json +1 -1
  107. package/dist/dynamic/layouts/Flex/package.json +1 -1
  108. package/dist/dynamic/layouts/Gallery/package.json +1 -1
  109. package/dist/dynamic/layouts/Grid/package.json +1 -1
  110. package/dist/dynamic/layouts/Level/package.json +1 -1
  111. package/dist/dynamic/layouts/Split/package.json +1 -1
  112. package/dist/dynamic/layouts/Stack/package.json +1 -1
  113. package/dist/dynamic/styles/package.json +1 -1
  114. package/dist/dynamic-modules.json +1 -0
  115. package/dist/esm/components/Dropdown/Dropdown.d.ts +2 -0
  116. package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
  117. package/dist/esm/components/Dropdown/Dropdown.js +12 -3
  118. package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
  119. package/dist/esm/components/Menu/MenuContainer.d.ts +2 -0
  120. package/dist/esm/components/Menu/MenuContainer.d.ts.map +1 -1
  121. package/dist/esm/components/Menu/MenuContainer.js +21 -4
  122. package/dist/esm/components/Menu/MenuContainer.js.map +1 -1
  123. package/dist/esm/components/MenuToggle/MenuToggleCheckbox.d.ts +1 -1
  124. package/dist/esm/components/MenuToggle/MenuToggleCheckbox.d.ts.map +1 -1
  125. package/dist/esm/components/Modal/Modal.d.ts +2 -2
  126. package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
  127. package/dist/esm/components/Modal/Modal.js +13 -20
  128. package/dist/esm/components/Modal/Modal.js.map +1 -1
  129. package/dist/esm/components/Modal/ModalContent.d.ts +2 -0
  130. package/dist/esm/components/Modal/ModalContent.d.ts.map +1 -1
  131. package/dist/esm/components/Modal/ModalContent.js +2 -2
  132. package/dist/esm/components/Modal/ModalContent.js.map +1 -1
  133. package/dist/esm/components/Select/Select.d.ts +4 -0
  134. package/dist/esm/components/Select/Select.d.ts.map +1 -1
  135. package/dist/esm/components/Select/Select.js +12 -3
  136. package/dist/esm/components/Select/Select.js.map +1 -1
  137. package/dist/esm/components/Toolbar/ToolbarFilter.d.ts.map +1 -1
  138. package/dist/esm/components/Toolbar/ToolbarFilter.js +4 -2
  139. package/dist/esm/components/Toolbar/ToolbarFilter.js.map +1 -1
  140. package/dist/esm/demos/DashboardHeader.d.ts.map +1 -1
  141. package/dist/esm/demos/DashboardHeader.js +2 -4
  142. package/dist/esm/demos/DashboardHeader.js.map +1 -1
  143. package/dist/esm/deprecated/components/Modal/Modal.d.ts +2 -2
  144. package/dist/esm/deprecated/components/Modal/Modal.d.ts.map +1 -1
  145. package/dist/esm/deprecated/components/Modal/Modal.js +13 -20
  146. package/dist/esm/deprecated/components/Modal/Modal.js.map +1 -1
  147. package/dist/esm/deprecated/components/Modal/ModalContent.d.ts +2 -0
  148. package/dist/esm/deprecated/components/Modal/ModalContent.d.ts.map +1 -1
  149. package/dist/esm/deprecated/components/Modal/ModalContent.js +2 -2
  150. package/dist/esm/deprecated/components/Modal/ModalContent.js.map +1 -1
  151. package/dist/esm/helpers/KeyboardHandler.d.ts +7 -0
  152. package/dist/esm/helpers/KeyboardHandler.d.ts.map +1 -1
  153. package/dist/esm/helpers/KeyboardHandler.js +25 -0
  154. package/dist/esm/helpers/KeyboardHandler.js.map +1 -1
  155. package/dist/esm/layouts/Split/Split.d.ts +4 -4
  156. package/dist/esm/layouts/Split/Split.d.ts.map +1 -1
  157. package/dist/esm/layouts/Split/SplitItem.d.ts +5 -3
  158. package/dist/esm/layouts/Split/SplitItem.d.ts.map +1 -1
  159. package/dist/esm/layouts/Split/SplitItem.js +3 -2
  160. package/dist/esm/layouts/Split/SplitItem.js.map +1 -1
  161. package/dist/esm/layouts/Stack/Stack.d.ts +3 -3
  162. package/dist/esm/layouts/Stack/Stack.d.ts.map +1 -1
  163. package/dist/esm/layouts/Stack/StackItem.d.ts +5 -3
  164. package/dist/esm/layouts/Stack/StackItem.d.ts.map +1 -1
  165. package/dist/esm/layouts/Stack/StackItem.js +3 -2
  166. package/dist/esm/layouts/Stack/StackItem.js.map +1 -1
  167. package/dist/js/components/Dropdown/Dropdown.d.ts +2 -0
  168. package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
  169. package/dist/js/components/Dropdown/Dropdown.js +11 -2
  170. package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
  171. package/dist/js/components/Menu/MenuContainer.d.ts +2 -0
  172. package/dist/js/components/Menu/MenuContainer.d.ts.map +1 -1
  173. package/dist/js/components/Menu/MenuContainer.js +22 -5
  174. package/dist/js/components/Menu/MenuContainer.js.map +1 -1
  175. package/dist/js/components/MenuToggle/MenuToggleCheckbox.d.ts +1 -1
  176. package/dist/js/components/MenuToggle/MenuToggleCheckbox.d.ts.map +1 -1
  177. package/dist/js/components/Modal/Modal.d.ts +2 -2
  178. package/dist/js/components/Modal/Modal.d.ts.map +1 -1
  179. package/dist/js/components/Modal/Modal.js +13 -20
  180. package/dist/js/components/Modal/Modal.js.map +1 -1
  181. package/dist/js/components/Modal/ModalContent.d.ts +2 -0
  182. package/dist/js/components/Modal/ModalContent.d.ts.map +1 -1
  183. package/dist/js/components/Modal/ModalContent.js +2 -2
  184. package/dist/js/components/Modal/ModalContent.js.map +1 -1
  185. package/dist/js/components/Select/Select.d.ts +4 -0
  186. package/dist/js/components/Select/Select.d.ts.map +1 -1
  187. package/dist/js/components/Select/Select.js +11 -2
  188. package/dist/js/components/Select/Select.js.map +1 -1
  189. package/dist/js/components/Toolbar/ToolbarFilter.d.ts.map +1 -1
  190. package/dist/js/components/Toolbar/ToolbarFilter.js +4 -2
  191. package/dist/js/components/Toolbar/ToolbarFilter.js.map +1 -1
  192. package/dist/js/demos/DashboardHeader.d.ts.map +1 -1
  193. package/dist/js/demos/DashboardHeader.js +2 -4
  194. package/dist/js/demos/DashboardHeader.js.map +1 -1
  195. package/dist/js/deprecated/components/Modal/Modal.d.ts +2 -2
  196. package/dist/js/deprecated/components/Modal/Modal.d.ts.map +1 -1
  197. package/dist/js/deprecated/components/Modal/Modal.js +13 -20
  198. package/dist/js/deprecated/components/Modal/Modal.js.map +1 -1
  199. package/dist/js/deprecated/components/Modal/ModalContent.d.ts +2 -0
  200. package/dist/js/deprecated/components/Modal/ModalContent.d.ts.map +1 -1
  201. package/dist/js/deprecated/components/Modal/ModalContent.js +2 -2
  202. package/dist/js/deprecated/components/Modal/ModalContent.js.map +1 -1
  203. package/dist/js/helpers/KeyboardHandler.d.ts +7 -0
  204. package/dist/js/helpers/KeyboardHandler.d.ts.map +1 -1
  205. package/dist/js/helpers/KeyboardHandler.js +27 -1
  206. package/dist/js/helpers/KeyboardHandler.js.map +1 -1
  207. package/dist/js/layouts/Split/Split.d.ts +4 -4
  208. package/dist/js/layouts/Split/Split.d.ts.map +1 -1
  209. package/dist/js/layouts/Split/SplitItem.d.ts +5 -3
  210. package/dist/js/layouts/Split/SplitItem.d.ts.map +1 -1
  211. package/dist/js/layouts/Split/SplitItem.js +3 -2
  212. package/dist/js/layouts/Split/SplitItem.js.map +1 -1
  213. package/dist/js/layouts/Stack/Stack.d.ts +3 -3
  214. package/dist/js/layouts/Stack/Stack.d.ts.map +1 -1
  215. package/dist/js/layouts/Stack/StackItem.d.ts +5 -3
  216. package/dist/js/layouts/Stack/StackItem.d.ts.map +1 -1
  217. package/dist/js/layouts/Stack/StackItem.js +3 -2
  218. package/dist/js/layouts/Stack/StackItem.js.map +1 -1
  219. package/dist/umd/assets/{output-DPVTymX-.css → output-K5btXEZY.css} +11135 -11097
  220. package/dist/umd/react-core.min.js +4 -4
  221. package/helpers/package.json +1 -1
  222. package/layouts/package.json +1 -1
  223. package/next/package.json +1 -1
  224. package/package.json +9 -9
  225. package/src/components/ActionList/examples/ActionListSingleGroup.tsx +2 -3
  226. package/src/components/Card/examples/CardExpandable.tsx +2 -3
  227. package/src/components/Card/examples/CardExpandableWithIcon.tsx +2 -3
  228. package/src/components/Card/examples/CardHeaderInCardHead.tsx +2 -3
  229. package/src/components/Card/examples/CardOnlyActionsInCardHead.tsx +2 -3
  230. package/src/components/Card/examples/CardWithImageAndActions.tsx +2 -3
  231. package/src/components/Checkbox/examples/CheckboxReversed.tsx +1 -1
  232. package/src/components/DataList/examples/DataList.md +16 -4
  233. package/src/components/DataList/examples/DataListActions.tsx +2 -3
  234. package/src/components/DataList/examples/DataListCheckboxes.tsx +6 -9
  235. package/src/components/DataList/examples/DataListClickableRows.tsx +4 -6
  236. package/src/components/DataList/examples/DataListExpandable.tsx +6 -9
  237. package/src/components/DataList/examples/DataListMixedExpandable.tsx +6 -9
  238. package/src/components/DataList/examples/DataListWidthModifiers.tsx +4 -6
  239. package/src/components/Dropdown/Dropdown.tsx +13 -1
  240. package/src/components/Dropdown/examples/DropdownWithKebabToggle.tsx +2 -3
  241. package/src/components/DualListSelector/examples/DualListSelector.md +16 -14
  242. package/src/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +4 -6
  243. package/src/components/DualListSelector/examples/DualListSelectorTree.tsx +33 -32
  244. package/src/components/FileUpload/__tests__/__snapshots__/FileUpload.test.tsx.snap +1 -1
  245. package/src/components/Hint/examples/HintBasicWithTitle.tsx +2 -3
  246. package/src/components/Hint/examples/HintBasicWithoutTitle.tsx +2 -3
  247. package/src/components/Label/examples/LabelGroupEditableAddModal.tsx +2 -2
  248. package/src/components/Menu/MenuContainer.tsx +24 -3
  249. package/src/components/MenuToggle/MenuToggleCheckbox.tsx +1 -1
  250. package/src/components/MenuToggle/examples/MenuToggle.md +4 -16
  251. package/src/components/Modal/Modal.tsx +13 -18
  252. package/src/components/Modal/ModalContent.tsx +4 -1
  253. package/src/components/Modal/__tests__/Modal.test.tsx +45 -0
  254. package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUpload.test.tsx.snap +3 -3
  255. package/src/components/OverflowMenu/examples/OverflowMenuBreakpointOnContainer.tsx +2 -3
  256. package/src/components/OverflowMenu/examples/OverflowMenuGroupTypes.tsx +2 -3
  257. package/src/components/OverflowMenu/examples/OverflowMenuMultiGroup.tsx +2 -3
  258. package/src/components/OverflowMenu/examples/OverflowMenuPersistent.tsx +2 -3
  259. package/src/components/OverflowMenu/examples/OverflowMenuSimple.tsx +2 -3
  260. package/src/components/Select/Select.tsx +16 -1
  261. package/src/components/Select/examples/SelectMultiTypeahead.tsx +1 -1
  262. package/src/components/Select/examples/SelectMultiTypeaheadCheckbox.tsx +1 -1
  263. package/src/components/Select/examples/SelectMultiTypeaheadCreatable.tsx +1 -1
  264. package/src/components/Select/examples/SelectTypeahead.tsx +1 -1
  265. package/src/components/Select/examples/SelectTypeaheadCreatable.tsx +1 -1
  266. package/src/components/Toolbar/ToolbarFilter.tsx +2 -1
  267. package/src/components/Toolbar/examples/ToolbarStacked.tsx +2 -3
  268. package/src/components/Toolbar/examples/ToolbarWithFilters.tsx +2 -3
  269. package/src/components/TreeView/examples/TreeViewWithActionItems.tsx +2 -3
  270. package/src/demos/CardView/examples/CardView.tsx +4 -6
  271. package/src/demos/CustomMenus/examples/ApplicationLauncherDemo.tsx +2 -3
  272. package/src/demos/DashboardHeader.tsx +4 -6
  273. package/src/demos/DataList/examples/DataListBasic.tsx +1 -3
  274. package/src/demos/DataList/examples/DataListExpandableControlInToolbar.tsx +7 -10
  275. package/src/demos/NotificationDrawer/examples/NotificationDrawerBasic.tsx +12 -18
  276. package/src/demos/NotificationDrawer/examples/NotificationDrawerGrouped.tsx +20 -30
  277. package/src/demos/RTL/examples/PaginatedTable.jsx +4 -6
  278. package/src/demos/RTL/examples/PaginatedTable.tsx +4 -6
  279. package/src/demos/examples/AlertGroup/AlertGroupToastWithNotificationDrawer.tsx +4 -6
  280. package/src/demos/examples/Card/CardHorizontalGrid.tsx +2 -3
  281. package/src/demos/examples/Masthead/MastheadWithHorizontalNav.tsx +4 -6
  282. package/src/demos/examples/Masthead/MastheadWithUtilitiesAndUserDropdownMenu.tsx +6 -9
  283. package/src/demos/examples/Nav/NavFlyout.tsx +4 -6
  284. package/src/demos/examples/Nav/NavHorizontal.tsx +4 -6
  285. package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +4 -6
  286. package/src/demos/examples/Nav/NavManual.tsx +4 -6
  287. package/src/demos/examples/Page/PageContextSelector.tsx +4 -6
  288. package/src/demos/examples/Page/PageStickySectionBreadcrumb.tsx +4 -6
  289. package/src/demos/examples/Page/PageStickySectionGroup.tsx +4 -6
  290. package/src/demos/examples/Page/PageStickySectionGroupAlternate.tsx +4 -6
  291. package/src/demos/examples/PrimaryDetail/PrimaryDetailCardView.tsx +4 -6
  292. package/src/demos/examples/Tabs/TabsAndTable.tsx +2 -3
  293. package/src/deprecated/components/Modal/Modal.tsx +13 -18
  294. package/src/deprecated/components/Modal/ModalContent.tsx +4 -1
  295. package/src/deprecated/components/Modal/__tests__/Modal.test.tsx +28 -0
  296. package/src/helpers/KeyboardHandler.tsx +27 -0
  297. package/src/layouts/Split/Split.tsx +4 -4
  298. package/src/layouts/Split/SplitItem.tsx +14 -8
  299. package/src/layouts/Split/__tests__/Split.test.tsx +18 -0
  300. package/src/layouts/Split/__tests__/__snapshots__/Split.test.tsx.snap +28 -0
  301. package/src/layouts/Stack/Stack.tsx +3 -3
  302. package/src/layouts/Stack/StackItem.tsx +14 -8
  303. package/src/layouts/Stack/__tests__/Stack.test.tsx +20 -2
  304. package/src/layouts/Stack/__tests__/__snapshots__/Stack.test.tsx.snap +30 -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-prerelease.23","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.1.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":"6.0.0-prerelease.23","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.1.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":"6.0.0-prerelease.23","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.1.0-prerelease.9","private":true}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patternfly/react-core",
3
- "version": "6.0.0",
3
+ "version": "6.1.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
  "subpaths": "node ../../scripts/exportSubpaths.mjs --config subpaths.config.json"
47
47
  },
48
48
  "dependencies": {
49
- "@patternfly/react-icons": "^6.0.0",
50
- "@patternfly/react-styles": "^6.0.0",
51
- "@patternfly/react-tokens": "^6.0.0",
52
- "focus-trap": "7.6.0",
53
- "react-dropzone": "^14.2.3",
54
- "tslib": "^2.7.0"
49
+ "@patternfly/react-icons": "^6.1.0-prerelease.4",
50
+ "@patternfly/react-styles": "^6.1.0-prerelease.3",
51
+ "@patternfly/react-tokens": "^6.1.0-prerelease.3",
52
+ "focus-trap": "7.6.2",
53
+ "react-dropzone": "^14.3.5",
54
+ "tslib": "^2.8.1"
55
55
  },
56
56
  "devDependencies": {
57
- "@patternfly/patternfly": "6.0.0",
57
+ "@patternfly/patternfly": "6.1.0-prerelease.5",
58
58
  "case-anything": "^2.1.13",
59
59
  "css": "^3.0.0",
60
60
  "fs-extra": "^11.2.0"
@@ -63,5 +63,5 @@
63
63
  "react": "^17 || ^18",
64
64
  "react-dom": "^17 || ^18"
65
65
  },
66
- "gitHead": "69e205707d0228544b9b45467832e11d7a46ab45"
66
+ "gitHead": "f42db0887bdc1df06fe1677314bb51a4c35f8c7b"
67
67
  }
@@ -84,9 +84,8 @@ export const ActionListSingleGroup: React.FunctionComponent = () => {
84
84
  variant="plain"
85
85
  isExpanded={isOpen}
86
86
  aria-label="Action list single group kebab"
87
- >
88
- <EllipsisVIcon />
89
- </MenuToggle>
87
+ icon={<EllipsisVIcon />}
88
+ />
90
89
  )}
91
90
  isOpen={isOpen}
92
91
  onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
@@ -71,9 +71,8 @@ export const CardExpandable: React.FunctionComponent = () => {
71
71
  onClick={() => setIsOpen(!isOpen)}
72
72
  variant="plain"
73
73
  aria-label="Card expandable example kebab toggle"
74
- >
75
- <EllipsisVIcon aria-hidden="true" />
76
- </MenuToggle>
74
+ icon={<EllipsisVIcon aria-hidden="true" />}
75
+ />
77
76
  )}
78
77
  isOpen={isOpen}
79
78
  onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
@@ -67,9 +67,8 @@ export const CardExpandableWithIcon: React.FunctionComponent = () => {
67
67
  onClick={() => setIsOpen(!isOpen)}
68
68
  variant="plain"
69
69
  aria-label="Card expandable with icon example kebab toggle"
70
- >
71
- <EllipsisVIcon aria-hidden="true" />
72
- </MenuToggle>
70
+ icon={<EllipsisVIcon aria-hidden="true" />}
71
+ />
73
72
  )}
74
73
  isOpen={isOpen}
75
74
  onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
@@ -58,9 +58,8 @@ export const CardTitleInHeader: React.FunctionComponent = () => {
58
58
  onClick={() => setIsOpen(!isOpen)}
59
59
  variant="plain"
60
60
  aria-label="Card title inline with images and actions example kebab toggle"
61
- >
62
- <EllipsisVIcon aria-hidden="true" />
63
- </MenuToggle>
61
+ icon={<EllipsisVIcon aria-hidden="true" />}
62
+ />
64
63
  )}
65
64
  isOpen={isOpen}
66
65
  onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
@@ -56,9 +56,8 @@ export const CardOnlyActionsInCardHead: React.FunctionComponent = () => {
56
56
  onClick={() => setIsOpen(!isOpen)}
57
57
  variant="plain"
58
58
  aria-label="Card header without title example kebab toggle"
59
- >
60
- <EllipsisVIcon aria-hidden="true" />
61
- </MenuToggle>
59
+ icon={<EllipsisVIcon aria-hidden="true" />}
60
+ />
62
61
  )}
63
62
  isOpen={isOpen}
64
63
  onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
@@ -64,9 +64,8 @@ export const CardWithImageAndActions: React.FunctionComponent = () => {
64
64
  onClick={() => setIsOpen(!isOpen)}
65
65
  variant="plain"
66
66
  aria-label="Card header images and actions example kebab toggle"
67
- >
68
- <EllipsisVIcon aria-hidden="true" />
69
- </MenuToggle>
67
+ icon={<EllipsisVIcon aria-hidden="true" />}
68
+ />
70
69
  )}
71
70
  isOpen={isOpen}
72
71
  onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
@@ -2,5 +2,5 @@ import React from 'react';
2
2
  import { Checkbox } from '@patternfly/react-core';
3
3
 
4
4
  export const CheckboxReversed: React.FunctionComponent = () => (
5
- <Checkbox isLabelBeforeButton label="Reversed checkbox example" id="checkbox-reversed" name="checkbox-reversed" />
5
+ <Checkbox labelPosition="start" label="Reversed checkbox example" id="checkbox-reversed" name="checkbox-reversed" />
6
6
  );
@@ -23,7 +23,7 @@ import AngleDownIcon from '@patternfly/react-icons/dist/esm/icons/angle-down-ico
23
23
  import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon';
24
24
  import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
25
25
  import { css } from '@patternfly/react-styles';
26
- import { DragDrop, Draggable, Droppable } from '@patternfly/react-core/deprecated';
26
+ import { DragDropSort, DragDropContainer, Droppable as NewDroppable } from '@patternfly/react-drag-drop';
27
27
 
28
28
  ## Examples
29
29
 
@@ -83,11 +83,23 @@ import { DragDrop, Draggable, Droppable } from '@patternfly/react-core/deprecate
83
83
 
84
84
  ### Draggable
85
85
 
86
- Note: There is a new recommended drag and drop implementation with full keyboard functionality, which replaces this implementation. To adhere to our new recommendations, refer to the [drag and drop demos](/components/drag-and-drop/react-demos).
86
+ To enable drag and drop, wrap the `<DataList>` component with `<DragDropSort>`, define the `variant` property as "DataList", and pass both the sortable items and `onDrop` callback to `<DragDropSort>`. `<DragDropSort>` will create the component's usual children internally based on the items property, so children should not be passed to the wrapped component.
87
87
 
88
- Previously, draggable data lists had their own API for the [drag and drop component](/components/drag-and-drop), which wasn't flexible enough to allow custom styling for items as they are dragged. To address this disparity, `<DragDrop>`, `<Draggable>`, and `<Droppable>` components were added to replace our now deprecated HTML5-based API. Keyboard and screen reader accessibility for the `<DragDrop>` component is still in development.
88
+ Full drag and drop details can be found on the [drag and drop](/components/drag-and-drop) component page.
89
89
 
90
- ```ts isDeprecated file="./DataListDraggable.tsx"
90
+ ```ts file="../../../../../react-drag-drop/src/components/DragDrop/examples/DataListDraggable.tsx"
91
+
92
+ ```
93
+
94
+ ### Draggable with multiple drop zones
95
+
96
+ To enable multiple drop zones, and create the desired amount of `<Droppable>` components within a `<DragDropContainer>`.
97
+
98
+ Each `<Droppable>` should define the `wrapper` property as the component that acts as the drop zone, `<DataList>`, and the `items` property of their respective draggable items as an array of `<DraggableObject>` data. `<DragDropContainer>` should be passed the `onDrop`, `onContainerMove`, and `onCancel` callbacks to handle items being dropped, items moving between droppable containers, and what happens if the drag is cancelled respectively. `<DragDropContainer>` should also be given a `Record` representing all sortable drop zones' items. Both components should define the `variant` property as "DataList".
99
+
100
+ Full drag and drop details can be found on the [drag and drop](/components/drag-and-drop) component page.
101
+
102
+ ```ts file="../../../../../react-drag-drop/src/components/DragDrop/examples/DragDropContainerDataList.tsx"
91
103
 
92
104
  ```
93
105
 
@@ -86,9 +86,8 @@ export const DataListActions: React.FunctionComponent = () => {
86
86
  onClick={onToggle}
87
87
  variant="plain"
88
88
  aria-label="Data list with actions example kebab toggle"
89
- >
90
- <EllipsisVIcon aria-hidden="true" />
91
- </MenuToggle>
89
+ icon={<EllipsisVIcon aria-hidden="true" />}
90
+ />
92
91
  )}
93
92
  isOpen={isOpen}
94
93
  onOpenChange={(isOpen: boolean) => setIsOpen(isOpen)}
@@ -84,9 +84,8 @@ export const DataListCheckboxes: React.FunctionComponent = () => {
84
84
  onClick={onToggle1}
85
85
  variant="plain"
86
86
  aria-label="Data list with checkboxes, actions and additional cells example kebab toggle 1"
87
- >
88
- <EllipsisVIcon aria-hidden="true" />
89
- </MenuToggle>
87
+ icon={<EllipsisVIcon aria-hidden="true" />}
88
+ />
90
89
  )}
91
90
  isOpen={isOpen1}
92
91
  onOpenChange={(isOpen: boolean) => setIsOpen1(isOpen)}
@@ -139,9 +138,8 @@ export const DataListCheckboxes: React.FunctionComponent = () => {
139
138
  onClick={onToggle2}
140
139
  variant="plain"
141
140
  aria-label="Data list with checkboxes, actions and additional cells example kebab toggle 2"
142
- >
143
- <EllipsisVIcon aria-hidden="true" />
144
- </MenuToggle>
141
+ icon={<EllipsisVIcon aria-hidden="true" />}
142
+ />
145
143
  )}
146
144
  isOpen={isOpen2}
147
145
  onOpenChange={(isOpen: boolean) => setIsOpen2(isOpen)}
@@ -203,9 +201,8 @@ export const DataListCheckboxes: React.FunctionComponent = () => {
203
201
  onClick={onToggle3}
204
202
  variant="plain"
205
203
  aria-label="Data list with checkboxes, actions and additional cells example kebab toggle 3"
206
- >
207
- <EllipsisVIcon aria-hidden="true" />
208
- </MenuToggle>
204
+ icon={<EllipsisVIcon aria-hidden="true" />}
205
+ />
209
206
  )}
210
207
  isOpen={isOpen3}
211
208
  onOpenChange={(isOpen: boolean) => setIsOpen3(isOpen)}
@@ -76,9 +76,8 @@ export const DataListClickableRows: React.FunctionComponent = () => {
76
76
  onClick={onToggle1}
77
77
  variant="plain"
78
78
  aria-label="Data list clickable rows example kebab toggle 1"
79
- >
80
- <EllipsisVIcon aria-hidden="true" />
81
- </MenuToggle>
79
+ icon={<EllipsisVIcon aria-hidden="true" />}
80
+ />
82
81
  )}
83
82
  isOpen={isOpen1}
84
83
  onOpenChange={(isOpen: boolean) => setIsOpen1(isOpen)}
@@ -126,9 +125,8 @@ export const DataListClickableRows: React.FunctionComponent = () => {
126
125
  onClick={onToggle2}
127
126
  variant="plain"
128
127
  aria-label="Data list clickable rows example kebab toggle 2"
129
- >
130
- <EllipsisVIcon aria-hidden="true" />
131
- </MenuToggle>
128
+ icon={<EllipsisVIcon aria-hidden="true" />}
129
+ />
132
130
  )}
133
131
  isOpen={isOpen2}
134
132
  onOpenChange={(isOpen: boolean) => setIsOpen2(isOpen)}
@@ -92,9 +92,8 @@ export const DataListExpandable: React.FunctionComponent = () => {
92
92
  onClick={onToggle1}
93
93
  variant="plain"
94
94
  aria-label="Data list exapndable example kebaby toggle 1"
95
- >
96
- <EllipsisVIcon aria-hidden="true" />
97
- </MenuToggle>
95
+ icon={<EllipsisVIcon aria-hidden="true" />}
96
+ />
98
97
  )}
99
98
  isOpen={isOpen1}
100
99
  onOpenChange={(isOpen: boolean) => setIsOpen1(isOpen)}
@@ -163,9 +162,8 @@ export const DataListExpandable: React.FunctionComponent = () => {
163
162
  onClick={onToggle2}
164
163
  variant="plain"
165
164
  aria-label="Data list exapndable example kebaby toggle 2"
166
- >
167
- <EllipsisVIcon aria-hidden="true" />
168
- </MenuToggle>
165
+ icon={<EllipsisVIcon aria-hidden="true" />}
166
+ />
169
167
  )}
170
168
  isOpen={isOpen2}
171
169
  onOpenChange={(isOpen: boolean) => setIsOpen2(isOpen)}
@@ -234,9 +232,8 @@ export const DataListExpandable: React.FunctionComponent = () => {
234
232
  onClick={onToggle3}
235
233
  variant="plain"
236
234
  aria-label="Data list exapndable example kebaby toggle 3"
237
- >
238
- <EllipsisVIcon aria-hidden="true" />
239
- </MenuToggle>
235
+ icon={<EllipsisVIcon aria-hidden="true" />}
236
+ />
240
237
  )}
241
238
  isOpen={isOpen3}
242
239
  onOpenChange={(isOpen: boolean) => setIsOpen3(isOpen)}
@@ -94,9 +94,8 @@ export const DataListMixedExpandable: React.FunctionComponent = () => {
94
94
  onClick={onToggle1}
95
95
  variant="plain"
96
96
  aria-label="Data list mixed expandable example kebab toggle 1"
97
- >
98
- <EllipsisVIcon aria-hidden="true" />
99
- </MenuToggle>
97
+ icon={<EllipsisVIcon aria-hidden="true" />}
98
+ />
100
99
  )}
101
100
  isOpen={isOpen1}
102
101
  onOpenChange={(isOpen: boolean) => setIsOpen1(isOpen)}
@@ -167,9 +166,8 @@ export const DataListMixedExpandable: React.FunctionComponent = () => {
167
166
  onClick={onToggle2}
168
167
  variant="plain"
169
168
  aria-label="Data list mixed expandable example kebab toggle 2"
170
- >
171
- <EllipsisVIcon aria-hidden="true" />
172
- </MenuToggle>
169
+ icon={<EllipsisVIcon aria-hidden="true" />}
170
+ />
173
171
  )}
174
172
  isOpen={isOpen2}
175
173
  onOpenChange={(isOpen: boolean) => setIsOpen2(isOpen)}
@@ -228,9 +226,8 @@ export const DataListMixedExpandable: React.FunctionComponent = () => {
228
226
  onClick={onToggle3}
229
227
  variant="plain"
230
228
  aria-label="Data list mixed expandable example kebab toggle 3"
231
- >
232
- <EllipsisVIcon aria-hidden="true" />
233
- </MenuToggle>
229
+ icon={<EllipsisVIcon aria-hidden="true" />}
230
+ />
234
231
  )}
235
232
  isOpen={isOpen3}
236
233
  onOpenChange={(isOpen: boolean) => setIsOpen3(isOpen)}
@@ -103,9 +103,8 @@ export const DataListWidthModifiers: React.FunctionComponent = () => {
103
103
  onClick={onToggle1}
104
104
  variant="plain"
105
105
  aria-label="Data list width modifiers example kebab toggle 1"
106
- >
107
- <EllipsisVIcon aria-hidden="true" />
108
- </MenuToggle>
106
+ icon={<EllipsisVIcon aria-hidden="true" />}
107
+ />
109
108
  )}
110
109
  isOpen={isOpen1}
111
110
  onOpenChange={(isOpen: boolean) => setIsOpen1(isOpen)}
@@ -177,9 +176,8 @@ export const DataListWidthModifiers: React.FunctionComponent = () => {
177
176
  onClick={onToggle2}
178
177
  variant="plain"
179
178
  aria-label="Data list width modifiers example kebab toggle 2"
180
- >
181
- <EllipsisVIcon aria-hidden="true" />
182
- </MenuToggle>
179
+ icon={<EllipsisVIcon aria-hidden="true" />}
180
+ />
183
181
  )}
184
182
  isOpen={isOpen2}
185
183
  onOpenChange={(isOpen: boolean) => setIsOpen2(isOpen)}
@@ -2,7 +2,7 @@ import React from 'react';
2
2
  import { css } from '@patternfly/react-styles';
3
3
  import { Menu, MenuContent, MenuProps } from '../Menu';
4
4
  import { Popper } from '../../helpers/Popper/Popper';
5
- import { useOUIAProps, OUIAProps } from '../../helpers';
5
+ import { useOUIAProps, OUIAProps, onToggleArrowKeydownDefault } from '../../helpers';
6
6
 
7
7
  export interface DropdownPopperProps {
8
8
  /** Vertical direction of the popper. If enableFlip is set to true, this will set the initial direction before the popper flips. */
@@ -51,6 +51,8 @@ export interface DropdownProps extends MenuProps, OUIAProps {
51
51
  onOpenChange?: (isOpen: boolean) => void;
52
52
  /** Keys that trigger onOpenChange, defaults to tab and escape. It is highly recommended to include Escape in the array, while Tab may be omitted if the menu contains non-menu items that are focusable. */
53
53
  onOpenChangeKeys?: string[];
54
+ /** Callback to override the toggle keydown behavior. By default, when the toggle has focus and the menu is open, pressing the up/down arrow keys will focus a valid non-disabled menu item - the first item for the down arrow key and last item for the up arrow key. */
55
+ onToggleKeydown?: (event: KeyboardEvent) => void;
54
56
  /** Indicates if the menu should be without the outer box-shadow. */
55
57
  isPlain?: boolean;
56
58
  /** Indicates if the menu should be scrollable. */
@@ -85,6 +87,7 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
85
87
  toggle,
86
88
  shouldFocusToggleOnSelect = false,
87
89
  onOpenChange,
90
+ onToggleKeydown,
88
91
  isPlain,
89
92
  isScrollable,
90
93
  innerRef,
@@ -139,6 +142,14 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
139
142
  toggleRef.current?.focus();
140
143
  }
141
144
  }
145
+
146
+ if (toggleRef.current?.contains(event.target as Node)) {
147
+ if (onToggleKeydown) {
148
+ onToggleKeydown(event);
149
+ } else if (isOpen) {
150
+ onToggleArrowKeydownDefault(event, menuRef);
151
+ }
152
+ }
142
153
  };
143
154
 
144
155
  const handleClick = (event: MouseEvent) => {
@@ -163,6 +174,7 @@ const DropdownBase: React.FunctionComponent<DropdownProps> = ({
163
174
  toggleRef,
164
175
  onOpenChange,
165
176
  onOpenChangeKeys,
177
+ onToggleKeydown,
166
178
  shouldPreventScrollOnItemFocus,
167
179
  shouldFocusFirstItemOnOpen,
168
180
  focusTimeoutDelay
@@ -27,9 +27,8 @@ export const DropdownWithKebab: React.FunctionComponent = () => {
27
27
  variant="plain"
28
28
  onClick={onToggleClick}
29
29
  isExpanded={isOpen}
30
- >
31
- <EllipsisVIcon />
32
- </MenuToggle>
30
+ icon={<EllipsisVIcon />}
31
+ />
33
32
  )}
34
33
  shouldFocusToggleOnSelect
35
34
  >
@@ -22,7 +22,7 @@ import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-i
22
22
  import PficonSortCommonAscIcon from '@patternfly/react-icons/dist/esm/icons/pficon-sort-common-asc-icon';
23
23
  import SearchIcon from '@patternfly/react-icons/dist/esm/icons/search-icon';
24
24
  import EllipsisVIcon from '@patternfly/react-icons/dist/esm/icons/ellipsis-v-icon';
25
- import { DragDrop, Draggable, Droppable } from '@patternfly/react-core/deprecated';
25
+ import { DragDropSort, DragDropContainer, Droppable as NewDroppable } from '@patternfly/react-drag-drop';
26
26
 
27
27
  ## Examples
28
28
 
@@ -78,22 +78,24 @@ The dual list selector is built in a composable manner to make customization eas
78
78
 
79
79
  ```
80
80
 
81
- ### Drag and drop
81
+ ### Draggable
82
82
 
83
- This example only allows reordering the contents of the "chosen" pane with drag and drop. To make a pane able to be reordered:
83
+ To enable drag and drop, wrap the `<DualListSelectorList>` component with `<DragDropSort>`, define the `variant` property as "DualListSelectorList", and pass both the sortable items and `onDrop` callback to `<DragDropSort>`. `<DragDropSort>` will create the component's usual children internally based on the items property, so children inside the `<DualListSelectorList>` should not be passed to the wrapped component.
84
84
 
85
- - wrap the `DualListSelectorPane` in a `DragDrop` component
86
- - wrap the `DualListSelectorList` in a `Droppable` component
87
- - wrap the `DualListSelectorListItem` components in a `Draggable` component
88
- - define an `onDrop` callback which reorders the sortable options.
89
- - The `onDrop` function provides the starting location and destination location for a dragged item. It should return
90
- true to enable the 'drop' animation in the new location and false to enable the 'drop' animation back to the item's
91
- old position.
92
- - define an `onDrag` callback which ensures that the drag event will not cross hairs with the `onOptionSelect` click
93
- event set on the option. Note: the `ignoreNextOptionSelect` state value is used to prevent selection while dragging.
85
+ Full drag and drop details can be found on the [drag and drop](/components/drag-and-drop) component page.
94
86
 
95
- Note: Keyboard accessibility and screen reader accessibility for the `DragDrop` component are still in development.
87
+ ```ts file="../../../../../react-drag-drop/src/components/DragDrop/examples/DualListSelectorDraggable.tsx"
96
88
 
97
- ```ts file="DualListSelectorDragDrop.tsx"
89
+ ```
90
+
91
+ ### Draggable with multiple drop zones
92
+
93
+ To enable multiple drop zones, wrap the `<DualListSelector>` component with `<DragDropContainer>`, and create the desired amount of `<Droppable>` components within `<DragDropContainer>`. `<Droppable>` components should be located where `<DualListSelectorList>` usually would go for each pane to be made draggable.
94
+
95
+ Each `<Droppable>` should define the `wrapper` property as the component that acts as the drop zone, `<DualListSelectorList>`, and the `items` property of their respective draggable items as an array of `<DraggableObject>` data. `<DragDropContainer>` should be passed the `onDrop`, `onContainerMove`, and `onCancel` callbacks to handle items being dropped, items moving between droppable containers, and what happens if the drag is cancelled respectively. `<DragDropContainer>` should also be given a `Record` representing all sortable drop zones' items. Both components should define the `variant` property as "DualListSelectorList".
96
+
97
+ Full drag and drop details can be found on the [drag and drop](/components/drag-and-drop) component page.
98
+
99
+ ```ts file="../../../../../react-drag-drop/src/components/DragDrop/examples/DragDropContainerDualListSelector.tsx"
98
100
 
99
101
  ```
@@ -166,9 +166,8 @@ export const DualListSelectorComplexOptionsActionsNext: React.FunctionComponent
166
166
  variant="plain"
167
167
  id="complex-available-toggle"
168
168
  aria-label="Complex actions example available kebab toggle"
169
- >
170
- <EllipsisVIcon aria-hidden="true" />
171
- </MenuToggle>
169
+ icon={<EllipsisVIcon aria-hidden="true" />}
170
+ />
172
171
  )}
173
172
  isOpen={isAvailableKebabOpen}
174
173
  onOpenChange={(isOpen: boolean) => setIsAvailableKebabOpen(isOpen)}
@@ -202,9 +201,8 @@ export const DualListSelectorComplexOptionsActionsNext: React.FunctionComponent
202
201
  variant="plain"
203
202
  id="complex-chosen-toggle"
204
203
  aria-label="Complex actions example chosen kebab toggle"
205
- >
206
- <EllipsisVIcon aria-hidden="true" />
207
- </MenuToggle>
204
+ icon={<EllipsisVIcon aria-hidden="true" />}
205
+ />
208
206
  )}
209
207
  isOpen={isChosenKebabOpen}
210
208
  onOpenChange={(isOpen: boolean) => setIsChosenKebabOpen(isOpen)}
@@ -36,8 +36,6 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
36
36
  const [chosenLeafIds, setChosenLeafIds] = React.useState<string[]>(['beans', 'beef', 'chicken', 'tofu']);
37
37
  const [chosenFilter, setChosenFilter] = React.useState<string>('');
38
38
  const [availableFilter, setAvailableFilter] = React.useState<string>('');
39
- let hiddenChosen: string[] = [];
40
- let hiddenAvailable: string[] = [];
41
39
 
42
40
  // helper function to build memoized lists
43
41
  const buildTextById = (node: FoodNode): { [key: string]: string } => {
@@ -82,7 +80,7 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
82
80
  };
83
81
 
84
82
  // Builds a map of child leaf nodes by node id - memoized so that it only rebuilds the list if the data changes.
85
- const { memoizedLeavesById, memoizedAllLeaves, memoizedNodeText } = React.useMemo(() => {
83
+ const { memoizedLeavesById, memoizedAllLeaves, memoizedNodeTexts } = React.useMemo(() => {
86
84
  let leavesById = {};
87
85
  let allLeaves: string[] = [];
88
86
  let nodeTexts = {};
@@ -94,32 +92,49 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
94
92
  return {
95
93
  memoizedLeavesById: leavesById,
96
94
  memoizedAllLeaves: allLeaves,
97
- memoizedNodeText: nodeTexts
95
+ memoizedNodeTexts: nodeTexts
98
96
  };
99
97
  // eslint-disable-next-line react-hooks/exhaustive-deps
100
98
  }, [data]);
101
99
 
100
+ const matchesFilter = (value: string, filter: string) => value.toLowerCase().includes(filter.trim().toLowerCase());
101
+
102
+ const getVisibleLeafIds = (leafIds: string[], filter: string) => {
103
+ const filterMatchingNodeIds = Object.keys(memoizedLeavesById).filter((nodeId) =>
104
+ matchesFilter(memoizedNodeTexts[nodeId], filter)
105
+ );
106
+ const filterMatchingLeafIds = filterMatchingNodeIds.map((nodeId) => memoizedLeavesById[nodeId]).flat();
107
+ return leafIds.filter((leafId) => filterMatchingLeafIds.includes(leafId));
108
+ };
109
+
110
+ const availableLeafIds = memoizedAllLeaves.filter((leafId) => !chosenLeafIds.includes(leafId));
111
+ const visibleChosenLeafIds = getVisibleLeafIds(chosenLeafIds, chosenFilter);
112
+ const visibleAvailableLeafIds = getVisibleLeafIds(availableLeafIds, availableFilter);
113
+
102
114
  const moveChecked = (toChosen: boolean) => {
115
+ const visibleCheckedChosenLeafIds = checkedLeafIds.filter((leafId) => visibleChosenLeafIds.includes(leafId));
116
+ const visibleCheckedAvailableLeafIds = checkedLeafIds.filter((leafId) => visibleAvailableLeafIds.includes(leafId));
117
+
103
118
  setChosenLeafIds(
104
119
  (prevChosenIds) =>
105
120
  toChosen
106
- ? [...prevChosenIds, ...checkedLeafIds] // add checked ids to chosen list
107
- : [...prevChosenIds.filter((x) => !checkedLeafIds.includes(x))] // remove checked ids from chosen list
121
+ ? [...prevChosenIds, ...visibleCheckedAvailableLeafIds] // add visible checked ids to chosen list
122
+ : prevChosenIds.filter((x) => !visibleCheckedChosenLeafIds.includes(x)) // remove visible checked ids from chosen list
108
123
  );
109
124
 
110
125
  // uncheck checked ids that just moved
111
126
  setCheckedLeafIds((prevChecked) =>
112
127
  toChosen
113
- ? [...prevChecked.filter((x) => chosenLeafIds.includes(x))]
114
- : [...prevChecked.filter((x) => !chosenLeafIds.includes(x))]
128
+ ? prevChecked.filter((x) => !visibleCheckedAvailableLeafIds.includes(x))
129
+ : prevChecked.filter((x) => !visibleCheckedChosenLeafIds.includes(x))
115
130
  );
116
131
  };
117
132
 
118
133
  const moveAll = (toChosen: boolean) => {
119
134
  if (toChosen) {
120
- setChosenLeafIds(memoizedAllLeaves);
135
+ setChosenLeafIds((prevChosenIds) => [...prevChosenIds, ...visibleAvailableLeafIds]);
121
136
  } else {
122
- setChosenLeafIds([]);
137
+ setChosenLeafIds((prevChosenIds) => prevChosenIds.filter((id) => !visibleChosenLeafIds.includes(id)));
123
138
  }
124
139
  };
125
140
 
@@ -149,15 +164,9 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
149
164
  isChosen: boolean
150
165
  ) => {
151
166
  const nodeIdsToCheck = memoizedLeavesById[node.id].filter((id) =>
152
- isChosen
153
- ? chosenLeafIds.includes(id) && !hiddenChosen.includes(id)
154
- : !chosenLeafIds.includes(id) && !hiddenAvailable.includes(id)
167
+ isChosen ? visibleChosenLeafIds.includes(id) : visibleAvailableLeafIds.includes(id)
155
168
  );
156
- if (isChosen) {
157
- hiddenChosen = [];
158
- } else {
159
- hiddenAvailable = [];
160
- }
169
+
161
170
  setCheckedLeafIds((prevChecked) => {
162
171
  const otherCheckedNodeNames = prevChecked.filter((id) => !nodeIdsToCheck.includes(id));
163
172
  return !isChecked ? otherCheckedNodeNames : [...otherCheckedNodeNames, ...nodeIdsToCheck];
@@ -196,8 +205,8 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
196
205
  : descendentLeafIds.filter((id) => !chosenLeafIds.includes(id));
197
206
 
198
207
  const hasMatchingChildren =
199
- filterValue && descendentsOnThisPane.some((id) => memoizedNodeText[id].includes(filterValue));
200
- const isFilterMatch = filterValue && node.text.includes(filterValue) && descendentsOnThisPane.length > 0;
208
+ filterValue && descendentsOnThisPane.some((id) => matchesFilter(memoizedNodeTexts[id], filterValue));
209
+ const isFilterMatch = filterValue && matchesFilter(node.text, filterValue) && descendentsOnThisPane.length > 0;
201
210
 
202
211
  // A node is displayed if either of the following is true:
203
212
  // - There is no filter value and this node or its descendents belong on this pane
@@ -208,14 +217,6 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
208
217
  (hasParentMatch && descendentsOnThisPane.length > 0) ||
209
218
  isFilterMatch;
210
219
 
211
- if (!isDisplayed) {
212
- if (isChosen) {
213
- hiddenChosen.push(node.id);
214
- } else {
215
- hiddenAvailable.push(node.id);
216
- }
217
- }
218
-
219
220
  return [
220
221
  ...(isDisplayed
221
222
  ? [
@@ -242,9 +243,9 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
242
243
 
243
244
  const buildPane = (isChosen: boolean): React.ReactNode => {
244
245
  const options: DualListSelectorTreeItemData[] = buildOptions(isChosen, data, false);
245
- const numOptions = isChosen ? chosenLeafIds.length : memoizedAllLeaves.length - chosenLeafIds.length;
246
+ const numOptions = isChosen ? visibleChosenLeafIds.length : visibleAvailableLeafIds.length;
246
247
  const numSelected = checkedLeafIds.filter((id) =>
247
- isChosen ? chosenLeafIds.includes(id) : !chosenLeafIds.includes(id)
248
+ isChosen ? visibleChosenLeafIds.includes(id) : visibleAvailableLeafIds.includes(id)
248
249
  ).length;
249
250
  const status = `${numSelected} of ${numOptions} options selected`;
250
251
  const filterApplied = isChosen ? chosenFilter !== '' : availableFilter !== '';
@@ -285,7 +286,7 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
285
286
  {buildPane(false)}
286
287
  <DualListSelectorControlsWrapper>
287
288
  <DualListSelectorControl
288
- isDisabled={!checkedLeafIds.filter((x) => !chosenLeafIds.includes(x)).length}
289
+ isDisabled={!checkedLeafIds.filter((x) => visibleAvailableLeafIds.includes(x)).length}
289
290
  onClick={() => moveChecked(true)}
290
291
  aria-label="Add selected"
291
292
  icon={<AngleRightIcon />}
@@ -304,7 +305,7 @@ export const DualListSelectorComposableTree: React.FunctionComponent<ExampleProp
304
305
  />
305
306
  <DualListSelectorControl
306
307
  onClick={() => moveChecked(false)}
307
- isDisabled={!checkedLeafIds.filter((x) => !!chosenLeafIds.includes(x)).length}
308
+ isDisabled={!checkedLeafIds.filter((x) => visibleChosenLeafIds.includes(x)).length}
308
309
  aria-label="Remove selected"
309
310
  icon={<AngleLeftIcon />}
310
311
  />