@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.
Files changed (183) hide show
  1. package/CHANGELOG.md +27 -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 -2
  8. package/src/features/async-data-loader/feature.ts +9 -4
  9. package/src/features/async-data-loader/types.ts +2 -0
  10. package/src/features/checkboxes/checkboxes.spec.ts +149 -0
  11. package/src/features/checkboxes/feature.ts +134 -0
  12. package/src/features/checkboxes/types.ts +29 -0
  13. package/src/features/drag-and-drop/drag-and-drop.spec.ts +11 -2
  14. package/src/features/drag-and-drop/feature.ts +88 -17
  15. package/src/features/drag-and-drop/types.ts +22 -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/sync-data-loader/feature.ts +5 -1
  19. package/src/features/tree/feature.ts +9 -3
  20. package/src/features/tree/tree.spec.ts +14 -4
  21. package/src/features/tree/types.ts +3 -2
  22. package/src/index.ts +2 -0
  23. package/src/test-utils/test-tree-do.ts +2 -0
  24. package/src/test-utils/test-tree.ts +1 -0
  25. package/src/types/core.ts +2 -0
  26. package/tsconfig.json +1 -4
  27. package/vitest.config.ts +3 -1
  28. package/lib/cjs/core/build-proxified-instance.d.ts +0 -2
  29. package/lib/cjs/core/build-proxified-instance.js +0 -58
  30. package/lib/cjs/core/build-static-instance.d.ts +0 -2
  31. package/lib/cjs/core/build-static-instance.js +0 -26
  32. package/lib/cjs/core/create-tree.d.ts +0 -2
  33. package/lib/cjs/core/create-tree.js +0 -182
  34. package/lib/cjs/features/async-data-loader/feature.d.ts +0 -2
  35. package/lib/cjs/features/async-data-loader/feature.js +0 -135
  36. package/lib/cjs/features/async-data-loader/types.d.ts +0 -47
  37. package/lib/cjs/features/async-data-loader/types.js +0 -2
  38. package/lib/cjs/features/drag-and-drop/feature.d.ts +0 -2
  39. package/lib/cjs/features/drag-and-drop/feature.js +0 -179
  40. package/lib/cjs/features/drag-and-drop/types.d.ts +0 -66
  41. package/lib/cjs/features/drag-and-drop/types.js +0 -9
  42. package/lib/cjs/features/drag-and-drop/utils.d.ts +0 -27
  43. package/lib/cjs/features/drag-and-drop/utils.js +0 -182
  44. package/lib/cjs/features/expand-all/feature.d.ts +0 -2
  45. package/lib/cjs/features/expand-all/feature.js +0 -70
  46. package/lib/cjs/features/expand-all/types.d.ts +0 -19
  47. package/lib/cjs/features/expand-all/types.js +0 -2
  48. package/lib/cjs/features/hotkeys-core/feature.d.ts +0 -2
  49. package/lib/cjs/features/hotkeys-core/feature.js +0 -107
  50. package/lib/cjs/features/hotkeys-core/types.d.ts +0 -27
  51. package/lib/cjs/features/hotkeys-core/types.js +0 -2
  52. package/lib/cjs/features/keyboard-drag-and-drop/feature.d.ts +0 -2
  53. package/lib/cjs/features/keyboard-drag-and-drop/feature.js +0 -206
  54. package/lib/cjs/features/keyboard-drag-and-drop/types.d.ts +0 -27
  55. package/lib/cjs/features/keyboard-drag-and-drop/types.js +0 -11
  56. package/lib/cjs/features/main/types.d.ts +0 -45
  57. package/lib/cjs/features/main/types.js +0 -2
  58. package/lib/cjs/features/prop-memoization/feature.d.ts +0 -2
  59. package/lib/cjs/features/prop-memoization/feature.js +0 -70
  60. package/lib/cjs/features/prop-memoization/types.d.ts +0 -15
  61. package/lib/cjs/features/prop-memoization/types.js +0 -2
  62. package/lib/cjs/features/renaming/feature.d.ts +0 -2
  63. package/lib/cjs/features/renaming/feature.js +0 -86
  64. package/lib/cjs/features/renaming/types.d.ts +0 -27
  65. package/lib/cjs/features/renaming/types.js +0 -2
  66. package/lib/cjs/features/search/feature.d.ts +0 -2
  67. package/lib/cjs/features/search/feature.js +0 -119
  68. package/lib/cjs/features/search/types.d.ts +0 -32
  69. package/lib/cjs/features/search/types.js +0 -2
  70. package/lib/cjs/features/selection/feature.d.ts +0 -2
  71. package/lib/cjs/features/selection/feature.js +0 -132
  72. package/lib/cjs/features/selection/types.d.ts +0 -21
  73. package/lib/cjs/features/selection/types.js +0 -2
  74. package/lib/cjs/features/sync-data-loader/feature.d.ts +0 -2
  75. package/lib/cjs/features/sync-data-loader/feature.js +0 -49
  76. package/lib/cjs/features/sync-data-loader/types.d.ts +0 -28
  77. package/lib/cjs/features/sync-data-loader/types.js +0 -2
  78. package/lib/cjs/features/tree/feature.d.ts +0 -2
  79. package/lib/cjs/features/tree/feature.js +0 -240
  80. package/lib/cjs/features/tree/types.d.ts +0 -62
  81. package/lib/cjs/features/tree/types.js +0 -2
  82. package/lib/cjs/index.d.ts +0 -31
  83. package/lib/cjs/index.js +0 -49
  84. package/lib/cjs/mddocs-entry.d.ts +0 -121
  85. package/lib/cjs/mddocs-entry.js +0 -17
  86. package/lib/cjs/test-utils/test-tree-do.d.ts +0 -23
  87. package/lib/cjs/test-utils/test-tree-do.js +0 -112
  88. package/lib/cjs/test-utils/test-tree-expect.d.ts +0 -17
  89. package/lib/cjs/test-utils/test-tree-expect.js +0 -66
  90. package/lib/cjs/test-utils/test-tree.d.ts +0 -48
  91. package/lib/cjs/test-utils/test-tree.js +0 -207
  92. package/lib/cjs/types/core.d.ts +0 -83
  93. package/lib/cjs/types/core.js +0 -2
  94. package/lib/cjs/types/deep-merge.d.ts +0 -13
  95. package/lib/cjs/types/deep-merge.js +0 -2
  96. package/lib/cjs/utilities/create-on-drop-handler.d.ts +0 -3
  97. package/lib/cjs/utilities/create-on-drop-handler.js +0 -20
  98. package/lib/cjs/utilities/errors.d.ts +0 -2
  99. package/lib/cjs/utilities/errors.js +0 -9
  100. package/lib/cjs/utilities/insert-items-at-target.d.ts +0 -3
  101. package/lib/cjs/utilities/insert-items-at-target.js +0 -40
  102. package/lib/cjs/utilities/remove-items-from-parents.d.ts +0 -2
  103. package/lib/cjs/utilities/remove-items-from-parents.js +0 -32
  104. package/lib/cjs/utils.d.ts +0 -6
  105. package/lib/cjs/utils.js +0 -53
  106. package/lib/esm/core/build-proxified-instance.d.ts +0 -2
  107. package/lib/esm/core/build-proxified-instance.js +0 -54
  108. package/lib/esm/core/build-static-instance.d.ts +0 -2
  109. package/lib/esm/core/build-static-instance.js +0 -22
  110. package/lib/esm/core/create-tree.d.ts +0 -2
  111. package/lib/esm/core/create-tree.js +0 -178
  112. package/lib/esm/features/async-data-loader/feature.d.ts +0 -2
  113. package/lib/esm/features/async-data-loader/feature.js +0 -132
  114. package/lib/esm/features/async-data-loader/types.d.ts +0 -47
  115. package/lib/esm/features/async-data-loader/types.js +0 -1
  116. package/lib/esm/features/drag-and-drop/feature.d.ts +0 -2
  117. package/lib/esm/features/drag-and-drop/feature.js +0 -176
  118. package/lib/esm/features/drag-and-drop/types.d.ts +0 -66
  119. package/lib/esm/features/drag-and-drop/types.js +0 -6
  120. package/lib/esm/features/drag-and-drop/utils.d.ts +0 -27
  121. package/lib/esm/features/drag-and-drop/utils.js +0 -172
  122. package/lib/esm/features/expand-all/feature.d.ts +0 -2
  123. package/lib/esm/features/expand-all/feature.js +0 -67
  124. package/lib/esm/features/expand-all/types.d.ts +0 -19
  125. package/lib/esm/features/expand-all/types.js +0 -1
  126. package/lib/esm/features/hotkeys-core/feature.d.ts +0 -2
  127. package/lib/esm/features/hotkeys-core/feature.js +0 -104
  128. package/lib/esm/features/hotkeys-core/types.d.ts +0 -27
  129. package/lib/esm/features/hotkeys-core/types.js +0 -1
  130. package/lib/esm/features/keyboard-drag-and-drop/feature.d.ts +0 -2
  131. package/lib/esm/features/keyboard-drag-and-drop/feature.js +0 -203
  132. package/lib/esm/features/keyboard-drag-and-drop/types.d.ts +0 -27
  133. package/lib/esm/features/keyboard-drag-and-drop/types.js +0 -8
  134. package/lib/esm/features/main/types.d.ts +0 -45
  135. package/lib/esm/features/main/types.js +0 -1
  136. package/lib/esm/features/prop-memoization/feature.d.ts +0 -2
  137. package/lib/esm/features/prop-memoization/feature.js +0 -67
  138. package/lib/esm/features/prop-memoization/types.d.ts +0 -15
  139. package/lib/esm/features/prop-memoization/types.js +0 -1
  140. package/lib/esm/features/renaming/feature.d.ts +0 -2
  141. package/lib/esm/features/renaming/feature.js +0 -83
  142. package/lib/esm/features/renaming/types.d.ts +0 -27
  143. package/lib/esm/features/renaming/types.js +0 -1
  144. package/lib/esm/features/search/feature.d.ts +0 -2
  145. package/lib/esm/features/search/feature.js +0 -116
  146. package/lib/esm/features/search/types.d.ts +0 -32
  147. package/lib/esm/features/search/types.js +0 -1
  148. package/lib/esm/features/selection/feature.d.ts +0 -2
  149. package/lib/esm/features/selection/feature.js +0 -129
  150. package/lib/esm/features/selection/types.d.ts +0 -21
  151. package/lib/esm/features/selection/types.js +0 -1
  152. package/lib/esm/features/sync-data-loader/feature.d.ts +0 -2
  153. package/lib/esm/features/sync-data-loader/feature.js +0 -46
  154. package/lib/esm/features/sync-data-loader/types.d.ts +0 -28
  155. package/lib/esm/features/sync-data-loader/types.js +0 -1
  156. package/lib/esm/features/tree/feature.d.ts +0 -2
  157. package/lib/esm/features/tree/feature.js +0 -237
  158. package/lib/esm/features/tree/types.d.ts +0 -62
  159. package/lib/esm/features/tree/types.js +0 -1
  160. package/lib/esm/index.d.ts +0 -31
  161. package/lib/esm/index.js +0 -30
  162. package/lib/esm/mddocs-entry.d.ts +0 -121
  163. package/lib/esm/mddocs-entry.js +0 -1
  164. package/lib/esm/test-utils/test-tree-do.d.ts +0 -23
  165. package/lib/esm/test-utils/test-tree-do.js +0 -108
  166. package/lib/esm/test-utils/test-tree-expect.d.ts +0 -17
  167. package/lib/esm/test-utils/test-tree-expect.js +0 -62
  168. package/lib/esm/test-utils/test-tree.d.ts +0 -48
  169. package/lib/esm/test-utils/test-tree.js +0 -203
  170. package/lib/esm/types/core.d.ts +0 -83
  171. package/lib/esm/types/core.js +0 -1
  172. package/lib/esm/types/deep-merge.d.ts +0 -13
  173. package/lib/esm/types/deep-merge.js +0 -1
  174. package/lib/esm/utilities/create-on-drop-handler.d.ts +0 -3
  175. package/lib/esm/utilities/create-on-drop-handler.js +0 -16
  176. package/lib/esm/utilities/errors.d.ts +0 -2
  177. package/lib/esm/utilities/errors.js +0 -4
  178. package/lib/esm/utilities/insert-items-at-target.d.ts +0 -3
  179. package/lib/esm/utilities/insert-items-at-target.js +0 -36
  180. package/lib/esm/utilities/remove-items-from-parents.d.ts +0 -2
  181. package/lib/esm/utilities/remove-items-from-parents.js +0 -28
  182. package/lib/esm/utils.d.ts +0 -6
  183. package/lib/esm/utils.js +0 -46
