@headless-tree/core 1.2.0 → 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.
- package/CHANGELOG.md +27 -0
- package/dist/index.d.mts +577 -0
- package/dist/index.d.ts +577 -0
- package/dist/index.js +2321 -0
- package/dist/index.mjs +2276 -0
- package/package.json +18 -10
- package/src/core/create-tree.ts +26 -2
- package/src/features/async-data-loader/feature.ts +9 -4
- package/src/features/async-data-loader/types.ts +2 -0
- package/src/features/checkboxes/checkboxes.spec.ts +149 -0
- package/src/features/checkboxes/feature.ts +134 -0
- package/src/features/checkboxes/types.ts +29 -0
- package/src/features/drag-and-drop/drag-and-drop.spec.ts +11 -2
- package/src/features/drag-and-drop/feature.ts +88 -17
- package/src/features/drag-and-drop/types.ts +22 -0
- package/src/features/keyboard-drag-and-drop/feature.ts +8 -1
- package/src/features/keyboard-drag-and-drop/keyboard-drag-and-drop.spec.ts +34 -3
- package/src/features/sync-data-loader/feature.ts +5 -1
- package/src/features/tree/feature.ts +9 -3
- package/src/features/tree/tree.spec.ts +14 -4
- package/src/features/tree/types.ts +3 -2
- package/src/index.ts +2 -0
- package/src/test-utils/test-tree-do.ts +2 -0
- package/src/test-utils/test-tree.ts +1 -0
- package/src/types/core.ts +2 -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 -182
- 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/drag-and-drop/feature.d.ts +0 -2
- package/lib/cjs/features/drag-and-drop/feature.js +0 -179
- package/lib/cjs/features/drag-and-drop/types.d.ts +0 -66
- 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 -45
- 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 -240
- package/lib/cjs/features/tree/types.d.ts +0 -62
- package/lib/cjs/features/tree/types.js +0 -2
- package/lib/cjs/index.d.ts +0 -31
- package/lib/cjs/index.js +0 -49
- 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 -83
- 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 -178
- 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/drag-and-drop/feature.d.ts +0 -2
- package/lib/esm/features/drag-and-drop/feature.js +0 -176
- package/lib/esm/features/drag-and-drop/types.d.ts +0 -66
- 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 -45
- 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 -237
- package/lib/esm/features/tree/types.d.ts +0 -62
- package/lib/esm/features/tree/types.js +0 -1
- package/lib/esm/index.d.ts +0 -31
- package/lib/esm/index.js +0 -30
- 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 -83
- 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
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,32 @@
|
|
|
1
1
|
# @headless-tree/core
|
|
2
2
|
|
|
3
|
+
## 1.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 21d1679: add `canDragForeignDragObjectOver` to allow customizing whether a draggable visualization should be shown when dragging foreign data. This allows differentiating logic between drag-over and drop (via the existing `canDropForeignDataObject`), since for the latter `dataTransfer.getData` is not available by default in browsers.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- e8ddbb0: Added `item.updateCachedData(data)` in async tree feature, that works similar to the existing `item.updateCachedChildrenIds(childrenIds)` feature
|
|
12
|
+
- 662e2a8: Added stories and documentation on how to use nested DOM rendering for tree structures instead of flat lists,
|
|
13
|
+
which can be used for animating expand/collapse behavior
|
|
14
|
+
- b41e1d2: fixed a bug where ending drag without successful drop doesn't properly reset drag line (#132)
|
|
15
|
+
- b413f74: Fix `aria-posinset` and `aria-level` to be 1-based indexing
|
|
16
|
+
- a250b3b: Fix a bug where expand from the initial keyboard focus fails when rootItemId is an empty string
|
|
17
|
+
- 62867e8: Introduced a short delay before hiding the drag line when leaving a drag target, which helps to reduce flickering of the dragline when moving between items
|
|
18
|
+
- c4579eb: Update keyboard drag and drop to include the focused item in the dragged items
|
|
19
|
+
- 662e2a8: Improved customizability of checkboxes feature (still alpha state), allowing you to customize `propagateCheckedState` and `canCheckFolders` independently
|
|
20
|
+
- 662e2a8: Changed to new buildtool in core packages (now using tsup) to hopefully fix some ESM/CJS integrations
|
|
21
|
+
|
|
22
|
+
## 1.2.1
|
|
23
|
+
|
|
24
|
+
### Patch Changes
|
|
25
|
+
|
|
26
|
+
- 344011a: fixed an issue where dropping items on an empty tree didn't trigger any events
|
|
27
|
+
- 9f418f8: support setting the drag preview with the `setDragImage` option (#115)
|
|
28
|
+
- 309feba: fixed an issue where the drag-forbidden cursor is shown briefly between changing drag targets (#114)
|
|
29
|
+
|
|
3
30
|
## 1.2.0
|
|
4
31
|
|
|
5
32
|
### Minor Changes
|
package/dist/index.d.mts
ADDED
|
@@ -0,0 +1,577 @@
|
|
|
1
|
+
interface DndDataRef {
|
|
2
|
+
lastDragCode?: string;
|
|
3
|
+
lastAllowDrop?: boolean;
|
|
4
|
+
lastDragEnter?: number;
|
|
5
|
+
windowDragEndListener?: () => void;
|
|
6
|
+
}
|
|
7
|
+
interface DndState<T> {
|
|
8
|
+
draggedItems?: ItemInstance<T>[];
|
|
9
|
+
draggingOverItem?: ItemInstance<T>;
|
|
10
|
+
dragTarget?: DragTarget<T>;
|
|
11
|
+
}
|
|
12
|
+
interface DragLineData {
|
|
13
|
+
indent: number;
|
|
14
|
+
top: number;
|
|
15
|
+
left: number;
|
|
16
|
+
width: number;
|
|
17
|
+
}
|
|
18
|
+
type DragTarget<T> = {
|
|
19
|
+
item: ItemInstance<T>;
|
|
20
|
+
childIndex: number;
|
|
21
|
+
insertionIndex: number;
|
|
22
|
+
dragLineIndex: number;
|
|
23
|
+
dragLineLevel: number;
|
|
24
|
+
} | {
|
|
25
|
+
item: ItemInstance<T>;
|
|
26
|
+
};
|
|
27
|
+
declare enum DragTargetPosition {
|
|
28
|
+
Top = "top",
|
|
29
|
+
Bottom = "bottom",
|
|
30
|
+
Item = "item"
|
|
31
|
+
}
|
|
32
|
+
type DragAndDropFeatureDef<T> = {
|
|
33
|
+
state: {
|
|
34
|
+
dnd?: DndState<T> | null;
|
|
35
|
+
};
|
|
36
|
+
config: {
|
|
37
|
+
setDndState?: SetStateFn<DndState<T> | undefined | null>;
|
|
38
|
+
/** Defines the size of the area at the top and bottom of an item where, when an item is dropped, the item willö
|
|
39
|
+
* be placed above or below the item within the same parent, as opposed to being placed inside the item.
|
|
40
|
+
* If `canReorder` is `false`, this is ignored. */
|
|
41
|
+
reorderAreaPercentage?: number;
|
|
42
|
+
canReorder?: boolean;
|
|
43
|
+
canDrag?: (items: ItemInstance<T>[]) => boolean;
|
|
44
|
+
canDrop?: (items: ItemInstance<T>[], target: DragTarget<T>) => boolean;
|
|
45
|
+
indent?: number;
|
|
46
|
+
createForeignDragObject?: (items: ItemInstance<T>[]) => {
|
|
47
|
+
format: string;
|
|
48
|
+
data: any;
|
|
49
|
+
dropEffect?: DataTransfer["dropEffect"];
|
|
50
|
+
effectAllowed?: DataTransfer["effectAllowed"];
|
|
51
|
+
};
|
|
52
|
+
setDragImage?: (items: ItemInstance<T>[]) => {
|
|
53
|
+
imgElement: Element;
|
|
54
|
+
xOffset?: number;
|
|
55
|
+
yOffset?: number;
|
|
56
|
+
};
|
|
57
|
+
/** Checks if a foreign drag object can be dropped on a target, validating that an actual drop can commence based on
|
|
58
|
+
* the data in the DataTransfer object. */
|
|
59
|
+
canDropForeignDragObject?: (dataTransfer: DataTransfer, target: DragTarget<T>) => boolean;
|
|
60
|
+
/** Checks if a droppable visualization should be displayed when dragging a foreign object over a target. Since this
|
|
61
|
+
* is executed on a dragover event, `dataTransfer.getData()` is not available, so `dataTransfer.effectAllowed` or
|
|
62
|
+
* `dataTransfer.types` should be used instead. Before actually completing the drag, @{link canDropForeignDragObject}
|
|
63
|
+
* will be called by HT before applying the drop. */
|
|
64
|
+
canDragForeignDragObjectOver?: (dataTransfer: DataTransfer, target: DragTarget<T>) => boolean;
|
|
65
|
+
onDrop?: (items: ItemInstance<T>[], target: DragTarget<T>) => void | Promise<void>;
|
|
66
|
+
onDropForeignDragObject?: (dataTransfer: DataTransfer, target: DragTarget<T>) => void | Promise<void>;
|
|
67
|
+
onCompleteForeignDrop?: (items: ItemInstance<T>[]) => void;
|
|
68
|
+
};
|
|
69
|
+
treeInstance: {
|
|
70
|
+
getDragTarget: () => DragTarget<T> | null;
|
|
71
|
+
getDragLineData: () => DragLineData | null;
|
|
72
|
+
getDragLineStyle: (topOffset?: number, leftOffset?: number) => Record<string, any>;
|
|
73
|
+
};
|
|
74
|
+
itemInstance: {
|
|
75
|
+
isDragTarget: () => boolean;
|
|
76
|
+
isDragTargetAbove: () => boolean;
|
|
77
|
+
isDragTargetBelow: () => boolean;
|
|
78
|
+
isDraggingOver: () => boolean;
|
|
79
|
+
};
|
|
80
|
+
hotkeys: never;
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
interface ItemMeta {
|
|
84
|
+
itemId: string;
|
|
85
|
+
parentId: string;
|
|
86
|
+
level: number;
|
|
87
|
+
index: number;
|
|
88
|
+
setSize: number;
|
|
89
|
+
posInSet: number;
|
|
90
|
+
}
|
|
91
|
+
interface TreeItemDataRef {
|
|
92
|
+
memoizedValues: Record<string, any>;
|
|
93
|
+
memoizedDeps: Record<string, any[] | undefined>;
|
|
94
|
+
}
|
|
95
|
+
type TreeFeatureDef<T> = {
|
|
96
|
+
state: {
|
|
97
|
+
expandedItems: string[];
|
|
98
|
+
focusedItem: string | null;
|
|
99
|
+
};
|
|
100
|
+
config: {
|
|
101
|
+
isItemFolder: (item: ItemInstance<T>) => boolean;
|
|
102
|
+
getItemName: (item: ItemInstance<T>) => string;
|
|
103
|
+
onPrimaryAction?: (item: ItemInstance<T>) => void;
|
|
104
|
+
scrollToItem?: (item: ItemInstance<T>) => void;
|
|
105
|
+
setExpandedItems?: SetStateFn<string[]>;
|
|
106
|
+
setFocusedItem?: SetStateFn<string | null>;
|
|
107
|
+
};
|
|
108
|
+
treeInstance: {
|
|
109
|
+
/** @internal */
|
|
110
|
+
getItemsMeta: () => ItemMeta[];
|
|
111
|
+
getFocusedItem: () => ItemInstance<T>;
|
|
112
|
+
getRootItem: () => ItemInstance<T>;
|
|
113
|
+
focusNextItem: () => void;
|
|
114
|
+
focusPreviousItem: () => void;
|
|
115
|
+
updateDomFocus: () => void;
|
|
116
|
+
/** Pass to the container rendering the tree children. The `treeLabel` parameter
|
|
117
|
+
* will be passed as `aria-label` parameter, and is recommended to be set. */
|
|
118
|
+
getContainerProps: (treeLabel?: string) => Record<string, any>;
|
|
119
|
+
};
|
|
120
|
+
itemInstance: {
|
|
121
|
+
getId: () => string;
|
|
122
|
+
getKey: () => string;
|
|
123
|
+
getProps: () => Record<string, any>;
|
|
124
|
+
getItemName: () => string;
|
|
125
|
+
getItemData: () => T;
|
|
126
|
+
equals: (other?: ItemInstance<any> | null) => boolean;
|
|
127
|
+
expand: () => void;
|
|
128
|
+
collapse: () => void;
|
|
129
|
+
isExpanded: () => boolean;
|
|
130
|
+
isDescendentOf: (parentId: string) => boolean;
|
|
131
|
+
isFocused: () => boolean;
|
|
132
|
+
isFolder: () => boolean;
|
|
133
|
+
setFocused: () => void;
|
|
134
|
+
getParent: () => ItemInstance<T> | undefined;
|
|
135
|
+
getChildren: () => ItemInstance<T>[];
|
|
136
|
+
getIndexInParent: () => number;
|
|
137
|
+
primaryAction: () => void;
|
|
138
|
+
getTree: () => TreeInstance<T>;
|
|
139
|
+
getItemAbove: () => ItemInstance<T> | undefined;
|
|
140
|
+
getItemBelow: () => ItemInstance<T> | undefined;
|
|
141
|
+
scrollTo: (scrollIntoViewArg?: boolean | ScrollIntoViewOptions) => Promise<void>;
|
|
142
|
+
};
|
|
143
|
+
hotkeys: "focusNextItem" | "focusPreviousItem" | "expandOrDown" | "collapseOrUp" | "focusFirstItem" | "focusLastItem";
|
|
144
|
+
};
|
|
145
|
+
|
|
146
|
+
type InstanceTypeMap = {
|
|
147
|
+
itemInstance: ItemInstance<any>;
|
|
148
|
+
treeInstance: TreeInstance<any>;
|
|
149
|
+
};
|
|
150
|
+
type InstanceBuilder = <T extends keyof InstanceTypeMap>(features: FeatureImplementation[], instanceType: T, buildOpts: (self: any) => any) => [instance: InstanceTypeMap[T], finalize: () => void];
|
|
151
|
+
type MainFeatureDef<T = any> = {
|
|
152
|
+
state: {};
|
|
153
|
+
config: {
|
|
154
|
+
features?: FeatureImplementation<any>[];
|
|
155
|
+
initialState?: Partial<TreeState<T>>;
|
|
156
|
+
state?: Partial<TreeState<T>>;
|
|
157
|
+
setState?: SetStateFn<Partial<TreeState<T>>>;
|
|
158
|
+
instanceBuilder?: InstanceBuilder;
|
|
159
|
+
};
|
|
160
|
+
treeInstance: {
|
|
161
|
+
/** @internal */
|
|
162
|
+
applySubStateUpdate: <K extends keyof TreeState<any>>(stateName: K, updater: Updater<TreeState<T>[K]>) => void;
|
|
163
|
+
setState: SetStateFn<TreeState<T>>;
|
|
164
|
+
getState: () => TreeState<T>;
|
|
165
|
+
setConfig: SetStateFn<TreeConfig<T>>;
|
|
166
|
+
getConfig: () => TreeConfig<T>;
|
|
167
|
+
getItemInstance: (itemId: string) => ItemInstance<T>;
|
|
168
|
+
getItems: () => ItemInstance<T>[];
|
|
169
|
+
registerElement: (element: HTMLElement | null) => void;
|
|
170
|
+
getElement: () => HTMLElement | undefined | null;
|
|
171
|
+
/** @internal */
|
|
172
|
+
getDataRef: <D>() => {
|
|
173
|
+
current: D;
|
|
174
|
+
};
|
|
175
|
+
getHotkeyPresets: () => HotkeysConfig<T>;
|
|
176
|
+
rebuildTree: () => void;
|
|
177
|
+
};
|
|
178
|
+
itemInstance: {
|
|
179
|
+
registerElement: (element: HTMLElement | null) => void;
|
|
180
|
+
getItemMeta: () => ItemMeta;
|
|
181
|
+
getElement: () => HTMLElement | undefined | null;
|
|
182
|
+
/** @internal */
|
|
183
|
+
getDataRef: <D>() => {
|
|
184
|
+
current: D;
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
hotkeys: never;
|
|
188
|
+
};
|
|
189
|
+
|
|
190
|
+
type SelectionFeatureDef<T> = {
|
|
191
|
+
state: {
|
|
192
|
+
selectedItems: string[];
|
|
193
|
+
};
|
|
194
|
+
config: {
|
|
195
|
+
setSelectedItems?: SetStateFn<string[]>;
|
|
196
|
+
};
|
|
197
|
+
treeInstance: {
|
|
198
|
+
setSelectedItems: (selectedItems: string[]) => void;
|
|
199
|
+
getSelectedItems: () => ItemInstance<T>[];
|
|
200
|
+
};
|
|
201
|
+
itemInstance: {
|
|
202
|
+
select: () => void;
|
|
203
|
+
deselect: () => void;
|
|
204
|
+
toggleSelect: () => void;
|
|
205
|
+
isSelected: () => boolean;
|
|
206
|
+
selectUpTo: (ctrl: boolean) => void;
|
|
207
|
+
};
|
|
208
|
+
hotkeys: "toggleSelectedItem" | "selectUpwards" | "selectDownwards" | "selectAll";
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
interface HotkeyConfig<T> {
|
|
212
|
+
hotkey: string;
|
|
213
|
+
canRepeat?: boolean;
|
|
214
|
+
allowWhenInputFocused?: boolean;
|
|
215
|
+
isEnabled?: (tree: TreeInstance<T>) => boolean;
|
|
216
|
+
preventDefault?: boolean;
|
|
217
|
+
handler: (e: KeyboardEvent, tree: TreeInstance<T>) => void;
|
|
218
|
+
}
|
|
219
|
+
interface HotkeysCoreDataRef {
|
|
220
|
+
keydownHandler?: (e: KeyboardEvent) => void;
|
|
221
|
+
keyupHandler?: (e: KeyboardEvent) => void;
|
|
222
|
+
resetHandler?: (e: FocusEvent) => void;
|
|
223
|
+
pressedKeys: Set<string>;
|
|
224
|
+
}
|
|
225
|
+
type HotkeysCoreFeatureDef<T> = {
|
|
226
|
+
state: {};
|
|
227
|
+
config: {
|
|
228
|
+
hotkeys?: CustomHotkeysConfig<T>;
|
|
229
|
+
onTreeHotkey?: (name: string, e: KeyboardEvent) => void;
|
|
230
|
+
/** Do not handle key inputs while an HTML input element is focused */
|
|
231
|
+
ignoreHotkeysOnInputs?: boolean;
|
|
232
|
+
};
|
|
233
|
+
treeInstance: {};
|
|
234
|
+
itemInstance: {};
|
|
235
|
+
hotkeys: never;
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
type TreeDataLoader<T> = {
|
|
239
|
+
getItem: (itemId: string) => T | Promise<T>;
|
|
240
|
+
getChildren: (itemId: string) => string[] | Promise<string[]>;
|
|
241
|
+
} | {
|
|
242
|
+
getItem: (itemId: string) => T | Promise<T>;
|
|
243
|
+
getChildrenWithData: (itemId: string) => {
|
|
244
|
+
id: string;
|
|
245
|
+
data: T;
|
|
246
|
+
}[] | Promise<{
|
|
247
|
+
id: string;
|
|
248
|
+
data: T;
|
|
249
|
+
}[]>;
|
|
250
|
+
};
|
|
251
|
+
type SyncDataLoaderFeatureDef<T> = {
|
|
252
|
+
state: {};
|
|
253
|
+
config: {
|
|
254
|
+
rootItemId: string;
|
|
255
|
+
dataLoader: TreeDataLoader<T>;
|
|
256
|
+
};
|
|
257
|
+
treeInstance: {
|
|
258
|
+
retrieveItemData: (itemId: string) => T;
|
|
259
|
+
retrieveChildrenIds: (itemId: string) => string[];
|
|
260
|
+
};
|
|
261
|
+
itemInstance: {
|
|
262
|
+
isLoading: () => boolean;
|
|
263
|
+
};
|
|
264
|
+
hotkeys: never;
|
|
265
|
+
};
|
|
266
|
+
|
|
267
|
+
interface AsyncDataLoaderDataRef<T = any> {
|
|
268
|
+
itemData: Record<string, T>;
|
|
269
|
+
childrenIds: Record<string, string[]>;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* @category Async Data Loader/General
|
|
273
|
+
* */
|
|
274
|
+
type AsyncDataLoaderFeatureDef<T> = {
|
|
275
|
+
state: {
|
|
276
|
+
loadingItemData: string[];
|
|
277
|
+
loadingItemChildrens: string[];
|
|
278
|
+
};
|
|
279
|
+
config: {
|
|
280
|
+
rootItemId: string;
|
|
281
|
+
/** Will be called when HT retrieves item data for an item whose item data is asynchronously being loaded.
|
|
282
|
+
* Can be used to create placeholder data to use for rendering the tree item while it is loaded. If not defined,
|
|
283
|
+
* the tree item data will be null. */
|
|
284
|
+
createLoadingItemData?: () => T;
|
|
285
|
+
setLoadingItemData?: SetStateFn<string[]>;
|
|
286
|
+
setLoadingItemChildrens?: SetStateFn<string[]>;
|
|
287
|
+
onLoadedItem?: (itemId: string, item: T) => void;
|
|
288
|
+
onLoadedChildren?: (itemId: string, childrenIds: string[]) => void;
|
|
289
|
+
};
|
|
290
|
+
treeInstance: SyncDataLoaderFeatureDef<T>["treeInstance"] & {
|
|
291
|
+
/** @deprecated use loadItemData instead */
|
|
292
|
+
waitForItemDataLoaded: (itemId: string) => Promise<void>;
|
|
293
|
+
/** @deprecated use loadChildrenIds instead */
|
|
294
|
+
waitForItemChildrenLoaded: (itemId: string) => Promise<void>;
|
|
295
|
+
loadItemData: (itemId: string) => Promise<T>;
|
|
296
|
+
loadChildrenIds: (itemId: string) => Promise<string[]>;
|
|
297
|
+
};
|
|
298
|
+
itemInstance: SyncDataLoaderFeatureDef<T>["itemInstance"] & {
|
|
299
|
+
/** Invalidate fetched data for item, and triggers a refetch and subsequent rerender if the item is visible
|
|
300
|
+
* @param optimistic If true, the item will not trigger a state update on `loadingItemData`, and
|
|
301
|
+
* the tree will continue to display the old data until the new data has loaded. */
|
|
302
|
+
invalidateItemData: (optimistic?: boolean) => Promise<void>;
|
|
303
|
+
/** Invalidate fetched children ids for item, and triggers a refetch and subsequent rerender if the item is visible
|
|
304
|
+
* @param optimistic If true, the item will not trigger a state update on `loadingItemChildrens`, and
|
|
305
|
+
* the tree will continue to display the old data until the new data has loaded. */
|
|
306
|
+
invalidateChildrenIds: (optimistic?: boolean) => Promise<void>;
|
|
307
|
+
updateCachedData: (data: T) => void;
|
|
308
|
+
updateCachedChildrenIds: (childrenIds: string[]) => void;
|
|
309
|
+
isLoading: () => boolean;
|
|
310
|
+
};
|
|
311
|
+
hotkeys: SyncDataLoaderFeatureDef<T>["hotkeys"];
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
interface SearchFeatureDataRef<T = any> extends HotkeysCoreDataRef {
|
|
315
|
+
matchingItems: ItemInstance<T>[];
|
|
316
|
+
searchInput: HTMLInputElement | null;
|
|
317
|
+
}
|
|
318
|
+
type SearchFeatureDef<T> = {
|
|
319
|
+
state: {
|
|
320
|
+
search: string | null;
|
|
321
|
+
};
|
|
322
|
+
config: {
|
|
323
|
+
setSearch?: SetStateFn<string | null>;
|
|
324
|
+
onOpenSearch?: () => void;
|
|
325
|
+
onCloseSearch?: () => void;
|
|
326
|
+
isSearchMatchingItem?: (search: string, item: ItemInstance<T>) => boolean;
|
|
327
|
+
};
|
|
328
|
+
treeInstance: {
|
|
329
|
+
setSearch: (search: string | null) => void;
|
|
330
|
+
openSearch: (initialValue?: string) => void;
|
|
331
|
+
closeSearch: () => void;
|
|
332
|
+
isSearchOpen: () => boolean;
|
|
333
|
+
getSearchValue: () => string;
|
|
334
|
+
registerSearchInputElement: (element: HTMLInputElement | null) => void;
|
|
335
|
+
getSearchInputElement: () => HTMLInputElement | null;
|
|
336
|
+
getSearchInputElementProps: () => any;
|
|
337
|
+
getSearchMatchingItems: () => ItemInstance<T>[];
|
|
338
|
+
};
|
|
339
|
+
itemInstance: {
|
|
340
|
+
isMatchingSearch: () => boolean;
|
|
341
|
+
};
|
|
342
|
+
hotkeys: "openSearch" | "closeSearch" | "submitSearch" | "nextSearchItem" | "previousSearchItem";
|
|
343
|
+
};
|
|
344
|
+
|
|
345
|
+
type RenamingFeatureDef<T> = {
|
|
346
|
+
state: {
|
|
347
|
+
renamingItem?: string | null;
|
|
348
|
+
renamingValue?: string;
|
|
349
|
+
};
|
|
350
|
+
config: {
|
|
351
|
+
setRenamingItem?: SetStateFn<string | null | undefined>;
|
|
352
|
+
setRenamingValue?: SetStateFn<string | undefined>;
|
|
353
|
+
canRename?: (item: ItemInstance<T>) => boolean;
|
|
354
|
+
onRename?: (item: ItemInstance<T>, value: string) => void;
|
|
355
|
+
};
|
|
356
|
+
treeInstance: {
|
|
357
|
+
getRenamingItem: () => ItemInstance<T> | null;
|
|
358
|
+
getRenamingValue: () => string;
|
|
359
|
+
abortRenaming: () => void;
|
|
360
|
+
completeRenaming: () => void;
|
|
361
|
+
isRenamingItem: () => boolean;
|
|
362
|
+
};
|
|
363
|
+
itemInstance: {
|
|
364
|
+
getRenameInputProps: () => any;
|
|
365
|
+
canRename: () => boolean;
|
|
366
|
+
isRenaming: () => boolean;
|
|
367
|
+
startRenaming: () => void;
|
|
368
|
+
};
|
|
369
|
+
hotkeys: "renameItem" | "abortRenaming" | "completeRenaming";
|
|
370
|
+
};
|
|
371
|
+
|
|
372
|
+
interface ExpandAllDataRef {
|
|
373
|
+
}
|
|
374
|
+
type ExpandAllFeatureDef = {
|
|
375
|
+
state: {};
|
|
376
|
+
config: {};
|
|
377
|
+
treeInstance: {
|
|
378
|
+
expandAll: (cancelToken?: {
|
|
379
|
+
current: boolean;
|
|
380
|
+
}) => Promise<void>;
|
|
381
|
+
collapseAll: () => void;
|
|
382
|
+
};
|
|
383
|
+
itemInstance: {
|
|
384
|
+
expandAll: (cancelToken?: {
|
|
385
|
+
current: boolean;
|
|
386
|
+
}) => Promise<void>;
|
|
387
|
+
collapseAll: () => void;
|
|
388
|
+
};
|
|
389
|
+
hotkeys: "expandSelected" | "collapseSelected";
|
|
390
|
+
};
|
|
391
|
+
|
|
392
|
+
interface PropMemoizationDataRef {
|
|
393
|
+
memo?: {
|
|
394
|
+
tree?: Record<string, any>;
|
|
395
|
+
item?: Record<string, any>;
|
|
396
|
+
search?: Record<string, any>;
|
|
397
|
+
rename?: Record<string, any>;
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
type PropMemoizationFeatureDef = {
|
|
401
|
+
state: {};
|
|
402
|
+
config: {};
|
|
403
|
+
treeInstance: {};
|
|
404
|
+
itemInstance: {};
|
|
405
|
+
hotkeys: never;
|
|
406
|
+
};
|
|
407
|
+
|
|
408
|
+
interface KDndDataRef {
|
|
409
|
+
kDndDataTransfer: DataTransfer | undefined;
|
|
410
|
+
}
|
|
411
|
+
declare enum AssistiveDndState {
|
|
412
|
+
None = 0,
|
|
413
|
+
Started = 1,
|
|
414
|
+
Dragging = 2,
|
|
415
|
+
Completed = 3,
|
|
416
|
+
Aborted = 4
|
|
417
|
+
}
|
|
418
|
+
type KeyboardDragAndDropFeatureDef<T> = {
|
|
419
|
+
state: {
|
|
420
|
+
assistiveDndState?: AssistiveDndState | null;
|
|
421
|
+
};
|
|
422
|
+
config: {
|
|
423
|
+
setAssistiveDndState?: SetStateFn<AssistiveDndState | undefined | null>;
|
|
424
|
+
onStartKeyboardDrag?: (items: ItemInstance<T>[]) => void;
|
|
425
|
+
};
|
|
426
|
+
treeInstance: {
|
|
427
|
+
startKeyboardDrag: (items: ItemInstance<T>[]) => void;
|
|
428
|
+
startKeyboardDragOnForeignObject: (dataTransfer: DataTransfer) => void;
|
|
429
|
+
stopKeyboardDrag: () => void;
|
|
430
|
+
};
|
|
431
|
+
itemInstance: {};
|
|
432
|
+
hotkeys: "startDrag" | "cancelDrag" | "completeDrag" | "dragUp" | "dragDown";
|
|
433
|
+
};
|
|
434
|
+
|
|
435
|
+
declare enum CheckedState {
|
|
436
|
+
Checked = "checked",
|
|
437
|
+
Unchecked = "unchecked",
|
|
438
|
+
Indeterminate = "indeterminate"
|
|
439
|
+
}
|
|
440
|
+
type CheckboxesFeatureDef<T> = {
|
|
441
|
+
state: {
|
|
442
|
+
checkedItems: string[];
|
|
443
|
+
};
|
|
444
|
+
config: {
|
|
445
|
+
setCheckedItems?: SetStateFn<string[]>;
|
|
446
|
+
canCheckFolders?: boolean;
|
|
447
|
+
propagateCheckedState?: boolean;
|
|
448
|
+
};
|
|
449
|
+
treeInstance: {
|
|
450
|
+
setCheckedItems: (checkedItems: string[]) => void;
|
|
451
|
+
};
|
|
452
|
+
itemInstance: {
|
|
453
|
+
setChecked: () => void;
|
|
454
|
+
setUnchecked: () => void;
|
|
455
|
+
toggleCheckedState: () => void;
|
|
456
|
+
getCheckedState: () => CheckedState;
|
|
457
|
+
getCheckboxProps: () => Record<string, any>;
|
|
458
|
+
};
|
|
459
|
+
hotkeys: never;
|
|
460
|
+
};
|
|
461
|
+
|
|
462
|
+
type Updater<T> = T | ((old: T) => T);
|
|
463
|
+
type SetStateFn<T> = (updaterOrValue: Updater<T>) => void;
|
|
464
|
+
type FeatureDef = {
|
|
465
|
+
state: any;
|
|
466
|
+
config: any;
|
|
467
|
+
treeInstance: any;
|
|
468
|
+
itemInstance: any;
|
|
469
|
+
hotkeys: string;
|
|
470
|
+
};
|
|
471
|
+
type EmptyFeatureDef = {
|
|
472
|
+
state: {};
|
|
473
|
+
config: {};
|
|
474
|
+
treeInstance: {};
|
|
475
|
+
itemInstance: {};
|
|
476
|
+
hotkeys: never;
|
|
477
|
+
};
|
|
478
|
+
type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (x: infer R) => any ? R : never;
|
|
479
|
+
type MergedFeatures<F extends FeatureDef> = {
|
|
480
|
+
state: UnionToIntersection<F["state"]>;
|
|
481
|
+
config: UnionToIntersection<F["config"]>;
|
|
482
|
+
treeInstance: UnionToIntersection<F["treeInstance"]>;
|
|
483
|
+
itemInstance: UnionToIntersection<F["itemInstance"]>;
|
|
484
|
+
hotkeys: F["hotkeys"];
|
|
485
|
+
};
|
|
486
|
+
type RegisteredFeatures<T> = MainFeatureDef<T> | TreeFeatureDef<T> | SelectionFeatureDef<T> | CheckboxesFeatureDef<T> | DragAndDropFeatureDef<T> | KeyboardDragAndDropFeatureDef<T> | HotkeysCoreFeatureDef<T> | SyncDataLoaderFeatureDef<T> | AsyncDataLoaderFeatureDef<T> | SearchFeatureDef<T> | RenamingFeatureDef<T> | ExpandAllFeatureDef | PropMemoizationFeatureDef;
|
|
487
|
+
type TreeStateType<T> = MergedFeatures<RegisteredFeatures<T>>["state"];
|
|
488
|
+
interface TreeState<T> extends TreeStateType<T> {
|
|
489
|
+
}
|
|
490
|
+
type TreeConfigType<T> = MergedFeatures<RegisteredFeatures<T>>["config"];
|
|
491
|
+
interface TreeConfig<T> extends TreeConfigType<T> {
|
|
492
|
+
}
|
|
493
|
+
type TreeInstanceType<T> = MergedFeatures<RegisteredFeatures<T>>["treeInstance"];
|
|
494
|
+
interface TreeInstance<T> extends TreeInstanceType<T> {
|
|
495
|
+
}
|
|
496
|
+
type ItemInstanceType<T> = MergedFeatures<RegisteredFeatures<T>>["itemInstance"];
|
|
497
|
+
interface ItemInstance<T> extends ItemInstanceType<T> {
|
|
498
|
+
}
|
|
499
|
+
type HotkeyName = MergedFeatures<RegisteredFeatures<any>>["hotkeys"];
|
|
500
|
+
type HotkeysConfig<T> = Record<HotkeyName, HotkeyConfig<T>>;
|
|
501
|
+
type CustomHotkeysConfig<T> = Partial<Record<HotkeyName | `custom${string}`, Partial<HotkeyConfig<T>>>>;
|
|
502
|
+
type MayReturnNull<T extends (...x: any[]) => any> = (...args: Parameters<T>) => ReturnType<T> | null;
|
|
503
|
+
type ItemInstanceOpts<Key extends keyof ItemInstance<any>> = {
|
|
504
|
+
item: ItemInstance<any>;
|
|
505
|
+
tree: TreeInstance<any>;
|
|
506
|
+
itemId: string;
|
|
507
|
+
prev?: MayReturnNull<ItemInstance<any>[Key]>;
|
|
508
|
+
};
|
|
509
|
+
type TreeInstanceOpts<Key extends keyof TreeInstance<any>> = {
|
|
510
|
+
tree: TreeInstance<any>;
|
|
511
|
+
prev?: MayReturnNull<TreeInstance<any>[Key]>;
|
|
512
|
+
};
|
|
513
|
+
type FeatureImplementation<T = any> = {
|
|
514
|
+
key?: string;
|
|
515
|
+
deps?: string[];
|
|
516
|
+
overwrites?: string[];
|
|
517
|
+
stateHandlerNames?: Partial<Record<keyof TreeState<T>, keyof TreeConfig<T>>>;
|
|
518
|
+
getInitialState?: (initialState: Partial<TreeState<T>>, tree: TreeInstance<T>) => Partial<TreeState<T>>;
|
|
519
|
+
getDefaultConfig?: (defaultConfig: Partial<TreeConfig<T>>, tree: TreeInstance<T>) => Partial<TreeConfig<T>>;
|
|
520
|
+
treeInstance?: {
|
|
521
|
+
[key in keyof TreeInstance<T>]?: (opts: TreeInstanceOpts<key>, ...args: Parameters<TreeInstance<T>[key]>) => void;
|
|
522
|
+
};
|
|
523
|
+
itemInstance?: {
|
|
524
|
+
[key in keyof ItemInstance<T>]?: (opts: ItemInstanceOpts<key>, ...args: Parameters<ItemInstance<T>[key]>) => void;
|
|
525
|
+
};
|
|
526
|
+
onTreeMount?: (instance: TreeInstance<T>, treeElement: HTMLElement) => void;
|
|
527
|
+
onTreeUnmount?: (instance: TreeInstance<T>, treeElement: HTMLElement) => void;
|
|
528
|
+
onItemMount?: (instance: ItemInstance<T>, itemElement: HTMLElement, tree: TreeInstance<T>) => void;
|
|
529
|
+
onItemUnmount?: (instance: ItemInstance<T>, itemElement: HTMLElement, tree: TreeInstance<T>) => void;
|
|
530
|
+
hotkeys?: Partial<HotkeysConfig<T>>;
|
|
531
|
+
};
|
|
532
|
+
|
|
533
|
+
declare const createTree: <T>(initialConfig: TreeConfig<T>) => TreeInstance<T>;
|
|
534
|
+
|
|
535
|
+
declare const selectionFeature: FeatureImplementation;
|
|
536
|
+
|
|
537
|
+
declare const checkboxesFeature: FeatureImplementation;
|
|
538
|
+
|
|
539
|
+
declare const hotkeysCoreFeature: FeatureImplementation;
|
|
540
|
+
|
|
541
|
+
declare const asyncDataLoaderFeature: FeatureImplementation;
|
|
542
|
+
|
|
543
|
+
declare const syncDataLoaderFeature: FeatureImplementation;
|
|
544
|
+
|
|
545
|
+
declare const dragAndDropFeature: FeatureImplementation;
|
|
546
|
+
|
|
547
|
+
declare const keyboardDragAndDropFeature: FeatureImplementation;
|
|
548
|
+
|
|
549
|
+
declare const searchFeature: FeatureImplementation;
|
|
550
|
+
|
|
551
|
+
declare const renamingFeature: FeatureImplementation;
|
|
552
|
+
|
|
553
|
+
declare const expandAllFeature: FeatureImplementation;
|
|
554
|
+
|
|
555
|
+
declare const propMemoizationFeature: FeatureImplementation;
|
|
556
|
+
|
|
557
|
+
declare const createOnDropHandler: <T>(onChangeChildren: (item: ItemInstance<T>, newChildren: string[]) => void) => (items: ItemInstance<T>[], target: DragTarget<T>) => Promise<void>;
|
|
558
|
+
|
|
559
|
+
declare const insertItemsAtTarget: <T>(itemIds: string[], target: DragTarget<T>, onChangeChildren: (item: ItemInstance<T>, newChildrenIds: string[]) => Promise<void> | void) => Promise<void>;
|
|
560
|
+
|
|
561
|
+
declare const removeItemsFromParents: <T>(movedItems: ItemInstance<T>[], onChangeChildren: (item: ItemInstance<T>, newChildrenIds: string[]) => void | Promise<void>) => Promise<void>;
|
|
562
|
+
|
|
563
|
+
declare const buildProxiedInstance: InstanceBuilder;
|
|
564
|
+
|
|
565
|
+
declare const buildStaticInstance: InstanceBuilder;
|
|
566
|
+
|
|
567
|
+
declare function makeStateUpdater<K extends keyof TreeState<any>>(key: K, instance: unknown): SetStateFn<TreeState<any>[K]>;
|
|
568
|
+
|
|
569
|
+
declare const isOrderedDragTarget: <T>(dragTarget: DragTarget<T>) => dragTarget is {
|
|
570
|
+
item: ItemInstance<T>;
|
|
571
|
+
childIndex: number;
|
|
572
|
+
insertionIndex: number;
|
|
573
|
+
dragLineIndex: number;
|
|
574
|
+
dragLineLevel: number;
|
|
575
|
+
};
|
|
576
|
+
|
|
577
|
+
export { AssistiveDndState, type AsyncDataLoaderDataRef, type AsyncDataLoaderFeatureDef, type CheckboxesFeatureDef, CheckedState, type CustomHotkeysConfig, type DndDataRef, type DndState, type DragAndDropFeatureDef, type DragLineData, type DragTarget, DragTargetPosition, type EmptyFeatureDef, type ExpandAllDataRef, type ExpandAllFeatureDef, type FeatureDef, type FeatureImplementation, type HotkeyConfig, type HotkeyName, type HotkeysConfig, type HotkeysCoreDataRef, type HotkeysCoreFeatureDef, type InstanceBuilder, type ItemInstance, type ItemInstanceOpts, type ItemMeta, type KDndDataRef, type KeyboardDragAndDropFeatureDef, type MainFeatureDef, type PropMemoizationDataRef, type PropMemoizationFeatureDef, type RegisteredFeatures, type RenamingFeatureDef, type SearchFeatureDataRef, type SearchFeatureDef, type SelectionFeatureDef, type SetStateFn, type SyncDataLoaderFeatureDef, type TreeConfig, type TreeDataLoader, type TreeFeatureDef, type TreeInstance, type TreeInstanceOpts, type TreeItemDataRef, type TreeState, type Updater, asyncDataLoaderFeature, buildProxiedInstance, buildStaticInstance, checkboxesFeature, createOnDropHandler, createTree, dragAndDropFeature, expandAllFeature, hotkeysCoreFeature, insertItemsAtTarget, isOrderedDragTarget, keyboardDragAndDropFeature, makeStateUpdater, propMemoizationFeature, removeItemsFromParents, renamingFeature, searchFeature, selectionFeature, syncDataLoaderFeature };
|