@elliemae/ds-treeview 2.2.0-next.4 → 2.3.0-alpha.2

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 (207) hide show
  1. package/cjs/TreeView.js +49 -27
  2. package/cjs/TreeView.js.map +7 -0
  3. package/cjs/TreeViewContext.js +61 -37
  4. package/cjs/TreeViewContext.js.map +7 -0
  5. package/cjs/config/cssClassesConstants.js +41 -13
  6. package/cjs/config/cssClassesConstants.js.map +7 -0
  7. package/cjs/config/useTreeview.js +116 -78
  8. package/cjs/config/useTreeview.js.map +7 -0
  9. package/cjs/index.js +37 -26
  10. package/cjs/index.js.map +7 -0
  11. package/cjs/parts/CheckboxSelectable.js +70 -59
  12. package/cjs/parts/CheckboxSelectable.js.map +7 -0
  13. package/cjs/parts/ChildrenCountDisplayer.js +45 -28
  14. package/cjs/parts/ChildrenCountDisplayer.js.map +7 -0
  15. package/cjs/parts/ExpandCaret.js +85 -83
  16. package/cjs/parts/ExpandCaret.js.map +7 -0
  17. package/cjs/parts/Icon.js +46 -31
  18. package/cjs/parts/Icon.js.map +7 -0
  19. package/cjs/parts/NestingSpace.js +43 -35
  20. package/cjs/parts/NestingSpace.js.map +7 -0
  21. package/cjs/parts/RadioSelectable.js +52 -37
  22. package/cjs/parts/RadioSelectable.js.map +7 -0
  23. package/cjs/parts/TreeItem.js +147 -141
  24. package/cjs/parts/TreeItem.js.map +7 -0
  25. package/cjs/parts/TreeItemText.js +88 -95
  26. package/cjs/parts/TreeItemText.js.map +7 -0
  27. package/cjs/parts/TreeList.js +119 -130
  28. package/cjs/parts/TreeList.js.map +7 -0
  29. package/cjs/plugins/dnd/TreeDndPlugin.js +59 -7
  30. package/cjs/plugins/dnd/TreeDndPlugin.js.map +7 -0
  31. package/cjs/plugins/dnd/index.js +28 -9
  32. package/cjs/plugins/dnd/index.js.map +7 -0
  33. package/cjs/plugins/index.js +34 -21
  34. package/cjs/plugins/index.js.map +7 -0
  35. package/cjs/plugins/roving/TreeRovingPlugin.js +35 -7
  36. package/cjs/plugins/roving/TreeRovingPlugin.js.map +7 -0
  37. package/cjs/plugins/roving/index.js +28 -9
  38. package/cjs/plugins/roving/index.js.map +7 -0
  39. package/cjs/plugins/searchable/SearchableTreePlugin.js +35 -7
  40. package/cjs/plugins/searchable/SearchableTreePlugin.js.map +7 -0
  41. package/cjs/plugins/searchable/index.js +28 -9
  42. package/cjs/plugins/searchable/index.js.map +7 -0
  43. package/cjs/plugins/selectable/SelectablePluginTree.js +35 -7
  44. package/cjs/plugins/selectable/SelectablePluginTree.js.map +7 -0
  45. package/cjs/plugins/selectable/index.js +28 -9
  46. package/cjs/plugins/selectable/index.js.map +7 -0
  47. package/cjs/plugins/toolbar/TreeToolbarPlugin.js +35 -7
  48. package/cjs/plugins/toolbar/TreeToolbarPlugin.js.map +7 -0
  49. package/cjs/plugins/toolbar/index.js +28 -9
  50. package/cjs/plugins/toolbar/index.js.map +7 -0
  51. package/cjs/plugins/tree/TreeDataPlugin.js +35 -7
  52. package/cjs/plugins/tree/TreeDataPlugin.js.map +7 -0
  53. package/cjs/plugins/tree/index.js +28 -9
  54. package/cjs/plugins/tree/index.js.map +7 -0
  55. package/cjs/plugins/virtualization/TreeVirtualizationPlugin.js +35 -7
  56. package/cjs/plugins/virtualization/TreeVirtualizationPlugin.js.map +7 -0
  57. package/cjs/plugins/virtualization/index.js +28 -9
  58. package/cjs/plugins/virtualization/index.js.map +7 -0
  59. package/cjs/react-desc-prop-types.js +82 -54
  60. package/cjs/react-desc-prop-types.js.map +7 -0
  61. package/cjs/related-components/TreeViewSearchBar.js +42 -40
  62. package/cjs/related-components/TreeViewSearchBar.js.map +7 -0
  63. package/cjs/sharedTypes.js +27 -2
  64. package/cjs/sharedTypes.js.map +7 -0
  65. package/cjs/utils/array-helpers.js +35 -11
  66. package/cjs/utils/array-helpers.js.map +7 -0
  67. package/cjs/utils/dnd-helpers.js +146 -0
  68. package/cjs/utils/dnd-helpers.js.map +7 -0
  69. package/cjs/utils/group-expands-helpers.js +86 -59
  70. package/cjs/utils/group-expands-helpers.js.map +7 -0
  71. package/cjs/utils/keyboard-helpers.js +85 -90
  72. package/cjs/utils/keyboard-helpers.js.map +7 -0
  73. package/cjs/utils/object-helpers.js +43 -36
  74. package/cjs/utils/object-helpers.js.map +7 -0
  75. package/cjs/utils/refs-helpers.js +43 -22
  76. package/cjs/utils/refs-helpers.js.map +7 -0
  77. package/cjs/utils/selectable-helper.js +61 -53
  78. package/cjs/utils/selectable-helper.js.map +7 -0
  79. package/cjs/utils/string-helpers.js +35 -7
  80. package/cjs/utils/string-helpers.js.map +7 -0
  81. package/cjs/utils/tree-helpers.js +105 -161
  82. package/cjs/utils/tree-helpers.js.map +7 -0
  83. package/cjs/utils/useDnDHelpers.js +199 -0
  84. package/cjs/utils/useDnDHelpers.js.map +7 -0
  85. package/cjs/utils/useInstanceRefActions.js +54 -43
  86. package/cjs/utils/useInstanceRefActions.js.map +7 -0
  87. package/cjs/utils/useTree.js +76 -80
  88. package/cjs/utils/useTree.js.map +7 -0
  89. package/esm/TreeView.js +18 -16
  90. package/esm/TreeView.js.map +7 -0
  91. package/esm/TreeViewContext.js +32 -31
  92. package/esm/TreeViewContext.js.map +7 -0
  93. package/esm/config/cssClassesConstants.js +12 -6
  94. package/esm/config/cssClassesConstants.js.map +7 -0
  95. package/esm/config/useTreeview.js +73 -56
  96. package/esm/config/useTreeview.js.map +7 -0
  97. package/esm/index.js +8 -9
  98. package/esm/index.js.map +7 -0
  99. package/esm/parts/CheckboxSelectable.js +36 -46
  100. package/esm/parts/CheckboxSelectable.js.map +7 -0
  101. package/esm/parts/ChildrenCountDisplayer.js +16 -20
  102. package/esm/parts/ChildrenCountDisplayer.js.map +7 -0
  103. package/esm/parts/ExpandCaret.js +54 -72
  104. package/esm/parts/ExpandCaret.js.map +7 -0
  105. package/esm/parts/Icon.js +16 -22
  106. package/esm/parts/Icon.js.map +7 -0
  107. package/esm/parts/NestingSpace.js +14 -27
  108. package/esm/parts/NestingSpace.js.map +7 -0
  109. package/esm/parts/RadioSelectable.js +20 -28
  110. package/esm/parts/RadioSelectable.js.map +7 -0
  111. package/esm/parts/TreeItem.js +114 -125
  112. package/esm/parts/TreeItem.js.map +7 -0
  113. package/esm/parts/TreeItemText.js +58 -85
  114. package/esm/parts/TreeItemText.js.map +7 -0
  115. package/esm/parts/TreeList.js +91 -119
  116. package/esm/parts/TreeList.js.map +7 -0
  117. package/esm/plugins/dnd/TreeDndPlugin.js +30 -3
  118. package/esm/plugins/dnd/TreeDndPlugin.js.map +7 -0
  119. package/esm/plugins/dnd/index.js +3 -1
  120. package/esm/plugins/dnd/index.js.map +7 -0
  121. package/esm/plugins/index.js +9 -7
  122. package/esm/plugins/index.js.map +7 -0
  123. package/esm/plugins/roving/TreeRovingPlugin.js +6 -3
  124. package/esm/plugins/roving/TreeRovingPlugin.js.map +7 -0
  125. package/esm/plugins/roving/index.js +3 -1
  126. package/esm/plugins/roving/index.js.map +7 -0
  127. package/esm/plugins/searchable/SearchableTreePlugin.js +6 -3
  128. package/esm/plugins/searchable/SearchableTreePlugin.js.map +7 -0
  129. package/esm/plugins/searchable/index.js +3 -1
  130. package/esm/plugins/searchable/index.js.map +7 -0
  131. package/esm/plugins/selectable/SelectablePluginTree.js +6 -3
  132. package/esm/plugins/selectable/SelectablePluginTree.js.map +7 -0
  133. package/esm/plugins/selectable/index.js +3 -1
  134. package/esm/plugins/selectable/index.js.map +7 -0
  135. package/esm/plugins/toolbar/TreeToolbarPlugin.js +6 -3
  136. package/esm/plugins/toolbar/TreeToolbarPlugin.js.map +7 -0
  137. package/esm/plugins/toolbar/index.js +3 -1
  138. package/esm/plugins/toolbar/index.js.map +7 -0
  139. package/esm/plugins/tree/TreeDataPlugin.js +6 -3
  140. package/esm/plugins/tree/TreeDataPlugin.js.map +7 -0
  141. package/esm/plugins/tree/index.js +3 -1
  142. package/esm/plugins/tree/index.js.map +7 -0
  143. package/esm/plugins/virtualization/TreeVirtualizationPlugin.js +6 -3
  144. package/esm/plugins/virtualization/TreeVirtualizationPlugin.js.map +7 -0
  145. package/esm/plugins/virtualization/index.js +3 -1
  146. package/esm/plugins/virtualization/index.js.map +7 -0
  147. package/esm/react-desc-prop-types.js +47 -44
  148. package/esm/react-desc-prop-types.js.map +7 -0
  149. package/esm/related-components/TreeViewSearchBar.js +13 -32
  150. package/esm/related-components/TreeViewSearchBar.js.map +7 -0
  151. package/esm/sharedTypes.js +2 -1
  152. package/esm/sharedTypes.js.map +7 -0
  153. package/esm/utils/array-helpers.js +6 -6
  154. package/esm/utils/array-helpers.js.map +7 -0
  155. package/esm/utils/dnd-helpers.js +117 -0
  156. package/esm/utils/dnd-helpers.js.map +7 -0
  157. package/esm/utils/group-expands-helpers.js +56 -46
  158. package/esm/utils/group-expands-helpers.js.map +7 -0
  159. package/esm/utils/keyboard-helpers.js +46 -74
  160. package/esm/utils/keyboard-helpers.js.map +7 -0
  161. package/esm/utils/object-helpers.js +14 -31
  162. package/esm/utils/object-helpers.js.map +7 -0
  163. package/esm/utils/refs-helpers.js +15 -19
  164. package/esm/utils/refs-helpers.js.map +7 -0
  165. package/esm/utils/selectable-helper.js +32 -43
  166. package/esm/utils/selectable-helper.js.map +7 -0
  167. package/esm/utils/string-helpers.js +6 -3
  168. package/esm/utils/string-helpers.js.map +7 -0
  169. package/esm/utils/tree-helpers.js +73 -143
  170. package/esm/utils/tree-helpers.js.map +7 -0
  171. package/esm/utils/useDnDHelpers.js +170 -0
  172. package/esm/utils/useDnDHelpers.js.map +7 -0
  173. package/esm/utils/useInstanceRefActions.js +21 -35
  174. package/esm/utils/useInstanceRefActions.js.map +7 -0
  175. package/esm/utils/useTree.js +35 -59
  176. package/esm/utils/useTree.js.map +7 -0
  177. package/package.json +19 -35
  178. package/types/TreeView.d.ts +1 -1
  179. package/types/parts/TreeItem.d.ts +11 -4
  180. package/types/parts/TreeList.d.ts +4 -0
  181. package/types/plugins/dnd/TreeDndPlugin.d.ts +2 -0
  182. package/types/react-desc-prop-types.d.ts +3 -17
  183. package/types/sharedTypes.d.ts +8 -1
  184. package/types/utils/dnd-helpers.d.ts +39 -0
  185. package/types/utils/keyboard-helpers.d.ts +1 -2
  186. package/types/utils/refs-helpers.d.ts +1 -1
  187. package/types/utils/tree-helpers.d.ts +1 -4
  188. package/types/utils/useDnDHelpers.d.ts +26 -0
  189. package/types/utils/useTree.d.ts +0 -1
  190. package/cjs/hoc/DnDTreeContext.js +0 -18
  191. package/cjs/hoc/SortableItemContext.js +0 -21
  192. package/cjs/hoc/WithConditionalDnDContext.js +0 -138
  193. package/cjs/hoc/WithDnDSortableItemContext.js +0 -70
  194. package/cjs/parts/DnDHandle.js +0 -46
  195. package/cjs/parts/DropIndicator.js +0 -75
  196. package/esm/hoc/DnDTreeContext.js +0 -14
  197. package/esm/hoc/SortableItemContext.js +0 -17
  198. package/esm/hoc/WithConditionalDnDContext.js +0 -128
  199. package/esm/hoc/WithDnDSortableItemContext.js +0 -61
  200. package/esm/parts/DnDHandle.js +0 -38
  201. package/esm/parts/DropIndicator.js +0 -68
  202. package/types/hoc/DnDTreeContext.d.ts +0 -14
  203. package/types/hoc/SortableItemContext.d.ts +0 -19
  204. package/types/hoc/WithConditionalDnDContext.d.ts +0 -4
  205. package/types/hoc/WithDnDSortableItemContext.d.ts +0 -4
  206. package/types/parts/DnDHandle.d.ts +0 -6
  207. package/types/parts/DropIndicator.d.ts +0 -10
