@headless-tree/core 1.2.1 → 1.3.0

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 (189) hide show
  1. package/CHANGELOG.md +19 -0
  2. package/dist/index.d.mts +577 -0
  3. package/dist/index.d.ts +577 -0
  4. package/dist/index.js +2321 -0
  5. package/dist/index.mjs +2276 -0
  6. package/package.json +18 -10
  7. package/src/core/create-tree.ts +26 -15
  8. package/src/features/async-data-loader/feature.ts +5 -0
  9. package/src/features/async-data-loader/types.ts +2 -0
  10. package/src/features/checkboxes/checkboxes.spec.ts +20 -5
  11. package/src/features/checkboxes/feature.ts +31 -16
  12. package/src/features/checkboxes/types.ts +1 -0
  13. package/src/features/drag-and-drop/drag-and-drop.spec.ts +11 -2
  14. package/src/features/drag-and-drop/feature.ts +51 -16
  15. package/src/features/drag-and-drop/types.ts +17 -0
  16. package/src/features/keyboard-drag-and-drop/feature.ts +8 -1
  17. package/src/features/keyboard-drag-and-drop/keyboard-drag-and-drop.spec.ts +34 -3
  18. package/src/features/main/types.ts +0 -2
  19. package/src/features/sync-data-loader/feature.ts +5 -1
  20. package/src/features/tree/feature.ts +4 -3
  21. package/src/features/tree/tree.spec.ts +14 -4
  22. package/src/test-utils/test-tree-do.ts +2 -0
  23. package/src/test-utils/test-tree.ts +1 -0
  24. package/tsconfig.json +1 -4
  25. package/vitest.config.ts +3 -1
  26. package/lib/cjs/core/build-proxified-instance.d.ts +0 -2
  27. package/lib/cjs/core/build-proxified-instance.js +0 -58
  28. package/lib/cjs/core/build-static-instance.d.ts +0 -2
  29. package/lib/cjs/core/build-static-instance.js +0 -26
  30. package/lib/cjs/core/create-tree.d.ts +0 -2
  31. package/lib/cjs/core/create-tree.js +0 -191
  32. package/lib/cjs/features/async-data-loader/feature.d.ts +0 -2
  33. package/lib/cjs/features/async-data-loader/feature.js +0 -135
  34. package/lib/cjs/features/async-data-loader/types.d.ts +0 -47
  35. package/lib/cjs/features/async-data-loader/types.js +0 -2
  36. package/lib/cjs/features/checkboxes/feature.d.ts +0 -2
  37. package/lib/cjs/features/checkboxes/feature.js +0 -94
  38. package/lib/cjs/features/checkboxes/types.d.ts +0 -26
  39. package/lib/cjs/features/checkboxes/types.js +0 -9
  40. package/lib/cjs/features/drag-and-drop/feature.d.ts +0 -2
  41. package/lib/cjs/features/drag-and-drop/feature.js +0 -205
  42. package/lib/cjs/features/drag-and-drop/types.d.ts +0 -71
  43. package/lib/cjs/features/drag-and-drop/types.js +0 -9
  44. package/lib/cjs/features/drag-and-drop/utils.d.ts +0 -27
  45. package/lib/cjs/features/drag-and-drop/utils.js +0 -182
  46. package/lib/cjs/features/expand-all/feature.d.ts +0 -2
  47. package/lib/cjs/features/expand-all/feature.js +0 -70
  48. package/lib/cjs/features/expand-all/types.d.ts +0 -19
  49. package/lib/cjs/features/expand-all/types.js +0 -2
  50. package/lib/cjs/features/hotkeys-core/feature.d.ts +0 -2
  51. package/lib/cjs/features/hotkeys-core/feature.js +0 -107
  52. package/lib/cjs/features/hotkeys-core/types.d.ts +0 -27
  53. package/lib/cjs/features/hotkeys-core/types.js +0 -2
  54. package/lib/cjs/features/keyboard-drag-and-drop/feature.d.ts +0 -2
  55. package/lib/cjs/features/keyboard-drag-and-drop/feature.js +0 -206
  56. package/lib/cjs/features/keyboard-drag-and-drop/types.d.ts +0 -27
  57. package/lib/cjs/features/keyboard-drag-and-drop/types.js +0 -11
  58. package/lib/cjs/features/main/types.d.ts +0 -47
  59. package/lib/cjs/features/main/types.js +0 -2
  60. package/lib/cjs/features/prop-memoization/feature.d.ts +0 -2
  61. package/lib/cjs/features/prop-memoization/feature.js +0 -70
  62. package/lib/cjs/features/prop-memoization/types.d.ts +0 -15
  63. package/lib/cjs/features/prop-memoization/types.js +0 -2
  64. package/lib/cjs/features/renaming/feature.d.ts +0 -2
  65. package/lib/cjs/features/renaming/feature.js +0 -86
  66. package/lib/cjs/features/renaming/types.d.ts +0 -27
  67. package/lib/cjs/features/renaming/types.js +0 -2
  68. package/lib/cjs/features/search/feature.d.ts +0 -2
  69. package/lib/cjs/features/search/feature.js +0 -119
  70. package/lib/cjs/features/search/types.d.ts +0 -32
  71. package/lib/cjs/features/search/types.js +0 -2
  72. package/lib/cjs/features/selection/feature.d.ts +0 -2
  73. package/lib/cjs/features/selection/feature.js +0 -132
  74. package/lib/cjs/features/selection/types.d.ts +0 -21
  75. package/lib/cjs/features/selection/types.js +0 -2
  76. package/lib/cjs/features/sync-data-loader/feature.d.ts +0 -2
  77. package/lib/cjs/features/sync-data-loader/feature.js +0 -49
  78. package/lib/cjs/features/sync-data-loader/types.d.ts +0 -28
  79. package/lib/cjs/features/sync-data-loader/types.js +0 -2
  80. package/lib/cjs/features/tree/feature.d.ts +0 -2
  81. package/lib/cjs/features/tree/feature.js +0 -244
  82. package/lib/cjs/features/tree/types.d.ts +0 -63
  83. package/lib/cjs/features/tree/types.js +0 -2
  84. package/lib/cjs/index.d.ts +0 -33
  85. package/lib/cjs/index.js +0 -51
  86. package/lib/cjs/mddocs-entry.d.ts +0 -121
  87. package/lib/cjs/mddocs-entry.js +0 -17
  88. package/lib/cjs/test-utils/test-tree-do.d.ts +0 -23
  89. package/lib/cjs/test-utils/test-tree-do.js +0 -112
  90. package/lib/cjs/test-utils/test-tree-expect.d.ts +0 -17
  91. package/lib/cjs/test-utils/test-tree-expect.js +0 -66
  92. package/lib/cjs/test-utils/test-tree.d.ts +0 -48
  93. package/lib/cjs/test-utils/test-tree.js +0 -207
  94. package/lib/cjs/types/core.d.ts +0 -84
  95. package/lib/cjs/types/core.js +0 -2
  96. package/lib/cjs/types/deep-merge.d.ts +0 -13
  97. package/lib/cjs/types/deep-merge.js +0 -2
  98. package/lib/cjs/utilities/create-on-drop-handler.d.ts +0 -3
  99. package/lib/cjs/utilities/create-on-drop-handler.js +0 -20
  100. package/lib/cjs/utilities/errors.d.ts +0 -2
  101. package/lib/cjs/utilities/errors.js +0 -9
  102. package/lib/cjs/utilities/insert-items-at-target.d.ts +0 -3
  103. package/lib/cjs/utilities/insert-items-at-target.js +0 -40
  104. package/lib/cjs/utilities/remove-items-from-parents.d.ts +0 -2
  105. package/lib/cjs/utilities/remove-items-from-parents.js +0 -32
  106. package/lib/cjs/utils.d.ts +0 -6
  107. package/lib/cjs/utils.js +0 -53
  108. package/lib/esm/core/build-proxified-instance.d.ts +0 -2
  109. package/lib/esm/core/build-proxified-instance.js +0 -54
  110. package/lib/esm/core/build-static-instance.d.ts +0 -2
  111. package/lib/esm/core/build-static-instance.js +0 -22
  112. package/lib/esm/core/create-tree.d.ts +0 -2
  113. package/lib/esm/core/create-tree.js +0 -187
  114. package/lib/esm/features/async-data-loader/feature.d.ts +0 -2
  115. package/lib/esm/features/async-data-loader/feature.js +0 -132
  116. package/lib/esm/features/async-data-loader/types.d.ts +0 -47
  117. package/lib/esm/features/async-data-loader/types.js +0 -1
  118. package/lib/esm/features/checkboxes/feature.d.ts +0 -2
  119. package/lib/esm/features/checkboxes/feature.js +0 -91
  120. package/lib/esm/features/checkboxes/types.d.ts +0 -26
  121. package/lib/esm/features/checkboxes/types.js +0 -6
  122. package/lib/esm/features/drag-and-drop/feature.d.ts +0 -2
  123. package/lib/esm/features/drag-and-drop/feature.js +0 -202
  124. package/lib/esm/features/drag-and-drop/types.d.ts +0 -71
  125. package/lib/esm/features/drag-and-drop/types.js +0 -6
  126. package/lib/esm/features/drag-and-drop/utils.d.ts +0 -27
  127. package/lib/esm/features/drag-and-drop/utils.js +0 -172
  128. package/lib/esm/features/expand-all/feature.d.ts +0 -2
  129. package/lib/esm/features/expand-all/feature.js +0 -67
  130. package/lib/esm/features/expand-all/types.d.ts +0 -19
  131. package/lib/esm/features/expand-all/types.js +0 -1
  132. package/lib/esm/features/hotkeys-core/feature.d.ts +0 -2
  133. package/lib/esm/features/hotkeys-core/feature.js +0 -104
  134. package/lib/esm/features/hotkeys-core/types.d.ts +0 -27
  135. package/lib/esm/features/hotkeys-core/types.js +0 -1
  136. package/lib/esm/features/keyboard-drag-and-drop/feature.d.ts +0 -2
  137. package/lib/esm/features/keyboard-drag-and-drop/feature.js +0 -203
  138. package/lib/esm/features/keyboard-drag-and-drop/types.d.ts +0 -27
  139. package/lib/esm/features/keyboard-drag-and-drop/types.js +0 -8
  140. package/lib/esm/features/main/types.d.ts +0 -47
  141. package/lib/esm/features/main/types.js +0 -1
  142. package/lib/esm/features/prop-memoization/feature.d.ts +0 -2
  143. package/lib/esm/features/prop-memoization/feature.js +0 -67
  144. package/lib/esm/features/prop-memoization/types.d.ts +0 -15
  145. package/lib/esm/features/prop-memoization/types.js +0 -1
  146. package/lib/esm/features/renaming/feature.d.ts +0 -2
  147. package/lib/esm/features/renaming/feature.js +0 -83
  148. package/lib/esm/features/renaming/types.d.ts +0 -27
  149. package/lib/esm/features/renaming/types.js +0 -1
  150. package/lib/esm/features/search/feature.d.ts +0 -2
  151. package/lib/esm/features/search/feature.js +0 -116
  152. package/lib/esm/features/search/types.d.ts +0 -32
  153. package/lib/esm/features/search/types.js +0 -1
  154. package/lib/esm/features/selection/feature.d.ts +0 -2
  155. package/lib/esm/features/selection/feature.js +0 -129
  156. package/lib/esm/features/selection/types.d.ts +0 -21
  157. package/lib/esm/features/selection/types.js +0 -1
  158. package/lib/esm/features/sync-data-loader/feature.d.ts +0 -2
  159. package/lib/esm/features/sync-data-loader/feature.js +0 -46
  160. package/lib/esm/features/sync-data-loader/types.d.ts +0 -28
  161. package/lib/esm/features/sync-data-loader/types.js +0 -1
  162. package/lib/esm/features/tree/feature.d.ts +0 -2
  163. package/lib/esm/features/tree/feature.js +0 -241
  164. package/lib/esm/features/tree/types.d.ts +0 -63
  165. package/lib/esm/features/tree/types.js +0 -1
  166. package/lib/esm/index.d.ts +0 -33
  167. package/lib/esm/index.js +0 -32
  168. package/lib/esm/mddocs-entry.d.ts +0 -121
  169. package/lib/esm/mddocs-entry.js +0 -1
  170. package/lib/esm/test-utils/test-tree-do.d.ts +0 -23
  171. package/lib/esm/test-utils/test-tree-do.js +0 -108
  172. package/lib/esm/test-utils/test-tree-expect.d.ts +0 -17
  173. package/lib/esm/test-utils/test-tree-expect.js +0 -62
  174. package/lib/esm/test-utils/test-tree.d.ts +0 -48
  175. package/lib/esm/test-utils/test-tree.js +0 -203
  176. package/lib/esm/types/core.d.ts +0 -84
  177. package/lib/esm/types/core.js +0 -1
  178. package/lib/esm/types/deep-merge.d.ts +0 -13
  179. package/lib/esm/types/deep-merge.js +0 -1
  180. package/lib/esm/utilities/create-on-drop-handler.d.ts +0 -3
  181. package/lib/esm/utilities/create-on-drop-handler.js +0 -16
  182. package/lib/esm/utilities/errors.d.ts +0 -2
  183. package/lib/esm/utilities/errors.js +0 -4
  184. package/lib/esm/utilities/insert-items-at-target.d.ts +0 -3
  185. package/lib/esm/utilities/insert-items-at-target.js +0 -36
  186. package/lib/esm/utilities/remove-items-from-parents.d.ts +0 -2
  187. package/lib/esm/utilities/remove-items-from-parents.js +0 -28
  188. package/lib/esm/utils.d.ts +0 -6
  189. package/lib/esm/utils.js +0 -46
