@headless-tree/core 1.2.1 → 1.4.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.
- package/CHANGELOG.md +31 -0
- package/dist/index.d.mts +580 -0
- package/dist/index.d.ts +580 -0
- package/dist/index.js +2347 -0
- package/dist/index.mjs +2302 -0
- package/package.json +18 -10
- package/src/core/create-tree.ts +26 -15
- package/src/features/async-data-loader/feature.ts +5 -0
- package/src/features/async-data-loader/types.ts +2 -0
- package/src/features/checkboxes/checkboxes.spec.ts +20 -5
- package/src/features/checkboxes/feature.ts +31 -16
- package/src/features/checkboxes/types.ts +1 -0
- package/src/features/drag-and-drop/drag-and-drop.spec.ts +11 -2
- package/src/features/drag-and-drop/feature.ts +107 -24
- package/src/features/drag-and-drop/types.ts +21 -0
- package/src/features/drag-and-drop/utils.ts +8 -6
- package/src/features/keyboard-drag-and-drop/feature.ts +10 -1
- package/src/features/keyboard-drag-and-drop/keyboard-drag-and-drop.spec.ts +34 -3
- package/src/features/main/types.ts +0 -2
- package/src/features/sync-data-loader/feature.ts +5 -1
- package/src/features/tree/feature.ts +4 -3
- package/src/features/tree/tree.spec.ts +14 -4
- package/src/test-utils/test-tree-do.ts +2 -0
- package/src/test-utils/test-tree.ts +1 -0
- package/tsconfig.json +1 -4
- package/vitest.config.ts +3 -1
- package/lib/cjs/core/build-proxified-instance.d.ts +0 -2
- package/lib/cjs/core/build-proxified-instance.js +0 -58
- package/lib/cjs/core/build-static-instance.d.ts +0 -2
- package/lib/cjs/core/build-static-instance.js +0 -26
- package/lib/cjs/core/create-tree.d.ts +0 -2
- package/lib/cjs/core/create-tree.js +0 -191
- package/lib/cjs/features/async-data-loader/feature.d.ts +0 -2
- package/lib/cjs/features/async-data-loader/feature.js +0 -135
- package/lib/cjs/features/async-data-loader/types.d.ts +0 -47
- package/lib/cjs/features/async-data-loader/types.js +0 -2
- package/lib/cjs/features/checkboxes/feature.d.ts +0 -2
- package/lib/cjs/features/checkboxes/feature.js +0 -94
- package/lib/cjs/features/checkboxes/types.d.ts +0 -26
- package/lib/cjs/features/checkboxes/types.js +0 -9
- package/lib/cjs/features/drag-and-drop/feature.d.ts +0 -2
- package/lib/cjs/features/drag-and-drop/feature.js +0 -205
- package/lib/cjs/features/drag-and-drop/types.d.ts +0 -71
- package/lib/cjs/features/drag-and-drop/types.js +0 -9
- package/lib/cjs/features/drag-and-drop/utils.d.ts +0 -27
- package/lib/cjs/features/drag-and-drop/utils.js +0 -182
- package/lib/cjs/features/expand-all/feature.d.ts +0 -2
- package/lib/cjs/features/expand-all/feature.js +0 -70
- package/lib/cjs/features/expand-all/types.d.ts +0 -19
- package/lib/cjs/features/expand-all/types.js +0 -2
- package/lib/cjs/features/hotkeys-core/feature.d.ts +0 -2
- package/lib/cjs/features/hotkeys-core/feature.js +0 -107
- package/lib/cjs/features/hotkeys-core/types.d.ts +0 -27
- package/lib/cjs/features/hotkeys-core/types.js +0 -2
- package/lib/cjs/features/keyboard-drag-and-drop/feature.d.ts +0 -2
- package/lib/cjs/features/keyboard-drag-and-drop/feature.js +0 -206
- package/lib/cjs/features/keyboard-drag-and-drop/types.d.ts +0 -27
- package/lib/cjs/features/keyboard-drag-and-drop/types.js +0 -11
- package/lib/cjs/features/main/types.d.ts +0 -47
- package/lib/cjs/features/main/types.js +0 -2
- package/lib/cjs/features/prop-memoization/feature.d.ts +0 -2
- package/lib/cjs/features/prop-memoization/feature.js +0 -70
- package/lib/cjs/features/prop-memoization/types.d.ts +0 -15
- package/lib/cjs/features/prop-memoization/types.js +0 -2
- package/lib/cjs/features/renaming/feature.d.ts +0 -2
- package/lib/cjs/features/renaming/feature.js +0 -86
- package/lib/cjs/features/renaming/types.d.ts +0 -27
- package/lib/cjs/features/renaming/types.js +0 -2
- package/lib/cjs/features/search/feature.d.ts +0 -2
- package/lib/cjs/features/search/feature.js +0 -119
- package/lib/cjs/features/search/types.d.ts +0 -32
- package/lib/cjs/features/search/types.js +0 -2
- package/lib/cjs/features/selection/feature.d.ts +0 -2
- package/lib/cjs/features/selection/feature.js +0 -132
- package/lib/cjs/features/selection/types.d.ts +0 -21
- package/lib/cjs/features/selection/types.js +0 -2
- package/lib/cjs/features/sync-data-loader/feature.d.ts +0 -2
- package/lib/cjs/features/sync-data-loader/feature.js +0 -49
- package/lib/cjs/features/sync-data-loader/types.d.ts +0 -28
- package/lib/cjs/features/sync-data-loader/types.js +0 -2
- package/lib/cjs/features/tree/feature.d.ts +0 -2
- package/lib/cjs/features/tree/feature.js +0 -244
- package/lib/cjs/features/tree/types.d.ts +0 -63
- package/lib/cjs/features/tree/types.js +0 -2
- package/lib/cjs/index.d.ts +0 -33
- package/lib/cjs/index.js +0 -51
- package/lib/cjs/mddocs-entry.d.ts +0 -121
- package/lib/cjs/mddocs-entry.js +0 -17
- package/lib/cjs/test-utils/test-tree-do.d.ts +0 -23
- package/lib/cjs/test-utils/test-tree-do.js +0 -112
- package/lib/cjs/test-utils/test-tree-expect.d.ts +0 -17
- package/lib/cjs/test-utils/test-tree-expect.js +0 -66
- package/lib/cjs/test-utils/test-tree.d.ts +0 -48
- package/lib/cjs/test-utils/test-tree.js +0 -207
- package/lib/cjs/types/core.d.ts +0 -84
- package/lib/cjs/types/core.js +0 -2
- package/lib/cjs/types/deep-merge.d.ts +0 -13
- package/lib/cjs/types/deep-merge.js +0 -2
- package/lib/cjs/utilities/create-on-drop-handler.d.ts +0 -3
- package/lib/cjs/utilities/create-on-drop-handler.js +0 -20
- package/lib/cjs/utilities/errors.d.ts +0 -2
- package/lib/cjs/utilities/errors.js +0 -9
- package/lib/cjs/utilities/insert-items-at-target.d.ts +0 -3
- package/lib/cjs/utilities/insert-items-at-target.js +0 -40
- package/lib/cjs/utilities/remove-items-from-parents.d.ts +0 -2
- package/lib/cjs/utilities/remove-items-from-parents.js +0 -32
- package/lib/cjs/utils.d.ts +0 -6
- package/lib/cjs/utils.js +0 -53
- package/lib/esm/core/build-proxified-instance.d.ts +0 -2
- package/lib/esm/core/build-proxified-instance.js +0 -54
- package/lib/esm/core/build-static-instance.d.ts +0 -2
- package/lib/esm/core/build-static-instance.js +0 -22
- package/lib/esm/core/create-tree.d.ts +0 -2
- package/lib/esm/core/create-tree.js +0 -187
- package/lib/esm/features/async-data-loader/feature.d.ts +0 -2
- package/lib/esm/features/async-data-loader/feature.js +0 -132
- package/lib/esm/features/async-data-loader/types.d.ts +0 -47
- package/lib/esm/features/async-data-loader/types.js +0 -1
- package/lib/esm/features/checkboxes/feature.d.ts +0 -2
- package/lib/esm/features/checkboxes/feature.js +0 -91
- package/lib/esm/features/checkboxes/types.d.ts +0 -26
- package/lib/esm/features/checkboxes/types.js +0 -6
- package/lib/esm/features/drag-and-drop/feature.d.ts +0 -2
- package/lib/esm/features/drag-and-drop/feature.js +0 -202
- package/lib/esm/features/drag-and-drop/types.d.ts +0 -71
- package/lib/esm/features/drag-and-drop/types.js +0 -6
- package/lib/esm/features/drag-and-drop/utils.d.ts +0 -27
- package/lib/esm/features/drag-and-drop/utils.js +0 -172
- package/lib/esm/features/expand-all/feature.d.ts +0 -2
- package/lib/esm/features/expand-all/feature.js +0 -67
- package/lib/esm/features/expand-all/types.d.ts +0 -19
- package/lib/esm/features/expand-all/types.js +0 -1
- package/lib/esm/features/hotkeys-core/feature.d.ts +0 -2
- package/lib/esm/features/hotkeys-core/feature.js +0 -104
- package/lib/esm/features/hotkeys-core/types.d.ts +0 -27
- package/lib/esm/features/hotkeys-core/types.js +0 -1
- package/lib/esm/features/keyboard-drag-and-drop/feature.d.ts +0 -2
- package/lib/esm/features/keyboard-drag-and-drop/feature.js +0 -203
- package/lib/esm/features/keyboard-drag-and-drop/types.d.ts +0 -27
- package/lib/esm/features/keyboard-drag-and-drop/types.js +0 -8
- package/lib/esm/features/main/types.d.ts +0 -47
- package/lib/esm/features/main/types.js +0 -1
- package/lib/esm/features/prop-memoization/feature.d.ts +0 -2
- package/lib/esm/features/prop-memoization/feature.js +0 -67
- package/lib/esm/features/prop-memoization/types.d.ts +0 -15
- package/lib/esm/features/prop-memoization/types.js +0 -1
- package/lib/esm/features/renaming/feature.d.ts +0 -2
- package/lib/esm/features/renaming/feature.js +0 -83
- package/lib/esm/features/renaming/types.d.ts +0 -27
- package/lib/esm/features/renaming/types.js +0 -1
- package/lib/esm/features/search/feature.d.ts +0 -2
- package/lib/esm/features/search/feature.js +0 -116
- package/lib/esm/features/search/types.d.ts +0 -32
- package/lib/esm/features/search/types.js +0 -1
- package/lib/esm/features/selection/feature.d.ts +0 -2
- package/lib/esm/features/selection/feature.js +0 -129
- package/lib/esm/features/selection/types.d.ts +0 -21
- package/lib/esm/features/selection/types.js +0 -1
- package/lib/esm/features/sync-data-loader/feature.d.ts +0 -2
- package/lib/esm/features/sync-data-loader/feature.js +0 -46
- package/lib/esm/features/sync-data-loader/types.d.ts +0 -28
- package/lib/esm/features/sync-data-loader/types.js +0 -1
- package/lib/esm/features/tree/feature.d.ts +0 -2
- package/lib/esm/features/tree/feature.js +0 -241
- package/lib/esm/features/tree/types.d.ts +0 -63
- package/lib/esm/features/tree/types.js +0 -1
- package/lib/esm/index.d.ts +0 -33
- package/lib/esm/index.js +0 -32
- package/lib/esm/mddocs-entry.d.ts +0 -121
- package/lib/esm/mddocs-entry.js +0 -1
- package/lib/esm/test-utils/test-tree-do.d.ts +0 -23
- package/lib/esm/test-utils/test-tree-do.js +0 -108
- package/lib/esm/test-utils/test-tree-expect.d.ts +0 -17
- package/lib/esm/test-utils/test-tree-expect.js +0 -62
- package/lib/esm/test-utils/test-tree.d.ts +0 -48
- package/lib/esm/test-utils/test-tree.js +0 -203
- package/lib/esm/types/core.d.ts +0 -84
- package/lib/esm/types/core.js +0 -1
- package/lib/esm/types/deep-merge.d.ts +0 -13
- package/lib/esm/types/deep-merge.js +0 -1
- package/lib/esm/utilities/create-on-drop-handler.d.ts +0 -3
- package/lib/esm/utilities/create-on-drop-handler.js +0 -16
- package/lib/esm/utilities/errors.d.ts +0 -2
- package/lib/esm/utilities/errors.js +0 -4
- package/lib/esm/utilities/insert-items-at-target.d.ts +0 -3
- package/lib/esm/utilities/insert-items-at-target.js +0 -36
- package/lib/esm/utilities/remove-items-from-parents.d.ts +0 -2
- package/lib/esm/utilities/remove-items-from-parents.js +0 -28
- package/lib/esm/utils.d.ts +0 -6
- package/lib/esm/utils.js +0 -46
|
@@ -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,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,107 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.hotkeysCoreFeature = void 0;
|
|
4
|
-
const specialKeys = {
|
|
5
|
-
// TODO:breaking deprecate auto-lowercase
|
|
6
|
-
letter: /^Key[A-Z]$/,
|
|
7
|
-
letterornumber: /^(Key[A-Z]|Digit[0-9])$/,
|
|
8
|
-
plus: /^(NumpadAdd|Plus)$/,
|
|
9
|
-
minus: /^(NumpadSubtract|Minus)$/,
|
|
10
|
-
control: /^(ControlLeft|ControlRight)$/,
|
|
11
|
-
shift: /^(ShiftLeft|ShiftRight)$/,
|
|
12
|
-
};
|
|
13
|
-
const testHotkeyMatch = (pressedKeys, tree, hotkey) => {
|
|
14
|
-
const supposedKeys = hotkey.hotkey.toLowerCase().split("+"); // TODO:breaking deprecate auto-lowercase
|
|
15
|
-
const doKeysMatch = supposedKeys.every((key) => {
|
|
16
|
-
if (key in specialKeys) {
|
|
17
|
-
return [...pressedKeys].some((pressedKey) => specialKeys[key].test(pressedKey));
|
|
18
|
-
}
|
|
19
|
-
const pressedKeysLowerCase = [...pressedKeys] // TODO:breaking deprecate auto-lowercase
|
|
20
|
-
.map((k) => k.toLowerCase());
|
|
21
|
-
if (pressedKeysLowerCase.includes(key.toLowerCase())) {
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
if (pressedKeysLowerCase.includes(`key${key.toLowerCase()}`)) {
|
|
25
|
-
// TODO:breaking deprecate e.key character matching
|
|
26
|
-
return true;
|
|
27
|
-
}
|
|
28
|
-
return false;
|
|
29
|
-
});
|
|
30
|
-
const isEnabled = !hotkey.isEnabled || hotkey.isEnabled(tree);
|
|
31
|
-
const equalCounts = pressedKeys.size === supposedKeys.length;
|
|
32
|
-
return doKeysMatch && isEnabled && equalCounts;
|
|
33
|
-
};
|
|
34
|
-
const findHotkeyMatch = (pressedKeys, tree, config1, config2) => {
|
|
35
|
-
var _a;
|
|
36
|
-
return (_a = Object.entries(Object.assign(Object.assign({}, config1), config2)).find(([, hotkey]) => testHotkeyMatch(pressedKeys, tree, hotkey))) === null || _a === void 0 ? void 0 : _a[0];
|
|
37
|
-
};
|
|
38
|
-
exports.hotkeysCoreFeature = {
|
|
39
|
-
key: "hotkeys-core",
|
|
40
|
-
onTreeMount: (tree, element) => {
|
|
41
|
-
const data = tree.getDataRef();
|
|
42
|
-
const keydown = (e) => {
|
|
43
|
-
var _a;
|
|
44
|
-
var _b;
|
|
45
|
-
const { ignoreHotkeysOnInputs, onTreeHotkey, hotkeys } = tree.getConfig();
|
|
46
|
-
if (e.target instanceof HTMLInputElement && ignoreHotkeysOnInputs) {
|
|
47
|
-
return;
|
|
48
|
-
}
|
|
49
|
-
(_a = (_b = data.current).pressedKeys) !== null && _a !== void 0 ? _a : (_b.pressedKeys = new Set());
|
|
50
|
-
const newMatch = !data.current.pressedKeys.has(e.code);
|
|
51
|
-
data.current.pressedKeys.add(e.code);
|
|
52
|
-
const hotkeyName = findHotkeyMatch(data.current.pressedKeys, tree, tree.getHotkeyPresets(), hotkeys);
|
|
53
|
-
if (e.target instanceof HTMLInputElement) {
|
|
54
|
-
// JS respects composite keydowns while input elements are focused, and
|
|
55
|
-
// doesnt send the associated keyup events with the same key name
|
|
56
|
-
data.current.pressedKeys.delete(e.code);
|
|
57
|
-
}
|
|
58
|
-
if (!hotkeyName)
|
|
59
|
-
return;
|
|
60
|
-
const hotkeyConfig = Object.assign(Object.assign({}, tree.getHotkeyPresets()[hotkeyName]), hotkeys === null || hotkeys === void 0 ? void 0 : hotkeys[hotkeyName]);
|
|
61
|
-
if (!hotkeyConfig)
|
|
62
|
-
return;
|
|
63
|
-
if (!hotkeyConfig.allowWhenInputFocused &&
|
|
64
|
-
e.target instanceof HTMLInputElement)
|
|
65
|
-
return;
|
|
66
|
-
if (!hotkeyConfig.canRepeat && !newMatch)
|
|
67
|
-
return;
|
|
68
|
-
if (hotkeyConfig.preventDefault)
|
|
69
|
-
e.preventDefault();
|
|
70
|
-
hotkeyConfig.handler(e, tree);
|
|
71
|
-
onTreeHotkey === null || onTreeHotkey === void 0 ? void 0 : onTreeHotkey(hotkeyName, e);
|
|
72
|
-
};
|
|
73
|
-
const keyup = (e) => {
|
|
74
|
-
var _a;
|
|
75
|
-
var _b;
|
|
76
|
-
(_a = (_b = data.current).pressedKeys) !== null && _a !== void 0 ? _a : (_b.pressedKeys = new Set());
|
|
77
|
-
data.current.pressedKeys.delete(e.code);
|
|
78
|
-
};
|
|
79
|
-
const reset = () => {
|
|
80
|
-
data.current.pressedKeys = new Set();
|
|
81
|
-
};
|
|
82
|
-
// keyup is registered on document, because some hotkeys shift
|
|
83
|
-
// the focus away from the tree (i.e. search)
|
|
84
|
-
// and then we wouldn't get the keyup event anymore
|
|
85
|
-
element.addEventListener("keydown", keydown);
|
|
86
|
-
document.addEventListener("keyup", keyup);
|
|
87
|
-
window.addEventListener("focus", reset);
|
|
88
|
-
data.current.keydownHandler = keydown;
|
|
89
|
-
data.current.keyupHandler = keyup;
|
|
90
|
-
data.current.resetHandler = reset;
|
|
91
|
-
},
|
|
92
|
-
onTreeUnmount: (tree, element) => {
|
|
93
|
-
const data = tree.getDataRef();
|
|
94
|
-
if (data.current.keyupHandler) {
|
|
95
|
-
document.removeEventListener("keyup", data.current.keyupHandler);
|
|
96
|
-
delete data.current.keyupHandler;
|
|
97
|
-
}
|
|
98
|
-
if (data.current.keydownHandler) {
|
|
99
|
-
element.removeEventListener("keydown", data.current.keydownHandler);
|
|
100
|
-
delete data.current.keydownHandler;
|
|
101
|
-
}
|
|
102
|
-
if (data.current.resetHandler) {
|
|
103
|
-
window.removeEventListener("focus", data.current.resetHandler);
|
|
104
|
-
delete data.current.resetHandler;
|
|
105
|
-
}
|
|
106
|
-
},
|
|
107
|
-
};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { CustomHotkeysConfig, TreeInstance } from "../../types/core";
|
|
2
|
-
export interface HotkeyConfig<T> {
|
|
3
|
-
hotkey: string;
|
|
4
|
-
canRepeat?: boolean;
|
|
5
|
-
allowWhenInputFocused?: boolean;
|
|
6
|
-
isEnabled?: (tree: TreeInstance<T>) => boolean;
|
|
7
|
-
preventDefault?: boolean;
|
|
8
|
-
handler: (e: KeyboardEvent, tree: TreeInstance<T>) => void;
|
|
9
|
-
}
|
|
10
|
-
export interface HotkeysCoreDataRef {
|
|
11
|
-
keydownHandler?: (e: KeyboardEvent) => void;
|
|
12
|
-
keyupHandler?: (e: KeyboardEvent) => void;
|
|
13
|
-
resetHandler?: (e: FocusEvent) => void;
|
|
14
|
-
pressedKeys: Set<string>;
|
|
15
|
-
}
|
|
16
|
-
export type HotkeysCoreFeatureDef<T> = {
|
|
17
|
-
state: {};
|
|
18
|
-
config: {
|
|
19
|
-
hotkeys?: CustomHotkeysConfig<T>;
|
|
20
|
-
onTreeHotkey?: (name: string, e: KeyboardEvent) => void;
|
|
21
|
-
/** Do not handle key inputs while an HTML input element is focused */
|
|
22
|
-
ignoreHotkeysOnInputs?: boolean;
|
|
23
|
-
};
|
|
24
|
-
treeInstance: {};
|
|
25
|
-
itemInstance: {};
|
|
26
|
-
hotkeys: never;
|
|
27
|
-
};
|
|
@@ -1,206 +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.keyboardDragAndDropFeature = void 0;
|
|
13
|
-
const utils_1 = require("../drag-and-drop/utils");
|
|
14
|
-
const utils_2 = require("../../utils");
|
|
15
|
-
const types_1 = require("./types");
|
|
16
|
-
const getNextDragTarget = (tree, isUp, dragTarget) => {
|
|
17
|
-
var _a, _b, _c, _d;
|
|
18
|
-
const direction = isUp ? 0 : 1;
|
|
19
|
-
const draggedItems = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems;
|
|
20
|
-
// currently hovering between items
|
|
21
|
-
if ((0, utils_1.isOrderedDragTarget)(dragTarget)) {
|
|
22
|
-
const parent = dragTarget.item.getParent();
|
|
23
|
-
const targetedItem = tree.getItems()[dragTarget.dragLineIndex - 1]; // item above dragline
|
|
24
|
-
const targetCategory = targetedItem
|
|
25
|
-
? (0, utils_1.getItemDropCategory)(targetedItem)
|
|
26
|
-
: utils_1.ItemDropCategory.Item;
|
|
27
|
-
const maxLevel = (_b = targetedItem === null || targetedItem === void 0 ? void 0 : targetedItem.getItemMeta().level) !== null && _b !== void 0 ? _b : 0;
|
|
28
|
-
const minLevel = (_d = (_c = targetedItem === null || targetedItem === void 0 ? void 0 : targetedItem.getItemBelow()) === null || _c === void 0 ? void 0 : _c.getItemMeta().level) !== null && _d !== void 0 ? _d : 0;
|
|
29
|
-
// reparenting
|
|
30
|
-
if (targetCategory === utils_1.ItemDropCategory.LastInGroup) {
|
|
31
|
-
if (isUp && dragTarget.dragLineLevel < maxLevel) {
|
|
32
|
-
return (0, utils_1.getReparentTarget)(targetedItem, dragTarget.dragLineLevel + 1, draggedItems);
|
|
33
|
-
}
|
|
34
|
-
if (!isUp && dragTarget.dragLineLevel > minLevel && parent) {
|
|
35
|
-
return (0, utils_1.getReparentTarget)(targetedItem, dragTarget.dragLineLevel - 1, draggedItems);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
const newIndex = dragTarget.dragLineIndex - 1 + direction;
|
|
39
|
-
const item = tree.getItems()[newIndex];
|
|
40
|
-
return item ? { item } : undefined;
|
|
41
|
-
}
|
|
42
|
-
// moving upwards outside of an open folder
|
|
43
|
-
const targetingExpandedFolder = (0, utils_1.getItemDropCategory)(dragTarget.item) === utils_1.ItemDropCategory.ExpandedFolder;
|
|
44
|
-
if (targetingExpandedFolder && !isUp) {
|
|
45
|
-
return {
|
|
46
|
-
item: dragTarget.item,
|
|
47
|
-
childIndex: 0,
|
|
48
|
-
insertionIndex: (0, utils_1.getInsertionIndex)(dragTarget.item.getChildren(), 0, draggedItems),
|
|
49
|
-
dragLineIndex: dragTarget.item.getItemMeta().index + direction,
|
|
50
|
-
dragLineLevel: dragTarget.item.getItemMeta().level + 1,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
// currently hovering over item
|
|
54
|
-
const childIndex = dragTarget.item.getIndexInParent() + direction;
|
|
55
|
-
return {
|
|
56
|
-
item: dragTarget.item.getParent(),
|
|
57
|
-
childIndex,
|
|
58
|
-
insertionIndex: (0, utils_1.getInsertionIndex)(dragTarget.item.getParent().getChildren(), childIndex, draggedItems),
|
|
59
|
-
dragLineIndex: dragTarget.item.getItemMeta().index + direction,
|
|
60
|
-
dragLineLevel: dragTarget.item.getItemMeta().level,
|
|
61
|
-
};
|
|
62
|
-
};
|
|
63
|
-
const getNextValidDragTarget = (tree, isUp, previousTarget) => {
|
|
64
|
-
var _a, _b;
|
|
65
|
-
if (previousTarget === void 0) { previousTarget = (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.dragTarget; }
|
|
66
|
-
if (!previousTarget)
|
|
67
|
-
return undefined;
|
|
68
|
-
const nextTarget = getNextDragTarget(tree, isUp, previousTarget);
|
|
69
|
-
const dataTransfer = (_b = tree.getDataRef().current.kDndDataTransfer) !== null && _b !== void 0 ? _b : null;
|
|
70
|
-
if (!nextTarget)
|
|
71
|
-
return undefined;
|
|
72
|
-
if ((0, utils_1.canDrop)(dataTransfer, nextTarget, tree)) {
|
|
73
|
-
return nextTarget;
|
|
74
|
-
}
|
|
75
|
-
return getNextValidDragTarget(tree, isUp, nextTarget);
|
|
76
|
-
};
|
|
77
|
-
const updateScroll = (tree) => {
|
|
78
|
-
const state = tree.getState().dnd;
|
|
79
|
-
if (!(state === null || state === void 0 ? void 0 : state.dragTarget) || (0, utils_1.isOrderedDragTarget)(state.dragTarget))
|
|
80
|
-
return;
|
|
81
|
-
state.dragTarget.item.scrollTo({ block: "nearest", inline: "nearest" });
|
|
82
|
-
};
|
|
83
|
-
const initiateDrag = (tree, draggedItems, dataTransfer) => {
|
|
84
|
-
var _a, _b;
|
|
85
|
-
const focusedItem = tree.getFocusedItem();
|
|
86
|
-
const { canDrag } = tree.getConfig();
|
|
87
|
-
if (draggedItems && canDrag && !canDrag(draggedItems)) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
if (draggedItems) {
|
|
91
|
-
tree.applySubStateUpdate("dnd", { draggedItems });
|
|
92
|
-
// getNextValidDragTarget->canDrop needs the draggedItems in state
|
|
93
|
-
(_b = (_a = tree.getConfig()).onStartKeyboardDrag) === null || _b === void 0 ? void 0 : _b.call(_a, draggedItems);
|
|
94
|
-
}
|
|
95
|
-
else if (dataTransfer) {
|
|
96
|
-
tree.getDataRef().current.kDndDataTransfer = dataTransfer;
|
|
97
|
-
}
|
|
98
|
-
const dragTarget = getNextValidDragTarget(tree, false, {
|
|
99
|
-
item: focusedItem,
|
|
100
|
-
});
|
|
101
|
-
if (!dragTarget)
|
|
102
|
-
return;
|
|
103
|
-
tree.applySubStateUpdate("dnd", {
|
|
104
|
-
draggedItems,
|
|
105
|
-
dragTarget,
|
|
106
|
-
});
|
|
107
|
-
tree.applySubStateUpdate("assistiveDndState", types_1.AssistiveDndState.Started);
|
|
108
|
-
updateScroll(tree);
|
|
109
|
-
};
|
|
110
|
-
const moveDragPosition = (tree, isUp) => {
|
|
111
|
-
var _a;
|
|
112
|
-
const dragTarget = getNextValidDragTarget(tree, isUp);
|
|
113
|
-
if (!dragTarget)
|
|
114
|
-
return;
|
|
115
|
-
tree.applySubStateUpdate("dnd", {
|
|
116
|
-
draggedItems: (_a = tree.getState().dnd) === null || _a === void 0 ? void 0 : _a.draggedItems,
|
|
117
|
-
dragTarget,
|
|
118
|
-
});
|
|
119
|
-
tree.applySubStateUpdate("assistiveDndState", types_1.AssistiveDndState.Dragging);
|
|
120
|
-
if (!(0, utils_1.isOrderedDragTarget)(dragTarget)) {
|
|
121
|
-
dragTarget.item.setFocused();
|
|
122
|
-
}
|
|
123
|
-
updateScroll(tree);
|
|
124
|
-
};
|
|
125
|
-
exports.keyboardDragAndDropFeature = {
|
|
126
|
-
key: "keyboard-drag-and-drop",
|
|
127
|
-
deps: ["drag-and-drop"],
|
|
128
|
-
getDefaultConfig: (defaultConfig, tree) => (Object.assign({ setAssistiveDndState: (0, utils_2.makeStateUpdater)("assistiveDndState", tree) }, defaultConfig)),
|
|
129
|
-
stateHandlerNames: {
|
|
130
|
-
assistiveDndState: "setAssistiveDndState",
|
|
131
|
-
},
|
|
132
|
-
treeInstance: {
|
|
133
|
-
startKeyboardDrag: ({ tree }, draggedItems) => {
|
|
134
|
-
initiateDrag(tree, draggedItems, undefined);
|
|
135
|
-
},
|
|
136
|
-
startKeyboardDragOnForeignObject: ({ tree }, dataTransfer) => {
|
|
137
|
-
initiateDrag(tree, undefined, dataTransfer);
|
|
138
|
-
},
|
|
139
|
-
stopKeyboardDrag: ({ tree }) => {
|
|
140
|
-
tree.getDataRef().current.kDndDataTransfer = undefined;
|
|
141
|
-
tree.applySubStateUpdate("dnd", null);
|
|
142
|
-
tree.applySubStateUpdate("assistiveDndState", types_1.AssistiveDndState.None);
|
|
143
|
-
},
|
|
144
|
-
},
|
|
145
|
-
hotkeys: {
|
|
146
|
-
startDrag: {
|
|
147
|
-
hotkey: "Control+Shift+KeyD",
|
|
148
|
-
preventDefault: true,
|
|
149
|
-
isEnabled: (tree) => !tree.getState().dnd,
|
|
150
|
-
handler: (_, tree) => {
|
|
151
|
-
tree.startKeyboardDrag(tree.getSelectedItems());
|
|
152
|
-
},
|
|
153
|
-
},
|
|
154
|
-
dragUp: {
|
|
155
|
-
hotkey: "ArrowUp",
|
|
156
|
-
preventDefault: true,
|
|
157
|
-
isEnabled: (tree) => !!tree.getState().dnd,
|
|
158
|
-
handler: (_, tree) => {
|
|
159
|
-
moveDragPosition(tree, true);
|
|
160
|
-
},
|
|
161
|
-
},
|
|
162
|
-
dragDown: {
|
|
163
|
-
hotkey: "ArrowDown",
|
|
164
|
-
preventDefault: true,
|
|
165
|
-
isEnabled: (tree) => !!tree.getState().dnd,
|
|
166
|
-
handler: (_, tree) => {
|
|
167
|
-
moveDragPosition(tree, false);
|
|
168
|
-
},
|
|
169
|
-
},
|
|
170
|
-
cancelDrag: {
|
|
171
|
-
hotkey: "Escape",
|
|
172
|
-
isEnabled: (tree) => !!tree.getState().dnd,
|
|
173
|
-
handler: (_, tree) => {
|
|
174
|
-
tree.stopKeyboardDrag();
|
|
175
|
-
},
|
|
176
|
-
},
|
|
177
|
-
completeDrag: {
|
|
178
|
-
hotkey: "Enter",
|
|
179
|
-
preventDefault: true,
|
|
180
|
-
isEnabled: (tree) => !!tree.getState().dnd,
|
|
181
|
-
handler: (e, tree) => __awaiter(void 0, void 0, void 0, function* () {
|
|
182
|
-
var _a, _b, _c, _d;
|
|
183
|
-
e.stopPropagation();
|
|
184
|
-
// TODO copied from keyboard onDrop, unify them
|
|
185
|
-
const dataRef = tree.getDataRef();
|
|
186
|
-
const target = tree.getDragTarget();
|
|
187
|
-
const dataTransfer = (_a = dataRef.current.kDndDataTransfer) !== null && _a !== void 0 ? _a : null;
|
|
188
|
-
if (!target || !(0, utils_1.canDrop)(dataTransfer, target, tree)) {
|
|
189
|
-
return;
|
|
190
|
-
}
|
|
191
|
-
const config = tree.getConfig();
|
|
192
|
-
const draggedItems = (_b = tree.getState().dnd) === null || _b === void 0 ? void 0 : _b.draggedItems;
|
|
193
|
-
dataRef.current.lastDragCode = undefined;
|
|
194
|
-
tree.applySubStateUpdate("dnd", null);
|
|
195
|
-
if (draggedItems) {
|
|
196
|
-
yield ((_c = config.onDrop) === null || _c === void 0 ? void 0 : _c.call(config, draggedItems, target));
|
|
197
|
-
tree.getItemInstance(draggedItems[0].getId()).setFocused();
|
|
198
|
-
}
|
|
199
|
-
else if (dataTransfer) {
|
|
200
|
-
yield ((_d = config.onDropForeignDragObject) === null || _d === void 0 ? void 0 : _d.call(config, dataTransfer, target));
|
|
201
|
-
}
|
|
202
|
-
tree.applySubStateUpdate("assistiveDndState", types_1.AssistiveDndState.Completed);
|
|
203
|
-
}),
|
|
204
|
-
},
|
|
205
|
-
},
|
|
206
|
-
};
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { ItemInstance, SetStateFn } from "../../types/core";
|
|
2
|
-
export interface KDndDataRef {
|
|
3
|
-
kDndDataTransfer: DataTransfer | undefined;
|
|
4
|
-
}
|
|
5
|
-
export declare enum AssistiveDndState {
|
|
6
|
-
None = 0,
|
|
7
|
-
Started = 1,
|
|
8
|
-
Dragging = 2,
|
|
9
|
-
Completed = 3,
|
|
10
|
-
Aborted = 4
|
|
11
|
-
}
|
|
12
|
-
export type KeyboardDragAndDropFeatureDef<T> = {
|
|
13
|
-
state: {
|
|
14
|
-
assistiveDndState?: AssistiveDndState | null;
|
|
15
|
-
};
|
|
16
|
-
config: {
|
|
17
|
-
setAssistiveDndState?: SetStateFn<AssistiveDndState | undefined | null>;
|
|
18
|
-
onStartKeyboardDrag?: (items: ItemInstance<T>[]) => void;
|
|
19
|
-
};
|
|
20
|
-
treeInstance: {
|
|
21
|
-
startKeyboardDrag: (items: ItemInstance<T>[]) => void;
|
|
22
|
-
startKeyboardDragOnForeignObject: (dataTransfer: DataTransfer) => void;
|
|
23
|
-
stopKeyboardDrag: () => void;
|
|
24
|
-
};
|
|
25
|
-
itemInstance: {};
|
|
26
|
-
hotkeys: "startDrag" | "cancelDrag" | "completeDrag" | "dragUp" | "dragDown";
|
|
27
|
-
};
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AssistiveDndState = void 0;
|
|
4
|
-
var AssistiveDndState;
|
|
5
|
-
(function (AssistiveDndState) {
|
|
6
|
-
AssistiveDndState[AssistiveDndState["None"] = 0] = "None";
|
|
7
|
-
AssistiveDndState[AssistiveDndState["Started"] = 1] = "Started";
|
|
8
|
-
AssistiveDndState[AssistiveDndState["Dragging"] = 2] = "Dragging";
|
|
9
|
-
AssistiveDndState[AssistiveDndState["Completed"] = 3] = "Completed";
|
|
10
|
-
AssistiveDndState[AssistiveDndState["Aborted"] = 4] = "Aborted";
|
|
11
|
-
})(AssistiveDndState || (exports.AssistiveDndState = AssistiveDndState = {}));
|