@@ -1,93 +1,67 @@
1
- import 'core-js/modules/esnext.async-iterator.filter.js';
2
- import 'core-js/modules/esnext.iterator.constructor.js';
3
- import 'core-js/modules/esnext.iterator.filter.js';
4
- import 'core-js/modules/esnext.async-iterator.for-each.js';
5
- import 'core-js/modules/esnext.iterator.for-each.js';
6
- import _defineProperty from '@babel/runtime/helpers/esm/defineProperty';
7
- import 'core-js/modules/web.dom-collections.iterator.js';
8
- import { useMemo, useState, useEffect, useCallback } from 'react';
9
- import TreeModel from 'tree-model';
10
- import { cloneDeep } from 'lodash';
11
- import { enrichNodeModelInPlace, walkVisibles, flattenTreeForDnD } from './tree-helpers.js';
12
- import { updateExpandedState } from './group-expands-helpers.js';
13
-
14
- function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
15
-
16
- function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
1
+ import * as React from "react";
2
+ import { useState, useCallback, useMemo, useEffect } from "react";
3
+ import TreeModel from "tree-model";
4
+ import { cloneDeep } from "lodash";
5
+ import { walkVisibles, enrichNodeModelInPlace } from "./tree-helpers";
6
+ import { updateExpandedState } from "./group-expands-helpers";
17
7
  const useTree = (data, props, states) => {
18
- const {
19
- setExpandedGroups
20
- } = states;
21
- const unfrozenData = useMemo(() => cloneDeep(data), [data]); // convert data into a TreeModel with extra isExpanded prop
22
- // root element type is an exception, children model is based on what the dev passed on
23
- // since root is an excepcion we must typecast
24
-
8
+ const { setExpandedGroups } = states;
9
+ const unfrozenData = useMemo(() => cloneDeep(data), [data]);
25
10
  const tree = useMemo(() => new TreeModel(), []);
26
11
  const [treeData, setTreeData] = useState({
27
- id: '__ds_tree_root',
28
- name: '__root',
12
+ id: "__ds_tree_root",
13
+ name: "__root",
29
14
  isExpanded: true,
30
15
  children: unfrozenData
31
16
  });
32
17
  useEffect(() => {
33
18
  setTreeData({
34
- id: '__ds_tree_root',
35
- name: '__root',
19
+ id: "__ds_tree_root",
20
+ name: "__root",
36
21
  isExpanded: true,
37
22
  children: unfrozenData
38
23
  });
39
- }, [unfrozenData]); // expose a way to rerender the tree
40
- // used for expand functionality
41
-
24
+ }, [unfrozenData]);
42
25
  const [rerenderItems, setRerenderItems] = useState({});
