@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.
- package/CHANGELOG.md +68 -0
- package/components/package.json +1 -1
- package/deprecated/package.json +1 -1
- package/dist/dynamic/components/AboutModal/package.json +1 -1
- package/dist/dynamic/components/Accordion/package.json +1 -1
- package/dist/dynamic/components/ActionList/package.json +1 -1
- package/dist/dynamic/components/Alert/package.json +1 -1
- package/dist/dynamic/components/Avatar/package.json +1 -1
- package/dist/dynamic/components/BackToTop/package.json +1 -1
- package/dist/dynamic/components/Backdrop/package.json +1 -1
- package/dist/dynamic/components/BackgroundImage/package.json +1 -1
- package/dist/dynamic/components/Badge/package.json +1 -1
- package/dist/dynamic/components/Banner/package.json +1 -1
- package/dist/dynamic/components/Brand/package.json +1 -1
- package/dist/dynamic/components/Breadcrumb/package.json +1 -1
- package/dist/dynamic/components/Button/package.json +1 -1
- package/dist/dynamic/components/CalendarMonth/package.json +1 -1
- package/dist/dynamic/components/Card/package.json +1 -1
- package/dist/dynamic/components/Checkbox/package.json +1 -1
- package/dist/dynamic/components/ClipboardCopy/package.json +1 -1
- package/dist/dynamic/components/CodeBlock/package.json +1 -1
- package/dist/dynamic/components/Content/package.json +1 -1
- package/dist/dynamic/components/DataList/package.json +1 -1
- package/dist/dynamic/components/DatePicker/package.json +1 -1
- package/dist/dynamic/components/DescriptionList/package.json +1 -1
- package/dist/dynamic/components/Divider/package.json +1 -1
- package/dist/dynamic/components/Drawer/package.json +1 -1
- package/dist/dynamic/components/Dropdown/package.json +1 -1
- package/dist/dynamic/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/components/EmptyState/package.json +1 -1
- package/dist/dynamic/components/ExpandableSection/package.json +1 -1
- package/dist/dynamic/components/FileUpload/package.json +1 -1
- package/dist/dynamic/components/Form/package.json +1 -1
- package/dist/dynamic/components/FormSelect/package.json +1 -1
- package/dist/dynamic/components/HelperText/package.json +1 -1
- package/dist/dynamic/components/Hint/package.json +1 -1
- package/dist/dynamic/components/Icon/package.json +1 -1
- package/dist/dynamic/components/InputGroup/package.json +1 -1
- package/dist/dynamic/components/JumpLinks/package.json +1 -1
- package/dist/dynamic/components/Label/package.json +1 -1
- package/dist/dynamic/components/List/package.json +1 -1
- package/dist/dynamic/components/LoginPage/package.json +1 -1
- package/dist/dynamic/components/Masthead/package.json +1 -1
- package/dist/dynamic/components/Menu/package.json +1 -1
- package/dist/dynamic/components/MenuToggle/package.json +1 -1
- package/dist/dynamic/components/Modal/package.json +1 -1
- package/dist/dynamic/components/MultipleFileUpload/package.json +1 -1
- package/dist/dynamic/components/Nav/package.json +1 -1
- package/dist/dynamic/components/NotificationBadge/package.json +1 -1
- package/dist/dynamic/components/NotificationDrawer/package.json +1 -1
- package/dist/dynamic/components/NumberInput/package.json +1 -1
- package/dist/dynamic/components/OverflowMenu/package.json +1 -1
- package/dist/dynamic/components/Page/package.json +1 -1
- package/dist/dynamic/components/Pagination/package.json +1 -1
- package/dist/dynamic/components/Panel/package.json +1 -1
- package/dist/dynamic/components/Popover/package.json +1 -1
- package/dist/dynamic/components/Progress/package.json +1 -1
- package/dist/dynamic/components/ProgressStepper/package.json +1 -1
- package/dist/dynamic/components/Radio/package.json +1 -1
- package/dist/dynamic/components/SearchInput/package.json +1 -1
- package/dist/dynamic/components/Select/package.json +1 -1
- package/dist/dynamic/components/Sidebar/package.json +1 -1
- package/dist/dynamic/components/SimpleList/package.json +1 -1
- package/dist/dynamic/components/Skeleton/package.json +1 -1
- package/dist/dynamic/components/SkipToContent/package.json +1 -1
- package/dist/dynamic/components/Slider/package.json +1 -1
- package/dist/dynamic/components/Spinner/package.json +1 -1
- package/dist/dynamic/components/Switch/package.json +1 -1
- package/dist/dynamic/components/Tabs/package.json +1 -1
- package/dist/dynamic/components/TextArea/package.json +1 -1
- package/dist/dynamic/components/TextInput/package.json +1 -1
- package/dist/dynamic/components/TextInputGroup/package.json +1 -1
- package/dist/dynamic/components/TimePicker/package.json +1 -1
- package/dist/dynamic/components/Timestamp/package.json +1 -1
- package/dist/dynamic/components/Title/package.json +1 -1
- package/dist/dynamic/components/ToggleGroup/package.json +1 -1
- package/dist/dynamic/components/Toolbar/package.json +1 -1
- package/dist/dynamic/components/Tooltip/package.json +1 -1
- package/dist/dynamic/components/TreeView/package.json +1 -1
- package/dist/dynamic/components/Truncate/package.json +1 -1
- package/dist/dynamic/components/Wizard/hooks/package.json +1 -1
- package/dist/dynamic/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/Chip/package.json +1 -1
- package/dist/dynamic/deprecated/components/DragDrop/package.json +1 -1
- package/dist/dynamic/deprecated/components/DualListSelector/package.json +1 -1
- package/dist/dynamic/deprecated/components/Modal/package.json +1 -1
- package/dist/dynamic/deprecated/components/Tile/package.json +1 -1
- package/dist/dynamic/deprecated/components/Wizard/package.json +1 -1
- package/dist/dynamic/deprecated/components/package.json +1 -1
- package/dist/dynamic/helpers/FocusTrap/FocusTrap/package.json +1 -1
- package/dist/dynamic/helpers/GenerateId/GenerateId/package.json +1 -1
- package/dist/dynamic/helpers/KeyboardHandler/package.json +1 -1
- package/dist/dynamic/helpers/OUIA/ouia/package.json +1 -1
- package/dist/dynamic/helpers/Popper/Popper/package.json +1 -1
- package/dist/dynamic/helpers/constants/package.json +1 -1
- package/dist/dynamic/helpers/datetimeUtils/package.json +1 -1
- package/dist/dynamic/helpers/fileUtils/package.json +1 -1
- package/dist/dynamic/helpers/htmlConstants/package.json +1 -1
- package/dist/dynamic/helpers/package.json +1 -1
- package/dist/dynamic/helpers/resizeObserver/package.json +1 -1
- package/dist/dynamic/helpers/typeUtils/package.json +1 -1
- package/dist/dynamic/helpers/useInterval/package.json +1 -1
- package/dist/dynamic/helpers/useIsomorphicLayout/package.json +1 -1
- package/dist/dynamic/helpers/useUnmountEffect/package.json +1 -1
- package/dist/dynamic/helpers/util/package.json +1 -1
- package/dist/dynamic/layouts/Bullseye/package.json +1 -1
- package/dist/dynamic/layouts/Flex/package.json +1 -1
- package/dist/dynamic/layouts/Gallery/package.json +1 -1
- package/dist/dynamic/layouts/Grid/package.json +1 -1
- package/dist/dynamic/layouts/Level/package.json +1 -1
- package/dist/dynamic/layouts/Split/package.json +1 -1
- package/dist/dynamic/layouts/Stack/package.json +1 -1
- package/dist/dynamic/styles/package.json +1 -1
- package/dist/dynamic-modules.json +1 -0
- package/dist/esm/components/Dropdown/Dropdown.d.ts +2 -0
- package/dist/esm/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/esm/components/Dropdown/Dropdown.js +12 -3
- package/dist/esm/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/esm/components/Menu/MenuContainer.d.ts +2 -0
- package/dist/esm/components/Menu/MenuContainer.d.ts.map +1 -1
- package/dist/esm/components/Menu/MenuContainer.js +21 -4
- package/dist/esm/components/Menu/MenuContainer.js.map +1 -1
- package/dist/esm/components/MenuToggle/MenuToggleCheckbox.d.ts +1 -1
- package/dist/esm/components/MenuToggle/MenuToggleCheckbox.d.ts.map +1 -1
- package/dist/esm/components/Modal/Modal.d.ts +2 -2
- package/dist/esm/components/Modal/Modal.d.ts.map +1 -1
- package/dist/esm/components/Modal/Modal.js +13 -20
- package/dist/esm/components/Modal/Modal.js.map +1 -1
- package/dist/esm/components/Modal/ModalContent.d.ts +2 -0
- package/dist/esm/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/esm/components/Modal/ModalContent.js +2 -2
- package/dist/esm/components/Modal/ModalContent.js.map +1 -1
- package/dist/esm/components/Select/Select.d.ts +4 -0
- package/dist/esm/components/Select/Select.d.ts.map +1 -1
- package/dist/esm/components/Select/Select.js +12 -3
- package/dist/esm/components/Select/Select.js.map +1 -1
- package/dist/esm/components/Toolbar/ToolbarFilter.d.ts.map +1 -1
- package/dist/esm/components/Toolbar/ToolbarFilter.js +4 -2
- package/dist/esm/components/Toolbar/ToolbarFilter.js.map +1 -1
- package/dist/esm/demos/DashboardHeader.d.ts.map +1 -1
- package/dist/esm/demos/DashboardHeader.js +2 -4
- package/dist/esm/demos/DashboardHeader.js.map +1 -1
- package/dist/esm/deprecated/components/Modal/Modal.d.ts +2 -2
- package/dist/esm/deprecated/components/Modal/Modal.d.ts.map +1 -1
- package/dist/esm/deprecated/components/Modal/Modal.js +13 -20
- package/dist/esm/deprecated/components/Modal/Modal.js.map +1 -1
- package/dist/esm/deprecated/components/Modal/ModalContent.d.ts +2 -0
- package/dist/esm/deprecated/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/esm/deprecated/components/Modal/ModalContent.js +2 -2
- package/dist/esm/deprecated/components/Modal/ModalContent.js.map +1 -1
- package/dist/esm/helpers/KeyboardHandler.d.ts +7 -0
- package/dist/esm/helpers/KeyboardHandler.d.ts.map +1 -1
- package/dist/esm/helpers/KeyboardHandler.js +25 -0
- package/dist/esm/helpers/KeyboardHandler.js.map +1 -1
- package/dist/esm/layouts/Split/Split.d.ts +4 -4
- package/dist/esm/layouts/Split/Split.d.ts.map +1 -1
- package/dist/esm/layouts/Split/SplitItem.d.ts +5 -3
- package/dist/esm/layouts/Split/SplitItem.d.ts.map +1 -1
- package/dist/esm/layouts/Split/SplitItem.js +3 -2
- package/dist/esm/layouts/Split/SplitItem.js.map +1 -1
- package/dist/esm/layouts/Stack/Stack.d.ts +3 -3
- package/dist/esm/layouts/Stack/Stack.d.ts.map +1 -1
- package/dist/esm/layouts/Stack/StackItem.d.ts +5 -3
- package/dist/esm/layouts/Stack/StackItem.d.ts.map +1 -1
- package/dist/esm/layouts/Stack/StackItem.js +3 -2
- package/dist/esm/layouts/Stack/StackItem.js.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.d.ts +2 -0
- package/dist/js/components/Dropdown/Dropdown.d.ts.map +1 -1
- package/dist/js/components/Dropdown/Dropdown.js +11 -2
- package/dist/js/components/Dropdown/Dropdown.js.map +1 -1
- package/dist/js/components/Menu/MenuContainer.d.ts +2 -0
- package/dist/js/components/Menu/MenuContainer.d.ts.map +1 -1
- package/dist/js/components/Menu/MenuContainer.js +22 -5
- package/dist/js/components/Menu/MenuContainer.js.map +1 -1
- package/dist/js/components/MenuToggle/MenuToggleCheckbox.d.ts +1 -1
- package/dist/js/components/MenuToggle/MenuToggleCheckbox.d.ts.map +1 -1
- package/dist/js/components/Modal/Modal.d.ts +2 -2
- package/dist/js/components/Modal/Modal.d.ts.map +1 -1
- package/dist/js/components/Modal/Modal.js +13 -20
- package/dist/js/components/Modal/Modal.js.map +1 -1
- package/dist/js/components/Modal/ModalContent.d.ts +2 -0
- package/dist/js/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/js/components/Modal/ModalContent.js +2 -2
- package/dist/js/components/Modal/ModalContent.js.map +1 -1
- package/dist/js/components/Select/Select.d.ts +4 -0
- package/dist/js/components/Select/Select.d.ts.map +1 -1
- package/dist/js/components/Select/Select.js +11 -2
- package/dist/js/components/Select/Select.js.map +1 -1
- package/dist/js/components/Toolbar/ToolbarFilter.d.ts.map +1 -1
- package/dist/js/components/Toolbar/ToolbarFilter.js +4 -2
- package/dist/js/components/Toolbar/ToolbarFilter.js.map +1 -1
- package/dist/js/demos/DashboardHeader.d.ts.map +1 -1
- package/dist/js/demos/DashboardHeader.js +2 -4
- package/dist/js/demos/DashboardHeader.js.map +1 -1
- package/dist/js/deprecated/components/Modal/Modal.d.ts +2 -2
- package/dist/js/deprecated/components/Modal/Modal.d.ts.map +1 -1
- package/dist/js/deprecated/components/Modal/Modal.js +13 -20
- package/dist/js/deprecated/components/Modal/Modal.js.map +1 -1
- package/dist/js/deprecated/components/Modal/ModalContent.d.ts +2 -0
- package/dist/js/deprecated/components/Modal/ModalContent.d.ts.map +1 -1
- package/dist/js/deprecated/components/Modal/ModalContent.js +2 -2
- package/dist/js/deprecated/components/Modal/ModalContent.js.map +1 -1
- package/dist/js/helpers/KeyboardHandler.d.ts +7 -0
- package/dist/js/helpers/KeyboardHandler.d.ts.map +1 -1
- package/dist/js/helpers/KeyboardHandler.js +27 -1
- package/dist/js/helpers/KeyboardHandler.js.map +1 -1
- package/dist/js/layouts/Split/Split.d.ts +4 -4
- package/dist/js/layouts/Split/Split.d.ts.map +1 -1
- package/dist/js/layouts/Split/SplitItem.d.ts +5 -3
- package/dist/js/layouts/Split/SplitItem.d.ts.map +1 -1
- package/dist/js/layouts/Split/SplitItem.js +3 -2
- package/dist/js/layouts/Split/SplitItem.js.map +1 -1
- package/dist/js/layouts/Stack/Stack.d.ts +3 -3
- package/dist/js/layouts/Stack/Stack.d.ts.map +1 -1
- package/dist/js/layouts/Stack/StackItem.d.ts +5 -3
- package/dist/js/layouts/Stack/StackItem.d.ts.map +1 -1
- package/dist/js/layouts/Stack/StackItem.js +3 -2
- package/dist/js/layouts/Stack/StackItem.js.map +1 -1
- package/dist/umd/assets/{output-DPVTymX-.css → output-K5btXEZY.css} +11135 -11097
- package/dist/umd/react-core.min.js +4 -4
- package/helpers/package.json +1 -1
- package/layouts/package.json +1 -1
- package/next/package.json +1 -1
- package/package.json +9 -9
- package/src/components/ActionList/examples/ActionListSingleGroup.tsx +2 -3
- package/src/components/Card/examples/CardExpandable.tsx +2 -3
- package/src/components/Card/examples/CardExpandableWithIcon.tsx +2 -3
- package/src/components/Card/examples/CardHeaderInCardHead.tsx +2 -3
- package/src/components/Card/examples/CardOnlyActionsInCardHead.tsx +2 -3
- package/src/components/Card/examples/CardWithImageAndActions.tsx +2 -3
- package/src/components/Checkbox/examples/CheckboxReversed.tsx +1 -1
- package/src/components/DataList/examples/DataList.md +16 -4
- package/src/components/DataList/examples/DataListActions.tsx +2 -3
- package/src/components/DataList/examples/DataListCheckboxes.tsx +6 -9
- package/src/components/DataList/examples/DataListClickableRows.tsx +4 -6
- package/src/components/DataList/examples/DataListExpandable.tsx +6 -9
- package/src/components/DataList/examples/DataListMixedExpandable.tsx +6 -9
- package/src/components/DataList/examples/DataListWidthModifiers.tsx +4 -6
- package/src/components/Dropdown/Dropdown.tsx +13 -1
- package/src/components/Dropdown/examples/DropdownWithKebabToggle.tsx +2 -3
- package/src/components/DualListSelector/examples/DualListSelector.md +16 -14
- package/src/components/DualListSelector/examples/DualListSelectorComplexOptionsActions.tsx +4 -6
- package/src/components/DualListSelector/examples/DualListSelectorTree.tsx +33 -32
- package/src/components/FileUpload/__tests__/__snapshots__/FileUpload.test.tsx.snap +1 -1
- package/src/components/Hint/examples/HintBasicWithTitle.tsx +2 -3
- package/src/components/Hint/examples/HintBasicWithoutTitle.tsx +2 -3
- package/src/components/Label/examples/LabelGroupEditableAddModal.tsx +2 -2
- package/src/components/Menu/MenuContainer.tsx +24 -3
- package/src/components/MenuToggle/MenuToggleCheckbox.tsx +1 -1
- package/src/components/MenuToggle/examples/MenuToggle.md +4 -16
- package/src/components/Modal/Modal.tsx +13 -18
- package/src/components/Modal/ModalContent.tsx +4 -1
- package/src/components/Modal/__tests__/Modal.test.tsx +45 -0
- package/src/components/MultipleFileUpload/__tests__/__snapshots__/MultipleFileUpload.test.tsx.snap +3 -3
- package/src/components/OverflowMenu/examples/OverflowMenuBreakpointOnContainer.tsx +2 -3
- package/src/components/OverflowMenu/examples/OverflowMenuGroupTypes.tsx +2 -3
- package/src/components/OverflowMenu/examples/OverflowMenuMultiGroup.tsx +2 -3
- package/src/components/OverflowMenu/examples/OverflowMenuPersistent.tsx +2 -3
- package/src/components/OverflowMenu/examples/OverflowMenuSimple.tsx +2 -3
- package/src/components/Select/Select.tsx +16 -1
- package/src/components/Select/examples/SelectMultiTypeahead.tsx +1 -1
- package/src/components/Select/examples/SelectMultiTypeaheadCheckbox.tsx +1 -1
- package/src/components/Select/examples/SelectMultiTypeaheadCreatable.tsx +1 -1
- package/src/components/Select/examples/SelectTypeahead.tsx +1 -1
- package/src/components/Select/examples/SelectTypeaheadCreatable.tsx +1 -1
- package/src/components/Toolbar/ToolbarFilter.tsx +2 -1
- package/src/components/Toolbar/examples/ToolbarStacked.tsx +2 -3
- package/src/components/Toolbar/examples/ToolbarWithFilters.tsx +2 -3
- package/src/components/TreeView/examples/TreeViewWithActionItems.tsx +2 -3
- package/src/demos/CardView/examples/CardView.tsx +4 -6
- package/src/demos/CustomMenus/examples/ApplicationLauncherDemo.tsx +2 -3
- package/src/demos/DashboardHeader.tsx +4 -6
- package/src/demos/DataList/examples/DataListBasic.tsx +1 -3
- package/src/demos/DataList/examples/DataListExpandableControlInToolbar.tsx +7 -10
- package/src/demos/NotificationDrawer/examples/NotificationDrawerBasic.tsx +12 -18
- package/src/demos/NotificationDrawer/examples/NotificationDrawerGrouped.tsx +20 -30
- package/src/demos/RTL/examples/PaginatedTable.jsx +4 -6
- package/src/demos/RTL/examples/PaginatedTable.tsx +4 -6
- package/src/demos/examples/AlertGroup/AlertGroupToastWithNotificationDrawer.tsx +4 -6
- package/src/demos/examples/Card/CardHorizontalGrid.tsx +2 -3
- package/src/demos/examples/Masthead/MastheadWithHorizontalNav.tsx +4 -6
- package/src/demos/examples/Masthead/MastheadWithUtilitiesAndUserDropdownMenu.tsx +6 -9
- package/src/demos/examples/Nav/NavFlyout.tsx +4 -6
- package/src/demos/examples/Nav/NavHorizontal.tsx +4 -6
- package/src/demos/examples/Nav/NavHorizontalWithSubnav.tsx +4 -6
- package/src/demos/examples/Nav/NavManual.tsx +4 -6
- package/src/demos/examples/Page/PageContextSelector.tsx +4 -6
- package/src/demos/examples/Page/PageStickySectionBreadcrumb.tsx +4 -6
- package/src/demos/examples/Page/PageStickySectionGroup.tsx +4 -6
- package/src/demos/examples/Page/PageStickySectionGroupAlternate.tsx +4 -6
- package/src/demos/examples/PrimaryDetail/PrimaryDetailCardView.tsx +4 -6
- package/src/demos/examples/Tabs/TabsAndTable.tsx +2 -3
- package/src/deprecated/components/Modal/Modal.tsx +13 -18
- package/src/deprecated/components/Modal/ModalContent.tsx +4 -1
- package/src/deprecated/components/Modal/__tests__/Modal.test.tsx +28 -0
- package/src/helpers/KeyboardHandler.tsx +27 -0
- package/src/layouts/Split/Split.tsx +4 -4
- package/src/layouts/Split/SplitItem.tsx +14 -8
- package/src/layouts/Split/__tests__/Split.test.tsx +18 -0
- package/src/layouts/Split/__tests__/__snapshots__/Split.test.tsx.snap +28 -0
- package/src/layouts/Stack/Stack.tsx +3 -3
- package/src/layouts/Stack/StackItem.tsx +14 -8
- package/src/layouts/Stack/__tests__/Stack.test.tsx +20 -2
- package/src/layouts/Stack/__tests__/__snapshots__/Stack.test.tsx.snap +30 -2
package/helpers/package.json
CHANGED
|
@@ -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.
|
|
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}
|
package/layouts/package.json
CHANGED
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
50
|
-
"@patternfly/react-styles": "^6.0.
|
|
51
|
-
"@patternfly/react-tokens": "^6.0.
|
|
52
|
-
"focus-trap": "7.6.
|
|
53
|
-
"react-dropzone": "^14.
|
|
54
|
-
"tslib": "^2.
|
|
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.
|
|
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": "
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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 {
|
|
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
|
-
|
|
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
|
-
|
|
88
|
+
Full drag and drop details can be found on the [drag and drop](/components/drag-and-drop) component page.
|
|
89
89
|
|
|
90
|
-
```ts
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
@@ -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 {
|
|
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
|
-
###
|
|
81
|
+
### Draggable
|
|
82
82
|
|
|
83
|
-
|
|
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
|
-
|
|
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
|
-
|
|
87
|
+
```ts file="../../../../../react-drag-drop/src/components/DragDrop/examples/DualListSelectorDraggable.tsx"
|
|
96
88
|
|
|
97
|
-
```
|
|
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
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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, ...
|
|
107
|
-
:
|
|
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
|
-
?
|
|
114
|
-
:
|
|
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(
|
|
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
|
-
|
|
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) =>
|
|
200
|
-
const isFilterMatch = filterValue && node.text
|
|
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 ?
|
|
246
|
+
const numOptions = isChosen ? visibleChosenLeafIds.length : visibleAvailableLeafIds.length;
|
|
246
247
|
const numSelected = checkedLeafIds.filter((id) =>
|
|
247
|
-
isChosen ?
|
|
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) =>
|
|
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) =>
|
|
308
|
+
isDisabled={!checkedLeafIds.filter((x) => visibleChosenLeafIds.includes(x)).length}
|
|
308
309
|
aria-label="Remove selected"
|
|
309
310
|
icon={<AngleLeftIcon />}
|
|
310
311
|
/>
|