tree-element 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.md +12 -4
  2. package/lib/animation.d.ts +2 -2
  3. package/lib/animation.d.ts.map +1 -1
  4. package/lib/animation.js +13 -9
  5. package/lib/animation.js.map +1 -1
  6. package/lib/dataLoader.d.ts +1 -0
  7. package/lib/dataLoader.d.ts.map +1 -1
  8. package/lib/dataLoader.js +8 -0
  9. package/lib/dataLoader.js.map +1 -1
  10. package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -1
  11. package/lib/dragAndDropHandler/dragElement.js +2 -1
  12. package/lib/dragAndDropHandler/dragElement.js.map +1 -1
  13. package/lib/dragAndDropHandler/index.d.ts.map +1 -1
  14. package/lib/dragAndDropHandler/index.js +56 -65
  15. package/lib/dragAndDropHandler/index.js.map +1 -1
  16. package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -1
  17. package/lib/dragAndDropHandler/iterateVisibleNodes.js +16 -15
  18. package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -1
  19. package/lib/elementsRenderer.d.ts +5 -1
  20. package/lib/elementsRenderer.d.ts.map +1 -1
  21. package/lib/elementsRenderer.js +62 -39
  22. package/lib/elementsRenderer.js.map +1 -1
  23. package/lib/events.d.ts +44 -11
  24. package/lib/events.d.ts.map +1 -1
  25. package/lib/index.d.ts +31 -8
  26. package/lib/index.d.ts.map +1 -1
  27. package/lib/index.js +162 -122
  28. package/lib/index.js.map +1 -1
  29. package/lib/keyHandler.d.ts +11 -5
  30. package/lib/keyHandler.d.ts.map +1 -1
  31. package/lib/keyHandler.js +87 -33
  32. package/lib/keyHandler.js.map +1 -1
  33. package/lib/methodTypes.d.ts +2 -2
  34. package/lib/methodTypes.d.ts.map +1 -1
  35. package/lib/mouseHandler.d.ts +1 -1
  36. package/lib/mouseHandler.d.ts.map +1 -1
  37. package/lib/mouseHandler.js +10 -7
  38. package/lib/mouseHandler.js.map +1 -1
  39. package/lib/node.d.ts +45 -15
  40. package/lib/node.d.ts.map +1 -1
  41. package/lib/node.js +136 -139
  42. package/lib/node.js.map +1 -1
  43. package/lib/nodeElement/folderElement.d.ts +1 -1
  44. package/lib/nodeElement/folderElement.d.ts.map +1 -1
  45. package/lib/nodeElement/folderElement.js +46 -57
  46. package/lib/nodeElement/folderElement.js.map +1 -1
  47. package/lib/nodeElement/ghostDropHint.d.ts.map +1 -1
  48. package/lib/nodeElement/ghostDropHint.js +8 -4
  49. package/lib/nodeElement/ghostDropHint.js.map +1 -1
  50. package/lib/nodeElement/index.d.ts.map +1 -1
  51. package/lib/nodeElement/index.js +6 -6
  52. package/lib/nodeElement/index.js.map +1 -1
  53. package/lib/nodeUtils.d.ts.map +1 -1
  54. package/lib/nodeUtils.js +1 -1
  55. package/lib/nodeUtils.js.map +1 -1
  56. package/lib/options.d.ts +19 -3
  57. package/lib/options.d.ts.map +1 -1
  58. package/lib/requestUrl.d.ts.map +1 -1
  59. package/lib/requestUrl.js +2 -11
  60. package/lib/requestUrl.js.map +1 -1
  61. package/lib/saveStateHandler.d.ts.map +1 -1
  62. package/lib/saveStateHandler.js +21 -41
  63. package/lib/saveStateHandler.js.map +1 -1
  64. package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -1
  65. package/lib/scrollHandler/containerScrollParent.js +3 -8
  66. package/lib/scrollHandler/containerScrollParent.js.map +1 -1
  67. package/lib/scrollHandler/createScrollParent.d.ts.map +1 -1
  68. package/lib/scrollHandler/createScrollParent.js +4 -5
  69. package/lib/scrollHandler/createScrollParent.js.map +1 -1
  70. package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -1
  71. package/lib/scrollHandler/documentScrollParent.js +3 -9
  72. package/lib/scrollHandler/documentScrollParent.js.map +1 -1
  73. package/lib/scrollHandler/scrollParent.d.ts.map +1 -1
  74. package/lib/scrollHandler/scrollParent.js +19 -17
  75. package/lib/scrollHandler/scrollParent.js.map +1 -1
  76. package/lib/selectNodeHandler.d.ts +3 -1
  77. package/lib/selectNodeHandler.d.ts.map +1 -1
  78. package/lib/selectNodeHandler.js +27 -37
  79. package/lib/selectNodeHandler.js.map +1 -1
  80. package/lib/setDefaultOptions.d.ts.map +1 -1
  81. package/lib/setDefaultOptions.js +11 -10
  82. package/lib/setDefaultOptions.js.map +1 -1
  83. package/lib/util.d.ts.map +1 -1
  84. package/lib/util.js +1 -1
  85. package/lib/util.js.map +1 -1
  86. package/lib/version.d.ts +1 -1
  87. package/lib/version.js +1 -1
  88. package/lib/version.js.map +1 -1
  89. package/package.json +42 -33
  90. package/src/animation.ts +13 -11
  91. package/src/dataLoader.ts +11 -0
  92. package/src/dragAndDropHandler/dragElement.ts +2 -1
  93. package/src/dragAndDropHandler/index.ts +70 -75
  94. package/src/dragAndDropHandler/iterateVisibleNodes.ts +18 -16
  95. package/src/elementsRenderer.ts +76 -46
  96. package/src/events.ts +44 -11
  97. package/src/index.ts +210 -150
  98. package/src/keyHandler.ts +95 -41
  99. package/src/methodTypes.ts +3 -3
  100. package/src/mouseHandler.ts +10 -7
  101. package/src/node.ts +155 -148
  102. package/src/nodeElement/folderElement.ts +54 -63
  103. package/src/nodeElement/ghostDropHint.ts +4 -2
  104. package/src/nodeElement/index.ts +9 -15
  105. package/src/nodeUtils.ts +1 -1
  106. package/src/options.ts +19 -3
  107. package/src/requestUrl.ts +4 -11
  108. package/src/saveStateHandler.ts +29 -43
  109. package/src/scrollHandler/containerScrollParent.ts +3 -9
  110. package/src/scrollHandler/createScrollParent.ts +1 -2
  111. package/src/scrollHandler/documentScrollParent.ts +5 -11
  112. package/src/scrollHandler/scrollParent.ts +29 -25
  113. package/src/selectNodeHandler.ts +34 -38
  114. package/src/setDefaultOptions.ts +19 -10
  115. package/src/util.ts +1 -2
  116. package/src/version.ts +1 -1
  117. package/tree_element.css +87 -69
  118. package/tree_element.debug.js +706 -639
  119. package/tree_element.debug.js.map +1 -1
  120. package/tree_element.js +2 -2
  121. package/tree_element.js.map +1 -1
package/lib/node.js CHANGED
@@ -26,38 +26,62 @@ prefix-private-members: all
26
26
  * :::
27
27
  */
