@headless-tree/core 0.0.8 → 0.0.10

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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # @headless-tree/core
2
2
 
3
+ ## 0.0.10
4
+
5
+ ### Patch Changes
6
+
7
+ - 520ec27: test release
8
+
9
+ ## 0.0.9
10
+
11
+ ### Patch Changes
12
+
13
+ - ab2a124: dev release
14
+
3
15
  ## 0.0.8
4
16
 
5
17
  ### Patch Changes
@@ -6,7 +6,10 @@ const buildItemInstance = (features, tree, itemId) => {
6
6
  var _a, _b;
7
7
  const itemInstance = {};
8
8
  for (const feature of features) {
9
- Object.assign(itemInstance, (_b = (_a = feature.createItemInstance) === null || _a === void 0 ? void 0 : _a.call(feature, Object.assign({}, itemInstance), itemInstance, tree, itemId)) !== null && _b !== void 0 ? _b : {});
9
+ Object.assign(
10
+ // TODO dont run createItemInstance, but assign prototype objects instead?
11
+ // https://jsfiddle.net/bgenc58r/
12
+ itemInstance, (_b = (_a = feature.createItemInstance) === null || _a === void 0 ? void 0 : _a.call(feature, Object.assign({}, itemInstance), itemInstance, tree, itemId)) !== null && _b !== void 0 ? _b : {});
10
13
  }
11
14
  return itemInstance;
12
15
  };
@@ -72,7 +75,6 @@ const createTree = (initialConfig) => {
72
75
  itemInstances.push(itemInstancesMap[item.itemId]);
73
76
  }
74
77
  }
75
- console.log("REBUILT");
76
78
  };
