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
@@ -4,48 +4,24 @@ import DragElement from './dragElement.js';
4
4
  import generateHitAreas from './generateHitAreas.js';
5
5
 
6
6
  class DragAndDropHandler {
7
- currentItem;
8
- hitAreas;
9
- hoveredArea;
10
- isDragging;
11
- _autoEscape;
12
- _classNames;
13
- _dragElement;
14
- _getNodeElement;
15
- _getNodeElementForNode;
16
- _getScrollLeft;
17
- _getTree;
18
- _onCanMove;
19
- _onCanMoveTo;
20
- _onDragMove;
21
- _onDragStop;
22
- _onIsMoveHandle;
23
- _openFolderDelay;
24
- _openFolderTimer;
25
- _openNode;
26
- _previousGhost;
27
- _refreshElements;
28
- _slide;
29
- _treeElement;
30
- _triggerEvent;
31
7
  constructor({
32
- autoEscape,
33
- classNames,
34
- getNodeElement,
35
- getNodeElementForNode,
36
- getScrollLeft,
37
- getTree,
38
- onCanMove,
39
- onCanMoveTo,
40
- onDragMove,
41
- onDragStop,
42
- onIsMoveHandle,
43
- openFolderDelay,
44
- openNode,
45
- refreshElements,
46
- slide,
47
- treeElement,
48
- triggerEvent
8
+ _autoEscape: autoEscape,
9
+ _classNames: classNames,
10
+ _getNodeElement: getNodeElement,
11
+ _getNodeElementForNode: getNodeElementForNode,
12
+ _getScrollLeft: getScrollLeft,
13
+ _getTree: getTree,
14
+ _onCanMove: onCanMove,
15
+ _onCanMoveTo: onCanMoveTo,
16
+ _onDragMove: onDragMove,
17
+ _onDragStop: onDragStop,
18
+ _onIsMoveHandle: onIsMoveHandle,
19
+ _openFolderDelay: openFolderDelay,
20
+ _openNode: openNode,
21
+ _refreshElements: refreshElements,
22
+ _slide: slide,
23
+ _treeElement: treeElement,
24
+ _triggerEvent: triggerEvent
49
25
  }) {
50
26
  this._autoEscape = autoEscape;
51
27
  this._classNames = classNames;
@@ -64,16 +40,16 @@ class DragAndDropHandler {
64
40
  this._slide = slide;
65
41
  this._treeElement = treeElement;
66
42
  this._triggerEvent = triggerEvent;
67
- this.hoveredArea = null;
68
- this.hitAreas = [];
69
- this.isDragging = false;
70
- this.currentItem = null;
43
+ this._hoveredArea = null;
44
+ this._hitAreas = [];
45
+ this._isDragging = false;
46
+ this._currentItem = null;
71
47
  this._dragElement = null;
72
48
  this._openFolderTimer = null;
73
49
  this._previousGhost = null;
74
50
  }
75
- mouseCapture(positionInfo) {
76
- const element = positionInfo.target;
51
+ _mouseCapture(positionInfo) {
52
+ let element = positionInfo.target;
77
53
  if (!this._mustCaptureElement(element)) {
78
54
  return null;
79
55
  }
@@ -82,25 +58,25 @@ class DragAndDropHandler {
82
58
  }
83
59
  let nodeElement = this._getNodeElement(element);
84
60
  if (nodeElement && this._onCanMove) {
85
- if (!this._onCanMove(nodeElement.node)) {
61
+ if (!this._onCanMove(nodeElement._node)) {
86
62
  nodeElement = null;
87
63
  }
88
64
  }
89
- this.currentItem = nodeElement;
90
- return this.currentItem != null;
65
+ this._currentItem = nodeElement;
66
+ return this._currentItem != null;
91
67
  }
92
- mouseDrag(positionInfo) {
93
- if (!this.currentItem || !this._dragElement) {
68
+ _mouseDrag(positionInfo) {
69
+ if (!this._currentItem || !this._dragElement) {
94
70
  return false;
95
71
  }
96
- this._dragElement.move(positionInfo.pageX, positionInfo.pageY);
97
- const area = this._findHoveredArea(positionInfo.pageX, positionInfo.pageY);
98
- if (area && this._canMoveToArea(area, this.currentItem)) {
72
+ this._dragElement._move(positionInfo.pageX, positionInfo.pageY);
73
+ let area = this._findHoveredArea(positionInfo.pageX, positionInfo.pageY);
74
+ if (area && this._canMoveToArea(area, this._currentItem)) {
99
75
  if (!area.node.isFolder()) {
100
76
  this._stopOpenFolderTimer();
101
77
  }
102
- if (this.hoveredArea !== area) {
103
- this.hoveredArea = area;
78
+ if (this._hoveredArea !== area) {
79
+ this._hoveredArea = area;
104
80
 
105
81
  // If this is a closed folder, start timer to open it
106
82
  if (this._mustOpenFolderTimer(area)) {
@@ -113,64 +89,64 @@ class DragAndDropHandler {
113
89
  } else {
114
90
  this._removeDropHint();
115
91
  this._stopOpenFolderTimer();
116
- this.hoveredArea = area;
92
+ this._hoveredArea = area;
117
93
  }
118
94
  if (!area) {
119
95
  if (this._onDragMove) {
120
- this._onDragMove(this.currentItem.node, positionInfo.originalEvent);
96
+ this._onDragMove(this._currentItem._node, positionInfo.originalEvent);
121
97
  }
122
98
  }
123
99
  return true;
124
100
  }
125
- mouseStart(positionInfo) {
126
- if (!this.currentItem) {
101
+ _mouseStart(positionInfo) {
102
+ if (!this._currentItem) {
127
103
  return false;
128
104
  }
129
- this.refresh();
130
- const {
105
+ this._refresh();
106
+ let {
131
107
  left,
132
108
  top
133
109
  } = getElementPosition(positionInfo.target);
134
- const node = this.currentItem.node;
110
+ let node = this._currentItem._node;
135
111
  this._dragElement = new DragElement({
136
- autoEscape: this._autoEscape ?? true,
137
- classNames: this._classNames,
138
- nodeName: node.name,
139
- offsetX: positionInfo.pageX - left,
140
- offsetY: positionInfo.pageY - top,
141
- treeElement: this._treeElement
112
+ _autoEscape: this._autoEscape ?? true,
113
+ _classNames: this._classNames,
114
+ _nodeName: node.name,
115
+ _offsetX: positionInfo.pageX - left,
116
+ _offsetY: positionInfo.pageY - top,
117
+ _treeElement: this._treeElement
142
118
  });
143
- this.isDragging = true;
144
- this.currentItem.element.classList.add(this._classNames.moving);
119
+ this._isDragging = true;
120
+ this._currentItem._element.classList.add(this._classNames.moving);
145
121
  return true;
146
122
  }
147
- mouseStop(positionInfo) {
123
+ _mouseStop(positionInfo) {
148
124
  this._moveItem(positionInfo);
149
125
  this._clear();
150
126
  this._removeHover();
151
127
  this._removeDropHint();
152
128
  this._removeHitAreas();
153
- const currentItem = this.currentItem;
154
- if (this.currentItem) {
155
- this.currentItem.element.classList.remove(this._classNames.moving);
156
- this.currentItem = null;
129
+ let currentItem = this._currentItem;
130
+ if (this._currentItem) {
131
+ this._currentItem._element.classList.remove(this._classNames.moving);
132
+ this._currentItem = null;
157
133
  }
158
- this.isDragging = false;
159
- if (!this.hoveredArea && currentItem) {
134
+ this._isDragging = false;
135
+ if (!this._hoveredArea && currentItem) {
160
136
  if (this._onDragStop) {
161
- this._onDragStop(currentItem.node, positionInfo.originalEvent);
137
+ this._onDragStop(currentItem._node, positionInfo.originalEvent);
162
138
  }
163
139
  }
164
140
  return false;
165
141
  }
166
- refresh() {
142
+ _refresh() {
167
143
  this._removeHitAreas();
168
- if (this.currentItem) {
169
- const currentNode = this.currentItem.node;
144
+ if (this._currentItem) {
145
+ let currentNode = this._currentItem._node;
170
146
  this._generateHitAreas(currentNode);
171
- this.currentItem = this._getNodeElementForNode(currentNode);
172
- if (this.isDragging) {
173
- this.currentItem.element.classList.add(this._classNames.moving);
147
+ this._currentItem = this._getNodeElementForNode(currentNode);
148
+ if (this._isDragging) {
149
+ this._currentItem._element.classList.add(this._classNames.moving);
174
150
  }
175
151
  }
176
152
  }
@@ -178,20 +154,20 @@ class DragAndDropHandler {
178
154
  if (!this._onCanMoveTo) {
179
155
  return true;
180
156
  }
181
- return this._onCanMoveTo(currentItem.node, area.node, area.position);
157
+ return this._onCanMoveTo(currentItem._node, area.node, area.position);
182
158
  }
183
159
  _clear() {
184
160
  if (this._dragElement) {
185
- this._dragElement.remove();
161
+ this._dragElement._remove();
186
162
  this._dragElement = null;
187
163
  }
188
164
  }
189
165
  _findHoveredArea(x, y) {
190
- const dimensions = this._getTreeDimensions();
166
+ let dimensions = this._getTreeDimensions();
191
167
  if (x < dimensions.left || y < dimensions.top || x > dimensions.right || y > dimensions.bottom) {
192
168
  return null;
193
169
  }
194
- return binarySearch(this.hitAreas, area => {
170
+ return binarySearch(this._hitAreas, area => {
195
171
  if (y < area.top) {
196
172
  return 1;
197
173
  } else if (y > area.bottom) {
@@ -202,19 +178,19 @@ class DragAndDropHandler {
202
178
  });
203
179
  }
204
180
  _generateHitAreas(currentNode) {
205
- const tree = this._getTree();
181
+ let tree = this._getTree();
206
182
  if (!tree) {
207
- this.hitAreas = [];
183
+ this._hitAreas = [];
208
184
  } else {
209
- this.hitAreas = generateHitAreas(tree, currentNode, this._getTreeDimensions().bottom);
185
+ this._hitAreas = generateHitAreas(tree, currentNode, this._getTreeDimensions().bottom);
210
186
  }
211
187
  }
212
188
  _getTreeDimensions() {
213
189
  // Return the dimensions of the tree. Add a margin to the bottom to allow
214
190
  // to drag-and-drop after the last element.
215
- const treePosition = getElementPosition(this._treeElement);
216
- const left = treePosition.left + this._getScrollLeft();
217
- const top = treePosition.top;
191
+ let treePosition = getElementPosition(this._treeElement);
192
+ let left = treePosition.left + this._getScrollLeft();
193
+ let top = treePosition.top;
218
194
  return {
219
195
  bottom: top + this._treeElement.clientHeight + 16,
220
196
  left,
@@ -225,16 +201,16 @@ class DragAndDropHandler {
225
201
 
226
202
  /* Move the dragged node to the selected position in the tree. */
227
203
  _moveItem(positionInfo) {
228
- if (this.currentItem && this.hoveredArea?.position && this._canMoveToArea(this.hoveredArea, this.currentItem)) {
229
- const movedNode = this.currentItem.node;
230
- const targetNode = this.hoveredArea.node;
231
- const position = this.hoveredArea.position;
232
- const previousParent = movedNode.parent;
204
+ if (this._currentItem && this._hoveredArea?.position && this._canMoveToArea(this._hoveredArea, this._currentItem)) {
205
+ let movedNode = this._currentItem._node;
206
+ let targetNode = this._hoveredArea.node;
207
+ let position = this._hoveredArea.position;
208
+ let previousParent = movedNode.parent;
233
209
  if (position === "inside") {
234
- this.hoveredArea.node.is_open = true;
210
+ this._hoveredArea.node.is_open = true;
235
211
  }
236
- const doMove = () => {
237
- const tree = this._getTree();
212
+ let doMove = () => {
213
+ let tree = this._getTree();
238
214
  if (tree) {
239
215
  tree.moveNode(movedNode, targetNode, position);
240
216
  this._treeElement.textContent = "";
@@ -256,11 +232,11 @@ class DragAndDropHandler {
256
232
  }
257
233
  }
258
234
  _mustCaptureElement(element) {
259
- const nodeName = element.nodeName;
235
+ let nodeName = element.nodeName;
260
236
  return nodeName !== "INPUT" && nodeName !== "SELECT" && nodeName !== "TEXTAREA";
261
237
  }
262
238
  _mustOpenFolderTimer(area) {
263
- const node = area.node;
239
+ let node = area.node;
264
240
  return node.isFolder() && !node.is_open && area.position === "inside";
265
241
  }
266
242
  _removeDropHint() {
@@ -269,20 +245,20 @@ class DragAndDropHandler {
269
245
  }
270
246
  }
271
247
  _removeHitAreas() {
272
- this.hitAreas = [];
248
+ this._hitAreas = [];
273
249
  }
274
250
  _removeHover() {
275
- this.hoveredArea = null;
251
+ this._hoveredArea = null;
276
252
  }
277
253
  _startOpenFolderTimer(folder) {
278
- const openFolder = () => {
254
+ let openFolder = () => {
279
255
  void this._openNode(folder, this._slide).then(() => {
280
- this.refresh();
256
+ this._refresh();
281
257
  this._updateDropHint();
282
258
  });
283
259
  };
284
260
  this._stopOpenFolderTimer();
285
- const openFolderDelay = this._openFolderDelay;
261
+ let openFolderDelay = this._openFolderDelay;
286
262
  if (openFolderDelay !== false) {
287
263
  this._openFolderTimer = window.setTimeout(openFolder, openFolderDelay);
288
264
  }
@@ -294,7 +270,7 @@ class DragAndDropHandler {
294
270
  }
295
271
  }
296
272
  _updateDropHint() {
297
- if (!this.hoveredArea) {
273
+ if (!this._hoveredArea) {
298
274
  return;
299
275
  }
300
276
 
@@ -302,8 +278,8 @@ class DragAndDropHandler {
302
278
  this._removeDropHint();
303
279
 
304
280
  // add new drop hint
305
- const nodeElement = this._getNodeElementForNode(this.hoveredArea.node);
306
- this._previousGhost = nodeElement.addDropHint(this.hoveredArea.position);
281
+ let nodeElement = this._getNodeElementForNode(this._hoveredArea.node);
282
+ this._previousGhost = nodeElement._addDropHint(this._hoveredArea.position);
307
283
  }
308
284
  }
309
285
 
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../src/dragAndDropHandler/index.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../methodTypes\";\nimport type { PositionInfo } from \"../mouseUtils\";\nimport type { Node } from \"../node\";\nimport type NodeElement from \"../nodeElement\";\nimport type {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../options\";\nimport type { DropHint, HitArea } from \"./types\";\n\nimport { getElementPosition } from \"../positionUtils\";\nimport binarySearch from \"./binarySearch\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n classNames: ClassNames;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\n\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\nexport class DragAndDropHandler {\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\n\n private autoEscape?: boolean;\n private classNames: ClassNames;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\n private getScrollLeft: GetScrollLeft;\n private getTree: GetTree;\n private onCanMove?: OnCanMove;\n private onCanMoveTo?: OnCanMoveTo;\n private onDragMove?: DragMethod;\n private onDragStop?: DragMethod;\n private onIsMoveHandle?: OnIsMoveHandle;\n private openFolderDelay: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n autoEscape,\n classNames,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n }: DragAndDropHandlerParams) {\n this.autoEscape = autoEscape;\n this.classNames = classNames;\n this.getNodeElement = getNodeElement;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getScrollLeft = getScrollLeft;\n this.getTree = getTree;\n this.onCanMove = onCanMove;\n this.onCanMoveTo = onCanMoveTo;\n this.onDragMove = onDragMove;\n this.onDragStop = onDragStop;\n this.onIsMoveHandle = onIsMoveHandle;\n this.openFolderDelay = openFolderDelay;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.slide = slide;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n\n this.dragElement = null;\n this.openFolderTimer = null;\n this.previousGhost = null;\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const element = positionInfo.target;\n\n if (!this.mustCaptureElement(element)) {\n return null;\n }\n\n if (this.onIsMoveHandle && !this.onIsMoveHandle(element)) {\n return null;\n }\n\n let nodeElement = this.getNodeElement(element);\n\n if (nodeElement && this.onCanMove) {\n if (!this.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (!this.currentItem || !this.dragElement) {\n return false;\n }\n\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n\n const area = this.findHoveredArea(\n positionInfo.pageX,\n positionInfo.pageY,\n );\n\n if (area && this.canMoveToArea(area, this.currentItem)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n classNames: this.classNames,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(this.classNames.moving);\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(this.classNames.moving);\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n const currentNode = this.currentItem.node;\n this.generateHitAreas(currentNode);\n this.currentItem = this.getNodeElementForNode(currentNode);\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(this.classNames.moving);\n }\n }\n }\n\n private canMoveToArea(area: HitArea, currentItem: NodeElement): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n return this.onCanMoveTo(currentItem.node, area.node, area.position);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n return binarySearch<HitArea>(this.hitAreas, (area) => {\n if (y < area.top) {\n return 1;\n } else if (y > area.bottom) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n private generateHitAreas(currentNode: Node): void {\n const tree = this.getTree();\n\n if (!tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n currentNode,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n /* Move the dragged node to the selected position in the tree. */\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea?.position &&\n this.canMoveToArea(this.hoveredArea, this.currentItem)\n ) {\n const movedNode = this.currentItem.node;\n const targetNode = this.hoveredArea.node;\n const position = this.hoveredArea.position;\n const previousParent = movedNode.parent;\n\n if (position === \"inside\") {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n if (this.triggerEvent(\"tree.move\", {\n moveInfo: {\n doMove,\n movedNode,\n originalEvent: positionInfo.originalEvent,\n position,\n previousParent,\n targetNode,\n },\n })) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return node.isFolder() && !node.is_open && area.position === \"inside\";\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n void this.openNode(folder, this.slide).then(() => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(\n openFolder,\n openFolderDelay,\n );\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n}\n"],"names":["autoEscape","classNames","dragElement","getNodeElement","getNodeElementForNode","getScrollLeft","getTree","onCanMove","onCanMoveTo","onDragMove","onDragStop","onIsMoveHandle","openFolderDelay","openFolderTimer","openNode","previousGhost","refreshElements","slide","treeElement","triggerEvent","mustCaptureElement","findHoveredArea","canMoveToArea","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","moveItem","clear","removeHover","removeHitAreas","generateHitAreas","getTreeDimensions"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../src/dragAndDropHandler/index.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../methodTypes\";\nimport type { PositionInfo } from \"../mouseUtils\";\nimport type { Node } from \"../node\";\nimport type NodeElement from \"../nodeElement\";\nimport type {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../options\";\nimport type { DropHint, HitArea } from \"./types\";\n\nimport { getElementPosition } from \"../positionUtils\";\nimport binarySearch from \"./binarySearch\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n classNames: ClassNames;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\n\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\nexport class DragAndDropHandler {\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\n\n private autoEscape?: boolean;\n private classNames: ClassNames;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\n private getScrollLeft: GetScrollLeft;\n private getTree: GetTree;\n private onCanMove?: OnCanMove;\n private onCanMoveTo?: OnCanMoveTo;\n private onDragMove?: DragMethod;\n private onDragStop?: DragMethod;\n private onIsMoveHandle?: OnIsMoveHandle;\n private openFolderDelay: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n autoEscape,\n classNames,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n }: DragAndDropHandlerParams) {\n this.autoEscape = autoEscape;\n this.classNames = classNames;\n this.getNodeElement = getNodeElement;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getScrollLeft = getScrollLeft;\n this.getTree = getTree;\n this.onCanMove = onCanMove;\n this.onCanMoveTo = onCanMoveTo;\n this.onDragMove = onDragMove;\n this.onDragStop = onDragStop;\n this.onIsMoveHandle = onIsMoveHandle;\n this.openFolderDelay = openFolderDelay;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.slide = slide;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n\n this.dragElement = null;\n this.openFolderTimer = null;\n this.previousGhost = null;\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const element = positionInfo.target;\n\n if (!this.mustCaptureElement(element)) {\n return null;\n }\n\n if (this.onIsMoveHandle && !this.onIsMoveHandle(element)) {\n return null;\n }\n\n let nodeElement = this.getNodeElement(element);\n\n if (nodeElement && this.onCanMove) {\n if (!this.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (!this.currentItem || !this.dragElement) {\n return false;\n }\n\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n\n const area = this.findHoveredArea(positionInfo.pageX, positionInfo.pageY);\n\n if (area && this.canMoveToArea(area, this.currentItem)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(this.currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n classNames: this.classNames,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(this.classNames.moving);\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(this.classNames.moving);\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n const currentNode = this.currentItem.node;\n this.generateHitAreas(currentNode);\n this.currentItem = this.getNodeElementForNode(currentNode);\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(this.classNames.moving);\n }\n }\n }\n\n private canMoveToArea(area: HitArea, currentItem: NodeElement): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n return this.onCanMoveTo(currentItem.node, area.node, area.position);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n return binarySearch<HitArea>(this.hitAreas, (area) => {\n if (y < area.top) {\n return 1;\n } else if (y > area.bottom) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n private generateHitAreas(currentNode: Node): void {\n const tree = this.getTree();\n\n if (!tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n currentNode,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n /* Move the dragged node to the selected position in the tree. */\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea?.position &&\n this.canMoveToArea(this.hoveredArea, this.currentItem)\n ) {\n const movedNode = this.currentItem.node;\n const targetNode = this.hoveredArea.node;\n const position = this.hoveredArea.position;\n const previousParent = movedNode.parent;\n\n if (position === \"inside\") {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n if (\n this.triggerEvent(\"tree.move\", {\n moveInfo: {\n doMove,\n movedNode,\n originalEvent: positionInfo.originalEvent,\n position,\n previousParent,\n targetNode,\n },\n })\n ) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" && nodeName !== \"SELECT\" && nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return node.isFolder() && !node.is_open && area.position === \"inside\";\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n void this.openNode(folder, this.slide).then(() => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(openFolder, openFolderDelay);\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n}\n"],"names":["autoEscape","classNames","getNodeElement","getNodeElementForNode","getScrollLeft","getTree","onCanMove","onCanMoveTo","onDragMove","onDragStop","onIsMoveHandle","openFolderDelay","openNode","refreshElements","slide","treeElement","triggerEvent","hoveredArea","hitAreas","isDragging","currentItem","dragElement","openFolderTimer","previousGhost","mouseCapture","mustCaptureElement","node","mouseDrag","move","findHoveredArea","canMoveToArea","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","mouseStart","refresh","element","mouseStop","moveItem","clear","removeHover","removeHitAreas","generateHitAreas","remove","getTreeDimensions","addDropHint"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"iterateVisibleNodes.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/iterateVisibleNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAEpC,UAAU,OAAO;IACb,qBAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACnE,kBAAkB,EAAE,CAChB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,IAAI,GAAG,IAAI,EACrB,OAAO,EAAE,WAAW,KACnB,IAAI,CAAC;IACV,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,CACR,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,IAAI,GAAG,IAAI,EACrB,OAAO,EAAE,WAAW,KACnB,IAAI,CAAC;IAQV,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;CACnE;AAED,QAAA,MAAM,mBAAmB,GACrB,MAAM,IAAI,EACV,+FAMG,OAAO,SAuDb,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
1
+ {"version":3,"file":"iterateVisibleNodes.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/iterateVisibleNodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAEpC,UAAU,OAAO;IACf,qBAAqB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;IACnE,kBAAkB,EAAE,CAClB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,IAAI,GAAG,IAAI,EACrB,OAAO,EAAE,WAAW,KACjB,IAAI,CAAC;IACV,eAAe,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACtC,UAAU,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,GAAG,IAAI,EAAE,OAAO,EAAE,WAAW,KAAK,IAAI,CAAC;IAQ9E,gBAAgB,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,KAAK,OAAO,CAAC;CACjE;AAED,QAAA,MAAM,mBAAmB,GACvB,MAAM,IAAI,EACV,+FAMG,OAAO,SAuDX,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -1,12 +1,12 @@
1
- const iterateVisibleNodes = (tree, {
2
- handleAfterOpenFolder,
3
- handleClosedFolder,
4
- handleFirstNode,
5
- handleNode,
6
- handleOpenFolder
1
+ let iterateVisibleNodes = (tree, {
2
+ _handleAfterOpenFolder: handleAfterOpenFolder,
3
+ _handleClosedFolder: handleClosedFolder,
4
+ _handleFirstNode: handleFirstNode,
5
+ _handleNode: handleNode,
6
+ _handleOpenFolder: handleOpenFolder
7
7
  }) => {
8
8
  let isFirstNode = true;
9
- const iterate = (node, nextNode) => {
9
+ let iterate = (node, nextNode) => {
10
10
  let mustIterateInside = (node.is_open === true || !node.element) && node.hasChildren();
11
11
  let element = null;
12
12
 
@@ -28,14 +28,14 @@ const iterateVisibleNodes = (tree, {
28
28
  }
29
29
  }
30
30
  if (mustIterateInside) {
31
- const childrenLength = node.children.length;
31
+ let childrenLength = node.children.length;
32
32
  node.children.forEach((_, i) => {
33
- const child = node.children[i];
33
+ let child = node.children[i];
34
34
  if (child) {
35
35
  if (i === childrenLength - 1) {
36
36
  iterate(child, null);
37
37
  } else {
38
- const nextChild = node.children[i + 1];
38
+ let nextChild = node.children[i + 1];
39
39
  if (nextChild) {
40
40
  iterate(child, nextChild);
41
41
  }
@@ -1 +1 @@
1
- {"version":3,"file":"iterateVisibleNodes.js","sources":["../../src/dragAndDropHandler/iterateVisibleNodes.ts"],"sourcesContent":["import type { Node } from \"../node\";\n\ninterface Options {\n handleAfterOpenFolder: (node: Node, nextNode: Node | null) => void;\n handleClosedFolder: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n handleFirstNode: (node: Node) => void;\n handleNode: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n\n /*\n override\n return\n - true: continue iterating\n - false: stop iterating\n */\n handleOpenFolder: (node: Node, element: HTMLElement) => boolean;\n}\n\nconst iterateVisibleNodes = (\n tree: Node,\n {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n }: Options,\n) => {\n let isFirstNode = true;\n\n const iterate = (node: Node, nextNode: Node | null): void => {\n let mustIterateInside =\n (node.is_open === true || !node.element) && node.hasChildren();\n\n let element: HTMLElement | null = null;\n\n // Is the element visible?\n if (node.element?.offsetParent) {\n element = node.element;\n\n if (isFirstNode) {\n handleFirstNode(node);\n isFirstNode = false;\n }\n\n if (!node.hasChildren()) {\n handleNode(node, nextNode, node.element);\n } else if (node.is_open) {\n if (!handleOpenFolder(node, node.element)) {\n mustIterateInside = false;\n }\n } else {\n handleClosedFolder(node, nextNode, element);\n }\n }\n\n if (mustIterateInside) {\n const childrenLength = node.children.length;\n node.children.forEach((_, i) => {\n const child = node.children[i];\n\n if (child) {\n if (i === childrenLength - 1) {\n iterate(child, null);\n } else {\n const nextChild = node.children[i + 1];\n\n if (nextChild) {\n iterate(child, nextChild);\n }\n }\n }\n });\n\n if (node.is_open && element) {\n handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n\n iterate(tree, null);\n};\n\nexport default iterateVisibleNodes;\n"],"names":[],"mappings":"AAyBA,MAAM,mBAAmB,GAAG,CACxB,IAAU,EACV;EACI,qBAAqB;EACrB,kBAAkB;EAClB,eAAe;EACf,UAAU;AACV,EAAA;AACK,CAAC,KACT;EACD,IAAI,WAAW,GAAG,IAAI;AAEtB,EAAA,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,QAAqB,KAAW;AACzD,IAAA,IAAI,iBAAiB,GACjB,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE;IAElE,IAAI,OAA2B,GAAG,IAAI;;AAEtC;AACA,IAAA,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE;MAC5B,OAAO,GAAG,IAAI,CAAC,OAAO;AAEtB,MAAA,IAAI,WAAW,EAAE;QACb,eAAe,CAAC,IAAI,CAAC;AACrB,QAAA,WAAW,GAAG,KAAK;AACvB,MAAA;AAEA,MAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;QACrB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AAC5C,MAAA,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;QACrB,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACvC,UAAA,iBAAiB,GAAG,KAAK;AAC7B,QAAA;AACJ,MAAA,CAAC,MAAM;AACH,QAAA,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC/C,MAAA;AACJ,IAAA;AAEA,IAAA,IAAI,iBAAiB,EAAE;AACnB,MAAA,MAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;MAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC5B,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE9B,QAAA,IAAI,KAAK,EAAE;AACP,UAAA,IAAI,CAAC,KAAK,cAAc,GAAG,CAAC,EAAE;AAC1B,YAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;AACxB,UAAA,CAAC,MAAM;YACH,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AAEtC,YAAA,IAAI,SAAS,EAAE;AACX,cAAA,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;AAC7B,YAAA;AACJ,UAAA;AACJ,QAAA;AACJ,MAAA,CAAC,CAAC;AAEF,MAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;AACzB,QAAA,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC;AACzC,MAAA;AACJ,IAAA;EACJ,CAAC;AAED,EAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACvB;;"}
1
+ {"version":3,"file":"iterateVisibleNodes.js","sources":["../../src/dragAndDropHandler/iterateVisibleNodes.ts"],"sourcesContent":["import type { Node } from \"../node\";\n\ninterface Options {\n handleAfterOpenFolder: (node: Node, nextNode: Node | null) => void;\n handleClosedFolder: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n handleFirstNode: (node: Node) => void;\n handleNode: (node: Node, nextNode: Node | null, element: HTMLElement) => void;\n\n /*\n override\n return\n - true: continue iterating\n - false: stop iterating\n */\n handleOpenFolder: (node: Node, element: HTMLElement) => boolean;\n}\n\nconst iterateVisibleNodes = (\n tree: Node,\n {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n }: Options,\n) => {\n let isFirstNode = true;\n\n const iterate = (node: Node, nextNode: Node | null): void => {\n let mustIterateInside =\n (node.is_open === true || !node.element) && node.hasChildren();\n\n let element: HTMLElement | null = null;\n\n // Is the element visible?\n if (node.element?.offsetParent) {\n element = node.element;\n\n if (isFirstNode) {\n handleFirstNode(node);\n isFirstNode = false;\n }\n\n if (!node.hasChildren()) {\n handleNode(node, nextNode, node.element);\n } else if (node.is_open) {\n if (!handleOpenFolder(node, node.element)) {\n mustIterateInside = false;\n }\n } else {\n handleClosedFolder(node, nextNode, element);\n }\n }\n\n if (mustIterateInside) {\n const childrenLength = node.children.length;\n node.children.forEach((_, i) => {\n const child = node.children[i];\n\n if (child) {\n if (i === childrenLength - 1) {\n iterate(child, null);\n } else {\n const nextChild = node.children[i + 1];\n\n if (nextChild) {\n iterate(child, nextChild);\n }\n }\n }\n });\n\n if (node.is_open && element) {\n handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n\n iterate(tree, null);\n};\n\nexport default iterateVisibleNodes;\n"],"names":[],"mappings":"AAqBA,IAAM,mBAAmB,GAAG,CAC1B,IAAU,EACV;EACE,sBAAA,EAAA,qBAAqB;EACrB,mBAAA,EAAA,kBAAkB;EAClB,gBAAA,EAAA,eAAe;EACf,WAAA,EAAA,UAAU;AACV,EAAA,iBAAA,EAAA;AACO,CAAC,KACP;EACH,IAAI,WAAW,GAAG,IAAI;AAEtB,EAAA,IAAM,OAAO,GAAG,CAAC,IAAU,EAAE,QAAqB,KAAW;AAC3D,IAAA,IAAI,iBAAiB,GACnB,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,KAAK,IAAI,CAAC,WAAW,EAAE;IAEhE,IAAI,OAA2B,GAAG,IAAI;;AAEtC;AACA,IAAA,IAAI,IAAI,CAAC,OAAO,EAAE,YAAY,EAAE;MAC9B,OAAO,GAAG,IAAI,CAAC,OAAO;AAEtB,MAAA,IAAI,WAAW,EAAE;QACf,eAAe,CAAC,IAAI,CAAC;AACrB,QAAA,WAAW,GAAG,KAAK;AACrB,MAAA;AAEA,MAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;QACvB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC;AAC1C,MAAA,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,EAAE;QACvB,IAAI,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE;AACzC,UAAA,iBAAiB,GAAG,KAAK;AAC3B,QAAA;AACF,MAAA,CAAC,MAAM;AACL,QAAA,kBAAkB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC;AAC7C,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,iBAAiB,EAAE;AACrB,MAAA,IAAM,cAAc,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM;MAC3C,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK;AAC9B,QAAA,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAE9B,QAAA,IAAI,KAAK,EAAE;AACT,UAAA,IAAI,CAAC,KAAK,cAAc,GAAG,CAAC,EAAE;AAC5B,YAAA,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC;AACtB,UAAA,CAAC,MAAM;YACL,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC;AAEtC,YAAA,IAAI,SAAS,EAAE;AACb,cAAA,OAAO,CAAC,KAAK,EAAE,SAAS,CAAC;AAC3B,YAAA;AACF,UAAA;AACF,QAAA;AACF,MAAA,CAAC,CAAC;AAEF,MAAA,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,EAAE;AAC3B,QAAA,qBAAqB,CAAC,IAAI,EAAE,QAAQ,CAAC;AACvC,MAAA;AACF,IAAA;EACF,CAAC;AAED,EAAA,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC;AACrB;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,QAAQ;IACrB,MAAM,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACf"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAE9C,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,GAAG,EAAE,MAAM,CAAC;CACb"}
@@ -19,35 +19,44 @@ interface ElementsRendererParams {
19
19
  tabIndex?: number;
20
20
  }
21
21
  export default class ElementsRenderer {
22
- closedIconElement?: HTMLElement | Text;
23
- openedIconElement?: HTMLElement | Text;
22
+ closedIconElement?: globalThis.Node;
23
+ openedIconElement?: globalThis.Node;
24
24
  private autoEscape;
25
25
  private buttonLeft;
26
26
  private classNames;
27
+ private closedFolderTemplate;
27
28
  private dragAndDrop;
28
29
  private getTree;
30
+ private groupUlTemplate;
29
31
  private htmlElement;
30
32
  private isNodeSelected;
33
+ private nodeTemplate;
31
34
  private onCreateLi?;
35
+ private openedFolderTemplate;
36
+ private rootUlTemplate;
32
37
  private rtl?;
33
38
  private setNodeElement;
34
39
  private showEmptyFolder;
35
40
  private tabIndex?;
36
41
  constructor({ autoEscape, buttonLeft, classNames, closedIcon, dragAndDrop, getTree, htmlElement, isNodeSelected, onCreateLi, openedIcon, rtl, setNodeElement, showEmptyFolder, tabIndex, }: ElementsRendererParams);
37
42
  render(fromNode: Node | null): void;
43
+ renderChildren(node: Node): HTMLUListElement | null;
38
44
  renderFromNode(node: Node): void;
39
45
  renderFromRoot(): void;
40
46
  private attachNodeData;
41
47
  private createButtonElement;
42
48
  private createDomElements;
43
49
  private createFolderLi;
50
+ private createFolderTemplate;
44
51
  private createLi;
52
+ private createLiTemplate;
45
53
  private createNodeLi;
46
- private createTitleSpan;
47
- private createUl;
54
+ private createNodeTemplate;
55
+ private createTitleSpanTemplate;
56
+ private createUlTemplate;
57
+ private fillTitleSpan;
48
58
  private getButtonClasses;
49
- private getFolderClasses;
50
- private setTreeItemAriaAttributes;
59
+ private mustRenderChildren;
51
60
  }
52
61
  export {};
53
62
  //# sourceMappingURL=elementsRenderer.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"elementsRenderer.d.ts","sourceRoot":"","sources":["../src/elementsRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIzD,UAAU,sBAAsB;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAC1B,iBAAiB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IACvC,iBAAiB,CAAC,EAAE,WAAW,GAAG,IAAI,CAAC;IAC9C,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,GAAG,CAAC,CAAU;IACtB,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,EACR,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,EACX,cAAc,EACd,UAAU,EACV,UAAU,EACV,GAAG,EACH,cAAc,EACd,eAAe,EACf,QAAQ,GACX,EAAE,sBAAsB;IAiBlB,MAAM,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;IAQnC,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAahC,cAAc,IAAI,IAAI;IAU7B,OAAO,CAAC,cAAc;IAKtB,OAAO,CAAC,mBAAmB;IAgB3B,OAAO,CAAC,iBAAiB;IAmBzB,OAAO,CAAC,cAAc;IAyDtB,OAAO,CAAC,QAAQ;IAmBhB,OAAO,CAAC,YAAY;IAqCpB,OAAO,CAAC,eAAe;IAqCvB,OAAO,CAAC,QAAQ;IA4BhB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,gBAAgB;IAkBxB,OAAO,CAAC,yBAAyB;CAWpC"}
1
+ {"version":3,"file":"elementsRenderer.d.ts","sourceRoot":"","sources":["../src/elementsRenderer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAIzD,UAAU,sBAAsB;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,WAAW,CAAC;IACzB,cAAc,EAAE,cAAc,CAAC;IAC/B,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,WAAW,CAAC;IACzB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,cAAc,EAAE,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC3D,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAaD,MAAM,CAAC,OAAO,OAAO,gBAAgB;IAC5B,iBAAiB,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IACpC,iBAAiB,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IAC3C,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAU;IAC5B,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAgB;IACpC,OAAO,CAAC,UAAU,CAAC,CAAa;IAChC,OAAO,CAAC,oBAAoB,CAAgB;IAC5C,OAAO,CAAC,cAAc,CAAmB;IACzC,OAAO,CAAC,GAAG,CAAC,CAAU;IACtB,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,CAAS;gBAEd,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,UAAU,EACV,WAAW,EACX,OAAO,EACP,WAAW,EACX,cAAc,EACd,UAAU,EACV,UAAU,EACV,GAAG,EACH,cAAc,EACd,eAAe,EACf,QAAQ,GACT,EAAE,sBAAsB;IAuBlB,MAAM,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI;IAWnC,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,gBAAgB,GAAG,IAAI;IAanD,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAchC,cAAc,IAAI,IAAI;IAU7B,OAAO,CAAC,cAAc;IAStB,OAAO,CAAC,mBAAmB;IAa3B,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,oBAAoB;IA0C5B,OAAO,CAAC,QAAQ;IAoBhB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,YAAY;IAqBpB,OAAO,CAAC,kBAAkB;IAS1B,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,gBAAgB;IA6BxB,OAAO,CAAC,aAAa;IA0BrB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,kBAAkB;CAG3B"}