28
28
  class Node {
29
- /** @hidden */
29
+ /**
30
+ @hidden
31
+ */
30
32
 
31
- /** The child nodes. */
33
+ /**
34
+ The child nodes.
35
+ */
32
36
  children;
33
37
  /** The `li` element, once the node is rendered. Nodes inside a closed
34
38
  * folder are rendered when the folder is opened. */
35
39
  element;
36
- /** The id from the node data. */
40
+ /**
41
+ The id from the node data.
42
+ */
37
43
  id;
38
- /** @hidden */
44
+ /**
45
+ @hidden
46
+ */
39
47
  idMapping;
40
- /** Whether the node's children are being fetched. */
48
+ /**
49
+ Whether the node's children are being fetched.
50
+ */
41
51
  is_loading;
42
- /** Whether the folder is open. */
52
+ /**
53
+ Whether the folder is open.
54
+ */
43
55
  is_open;
44
- /** Whether the node data had an empty `children` array. */
56
+ /**
57
+ Whether the node data had an empty `children` array.
58
+ */
45
59
  isEmptyFolder;
46
- /** Whether the children still have to be fetched. */
47
- load_on_demand;
48
- /** The label. Also settable from the `label` key in node data. */
49
- name;
50
- /** @hidden */
60
+ /**
61
+ Whether the children still have to be fetched.
62
+ */
63
+ load_on_demand = false;
64
+ /**
65
+ The label. Also settable from the `label` key in node data.
66
+ */
67
+ name = "";
68
+ /**
69
+ @hidden
70
+ */
51
71
  nodeClass;
52
- /** The parent; `null` for the root node. */
72
+ /**
73
+ The parent; `null` for the root node.
74
+ */
53
75
  parent;
54
- /** The root node. */
76
+ /**
77
+ The root node.
78
+ */
55
79
  tree;
56
80
 
57
- /** @hidden */
81
+ /**
82
+ @hidden
83
+ */
58
84
  constructor(nodeData = null, isRoot = false, nodeClass = Node) {
59
- this.name = "";
60
- this.load_on_demand = false;
61
85
  this.isEmptyFolder = nodeData != null && isNodeRecordWithChildren(nodeData) && nodeData.children.length === 0;
62
86
  this.setData(nodeData);
63
87
  this.children = [];
@@ -80,15 +104,14 @@ class Node {
80
104
  * @group Changing the tree
81
105
  */
82
106
  addAfter(nodeInfo) {
83
- if (!this.parent) {
84
- return null;
85
- } else {
107
+ if (this.parent) {
86
108
  let node = this._createNode(nodeInfo);
87
109
  let childIndex = this.parent.getChildIndex(this);
88
110
  this.parent.addChildAtPosition(node, childIndex + 1);
89
111
  node._loadChildrenFromData(nodeInfo);
90
112
  return node;
91
113
  }
114
+ return null;
92
115
  }
93
116
 
94
117
  /**
@@ -98,15 +121,14 @@ class Node {
98
121
  * @group Changing the tree
99
122
  */
100
123
  addBefore(nodeInfo) {
101
- if (!this.parent) {
102
- return null;
103
- } else {
124
+ if (this.parent) {
104
125
  let node = this._createNode(nodeInfo);
105
126
  let childIndex = this.parent.getChildIndex(this);
106
127
  this.parent.addChildAtPosition(node, childIndex);
107
128
  node._loadChildrenFromData(nodeInfo);
108
129
  return node;
109
130
  }
131
+ return null;
110
132
  }
111
133
 
112
134
  /**
@@ -130,7 +152,9 @@ class Node {
130
152
  node._setParent(this);
131
153
  }
132
154
 
133
- /** @hidden */
155
+ /**
156
+ @hidden
157
+ */
134
158
  addNodeToIndex(node) {
135
159
  if (node.id != null) {
136
160
  this.idMapping?.set(node.id, node);
@@ -144,9 +168,7 @@ class Node {
144
168
  * @group Changing the tree
145
169
  */
146
170
  addParent(nodeInfo) {
147
- if (!this.parent) {
148
- return null;
149
- } else {
171
+ if (this.parent) {
150
172
  let newParent = this._createNode(nodeInfo);
151
173
  if (this.tree) {
152
174
  newParent._setParent(this.tree);
@@ -159,6 +181,7 @@ class Node {
159
181
  originalParent.addChild(newParent);
160
182
  return newParent;
161
183
  }
184
+ return null;
162
185
  }
163
186
 
164
187
  /**
@@ -225,10 +248,11 @@ class Node {
225
248
  return nodes.map(node => {
226
249
  let tmpNode = {};
227
250
  for (let k in node) {
228
- if (["parent", "children", "element", "idMapping", "load_on_demand", "nodeClass", "tree", "isEmptyFolder"].indexOf(k) === -1 && Object.prototype.hasOwnProperty.call(node, k)) {
229
- let v = node[k];
230
- tmpNode[k] = v;
251
+ if (["children", "element", "idMapping", "isEmptyFolder", "load_on_demand", "nodeClass", "parent", "tree"].includes(k) || !Object.prototype.hasOwnProperty.call(node, k)) {
252
+ continue;
231
253
  }
254
+ let v = node[k];
255
+ tmpNode[k] = v;
232
256
  }
233
257
  if (node.hasChildren()) {
234
258
  tmpNode.children = getDataFromNodes(node.children);
@@ -236,11 +260,7 @@ class Node {
236
260
  return tmpNode;
237
261
  });
238
262
  };
239
- if (includeParent) {
240
- return getDataFromNodes([this]);
241
- } else {
242
- return getDataFromNodes(this.children);
243
- }
263
+ return getDataFromNodes(includeParent ? [this] : this.children);
244
264
  }
245
265
 
246
266
  /**
@@ -250,16 +270,11 @@ class Node {
250
270
  * @group Moving around the tree
251
271
  */
252
272
  getLastChild() {
253
- if (!this.hasChildren()) {
254
- return null;
255
- } else {
273
+ if (this.hasChildren()) {
256
274
  let lastChild = this.children[this.children.length - 1];
257
- if (!(lastChild.hasChildren() && lastChild.is_open)) {
258
- return lastChild;
259
- } else {
260
- return lastChild.getLastChild();
261
- }
275
+ return lastChild.hasChildren() && lastChild.is_open ? lastChild.getLastChild() : lastChild;
262
276
  }
277
+ return null;
263
278
  }
264
279
 
265
280
  /**
@@ -269,7 +284,7 @@ class Node {
269
284
  */
270
285
  getLevel() {
271
286
  let level = 0;
272
- let node = this; // eslint-disable-line @typescript-eslint/no-this-alias
287
+ let node = this; // eslint-disable-line @typescript-eslint/no-this-alias, unicorn/no-this-assignment
273
288
 
274
289
  while (node.parent) {
275
290
  level += 1;
@@ -287,16 +302,12 @@ class Node {
287
302
  getNextNode(includeChildren = true) {
288
303
  if (includeChildren && this.hasChildren()) {
289
304
  return this.children[0] ?? null;
290
- } else if (!this.parent) {
291
- return null;
292
- } else {
305
+ }
306
+ if (this.parent) {
293
307
  let nextSibling = this.getNextSibling();
294
- if (nextSibling) {
295
- return nextSibling;
296
- } else {
297
- return this.parent.getNextNode(false);
298
- }
308
+ return nextSibling ?? this.parent.getNextNode(false);
299
309
  }
310
+ return null;
300
311
  }
301
312
 
302
313
  /**
@@ -305,16 +316,11 @@ class Node {
305
316
  * @group Moving around the tree
306
317
  */
307
318
  getNextSibling() {
308
- if (!this.parent) {
309
- return null;
310
- } else {
319
+ if (this.parent) {
311
320
  let nextIndex = this.parent.getChildIndex(this) + 1;
312
- if (nextIndex < this.parent.children.length) {
313
- return this.parent.children[nextIndex] ?? null;
314
- } else {
315
- return null;
316
- }
321
+ return nextIndex < this.parent.children.length ? this.parent.children[nextIndex] ?? null : null;
317
322
  }
323
+ return null;
318
324
  }
319
325
 
320
326
  /**
@@ -327,20 +333,17 @@ class Node {
327
333
  if (this.hasChildren() && this.is_open) {
328
334
  // First child
329
335
  return this.children[0] ?? null;
330
- } else {
331
- if (!this.parent) {
332
- return null;
333
- } else {
334
- let nextSibling = this.getNextSibling();
335
- if (nextSibling) {
336
- // Next sibling
337
- return nextSibling;
338
- } else {
339
- // Next node of parent
340
- return this.parent.getNextNode(false);
341
- }
336
+ }
337
+ if (this.parent) {
338
+ let nextSibling = this.getNextSibling();
339
+ if (nextSibling) {
340
+ // Next sibling
341
+ return nextSibling;
342
342
  }
343
+ // Next node of parent
344
+ return this.parent.getNextNode(false);
343
345
  }
346
+ return null;
344
347
  }
345
348
 
346
349
  /**
@@ -353,12 +356,12 @@ class Node {
353
356
  this.iterate(node => {
354
357
  if (result) {
355
358
  return false;
356
- } else if (callback(node)) {
359
+ }
360
+ if (callback(node)) {
357
361
  result = node;
358
362
  return false;
359
- } else {
360
- return true;
361
363
  }
364
+ return true;
362
365
  });
363
366
  return result;
364
367
  }
@@ -414,12 +417,12 @@ class Node {
414
417
  // Return parent except if it is the root node
415
418
  if (!this.parent) {
416
419
  return null;
417
- } else if (!this.parent.parent) {
418
- // Root node -> null
419
- return null;
420
- } else {
420
+ }
421
+ if (this.parent.parent) {
421
422
  return this.parent;
422
423
  }
424
+ // Root node -> null
425
+ return null;
423
426
  }
424
427
 
425
428
  /**
@@ -429,18 +432,14 @@ class Node {
429
432
  * @group Moving around the tree
430
433
  */
431
434
  getPreviousNode() {
432
- if (!this.parent) {
433
- return null;
434
- } else {
435
+ if (this.parent) {
435
436
  let previousSibling = this.getPreviousSibling();
436
437
  if (!previousSibling) {
437
438
  return this.getParent();
438
- } else if (previousSibling.hasChildren()) {
439
- return previousSibling.getLastChild();
440
- } else {
441
- return previousSibling;
442
439
  }
440
+ return previousSibling.hasChildren() ? previousSibling.getLastChild() : previousSibling;
443
441
  }
442
+ return null;
444
443
  }
445
444
 
446
445
  /**
@@ -449,16 +448,11 @@ class Node {
449
448
  * @group Moving around the tree
450
449
  */
451
450
  getPreviousSibling() {
452
- if (!this.parent) {
453
- return null;
454
- } else {
451
+ if (this.parent) {
455
452
  let previousIndex = this.parent.getChildIndex(this) - 1;
456
- if (previousIndex >= 0) {
457
- return this.parent.children[previousIndex] ?? null;
458
- } else {
459
- return null;
460
- }
453
+ return previousIndex >= 0 ? this.parent.children[previousIndex] ?? null : null;
461
454
  }
455
+ return null;
462
456
  }
463
457
 
464
458
  /**
@@ -468,20 +462,19 @@ class Node {
468
462
  * @group Moving around the tree
469
463
  */
470
464
  getPreviousVisibleNode() {
471
- if (!this.parent) {
472
- return null;
473
- } else {
465
+ if (this.parent) {
474
466
  let previousSibling = this.getPreviousSibling();
475
467
  if (!previousSibling) {
476
468
  return this.getParent();
477
- } else if (!previousSibling.hasChildren() || !previousSibling.is_open) {
469
+ }
470
+ if (!previousSibling.hasChildren() || !previousSibling.is_open) {
478
471
  // Previous sibling
479
472
  return previousSibling;
480
- } else {
481
- // Last child of previous sibling
482
- return previousSibling.getLastChild();
483
473
  }
474
+ // Last child of previous sibling
475
+ return previousSibling.getLastChild();
484
476
  }
477
+ return null;
485
478
  }
486
479
 
487
480
  /**
@@ -595,32 +588,31 @@ class Node {
595
588
  // - Node is parent of target node
596
589
  // - Or, parent is empty
597
590
  return false;
598
- } else {
599
- movedNode.parent._doRemoveChild(movedNode);
600
- switch (position) {
601
- case "after":
602
- {
603
- if (targetNode.parent) {
604
- targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1);
605
- return true;
606
- }
607
- return false;
608
- }
609
- case "before":
610
- {
611
- if (targetNode.parent) {
612
- targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode));
613
- return true;
614
- }
615
- return false;
591
+ }
592
+ movedNode.parent._doRemoveChild(movedNode);
593
+ switch (position) {
594
+ case "after":
595
+ {
596
+ if (targetNode.parent) {
597
+ targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode) + 1);
598
+ return true;
616
599
  }
617
- case "inside":
618
- {
619
- // move inside as first child
620
- targetNode.addChildAtPosition(movedNode, 0);
600
+ return false;
601
+ }
602
+ case "before":
603
+ {
604
+ if (targetNode.parent) {
605
+ targetNode.parent.addChildAtPosition(movedNode, targetNode.parent.getChildIndex(targetNode));
621
606
  return true;
622
607
  }
623
- }
608
+ return false;
609
+ }
610
+ case "inside":
611
+ {
612
+ // move inside as first child
613
+ targetNode.addChildAtPosition(movedNode, 0);
614
+ return true;
615
+ }
624
616
  }
625
617
  }
626
618
 
@@ -643,10 +635,11 @@ class Node {
643
635
  * @group Changing the tree
644
636
  */
645
637
  remove() {
646
- if (this.parent) {
647
- this.parent.removeChild(this);
648
- this.parent = null;
638
+ if (!this.parent) {
639
+ return;
649
640
  }
641
+ this.parent.removeChild(this);
642
+ this.parent = null;
650
643
  }
651
644
 
652
645
  /**
@@ -673,7 +666,9 @@ class Node {
673
666
  this.children = [];
674
667
  }
675
668
 
676
- /** @hidden */
669
+ /**
670
+ @hidden
671
+ */
677
672
  removeNodeFromIndex(node) {
678
673
  if (node.id != null) {
679
674
  this.idMapping?.delete(node.id);
@@ -690,21 +685,23 @@ class Node {
690
685
  setData(o) {
691
686
  if (!o) {
692
687
  return;
693
- } else if (typeof o === "string") {
688
+ }
689
+ if (typeof o === "string") {
694
690
  this.name = o;
695
691
  } else if (typeof o === "object") {
696
692
  for (let key in o) {
697
- if (Object.prototype.hasOwnProperty.call(o, key)) {
698
- let value = o[key];
699
- if (key === "label" || key === "name") {
700
- // You can use the 'label' key instead of 'name'; this is a legacy feature
701
- if (typeof value === "string") {
702
- this.name = value;
703
- }
704
- } else if (key !== "children" && key !== "parent") {
705
- // You can't update the children or the parent using this function
706
- this[key] = value;
693
+ if (!Object.prototype.hasOwnProperty.call(o, key)) {
694
+ continue;
695
+ }
696
+ let value = o[key];
697
+ if (key === "label" || key === "name") {
698
+ // You can use the 'label' key instead of 'name'; this is a legacy feature
699
+ if (typeof value === "string") {
700
+ this.name = value;
707
701
  }
702
+ } else if (key !== "children" && key !== "parent") {
703
+ // You can't update the children or the parent using this function
704
+ this[key] = value;
708
705
  }
709
706
  }
710
707
  }
package/lib/node.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"node.js","sources":["../src/node.ts"],"sourcesContent":["/*\nA node reads and writes the private members of other nodes (node.setParent),\nso the `_` prefix that the build adds cannot be limited to `this.`:\n\nprefix-private-members: all\n*/\n\nimport { isNodeRecordWithChildren } from \"./nodeUtils\";\n\nexport type NodeData = NodeRecord | string;\n\nexport type NodeId = number | string;\n\nexport interface NodeRecord {\n [key: string]: unknown;\n children?: NodeData[];\n id?: NodeId;\n}\n\nexport type Position = \"after\" | \"before\" | \"inside\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\n/**\n * @groupDescription Properties\n * Any other key in the node data is copied onto the node, so\n * `{ name: \"node1\", color: \"green\" }` gives you `node.color`.\n *\n * @groupDescription Searching\n * These work on any node, and search that node's subtree. Called on the root\n * node, they search the whole tree — which is what the tree's own methods of\n * the same name do.\n *\n * @groupDescription Changing the tree\n * ::: warning\n * These methods change the data without re-rendering. The tree's\n * [methods](/reference/methods) — `appendNode`, `removeNode`, `moveNode` and\n * friends — do the same and refresh the display, so prefer those. If you do\n * use these, call `tree.refresh()` afterwards.\n * :::\n */\nexport class Node {\n /** @hidden */\n [key: string]: unknown;\n\n /** The child nodes. */\n public children: Node[];\n /** The `li` element, once the node is rendered. Nodes inside a closed\n * folder are rendered when the folder is opened. */\n public element?: HTMLElement;\n /** The id from the node data. */\n public id?: NodeId;\n /** @hidden */\n public idMapping?: Map<NodeId, Node>;\n /** Whether the node's children are being fetched. */\n public is_loading?: boolean;\n /** Whether the folder is open. */\n public is_open?: boolean;\n /** Whether the node data had an empty `children` array. */\n public isEmptyFolder: boolean;\n /** Whether the children still have to be fetched. */\n public load_on_demand: boolean;\n /** The label. Also settable from the `label` key in node data. */\n public name: string;\n /** @hidden */\n public nodeClass?: typeof Node;\n /** The parent; `null` for the root node. */\n public parent: Node | null;\n /** The root node. */\n public tree?: Node;\n\n /** @hidden */\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.name = \"\";\n this.load_on_demand = false;\n\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n this.is_loading = undefined;\n this.is_open ??= undefined;\n\n if (isRoot) {\n this.idMapping = new Map<NodeId, Node>();\n this.tree = this;\n this.nodeClass = nodeClass;\n } else {\n this.idMapping = undefined;\n }\n }\n\n /**\n * Adds a sibling after this node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addAfter(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n /**\n * Adds a sibling before this node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addBefore(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n /**\n * Adds an existing `Node` object as the last child.\n *\n * @group Changing the tree\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /**\n * Adds an existing `Node` object as a child, at this position in\n * `children`. The index starts at `0`.\n *\n * @group Changing the tree\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n /** @hidden */\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping?.set(node.id, node);\n }\n }\n\n /**\n * Inserts a new parent between this node and its current parent.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addParent(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n }\n\n /**\n * Adds a child at the end.\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n /**\n * Returns all nodes in the subtree for which the callback returns\n * `true`.\n *\n * @example\n * ```js\n * const folders = tree.getTree().filter((node) => node.isFolder());\n * ```\n *\n * @group Searching\n */\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /**\n * Returns the position of a child in `children`, or `-1`.\n *\n * @group Inspecting a node\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /**\n * Returns the subtree as plain data, ready for `JSON.stringify`.\n * Internal properties (`parent`, `children`, `element`, `tree`,\n * `idMapping`, `nodeClass`, `load_on_demand`, `isEmptyFolder`) are left\n * out; your own properties are kept.\n *\n * ```js\n * tree.getTree().getData();\n * // [{ name: \"node1\", id: 1, children: [{ name: \"child1\", id: 2 }] }]\n * ```\n *\n * @param includeParent - Make the result the node itself rather than its\n * children. Default `false`.\n * @group Reading data back\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record<string, unknown>[] => {\n return nodes.map((node) => {\n const tmpNode: Record<string, unknown> = {};\n\n for (const k in node) {\n if (\n [\n \"parent\",\n \"children\",\n \"element\",\n \"idMapping\",\n \"load_on_demand\",\n \"nodeClass\",\n \"tree\",\n \"isEmptyFolder\",\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)\n ) {\n const v = node[k];\n tmpNode[k] = v;\n }\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n if (includeParent) {\n return getDataFromNodes([this]);\n } else {\n return getDataFromNodes(this.children);\n }\n }\n\n /**\n * Returns the last child, or `null`. When that child is an open folder,\n * its own last child, and so on.\n *\n * @group Moving around the tree\n */\n public getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1] as Node;\n\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\n }\n\n /**\n * Returns the depth of the node, counting the top level as `1`.\n *\n * @group Inspecting a node\n */\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n /**\n * Returns the next node in the tree, regardless of whether it is\n * visible. `getNextNode(false)` skips the node's own children.\n *\n * @group Moving around the tree\n */\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n } else if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n\n if (nextSibling) {\n return nextSibling;\n } else {\n return this.parent.getNextNode(false);\n }\n }\n }\n\n /**\n * Returns the next sibling, or `null`.\n *\n * @group Moving around the tree\n */\n public getNextSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n /**\n * Like `getNextNode`, but skipping nodes inside closed folders — this is\n * what the arrow keys use.\n *\n * @group Moving around the tree\n */\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n } else {\n if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n } else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n }\n\n /**\n * Returns the first node for which the callback returns `true`.\n *\n * @group Searching\n */\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n } else if (callback(node)) {\n result = node;\n return false;\n } else {\n return true;\n }\n });\n\n return result;\n }\n\n /**\n * Returns the node with this id. Only available on the root node, which\n * keeps the id index.\n *\n * @group Searching\n */\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping?.get(nodeId) ?? null;\n }\n\n /**\n * Returns the first node with this name.\n *\n * @group Searching\n */\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n /**\n * Like `getNodeByName`, but throws when there is no such node.\n *\n * @group Searching\n */\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n /**\n * Returns all nodes with this property value.\n *\n * @group Searching\n */\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n /**\n * Returns the parent: `null` for a top-level node — the root node is not\n * returned.\n *\n * @group Moving around the tree\n */\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n } else if (!this.parent.parent) {\n // Root node -> null\n return null;\n } else {\n return this.parent;\n }\n }\n\n /**\n * Returns the previous node in the tree, regardless of whether it is\n * visible.\n *\n * @group Moving around the tree\n */\n public getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (previousSibling.hasChildren()) {\n return previousSibling.getLastChild();\n } else {\n return previousSibling;\n }\n }\n }\n\n /**\n * Returns the previous sibling, or `null`.\n *\n * @group Moving around the tree\n */\n public getPreviousSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n /**\n * Like `getPreviousNode`, but skipping nodes inside closed folders —\n * this is what the arrow keys use.\n *\n * @group Moving around the tree\n */\n public getPreviousVisibleNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (!previousSibling.hasChildren() || !previousSibling.is_open) {\n // Previous sibling\n return previousSibling;\n } else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n }\n\n /**\n * Whether the node has children.\n *\n * @group Inspecting a node\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n /**\n * Init Node from data without making it the root of the tree.\n *\n * @hidden\n */\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (isNodeRecordWithChildren(nodeData) && nodeData.children.length) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n /**\n * `true` when the node has children, or is marked `load_on_demand`.\n *\n * @group Inspecting a node\n */\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n /**\n * Whether this node is an ancestor of the other node.\n *\n * @group Inspecting a node\n */\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /**\n * Walks the subtree, calling the callback with `(node, level)`. Return\n * `false` from the callback to stop descending into that node:\n *\n * ```js\n * tree.getTree().iterate((node, level) => {\n * console.log(\" \".repeat(level) + node.name);\n * return level <= 2; // don't go deeper than level 2\n * });\n * ```\n *\n * @group Searching\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /**\n * Replaces the children with new node data.\n *\n * @group Changing the tree\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /**\n * Moves a node relative to another node. Called on the root node.\n *\n * @param position - `\"before\"`, `\"after\"` or `\"inside\"`.\n * @returns `false` when the move is impossible, for instance moving a\n * node into its own subtree.\n * @group Changing the tree\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n } else {\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case \"after\": {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode) + 1,\n );\n return true;\n }\n return false;\n }\n\n case \"before\": {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode),\n );\n return true;\n }\n return false;\n }\n\n case \"inside\": {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n }\n }\n }\n\n /**\n * Adds a child at the start.\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n /**\n * Removes this node from its parent.\n *\n * @group Changing the tree\n */\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n }\n\n /**\n * Removes a child and its children.\n *\n * @group Changing the tree\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n /**\n * Removes all children.\n *\n * @group Changing the tree\n */\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n /** @hidden */\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping?.delete(node.id);\n }\n }\n\n /**\n * Updates the node's properties from node data. `children` and `parent`\n * are ignored. A string sets the name. Existing node values are not\n * removed.\n *\n * @group Changing the tree\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n } else if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n}\n"],"names":["createNode","loadChildrenFromData","setParent","doRemoveChild","getNodeClass"],"mappings":";;AAAA;AACA;AACA;;AAEA;AACA;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,IAAI,CAAC;AAChB;;AAGA;EACO,QAAQ;AACf;AACF;EACS,OAAO;AACd;EACO,EAAE;AACT;EACO,SAAS;AAChB;EACO,UAAU;AACjB;EACO,OAAO;AACd;EACO,aAAa;AACpB;EACO,cAAc;AACrB;EACO,IAAI;AACX;EACO,SAAS;AAChB;EACO,MAAM;AACb;EACO,IAAI;;AAEX;AACA,EAAA,WAAW,CACT,QAAyB,GAAG,IAAI,EAChC,MAAM,GAAG,KAAK,EACd,SAAS,GAAG,IAAI,EAChB;IACA,IAAI,CAAC,IAAI,GAAG,EAAE;IACd,IAAI,CAAC,cAAc,GAAG,KAAK;AAE3B,IAAA,IAAI,CAAC,aAAa,GAChB,QAAQ,IAAI,IAAI,IAChB,wBAAwB,CAAC,QAAQ,CAAC,IAClC,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAEhC,IAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAEtB,IAAI,CAAC,QAAQ,GAAG,EAAE;IAClB,IAAI,CAAC,MAAM,GAAG,IAAI;IAClB,IAAI,CAAC,UAAU,GAAG,SAAS;IAC3B,IAAI,CAAC,OAAO,KAAK,SAAS;AAE1B,IAAA,IAAI,MAAM,EAAE;AACV,MAAA,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAgB;MACxC,IAAI,CAAC,IAAI,GAAG,IAAI;MAChB,IAAI,CAAC,SAAS,GAAG,SAAS;AAC5B,IAAA,CAAC,MAAM;MACL,IAAI,CAAC,SAAS,GAAG,SAAS;AAC5B,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACS,QAAQ,CAAC,QAAkB,EAAe;AAC/C,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,MAAM;AACL,MAAA,IAAM,IAAI,GAAG,IAAI,CAACA,WAAU,CAAC,QAAQ,CAAC;MAEtC,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;MAClD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,CAAC;AAEpD,MAAA,IAAI,CAACC,qBAAoB,CAAC,QAAQ,CAAC;AACnC,MAAA,OAAO,IAAI;AACb,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACS,SAAS,CAAC,QAAkB,EAAe;AAChD,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,MAAM;AACL,MAAA,IAAM,IAAI,GAAG,IAAI,CAACD,WAAU,CAAC,QAAQ,CAAC;MAEtC,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;MAClD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC;AAEhD,MAAA,IAAI,CAACC,qBAAoB,CAAC,QAAQ,CAAC;AACnC,MAAA,OAAO,IAAI;AACb,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,QAAQ,CAAC,IAAU,EAAQ;AAChC,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,IAAA,IAAI,CAACC,UAAS,CAAC,IAAI,CAAC;AACtB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,kBAAkB,CAAC,IAAU,EAAE,KAAa,EAAQ;IACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;AACpC,IAAA,IAAI,CAACA,UAAS,CAAC,IAAI,CAAC;AACtB,EAAA;;AAEA;EACO,cAAc,CAAC,IAAU,EAAQ;AACtC,IAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;MACnB,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;AACpC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACS,SAAS,CAAC,QAAkB,EAAe;AAChD,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,MAAM;AACL,MAAA,IAAM,SAAS,GAAG,IAAI,CAACF,WAAU,CAAC,QAAQ,CAAC;MAE3C,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,QAAA,SAAS,CAACE,UAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,MAAA;AACA,MAAA,IAAM,cAAc,GAAG,IAAI,CAAC,MAAM;AAElC,MAAA,KAAK,IAAM,KAAK,IAAI,cAAc,CAAC,QAAQ,EAAE;AAC3C,QAAA,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3B,MAAA;MAEA,cAAc,CAAC,QAAQ,GAAG,EAAE;AAC5B,MAAA,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;AAClC,MAAA,OAAO,SAAS;AAClB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACS,MAAM,CAAC,QAAkB,EAAQ;AACtC,IAAA,IAAM,IAAI,GAAG,IAAI,CAACF,WAAU,CAAC,QAAQ,CAAC;AACtC,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEnB,IAAA,IAAI,CAACC,qBAAoB,CAAC,QAAQ,CAAC;AACnC,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACS,MAAM,CAAC,CAA0B,EAAU;IAChD,IAAM,MAAc,GAAG,EAAE;AAEzB,IAAA,IAAI,CAAC,OAAO,CAAE,IAAU,IAAK;AAC3B,MAAA,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;AACX,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACnB,MAAA;AAEA,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAM;AACf,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,aAAa,CAAC,IAAU,EAAU;AACvC,IAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AACpC,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACS,EAAA,OAAO,CAAC,aAAa,GAAG,KAAK,EAAgB;IAClD,IAAM,gBAAgB,GAAI,KAAa,IAAgC;AACrE,MAAA,OAAO,KAAK,CAAC,GAAG,CAAE,IAAI,IAAK;QACzB,IAAM,OAAgC,GAAG,EAAE;AAE3C,QAAA,KAAK,IAAM,CAAC,IAAI,IAAI,EAAE;AACpB,UAAA,IACE,CACE,QAAQ,EACR,UAAU,EACV,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,MAAM,EACN,eAAe,CAChB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,IACnB,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAC7C;AACA,YAAA,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACjB,YAAA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAChB,UAAA;AACF,QAAA;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;UACtB,OAAO,CAAC,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpD,QAAA;AAEA,QAAA,OAAO,OAAO;AAChB,MAAA,CAAC,CAAC;IACJ,CAAC;AAED,IAAA,IAAI,aAAa,EAAE;AACjB,MAAA,OAAO,gBAAgB,CAAC,CAAC,IAAI,CAAC,CAAC;AACjC,IAAA,CAAC,MAAM;AACL,MAAA,OAAO,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACxC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,YAAY,GAAgB;AACjC,IAAA,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AACvB,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,MAAM;AACL,MAAA,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAS;MAEjE,IAAI,EAAE,SAAS,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,EAAE;AACnD,QAAA,OAAO,SAAS;AAClB,MAAA,CAAC,MAAM;AACL,QAAA,OAAO,SAAS,CAAC,YAAY,EAAE;AACjC,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,QAAQ,GAAW;IACxB,IAAI,KAAK,GAAG,CAAC;AACb,IAAA,IAAI,IAAU,GAAG,IAAI,CAAC;;IAEtB,OAAO,IAAI,CAAC,MAAM,EAAE;AAClB,MAAA,KAAK,IAAI,CAAC;MACV,IAAI,GAAG,IAAI,CAAC,MAAM;AACpB,IAAA;AAEA,IAAA,OAAO,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,WAAW,CAAC,eAAe,GAAG,IAAI,EAAe;AACtD,IAAA,IAAI,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACzC,MAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI;AACjC,IAAA,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACvB,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,MAAM;AACL,MAAA,IAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AAEzC,MAAA,IAAI,WAAW,EAAE;AACf,QAAA,OAAO,WAAW;AACpB,MAAA,CAAC,MAAM;AACL,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AACvC,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,cAAc,GAAgB;AACnC,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,MAAM;MACL,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;MACrD,IAAI,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;QAC3C,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI;AAChD,MAAA,CAAC,MAAM;AACL,QAAA,OAAO,IAAI;AACb,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,kBAAkB,GAAgB;IACvC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;AACtC;AACA,MAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI;AACjC,IAAA,CAAC,MAAM;AACL,MAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,QAAA,OAAO,IAAI;AACb,MAAA,CAAC,MAAM;AACL,QAAA,IAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACzC,QAAA,IAAI,WAAW,EAAE;AACf;AACA,UAAA,OAAO,WAAW;AACpB,QAAA,CAAC,MAAM;AACL;AACA,UAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AACvC,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,iBAAiB,CAAC,QAAiC,EAAe;IACvE,IAAI,MAAmB,GAAG,IAAI;AAE9B,IAAA,IAAI,CAAC,OAAO,CAAE,IAAU,IAAK;AAC3B,MAAA,IAAI,MAAM,EAAE;AACV,QAAA,OAAO,KAAK;AACd,MAAA,CAAC,MAAM,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AACzB,QAAA,MAAM,GAAG,IAAI;AACb,QAAA,OAAO,KAAK;AACd,MAAA,CAAC,MAAM;AACL,QAAA,OAAO,IAAI;AACb,MAAA;AACF,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAM;AACf,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACS,WAAW,CAAC,MAAc,EAAe;IAC9C,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI;AAC5C,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,aAAa,CAAC,IAAY,EAAe;IAC9C,OAAO,IAAI,CAAC,iBAAiB,CAAE,IAAU,IAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;AACnE,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,sBAAsB,CAAC,IAAY,EAAQ;AAChD,IAAA,IAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAE,CAAO,IAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;IAEjE,IAAI,CAAC,IAAI,EAAE;AACT,MAAA,MAAM,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,IAAI,YAAY,CAAC;AACrD,IAAA;AAEA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,kBAAkB,CAAC,GAAW,EAAE,KAAc,EAAU;AAC7D,IAAA,OAAO,IAAI,CAAC,MAAM,CAAE,IAAU,IAAK,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;AACzD,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,SAAS,GAAgB;AAC9B;AACA,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,MAAA,OAAO,IAAI;IACb,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;AAC9B;AACA,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,MAAM;MACL,OAAO,IAAI,CAAC,MAAM;AACpB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,eAAe,GAAgB;AACpC,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,MAAM;AACL,MAAA,IAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE;MAEjD,IAAI,CAAC,eAAe,EAAE;AACpB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;AACzB,MAAA,CAAC,MAAM,IAAI,eAAe,CAAC,WAAW,EAAE,EAAE;AACxC,QAAA,OAAO,eAAe,CAAC,YAAY,EAAE;AACvC,MAAA,CAAC,MAAM;AACL,QAAA,OAAO,eAAe;AACxB,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,kBAAkB,GAAgB;AACvC,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,MAAM;MACL,IAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;MACzD,IAAI,aAAa,IAAI,CAAC,EAAE;QACtB,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI;AACpD,MAAA,CAAC,MAAM;AACL,QAAA,OAAO,IAAI;AACb,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,sBAAsB,GAAgB;AAC3C,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,MAAM;AACL,MAAA,IAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE;MAEjD,IAAI,CAAC,eAAe,EAAE;AACpB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;AACzB,MAAA,CAAC,MAAM,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;AACrE;AACA,QAAA,OAAO,eAAe;AACxB,MAAA,CAAC,MAAM;AACL;AACA,QAAA,OAAO,eAAe,CAAC,YAAY,EAAE;AACvC,MAAA;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,WAAW,GAAY;AAC5B,IAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AACnC,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,YAAY,CAAC,IAAc,EAAQ;IACxC,IAAM,OAAO,GAAI,QAAkB,IAAW;AAC5C,MAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;MAEtB,IAAI,wBAAwB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;AAClE,QAAA,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAChC,MAAA;IACF,CAAC;IAED,IAAM,WAAW,GAAI,YAAwB,IAAW;AACtD,MAAA,KAAK,IAAM,KAAK,IAAI,YAAY,EAAE;AAChC,QAAA,IAAM,IAAI,GAAG,IAAI,CAACD,WAAU,EAAE;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrB,MAAA;IACF,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;AACf,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,QAAQ,GAAY;IACzB,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,cAAc;AAClD,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,UAAU,CAAC,IAAU,EAAW;AACrC,IAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;AAExB,IAAA,OAAO,MAAM,EAAE;MACb,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,QAAA,OAAO,IAAI;AACb,MAAA;MAEA,MAAM,GAAG,MAAM,CAAC,MAAM;AACxB,IAAA;AAEA,IAAA,OAAO,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACS,OAAO,CAAC,QAAyB,EAAQ;AAC9C,IAAA,IAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,KAAa,KAAW;AACpD,MAAA,KAAK,IAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;AAErC,QAAA,IAAI,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;AACjC,UAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;AAC5B,QAAA;AACF,MAAA;IACF,CAAC;AAED,IAAA,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACnB,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,YAAY,CAAC,IAAgB,EAAQ;IAC1C,IAAI,CAAC,cAAc,EAAE;AAErB,IAAA,KAAK,IAAM,SAAS,IAAI,IAAI,EAAE;AAC5B,MAAA,IAAM,IAAI,GAAG,IAAI,CAACA,WAAU,CAAC,SAAS,CAAC;AACvC,MAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEnB,MAAA,IAAI,wBAAwB,CAAC,SAAS,CAAC,EAAE;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC;AACvC,MAAA;AACF,IAAA;AAEA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACS,EAAA,QAAQ,CACb,SAAe,EACf,UAAgB,EAChB,QAAkB,EACT;IACT,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AACzD;AACA;AACA,MAAA,OAAO,KAAK;AACd,IAAA,CAAC,MAAM;AACL,MAAA,SAAS,CAAC,MAAM,CAACG,cAAa,CAAC,SAAS,CAAC;AAEzC,MAAA,QAAQ,QAAQ;AACd,QAAA,KAAK,OAAO;AAAE,UAAA;YACZ,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,cAAA,UAAU,CAAC,MAAM,CAAC,kBAAkB,CAClC,SAAS,EACT,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAChD,CAAC;AACD,cAAA,OAAO,IAAI;AACb,YAAA;AACA,YAAA,OAAO,KAAK;AACd,UAAA;AAEA,QAAA,KAAK,QAAQ;AAAE,UAAA;YACb,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,cAAA,UAAU,CAAC,MAAM,CAAC,kBAAkB,CAClC,SAAS,EACT,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAC5C,CAAC;AACD,cAAA,OAAO,IAAI;AACb,YAAA;AACA,YAAA,OAAO,KAAK;AACd,UAAA;AAEA,QAAA,KAAK,QAAQ;AAAE,UAAA;AACb;AACA,YAAA,UAAU,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC;AAC3C,YAAA,OAAO,IAAI;AACb,UAAA;AACF;AACF,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACS,OAAO,CAAC,QAAkB,EAAQ;AACvC,IAAA,IAAM,IAAI,GAAG,IAAI,CAACH,WAAU,CAAC,QAAQ,CAAC;AACtC,IAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;AAEhC,IAAA,IAAI,CAACC,qBAAoB,CAAC,QAAQ,CAAC;AACnC,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,MAAM,GAAS;IACpB,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,MAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;MAC7B,IAAI,CAAC,MAAM,GAAG,IAAI;AACpB,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,WAAW,CAAC,IAAU,EAAQ;AACnC;IACA,IAAI,CAAC,cAAc,EAAE;AAErB,IAAA,IAAI,CAACE,cAAa,CAAC,IAAI,CAAC;AAC1B,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,cAAc,GAAS;AAC5B,IAAA,IAAI,CAAC,OAAO,CAAE,KAAW,IAAK;AAC5B,MAAA,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC;AACrC,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC;IAEF,IAAI,CAAC,QAAQ,GAAG,EAAE;AACpB,EAAA;;AAEA;EACO,mBAAmB,CAAC,IAAU,EAAQ;AAC3C,IAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;MACnB,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACjC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACS,OAAO,CAAC,CAAkB,EAAQ;IACvC,IAAI,CAAC,CAAC,EAAE;AACN,MAAA;AACF,IAAA,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;MAChC,IAAI,CAAC,IAAI,GAAG,CAAC;AACf,IAAA,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AAChC,MAAA,KAAK,IAAM,GAAG,IAAI,CAAC,EAAE;AACnB,QAAA,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AAChD,UAAA,IAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;AAEpB,UAAA,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,EAAE;AACrC;AACA,YAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;cAC7B,IAAI,CAAC,IAAI,GAAG,KAAK;AACnB,YAAA;UACF,CAAC,MAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,QAAQ,EAAE;AACjD;AACA,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;AACnB,UAAA;AACF,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;EAEQH,WAAUA,CAAC,QAAmB,EAAQ;AAC5C,IAAA,IAAM,SAAS,GAAG,IAAI,CAACI,aAAY,EAAE;AACrC,IAAA,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC;AAChC,EAAA;EAEQD,cAAaA,CAAC,IAAU,EAAQ;AACtC,IAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjD,IAAA,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC;AACtC,EAAA;AAEQC,EAAAA,aAAYA,GAAgB;IAClC,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI;AACvD,EAAA;;AAEA;EACQH,qBAAoBA,CAAC,QAAkB,EAAE;IAC/C,IAAI,wBAAwB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;AAClE,MAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACtC,IAAA;AACF,EAAA;EAEQC,UAASA,CAAC,MAAY,EAAQ;IACpC,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,IAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,IAAA,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;AACjC,EAAA;AACF;;"}
1
+ {"version":3,"file":"node.js","sources":["../src/node.ts"],"sourcesContent":["/*\nA node reads and writes the private members of other nodes (node.setParent),\nso the `_` prefix that the build adds cannot be limited to `this.`:\n\nprefix-private-members: all\n*/\n\nimport { isNodeRecordWithChildren } from \"./nodeUtils\";\n\nexport type NodeData = NodeRecord | string;\n\nexport type NodeId = number | string;\n\nexport interface NodeRecord {\n [key: string]: unknown;\n children?: NodeData[];\n id?: NodeId;\n}\n\nexport type Position = \"after\" | \"before\" | \"inside\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\n/**\n * @groupDescription Properties\n * Any other key in the node data is copied onto the node, so\n * `{ name: \"node1\", color: \"green\" }` gives you `node.color`.\n *\n * @groupDescription Searching\n * These work on any node, and search that node's subtree. Called on the root\n * node, they search the whole tree — which is what the tree's own methods of\n * the same name do.\n *\n * @groupDescription Changing the tree\n * ::: warning\n * These methods change the data without re-rendering. The tree's\n * [methods](/reference/methods) — `appendNode`, `removeNode`, `moveNode` and\n * friends — do the same and refresh the display, so prefer those. If you do\n * use these, call `tree.refresh()` afterwards.\n * :::\n */\nexport class Node {\n /**\n @hidden\n */\n [key: string]: unknown;\n\n /**\n The child nodes.\n */\n public children: Node[];\n /** The `li` element, once the node is rendered. Nodes inside a closed\n * folder are rendered when the folder is opened. */\n public element?: HTMLElement;\n /**\n The id from the node data.\n */\n public id?: NodeId;\n /**\n @hidden\n */\n public idMapping?: Map<NodeId, Node>;\n /**\n Whether the node's children are being fetched.\n */\n public is_loading?: boolean;\n /**\n Whether the folder is open.\n */\n public is_open?: boolean;\n /**\n Whether the node data had an empty `children` array.\n */\n public isEmptyFolder: boolean;\n /**\n Whether the children still have to be fetched.\n */\n public load_on_demand = false;\n /**\n The label. Also settable from the `label` key in node data.\n */\n public name = \"\";\n /**\n @hidden\n */\n public nodeClass?: typeof Node;\n /**\n The parent; `null` for the root node.\n */\n public parent: Node | null;\n /**\n The root node.\n */\n public tree?: Node;\n\n /**\n @hidden\n */\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n this.is_loading = undefined;\n this.is_open ??= undefined;\n\n if (isRoot) {\n this.idMapping = new Map<NodeId, Node>();\n this.tree = this;\n this.nodeClass = nodeClass;\n } else {\n this.idMapping = undefined;\n }\n }\n\n /**\n * Adds a sibling after this node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addAfter(nodeInfo: NodeData): Node | null {\n if (this.parent) {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n return null;\n }\n\n /**\n * Adds a sibling before this node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addBefore(nodeInfo: NodeData): Node | null {\n if (this.parent) {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n return null;\n }\n\n /**\n * Adds an existing `Node` object as the last child.\n *\n * @group Changing the tree\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /**\n * Adds an existing `Node` object as a child, at this position in\n * `children`. The index starts at `0`.\n *\n * @group Changing the tree\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n /**\n @hidden\n */\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping?.set(node.id, node);\n }\n }\n\n /**\n * Inserts a new parent between this node and its current parent.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addParent(nodeInfo: NodeData): Node | null {\n if (this.parent) {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n return null;\n }\n\n /**\n * Adds a child at the end.\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n /**\n * Returns all nodes in the subtree for which the callback returns\n * `true`.\n *\n * @example\n * ```js\n * const folders = tree.getTree().filter((node) => node.isFolder());\n * ```\n *\n * @group Searching\n */\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /**\n * Returns the position of a child in `children`, or `-1`.\n *\n * @group Inspecting a node\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /**\n * Returns the subtree as plain data, ready for `JSON.stringify`.\n * Internal properties (`parent`, `children`, `element`, `tree`,\n * `idMapping`, `nodeClass`, `load_on_demand`, `isEmptyFolder`) are left\n * out; your own properties are kept.\n *\n * ```js\n * tree.getTree().getData();\n * // [{ name: \"node1\", id: 1, children: [{ name: \"child1\", id: 2 }] }]\n * ```\n *\n * @param includeParent - Make the result the node itself rather than its\n * children. Default `false`.\n * @group Reading data back\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record<string, unknown>[] => {\n return nodes.map((node) => {\n const tmpNode: Record<string, unknown> = {};\n\n for (const k in node) {\n if (\n [\n \"children\",\n \"element\",\n \"idMapping\",\n \"isEmptyFolder\",\n \"load_on_demand\",\n \"nodeClass\",\n \"parent\",\n \"tree\",\n ].includes(k) ||\n !Object.prototype.hasOwnProperty.call(node, k)\n ) {\n continue;\n }\n\n const v = node[k];\n tmpNode[k] = v;\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n return getDataFromNodes(includeParent ? [this] : this.children);\n }\n\n /**\n * Returns the last child, or `null`. When that child is an open folder,\n * its own last child, and so on.\n *\n * @group Moving around the tree\n */\n public getLastChild(): Node | null {\n if (this.hasChildren()) {\n const lastChild = this.children[this.children.length - 1] as Node;\n\n return lastChild.hasChildren() && lastChild.is_open\n ? lastChild.getLastChild()\n : lastChild;\n }\n return null;\n }\n\n /**\n * Returns the depth of the node, counting the top level as `1`.\n *\n * @group Inspecting a node\n */\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias, unicorn/no-this-assignment\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n /**\n * Returns the next node in the tree, regardless of whether it is\n * visible. `getNextNode(false)` skips the node's own children.\n *\n * @group Moving around the tree\n */\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n }\n if (this.parent) {\n const nextSibling = this.getNextSibling();\n\n return nextSibling ?? this.parent.getNextNode(false);\n }\n return null;\n }\n\n /**\n * Returns the next sibling, or `null`.\n *\n * @group Moving around the tree\n */\n public getNextSibling(): Node | null {\n if (this.parent) {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n return nextIndex < this.parent.children.length\n ? (this.parent.children[nextIndex] ?? null)\n : null;\n }\n return null;\n }\n\n /**\n * Like `getNextNode`, but skipping nodes inside closed folders — this is\n * what the arrow keys use.\n *\n * @group Moving around the tree\n */\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n }\n if (this.parent) {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n }\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n return null;\n }\n\n /**\n * Returns the first node for which the callback returns `true`.\n *\n * @group Searching\n */\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n }\n if (callback(node)) {\n result = node;\n return false;\n }\n return true;\n });\n\n return result;\n }\n\n /**\n * Returns the node with this id. Only available on the root node, which\n * keeps the id index.\n *\n * @group Searching\n */\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping?.get(nodeId) ?? null;\n }\n\n /**\n * Returns the first node with this name.\n *\n * @group Searching\n */\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n /**\n * Like `getNodeByName`, but throws when there is no such node.\n *\n * @group Searching\n */\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n /**\n * Returns all nodes with this property value.\n *\n * @group Searching\n */\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n /**\n * Returns the parent: `null` for a top-level node — the root node is not\n * returned.\n *\n * @group Moving around the tree\n */\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n }\n if (this.parent.parent) {\n return this.parent;\n }\n // Root node -> null\n return null;\n }\n\n /**\n * Returns the previous node in the tree, regardless of whether it is\n * visible.\n *\n * @group Moving around the tree\n */\n public getPreviousNode(): Node | null {\n if (this.parent) {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n }\n return previousSibling.hasChildren()\n ? previousSibling.getLastChild()\n : previousSibling;\n }\n return null;\n }\n\n /**\n * Returns the previous sibling, or `null`.\n *\n * @group Moving around the tree\n */\n public getPreviousSibling(): Node | null {\n if (this.parent) {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n return previousIndex >= 0\n ? (this.parent.children[previousIndex] ?? null)\n : null;\n }\n return null;\n }\n\n /**\n * Like `getPreviousNode`, but skipping nodes inside closed folders —\n * this is what the arrow keys use.\n *\n * @group Moving around the tree\n */\n public getPreviousVisibleNode(): Node | null {\n if (this.parent) {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n }\n if (!previousSibling.hasChildren() || !previousSibling.is_open) {\n // Previous sibling\n return previousSibling;\n }\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n return null;\n }\n\n /**\n * Whether the node has children.\n *\n * @group Inspecting a node\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n /**\n * Init Node from data without making it the root of the tree.\n *\n * @hidden\n */\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (isNodeRecordWithChildren(nodeData) && nodeData.children.length) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n /**\n * `true` when the node has children, or is marked `load_on_demand`.\n *\n * @group Inspecting a node\n */\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n /**\n * Whether this node is an ancestor of the other node.\n *\n * @group Inspecting a node\n */\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /**\n * Walks the subtree, calling the callback with `(node, level)`. Return\n * `false` from the callback to stop descending into that node:\n *\n * ```js\n * tree.getTree().iterate((node, level) => {\n * console.log(\" \".repeat(level) + node.name);\n * return level <= 2; // don't go deeper than level 2\n * });\n * ```\n *\n * @group Searching\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /**\n * Replaces the children with new node data.\n *\n * @group Changing the tree\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /**\n * Moves a node relative to another node. Called on the root node.\n *\n * @param position - `\"before\"`, `\"after\"` or `\"inside\"`.\n * @returns `false` when the move is impossible, for instance moving a\n * node into its own subtree.\n * @group Changing the tree\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n }\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case \"after\": {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode) + 1,\n );\n return true;\n }\n return false;\n }\n\n case \"before\": {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode),\n );\n return true;\n }\n return false;\n }\n\n case \"inside\": {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n }\n }\n\n /**\n * Adds a child at the start.\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n /**\n * Removes this node from its parent.\n *\n * @group Changing the tree\n */\n public remove(): void {\n if (!this.parent) {\n return;\n }\n\n this.parent.removeChild(this);\n this.parent = null;\n }\n\n /**\n * Removes a child and its children.\n *\n * @group Changing the tree\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n /**\n * Removes all children.\n *\n * @group Changing the tree\n */\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n /**\n @hidden\n */\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping?.delete(node.id);\n }\n }\n\n /**\n * Updates the node's properties from node data. `children` and `parent`\n * are ignored. A string sets the name. Existing node values are not\n * removed.\n *\n * @group Changing the tree\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n }\n if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (!Object.prototype.hasOwnProperty.call(o, key)) {\n continue;\n }\n\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n}\n"],"names":["createNode","loadChildrenFromData","setParent","doRemoveChild","getNodeClass"],"mappings":"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"}
@@ -16,7 +16,7 @@ declare class FolderElement extends NodeElement {
16
16
  private renderChildren;
17
17
  private triggerEvent;
18
18
  constructor({ classNames, closedIconElement, getScrollLeft, node, openedIconElement, renderChildren, tabIndex, treeElement, triggerEvent, }: FolderElementParams);
19
- close(slide: boolean, animationSpeed: AnimationSpeed): void;
19
+ close(slide: boolean, animationSpeed: AnimationSpeed): Promise<void>;
20
20
  open(slide: boolean, animationSpeed: AnimationSpeed): Promise<void>;
21
21
  protected mustShowBorderDropHint(position: Position): boolean;
22
22
  private getButton;
@@ -1 +1 @@
1
- {"version":3,"file":"folderElement.d.ts","sourceRoot":"","sources":["../../src/nodeElement/folderElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGjD,OAAO,WAAW,MAAM,SAAS,CAAC;AAElC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,gBAAgB,GAAG,IAAI,CAAC;AAErE,UAAU,mBAAoB,SAAQ,iBAAiB;IACrD,iBAAiB,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IACpC,iBAAiB,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IACpC,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,cAAM,aAAc,SAAQ,WAAW;IACrC,OAAO,CAAC,iBAAiB,CAAC,CAAkB;IAC5C,OAAO,CAAC,iBAAiB,CAAC,CAAkB;IAC5C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,IAAI,EACJ,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,WAAW,EACX,YAAY,GACb,EAAE,mBAAmB;IAef,KAAK,CAAC,KAAK,EAAE,OAAO,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI;IA8CrD,IAAI,CACf,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC;IAsDhB,SAAS,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAI7D,OAAO,CAAC,SAAS;CAKlB;AAED,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"folderElement.d.ts","sourceRoot":"","sources":["../../src/nodeElement/folderElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAGjD,OAAO,WAAW,MAAM,SAAS,CAAC;AAElC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,gBAAgB,GAAG,IAAI,CAAC;AAErE,UAAU,mBAAoB,SAAQ,iBAAiB;IACrD,iBAAiB,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IACpC,iBAAiB,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC;IACpC,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,cAAM,aAAc,SAAQ,WAAW;IACrC,OAAO,CAAC,iBAAiB,CAAC,CAAkB;IAC5C,OAAO,CAAC,iBAAiB,CAAC,CAAkB;IAC5C,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,UAAU,EACV,iBAAiB,EACjB,aAAa,EACb,IAAI,EACJ,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,WAAW,EACX,YAAY,GACb,EAAE,mBAAmB;IAeT,KAAK,CAChB,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC;IA2CH,IAAI,CACf,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC;IA6ChB,SAAS,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAI7D,OAAO,CAAC,SAAS;CAKlB;AAED,eAAe,aAAa,CAAC"}