@@ -1,26 +0,0 @@
1
- import { SetStateFn } from "../../types/core";
2
- export declare enum CheckedState {
3
- Checked = "checked",
4
- Unchecked = "unchecked",
5
- Indeterminate = "indeterminate"
6
- }
7
- export type CheckboxesFeatureDef<T> = {
8
- state: {
9
- checkedItems: string[];
10
- };
11
- config: {
12
- setCheckedItems?: SetStateFn<string[]>;
13
- canCheckFolders?: boolean;
14
- };
15
- treeInstance: {
16
- setCheckedItems: (checkedItems: string[]) => void;
17
- };
18
- itemInstance: {
19
- setChecked: () => void;
20
- setUnchecked: () => void;
21
- toggleCheckedState: () => void;
22
- getCheckedState: () => CheckedState;
23
- getCheckboxProps: () => Record<string, any>;
24
- };
25
- hotkeys: never;
26
- };
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.CheckedState = void 0;
4
- var CheckedState;
5
- (function (CheckedState) {
6
- CheckedState["Checked"] = "checked";
7
- CheckedState["Unchecked"] = "unchecked";
8
- CheckedState["Indeterminate"] = "indeterminate";
9
- })(CheckedState || (exports.CheckedState = CheckedState = {}));
@@ -1,2 +0,0 @@
1
- import { FeatureImplementation } from "../../types/core";
2
- export declare const dragAndDropFeature: FeatureImplementation;
@@ -1,205 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.dragAndDropFeature = void 0;
13
- const utils_1 = require("./utils");
14
- const utils_2 = require("../../utils");
15
- exports.dragAndDropFeature = {
16
- key: "drag-and-drop",
17
- deps: ["selection"],
18
- getDefaultConfig: (defaultConfig, tree) => (Object.assign({ canDrop: (_, target) => target.item.isFolder(), canDropForeignDragObject: () => false, setDndState: (0, utils_2.makeStateUpdater)("dnd", tree), canReorder: true }, defaultConfig)),
19
- stateHandlerNames: {
20
- dnd: "setDndState",
21
- },
22
- treeInstance: {
23
- getDragTarget: ({ tree }) => {
24
- var _a, _b;
25
- return (_b = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.dragTarget) !== null && _b !== void 0 ? _b : null;
26
- },
27
- getDragLineData: ({ tree }) => {
28
- var _a, _b, _c, _d, _e, _f;
29
- const target = tree.getDragTarget();
30
- const indent = ((_a = target === null || target === void 0 ? void 0 : target.item.getItemMeta().level) !== null && _a !== void 0 ? _a : 0) + 1;
31
- const treeBb = (_b = tree.getElement()) === null || _b === void 0 ? void 0 : _b.getBoundingClientRect();
32
- if (!target || !treeBb || !(0, utils_1.isOrderedDragTarget)(target))
33
- return null;
34
- const leftOffset = target.dragLineLevel * ((_c = tree.getConfig().indent) !== null && _c !== void 0 ? _c : 1);
35
- const targetItem = tree.getItems()[target.dragLineIndex];
36
- if (!targetItem) {
37
- const bb = (_e = (_d = tree
38
- .getItems()[target.dragLineIndex - 1]) === null || _d === void 0 ? void 0 : _d.getElement()) === null || _e === void 0 ? void 0 : _e.getBoundingClientRect();
39
- if (bb) {
40
- return {
41
- indent,
42
- top: bb.bottom - treeBb.top,
43
- left: bb.left + leftOffset - treeBb.left,
44
- width: bb.width - leftOffset,
45
- };
46
- }
47
- }
48
- const bb = (_f = targetItem.getElement()) === null || _f === void 0 ? void 0 : _f.getBoundingClientRect();
49
- if (bb) {
50
- return {
51
- indent,
52
- top: bb.top - treeBb.top,
53
- left: bb.left + leftOffset - treeBb.left,
54
- width: bb.width - leftOffset,
55
- };
56
- }
57
- return null;
58
- },
59
- getDragLineStyle: ({ tree }, topOffset = -1, leftOffset = -8) => {
60
- const dragLine = tree.getDragLineData();
61
- return dragLine
62
- ? {
63
- position: "absolute",
64
- top: `${dragLine.top + topOffset}px`,
65
- left: `${dragLine.left + leftOffset}px`,
66
- width: `${dragLine.width - leftOffset}px`,
67
- pointerEvents: "none", // important to prevent capturing drag events
68
- }
69
- : { display: "none" };
70
- },
71
- getContainerProps: ({ prev, tree }, treeLabel) => {
72
- const prevProps = prev === null || prev === void 0 ? void 0 : prev(treeLabel);
73
- return Object.assign(Object.assign({}, prevProps), { onDragOver: (e) => {
74
- e.preventDefault();
75
- }, onDrop: (e) => __awaiter(void 0, void 0, void 0, function* () {
76
- var _a, _b, _c;
77
- // TODO merge implementation with itemInstance.onDrop
78
- const dataRef = tree.getDataRef();
79
- const target = { item: tree.getRootItem() };
80
- if (!(0, utils_1.canDrop)(e.dataTransfer, target, tree)) {
81
- return;
82
- }
83
- e.preventDefault();
84
- const config = tree.getConfig();
85
- const draggedItems = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems;
86
- dataRef.current.lastDragCode = undefined;
87
- tree.applySubStateUpdate("dnd", null);
88
- if (draggedItems) {
89
- yield ((_b = config.onDrop) === null || _b === void 0 ? void 0 : _b.call(config, draggedItems, target));
90
- }
91
- else if (e.dataTransfer) {
92
- yield ((_c = config.onDropForeignDragObject) === null || _c === void 0 ? void 0 : _c.call(config, e.dataTransfer, target));
93
- }
94
- }), style: Object.assign(Object.assign({}, prevProps === null || prevProps === void 0 ? void 0 : prevProps.style), { position: "relative" }) });
95
- },
96
- },
97
- itemInstance: {
98
- getProps: ({ tree, item, prev }) => (Object.assign(Object.assign({}, prev === null || prev === void 0 ? void 0 : prev()), { draggable: true, onDragEnter: (e) => e.preventDefault(), onDragStart: (e) => {
99
- var _a, _b, _c, _d;
100
- const selectedItems = tree.getSelectedItems();
101
- const items = selectedItems.includes(item) ? selectedItems : [item];
102
- const config = tree.getConfig();
103
- if (!selectedItems.includes(item)) {
104
- tree.setSelectedItems([item.getItemMeta().itemId]);
105
- }
106
- if (!((_b = (_a = config.canDrag) === null || _a === void 0 ? void 0 : _a.call(config, items)) !== null && _b !== void 0 ? _b : true)) {
107
- e.preventDefault();
108
- return;
109
- }
110
- if (config.setDragImage) {
111
- const { imgElement, xOffset, yOffset } = config.setDragImage(items);
112
- (_c = e.dataTransfer) === null || _c === void 0 ? void 0 : _c.setDragImage(imgElement, xOffset !== null && xOffset !== void 0 ? xOffset : 0, yOffset !== null && yOffset !== void 0 ? yOffset : 0);
113
- }
114
- if (config.createForeignDragObject) {
115
- const { format, data } = config.createForeignDragObject(items);
116
- (_d = e.dataTransfer) === null || _d === void 0 ? void 0 : _d.setData(format, data);
117
- }
118
- tree.applySubStateUpdate("dnd", {
119
- draggedItems: items,
120
- draggingOverItem: tree.getFocusedItem(),
121
- });
122
- }, onDragOver: (e) => {
123
- var _a, _b, _c;
124
- const dataRef = tree.getDataRef();
125
- const nextDragCode = (0, utils_1.getDragCode)(e, item, tree);
126
- if (nextDragCode === dataRef.current.lastDragCode) {
127
- if (dataRef.current.lastAllowDrop) {
128
- e.preventDefault();
129
- }
130
- return;
131
- }
132
- dataRef.current.lastDragCode = nextDragCode;
133
- const target = (0, utils_1.getDragTarget)(e, item, tree);
134
- if (!((_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems) &&
135
- (!e.dataTransfer ||
136
- !((_c = (_b = tree
137
- .getConfig()).canDropForeignDragObject) === null || _c === void 0 ? void 0 : _c.call(_b, e.dataTransfer, target)))) {
138
- dataRef.current.lastAllowDrop = false;
139
- return;
140
- }
141
- if (!(0, utils_1.canDrop)(e.dataTransfer, target, tree)) {
142
- dataRef.current.lastAllowDrop = false;
143
- return;
144
- }
145
- tree.applySubStateUpdate("dnd", (state) => (Object.assign(Object.assign({}, state), { dragTarget: target, draggingOverItem: item })));
146
- dataRef.current.lastAllowDrop = true;
147
- e.preventDefault();
148
- }, onDragLeave: () => {
149
- const dataRef = tree.getDataRef();
150
- dataRef.current.lastDragCode = "no-drag";
151
- tree.applySubStateUpdate("dnd", (state) => (Object.assign(Object.assign({}, state), { draggingOverItem: undefined, dragTarget: undefined })));
152
- }, onDragEnd: (e) => {
153
- var _a, _b, _c, _d;
154
- const draggedItems = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems;
155
- tree.applySubStateUpdate("dnd", null);
156
- if (((_b = e.dataTransfer) === null || _b === void 0 ? void 0 : _b.dropEffect) === "none" || !draggedItems) {
157
- return;
158
- }
159
- (_d = (_c = tree.getConfig()).onCompleteForeignDrop) === null || _d === void 0 ? void 0 : _d.call(_c, draggedItems);
160
- }, onDrop: (e) => __awaiter(void 0, void 0, void 0, function* () {
161
- var _a, _b, _c;
162
- e.stopPropagation();
163
- const dataRef = tree.getDataRef();
164
- const target = (0, utils_1.getDragTarget)(e, item, tree);
165
- if (!(0, utils_1.canDrop)(e.dataTransfer, target, tree)) {
166
- return;
167
- }
168
- e.preventDefault();
169
- const config = tree.getConfig();
170
- const draggedItems = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems;
171
- dataRef.current.lastDragCode = undefined;
172
- tree.applySubStateUpdate("dnd", null);
173
- if (draggedItems) {
174
- yield ((_b = config.onDrop) === null || _b === void 0 ? void 0 : _b.call(config, draggedItems, target));
175
- }
176
- else if (e.dataTransfer) {
177
- yield ((_c = config.onDropForeignDragObject) === null || _c === void 0 ? void 0 : _c.call(config, e.dataTransfer, target));
178
- }
179
- }) })),
180
- isDragTarget: ({ tree, item }) => {
181
- const target = tree.getDragTarget();
182
- return target ? target.item.getId() === item.getId() : false;
183
- },
184
- isDragTargetAbove: ({ tree, item }) => {
185
- const target = tree.getDragTarget();
186
- if (!target ||
187
- !(0, utils_1.isOrderedDragTarget)(target) ||
188
- target.item !== item.getParent())
189
- return false;
190
- return target.childIndex === item.getItemMeta().posInSet;
191
- },
192
- isDragTargetBelow: ({ tree, item }) => {
193
- const target = tree.getDragTarget();
194
- if (!target ||
195
- !(0, utils_1.isOrderedDragTarget)(target) ||
196
- target.item !== item.getParent())
197
- return false;
198
- return target.childIndex - 1 === item.getItemMeta().posInSet;
199
- },
200
- isDraggingOver: ({ tree, item }) => {
201
- var _a, _b;
202
- return ((_b = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggingOverItem) === null || _b === void 0 ? void 0 : _b.getId()) === item.getId();
203
- },
204
- },
205
- };
@@ -1,71 +0,0 @@
1
- import { ItemInstance, SetStateFn } from "../../types/core";
2
- export interface DndDataRef {
3
- lastDragCode?: string;
4
- lastAllowDrop?: boolean;
5
- }
6
- export interface DndState<T> {
7
- draggedItems?: ItemInstance<T>[];
8
- draggingOverItem?: ItemInstance<T>;
9
- dragTarget?: DragTarget<T>;
10
- }
11
- export interface DragLineData {
12
- indent: number;
13
- top: number;
14
- left: number;
15
- width: number;
16
- }
17
- export type DragTarget<T> = {
18
- item: ItemInstance<T>;
19
- childIndex: number;
20
- insertionIndex: number;
21
- dragLineIndex: number;
22
- dragLineLevel: number;
23
- } | {
24
- item: ItemInstance<T>;
25
- };
26
- export declare enum DragTargetPosition {
27
- Top = "top",
28
- Bottom = "bottom",
29
- Item = "item"
30
- }
31
- export type DragAndDropFeatureDef<T> = {
32
- state: {
33
- dnd?: DndState<T> | null;
34
- };
35
- config: {
36
- setDndState?: SetStateFn<DndState<T> | undefined | null>;
37
- /** Defines the size of the area at the top and bottom of an item where, when an item is dropped, the item willö
38
- * be placed above or below the item within the same parent, as opposed to being placed inside the item.
39
- * If `canReorder` is `false`, this is ignored. */
40
- reorderAreaPercentage?: number;
41
- canReorder?: boolean;
42
- canDrag?: (items: ItemInstance<T>[]) => boolean;
43
- canDrop?: (items: ItemInstance<T>[], target: DragTarget<T>) => boolean;
44
- indent?: number;
45
- createForeignDragObject?: (items: ItemInstance<T>[]) => {
46
- format: string;
47
- data: any;
48
- };
49
- setDragImage?: (items: ItemInstance<T>[]) => {
50
- imgElement: Element;
51
- xOffset?: number;
52
- yOffset?: number;
53
- };
54
- canDropForeignDragObject?: (dataTransfer: DataTransfer, target: DragTarget<T>) => boolean;
55
- onDrop?: (items: ItemInstance<T>[], target: DragTarget<T>) => void | Promise<void>;
56
- onDropForeignDragObject?: (dataTransfer: DataTransfer, target: DragTarget<T>) => void | Promise<void>;
57
- onCompleteForeignDrop?: (items: ItemInstance<T>[]) => void;
58
- };
59
- treeInstance: {
60
- getDragTarget: () => DragTarget<T> | null;
61
- getDragLineData: () => DragLineData | null;
62
- getDragLineStyle: (topOffset?: number, leftOffset?: number) => Record<string, any>;
63
- };
64
- itemInstance: {
65
- isDragTarget: () => boolean;
66
- isDragTargetAbove: () => boolean;
67
- isDragTargetBelow: () => boolean;
68
- isDraggingOver: () => boolean;
69
- };
70
- hotkeys: never;
71
- };
@@ -1,9 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DragTargetPosition = void 0;
4
- var DragTargetPosition;
5
- (function (DragTargetPosition) {
6
- DragTargetPosition["Top"] = "top";
7
- DragTargetPosition["Bottom"] = "bottom";
8
- DragTargetPosition["Item"] = "item";
9
- })(DragTargetPosition || (exports.DragTargetPosition = DragTargetPosition = {}));
@@ -1,27 +0,0 @@
1
- import { ItemInstance, TreeInstance } from "../../types/core";
2
- import { DragTarget } from "./types";
3
- export declare enum ItemDropCategory {
4
- Item = 0,
5
- ExpandedFolder = 1,
6
- LastInGroup = 2
7
- }
8
- export declare const isOrderedDragTarget: <T>(dragTarget: DragTarget<T>) => dragTarget is {
9
- item: ItemInstance<T>;
10
- childIndex: number;
11
- insertionIndex: number;
12
- dragLineIndex: number;
13
- dragLineLevel: number;
14
- };
15
- export declare const canDrop: (dataTransfer: DataTransfer | null, target: DragTarget<any>, tree: TreeInstance<any>) => boolean;
16
- export declare const getItemDropCategory: (item: ItemInstance<any>) => ItemDropCategory;
17
- export declare const getInsertionIndex: <T>(children: ItemInstance<T>[], childIndex: number, draggedItems: ItemInstance<T>[] | undefined) => number;
18
- export declare const getDragCode: (e: any, item: ItemInstance<any>, tree: TreeInstance<any>) => string;
19
- /** @param item refers to the bottom-most item of the container, at which bottom is being reparented on (e.g. root-1-2-6) */
20
- export declare const getReparentTarget: <T>(item: ItemInstance<T>, reparentLevel: number, draggedItems: ItemInstance<T>[] | undefined) => {
21
- item: ItemInstance<any>;
22
- childIndex: number;
23
- insertionIndex: number;
24
- dragLineIndex: number;
25
- dragLineLevel: number;
26
- };
27
- export declare const getDragTarget: (e: any, item: ItemInstance<any>, tree: TreeInstance<any>, canReorder?: boolean | undefined) => DragTarget<any>;
@@ -1,182 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getDragTarget = exports.getReparentTarget = exports.getDragCode = exports.getInsertionIndex = exports.getItemDropCategory = exports.canDrop = exports.isOrderedDragTarget = exports.ItemDropCategory = void 0;
4
- var ItemDropCategory;
5
- (function (ItemDropCategory) {
6
- ItemDropCategory[ItemDropCategory["Item"] = 0] = "Item";
7
- ItemDropCategory[ItemDropCategory["ExpandedFolder"] = 1] = "ExpandedFolder";
8
- ItemDropCategory[ItemDropCategory["LastInGroup"] = 2] = "LastInGroup";
9
- })(ItemDropCategory || (exports.ItemDropCategory = ItemDropCategory = {}));
10
- var PlacementType;
11
- (function (PlacementType) {
12
- PlacementType[PlacementType["ReorderAbove"] = 0] = "ReorderAbove";
13
- PlacementType[PlacementType["ReorderBelow"] = 1] = "ReorderBelow";
14
- PlacementType[PlacementType["MakeChild"] = 2] = "MakeChild";
15
- PlacementType[PlacementType["Reparent"] = 3] = "Reparent";
16
- })(PlacementType || (PlacementType = {}));
17
- const isOrderedDragTarget = (dragTarget) => "childIndex" in dragTarget;
18
- exports.isOrderedDragTarget = isOrderedDragTarget;
19
- const canDrop = (dataTransfer, target, tree) => {
20
- var _a, _b, _c;
21
- const draggedItems = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems;
22
- const config = tree.getConfig();
23
- if (draggedItems && !((_c = (_b = config.canDrop) === null || _b === void 0 ? void 0 : _b.call(config, draggedItems, target)) !== null && _c !== void 0 ? _c : true)) {
24
- return false;
25
- }
26
- if (draggedItems &&
27
- draggedItems.some((draggedItem) => target.item.getId() === draggedItem.getId() ||
28
- target.item.isDescendentOf(draggedItem.getId()))) {
29
- return false;
30
- }
31
- if (!draggedItems &&
32
- dataTransfer &&
33
- config.canDropForeignDragObject &&
34
- !config.canDropForeignDragObject(dataTransfer, target)) {
35
- return false;
36
- }
37
- return true;
38
- };
39
- exports.canDrop = canDrop;
40
- const getItemDropCategory = (item) => {
41
- if (item.isExpanded()) {
42
- return ItemDropCategory.ExpandedFolder;
43
- }
44
- const parent = item.getParent();
45
- if (parent && item.getIndexInParent() === item.getItemMeta().setSize - 1) {
46
- return ItemDropCategory.LastInGroup;
47
- }
48
- return ItemDropCategory.Item;
49
- };
50
- exports.getItemDropCategory = getItemDropCategory;
51
- const getInsertionIndex = (children, childIndex, draggedItems) => {
52
- var _a;
53
- const numberOfDragItemsBeforeTarget = (_a = children
54
- .slice(0, childIndex)
55
- .reduce((counter, child) => child && (draggedItems === null || draggedItems === void 0 ? void 0 : draggedItems.some((i) => i.getId() === child.getId()))
56
- ? ++counter
57
- : counter, 0)) !== null && _a !== void 0 ? _a : 0;
58
- return childIndex - numberOfDragItemsBeforeTarget;
59
- };
60
- exports.getInsertionIndex = getInsertionIndex;
61
- const getTargetPlacement = (e, item, tree, canMakeChild) => {
62
- var _a, _b, _c, _d, _e;
63
- const config = tree.getConfig();
64
- if (!config.canReorder) {
65
- return canMakeChild
66
- ? { type: PlacementType.MakeChild }
67
- : { type: PlacementType.ReorderBelow };
68
- }
69
- const bb = (_a = item.getElement()) === null || _a === void 0 ? void 0 : _a.getBoundingClientRect();
70
- const topPercent = bb ? (e.clientY - bb.top) / bb.height : 0.5;
71
- const leftPixels = bb ? e.clientX - bb.left : 0;
72
- const targetDropCategory = (0, exports.getItemDropCategory)(item);
73
- const reorderAreaPercentage = !canMakeChild
74
- ? 0.5
75
- : (_b = config.reorderAreaPercentage) !== null && _b !== void 0 ? _b : 0.3;
76
- const indent = (_c = config.indent) !== null && _c !== void 0 ? _c : 20;
77
- const makeChildType = canMakeChild
78
- ? PlacementType.MakeChild
79
- : PlacementType.ReorderBelow;
80
- if (targetDropCategory === ItemDropCategory.ExpandedFolder) {
81
- if (topPercent < reorderAreaPercentage) {
82
- return { type: PlacementType.ReorderAbove };
83
- }
84
- return { type: makeChildType };
85
- }
86
- if (targetDropCategory === ItemDropCategory.LastInGroup) {
87
- if (leftPixels < item.getItemMeta().level * indent) {
88
- if (topPercent < 0.5) {
89
- return { type: PlacementType.ReorderAbove };
90
- }
91
- const minLevel = (_e = (_d = item.getItemBelow()) === null || _d === void 0 ? void 0 : _d.getItemMeta().level) !== null && _e !== void 0 ? _e : 0;
92
- return {
93
- type: PlacementType.Reparent,
94
- reparentLevel: Math.max(minLevel, Math.floor(leftPixels / indent)),
95
- };
96
- }
97
- // if not at left of item area, treat as if it was a normal item
98
- }
99
- // targetDropCategory === ItemDropCategory.Item
100
- if (topPercent < reorderAreaPercentage) {
101
- return { type: PlacementType.ReorderAbove };
102
- }
103
- if (topPercent > 1 - reorderAreaPercentage) {
104
- return { type: PlacementType.ReorderBelow };
105
- }
106
- return { type: makeChildType };
107
- };
108
- const getDragCode = (e, item, tree) => {
109
- const placement = getTargetPlacement(e, item, tree, true);
110
- return [
111
- item.getId(),
112
- placement.type,
113
- placement.type === PlacementType.Reparent ? placement.reparentLevel : 0,
114
- ].join("__");
115
- };
116
- exports.getDragCode = getDragCode;
117
- const getNthParent = (item, n) => {
118
- if (n === item.getItemMeta().level) {
119
- return item;
120
- }
121
- return getNthParent(item.getParent(), n);
122
- };
123
- /** @param item refers to the bottom-most item of the container, at which bottom is being reparented on (e.g. root-1-2-6) */
124
- const getReparentTarget = (item, reparentLevel, draggedItems) => {
125
- const itemMeta = item.getItemMeta();
126
- const reparentedTarget = getNthParent(item, reparentLevel - 1);
127
- const targetItemAbove = getNthParent(item, reparentLevel); // .getItemBelow()!;
128
- const targetIndex = targetItemAbove.getIndexInParent() + 1;
129
- return {
130
- item: reparentedTarget,
131
- childIndex: targetIndex,
132
- insertionIndex: (0, exports.getInsertionIndex)(reparentedTarget.getChildren(), targetIndex, draggedItems),
133
- dragLineIndex: itemMeta.index + 1,
134
- dragLineLevel: reparentLevel,
135
- };
136
- };
137
- exports.getReparentTarget = getReparentTarget;
138
- const getDragTarget = (e, item, tree, canReorder = tree.getConfig().canReorder) => {
139
- var _a;
140
- const draggedItems = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems;
141
- const itemMeta = item.getItemMeta();
142
- const parent = item.getParent();
143
- const itemTarget = { item };
144
- const parentTarget = parent ? { item: parent } : null;
145
- const canBecomeSibling = parentTarget && (0, exports.canDrop)(e.dataTransfer, parentTarget, tree);
146
- const canMakeChild = (0, exports.canDrop)(e.dataTransfer, itemTarget, tree);
147
- const placement = getTargetPlacement(e, item, tree, canMakeChild);
148
- if (!canReorder &&
149
- parent &&
150
- canBecomeSibling &&
151
- placement.type !== PlacementType.MakeChild) {
152
- return parentTarget;
153
- }
154
- if (!canReorder && parent && !canBecomeSibling) {
155
- // TODO! this breaks in story DND/Can Drop. Maybe move this logic into a composable DragTargetStrategy[] ?
156
- return (0, exports.getDragTarget)(e, parent, tree, false);
157
- }
158
- if (!parent) {
159
- // Shouldn't happen, but if dropped "next" to root item, just drop it inside
160
- return itemTarget;
161
- }
162
- if (placement.type === PlacementType.MakeChild) {
163
- return itemTarget;
164
- }
165
- if (!canBecomeSibling) {
166
- return (0, exports.getDragTarget)(e, parent, tree, false);
167
- }
168
- if (placement.type === PlacementType.Reparent) {
169
- return (0, exports.getReparentTarget)(item, placement.reparentLevel, draggedItems);
170
- }
171
- const maybeAddOneForBelow = placement.type === PlacementType.ReorderAbove ? 0 : 1;
172
- const childIndex = item.getIndexInParent() + maybeAddOneForBelow;
173
- return {
174
- item: parent,
175
- dragLineIndex: itemMeta.index + maybeAddOneForBelow,
176
- dragLineLevel: itemMeta.level,
177
- childIndex,
178
- // TODO performance could be improved by computing this only when dragcode changed
179
- insertionIndex: (0, exports.getInsertionIndex)(parent.getChildren(), childIndex, draggedItems),
180
- };
181
- };
182
- exports.getDragTarget = getDragTarget;
@@ -1,2 +0,0 @@
1
- import { FeatureImplementation } from "../../types/core";
2
- export declare const expandAllFeature: FeatureImplementation;
@@ -1,70 +0,0 @@
1
- "use strict";
2
- var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
- return new (P || (P = Promise))(function (resolve, reject) {
5
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
- step((generator = generator.apply(thisArg, _arguments || [])).next());
9
- });
10
- };
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.expandAllFeature = void 0;
13
- exports.expandAllFeature = {
14
- key: "expand-all",
15
- treeInstance: {
16
- expandAll: (_a, cancelToken_1) => __awaiter(void 0, [_a, cancelToken_1], void 0, function* ({ tree }, cancelToken) {
17
- yield Promise.all(tree.getItems().map((item) => item.expandAll(cancelToken)));
18
- }),
19
- collapseAll: ({ tree }) => {
20
- tree.applySubStateUpdate("expandedItems", []);
21
- tree.rebuildTree();
22
- },
23
- },
24
- itemInstance: {
25
- expandAll: (_a, cancelToken_1) => __awaiter(void 0, [_a, cancelToken_1], void 0, function* ({ tree, item }, cancelToken) {
26
- if (cancelToken === null || cancelToken === void 0 ? void 0 : cancelToken.current) {
27
- return;
28
- }
29
- if (!item.isFolder()) {
30
- return;
31
- }
32
- item.expand();
33
- yield tree.waitForItemChildrenLoaded(item.getId());
34
- yield Promise.all(item.getChildren().map((child) => __awaiter(void 0, void 0, void 0, function* () {
35
- yield tree.waitForItemChildrenLoaded(item.getId());
36
- yield (child === null || child === void 0 ? void 0 : child.expandAll(cancelToken));
37
- })));
38
- }),
39
- collapseAll: ({ item }) => {
40
- if (!item.isExpanded())
41
- return;
42
- for (const child of item.getChildren()) {
43
- child === null || child === void 0 ? void 0 : child.collapseAll();
44
- }
45
- item.collapse();
46
- },
47
- },
48
- hotkeys: {
49
- expandSelected: {
50
- hotkey: "Control+Shift+Plus",
51
- handler: (_, tree) => __awaiter(void 0, void 0, void 0, function* () {
52
- const cancelToken = { current: false };
53
- const cancelHandler = (e) => {
54
- if (e.code === "Escape") {
55
- cancelToken.current = true;
56
- }
57
- };
58
- document.addEventListener("keydown", cancelHandler);
59
- yield Promise.all(tree.getSelectedItems().map((item) => item.expandAll(cancelToken)));
60
- document.removeEventListener("keydown", cancelHandler);
61
- }),
62
- },
63
- collapseSelected: {
64
- hotkey: "Control+Shift+Minus",
65
- handler: (_, tree) => {
66
- tree.getSelectedItems().forEach((item) => item.collapseAll());
67
- },
68
- },
69
- },
70
- };
@@ -1,19 +0,0 @@
1
- export interface ExpandAllDataRef {
2
- }
3
- export type ExpandAllFeatureDef = {
4
- state: {};
5
- config: {};
6
- treeInstance: {
7
- expandAll: (cancelToken?: {
8
- current: boolean;
9
- }) => Promise<void>;
10
- collapseAll: () => void;
11
- };
12
- itemInstance: {
13
- expandAll: (cancelToken?: {
14
- current: boolean;
15
- }) => Promise<void>;
16
- collapseAll: () => void;
17
- };
18
- hotkeys: "expandSelected" | "collapseSelected";
19
- };
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,2 +0,0 @@
1
- import { FeatureImplementation } from "../../types/core";
2
- export declare const hotkeysCoreFeature: FeatureImplementation;