@headless-tree/core 0.0.0-20250723222210 → 0.0.0-20250726130412

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 (174) hide show
  1. package/CHANGELOG.md +4 -1
  2. package/dist/index.d.mts +568 -0
  3. package/dist/index.d.ts +568 -0
  4. package/dist/index.js +2284 -0
  5. package/dist/index.mjs +2239 -0
  6. package/package.json +18 -10
  7. package/src/features/checkboxes/checkboxes.spec.ts +20 -5
  8. package/src/features/checkboxes/feature.ts +30 -15
  9. package/src/features/checkboxes/types.ts +1 -0
  10. package/tsconfig.json +1 -4
  11. package/lib/cjs/core/build-proxified-instance.d.ts +0 -2
  12. package/lib/cjs/core/build-proxified-instance.js +0 -58
  13. package/lib/cjs/core/build-static-instance.d.ts +0 -2
  14. package/lib/cjs/core/build-static-instance.js +0 -26
  15. package/lib/cjs/core/create-tree.d.ts +0 -2
  16. package/lib/cjs/core/create-tree.js +0 -191
  17. package/lib/cjs/features/async-data-loader/feature.d.ts +0 -2
  18. package/lib/cjs/features/async-data-loader/feature.js +0 -135
  19. package/lib/cjs/features/async-data-loader/types.d.ts +0 -47
  20. package/lib/cjs/features/async-data-loader/types.js +0 -2
  21. package/lib/cjs/features/checkboxes/feature.d.ts +0 -2
  22. package/lib/cjs/features/checkboxes/feature.js +0 -94
  23. package/lib/cjs/features/checkboxes/types.d.ts +0 -26
  24. package/lib/cjs/features/checkboxes/types.js +0 -9
  25. package/lib/cjs/features/drag-and-drop/feature.d.ts +0 -2
  26. package/lib/cjs/features/drag-and-drop/feature.js +0 -215
  27. package/lib/cjs/features/drag-and-drop/types.d.ts +0 -72
  28. package/lib/cjs/features/drag-and-drop/types.js +0 -9
  29. package/lib/cjs/features/drag-and-drop/utils.d.ts +0 -27
  30. package/lib/cjs/features/drag-and-drop/utils.js +0 -182
  31. package/lib/cjs/features/expand-all/feature.d.ts +0 -2
  32. package/lib/cjs/features/expand-all/feature.js +0 -70
  33. package/lib/cjs/features/expand-all/types.d.ts +0 -19
  34. package/lib/cjs/features/expand-all/types.js +0 -2
  35. package/lib/cjs/features/hotkeys-core/feature.d.ts +0 -2
  36. package/lib/cjs/features/hotkeys-core/feature.js +0 -107
  37. package/lib/cjs/features/hotkeys-core/types.d.ts +0 -27
  38. package/lib/cjs/features/hotkeys-core/types.js +0 -2
  39. package/lib/cjs/features/keyboard-drag-and-drop/feature.d.ts +0 -2
  40. package/lib/cjs/features/keyboard-drag-and-drop/feature.js +0 -206
  41. package/lib/cjs/features/keyboard-drag-and-drop/types.d.ts +0 -27
  42. package/lib/cjs/features/keyboard-drag-and-drop/types.js +0 -11
  43. package/lib/cjs/features/main/types.d.ts +0 -47
  44. package/lib/cjs/features/main/types.js +0 -2
  45. package/lib/cjs/features/prop-memoization/feature.d.ts +0 -2
  46. package/lib/cjs/features/prop-memoization/feature.js +0 -70
  47. package/lib/cjs/features/prop-memoization/types.d.ts +0 -15
  48. package/lib/cjs/features/prop-memoization/types.js +0 -2
  49. package/lib/cjs/features/renaming/feature.d.ts +0 -2
  50. package/lib/cjs/features/renaming/feature.js +0 -86
  51. package/lib/cjs/features/renaming/types.d.ts +0 -27
  52. package/lib/cjs/features/renaming/types.js +0 -2
  53. package/lib/cjs/features/search/feature.d.ts +0 -2
  54. package/lib/cjs/features/search/feature.js +0 -119
  55. package/lib/cjs/features/search/types.d.ts +0 -32
  56. package/lib/cjs/features/search/types.js +0 -2
  57. package/lib/cjs/features/selection/feature.d.ts +0 -2
  58. package/lib/cjs/features/selection/feature.js +0 -132
  59. package/lib/cjs/features/selection/types.d.ts +0 -21
  60. package/lib/cjs/features/selection/types.js +0 -2
  61. package/lib/cjs/features/sync-data-loader/feature.d.ts +0 -2
  62. package/lib/cjs/features/sync-data-loader/feature.js +0 -53
  63. package/lib/cjs/features/sync-data-loader/types.d.ts +0 -28
  64. package/lib/cjs/features/sync-data-loader/types.js +0 -2
  65. package/lib/cjs/features/tree/feature.d.ts +0 -2
  66. package/lib/cjs/features/tree/feature.js +0 -245
  67. package/lib/cjs/features/tree/types.d.ts +0 -63
  68. package/lib/cjs/features/tree/types.js +0 -2
  69. package/lib/cjs/index.d.ts +0 -33
  70. package/lib/cjs/index.js +0 -51
  71. package/lib/cjs/mddocs-entry.d.ts +0 -121
  72. package/lib/cjs/mddocs-entry.js +0 -17
  73. package/lib/cjs/test-utils/test-tree-do.d.ts +0 -23
  74. package/lib/cjs/test-utils/test-tree-do.js +0 -114
  75. package/lib/cjs/test-utils/test-tree-expect.d.ts +0 -17
  76. package/lib/cjs/test-utils/test-tree-expect.js +0 -66
  77. package/lib/cjs/test-utils/test-tree.d.ts +0 -48
  78. package/lib/cjs/test-utils/test-tree.js +0 -208
  79. package/lib/cjs/types/core.d.ts +0 -84
  80. package/lib/cjs/types/core.js +0 -2
  81. package/lib/cjs/types/deep-merge.d.ts +0 -13
  82. package/lib/cjs/types/deep-merge.js +0 -2
  83. package/lib/cjs/utilities/create-on-drop-handler.d.ts +0 -3
  84. package/lib/cjs/utilities/create-on-drop-handler.js +0 -20
  85. package/lib/cjs/utilities/errors.d.ts +0 -2
  86. package/lib/cjs/utilities/errors.js +0 -9
  87. package/lib/cjs/utilities/insert-items-at-target.d.ts +0 -3
  88. package/lib/cjs/utilities/insert-items-at-target.js +0 -40
  89. package/lib/cjs/utilities/remove-items-from-parents.d.ts +0 -2
  90. package/lib/cjs/utilities/remove-items-from-parents.js +0 -32
  91. package/lib/cjs/utils.d.ts +0 -6
  92. package/lib/cjs/utils.js +0 -53
  93. package/lib/esm/core/build-proxified-instance.d.ts +0 -2
  94. package/lib/esm/core/build-proxified-instance.js +0 -54
  95. package/lib/esm/core/build-static-instance.d.ts +0 -2
  96. package/lib/esm/core/build-static-instance.js +0 -22
  97. package/lib/esm/core/create-tree.d.ts +0 -2
  98. package/lib/esm/core/create-tree.js +0 -187
  99. package/lib/esm/features/async-data-loader/feature.d.ts +0 -2
  100. package/lib/esm/features/async-data-loader/feature.js +0 -132
  101. package/lib/esm/features/async-data-loader/types.d.ts +0 -47
  102. package/lib/esm/features/async-data-loader/types.js +0 -1
  103. package/lib/esm/features/checkboxes/feature.d.ts +0 -2
  104. package/lib/esm/features/checkboxes/feature.js +0 -91
  105. package/lib/esm/features/checkboxes/types.d.ts +0 -26
  106. package/lib/esm/features/checkboxes/types.js +0 -6
  107. package/lib/esm/features/drag-and-drop/feature.d.ts +0 -2
  108. package/lib/esm/features/drag-and-drop/feature.js +0 -212
  109. package/lib/esm/features/drag-and-drop/types.d.ts +0 -72
  110. package/lib/esm/features/drag-and-drop/types.js +0 -6
  111. package/lib/esm/features/drag-and-drop/utils.d.ts +0 -27
  112. package/lib/esm/features/drag-and-drop/utils.js +0 -172
  113. package/lib/esm/features/expand-all/feature.d.ts +0 -2
  114. package/lib/esm/features/expand-all/feature.js +0 -67
  115. package/lib/esm/features/expand-all/types.d.ts +0 -19
  116. package/lib/esm/features/expand-all/types.js +0 -1
  117. package/lib/esm/features/hotkeys-core/feature.d.ts +0 -2
  118. package/lib/esm/features/hotkeys-core/feature.js +0 -104
  119. package/lib/esm/features/hotkeys-core/types.d.ts +0 -27
  120. package/lib/esm/features/hotkeys-core/types.js +0 -1
  121. package/lib/esm/features/keyboard-drag-and-drop/feature.d.ts +0 -2
  122. package/lib/esm/features/keyboard-drag-and-drop/feature.js +0 -203
  123. package/lib/esm/features/keyboard-drag-and-drop/types.d.ts +0 -27
  124. package/lib/esm/features/keyboard-drag-and-drop/types.js +0 -8
  125. package/lib/esm/features/main/types.d.ts +0 -47
  126. package/lib/esm/features/main/types.js +0 -1
  127. package/lib/esm/features/prop-memoization/feature.d.ts +0 -2
  128. package/lib/esm/features/prop-memoization/feature.js +0 -67
  129. package/lib/esm/features/prop-memoization/types.d.ts +0 -15
  130. package/lib/esm/features/prop-memoization/types.js +0 -1
  131. package/lib/esm/features/renaming/feature.d.ts +0 -2
  132. package/lib/esm/features/renaming/feature.js +0 -83
  133. package/lib/esm/features/renaming/types.d.ts +0 -27
  134. package/lib/esm/features/renaming/types.js +0 -1
  135. package/lib/esm/features/search/feature.d.ts +0 -2
  136. package/lib/esm/features/search/feature.js +0 -116
  137. package/lib/esm/features/search/types.d.ts +0 -32
  138. package/lib/esm/features/search/types.js +0 -1
  139. package/lib/esm/features/selection/feature.d.ts +0 -2
  140. package/lib/esm/features/selection/feature.js +0 -129
  141. package/lib/esm/features/selection/types.d.ts +0 -21
  142. package/lib/esm/features/selection/types.js +0 -1
  143. package/lib/esm/features/sync-data-loader/feature.d.ts +0 -2
  144. package/lib/esm/features/sync-data-loader/feature.js +0 -50
  145. package/lib/esm/features/sync-data-loader/types.d.ts +0 -28
  146. package/lib/esm/features/sync-data-loader/types.js +0 -1
  147. package/lib/esm/features/tree/feature.d.ts +0 -2
  148. package/lib/esm/features/tree/feature.js +0 -242
  149. package/lib/esm/features/tree/types.d.ts +0 -63
  150. package/lib/esm/features/tree/types.js +0 -1
  151. package/lib/esm/index.d.ts +0 -33
  152. package/lib/esm/index.js +0 -32
  153. package/lib/esm/mddocs-entry.d.ts +0 -121
  154. package/lib/esm/mddocs-entry.js +0 -1
  155. package/lib/esm/test-utils/test-tree-do.d.ts +0 -23
  156. package/lib/esm/test-utils/test-tree-do.js +0 -110
  157. package/lib/esm/test-utils/test-tree-expect.d.ts +0 -17
  158. package/lib/esm/test-utils/test-tree-expect.js +0 -62
  159. package/lib/esm/test-utils/test-tree.d.ts +0 -48
  160. package/lib/esm/test-utils/test-tree.js +0 -204
  161. package/lib/esm/types/core.d.ts +0 -84
  162. package/lib/esm/types/core.js +0 -1
  163. package/lib/esm/types/deep-merge.d.ts +0 -13
  164. package/lib/esm/types/deep-merge.js +0 -1
  165. package/lib/esm/utilities/create-on-drop-handler.d.ts +0 -3
  166. package/lib/esm/utilities/create-on-drop-handler.js +0 -16
  167. package/lib/esm/utilities/errors.d.ts +0 -2
  168. package/lib/esm/utilities/errors.js +0 -4
  169. package/lib/esm/utilities/insert-items-at-target.d.ts +0 -3
  170. package/lib/esm/utilities/insert-items-at-target.js +0 -36
  171. package/lib/esm/utilities/remove-items-from-parents.d.ts +0 -2
  172. package/lib/esm/utilities/remove-items-from-parents.js +0 -28
  173. package/lib/esm/utils.d.ts +0 -6
  174. 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,245 +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;
