tree-element 0.1.0 → 0.2.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 (149) hide show
  1. package/README.md +49 -29
  2. package/lib/animation.js +5 -5
  3. package/lib/animation.js.map +1 -1
  4. package/lib/classNames.d.ts.map +1 -1
  5. package/lib/classNames.js +2 -2
  6. package/lib/classNames.js.map +1 -1
  7. package/lib/dataLoader.d.ts.map +1 -1
  8. package/lib/dataLoader.js +18 -21
  9. package/lib/dataLoader.js.map +1 -1
  10. package/lib/dragAndDropHandler/binarySearch.js +3 -3
  11. package/lib/dragAndDropHandler/binarySearch.js.map +1 -1
  12. package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -1
  13. package/lib/dragAndDropHandler/dragElement.js +9 -12
  14. package/lib/dragAndDropHandler/dragElement.js.map +1 -1
  15. package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -1
  16. package/lib/dragAndDropHandler/generateHitAreas.js +25 -25
  17. package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -1
  18. package/lib/dragAndDropHandler/index.d.ts.map +1 -1
  19. package/lib/dragAndDropHandler/index.js +90 -114
  20. package/lib/dragAndDropHandler/index.js.map +1 -1
  21. package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -1
  22. package/lib/dragAndDropHandler/iterateVisibleNodes.js +10 -10
  23. package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -1
  24. package/lib/dragAndDropHandler/types.d.ts.map +1 -1
  25. package/lib/elementsRenderer.d.ts +15 -6
  26. package/lib/elementsRenderer.d.ts.map +1 -1
  27. package/lib/elementsRenderer.js +157 -121
  28. package/lib/elementsRenderer.js.map +1 -1
  29. package/lib/events.d.ts +11 -4
  30. package/lib/events.d.ts.map +1 -1
  31. package/lib/index.d.ts +5 -5
  32. package/lib/index.d.ts.map +1 -1
  33. package/lib/index.js +249 -252
  34. package/lib/index.js.map +1 -1
  35. package/lib/keyHandler.d.ts +2 -3
  36. package/lib/keyHandler.d.ts.map +1 -1
  37. package/lib/keyHandler.js +26 -25
  38. package/lib/keyHandler.js.map +1 -1
  39. package/lib/methodTypes.d.ts +1 -1
  40. package/lib/methodTypes.d.ts.map +1 -1
  41. package/lib/mouseHandler.d.ts.map +1 -1
  42. package/lib/mouseHandler.js +26 -42
  43. package/lib/mouseHandler.js.map +1 -1
  44. package/lib/mouseUtils.d.ts.map +1 -1
  45. package/lib/mouseUtils.js +2 -2
  46. package/lib/mouseUtils.js.map +1 -1
  47. package/lib/node.d.ts +2 -1
  48. package/lib/node.d.ts.map +1 -1
  49. package/lib/node.js +36 -35
  50. package/lib/node.js.map +1 -1
  51. package/lib/nodeElement/borderDropHint.d.ts.map +1 -1
  52. package/lib/nodeElement/borderDropHint.js +4 -5
  53. package/lib/nodeElement/borderDropHint.js.map +1 -1
  54. package/lib/nodeElement/folderElement.d.ts +7 -4
  55. package/lib/nodeElement/folderElement.d.ts.map +1 -1
  56. package/lib/nodeElement/folderElement.js +61 -42
  57. package/lib/nodeElement/folderElement.js.map +1 -1
  58. package/lib/nodeElement/ghostDropHint.d.ts.map +1 -1
  59. package/lib/nodeElement/ghostDropHint.js +5 -9
  60. package/lib/nodeElement/ghostDropHint.js.map +1 -1
  61. package/lib/nodeElement/index.d.ts +2 -1
  62. package/lib/nodeElement/index.d.ts.map +1 -1
  63. package/lib/nodeElement/index.js +34 -26
  64. package/lib/nodeElement/index.js.map +1 -1
  65. package/lib/nodeUtils.d.ts.map +1 -1
  66. package/lib/nodeUtils.js +1 -1
  67. package/lib/nodeUtils.js.map +1 -1
  68. package/lib/options.d.ts.map +1 -1
  69. package/lib/positionUtils.js +3 -3
  70. package/lib/positionUtils.js.map +1 -1
  71. package/lib/requestUrl.d.ts +1 -1
  72. package/lib/requestUrl.d.ts.map +1 -1
  73. package/lib/requestUrl.js +4 -6
  74. package/lib/requestUrl.js.map +1 -1
  75. package/lib/saveStateHandler.d.ts.map +1 -1
  76. package/lib/saveStateHandler.js +38 -48
  77. package/lib/saveStateHandler.js.map +1 -1
  78. package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -1
  79. package/lib/scrollHandler/containerScrollParent.js +9 -11
  80. package/lib/scrollHandler/containerScrollParent.js.map +1 -1
  81. package/lib/scrollHandler/createScrollParent.d.ts.map +1 -1
  82. package/lib/scrollHandler/createScrollParent.js +10 -10
  83. package/lib/scrollHandler/createScrollParent.js.map +1 -1
  84. package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -1
  85. package/lib/scrollHandler/documentScrollParent.js +16 -19
  86. package/lib/scrollHandler/documentScrollParent.js.map +1 -1
  87. package/lib/scrollHandler/scrollParent.d.ts.map +1 -1
  88. package/lib/scrollHandler/scrollParent.js +11 -17
  89. package/lib/scrollHandler/scrollParent.js.map +1 -1
  90. package/lib/scrollHandler.d.ts.map +1 -1
  91. package/lib/scrollHandler.js +11 -14
  92. package/lib/scrollHandler.js.map +1 -1
  93. package/lib/selectNodeHandler.d.ts +2 -2
  94. package/lib/selectNodeHandler.d.ts.map +1 -1
  95. package/lib/selectNodeHandler.js +45 -54
  96. package/lib/selectNodeHandler.js.map +1 -1
  97. package/lib/setDefaultOptions.d.ts.map +1 -1
  98. package/lib/setDefaultOptions.js +23 -28
  99. package/lib/setDefaultOptions.js.map +1 -1
  100. package/lib/triggerCustomEvent.d.ts.map +1 -1
  101. package/lib/triggerCustomEvent.js +2 -2
  102. package/lib/triggerCustomEvent.js.map +1 -1
  103. package/lib/util.d.ts.map +1 -1
  104. package/lib/util.js +2 -2
  105. package/lib/util.js.map +1 -1
  106. package/lib/version.d.ts +1 -1
  107. package/lib/version.js +1 -1
  108. package/lib/version.js.map +1 -1
  109. package/package.json +7 -3
  110. package/src/animation.ts +1 -1
  111. package/src/classNames.ts +52 -52
  112. package/src/dataLoader.ts +68 -70
  113. package/src/dragAndDropHandler/binarySearch.ts +17 -17
  114. package/src/dragAndDropHandler/dragElement.ts +50 -50
  115. package/src/dragAndDropHandler/generateHitAreas.ts +156 -161
  116. package/src/dragAndDropHandler/index.ts +342 -351
  117. package/src/dragAndDropHandler/iterateVisibleNodes.ts +59 -63
  118. package/src/dragAndDropHandler/types.ts +5 -5
  119. package/src/elementsRenderer.ts +351 -298
  120. package/src/events.ts +216 -209
  121. package/src/header.txt +1 -1
  122. package/src/index.ts +52 -82
  123. package/src/keyHandler.ts +125 -115
  124. package/src/methodTypes.ts +4 -7
  125. package/src/mouseHandler.ts +314 -317
  126. package/src/mouseUtils.ts +14 -14
  127. package/src/node.ts +761 -766
  128. package/src/nodeElement/borderDropHint.ts +25 -25
  129. package/src/nodeElement/folderElement.ts +135 -112
  130. package/src/nodeElement/ghostDropHint.ts +62 -62
  131. package/src/nodeElement/index.ts +88 -74
  132. package/src/nodeUtils.ts +5 -5
  133. package/src/options.ts +6 -2
  134. package/src/requestUrl.ts +3 -3
  135. package/src/saveStateHandler.ts +204 -206
  136. package/src/scrollHandler/containerScrollParent.ts +49 -52
  137. package/src/scrollHandler/createScrollParent.ts +27 -27
  138. package/src/scrollHandler/documentScrollParent.ts +70 -70
  139. package/src/scrollHandler/scrollParent.ts +98 -98
  140. package/src/scrollHandler.ts +45 -45
  141. package/src/selectNodeHandler.ts +176 -166
  142. package/src/setDefaultOptions.ts +25 -22
  143. package/src/triggerCustomEvent.ts +7 -3
  144. package/src/util.ts +2 -2
  145. package/src/version.ts +1 -1
  146. package/tree_element.debug.js +3770 -3799
  147. package/tree_element.debug.js.map +1 -1
  148. package/tree_element.js +2 -2
  149. package/tree_element.js.map +1 -1