43
26
  const triggerTreeRerender = useCallback(() => {
44
27
  setRerenderItems({});
45
- }, []); // when re-rendering we re-parse the list
46
-
28
+ }, []);
47
29
  const [treeRoot, setTreeRoot] = useState(tree.parse(treeData));
48
30
  useEffect(() => {
49
31
  setTreeRoot(tree.parse(treeData));
50
32
  }, [treeData, rerenderItems, tree]);
51
33
  const [visibleItems, setVisibleItems] = useState([]);
52
- const {
53
- searchQuery,
54
- highlightOnlyQuery,
55
- onVisibleItemsChange,
56
- selection,
57
- expanded,
58
- onExpandChange
59
- } = props;
34
+ const { searchQuery, highlightOnlyQuery, onVisibleItemsChange, selection, expanded, onExpandChange } = props;
60
35
  const updateUserExpandedState = useCallback(() => {
61
36
  updateExpandedState(treeRoot, onExpandChange);
62
- }, [treeRoot, onExpandChange]); // we add missing properties to the received Items
63
- // not the best of the patterns, but it works
64
- // this is where we convert "SimpleItems" to "Items"
65
- // this was done to avoid breaking changes back in v1
66
-
37
+ }, [treeRoot, onExpandChange]);
67
38
  useEffect(() => {
68
39
  const parsedVisibleItems = [];
69
40
  const newExpandedHashMap = {};
70
- const shouldContinueWalking = true; // tree-model ask we return true if we want to continue walking
71
-
72
- treeRoot.walk(node => {
41
+ treeRoot.walk((node) => {
42
+ const shouldContinueWalking = true;
73
43
  enrichNodeModelInPlace(node, searchQuery, selection, expanded);
74
- if (node.model.id && node.model.isGroup && node.model.isExpanded) newExpandedHashMap[node.model.id] = true;
44
+ if (node.model.id && node.model.isGroup && node.model.isExpanded)
45
+ newExpandedHashMap[node.model.id] = true;
75
46
  return shouldContinueWalking;
76
47
  });
77
- walkVisibles(treeRoot, node => {
78
- parsedVisibleItems.push(_objectSpread(_objectSpread({}, node.model), {}, {
79
- node
80
- }));
48
+ walkVisibles(treeRoot, (node) => {
49
+ parsedVisibleItems.push({ ...node.model, node });
81
50
  }, true, highlightOnlyQuery);
82
51
  setVisibleItems(parsedVisibleItems);
83
52
  onVisibleItemsChange(parsedVisibleItems);
84
- setExpandedGroups(newExpandedHashMap); // eslint-disable-next-line react-hooks/exhaustive-deps
85
- }, [treeRoot, rerenderItems, searchQuery, highlightOnlyQuery, selection, expanded, setExpandedGroups // onVisibleItemsChange // evaluate potential performance hit?
53
+ setExpandedGroups(newExpandedHashMap);
54
+ }, [
55
+ treeRoot,
56
+ rerenderItems,
57
+ searchQuery,
58
+ highlightOnlyQuery,
59
+ selection,
60
+ expanded,
61
+ setExpandedGroups
86
62
  ]);
87
- const flattenedItems = useMemo(() => flattenTreeForDnD(data), [data]);
88
63
  return {
89
64
  visibleItems,
90
- flattenedItems,
91
65
  tree,
92
66
  treeRoot,
93
67
  rerenderItems,
@@ -95,5 +69,7 @@ const useTree = (data, props, states) => {
95
69
  updateUserExpandedState
96
70
  };
97
71
  };
98
-
99
- export { useTree };
72
+ export {
73
+ useTree
74
+ };
75
+ //# sourceMappingURL=useTree.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../../scripts/build/transpile/react-shim.js", "../../../src/utils/useTree.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import { useState, useCallback, useMemo, useEffect } from 'react';\nimport TreeModel from 'tree-model';\nimport { cloneDeep } from 'lodash';\n\nimport { walkVisibles, enrichNodeModelInPlace } from './tree-helpers';\nimport type { DSTreeviewT } from '../react-desc-prop-types';\nimport type { DSTreeviewInternalsT } from '../sharedTypes';\nimport { updateExpandedState } from './group-expands-helpers';\n\nexport const useTree = (\n data: DSTreeviewT.SimpleItem[],\n props: DSTreeviewT.Props,\n states: {\n setExpandedGroups: DSTreeviewInternalsT.StateSetter<DSTreeviewT.ExpandedItems>;\n },\n) => {\n const { setExpandedGroups } = states;\n const unfrozenData = useMemo(() => cloneDeep(data), [data]);\n\n // convert data into a TreeModel with extra isExpanded prop\n // root element type is an exception, children model is based on what the dev passed on\n // since root is an excepcion we must typecast\n const tree = useMemo(() => new TreeModel(), []);\n const [treeData, setTreeData] = useState({\n id: '__ds_tree_root',\n name: '__root',\n isExpanded: true,\n children: unfrozenData,\n } as unknown as DSTreeviewT.Item);\n\n useEffect(() => {\n setTreeData({\n id: '__ds_tree_root',\n name: '__root',\n isExpanded: true,\n children: unfrozenData,\n } as unknown as DSTreeviewT.Item);\n }, [unfrozenData]);\n\n // expose a way to rerender the tree\n // used for expand functionality\n const [rerenderItems, setRerenderItems] = useState({});\n const triggerTreeRerender = useCallback(() => {\n setRerenderItems({});\n }, []);\n\n // when re-rendering we re-parse the list\n const [treeRoot, setTreeRoot] = useState(tree.parse(treeData));\n useEffect(() => {\n setTreeRoot(tree.parse(treeData));\n }, [treeData, rerenderItems, tree]);\n\n const [visibleItems, setVisibleItems] = useState<DSTreeviewT.Item[]>([]);\n\n const { searchQuery, highlightOnlyQuery, onVisibleItemsChange, selection, expanded, onExpandChange } = props;\n\n const updateUserExpandedState = useCallback(() => {\n updateExpandedState(treeRoot, onExpandChange);\n }, [treeRoot, onExpandChange]);\n // we add missing properties to the received Items\n // not the best of the patterns, but it works\n // this is where we convert \"SimpleItems\" to \"Items\"\n // this was done to avoid breaking changes back in v1\n useEffect(() => {\n const parsedVisibleItems: DSTreeviewT.Item[] = [];\n const newExpandedHashMap: DSTreeviewT.ExpandedItems = {};\n treeRoot.walk((node) => {\n const shouldContinueWalking = true; // tree-model ask we return true if we want to continue walking\n enrichNodeModelInPlace(node, searchQuery, selection, expanded);\n if (node.model.id && node.model.isGroup && node.model.isExpanded) newExpandedHashMap[node.model.id] = true;\n return shouldContinueWalking;\n });\n\n walkVisibles(\n treeRoot,\n (node) => {\n parsedVisibleItems.push({ ...node.model, node });\n },\n true,\n highlightOnlyQuery,\n );\n setVisibleItems(parsedVisibleItems);\n onVisibleItemsChange(parsedVisibleItems);\n\n setExpandedGroups(newExpandedHashMap);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n treeRoot,\n rerenderItems,\n searchQuery,\n highlightOnlyQuery,\n selection,\n expanded,\n setExpandedGroups,\n // onVisibleItemsChange // evaluate potential performance hit?\n ]);\n\n return {\n visibleItems,\n tree,\n treeRoot,\n rerenderItems,\n triggerTreeRerender,\n updateUserExpandedState,\n };\n};\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AACA;AAEA;AAGA;AAEO,MAAM,UAAU,CACrB,MACA,OACA,WAGG;AACH,QAAM,EAAE,sBAAsB;AAC9B,QAAM,eAAe,QAAQ,MAAM,UAAU,OAAO,CAAC;AAKrD,QAAM,OAAO,QAAQ,MAAM,IAAI,aAAa;AAC5C,QAAM,CAAC,UAAU,eAAe,SAAS;AAAA,IACvC,IAAI;AAAA,IACJ,MAAM;AAAA,IACN,YAAY;AAAA,IACZ,UAAU;AAAA;AAGZ,YAAU,MAAM;AACd,gBAAY;AAAA,MACV,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,YAAY;AAAA,MACZ,UAAU;AAAA;AAAA,KAEX,CAAC;AAIJ,QAAM,CAAC,eAAe,oBAAoB,SAAS;AACnD,QAAM,sBAAsB,YAAY,MAAM;AAC5C,qBAAiB;AAAA,KAChB;AAGH,QAAM,CAAC,UAAU,eAAe,SAAS,KAAK,MAAM;AACpD,YAAU,MAAM;AACd,gBAAY,KAAK,MAAM;AAAA,KACtB,CAAC,UAAU,eAAe;AAE7B,QAAM,CAAC,cAAc,mBAAmB,SAA6B;AAErE,QAAM,EAAE,aAAa,oBAAoB,sBAAsB,WAAW,UAAU,mBAAmB;AAEvG,QAAM,0BAA0B,YAAY,MAAM;AAChD,wBAAoB,UAAU;AAAA,KAC7B,CAAC,UAAU;AAKd,YAAU,MAAM;AACd,UAAM,qBAAyC;AAC/C,UAAM,qBAAgD;AACtD,aAAS,KAAK,CAAC,SAAS;AACtB,YAAM,wBAAwB;AAC9B,6BAAuB,MAAM,aAAa,WAAW;AACrD,UAAI,KAAK,MAAM,MAAM,KAAK,MAAM,WAAW,KAAK,MAAM;AAAY,2BAAmB,KAAK,MAAM,MAAM;AACtG,aAAO;AAAA;AAGT,iBACE,UACA,CAAC,SAAS;AACR,yBAAmB,KAAK,KAAK,KAAK,OAAO;AAAA,OAE3C,MACA;AAEF,oBAAgB;AAChB,yBAAqB;AAErB,sBAAkB;AAAA,KAEjB;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAIF,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AAAA;",
6
+ "names": []
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-treeview",
3
- "version": "2.2.0-next.4",
3
+ "version": "2.3.0-alpha.2",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Tree View",
6
6
  "module": "./esm/index.js",
@@ -19,6 +19,10 @@
19
19
  "import": "./esm/utils/useInstanceRefActions.js",
20
20
  "require": "./cjs/utils/useInstanceRefActions.js"
21
21
  },
22
+ "./utils/useDnDHelpers": {
23
+ "import": "./esm/utils/useDnDHelpers.js",
24
+ "require": "./cjs/utils/useDnDHelpers.js"
25
+ },
22
26
  "./utils/tree-helpers": {
23
27
  "import": "./esm/utils/tree-helpers.js",
24
28
  "require": "./cjs/utils/tree-helpers.js"
@@ -47,6 +51,10 @@
47
51
  "import": "./esm/utils/group-expands-helpers.js",
48
52
  "require": "./cjs/utils/group-expands-helpers.js"
49
53
  },
54
+ "./utils/dnd-helpers": {
55
+ "import": "./esm/utils/dnd-helpers.js",
56
+ "require": "./cjs/utils/dnd-helpers.js"
57
+ },
50
58
  "./utils/array-helpers": {
51
59
  "import": "./esm/utils/array-helpers.js",
52
60
  "require": "./cjs/utils/array-helpers.js"
@@ -159,14 +167,6 @@
159
167
  "import": "./esm/parts/ExpandCaret.js",
160
168
  "require": "./cjs/parts/ExpandCaret.js"
161
169
  },
162
- "./parts/DropIndicator": {
163
- "import": "./esm/parts/DropIndicator.js",
164
- "require": "./cjs/parts/DropIndicator.js"
165
- },
166
- "./parts/DnDHandle": {
167
- "import": "./esm/parts/DnDHandle.js",
168
- "require": "./cjs/parts/DnDHandle.js"
169
- },
170
170
  "./parts/ChildrenCountDisplayer": {
171
171
  "import": "./esm/parts/ChildrenCountDisplayer.js",
172
172
  "require": "./cjs/parts/ChildrenCountDisplayer.js"
@@ -175,22 +175,6 @@
175
175
  "import": "./esm/parts/CheckboxSelectable.js",
176
176
  "require": "./cjs/parts/CheckboxSelectable.js"
177
177
  },
178
- "./hoc/WithDnDSortableItemContext": {
179
- "import": "./esm/hoc/WithDnDSortableItemContext.js",
180
- "require": "./cjs/hoc/WithDnDSortableItemContext.js"
181
- },
182
- "./hoc/WithConditionalDnDContext": {
183
- "import": "./esm/hoc/WithConditionalDnDContext.js",
184
- "require": "./cjs/hoc/WithConditionalDnDContext.js"
185
- },
186
- "./hoc/SortableItemContext": {
187
- "import": "./esm/hoc/SortableItemContext.js",
188
- "require": "./cjs/hoc/SortableItemContext.js"
189
- },
190
- "./hoc/DnDTreeContext": {
191
- "import": "./esm/hoc/DnDTreeContext.js",
192
- "require": "./cjs/hoc/DnDTreeContext.js"
193
- },
194
178
  "./config/useTreeview": {
195
179
  "import": "./esm/config/useTreeview.js",
196
180
  "require": "./cjs/config/useTreeview.js"
@@ -227,16 +211,16 @@
227
211
  "generateSubmodules": true
228
212
  },
229
213
  "dependencies": {
230
- "@elliemae/ds-button": "2.2.0-next.4",
231
- "@elliemae/ds-circular-progress-indicator": "2.2.0-next.4",
232
- "@elliemae/ds-classnames": "2.2.0-next.4",
233
- "@elliemae/ds-drag-and-drop": "2.2.0-next.4",
234
- "@elliemae/ds-form": "2.2.0-next.4",
235
- "@elliemae/ds-icons": "2.2.0-next.4",
236
- "@elliemae/ds-props-helpers": "2.2.0-next.4",
237
- "@elliemae/ds-shared": "2.2.0-next.4",
238
- "@elliemae/ds-truncated-tooltip-text": "2.2.0-next.4",
239
- "@elliemae/ds-utilities": "2.2.0-next.4",
214
+ "@elliemae/ds-button": "2.3.0-alpha.2",
215
+ "@elliemae/ds-circular-progress-indicator": "2.3.0-alpha.2",
216
+ "@elliemae/ds-classnames": "2.3.0-alpha.2",
217
+ "@elliemae/ds-form": "2.3.0-alpha.2",
218
+ "@elliemae/ds-icons": "2.3.0-alpha.2",
219
+ "@elliemae/ds-props-helpers": "2.3.0-alpha.2",
220
+ "@elliemae/ds-shared": "2.3.0-alpha.2",
221
+ "@elliemae/ds-truncated-tooltip-text": "2.3.0-alpha.2",
222
+ "@elliemae/ds-utilities": "2.3.0-alpha.2",
223
+ "@elliemae/react-sortable-hoc": "^1.0.0",
240
224
  "react-desc": "~4.1.3",
241
225
  "react-highlight-words": "~0.17.0",
242
226
  "react-virtual": "~2.3.2",
@@ -6,7 +6,7 @@ export declare namespace TreeView {
6
6
  var propTypes: React.WeakValidationMap<unknown>;
7
7
  }
8
8
  declare const TreeViewWithSchema: {
9
- (props?: DSTreeviewT.Props | undefined): JSX.Element;
9
+ (props?: unknown): JSX.Element;
10
10
  propTypes: unknown;
11
11
  toTypescript: () => import("react-desc").TypescriptSchema;
12
12
  };
@@ -1,3 +1,4 @@
1
+ /// <reference types="node" />
1
2
  import React from 'react';
2
3
  import type { DSTreeviewT } from '../react-desc-prop-types';
3
4
  export declare const TreeListItem: React.ComponentType<React.DetailedHTMLProps<React.LiHTMLAttributes<HTMLLIElement>, HTMLLIElement>>;
@@ -5,13 +6,19 @@ export declare const TreeListItemAddonsWrapper: React.ComponentType<{}>;
5
6
  interface PropsT {
6
7
  item: DSTreeviewT.Item;
7
8
  itemIndex: number;
8
- isDragOverlay?: boolean;
9
- virtualItemRef?: React.RefObject<HTMLLIElement>;
9
+ virtualItemRef: React.RefObject<HTMLLIElement>;
10
10
  itemWrapperStyle?: {
11
11
  [key: string]: unknown;
12
12
  };
13
13
  spaceForNestingLevel?: number;
14
+ onMouseDragOverItem?: (opts: {
15
+ event: React.MouseEvent<HTMLLIElement>;
16
+ item: DSTreeviewT.Item;
17
+ itemIndex: number;
18
+ setIsDraggingOverThis: React.Dispatch<React.SetStateAction<boolean>>;
19
+ openFolderOnHoverTimeout: React.MutableRefObject<NodeJS.Timeout | null>;
20
+ }) => void;
14
21
  }
15
22
  export declare const TreeItem: (props: PropsT) => JSX.Element;
16
- declare const _default: (props: PropsT) => JSX.Element;
17
- export default _default;
23
+ export declare const DragAndDropTreeItem: React.ComponentClass<PropsT & import("@elliemae/react-sortable-hoc").SortableElementProps, any>;
24
+ export {};
@@ -17,4 +17,8 @@ interface PropsT {
17
17
  }) => void;
18
18
  }
19
19
  export declare const TreeList: (props: PropsT) => JSX.Element;
20
+ export declare const DragAndDropTreeList: React.ComponentClass<PropsT & {
21
+ disableAnimation?: boolean | undefined;
22
+ getContainer: (element: React.ReactElement<unknown>) => HTMLElement | Promise<HTMLElement>;
23
+ } & import("@elliemae/react-sortable-hoc").SortableContainerProps, any>;
20
24
  export {};
@@ -1 +1,3 @@
1
+ /// <reference types="react" />
2
+ export declare const TreeDnD: () => JSX.Element;
1
3
  export declare const TreeDndPlugin = "tree-dnd";
@@ -13,7 +13,7 @@ export declare namespace DSTreeviewT {
13
13
  interface SimpleItem {
14
14
  [key: string]: unknown;
15
15
  name: string;
16
- children?: SimpleItem[];
16
+ children: SimpleItem[];
17
17
  id: StringOrNum;
18
18
  }
19
19
  interface Item extends SimpleItem {
@@ -27,19 +27,9 @@ export declare namespace DSTreeviewT {
27
27
  matchesSearchQuery?: boolean;
28
28
  nodeItemRef?: React.RefObject<HTMLLIElement>;
29
29
  model: TreeModel.Node<Item>['model'];
30
- node: TreeModel.Node<Item> & {
31
- parent?: TreeModel.Node<Item>;
32
- };
30
+ node: TreeModel.Node<Item>;
33
31
  nodePath: TreeModel.Node<Item>[];
34
32
  }
35
- interface DndItem {
36
- uid: string;
37
- depth: number;
38
- realIndex: number;
39
- childrenCount: number;
40
- parentId: string | null;
41
- original: SimpleItem;
42
- }
43
33
  interface Actions {
44
34
  toggleExpandAll: (isExpand: boolean) => Promise<DSTreeviewT.Item[]>;
45
35
  scrollTo: DSTreeviewT.ScrollToFunc;
@@ -60,7 +50,6 @@ export declare namespace DSTreeviewT {
60
50
  fluid: boolean;
61
51
  isMultiSelect: boolean;
62
52
  isSingleSelect: boolean;
63
- getIsDropValid: (active: DndItem, over: DndItem, dropIndicatorPosition: 'none' | 'before' | 'after' | 'inside') => boolean;
64
53
  restrictDragAndDrop: boolean;
65
54
  showChildrenAmount: boolean;
66
55
  sortable: boolean;
@@ -73,7 +62,7 @@ export declare namespace DSTreeviewT {
73
62
  item: Item;
74
63
  }) => void;
75
64
  onVisibleItemsChange: (newVisibleItems: Item[]) => void;
76
- onOrderChange: (newData: SimpleItem[], oldData: SimpleItem[], draggedItem: DndItem) => void;
65
+ onOrderChange: (newData: Item[], oldData: Item[], draggedItem: Item) => void;
77
66
  onSelectionChange: (selection: SelectionItems, item: Item, meta: {
78
67
  scrollToItem: ScrollToItemFunc;
79
68
  itemIndex: number;
@@ -135,9 +124,6 @@ export declare const TreeViewPropTypes: {
135
124
  isLoading: {
136
125
  deprecated: import("react-desc").PropTypesDescValidator;
137
126
  };
138
- getIsDropValid: {
139
- deprecated: import("react-desc").PropTypesDescValidator;
140
- };
141
127
  restrictDragAndDrop: {
142
128
  deprecated: import("react-desc").PropTypesDescValidator;
143
129
  };
@@ -19,15 +19,22 @@ export declare namespace DSTreeviewInternalsT {
19
19
  interface CTX {
20
20
  props: DSTreeviewT.Props;
21
21
  visibleItems: DSTreeviewT.Item[];
22
- flattenedItems: DSTreeviewT.DndItem[];
23
22
  withRadioChecks: boolean;
24
23
  withCheckboxChecks: boolean;
25
24
  withDragAndDrop: boolean;
25
+ relativeMouseCord: MouseCoord;
26
+ setRelativeMouseCord: StateSetter<MouseCoord>;
26
27
  triggerTreeRerender: () => void;
27
28
  tree?: TreeModel;
28
29
  treeRoot?: TreeModel.Node<DSTreeviewT.Item>;
29
30
  virtualListHelpers: ReturnType<typeof useVirtual>;
30
31
  virtualListRef?: React.MutableRefObject<HTMLUListElement | undefined>;
32
+ isDragging: boolean;
33
+ setIsDragging: StateSetter<boolean>;
34
+ isKeyboardDragging: boolean;
35
+ setIsKeyboardDragging: StateSetter<boolean>;
36
+ draggedItem: DSTreeviewT.Item | null;
37
+ setDraggedItem: StateSetter<DSTreeviewT.Item | null>;
31
38
  uniqueTreeViewUUID: string;
32
39
  selectedItem: DSTreeviewT.Item | null;
33
40
  setSelectedItem: StateSetter<DSTreeviewT.Item | null>;
@@ -0,0 +1,39 @@
1
+ import type { DSTreeviewT } from '../react-desc-prop-types';
2
+ import type { DSTreeviewInternalsT } from '../sharedTypes';
3
+ interface MetaInfoT {
4
+ isBefore: boolean;
5
+ isAfter: boolean;
6
+ draggedItem: DSTreeviewT.Item;
7
+ overItem: DSTreeviewT.Item;
8
+ }
9
+ interface KinshipT {
10
+ newParentNode: DSTreeviewT.Item['node'];
11
+ newNestedIndex: number;
12
+ }
13
+ export declare const keyCodes: {
14
+ lift: number[];
15
+ drop: number[];
16
+ cancel: number[];
17
+ up: number[];
18
+ down: number[];
19
+ };
20
+ export declare const sameParentAsHoverItemDrop: ({ isBefore, isAfter, draggedItem, overItem, movementDirection, }: MetaInfoT & {
21
+ movementDirection: DSTreeviewInternalsT.DnDMovementDirectionT;
22
+ }) => {
23
+ newNestedIndex: number;
24
+ newParentNode: import("tree-model/types").Node<DSTreeviewT.Item>;
25
+ };
26
+ export declare const inferHoverItemKinshipDrop: ({ isBefore, isAfter, draggedItem, overItem, movementDirection, }: MetaInfoT & {
27
+ movementDirection: DSTreeviewInternalsT.DnDMovementDirectionT;
28
+ }) => {
29
+ newNestedIndex: number;
30
+ newParentNode: import("tree-model/types").Node<DSTreeviewT.Item>;
31
+ };
32
+ export declare const isDropValid: ({ isBefore, isAfter, draggedItem, overItem, restrictDragAndDrop, }: MetaInfoT & {
33
+ restrictDragAndDrop: boolean;
34
+ }) => boolean;
35
+ export declare const inferKeyboardKinshipDrop: ({ items, newIndex, }: {
36
+ items: DSTreeviewT.Item[];
37
+ newIndex: number;
38
+ }) => Partial<KinshipT>;
39
+ export {};
@@ -1,6 +1,5 @@
1
1
  import type { DSTreeviewT } from '../react-desc-prop-types';
2
2
  import type { DSTreeviewInternalsT } from '../sharedTypes';
3
- import { SortableItemContextType } from '../hoc/SortableItemContext';
4
- export declare const useOnItemKeyDown: (item: DSTreeviewT.Item, draggableProps: SortableItemContextType['draggableProps']) => (e: React.KeyboardEvent<HTMLLIElement>) => void;
3
+ export declare const useOnItemKeyDown: (item: DSTreeviewT.Item) => (e: React.KeyboardEvent<HTMLLIElement>) => void;
5
4
  export declare const useGlobalKeyboardListener: (func: (e: KeyboardEvent) => void) => void;
6
5
  export declare const useGlobalToggleAllExpandShortcut: (treeRoot: DSTreeviewT.Item['node'], triggerTreeRerender: () => void, setLatestToggledItem: DSTreeviewInternalsT.CTX['setLatestToggledItem'], updateUserExpandedState: DSTreeviewInternalsT.CTX['updateUserExpandedState']) => void;
@@ -1,4 +1,4 @@
1
1
  /// <reference types="react" />
2
- declare type GenericMergeableRef = null | undefined | React.MutableRefObject<unknown> | ((ref: HTMLElement) => void) | false;
2
+ declare type GenericMergeableRef = null | undefined | React.MutableRefObject<unknown> | ((ref: HTMLElement) => void);
3
3
  export declare const setMultipleRefs: (...refs: GenericMergeableRef[]) => (ref: HTMLElement) => void;
4
4
  export {};
@@ -7,9 +7,7 @@ export declare const walkAllNodeChildren: (node: DSTreeviewT.Item['node'], callb
7
7
  export declare const getNodeById: (treeRoot: DSTreeviewT.Item['node'], id: DSTreeviewT.StringOrNum) => TreeModel.Node<DSTreeviewT.Item>;
8
8
  export declare const cloneNode: (tree: TreeModel, node: DSTreeviewT.Item) => TreeModel.Node<DSTreeviewT.Item>;
9
9
  export declare const itemsShareSameParent: (items?: DSTreeviewT.Item[]) => boolean;
10
- export declare const getItemsParentNode: (items?: DSTreeviewT.Item[], skipSameParentCheck?: boolean) => TreeModel.Node<DSTreeviewT.Item> & {
11
- parent?: TreeModel.Node<DSTreeviewT.Item> | undefined;
12
- };
10
+ export declare const getItemsParentNode: (items?: DSTreeviewT.Item[], skipSameParentCheck?: boolean) => TreeModel.Node<DSTreeviewT.Item>;
13
11
  export declare const getNodeMatchesSearchQuery: (node: DSTreeviewT.Item['node'], searchQuery?: string) => boolean;
14
12
  export declare const getChildrenMatchesSearchQuery: (parentNode: DSTreeviewT.Item['node'], searchQuery?: string) => boolean;
15
13
  /**
@@ -24,5 +22,4 @@ export declare const getChildrenMatchesSearchQuery: (parentNode: DSTreeviewT.Ite
24
22
  */
25
23
  export declare const enrichNodeModelInPlace: (node: TreeModel.Node<DSTreeviewT.SimpleItem>, searchQuery?: string, selection?: DSTreeviewT.SelectionItems | null, expanded?: DSTreeviewT.ExpandedItems | null) => void;
26
24
  export declare const focusItem: (item: DSTreeviewT.Item | null) => void;
27
- export declare const flattenTreeForDnD: (data: DSTreeviewT.SimpleItem[], shouldDescend?: (datum: DSTreeviewT.SimpleItem) => boolean) => DSTreeviewT.DndItem[];
28
25
  export {};
@@ -0,0 +1,26 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="mocha" />
3
+ /// <reference types="webpack-env" />
4
+ /// <reference types="styled-components" />
5
+ import React from 'react';
6
+ import type { DSTreeviewT } from '../react-desc-prop-types';
7
+ import type { DSTreeviewInternalsT } from '../sharedTypes';
8
+ export declare const useDnDHelpers: () => {
9
+ updateBeforeSortStart: (beforeStartArgs: {
10
+ index: number;
11
+ isKeySorting: boolean;
12
+ }) => Promise<unknown>;
13
+ onSortStart: () => void;
14
+ onSortEnd: ({ oldIndex, newIndex, isKeySorting }: {
15
+ oldIndex: number;
16
+ newIndex: number;
17
+ isKeySorting: boolean;
18
+ }) => void;
19
+ onMouseDragOverItem: ({ event, item, itemIndex, setIsDraggingOverThis, openFolderOnHoverTimeout, }: {
20
+ event: React.MouseEvent<HTMLLIElement>;
21
+ item: DSTreeviewT.Item;
22
+ itemIndex: number;
23
+ setIsDraggingOverThis: DSTreeviewInternalsT.StateSetter<boolean>;
24
+ openFolderOnHoverTimeout: React.MutableRefObject<NodeJS.Timeout | null>;
25
+ }) => void;
26
+ };
@@ -5,7 +5,6 @@ export declare const useTree: (data: DSTreeviewT.SimpleItem[], props: DSTreeview
5
5
  setExpandedGroups: DSTreeviewInternalsT.StateSetter<DSTreeviewT.ExpandedItems>;
6
6
  }) => {
7
7
  visibleItems: DSTreeviewT.Item[];
8
- flattenedItems: DSTreeviewT.DndItem[];
9
8
  tree: TreeModel;
10
9
  treeRoot: TreeModel.Node<DSTreeviewT.Item>;
11
10
  rerenderItems: {};
@@ -1,18 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var React = require('react');
6
- var SortableItemContext = require('./SortableItemContext.js');
7
-
8
- const DnDTreeContext = /*#__PURE__*/React.createContext({
9
- depth: undefined,
10
- activeIndex: undefined,
11
- visibleItems: undefined,
12
- dropIndicatorPosition: SortableItemContext.DropIndicatorPosition.None,
13
- lastActiveId: undefined,
14
- setLastActiveId: undefined,
15
- isDropValid: false
16
- });
17
-
18
- exports.DnDTreeContext = DnDTreeContext;
@@ -1,21 +0,0 @@
1
- 'use strict';
2
-
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- var React = require('react');
6
-
7
- exports.DropIndicatorPosition = void 0;
8
-
9
- (function (DropIndicatorPosition) {
10
- DropIndicatorPosition[DropIndicatorPosition["None"] = 0] = "None";
11
- DropIndicatorPosition[DropIndicatorPosition["Before"] = 1] = "Before";
12
- DropIndicatorPosition[DropIndicatorPosition["After"] = 2] = "After";
13
- DropIndicatorPosition[DropIndicatorPosition["Inside"] = 3] = "Inside";
14
- })(exports.DropIndicatorPosition || (exports.DropIndicatorPosition = {}));
15
-
16
- /** Context for cross component communication */
17
- const SortableItemContext = /*#__PURE__*/React.createContext({
18
- draggableProps: false
19
- });
20
-
21
- exports.SortableItemContext = SortableItemContext;