60
- const focusedItemId = tree.getState().focusedItem;
61
- return ((_a = (focusedItemId !== null ? tree.getItemInstance(focusedItemId) : null)) !== null && _a !== void 0 ? _a : tree.getItems()[0]);
62
- },
63
- getRootItem: ({ tree }) => {
64
- const { rootItemId } = tree.getConfig();
65
- return tree.getItemInstance(rootItemId);
66
- },
67
- focusNextItem: ({ tree }) => {
68
- var _a;
69
- const focused = tree.getFocusedItem().getItemMeta();
70
- if (!focused)
71
- return;
72
- const nextIndex = Math.min(focused.index + 1, tree.getItems().length - 1);
73
- (_a = tree.getItems()[nextIndex]) === null || _a === void 0 ? void 0 : _a.setFocused();
74
- },
75
- focusPreviousItem: ({ tree }) => {
76
- var _a;
77
- const focused = tree.getFocusedItem().getItemMeta();
78
- if (!focused)
79
- return;
80
- const nextIndex = Math.max(focused.index - 1, 0);
81
- (_a = tree.getItems()[nextIndex]) === null || _a === void 0 ? void 0 : _a.setFocused();
82
- },
83
- updateDomFocus: ({ tree }) => {
84
- // Required because if the state is managed outside in react, the state only updated during next render
85
- setTimeout(() => __awaiter(void 0, void 0, void 0, function* () {
86
- var _a, _b;
87
- const focusedItem = tree.getFocusedItem();
88
- (_b = (_a = tree.getConfig()).scrollToItem) === null || _b === void 0 ? void 0 : _b.call(_a, focusedItem);
89
- yield (0, utils_1.poll)(() => focusedItem.getElement() !== null, 20);
90
- const focusedElement = focusedItem.getElement();
91
- if (!focusedElement)
92
- return;
93
- focusedElement.focus();
94
- }));
95
- },
96
- 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 })),
97
- // relevant for hotkeys of this feature
98
- isSearchOpen: () => false,
99
- },
100
- itemInstance: {
101
- scrollTo: (_a, scrollIntoViewArg_1) => __awaiter(void 0, [_a, scrollIntoViewArg_1], void 0, function* ({ tree, item }, scrollIntoViewArg) {
102
- var _b, _c, _d;
103
- (_c = (_b = tree.getConfig()).scrollToItem) === null || _c === void 0 ? void 0 : _c.call(_b, item);
104
- yield (0, utils_1.poll)(() => item.getElement() !== null, 20);
105
- (_d = item.getElement()) === null || _d === void 0 ? void 0 : _d.scrollIntoView(scrollIntoViewArg);
106
- }),
107
- getId: ({ itemId }) => itemId,
108
- getKey: ({ itemId }) => itemId, // TODO apply to all stories to use
109
- getProps: ({ item, prev }) => {
110
- const itemMeta = item.getItemMeta();
111
- 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 + 1, "aria-selected": "false", "aria-label": item.getItemName(), "aria-level": itemMeta.level + 1, tabIndex: item.isFocused() ? 0 : -1, onClick: (e) => {
112
- item.setFocused();
113
- item.primaryAction();
114
- if (e.ctrlKey || e.shiftKey || e.metaKey) {
115
- return;
116
- }
117
- if (!item.isFolder()) {
118
- return;
119
- }
120
- if (item.isExpanded()) {
121
- item.collapse();
122
- }
123
- else {
124
- item.expand();
125
- }
126
- } });
127
- },
128
- expand: ({ tree, item, itemId }) => {
129
- var _a;
130
- if (!item.isFolder()) {
131
- return;
132
- }
133
- if ((_a = tree.getState().loadingItemChildrens) === null || _a === void 0 ? void 0 : _a.includes(itemId)) {
134
- return;
135
- }
136
- tree.applySubStateUpdate("expandedItems", (expandedItems) => [
137
- ...expandedItems,
138
- itemId,
139
- ]);
140
- tree.rebuildTree();
141
- },
142
- collapse: ({ tree, item, itemId }) => {
143
- if (!item.isFolder()) {
144
- return;
145
- }
146
- tree.applySubStateUpdate("expandedItems", (expandedItems) => expandedItems.filter((id) => id !== itemId));
147
- tree.rebuildTree();
148
- },
149
- getItemData: ({ tree, itemId }) => tree.retrieveItemData(itemId),
150
- equals: ({ item }, other) => item.getId() === (other === null || other === void 0 ? void 0 : other.getId()),
151
- isExpanded: ({ tree, itemId }) => tree.getState().expandedItems.includes(itemId),
152
- isDescendentOf: ({ item }, parentId) => {
153
- const parent = item.getParent();
154
- return Boolean((parent === null || parent === void 0 ? void 0 : parent.getId()) === parentId || (parent === null || parent === void 0 ? void 0 : parent.isDescendentOf(parentId)));
155
- },
156
- isFocused: ({ tree, item, itemId }) => tree.getState().focusedItem === itemId ||
157
- (tree.getState().focusedItem === null && item.getItemMeta().index === 0),
158
- isFolder: ({ tree, item }) => item.getItemMeta().level === -1 ||
159
- tree.getConfig().isItemFolder(item),
160
- getItemName: ({ tree, item }) => {
161
- const config = tree.getConfig();
162
- return config.getItemName(item);
163
- },
164
- setFocused: ({ tree, itemId }) => {
165
- tree.applySubStateUpdate("focusedItem", itemId);
166
- },
167
- primaryAction: ({ tree, item }) => { var _a, _b; return (_b = (_a = tree.getConfig()).onPrimaryAction) === null || _b === void 0 ? void 0 : _b.call(_a, item); },
168
- getParent: ({ tree, item }) => item.getItemMeta().parentId
169
- ? tree.getItemInstance(item.getItemMeta().parentId)
170
- : undefined,
171
- getIndexInParent: ({ item }) => item.getItemMeta().posInSet,
172
- getChildren: ({ tree, itemId }) => tree.retrieveChildrenIds(itemId).map((id) => tree.getItemInstance(id)),
173
- getTree: ({ tree }) => tree,
174
- getItemAbove: ({ tree, item }) => tree.getItems()[item.getItemMeta().index - 1],
175
- getItemBelow: ({ tree, item }) => tree.getItems()[item.getItemMeta().index + 1],
176
- },
177
- hotkeys: {
178
- focusNextItem: {
179
- hotkey: "ArrowDown",
180
- canRepeat: true,
181
- preventDefault: true,
182
- 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
183
- handler: (e, tree) => {
184
- tree.focusNextItem();
185
- tree.updateDomFocus();
186
- },
187
- },
188
- focusPreviousItem: {
189
- hotkey: "ArrowUp",
190
- canRepeat: true,
191
- preventDefault: true,
192
- 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; },
193
- handler: (e, tree) => {
194
- tree.focusPreviousItem();
195
- tree.updateDomFocus();
196
- },
197
- },
198
- expandOrDown: {
199
- hotkey: "ArrowRight",
200
- canRepeat: true,
201
- handler: (e, tree) => {
202
- const item = tree.getFocusedItem();
203
- if (item.isExpanded() || !item.isFolder()) {
204
- tree.focusNextItem();
205
- tree.updateDomFocus();
206
- }
207
- else {
208
- item.expand();
209
- }
210
- },
211
- },
212
- collapseOrUp: {
213
- hotkey: "ArrowLeft",
214
- canRepeat: true,
215
- handler: (e, tree) => {
216
- var _a;
217
- const item = tree.getFocusedItem();
218
- if ((!item.isExpanded() || !item.isFolder()) &&
219
- item.getItemMeta().level !== 0) {
220
- (_a = item.getParent()) === null || _a === void 0 ? void 0 : _a.setFocused();
221
- tree.updateDomFocus();
222
- }
223
- else {
224
- item.collapse();
225
- }
226
- },
227
- },
228
- focusFirstItem: {
229
- hotkey: "Home",
230
- handler: (e, tree) => {
231
- var _a;
232
- (_a = tree.getItems()[0]) === null || _a === void 0 ? void 0 : _a.setFocused();
233
- tree.updateDomFocus();
234
- },
235
- },
236
- focusLastItem: {
237
- hotkey: "End",
238
- handler: (e, tree) => {
239
- var _a;
240
- (_a = tree.getItems()[tree.getItems().length - 1]) === null || _a === void 0 ? void 0 : _a.setFocused();
241
- tree.updateDomFocus();
242
- },
243
- },
244
- },
245
- };
@@ -1,63 +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<T>;
31
- getRootItem: () => ItemInstance<T>;
32
- focusNextItem: () => void;
33
- focusPreviousItem: () => void;
34
- updateDomFocus: () => void;
35
- /** Pass to the container rendering the tree children. The `treeLabel` parameter
36
- * will be passed as `aria-label` parameter, and is recommended to be set. */
37
- getContainerProps: (treeLabel?: string) => Record<string, any>;
38
- };
39
- itemInstance: {
40
- getId: () => string;
41
- getKey: () => string;
42
- getProps: () => Record<string, any>;
43
- getItemName: () => string;
44
- getItemData: () => T;
45
- equals: (other?: ItemInstance<any> | null) => boolean;
46
- expand: () => void;
47
- collapse: () => void;
48
- isExpanded: () => boolean;
49
- isDescendentOf: (parentId: string) => boolean;
50
- isFocused: () => boolean;
51
- isFolder: () => boolean;
52
- setFocused: () => void;
53
- getParent: () => ItemInstance<T> | undefined;
54
- getChildren: () => ItemInstance<T>[];
55
- getIndexInParent: () => number;
56
- primaryAction: () => void;
57
- getTree: () => TreeInstance<T>;
58
- getItemAbove: () => ItemInstance<T> | undefined;
59
- getItemBelow: () => ItemInstance<T> | undefined;
60
- scrollTo: (scrollIntoViewArg?: boolean | ScrollIntoViewOptions) => Promise<void>;
61
- };
62
- hotkeys: "focusNextItem" | "focusPreviousItem" | "expandOrDown" | "collapseOrUp" | "focusFirstItem" | "focusLastItem";
63
- };
@@ -1,2 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
@@ -1,33 +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/checkboxes/types";
9
- export * from "./features/async-data-loader/types";
10
- export * from "./features/sync-data-loader/types";
11
- export * from "./features/hotkeys-core/types";
12
- export * from "./features/search/types";
13
- export * from "./features/renaming/types";
14
- export * from "./features/expand-all/types";
15
- export * from "./features/prop-memoization/types";
16
- export * from "./features/selection/feature";
17
- export * from "./features/checkboxes/feature";
18
- export * from "./features/hotkeys-core/feature";
19
- export * from "./features/async-data-loader/feature";
20
- export * from "./features/sync-data-loader/feature";
21
- export * from "./features/drag-and-drop/feature";
22
- export * from "./features/keyboard-drag-and-drop/feature";
23
- export * from "./features/search/feature";
24
- export * from "./features/renaming/feature";
25
- export * from "./features/expand-all/feature";
26
- export * from "./features/prop-memoization/feature";
27
- export * from "./utilities/create-on-drop-handler";
28
- export * from "./utilities/insert-items-at-target";
29
- export * from "./utilities/remove-items-from-parents";
30
- export * from "./core/build-proxified-instance";
31
- export * from "./core/build-static-instance";
32
- export { makeStateUpdater } from "./utils";
33
- export { isOrderedDragTarget } from "./features/drag-and-drop/utils";
package/lib/cjs/index.js DELETED
@@ -1,51 +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/checkboxes/types"), exports);
25
- __exportStar(require("./features/async-data-loader/types"), exports);
26
- __exportStar(require("./features/sync-data-loader/types"), exports);
27
- __exportStar(require("./features/hotkeys-core/types"), exports);
28
- __exportStar(require("./features/search/types"), exports);
29
- __exportStar(require("./features/renaming/types"), exports);
30
- __exportStar(require("./features/expand-all/types"), exports);
31
- __exportStar(require("./features/prop-memoization/types"), exports);
32
- __exportStar(require("./features/selection/feature"), exports);
33
- __exportStar(require("./features/checkboxes/feature"), exports);
34
- __exportStar(require("./features/hotkeys-core/feature"), exports);
35
- __exportStar(require("./features/async-data-loader/feature"), exports);
36
- __exportStar(require("./features/sync-data-loader/feature"), exports);
37
- __exportStar(require("./features/drag-and-drop/feature"), exports);
38
- __exportStar(require("./features/keyboard-drag-and-drop/feature"), exports);
39
- __exportStar(require("./features/search/feature"), exports);
40
- __exportStar(require("./features/renaming/feature"), exports);
41
- __exportStar(require("./features/expand-all/feature"), exports);
42
- __exportStar(require("./features/prop-memoization/feature"), exports);
43
- __exportStar(require("./utilities/create-on-drop-handler"), exports);
44
- __exportStar(require("./utilities/insert-items-at-target"), exports);
45
- __exportStar(require("./utilities/remove-items-from-parents"), exports);
46
- __exportStar(require("./core/build-proxified-instance"), exports);
47
- __exportStar(require("./core/build-static-instance"), exports);
48
- var utils_1 = require("./utils");
49
- Object.defineProperty(exports, "makeStateUpdater", { enumerable: true, get: function () { return utils_1.makeStateUpdater; } });
50
- var utils_2 = require("./features/drag-and-drop/utils");
51
- 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
- }