package/src/events.ts CHANGED
@@ -1,17 +1,17 @@
1
1
  import type { Node, NodeData, Position } from "./node";
2
2
 
3
3
  export interface MoveInfo {
4
- doMove: () => void;
5
- movedNode: Node;
6
- originalEvent: Event;
7
- position: Position;
8
- previousParent: Node | null;
9
- targetNode: Node;
4
+ doMove: () => void;
5
+ movedNode: Node;
6
+ originalEvent: Event;
7
+ position: Position;
8
+ previousParent: Node | null;
9
+ targetNode: Node;
10
10
  }
11
11
 
12
12
  // The CustomEvent of a tree event, for example `TreeEvent<"tree.select">`.
13
13
  export type TreeEvent<Name extends TreeEventName = TreeEventName> = CustomEvent<
14
- TreeEvents[Name]
14
+ TreeEvents[Name]
15
15
  >;
16
16
 
17
17
  export type TreeEventName = keyof TreeEvents;
@@ -22,216 +22,223 @@ export type TreeEventName = keyof TreeEvents;
22
22
  // events are ordered chronologically instead of alphabetically.
23
23
  /* eslint-disable perfectionist/sort-interfaces */
24
24
  export interface TreeEvents {
25
- /**
26
- * Dispatched once, after the tree is rendered for the first time. With
27
- * `dataUrl` this is after the data has arrived, so it is the moment the
28
- * api is safe to use:
29
- *
30
- * ```js
31
- * element.addEventListener("tree.init", () => {
32
- * tree.selectNode(tree.getNodeByName("node1"));
33
- * });
34
- * ```
35
- *
36
- * No `detail`.
37
- *
38
- * With inline `data`, the tree is rendered inside the constructor, so
39
- * this event has already fired by the time the constructor returns. Add
40
- * the listener to the element _before_ creating the tree:
41
- *
42
- * ```js
43
- * const element = document.getElementById("tree1");
44
- *
45
- * element.addEventListener("tree.init", () => {
46
- * // ...
47
- * });
48
- *
49
- * const tree = new TreeElement({ data, htmlElement: element });
50
- * ```
51
- *
52
- * @group Lifecycle
53
- */
54
- "tree.init": undefined;
55
- /**
56
- * Dispatched after the tree has been re-rendered. No `detail`.
57
- *
58
- * @group Lifecycle
59
- */
60
- "tree.refresh": undefined;
61
- /**
62
- * Dispatched when a node title is clicked. Call `preventDefault()` to
63
- * stop the tree from selecting the node:
64
- *
65
- * ```js
66
- * element.addEventListener("tree.click", (e) => {
67
- * e.preventDefault();
68
- * console.log("clicked", e.detail.node.name, "but not selected");
69
- * });
70
- * ```
71
- *
72
- * @group Mouse
73
- */
74
- "tree.click": {
75
- node: Node;
76
- originalEvent: MouseEvent;
77
- };
78
- /**
79
- * Dispatched when a node title is double clicked.
80
- *
81
- * @group Mouse
82
- */
83
- "tree.dblclick": {
84
- node: Node;
85
- originalEvent: MouseEvent;
86
- };
87
- /**
88
- * Dispatched on a right click on a node, unless `useContextMenu` is
89
- * `false`. The browser's own menu is suppressed.
90
- *
91
- * @group Mouse
92
- */
93
- "tree.contextmenu": {
94
- node: Node;
95
- originalEvent: MouseEvent;
96
- };
97
- /**
98
- * Dispatched when a folder is opened, after the animation.
99
- *
100
- * @group Opening and closing
101
- */
102
- "tree.open": {
103
- node: Node;
104
- };
105
- /**
106
- * Dispatched when a folder is closed, after the animation.
107
- *
108
- * @group Opening and closing
109
- */
110
- "tree.close": {
111
- node: Node;
112
- };
113
- /**
114
- * Dispatched when a node is selected. A deselection is
115
- * [`tree.deselect`](#tree-deselect) instead, so `node` is always a node
116
- * here.
117
- *
118
- * ```js
119
- * element.addEventListener("tree.select", (e) => {
120
- * console.log("selected", e.detail.node.name);
121
- * });
122
- * ```
123
- *
124
- * @group Selection
125
- */
126
- "tree.select": {
127
- /** The node that was selected before, if any. */
128
- deselectedNode: Node | null;
129
- /** The node that is now selected. */
130
- node: Node;
131
- };
132
- /**
133
- * Dispatched when the selected node is deselected, which happens when it
134
- * is clicked again or passed to `selectNode` again. No `tree.select` is
135
- * dispatched for it.
136
- *
137
- * ```js
138
- * element.addEventListener("tree.deselect", (e) => {
139
- * console.log("deselected", e.detail.node.name);
140
- * });
141
- * ```
142
- *
143
- * Selecting another node does not dispatch it — that is a `tree.select`
144
- * with the previous node in `deselectedNode`. It is also not dispatched
145
- * with `mustToggle: false`, or by `selectNode(null)`,
146
- * `removeFromSelection`, `removeNode`, `loadData` and restoring a saved
147
- * state.
148
- *
149
- * @group Selection
150
- */
151
- "tree.deselect": {
152
- node: Node;
153
- };
154
- /**
155
- * Dispatched when a node is dropped after a drag.
156
- *
157
- * | `detail` | Type |
158
- * | ------------------------- | --------------------------------- |
159
- * | `moveInfo.movedNode` | `Node` |
160
- * | `moveInfo.targetNode` | `Node` |
161
- * | `moveInfo.position` | `"before" \| "after" \| "inside"` |
162
- * | `moveInfo.previousParent` | `Node \| null` |
163
- * | `moveInfo.originalEvent` | `Event` |
164
- * | `moveInfo.doMove` | `() => void` |
165
- *
166
- * Call `preventDefault()` to keep the tree as it is, and
167
- * `moveInfo.doMove()` to apply the move later. See
168
- * [Drag and drop](/guide/drag-and-drop#reacting-to-a-move).
169
- *
170
- * @group Drag and drop
171
- */
172
- "tree.move": {
173
- /** @hidden The fields are in the table above. */
174
- moveInfo: MoveInfo;
175
- };
176
- /**
177
- * Dispatched when data is set on the tree, both from the `data` option
178
- * and from a url.
179
- *
180
- * @group Loading data
181
- */
182
- "tree.set_data": {
183
- /** The node whose children were replaced, if it was a subtree. */
184
- node?: Node;
185
- treeData?: NodeData[];
186
- };
187
- /**
188
- * Dispatched when a request starts.
189
- *
190
- * @group Loading data
191
- */
192
- "tree.loading_data": {
193
- element: HTMLElement;
194
- /** The node whose children are loading, if it is a subtree. */
195
- node?: Node;
196
- };
197
- /**
198
- * Dispatched when a request finishes. It is dispatched when the request
199
- * fails too; a [`tree.load_failed`](#tree-load-failed) follows it.
200
- *
201
- * @group Loading data
202
- */
203
- "tree.loaded_data": {
204
- element: HTMLElement;
205
- /** The node whose children were loaded, if it was a subtree. */
206
- node?: Node;
207
- };
208
- /**
209
- * Dispatched when a request returns an error status, after
210
- * `tree.loaded_data`:
211
- *
212
- * ```js
213
- * element.addEventListener("tree.load_failed", (e) => {
214
- * console.error("loading the tree failed", e.detail.response.status);
215
- * });
216
- * ```
217
- *
218
- * @group Loading data
219
- */
220
- "tree.load_failed": {
221
- response: Response;
222
- };
25
+ /**
26
+ * Dispatched once, after the tree is rendered for the first time. With
27
+ * `dataUrl` this is after the data has arrived, so it is the moment the
28
+ * api is safe to use:
29
+ *
30
+ * ```js
31
+ * element.addEventListener("tree.init", () => {
32
+ * tree.selectNode(tree.getNodeByName("node1"));
33
+ * });
34
+ * ```
35
+ *
36
+ * No `detail`.
37
+ *
38
+ * With inline `data`, the tree is rendered inside the constructor, so
39
+ * this event has already fired by the time the constructor returns. Add
40
+ * the listener to the element _before_ creating the tree:
41
+ *
42
+ * ```js
43
+ * const element = document.getElementById("tree1");
44
+ *
45
+ * element.addEventListener("tree.init", () => {
46
+ * // ...
47
+ * });
48
+ *
49
+ * const tree = new TreeElement({ data, htmlElement: element });
50
+ * ```
51
+ *
52
+ * @group Lifecycle
53
+ */
54
+ "tree.init": undefined;
55
+ /**
56
+ * Dispatched after the tree has been re-rendered. No `detail`.
57
+ *
58
+ * @group Lifecycle
59
+ */
60
+ "tree.refresh": undefined;
61
+ /**
62
+ * Dispatched when a node title is clicked. Call `preventDefault()` to
63
+ * stop the tree from selecting the node:
64
+ *
65
+ * ```js
66
+ * element.addEventListener("tree.click", (e) => {
67
+ * e.preventDefault();
68
+ * console.log("clicked", e.detail.node.name, "but not selected");
69
+ * });
70
+ * ```
71
+ *
72
+ * @group Mouse
73
+ */
74
+ "tree.click": {
75
+ node: Node;
76
+ originalEvent: MouseEvent;
77
+ };
78
+ /**
79
+ * Dispatched when a node title is double clicked.
80
+ *
81
+ * @group Mouse
82
+ */
83
+ "tree.dblclick": {
84
+ node: Node;
85
+ originalEvent: MouseEvent;
86
+ };
87
+ /**
88
+ * Dispatched on a right click on a node, unless `useContextMenu` is
89
+ * `false`. The browser's own menu is suppressed.
90
+ *
91
+ * @group Mouse
92
+ */
93
+ "tree.contextmenu": {
94
+ node: Node;
95
+ originalEvent: MouseEvent;
96
+ };
97
+ /**
98
+ * Dispatched when a folder is opened, after the animation.
99
+ *
100
+ * @group Opening and closing
101
+ */
102
+ "tree.open": {
103
+ node: Node;
104
+ };
105
+ /**
106
+ * Dispatched when a folder is closed, after the animation.
107
+ *
108
+ * @group Opening and closing
109
+ */
110
+ "tree.close": {
111
+ node: Node;
112
+ };
113
+ /**
114
+ * Dispatched when a node is selected. A deselection is
115
+ * [`tree.deselect`](#tree-deselect) instead, so `node` is always a node
116
+ * here.
117
+ *
118
+ * ```js
119
+ * element.addEventListener("tree.select", (e) => {
120
+ * console.log("selected", e.detail.node.name);
121
+ * });
122
+ * ```
123
+ *
124
+ * @group Selection
125
+ */
126
+ "tree.select": {
127
+ /** The node that was selected before, if any. */
128
+ deselectedNode: Node | null;
129
+ /** The node that is now selected. */
130
+ node: Node;
131
+ };
132
+ /**
133
+ * Dispatched when the selected node is deselected, which happens when it
134
+ * is clicked again or passed to `selectNode` again. No `tree.select` is
135
+ * dispatched for it.
136
+ *
137
+ * ```js
138
+ * element.addEventListener("tree.deselect", (e) => {
139
+ * console.log("deselected", e.detail.node.name);
140
+ * });
141
+ * ```
142
+ *
143
+ * Selecting another node does not dispatch it — that is a `tree.select`
144
+ * with the previous node in `deselectedNode`. It is also not dispatched
145
+ * with `mustToggle: false`, or by `selectNode(null)`,
146
+ * `removeFromSelection`, `removeNode`, `loadData` and restoring a saved
147
+ * state.
148
+ *
149
+ * @group Selection
150
+ */
151
+ "tree.deselect": {
152
+ node: Node;
153
+ };
154
+ /**
155
+ * Dispatched when a node is dropped after a drag.
156
+ *
157
+ * | `detail` | Type |
158
+ * | ------------------------- | --------------------------------- |
159
+ * | `moveInfo.movedNode` | `Node` |
160
+ * | `moveInfo.targetNode` | `Node` |
161
+ * | `moveInfo.position` | `"before" \| "after" \| "inside"` |
162
+ * | `moveInfo.previousParent` | `Node \| null` |
163
+ * | `moveInfo.originalEvent` | `Event` |
164
+ * | `moveInfo.doMove` | `() => void` |
165
+ *
166
+ * Call `preventDefault()` to keep the tree as it is, and
167
+ * `moveInfo.doMove()` to apply the move later. See
168
+ * [Drag and drop](/guide/drag-and-drop#reacting-to-a-move).
169
+ *
170
+ * @group Drag and drop
171
+ */
172
+ "tree.move": {
173
+ /** @hidden The fields are in the table above. */
174
+ moveInfo: MoveInfo;
175
+ };
176
+ /**
177
+ * Dispatched when data is set on the tree, both from the `data` option
178
+ * and from a url.
179
+ *
180
+ * @group Loading data
181
+ */
182
+ "tree.set_data": {
183
+ /** The node whose children were replaced, if it was a subtree. */
184
+ node?: Node;
185
+ treeData?: NodeData[];
186
+ };
187
+ /**
188
+ * Dispatched when a request starts.
189
+ *
190
+ * @group Loading data
191
+ */
192
+ "tree.loading_data": {
193
+ element: HTMLElement;
194
+ /** The node whose children are loading, if it is a subtree. */
195
+ node?: Node;
196
+ };
197
+ /**
198
+ * Dispatched when a request finishes. It is dispatched when the request
199
+ * fails too; a [`tree.load_failed`](#tree-load-failed) follows it.
200
+ *
201
+ * @group Loading data
202
+ */
203
+ "tree.loaded_data": {
204
+ element: HTMLElement;
205
+ /** The node whose children were loaded, if it was a subtree. */
206
+ node?: Node;
207
+ };
208
+ /**
209
+ * Dispatched when a request returns an error status or fails with a
210
+ * network error, after `tree.loaded_data`:
211
+ *
212
+ * ```js
213
+ * element.addEventListener("tree.load_failed", (e) => {
214
+ * if (e.detail.response) {
215
+ * console.error("loading the tree failed", e.detail.response.status);
216
+ * } else {
217
+ * console.error("loading the tree failed", e.detail.error);
218
+ * }
219
+ * });
220
+ * ```
221
+ *
222
+ * @group Loading data
223
+ */
224
+ "tree.load_failed": {
225
+ /** The error thrown by `fetch`, if the request failed with a network error. */
226
+ error?: unknown;
227
+ /** The response, if the request returned an error status. */
228
+ response?: Response;
229
+ };
223
230
  }
224
231
  /* eslint-enable perfectionist/sort-interfaces */
225
232
 
226
233
  type TreeEventMap = {
227
- [Name in TreeEventName]: TreeEvent<Name>;
234
+ [Name in TreeEventName]: TreeEvent<Name>;
228
235
  };
229
236
 
230
237
  // Type `addEventListener("tree.select", ...)` on elements, the document and the window.
231
238
  declare global {
232
- interface DocumentEventMap extends TreeEventMap { }
239
+ interface DocumentEventMap extends TreeEventMap {}
233
240
 
234
- interface HTMLElementEventMap extends TreeEventMap { }
241
+ interface HTMLElementEventMap extends TreeEventMap {}
235
242
 
236
- interface WindowEventMap extends TreeEventMap { }
243
+ interface WindowEventMap extends TreeEventMap {}
237
244
  }
package/src/header.txt CHANGED
@@ -1,4 +1,4 @@
1
- Html-tree <%= version %>
1
+ Tree-element <%= version %>
2
2
 
3
3
  Copyright <%= year %> Marco Braak
4
4