77
79
  const eachFeature = (fn) => {
78
80
  for (const feature of additionalFeatures) {
@@ -6,4 +6,4 @@ var DropTargetPosition;
6
6
  DropTargetPosition["Top"] = "top";
7
7
  DropTargetPosition["Bottom"] = "bottom";
8
8
  DropTargetPosition["Item"] = "item";
9
- })(DropTargetPosition = exports.DropTargetPosition || (exports.DropTargetPosition = {}));
9
+ })(DropTargetPosition || (exports.DropTargetPosition = DropTargetPosition = {}));
@@ -46,7 +46,7 @@ exports.searchFeature = {
46
46
  hotkeys: {
47
47
  openSearch: {
48
48
  hotkey: "LetterOrNumber",
49
- preventDefault: true,
49
+ preventDefault: true, // TODO make true default
50
50
  isEnabled: (tree) => !tree.isSearchOpen(),
51
51
  handler: (e, tree) => {
52
52
  e.stopPropagation();
@@ -1,15 +1,23 @@
1
1
  import { MainFeatureDef } from "./features/main/types";
2
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";
3
11
  export * from ".";
4
12
  /** @interface */
5
- export type MainFeatureConfig = MainFeatureDef["config"];
13
+ export type AsyncDataLoaderFeatureConfig<T> = AsyncDataLoaderFeatureDef<T>["config"];
6
14
  /** @interface */
7
- export type MainFeatureState = MainFeatureDef["state"];
15
+ export type AsyncDataLoaderFeatureState<T> = AsyncDataLoaderFeatureDef<T>["state"];
8
16
  /** @interface */
9
- export type MainFeatureTreeInstance = MainFeatureDef["treeInstance"];
17
+ export type AsyncDataLoaderFeatureTreeInstance<T> = AsyncDataLoaderFeatureDef<T>["treeInstance"];
10
18
  /** @interface */
11
- export type MainFeatureItemInstance = MainFeatureDef["itemInstance"];
12
- export type MainFeatureHotkeys = MainFeatureDef["hotkeys"];
19
+ export type AsyncDataLoaderFeatureItemInstance<T> = AsyncDataLoaderFeatureDef<T>["itemInstance"];
20
+ export type AsyncDataLoaderFeatureHotkeys<T> = AsyncDataLoaderFeatureDef<T>["hotkeys"];
13
21
  /** @interface */
14
22
  export type DragAndDropFeatureConfig<T> = DragAndDropFeatureDef<T>["config"];
15
23
  /** @interface */
@@ -19,3 +27,75 @@ export type DragAndDropFeatureTreeInstance<T> = DragAndDropFeatureDef<T>["treeIn
19
27
  /** @interface */
20
28
  export type DragAndDropFeatureItemInstance<T> = DragAndDropFeatureDef<T>["itemInstance"];
21
29
  export type DragAndDropFeatureHotkeys<T> = DragAndDropFeatureDef<T>["hotkeys"];
30
+ /** @interface */
31
+ export type ExpandAllFeatureConfig = ExpandAllFeatureDef["config"];
32
+ /** @interface */
33
+ export type ExpandAllFeatureState = ExpandAllFeatureDef["state"];
34
+ /** @interface */
35
+ export type ExpandAllFeatureTreeInstance = ExpandAllFeatureDef["treeInstance"];
36
+ /** @interface */
37
+ export type ExpandAllFeatureItemInstance = ExpandAllFeatureDef["itemInstance"];
38
+ export type ExpandAllFeatureHotkeys = ExpandAllFeatureDef["hotkeys"];
39
+ /** @interface */
40
+ export type HotkeysCoreFeatureConfig<T> = HotkeysCoreFeatureDef<T>["config"];
41
+ /** @interface */
42
+ export type HotkeysCoreFeatureState<T> = HotkeysCoreFeatureDef<T>["state"];
43
+ /** @interface */
44
+ export type HotkeysCoreFeatureTreeInstance<T> = HotkeysCoreFeatureDef<T>["treeInstance"];
45
+ /** @interface */
46
+ export type HotkeysCoreFeatureItemInstance<T> = HotkeysCoreFeatureDef<T>["itemInstance"];
47
+ export type HotkeysCoreFeatureHotkeys<T> = HotkeysCoreFeatureDef<T>["hotkeys"];
48
+ /** @interface */
49
+ export type MainFeatureConfig = MainFeatureDef["config"];
50
+ /** @interface */
51
+ export type MainFeatureState = MainFeatureDef["state"];
52
+ /** @interface */
53
+ export type MainFeatureTreeInstance = MainFeatureDef["treeInstance"];
54
+ /** @interface */
55
+ export type MainFeatureItemInstance = MainFeatureDef["itemInstance"];
56
+ export type MainFeatureHotkeys = MainFeatureDef["hotkeys"];
57
+ /** @interface */
58
+ export type RenamingFeatureConfig<T> = RenamingFeatureDef<T>["config"];
59
+ /** @interface */
60
+ export type RenamingFeatureState<T> = RenamingFeatureDef<T>["state"];
61
+ /** @interface */
62
+ export type RenamingFeatureTreeInstance<T> = RenamingFeatureDef<T>["treeInstance"];
63
+ /** @interface */
64
+ export type RenamingFeatureItemInstance<T> = RenamingFeatureDef<T>["itemInstance"];
65
+ export type RenamingFeatureHotkeys<T> = RenamingFeatureDef<T>["hotkeys"];
66
+ /** @interface */
67
+ export type SearchFeatureConfig<T> = SearchFeatureDef<T>["config"];
68
+ /** @interface */
69
+ export type SearchFeatureState<T> = SearchFeatureDef<T>["state"];
70
+ /** @interface */
71
+ export type SearchFeatureTreeInstance<T> = SearchFeatureDef<T>["treeInstance"];
72
+ /** @interface */
73
+ export type SearchFeatureItemInstance<T> = SearchFeatureDef<T>["itemInstance"];
74
+ export type SearchFeatureHotkeys<T> = SearchFeatureDef<T>["hotkeys"];
75
+ /** @interface */
76
+ export type SelectionFeatureConfig<T> = SelectionFeatureDef<T>["config"];
77
+ /** @interface */
78
+ export type SelectionFeatureState<T> = SelectionFeatureDef<T>["state"];
79
+ /** @interface */
80
+ export type SelectionFeatureTreeInstance<T> = SelectionFeatureDef<T>["treeInstance"];
81
+ /** @interface */
82
+ export type SelectionFeatureItemInstance<T> = SelectionFeatureDef<T>["itemInstance"];
83
+ export type SelectionFeatureHotkeys<T> = SelectionFeatureDef<T>["hotkeys"];
84
+ /** @interface */
85
+ export type SyncDataLoaderFeatureConfig<T> = SyncDataLoaderFeatureDef<T>["config"];
86
+ /** @interface */
87
+ export type SyncDataLoaderFeatureState<T> = SyncDataLoaderFeatureDef<T>["state"];
88
+ /** @interface */
89
+ export type SyncDataLoaderFeatureTreeInstance<T> = SyncDataLoaderFeatureDef<T>["treeInstance"];
90
+ /** @interface */
91
+ export type SyncDataLoaderFeatureItemInstance<T> = SyncDataLoaderFeatureDef<T>["itemInstance"];
92
+ export type SyncDataLoaderFeatureHotkeys<T> = SyncDataLoaderFeatureDef<T>["hotkeys"];
93
+ /** @interface */
94
+ export type TreeFeatureConfig<T> = TreeFeatureDef<T>["config"];
95
+ /** @interface */
96
+ export type TreeFeatureState<T> = TreeFeatureDef<T>["state"];
97
+ /** @interface */
98
+ export type TreeFeatureTreeInstance<T> = TreeFeatureDef<T>["treeInstance"];
99
+ /** @interface */
100
+ export type TreeFeatureItemInstance<T> = TreeFeatureDef<T>["itemInstance"];
101
+ export type TreeFeatureHotkeys<T> = TreeFeatureDef<T>["hotkeys"];
@@ -3,7 +3,10 @@ const buildItemInstance = (features, tree, itemId) => {
3
3
  var _a, _b;
4
4
  const itemInstance = {};
5
5
  for (const feature of features) {
6
- Object.assign(itemInstance, (_b = (_a = feature.createItemInstance) === null || _a === void 0 ? void 0 : _a.call(feature, Object.assign({}, itemInstance), itemInstance, tree, itemId)) !== null && _b !== void 0 ? _b : {});
6
+ Object.assign(
7
+ // TODO dont run createItemInstance, but assign prototype objects instead?
8
+ // https://jsfiddle.net/bgenc58r/
9
+ itemInstance, (_b = (_a = feature.createItemInstance) === null || _a === void 0 ? void 0 : _a.call(feature, Object.assign({}, itemInstance), itemInstance, tree, itemId)) !== null && _b !== void 0 ? _b : {});
7
10
  }
8
11
  return itemInstance;
9
12
  };
@@ -69,7 +72,6 @@ export const createTree = (initialConfig) => {
69
72
  itemInstances.push(itemInstancesMap[item.itemId]);
70
73
  }
71
74
  }
72
- console.log("REBUILT");
73
75
  };
74
76
  const eachFeature = (fn) => {
75
77
  for (const feature of additionalFeatures) {
@@ -1,4 +1,4 @@
1
- import { DropTargetPosition, } from "./types";
1
+ import { DropTargetPosition } from "./types";
2
2
  export const getDragCode = ({ item, childIndex }) => `${item.getId()}__${childIndex !== null && childIndex !== void 0 ? childIndex : "none"}`;
3
3
  export const getDropOffset = (e, item) => {
4
4
  var _a;
@@ -43,7 +43,7 @@ export const searchFeature = {
43
43
  hotkeys: {
44
44
  openSearch: {
45
45
  hotkey: "LetterOrNumber",
46
- preventDefault: true,
46
+ preventDefault: true, // TODO make true default
47
47
  isEnabled: (tree) => !tree.isSearchOpen(),
48
48
  handler: (e, tree) => {
49
49
  e.stopPropagation();
@@ -1,15 +1,23 @@
1
1
  import { MainFeatureDef } from "./features/main/types";
2
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";
3
11
  export * from ".";
4
12
  /** @interface */
5
- export type MainFeatureConfig = MainFeatureDef["config"];
13
+ export type AsyncDataLoaderFeatureConfig<T> = AsyncDataLoaderFeatureDef<T>["config"];
6
14
  /** @interface */
7
- export type MainFeatureState = MainFeatureDef["state"];
15
+ export type AsyncDataLoaderFeatureState<T> = AsyncDataLoaderFeatureDef<T>["state"];
8
16
  /** @interface */
9
- export type MainFeatureTreeInstance = MainFeatureDef["treeInstance"];
17
+ export type AsyncDataLoaderFeatureTreeInstance<T> = AsyncDataLoaderFeatureDef<T>["treeInstance"];
10
18
  /** @interface */
11
- export type MainFeatureItemInstance = MainFeatureDef["itemInstance"];
12
- export type MainFeatureHotkeys = MainFeatureDef["hotkeys"];
19
+ export type AsyncDataLoaderFeatureItemInstance<T> = AsyncDataLoaderFeatureDef<T>["itemInstance"];
20
+ export type AsyncDataLoaderFeatureHotkeys<T> = AsyncDataLoaderFeatureDef<T>["hotkeys"];
13
21
  /** @interface */
14
22
  export type DragAndDropFeatureConfig<T> = DragAndDropFeatureDef<T>["config"];
15
23
  /** @interface */
@@ -19,3 +27,75 @@ export type DragAndDropFeatureTreeInstance<T> = DragAndDropFeatureDef<T>["treeIn
19
27
  /** @interface */
20
28
  export type DragAndDropFeatureItemInstance<T> = DragAndDropFeatureDef<T>["itemInstance"];
21
29
  export type DragAndDropFeatureHotkeys<T> = DragAndDropFeatureDef<T>["hotkeys"];
30
+ /** @interface */
31
+ export type ExpandAllFeatureConfig = ExpandAllFeatureDef["config"];
32
+ /** @interface */
33
+ export type ExpandAllFeatureState = ExpandAllFeatureDef["state"];
34
+ /** @interface */
35
+ export type ExpandAllFeatureTreeInstance = ExpandAllFeatureDef["treeInstance"];
36
+ /** @interface */
37
+ export type ExpandAllFeatureItemInstance = ExpandAllFeatureDef["itemInstance"];
38
+ export type ExpandAllFeatureHotkeys = ExpandAllFeatureDef["hotkeys"];
39
+ /** @interface */
40
+ export type HotkeysCoreFeatureConfig<T> = HotkeysCoreFeatureDef<T>["config"];
41
+ /** @interface */
42
+ export type HotkeysCoreFeatureState<T> = HotkeysCoreFeatureDef<T>["state"];
43
+ /** @interface */
44
+ export type HotkeysCoreFeatureTreeInstance<T> = HotkeysCoreFeatureDef<T>["treeInstance"];
45
+ /** @interface */
46
+ export type HotkeysCoreFeatureItemInstance<T> = HotkeysCoreFeatureDef<T>["itemInstance"];
47
+ export type HotkeysCoreFeatureHotkeys<T> = HotkeysCoreFeatureDef<T>["hotkeys"];
48
+ /** @interface */
49
+ export type MainFeatureConfig = MainFeatureDef["config"];
50
+ /** @interface */
51
+ export type MainFeatureState = MainFeatureDef["state"];
52
+ /** @interface */
53
+ export type MainFeatureTreeInstance = MainFeatureDef["treeInstance"];
54
+ /** @interface */
55
+ export type MainFeatureItemInstance = MainFeatureDef["itemInstance"];
56
+ export type MainFeatureHotkeys = MainFeatureDef["hotkeys"];
57
+ /** @interface */
58
+ export type RenamingFeatureConfig<T> = RenamingFeatureDef<T>["config"];
59
+ /** @interface */
60
+ export type RenamingFeatureState<T> = RenamingFeatureDef<T>["state"];
61
+ /** @interface */
62
+ export type RenamingFeatureTreeInstance<T> = RenamingFeatureDef<T>["treeInstance"];
63
+ /** @interface */
64
+ export type RenamingFeatureItemInstance<T> = RenamingFeatureDef<T>["itemInstance"];
65
+ export type RenamingFeatureHotkeys<T> = RenamingFeatureDef<T>["hotkeys"];
66
+ /** @interface */
67
+ export type SearchFeatureConfig<T> = SearchFeatureDef<T>["config"];
68
+ /** @interface */
69
+ export type SearchFeatureState<T> = SearchFeatureDef<T>["state"];
70
+ /** @interface */
71
+ export type SearchFeatureTreeInstance<T> = SearchFeatureDef<T>["treeInstance"];
72
+ /** @interface */
73
+ export type SearchFeatureItemInstance<T> = SearchFeatureDef<T>["itemInstance"];
74
+ export type SearchFeatureHotkeys<T> = SearchFeatureDef<T>["hotkeys"];
75
+ /** @interface */
76
+ export type SelectionFeatureConfig<T> = SelectionFeatureDef<T>["config"];
77
+ /** @interface */
78
+ export type SelectionFeatureState<T> = SelectionFeatureDef<T>["state"];
79
+ /** @interface */
80
+ export type SelectionFeatureTreeInstance<T> = SelectionFeatureDef<T>["treeInstance"];
81
+ /** @interface */
82
+ export type SelectionFeatureItemInstance<T> = SelectionFeatureDef<T>["itemInstance"];
83
+ export type SelectionFeatureHotkeys<T> = SelectionFeatureDef<T>["hotkeys"];
84
+ /** @interface */
85
+ export type SyncDataLoaderFeatureConfig<T> = SyncDataLoaderFeatureDef<T>["config"];
86
+ /** @interface */
87
+ export type SyncDataLoaderFeatureState<T> = SyncDataLoaderFeatureDef<T>["state"];
88
+ /** @interface */
89
+ export type SyncDataLoaderFeatureTreeInstance<T> = SyncDataLoaderFeatureDef<T>["treeInstance"];
90
+ /** @interface */
91
+ export type SyncDataLoaderFeatureItemInstance<T> = SyncDataLoaderFeatureDef<T>["itemInstance"];
92
+ export type SyncDataLoaderFeatureHotkeys<T> = SyncDataLoaderFeatureDef<T>["hotkeys"];
93
+ /** @interface */
94
+ export type TreeFeatureConfig<T> = TreeFeatureDef<T>["config"];
95
+ /** @interface */
96
+ export type TreeFeatureState<T> = TreeFeatureDef<T>["state"];
97
+ /** @interface */
98
+ export type TreeFeatureTreeInstance<T> = TreeFeatureDef<T>["treeInstance"];
99
+ /** @interface */
100
+ export type TreeFeatureItemInstance<T> = TreeFeatureDef<T>["itemInstance"];
101
+ export type TreeFeatureHotkeys<T> = TreeFeatureDef<T>["hotkeys"];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@headless-tree/core",
3
- "version": "0.0.8",
3
+ "version": "0.0.10",
4
4
  "main": "lib/cjs/index.js",
5
5
  "module": "lib/esm/index.js",
6
6
  "types": "lib/esm/index.d.ts",
@@ -18,6 +18,6 @@
18
18
  "author": "Lukas Bach <npm@lukasbach.com>",
19
19
  "license": "MIT",
20
20
  "devDependencies": {
21
- "typescript": "^5.0.4"
21
+ "typescript": "^5.4.2"
22
22
  }
23
23
  }
@@ -13,18 +13,20 @@ import { ItemMeta } from "../features/tree/types";
13
13
  const buildItemInstance = (
14
14
  features: FeatureImplementation[],
15
15
  tree: TreeInstance<any>,
16
- itemId: string
16
+ itemId: string,
17
17
  ) => {
18
18
  const itemInstance = {} as ItemInstance<any>;
19
19
  for (const feature of features) {
20
20
  Object.assign(
21
+ // TODO dont run createItemInstance, but assign prototype objects instead?
22
+ // https://jsfiddle.net/bgenc58r/
21
23
  itemInstance,
22
24
  feature.createItemInstance?.(
23
25
  { ...itemInstance },
24
26
  itemInstance,
25
27
  tree,
26
- itemId
27
- ) ?? {}
28
+ itemId,
29
+ ) ?? {},
28
30
  );
29
31
  }
30
32
  return itemInstance;
@@ -34,7 +36,7 @@ const verifyFeatures = (features: FeatureImplementation[] | undefined) => {
34
36
  const loadedFeatures = features?.map((feature) => feature.key);
35
37
  for (const feature of features ?? []) {
36
38
  const missingDependency = feature.deps?.find(
37
- (dep) => !loadedFeatures?.includes(dep)
39
+ (dep) => !loadedFeatures?.includes(dep),
38
40
  );
39
41
  if (missingDependency) {
40
42
  throw new Error(`${feature.key} needs ${missingDependency}`);
@@ -44,7 +46,7 @@ const verifyFeatures = (features: FeatureImplementation[] | undefined) => {
44
46
 
45
47
  const compareFeatures = (
46
48
  feature1: FeatureImplementation,
47
- feature2: FeatureImplementation
49
+ feature2: FeatureImplementation,
48
50
  ) => {
49
51
  if (feature2.key && feature1.overwrites?.includes(feature2.key)) {
50
52
  return 1;
@@ -56,7 +58,7 @@ const sortFeatures = (features: FeatureImplementation[] = []) =>
56
58
  features.sort(compareFeatures);
57
59
 
58
60
  export const createTree = <T>(
59
- initialConfig: TreeConfig<T>
61
+ initialConfig: TreeConfig<T>,
60
62
  ): TreeInstance<T> => {
61
63
  const treeInstance: TreeInstance<T> = {} as any;
62
64
 
@@ -68,15 +70,15 @@ export const createTree = <T>(
68
70
 
69
71
  let state = additionalFeatures.reduce(
70
72
  (acc, feature) => feature.getInitialState?.(acc, treeInstance) ?? acc,
71
- initialConfig.initialState ?? initialConfig.state ?? {}
73
+ initialConfig.initialState ?? initialConfig.state ?? {},
72
74
  ) as TreeState<T>;
73
75
  let config = additionalFeatures.reduce(
74
76
  (acc, feature) => feature.getDefaultConfig?.(acc, treeInstance) ?? acc,
75
- initialConfig
77
+ initialConfig,
76
78
  ) as TreeConfig<T>;
77
79
  const stateHandlerNames = additionalFeatures.reduce(
78
80
  (acc, feature) => ({ ...acc, ...feature.stateHandlerNames }),
79
- {} as Record<string, string>
81
+ {} as Record<string, string>,
80
82
  );
81
83
 
82
84
  let treeElement: HTMLElement | undefined | null;
@@ -98,7 +100,7 @@ export const createTree = <T>(
98
100
  const rootInstance = buildItemInstance(
99
101
  [main, ...additionalFeatures],
100
102
  treeInstance,
101
- config.rootItemId
103
+ config.rootItemId,
102
104
  );
103
105
  itemInstancesMap[config.rootItemId] = rootInstance;
104
106
  itemMetaMap[config.rootItemId] = {
@@ -116,7 +118,7 @@ export const createTree = <T>(
116
118
  const instance = buildItemInstance(
117
119
  [main, ...additionalFeatures],
118
120
  treeInstance,
119
- item.itemId
121
+ item.itemId,
120
122
  );
121
123
  itemInstancesMap[item.itemId] = instance;
122
124
  itemInstances.push(instance);
@@ -124,7 +126,6 @@ export const createTree = <T>(
124
126
  itemInstances.push(itemInstancesMap[item.itemId]);
125
127
  }
126
128
  }
127
- console.log("REBUILT");
128
129
  };
129
130
 
130
131
  const eachFeature = (fn: (feature: FeatureImplementation<any>) => void) => {
@@ -173,11 +174,11 @@ export const createTree = <T>(
173
174
 
174
175
  if (treeElement && !element) {
175
176
  eachFeature((feature) =>
176
- feature.onTreeUnmount?.(treeInstance, treeElement!)
177
+ feature.onTreeUnmount?.(treeInstance, treeElement!),
177
178
  );
178
179
  } else if (!treeElement && element) {
179
180
  eachFeature((feature) =>
180
- feature.onTreeMount?.(treeInstance, element)
181
+ feature.onTreeMount?.(treeInstance, element),
181
182
  );
182
183
  }
183
184
  treeElement = element;
@@ -196,11 +197,11 @@ export const createTree = <T>(
196
197
  const oldElement = itemElementsMap[itemId];
197
198
  if (oldElement && !element) {
198
199
  eachFeature((feature) =>
199
- feature.onItemUnmount?.(instance, oldElement!, treeInstance)
200
+ feature.onItemUnmount?.(instance, oldElement!, treeInstance),
200
201
  );
201
202
  } else if (!oldElement && element) {
202
203
  eachFeature((feature) =>
203
- feature.onItemMount?.(instance, element!, treeInstance)
204
+ feature.onItemMount?.(instance, element!, treeInstance),
204
205
  );
205
206
  }
206
207
  itemElementsMap[itemId] = element;
@@ -217,7 +218,7 @@ export const createTree = <T>(
217
218
  for (const feature of features) {
218
219
  Object.assign(
219
220
  treeInstance,
220
- feature.createTreeInstance?.({ ...treeInstance }, treeInstance) ?? {}
221
+ feature.createTreeInstance?.({ ...treeInstance }, treeInstance) ?? {},
221
222
  );
222
223
  Object.assign(hotkeyPresets, feature.hotkeys ?? {});
223
224
  }
@@ -47,7 +47,7 @@ export const asyncDataLoaderFeature: FeatureImplementation<
47
47
  dataRef.current.itemData[itemId] = item;
48
48
  config.onLoadedItem?.(itemId, item);
49
49
  instance.applySubStateUpdate("loadingItems", (loadingItems) =>
50
- loadingItems.filter((id) => id !== itemId)
50
+ loadingItems.filter((id) => id !== itemId),
51
51
  );
52
52
  });
53
53
  }
@@ -83,7 +83,7 @@ export const asyncDataLoaderFeature: FeatureImplementation<
83
83
  dataRef.current.childrenIds[itemId] = childrenIds;
84
84
  config.onLoadedChildren?.(itemId, childrenIds);
85
85
  instance.applySubStateUpdate("loadingItems", (loadingItems) =>
86
- loadingItems.filter((id) => id !== itemId)
86
+ loadingItems.filter((id) => id !== itemId),
87
87
  );
88
88
  instance.rebuildTree();
89
89
  });
@@ -92,7 +92,7 @@ export const asyncDataLoaderFeature: FeatureImplementation<
92
92
  dataRef.current.childrenIds[itemId] = childrenIds;
93
93
  config.onLoadedChildren?.(itemId, childrenIds);
94
94
  instance.applySubStateUpdate("loadingItems", (loadingItems) =>
95
- loadingItems.filter((id) => id !== itemId)
95
+ loadingItems.filter((id) => id !== itemId),
96
96
  );
97
97
  instance.rebuildTree();
98
98
  });
@@ -35,7 +35,7 @@ export type AsyncDataLoaderFeatureDef<T> = {
35
35
  itemInstance: SyncDataLoaderFeatureDef<T>["itemInstance"] & {
36
36
  invalidateItemData: () => void;
37
37
  invalidateChildrenIds: () => void;
38
- isLoading: () => void;
38
+ isLoading: () => void; // TODO! boolean?
39
39
  };
40
40
  hotkeys: SyncDataLoaderFeatureDef<T>["hotkeys"];
41
41
  };
@@ -56,12 +56,12 @@ export type DragAndDropFeatureDef<T> = {
56
56
  };
57
57
  canDropForeignDragObject?: (
58
58
  dataTransfer: DataTransfer,
59
- target: DropTarget<T>
59
+ target: DropTarget<T>,
60
60
  ) => boolean;
61
61
  onDrop?: (items: ItemInstance<T>[], target: DropTarget<T>) => void;
62
62
  onDropForeignDragObject?: (
63
63
  dataTransfer: DataTransfer,
64
- target: DropTarget<T>
64
+ target: DropTarget<T>,
65
65
  ) => void;
66
66
 
67
67
  /** Runs in the onDragEnd event, if `ev.dataTransfer.dropEffect` is not `none`, i.e. the drop
@@ -1,10 +1,5 @@
1
1
  import { ItemInstance, TreeInstance } from "../../types/core";
2
- import {
3
- DndState,
4
- DragAndDropFeatureDef,
5
- DropTarget,
6
- DropTargetPosition,
7
- } from "./types";
2
+ import { DropTarget, DropTargetPosition } from "./types";
8
3
 
9
4
  export const getDragCode = ({ item, childIndex }: DropTarget<any>) =>
10
5
  `${item.getId()}__${childIndex ?? "none"}`;
@@ -17,7 +12,7 @@ export const getDropOffset = (e: any, item: ItemInstance<any>): number => {
17
12
  export const canDrop = (
18
13
  dataTransfer: DataTransfer | null,
19
14
  target: DropTarget<any>,
20
- tree: TreeInstance<any>
15
+ tree: TreeInstance<any>,
21
16
  ) => {
22
17
  const draggedItems = tree.getState().dnd?.draggedItems;
23
18
  const config = tree.getConfig();
@@ -40,7 +35,7 @@ export const canDrop = (
40
35
  const getDropTargetPosition = (
41
36
  offset: number,
42
37
  topLinePercentage: number,
43
- bottomLinePercentage: number
38
+ bottomLinePercentage: number,
44
39
  ) => {
45
40
  if (offset < topLinePercentage) {
46
41
  return DropTargetPosition.Top;
@@ -55,7 +50,7 @@ export const getDropTarget = (
55
50
  e: any,
56
51
  item: ItemInstance<any>,
57
52
  tree: TreeInstance<any>,
58
- canDropInbetween = tree.getConfig().canDropInbetween
53
+ canDropInbetween = tree.getConfig().canDropInbetween,
59
54
  ): DropTarget<any> => {
60
55
  const config = tree.getConfig();
61
56
  const draggedItems = tree.getState().dnd?.draggedItems ?? [];
@@ -81,7 +76,7 @@ export const getDropTarget = (
81
76
  ? getDropTargetPosition(
82
77
  offset,
83
78
  config.topLinePercentage ?? 0.3,
84
- config.bottomLinePercentage ?? 0.7
79
+ config.bottomLinePercentage ?? 0.7,
85
80
  )
86
81
  : getDropTargetPosition(offset, 0.5, 0.5);
87
82
 
@@ -105,7 +100,7 @@ export const getDropTarget = (
105
100
  child && draggedItems?.some((i) => i.getId() === child.getId())
106
101
  ? ++counter
107
102
  : counter,
108
- 0
103
+ 0,
109
104
  );
110
105
 
111
106
  return {
@@ -20,7 +20,7 @@ export const expandAllFeature: FeatureImplementation<
20
20
 
21
21
  expandAll: async (cancelToken) => {
22
22
  await Promise.all(
23
- tree.getItems().map((item) => item.expandAll(cancelToken))
23
+ tree.getItems().map((item) => item.expandAll(cancelToken)),
24
24
  );
25
25
  },
26
26
 
@@ -46,10 +46,10 @@ export const expandAllFeature: FeatureImplementation<
46
46
  await Promise.all(
47
47
  item.getChildren().map(async (child) => {
48
48
  await poll(
49
- () => !tree.getState().loadingItems.includes(child.getId())
49
+ () => !tree.getState().loadingItems.includes(child.getId()),
50
50
  );
51
51
  await child?.expandAll(cancelToken);
52
- })
52
+ }),
53
53
  );
54
54
  },
55
55
 
@@ -18,13 +18,13 @@ const specialKeys: Record<string, RegExp> = {
18
18
  const testHotkeyMatch = (
19
19
  pressedKeys: Set<string>,
20
20
  tree: TreeInstance<any>,
21
- hotkey: HotkeyConfig<any>
21
+ hotkey: HotkeyConfig<any>,
22
22
  ) => {
23
23
  const supposedKeys = hotkey.hotkey.split("+");
24
24
  const doKeysMatch = supposedKeys.every((key) =>
25
25
  key in specialKeys
26
26
  ? [...pressedKeys].some((pressedKey) => specialKeys[key].test(pressedKey))
27
- : pressedKeys.has(key)
27
+ : pressedKeys.has(key),
28
28
  );
29
29
  const isEnabled = !hotkey.isEnabled || hotkey.isEnabled(tree);
30
30
  const equalCounts = pressedKeys.size === supposedKeys.length;
@@ -35,10 +35,10 @@ const findHotkeyMatch = (
35
35
  pressedKeys: Set<string>,
36
36
  tree: TreeInstance<any>,
37
37
  config1: HotkeysConfig<any, any>,
38
- config2: HotkeysConfig<any, any>
38
+ config2: HotkeysConfig<any, any>,
39
39
  ) => {
40
40
  return Object.entries({ ...config1, ...config2 }).find(([, hotkey]) =>
41
- testHotkeyMatch(pressedKeys, tree, hotkey)
41
+ testHotkeyMatch(pressedKeys, tree, hotkey),
42
42
  )?.[0];
43
43
  };
44
44
 
@@ -60,7 +60,7 @@ export const hotkeysCoreFeature: FeatureImplementation<
60
60
  data.current.pressedKeys,
61
61
  tree as any,
62
62
  tree.getHotkeyPresets(),
63
- tree.getConfig().hotkeys as HotkeysConfig<any>
63
+ tree.getConfig().hotkeys as HotkeysConfig<any>,
64
64
  );
65
65
 
66
66
  if (!hotkeyName) return;
@@ -27,7 +27,7 @@ export type HotkeysCoreFeatureDef<T> = {
27
27
  onItemHotkey?: (
28
28
  name: string,
29
29
  item: ItemInstance<T>,
30
- element: HTMLElement
30
+ element: HTMLElement,
31
31
  ) => void;
32
32
  };
33
33
  treeInstance: {};
@@ -21,7 +21,7 @@ export type MainFeatureDef<T = any> = {
21
21
  /** @internal */
22
22
  applySubStateUpdate: <K extends keyof TreeState<any>>(
23
23
  stateName: K,
24
- updater: Updater<TreeState<T>[K]>
24
+ updater: Updater<TreeState<T>[K]>,
25
25
  ) => void;
26
26
  setState: SetStateFn<TreeState<T>>;
27
27
  getState: () => TreeState<T>;
@@ -38,7 +38,7 @@ export const searchFeature: FeatureImplementation<
38
38
  .find((item) =>
39
39
  instance
40
40
  .getConfig()
41
- .isSearchMatchingItem?.(instance.getSearchValue(), item)
41
+ .isSearchMatchingItem?.(instance.getSearchValue(), item),
42
42
  )
43
43
  ?.setFocused();
44
44
  },
@@ -76,9 +76,9 @@ export const searchFeature: FeatureImplementation<
76
76
  (search, items) =>
77
77
  items.filter(
78
78
  (item) =>
79
- search && instance.getConfig().isSearchMatchingItem?.(search, item)
79
+ search && instance.getConfig().isSearchMatchingItem?.(search, item),
80
80
  ),
81
- () => [instance.getSearchValue(), instance.getItems()]
81
+ () => [instance.getSearchValue(), instance.getItems()],
82
82
  ),
83
83
  }),
84
84
 
@@ -130,7 +130,7 @@ export const searchFeature: FeatureImplementation<
130
130
  .find(
131
131
  (item) =>
132
132
  item.getItemMeta().index >
133
- tree.getFocusedItem().getItemMeta().index
133
+ tree.getFocusedItem().getItemMeta().index,
134
134
  );
135
135
  focusItem?.setFocused();
136
136
  focusItem?.scrollTo({ block: "nearest", inline: "nearest" });
@@ -148,7 +148,7 @@ export const searchFeature: FeatureImplementation<
148
148
  .find(
149
149
  (item) =>
150
150
  item.getItemMeta().index <
151
- tree.getFocusedItem().getItemMeta().index
151
+ tree.getFocusedItem().getItemMeta().index,
152
152
  );
153
153
  focusItem?.setFocused();
154
154
  focusItem?.scrollTo({ block: "nearest", inline: "nearest" });
@@ -46,14 +46,14 @@ export const selectionFeature: FeatureImplementation<
46
46
  tree.setSelectedItems(
47
47
  selectedItems.includes(item.getItemMeta().itemId)
48
48
  ? selectedItems
49
- : [...selectedItems, item.getItemMeta().itemId]
49
+ : [...selectedItems, item.getItemMeta().itemId],
50
50
  );
51
51
  },
52
52
 
53
53
  deselect: () => {
54
54
  const { selectedItems } = tree.getState();
55
55
  tree.setSelectedItems(
56
- selectedItems.filter((id) => id !== item.getItemMeta().itemId)
56
+ selectedItems.filter((id) => id !== item.getItemMeta().itemId),
57
57
  );
58
58
  },
59
59
 
@@ -56,7 +56,7 @@ export const treeFeature: FeatureImplementation<
56
56
  parentId: string,
57
57
  level: number,
58
58
  setSize: number,
59
- posInSet: number
59
+ posInSet: number,
60
60
  ) => {
61
61
  flatItems.push({
62
62
  itemId,
@@ -107,7 +107,7 @@ export const treeFeature: FeatureImplementation<
107
107
  }
108
108
 
109
109
  instance.applySubStateUpdate("expandedItems", (expandedItems) =>
110
- expandedItems.filter((id) => id !== itemId)
110
+ expandedItems.filter((id) => id !== itemId),
111
111
  );
112
112
  instance.rebuildTree();
113
113
  },
@@ -226,7 +226,7 @@ export const treeFeature: FeatureImplementation<
226
226
  }
227
227
  return tree.getItemInstance(tree.getConfig().rootItemId);
228
228
  },
229
- () => [item.getItemMeta()]
229
+ () => [item.getItemMeta()],
230
230
  ),
231
231
  // TODO remove
232
232
  getIndexInParent: () => item.getItemMeta().posInSet,
@@ -65,7 +65,7 @@ export type TreeFeatureDef<T> = {
65
65
  getItemBelow: () => ItemInstance<T> | null;
66
66
  getMemoizedProp: <X>(name: string, create: () => X, deps?: any[]) => X;
67
67
  scrollTo: (
68
- scrollIntoViewArg?: boolean | ScrollIntoViewOptions
68
+ scrollIntoViewArg?: boolean | ScrollIntoViewOptions,
69
69
  ) => Promise<void>;
70
70
  };
71
71
  hotkeys:
@@ -1,17 +1,40 @@
1
1
  import { MainFeatureDef } from "./features/main/types";
2
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";
3
11
 
4
12
  export * from ".";
5
13
 
14
+ // /** @interface */
15
+ // export type XXXFeatureConfig<T> = XFeatureDef<T>["config"];
16
+ // /** @interface */
17
+ // export type XXXFeatureState<T> = XFeatureDef<T>["state"];
18
+ // /** @interface */
19
+ // export type XXXFeatureTreeInstance<T> = XFeatureDef<T>["treeInstance"];
20
+ // /** @interface */
21
+ // export type XXXFeatureItemInstance<T> = XFeatureDef<T>["itemInstance"];
22
+ // export type XXXFeatureHotkeys<T> = XFeatureDef<T>["hotkeys"];
23
+
6
24
  /** @interface */
7
- export type MainFeatureConfig = MainFeatureDef["config"];
25
+ export type AsyncDataLoaderFeatureConfig<T> =
26
+ AsyncDataLoaderFeatureDef<T>["config"];
8
27
  /** @interface */
9
- export type MainFeatureState = MainFeatureDef["state"];
28
+ export type AsyncDataLoaderFeatureState<T> =
29
+ AsyncDataLoaderFeatureDef<T>["state"];
10
30
  /** @interface */
11
- export type MainFeatureTreeInstance = MainFeatureDef["treeInstance"];
31
+ export type AsyncDataLoaderFeatureTreeInstance<T> =
32
+ AsyncDataLoaderFeatureDef<T>["treeInstance"];
12
33
  /** @interface */
13
- export type MainFeatureItemInstance = MainFeatureDef["itemInstance"];
14
- export type MainFeatureHotkeys = MainFeatureDef["hotkeys"];
34
+ export type AsyncDataLoaderFeatureItemInstance<T> =
35
+ AsyncDataLoaderFeatureDef<T>["itemInstance"];
36
+ export type AsyncDataLoaderFeatureHotkeys<T> =
37
+ AsyncDataLoaderFeatureDef<T>["hotkeys"];
15
38
 
16
39
  /** @interface */
17
40
  export type DragAndDropFeatureConfig<T> = DragAndDropFeatureDef<T>["config"];
@@ -24,3 +47,94 @@ export type DragAndDropFeatureTreeInstance<T> =
24
47
  export type DragAndDropFeatureItemInstance<T> =
25
48
  DragAndDropFeatureDef<T>["itemInstance"];
26
49
  export type DragAndDropFeatureHotkeys<T> = DragAndDropFeatureDef<T>["hotkeys"];
50
+
51
+ /** @interface */
52
+ export type ExpandAllFeatureConfig = ExpandAllFeatureDef["config"];
53
+ /** @interface */
54
+ export type ExpandAllFeatureState = ExpandAllFeatureDef["state"];
55
+ /** @interface */
56
+ export type ExpandAllFeatureTreeInstance = ExpandAllFeatureDef["treeInstance"];
57
+ /** @interface */
58
+ export type ExpandAllFeatureItemInstance = ExpandAllFeatureDef["itemInstance"];
59
+ export type ExpandAllFeatureHotkeys = ExpandAllFeatureDef["hotkeys"];
60
+
61
+ /** @interface */
62
+ export type HotkeysCoreFeatureConfig<T> = HotkeysCoreFeatureDef<T>["config"];
63
+ /** @interface */
64
+ export type HotkeysCoreFeatureState<T> = HotkeysCoreFeatureDef<T>["state"];
65
+ /** @interface */
66
+ export type HotkeysCoreFeatureTreeInstance<T> =
67
+ HotkeysCoreFeatureDef<T>["treeInstance"];
68
+ /** @interface */
69
+ export type HotkeysCoreFeatureItemInstance<T> =
70
+ HotkeysCoreFeatureDef<T>["itemInstance"];
71
+ export type HotkeysCoreFeatureHotkeys<T> = HotkeysCoreFeatureDef<T>["hotkeys"];
72
+
73
+ /** @interface */
74
+ export type MainFeatureConfig = MainFeatureDef["config"];
75
+ /** @interface */
76
+ export type MainFeatureState = MainFeatureDef["state"];
77
+ /** @interface */
78
+ export type MainFeatureTreeInstance = MainFeatureDef["treeInstance"];
79
+ /** @interface */
80
+ export type MainFeatureItemInstance = MainFeatureDef["itemInstance"];
81
+ export type MainFeatureHotkeys = MainFeatureDef["hotkeys"];
82
+
83
+ /** @interface */
84
+ export type RenamingFeatureConfig<T> = RenamingFeatureDef<T>["config"];
85
+ /** @interface */
86
+ export type RenamingFeatureState<T> = RenamingFeatureDef<T>["state"];
87
+ /** @interface */
88
+ export type RenamingFeatureTreeInstance<T> =
89
+ RenamingFeatureDef<T>["treeInstance"];
90
+ /** @interface */
91
+ export type RenamingFeatureItemInstance<T> =
92
+ RenamingFeatureDef<T>["itemInstance"];
93
+ export type RenamingFeatureHotkeys<T> = RenamingFeatureDef<T>["hotkeys"];
94
+
95
+ /** @interface */
96
+ export type SearchFeatureConfig<T> = SearchFeatureDef<T>["config"];
97
+ /** @interface */
98
+ export type SearchFeatureState<T> = SearchFeatureDef<T>["state"];
99
+ /** @interface */
100
+ export type SearchFeatureTreeInstance<T> = SearchFeatureDef<T>["treeInstance"];
101
+ /** @interface */
102
+ export type SearchFeatureItemInstance<T> = SearchFeatureDef<T>["itemInstance"];
103
+ export type SearchFeatureHotkeys<T> = SearchFeatureDef<T>["hotkeys"];
104
+
105
+ /** @interface */
106
+ export type SelectionFeatureConfig<T> = SelectionFeatureDef<T>["config"];
107
+ /** @interface */
108
+ export type SelectionFeatureState<T> = SelectionFeatureDef<T>["state"];
109
+ /** @interface */
110
+ export type SelectionFeatureTreeInstance<T> =
111
+ SelectionFeatureDef<T>["treeInstance"];
112
+ /** @interface */
113
+ export type SelectionFeatureItemInstance<T> =
114
+ SelectionFeatureDef<T>["itemInstance"];
115
+ export type SelectionFeatureHotkeys<T> = SelectionFeatureDef<T>["hotkeys"];
116
+
117
+ /** @interface */
118
+ export type SyncDataLoaderFeatureConfig<T> =
119
+ SyncDataLoaderFeatureDef<T>["config"];
120
+ /** @interface */
121
+ export type SyncDataLoaderFeatureState<T> =
122
+ SyncDataLoaderFeatureDef<T>["state"];
123
+ /** @interface */
124
+ export type SyncDataLoaderFeatureTreeInstance<T> =
125
+ SyncDataLoaderFeatureDef<T>["treeInstance"];
126
+ /** @interface */
127
+ export type SyncDataLoaderFeatureItemInstance<T> =
128
+ SyncDataLoaderFeatureDef<T>["itemInstance"];
129
+ export type SyncDataLoaderFeatureHotkeys<T> =
130
+ SyncDataLoaderFeatureDef<T>["hotkeys"];
131
+
132
+ /** @interface */
133
+ export type TreeFeatureConfig<T> = TreeFeatureDef<T>["config"];
134
+ /** @interface */
135
+ export type TreeFeatureState<T> = TreeFeatureDef<T>["state"];
136
+ /** @interface */
137
+ export type TreeFeatureTreeInstance<T> = TreeFeatureDef<T>["treeInstance"];
138
+ /** @interface */
139
+ export type TreeFeatureItemInstance<T> = TreeFeatureDef<T>["itemInstance"];
140
+ export type TreeFeatureHotkeys<T> = TreeFeatureDef<T>["hotkeys"];
package/src/types/core.ts CHANGED
@@ -32,7 +32,7 @@ export type EmptyFeatureDef = {
32
32
  };
33
33
 
34
34
  type UnionToIntersection<T> = (T extends any ? (x: T) => any : never) extends (
35
- x: infer R
35
+ x: infer R,
36
36
  ) => any
37
37
  ? R
38
38
  : never;
@@ -52,6 +52,7 @@ export type FeatureDefs<T> =
52
52
  | ExpandAllFeatureDef;
53
53
 
54
54
  type MergedFeatures<F extends FeatureDef> = {
55
+ // TODO remove in favor of types below
55
56
  state: UnionToIntersection<F["state"]>;
56
57
  config: UnionToIntersection<F["config"]>;
57
58
  treeInstance: UnionToIntersection<F["treeInstance"]>;
@@ -117,7 +118,7 @@ export type HotkeysConfig<T, F extends FeatureDef = FeatureDefs<T>> = Record<
117
118
 
118
119
  export type CustomHotkeysConfig<
119
120
  T,
120
- F extends FeatureDef = FeatureDefs<T>
121
+ F extends FeatureDef = FeatureDefs<T>,
121
122
  > = Partial<
122
123
  Record<HotkeyName<F> | `custom${string}`, Partial<HotkeyConfig<T>>>
123
124
  >;
@@ -125,7 +126,7 @@ export type CustomHotkeysConfig<
125
126
  export type FeatureImplementation<
126
127
  T = any,
127
128
  D extends FeatureDef = any,
128
- F extends FeatureDef = EmptyFeatureDef
129
+ F extends FeatureDef = EmptyFeatureDef,
129
130
  > = {
130
131
  key?: string;
131
132
  deps?: string[];
@@ -137,46 +138,46 @@ export type FeatureImplementation<
137
138
 
138
139
  getInitialState?: (
139
140
  initialState: Partial<MergedFeatures<F>["state"]>,
140
- tree: MergedFeatures<F>["treeInstance"]
141
+ tree: MergedFeatures<F>["treeInstance"],
141
142
  ) => Partial<D["state"] & MergedFeatures<F>["state"]>;
142
143
 
143
144
  getDefaultConfig?: (
144
145
  defaultConfig: Partial<MergedFeatures<F>["config"]>,
145
- tree: MergedFeatures<F>["treeInstance"]
146
+ tree: MergedFeatures<F>["treeInstance"],
146
147
  ) => Partial<D["config"] & MergedFeatures<F>["config"]>;
147
148
 
148
149
  createTreeInstance?: (
149
150
  prev: MergedFeatures<F>["treeInstance"],
150
- instance: MergedFeatures<F>["treeInstance"]
151
+ instance: MergedFeatures<F>["treeInstance"],
151
152
  ) => D["treeInstance"] & MergedFeatures<F>["treeInstance"];
152
153
 
153
154
  createItemInstance?: (
154
155
  prev: MergedFeatures<F>["itemInstance"],
155
156
  item: MergedFeatures<F>["itemInstance"],
156
157
  tree: MergedFeatures<F>["treeInstance"],
157
- itemId: string
158
+ itemId: string,
158
159
  ) => D["itemInstance"] & MergedFeatures<F>["itemInstance"];
159
160
 
160
161
  onTreeMount?: (
161
162
  instance: MergedFeatures<F>["treeInstance"],
162
- treeElement: HTMLElement
163
+ treeElement: HTMLElement,
163
164
  ) => void;
164
165
 
165
166
  onTreeUnmount?: (
166
167
  instance: MergedFeatures<F>["treeInstance"],
167
- treeElement: HTMLElement
168
+ treeElement: HTMLElement,
168
169
  ) => void;
169
170
 
170
171
  onItemMount?: (
171
172
  instance: MergedFeatures<F>["itemInstance"],
172
173
  itemElement: HTMLElement,
173
- tree: MergedFeatures<F>["treeInstance"]
174
+ tree: MergedFeatures<F>["treeInstance"],
174
175
  ) => void;
175
176
 
176
177
  onItemUnmount?: (
177
178
  instance: MergedFeatures<F>["itemInstance"],
178
179
  itemElement: HTMLElement,
179
- tree: MergedFeatures<F>["treeInstance"]
180
+ tree: MergedFeatures<F>["treeInstance"],
180
181
  ) => void;
181
182
 
182
183
  hotkeys?: HotkeysConfig<T, D>;
@@ -25,7 +25,7 @@ type TPrimitives =
25
25
  export type TMerged<T> = [T] extends [Array<any>]
26
26
  ? { [K in keyof T]: TMerged<T[K]> }
27
27
  : [T] extends [TPrimitives]
28
- ? T
29
- : [T] extends [object]
30
- ? TPartialKeys<{ [K in TAllKeys<T>]: TMerged<TIndexValue<T, K>> }, never>
31
- : T;
28
+ ? T
29
+ : [T] extends [object]
30
+ ? TPartialKeys<{ [K in TAllKeys<T>]: TMerged<TIndexValue<T, K>> }, never>
31
+ : T;
@@ -5,7 +5,7 @@ import { insertItemsAtTarget } from "./insert-items-at-target";
5
5
 
6
6
  export const createOnDropHandler =
7
7
  <T>(
8
- onChangeChildren: (item: ItemInstance<T>, newChildren: string[]) => void
8
+ onChangeChildren: (item: ItemInstance<T>, newChildren: string[]) => void,
9
9
  ) =>
10
10
  (items: ItemInstance<T>[], target: DropTarget<T>) => {
11
11
  const itemIds = items.map((item) => item.getId());
@@ -4,7 +4,7 @@ import { DropTarget } from "../features/drag-and-drop/types";
4
4
  export const insertItemsAtTarget = <T>(
5
5
  itemIds: string[],
6
6
  target: DropTarget<T>,
7
- onChangeChildren: (item: ItemInstance<T>, newChildrenIds: string[]) => void
7
+ onChangeChildren: (item: ItemInstance<T>, newChildrenIds: string[]) => void,
8
8
  ) => {
9
9
  // add moved items to new common parent, if dropped onto parent
10
10
  if (target.childIndex === null) {
@@ -2,7 +2,7 @@ import { ItemInstance } from "../types/core";
2
2
 
3
3
  export const removeItemsFromParents = <T>(
4
4
  movedItems: ItemInstance<T>[],
5
- onChangeChildren: (item: ItemInstance<T>, newChildrenIds: string[]) => void
5
+ onChangeChildren: (item: ItemInstance<T>, newChildrenIds: string[]) => void,
6
6
  ) => {
7
7
  // TODO bulk sibling changes together
8
8
  for (const item of movedItems) {
@@ -12,7 +12,7 @@ export const removeItemsFromParents = <T>(
12
12
  item.getParent(),
13
13
  siblings
14
14
  .filter((sibling) => sibling.getId() !== item.getId())
15
- .map((i) => i.getId())
15
+ .map((i) => i.getId()),
16
16
  );
17
17
  }
18
18
  }
package/src/utils.ts CHANGED
@@ -4,7 +4,7 @@ export type NoInfer<T> = [T][T extends any ? 0 : never];
4
4
 
5
5
  export const memo = <D extends readonly any[], R>(
6
6
  fn: (...args: [...D]) => R,
7
- deps: () => [...D]
7
+ deps: () => [...D],
8
8
  ) => {
9
9
  let value: R | undefined;
10
10
  let oldDeps: D | null = null;
@@ -40,7 +40,7 @@ export function functionalUpdate<T>(updater: Updater<T>, input: T): T {
40
40
  }
41
41
  export function makeStateUpdater<K extends keyof TreeState<any>>(
42
42
  key: K,
43
- instance: unknown
43
+ instance: unknown,
44
44
  ) {
45
45
  return (updater: Updater<TreeState<any>[K]>) => {
46
46
  (instance as any).setState(<TTableState>(old: TTableState) => {
package/typedoc.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "extends": ["../../typedoc.base.json"],
3
- "entryPoints": ["src/index.ts"]
3
+ "entryPoints": ["src/mddocs-entry.ts"]
4
4
  }