@@ -1,28 +0,0 @@
1
- export type TreeDataLoader<T> = {
2
- getItem: (itemId: string) => T | Promise<T>;
3
- getChildren: (itemId: string) => string[] | Promise<string[]>;
4
- } | {
5
- getItem: (itemId: string) => T | Promise<T>;
6
- getChildrenWithData: (itemId: string) => {
7
- id: string;
8
- data: T;
9
- }[] | Promise<{
10
- id: string;
11
- data: T;
12
- }[]>;
13
- };
14
- export type SyncDataLoaderFeatureDef<T> = {
15
- state: {};
16
- config: {
17
- rootItemId: string;
18
- dataLoader: TreeDataLoader<T>;
19
- };
20
- treeInstance: {
21
- retrieveItemData: (itemId: string) => T;
22
- retrieveChildrenIds: (itemId: string) => string[];
23
- };
24
- itemInstance: {
25
- isLoading: () => boolean;
26
- };
27
- hotkeys: never;
28
- };
@@ -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 treeFeature: FeatureImplementation<any>;
@@ -1,240 +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.treeFeature = void 0;
13
- const utils_1 = require("../../utils");
14
- const errors_1 = require("../../utilities/errors");
15
- exports.treeFeature = {
16
- key: "tree",
17
- getInitialState: (initialState) => (Object.assign({ expandedItems: [], focusedItem: null }, initialState)),
18
- getDefaultConfig: (defaultConfig, tree) => (Object.assign({ setExpandedItems: (0, utils_1.makeStateUpdater)("expandedItems", tree), setFocusedItem: (0, utils_1.makeStateUpdater)("focusedItem", tree) }, defaultConfig)),
19
- stateHandlerNames: {
20
- expandedItems: "setExpandedItems",
21
- focusedItem: "setFocusedItem",
22
- },
23
- treeInstance: {
24
- getItemsMeta: ({ tree }) => {
25
- const { rootItemId } = tree.getConfig();
26
- const { expandedItems } = tree.getState();
27
- const flatItems = [];
28
- const expandedItemsSet = new Set(expandedItems); // TODO support setting state expandedItems as set instead of array
29
- const recursiveAdd = (itemId, path, level, setSize, posInSet) => {
30
- var _a;
31
- if (path.includes(itemId)) {
32
- (0, errors_1.logWarning)(`Circular reference for ${path.join(".")}`);
33
- return;
34
- }
35
- flatItems.push({
36
- itemId,
37
- level,
38
- index: flatItems.length,
39
- parentId: path.at(-1),
40
- setSize,
41
- posInSet,
42
- });
43
- if (expandedItemsSet.has(itemId)) {
44
- const children = (_a = tree.retrieveChildrenIds(itemId)) !== null && _a !== void 0 ? _a : [];
45
- let i = 0;
46
- for (const childId of children) {
47
- recursiveAdd(childId, path.concat(itemId), level + 1, children.length, i++);
48
- }
49
- }
50
- };
51
- const children = tree.retrieveChildrenIds(rootItemId);
52
- let i = 0;
53
- for (const itemId of children) {
54
- recursiveAdd(itemId, [rootItemId], 0, children.length, i++);
55
- }
56
- return flatItems;
57
- },
58
- getFocusedItem: ({ tree }) => {
59
- var _a, _b;
60
- return ((_b = tree.getItemInstance((_a = tree.getState().focusedItem) !== null && _a !== void 0 ? _a : "")) !== null && _b !== void 0 ? _b : tree.getItems()[0]);
61
- },
62
- focusNextItem: ({ tree }) => {
63
- var _a;
64
- const focused = tree.getFocusedItem().getItemMeta();
65
- if (!focused)
66
- return;
67
- const nextIndex = Math.min(focused.index + 1, tree.getItems().length - 1);
68
- (_a = tree.getItems()[nextIndex]) === null || _a === void 0 ? void 0 : _a.setFocused();
69
- },
70
- focusPreviousItem: ({ tree }) => {
71
- var _a;
72
- const focused = tree.getFocusedItem().getItemMeta();
73
- if (!focused)
74
- return;
75
- const nextIndex = Math.max(focused.index - 1, 0);
76
- (_a = tree.getItems()[nextIndex]) === null || _a === void 0 ? void 0 : _a.setFocused();
77
- },
78
- updateDomFocus: ({ tree }) => {
79
- // Required because if the state is managed outside in react, the state only updated during next render
80
- setTimeout(() => __awaiter(void 0, void 0, void 0, function* () {
81
- var _a, _b;
82
- const focusedItem = tree.getFocusedItem();
83
- (_b = (_a = tree.getConfig()).scrollToItem) === null || _b === void 0 ? void 0 : _b.call(_a, focusedItem);
84
- yield (0, utils_1.poll)(() => focusedItem.getElement() !== null, 20);
85
- const focusedElement = focusedItem.getElement();
86
- if (!focusedElement)
87
- return;
88
- focusedElement.focus();
89
- }));
90
- },
91
- getContainerProps: ({ prev, tree }, treeLabel) => (Object.assign(Object.assign({}, prev === null || prev === void 0 ? void 0 : prev()), { role: "tree", "aria-label": treeLabel !== null && treeLabel !== void 0 ? treeLabel : "", ref: tree.registerElement })),
92
- // relevant for hotkeys of this feature
93
- isSearchOpen: () => false,
94
- },
95
- itemInstance: {
96
- scrollTo: (_a, scrollIntoViewArg_1) => __awaiter(void 0, [_a, scrollIntoViewArg_1], void 0, function* ({ tree, item }, scrollIntoViewArg) {
97
- var _b, _c, _d;
98
- (_c = (_b = tree.getConfig()).scrollToItem) === null || _c === void 0 ? void 0 : _c.call(_b, item);
99
- yield (0, utils_1.poll)(() => item.getElement() !== null, 20);
100
- (_d = item.getElement()) === null || _d === void 0 ? void 0 : _d.scrollIntoView(scrollIntoViewArg);
101
- }),
102
- getId: ({ itemId }) => itemId,
103
- getKey: ({ itemId }) => itemId, // TODO apply to all stories to use
104
- getProps: ({ item, prev }) => {
105
- const itemMeta = item.getItemMeta();
106
- return Object.assign(Object.assign({}, prev === null || prev === void 0 ? void 0 : prev()), { ref: item.registerElement, role: "treeitem", "aria-setsize": itemMeta.setSize, "aria-posinset": itemMeta.posInSet, "aria-selected": "false", "aria-label": item.getItemName(), "aria-level": itemMeta.level, tabIndex: item.isFocused() ? 0 : -1, onClick: (e) => {
107
- item.setFocused();
108
- item.primaryAction();
109
- if (e.ctrlKey || e.shiftKey || e.metaKey) {
110
- return;
111
- }
112
- if (!item.isFolder()) {
113
- return;
114
- }
115
- if (item.isExpanded()) {
116
- item.collapse();
117
- }
118
- else {
119
- item.expand();
120
- }
121
- } });
122
- },
123
- expand: ({ tree, item, itemId }) => {
124
- var _a;
125
- if (!item.isFolder()) {
126
- return;
127
- }
128
- if ((_a = tree.getState().loadingItemChildrens) === null || _a === void 0 ? void 0 : _a.includes(itemId)) {
129
- return;
130
- }
131
- tree.applySubStateUpdate("expandedItems", (expandedItems) => [
132
- ...expandedItems,
133
- itemId,
134
- ]);
135
- tree.rebuildTree();
136
- },
137
- collapse: ({ tree, item, itemId }) => {
138
- if (!item.isFolder()) {
139
- return;
140
- }
141
- tree.applySubStateUpdate("expandedItems", (expandedItems) => expandedItems.filter((id) => id !== itemId));
142
- tree.rebuildTree();
143
- },
144
- getItemData: ({ tree, itemId }) => tree.retrieveItemData(itemId),
145
- equals: ({ item }, other) => item.getId() === (other === null || other === void 0 ? void 0 : other.getId()),
146
- isExpanded: ({ tree, itemId }) => tree.getState().expandedItems.includes(itemId),
147
- isDescendentOf: ({ item }, parentId) => {
148
- const parent = item.getParent();
149
- return Boolean((parent === null || parent === void 0 ? void 0 : parent.getId()) === parentId || (parent === null || parent === void 0 ? void 0 : parent.isDescendentOf(parentId)));
150
- },
151
- isFocused: ({ tree, item, itemId }) => tree.getState().focusedItem === itemId ||
152
- (tree.getState().focusedItem === null && item.getItemMeta().index === 0),
153
- isFolder: ({ tree, item }) => item.getItemMeta().level === -1 ||
154
- tree.getConfig().isItemFolder(item),
155
- getItemName: ({ tree, item }) => {
156
- const config = tree.getConfig();
157
- return config.getItemName(item);
158
- },
159
- setFocused: ({ tree, itemId }) => {
160
- tree.applySubStateUpdate("focusedItem", itemId);
161
- },
162
- primaryAction: ({ tree, item }) => { var _a, _b; return (_b = (_a = tree.getConfig()).onPrimaryAction) === null || _b === void 0 ? void 0 : _b.call(_a, item); },
163
- getParent: ({ tree, item }) => item.getItemMeta().parentId
164
- ? tree.getItemInstance(item.getItemMeta().parentId)
165
- : undefined,
166
- getIndexInParent: ({ item }) => item.getItemMeta().posInSet,
167
- getChildren: ({ tree, itemId }) => tree.retrieveChildrenIds(itemId).map((id) => tree.getItemInstance(id)),
168
- getTree: ({ tree }) => tree,
169
- getItemAbove: ({ tree, item }) => tree.getItems()[item.getItemMeta().index - 1],
170
- getItemBelow: ({ tree, item }) => tree.getItems()[item.getItemMeta().index + 1],
171
- },
172
- hotkeys: {
173
- focusNextItem: {
174
- hotkey: "ArrowDown",
175
- canRepeat: true,
176
- preventDefault: true,
177
- isEnabled: (tree) => { var _a, _b; return !((_b = (_a = tree.isSearchOpen) === null || _a === void 0 ? void 0 : _a.call(tree)) !== null && _b !== void 0 ? _b : false) && !tree.getState().dnd; }, // TODO what happens when the feature doesnt exist? proxy method still claims to exist
178
- handler: (e, tree) => {
179
- tree.focusNextItem();
180
- tree.updateDomFocus();
181
- },
182
- },
183
- focusPreviousItem: {
184
- hotkey: "ArrowUp",
185
- canRepeat: true,
186
- preventDefault: true,
187
- isEnabled: (tree) => { var _a, _b; return !((_b = (_a = tree.isSearchOpen) === null || _a === void 0 ? void 0 : _a.call(tree)) !== null && _b !== void 0 ? _b : false) && !tree.getState().dnd; },
188
- handler: (e, tree) => {
189
- tree.focusPreviousItem();
190
- tree.updateDomFocus();
191
- },
192
- },
193
- expandOrDown: {
194
- hotkey: "ArrowRight",
195
- canRepeat: true,
196
- handler: (e, tree) => {
197
- const item = tree.getFocusedItem();
198
- if (item.isExpanded() || !item.isFolder()) {
199
- tree.focusNextItem();
200
- tree.updateDomFocus();
201
- }
202
- else {
203
- item.expand();
204
- }
205
- },
206
- },
207
- collapseOrUp: {
208
- hotkey: "ArrowLeft",
209
- canRepeat: true,
210
- handler: (e, tree) => {
211
- var _a;
212
- const item = tree.getFocusedItem();
213
- if ((!item.isExpanded() || !item.isFolder()) &&
214
- item.getItemMeta().level !== 0) {
215
- (_a = item.getParent()) === null || _a === void 0 ? void 0 : _a.setFocused();
216
- tree.updateDomFocus();
217
- }
218
- else {
219
- item.collapse();
220
- }
221
- },
222
- },
223
- focusFirstItem: {
224
- hotkey: "Home",
225
- handler: (e, tree) => {
226
- var _a;
227
- (_a = tree.getItems()[0]) === null || _a === void 0 ? void 0 : _a.setFocused();
228
- tree.updateDomFocus();
229
- },
230
- },
231
- focusLastItem: {
232
- hotkey: "End",
233
- handler: (e, tree) => {
234
- var _a;
235
- (_a = tree.getItems()[tree.getItems().length - 1]) === null || _a === void 0 ? void 0 : _a.setFocused();
236
- tree.updateDomFocus();
237
- },
238
- },
239
- },
240
- };
@@ -1,62 +0,0 @@
1
- import { ItemInstance, SetStateFn, TreeInstance } from "../../types/core";
2
- export interface ItemMeta {
3
- itemId: string;
4
- parentId: string;
5
- level: number;
6
- index: number;
7
- setSize: number;
8
- posInSet: number;
9
- }
10
- export interface TreeItemDataRef {
11
- memoizedValues: Record<string, any>;
12
- memoizedDeps: Record<string, any[] | undefined>;
13
- }
14
- export type TreeFeatureDef<T> = {
15
- state: {
16
- expandedItems: string[];
17
- focusedItem: string | null;
18
- };
19
- config: {
20
- isItemFolder: (item: ItemInstance<T>) => boolean;
21
- getItemName: (item: ItemInstance<T>) => string;
22
- onPrimaryAction?: (item: ItemInstance<T>) => void;
23
- scrollToItem?: (item: ItemInstance<T>) => void;
24
- setExpandedItems?: SetStateFn<string[]>;
25
- setFocusedItem?: SetStateFn<string | null>;
26
- };
27
- treeInstance: {
28
- /** @internal */
29
- getItemsMeta: () => ItemMeta[];
30
- getFocusedItem: () => ItemInstance<any>;
31
- focusNextItem: () => void;
32
- focusPreviousItem: () => void;
33
- updateDomFocus: () => void;
34
- /** Pass to the container rendering the tree children. The `treeLabel` parameter
35
- * will be passed as `aria-label` parameter, and is recommended to be set. */
36
- getContainerProps: (treeLabel?: string) => Record<string, any>;
37
- };
38
- itemInstance: {
39
- getId: () => string;
40
- getKey: () => string;
41
- getProps: () => Record<string, any>;
42
- getItemName: () => string;
43
- getItemData: () => T;
44
- equals: (other?: ItemInstance<any> | null) => boolean;
45
- expand: () => void;
46
- collapse: () => void;
47
- isExpanded: () => boolean;
48
- isDescendentOf: (parentId: string) => boolean;
49
- isFocused: () => boolean;
50
- isFolder: () => boolean;
51
- setFocused: () => void;
52
- getParent: () => ItemInstance<T> | undefined;
53
- getChildren: () => ItemInstance<T>[];
54
- getIndexInParent: () => number;
55
- primaryAction: () => void;
56
- getTree: () => TreeInstance<T>;
57
- getItemAbove: () => ItemInstance<T> | undefined;
58
- getItemBelow: () => ItemInstance<T> | undefined;
59
- scrollTo: (scrollIntoViewArg?: boolean | ScrollIntoViewOptions) => Promise<void>;
60
- };
61
- hotkeys: "focusNextItem" | "focusPreviousItem" | "expandOrDown" | "collapseOrUp" | "focusFirstItem" | "focusLastItem";
62
- };
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,31 +0,0 @@
1
- export * from "./types/core";
2
- export * from "./core/create-tree";
3
- export * from "./features/tree/types";
4
- export { MainFeatureDef, InstanceBuilder } from "./features/main/types";
5
- export * from "./features/drag-and-drop/types";
6
- export * from "./features/keyboard-drag-and-drop/types";
7
- export * from "./features/selection/types";
8
- export * from "./features/async-data-loader/types";
9
- export * from "./features/sync-data-loader/types";
10
- export * from "./features/hotkeys-core/types";
11
- export * from "./features/search/types";
12
- export * from "./features/renaming/types";
13
- export * from "./features/expand-all/types";
14
- export * from "./features/prop-memoization/types";
15
- export * from "./features/selection/feature";
16
- export * from "./features/hotkeys-core/feature";
17
- export * from "./features/async-data-loader/feature";
18
- export * from "./features/sync-data-loader/feature";
19
- export * from "./features/drag-and-drop/feature";
20
- export * from "./features/keyboard-drag-and-drop/feature";
21
- export * from "./features/search/feature";
22
- export * from "./features/renaming/feature";
23
- export * from "./features/expand-all/feature";
24
- export * from "./features/prop-memoization/feature";
25
- export * from "./utilities/create-on-drop-handler";
26
- export * from "./utilities/insert-items-at-target";
27
- export * from "./utilities/remove-items-from-parents";
28
- export * from "./core/build-proxified-instance";
29
- export * from "./core/build-static-instance";
30
- export { makeStateUpdater } from "./utils";
31
- export { isOrderedDragTarget } from "./features/drag-and-drop/utils";
package/lib/cjs/index.js DELETED
@@ -1,49 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- exports.isOrderedDragTarget = exports.makeStateUpdater = void 0;
18
- __exportStar(require("./types/core"), exports);
19
- __exportStar(require("./core/create-tree"), exports);
20
- __exportStar(require("./features/tree/types"), exports);
21
- __exportStar(require("./features/drag-and-drop/types"), exports);
22
- __exportStar(require("./features/keyboard-drag-and-drop/types"), exports);
23
- __exportStar(require("./features/selection/types"), exports);
24
- __exportStar(require("./features/async-data-loader/types"), exports);
25
- __exportStar(require("./features/sync-data-loader/types"), exports);
26
- __exportStar(require("./features/hotkeys-core/types"), exports);
27
- __exportStar(require("./features/search/types"), exports);
28
- __exportStar(require("./features/renaming/types"), exports);
29
- __exportStar(require("./features/expand-all/types"), exports);
30
- __exportStar(require("./features/prop-memoization/types"), exports);
31
- __exportStar(require("./features/selection/feature"), exports);
32
- __exportStar(require("./features/hotkeys-core/feature"), exports);
33
- __exportStar(require("./features/async-data-loader/feature"), exports);
34
- __exportStar(require("./features/sync-data-loader/feature"), exports);
35
- __exportStar(require("./features/drag-and-drop/feature"), exports);
36
- __exportStar(require("./features/keyboard-drag-and-drop/feature"), exports);
37
- __exportStar(require("./features/search/feature"), exports);
38
- __exportStar(require("./features/renaming/feature"), exports);
39
- __exportStar(require("./features/expand-all/feature"), exports);
40
- __exportStar(require("./features/prop-memoization/feature"), exports);
41
- __exportStar(require("./utilities/create-on-drop-handler"), exports);
42
- __exportStar(require("./utilities/insert-items-at-target"), exports);
43
- __exportStar(require("./utilities/remove-items-from-parents"), exports);
44
- __exportStar(require("./core/build-proxified-instance"), exports);
45
- __exportStar(require("./core/build-static-instance"), exports);
46
- var utils_1 = require("./utils");
47
- Object.defineProperty(exports, "makeStateUpdater", { enumerable: true, get: function () { return utils_1.makeStateUpdater; } });
48
- var utils_2 = require("./features/drag-and-drop/utils");
49
- Object.defineProperty(exports, "isOrderedDragTarget", { enumerable: true, get: function () { return utils_2.isOrderedDragTarget; } });
@@ -1,121 +0,0 @@
1
- import { MainFeatureDef } from "./features/main/types";
2
- import { DragAndDropFeatureDef } from "./features/drag-and-drop/types";
3
- import { AsyncDataLoaderFeatureDef } from "./features/async-data-loader/types";
4
- import { ExpandAllFeatureDef } from "./features/expand-all/types";
5
- import { HotkeysCoreFeatureDef } from "./features/hotkeys-core/types";
6
- import { RenamingFeatureDef } from "./features/renaming/types";
7
- import { SearchFeatureDef } from "./features/search/types";
8
- import { SelectionFeatureDef } from "./features/selection/types";
9
- import { SyncDataLoaderFeatureDef } from "./features/sync-data-loader/types";
10
- import { TreeFeatureDef } from "./features/tree/types";
11
- import { PropMemoizationFeatureDef } from "./features/prop-memoization/types";
12
- import { KeyboardDragAndDropFeatureDef } from "./features/keyboard-drag-and-drop/types";
13
- export * from ".";
14
- /** @interface */
15
- export type AsyncDataLoaderFeatureConfig<T> = AsyncDataLoaderFeatureDef<T>["config"];
16
- /** @interface */
17
- export type AsyncDataLoaderFeatureState<T> = AsyncDataLoaderFeatureDef<T>["state"];
18
- /** @interface */
19
- export type AsyncDataLoaderFeatureTreeInstance<T> = AsyncDataLoaderFeatureDef<T>["treeInstance"];
20
- /** @interface */
21
- export type AsyncDataLoaderFeatureItemInstance<T> = AsyncDataLoaderFeatureDef<T>["itemInstance"];
22
- export type AsyncDataLoaderFeatureHotkeys<T> = AsyncDataLoaderFeatureDef<T>["hotkeys"];
23
- /** @interface */
24
- export type DragAndDropFeatureConfig<T> = DragAndDropFeatureDef<T>["config"];
25
- /** @interface */
26
- export type DragAndDropFeatureState<T> = DragAndDropFeatureDef<T>["state"];
27
- /** @interface */
28
- export type DragAndDropFeatureTreeInstance<T> = DragAndDropFeatureDef<T>["treeInstance"];
29
- /** @interface */
30
- export type DragAndDropFeatureItemInstance<T> = DragAndDropFeatureDef<T>["itemInstance"];
31
- export type DragAndDropFeatureHotkeys<T> = DragAndDropFeatureDef<T>["hotkeys"];
32
- /** @interface */
33
- export type KeyboardDragAndDropFeatureConfig<T> = KeyboardDragAndDropFeatureDef<T>["config"];
34
- /** @interface */
35
- export type KeyboardDragAndDropFeatureState<T> = KeyboardDragAndDropFeatureDef<T>["state"];
36
- /** @interface */
37
- export type KeyboardDragAndDropFeatureTreeInstance<T> = KeyboardDragAndDropFeatureDef<T>["treeInstance"];
38
- /** @interface */
39
- export type KeyboardDragAndDropFeatureItemInstance<T> = KeyboardDragAndDropFeatureDef<T>["itemInstance"];
40
- export type KeyboardDragAndDropFeatureHotkeys<T> = KeyboardDragAndDropFeatureDef<T>["hotkeys"];
41
- /** @interface */
42
- export type ExpandAllFeatureConfig = ExpandAllFeatureDef["config"];
43
- /** @interface */
44
- export type ExpandAllFeatureState = ExpandAllFeatureDef["state"];
45
- /** @interface */
46
- export type ExpandAllFeatureTreeInstance = ExpandAllFeatureDef["treeInstance"];
47
- /** @interface */
48
- export type ExpandAllFeatureItemInstance = ExpandAllFeatureDef["itemInstance"];
49
- export type ExpandAllFeatureHotkeys = ExpandAllFeatureDef["hotkeys"];
50
- /** @interface */
51
- export type HotkeysCoreFeatureConfig<T> = HotkeysCoreFeatureDef<T>["config"];
52
- /** @interface */
53
- export type HotkeysCoreFeatureState<T> = HotkeysCoreFeatureDef<T>["state"];
54
- /** @interface */
55
- export type HotkeysCoreFeatureTreeInstance<T> = HotkeysCoreFeatureDef<T>["treeInstance"];
56
- /** @interface */
57
- export type HotkeysCoreFeatureItemInstance<T> = HotkeysCoreFeatureDef<T>["itemInstance"];
58
- export type HotkeysCoreFeatureHotkeys<T> = HotkeysCoreFeatureDef<T>["hotkeys"];
59
- /** @interface */
60
- export type MainFeatureConfig = MainFeatureDef["config"];
61
- /** @interface */
62
- export type MainFeatureState = MainFeatureDef["state"];
63
- /** @interface */
64
- export type MainFeatureTreeInstance = MainFeatureDef["treeInstance"];
65
- /** @interface */
66
- export type MainFeatureItemInstance = MainFeatureDef["itemInstance"];
67
- export type MainFeatureHotkeys = MainFeatureDef["hotkeys"];
68
- /** @interface */
69
- export type PropMemoizationConfig = PropMemoizationFeatureDef["config"];
70
- /** @interface */
71
- export type PropMemoizationState = PropMemoizationFeatureDef["state"];
72
- /** @interface */
73
- export type PropMemoizationTreeInstance = PropMemoizationFeatureDef["treeInstance"];
74
- /** @interface */
75
- export type PropMemoizationItemInstance = PropMemoizationFeatureDef["itemInstance"];
76
- export type PropMemoizationHotkeys = PropMemoizationFeatureDef["hotkeys"];
77
- /** @interface */
78
- export type RenamingFeatureConfig<T> = RenamingFeatureDef<T>["config"];
79
- /** @interface */
80
- export type RenamingFeatureState<T> = RenamingFeatureDef<T>["state"];
81
- /** @interface */
82
- export type RenamingFeatureTreeInstance<T> = RenamingFeatureDef<T>["treeInstance"];
83
- /** @interface */
84
- export type RenamingFeatureItemInstance<T> = RenamingFeatureDef<T>["itemInstance"];
85
- export type RenamingFeatureHotkeys<T> = RenamingFeatureDef<T>["hotkeys"];
86
- /** @interface */
87
- export type SearchFeatureConfig<T> = SearchFeatureDef<T>["config"];
88
- /** @interface */
89
- export type SearchFeatureState<T> = SearchFeatureDef<T>["state"];
90
- /** @interface */
91
- export type SearchFeatureTreeInstance<T> = SearchFeatureDef<T>["treeInstance"];
92
- /** @interface */
93
- export type SearchFeatureItemInstance<T> = SearchFeatureDef<T>["itemInstance"];
94
- export type SearchFeatureHotkeys<T> = SearchFeatureDef<T>["hotkeys"];
95
- /** @interface */
96
- export type SelectionFeatureConfig<T> = SelectionFeatureDef<T>["config"];
97
- /** @interface */
98
- export type SelectionFeatureState<T> = SelectionFeatureDef<T>["state"];
99
- /** @interface */
100
- export type SelectionFeatureTreeInstance<T> = SelectionFeatureDef<T>["treeInstance"];
101
- /** @interface */
102
- export type SelectionFeatureItemInstance<T> = SelectionFeatureDef<T>["itemInstance"];
103
- export type SelectionFeatureHotkeys<T> = SelectionFeatureDef<T>["hotkeys"];
104
- /** @interface */
105
- export type SyncDataLoaderFeatureConfig<T> = SyncDataLoaderFeatureDef<T>["config"];
106
- /** @interface */
107
- export type SyncDataLoaderFeatureState<T> = SyncDataLoaderFeatureDef<T>["state"];
108
- /** @interface */
109
- export type SyncDataLoaderFeatureTreeInstance<T> = SyncDataLoaderFeatureDef<T>["treeInstance"];
110
- /** @interface */
111
- export type SyncDataLoaderFeatureItemInstance<T> = SyncDataLoaderFeatureDef<T>["itemInstance"];
112
- export type SyncDataLoaderFeatureHotkeys<T> = SyncDataLoaderFeatureDef<T>["hotkeys"];
113
- /** @interface */
114
- export type TreeFeatureConfig<T> = TreeFeatureDef<T>["config"];
115
- /** @interface */
116
- export type TreeFeatureState<T> = TreeFeatureDef<T>["state"];
117
- /** @interface */
118
- export type TreeFeatureTreeInstance<T> = TreeFeatureDef<T>["treeInstance"];
119
- /** @interface */
120
- export type TreeFeatureItemInstance<T> = TreeFeatureDef<T>["itemInstance"];
121
- export type TreeFeatureHotkeys<T> = TreeFeatureDef<T>["hotkeys"];
@@ -1,17 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("."), exports);
@@ -1,23 +0,0 @@
1
- import { DragEvent } from "react";
2
- import { TestTree } from "./test-tree";
3
- import { HotkeyName } from "../types/core";
4
- export declare class TestTreeDo<T> {
5
- protected tree: TestTree<T>;
6
- protected itemInstance(itemId: string): import("../types/core").ItemInstance<T>;
7
- protected itemProps(itemId: string): Record<string, any>;
8
- constructor(tree: TestTree<T>);
9
- selectItem(id: string): void;
10
- shiftSelectItem(id: string): void;
11
- ctrlSelectItem(id: string): void;
12
- ctrlShiftSelectItem(id: string): void;
13
- selectMultiple(...ids: string[]): void;
14
- hotkey(hotkey: HotkeyName, e?: Partial<KeyboardEvent>): void;
15
- startDrag(itemId: string, event?: DragEvent): DragEvent<Element>;
16
- dragOver(itemId: string, event?: DragEvent): DragEvent<Element>;
17
- dragOverNotAllowed(itemId: string, event?: DragEvent): DragEvent<Element>;
18
- dragLeave(itemId: string): void;
19
- dragEnd(itemId: string, event?: DragEvent): DragEvent<Element>;
20
- drop(itemId: string, event?: DragEvent): Promise<DragEvent<Element>>;
21
- dragOverAndDrop(itemId: string, event?: DragEvent): Promise<DragEvent<Element>>;
22
- private consistentCalls;
23
- }