tree-element 0.4.0 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +22 -20
- package/lib/dataLoader.d.ts.map +1 -1
- package/lib/dataLoader.js +4 -1
- package/lib/dataLoader.js.map +1 -1
- package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -1
- package/lib/dragAndDropHandler/generateHitAreas.js +3 -2
- package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -1
- package/lib/dragAndDropHandler/index.d.ts +2 -4
- package/lib/dragAndDropHandler/index.d.ts.map +1 -1
- package/lib/dragAndDropHandler/index.js +2 -9
- package/lib/dragAndDropHandler/index.js.map +1 -1
- package/lib/elementsRenderer.d.ts +7 -2
- package/lib/elementsRenderer.d.ts.map +1 -1
- package/lib/elementsRenderer.js +70 -23
- package/lib/elementsRenderer.js.map +1 -1
- package/lib/events.d.ts +13 -7
- package/lib/events.d.ts.map +1 -1
- package/lib/folderOpenState.d.ts +8 -0
- package/lib/folderOpenState.d.ts.map +1 -0
- package/lib/folderOpenState.js +22 -0
- package/lib/folderOpenState.js.map +1 -0
- package/lib/index.d.ts +17 -16
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +93 -49
- package/lib/index.js.map +1 -1
- package/lib/keyHandler.d.ts +2 -0
- package/lib/keyHandler.d.ts.map +1 -1
- package/lib/keyHandler.js +18 -0
- package/lib/keyHandler.js.map +1 -1
- package/lib/mouseHandler.d.ts.map +1 -1
- package/lib/mouseHandler.js +12 -12
- package/lib/mouseHandler.js.map +1 -1
- package/lib/node.d.ts +12 -10
- package/lib/node.d.ts.map +1 -1
- package/lib/node.js +12 -10
- package/lib/node.js.map +1 -1
- package/lib/nodeElement/folderElement.d.ts +7 -5
- package/lib/nodeElement/folderElement.d.ts.map +1 -1
- package/lib/nodeElement/folderElement.js +33 -53
- package/lib/nodeElement/folderElement.js.map +1 -1
- package/lib/options.d.ts +19 -17
- package/lib/options.d.ts.map +1 -1
- package/lib/options.js +12 -0
- package/lib/options.js.map +1 -0
- package/lib/saveStateHandler.d.ts.map +1 -1
- package/lib/saveStateHandler.js +6 -6
- package/lib/saveStateHandler.js.map +1 -1
- package/lib/selectNodeHandler.d.ts.map +1 -1
- package/lib/selectNodeHandler.js +13 -1
- package/lib/selectNodeHandler.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +35 -29
- package/src/dataLoader.ts +3 -1
- package/src/dragAndDropHandler/generateHitAreas.ts +3 -2
- package/src/dragAndDropHandler/index.ts +3 -17
- package/src/elementsRenderer.ts +84 -33
- package/src/events.ts +13 -7
- package/src/folderOpenState.ts +38 -0
- package/src/index.ts +109 -59
- package/src/keyHandler.ts +20 -0
- package/src/mouseHandler.ts +15 -13
- package/src/node.ts +12 -10
- package/src/nodeElement/folderElement.ts +45 -70
- package/src/options.ts +36 -17
- package/src/saveStateHandler.ts +5 -8
- package/src/selectNodeHandler.ts +12 -1
- package/src/version.ts +1 -1
- package/tree_element.css +32 -5
- package/tree_element.debug.js +291 -165
- package/tree_element.debug.js.map +1 -1
- package/tree_element.js +2 -2
- package/tree_element.js.map +1 -1
package/lib/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
Tree-element 0.4.
|
|
2
|
+
Tree-element 0.4.1
|
|
3
3
|
|
|
4
4
|
Copyright 2026 Marco Braak
|
|
5
5
|
|
|
@@ -26,6 +26,7 @@ import MouseHandler from './mouseHandler.js';
|
|
|
26
26
|
import { Node } from './node.js';
|
|
27
27
|
import NodeElement from './nodeElement/index.js';
|
|
28
28
|
import FolderElement from './nodeElement/folderElement.js';
|
|
29
|
+
import { changeableOptions } from './options.js';
|
|
29
30
|
import { getOffsetTop } from './positionUtils.js';
|
|
30
31
|
import RequestUrl from './requestUrl.js';
|
|
31
32
|
import SaveStateHandler from './saveStateHandler.js';
|
|
@@ -100,7 +101,6 @@ class TreeElement {
|
|
|
100
101
|
rtl,
|
|
101
102
|
saveState: saveStateOption,
|
|
102
103
|
showEmptyFolder,
|
|
103
|
-
slide,
|
|
104
104
|
tabIndex
|
|
105
105
|
} = this._options;
|
|
106
106
|
let classNames = this._classNames;
|
|
@@ -189,7 +189,6 @@ class TreeElement {
|
|
|
189
189
|
_openFolderDelay: openFolderDelay,
|
|
190
190
|
_openNode: openNode,
|
|
191
191
|
_refreshElements: refreshElements,
|
|
192
|
-
_slide: slide,
|
|
193
192
|
_treeElement: treeElement,
|
|
194
193
|
_triggerEvent: triggerEvent
|
|
195
194
|
});
|
|
@@ -288,8 +287,9 @@ class TreeElement {
|
|
|
288
287
|
}
|
|
289
288
|
|
|
290
289
|
/**
|
|
291
|
-
* Inserts a new node between a node and its parent
|
|
292
|
-
*
|
|
290
|
+
* Inserts a new node between a node and its parent. The siblings of the node
|
|
291
|
+
* move along: the new node takes all children of the parent, and becomes its
|
|
292
|
+
* only child.
|
|
293
293
|
*
|
|
294
294
|
* @returns The new node, or `null` when the node has no parent.
|
|
295
295
|
* @group Changing the tree
|
|
@@ -459,7 +459,7 @@ class TreeElement {
|
|
|
459
459
|
}
|
|
460
460
|
|
|
461
461
|
/**
|
|
462
|
-
* Returns the current state
|
|
462
|
+
* Returns the current state—`open_nodes` and `selected_node`—whether or
|
|
463
463
|
* not `saveState` is enabled.
|
|
464
464
|
*
|
|
465
465
|
* @group State
|
|
@@ -478,7 +478,7 @@ class TreeElement {
|
|
|
478
478
|
}
|
|
479
479
|
|
|
480
480
|
/**
|
|
481
|
-
* Returns the root node. It is not rendered
|
|
481
|
+
* Returns the root node. It is not rendered, and its `children` are the
|
|
482
482
|
* top-level nodes. Also available as the `tree` property.
|
|
483
483
|
*
|
|
484
484
|
* @group Finding nodes
|
|
@@ -589,7 +589,7 @@ class TreeElement {
|
|
|
589
589
|
}
|
|
590
590
|
|
|
591
591
|
/**
|
|
592
|
-
* Opens a folder, and the folders
|
|
592
|
+
* Opens a folder, and the folders that contain it. A node marked `load_on_demand`
|
|
593
593
|
* is fetched first, so await the promise when you need to know it is really
|
|
594
594
|
* open.
|
|
595
595
|
*
|
|
@@ -605,7 +605,7 @@ class TreeElement {
|
|
|
605
605
|
async openNode(node, slide) {
|
|
606
606
|
let mustSlide = slide ?? this._options.slide;
|
|
607
607
|
let doOpenNode = async (openedNode, slideOption) => {
|
|
608
|
-
if (!
|
|
608
|
+
if (!openedNode.children.length) {
|
|
609
609
|
return;
|
|
610
610
|
}
|
|
611
611
|
let folderElement = this._createFolderElement(openedNode);
|
|
@@ -724,13 +724,43 @@ class TreeElement {
|
|
|
724
724
|
}
|
|
725
725
|
|
|
726
726
|
/**
|
|
727
|
-
* Changes an option after construction.
|
|
728
|
-
*
|
|
727
|
+
* Changes an option after construction. Only some options can be changed:
|
|
728
|
+
* the others throw an error. See
|
|
729
|
+
* [Options](/reference/options#changing-an-option-later).
|
|
729
730
|
*
|
|
730
731
|
* @group Other
|
|
731
732
|
*/
|
|
732
733
|
setOption(option, value) {
|
|
734
|
+
if (!changeableOptions.includes(option)) {
|
|
735
|
+
throw new Error(`The option ${option} can only be set in the constructor`);
|
|
736
|
+
}
|
|
733
737
|
this._options[option] = value;
|
|
738
|
+
switch (option) {
|
|
739
|
+
case "dragAndDrop":
|
|
740
|
+
{
|
|
741
|
+
this._renderer._setDragAndDrop(Boolean(value));
|
|
742
|
+
break;
|
|
743
|
+
}
|
|
744
|
+
case "keyboardSupport":
|
|
745
|
+
{
|
|
746
|
+
this._keyHandler._setKeyboardSupport(Boolean(value));
|
|
747
|
+
break;
|
|
748
|
+
}
|
|
749
|
+
case "multiSelect":
|
|
750
|
+
{
|
|
751
|
+
this._setMultiSelect(Boolean(value));
|
|
752
|
+
break;
|
|
753
|
+
}
|
|
754
|
+
case "tabIndex":
|
|
755
|
+
{
|
|
756
|
+
this._options.tabIndex = value ?? undefined;
|
|
757
|
+
this._renderer._setTabIndex(this._options.tabIndex);
|
|
758
|
+
this._fallbackTabStop = null;
|
|
759
|
+
this._updateTabStop();
|
|
760
|
+
break;
|
|
761
|
+
}
|
|
762
|
+
// No default
|
|
763
|
+
}
|
|
734
764
|
}
|
|
735
765
|
|
|
736
766
|
/**
|
|
@@ -763,8 +793,8 @@ class TreeElement {
|
|
|
763
793
|
}
|
|
764
794
|
|
|
765
795
|
/**
|
|
766
|
-
* Returns the tree as a
|
|
767
|
-
*
|
|
796
|
+
* Returns the tree as a JSON string, including changes made through the
|
|
797
|
+
* API.
|
|
768
798
|
*
|
|
769
799
|
* @group Other
|
|
770
800
|
*/
|
|
@@ -777,7 +807,7 @@ class TreeElement {
|
|
|
777
807
|
* name.
|
|
778
808
|
*
|
|
779
809
|
* Changing the `id` re-indexes the node. `children` and `parent` are
|
|
780
|
-
* ignored
|
|
810
|
+
* ignored—use `loadData` or `moveNode` for those.
|
|
781
811
|
*
|
|
782
812
|
* @example
|
|
783
813
|
* ```js
|
|
@@ -828,9 +858,7 @@ class TreeElement {
|
|
|
828
858
|
}
|
|
829
859
|
_createFolderElement(node) {
|
|
830
860
|
let classNames = this._classNames;
|
|
831
|
-
let closedIconElement = this._renderer._closedIconElement;
|
|
832
861
|
let getScrollLeft = this._scrollHandler._getScrollLeft.bind(this._scrollHandler);
|
|
833
|
-
let openedIconElement = this._renderer._openedIconElement;
|
|
834
862
|
let tabIndex = this._options.tabIndex;
|
|
835
863
|
let treeElement = this._htmlElement;
|
|
836
864
|
let triggerEvent = this._triggerEvent.bind(this);
|
|
@@ -845,11 +873,10 @@ class TreeElement {
|
|
|
845
873
|
};
|
|
846
874
|
return new FolderElement({
|
|
847
875
|
_classNames: classNames,
|
|
848
|
-
_closedIconElement: closedIconElement,
|
|
849
876
|
_getScrollLeft: getScrollLeft,
|
|
877
|
+
_icons: this._renderer._icons,
|
|
850
878
|
_multiSelect: this._options.multiSelect,
|
|
851
879
|
_node: node,
|
|
852
|
-
_openedIconElement: openedIconElement,
|
|
853
880
|
_renderChildren: renderChildren,
|
|
854
881
|
_tabIndex: tabIndex,
|
|
855
882
|
_treeElement: treeElement,
|
|
@@ -945,14 +972,8 @@ class TreeElement {
|
|
|
945
972
|
_getFocusedNode() {
|
|
946
973
|
let activeElement = document.activeElement;
|
|
947
974
|
|
|
948
|
-
|
|
949
|
-
if (!activeElement) {
|
|
950
|
-
return null;
|
|
951
|
-
}
|
|
952
|
-
|
|
953
|
-
// The keyboard must still work for input elements.
|
|
954
|
-
let tagName = activeElement.tagName;
|
|
955
|
-
if (tagName !== "A" && tagName !== "LI" && tagName !== "SPAN") {
|
|
975
|
+
// An active element must exist and the keyboard must still work for input elements.
|
|
976
|
+
if (!activeElement || !["A", "LI", "SPAN"].includes(activeElement.tagName)) {
|
|
956
977
|
return null;
|
|
957
978
|
}
|
|
958
979
|
let node = this.getNode(activeElement);
|
|
@@ -1001,11 +1022,17 @@ class TreeElement {
|
|
|
1001
1022
|
this._isInitialized = true;
|
|
1002
1023
|
this._triggerEvent("tree.init");
|
|
1003
1024
|
};
|
|
1025
|
+
|
|
1026
|
+
// Before the tree is replaced: then the focused node is no longer in it
|
|
1027
|
+
let focusedNode = this._getFocusedNode();
|
|
1004
1028
|
this._tree = new this._options.nodeClass(null, true, this._options.nodeClass);
|
|
1005
1029
|
this._selectNodeHandler._clear();
|
|
1006
1030
|
this._tree.loadFromData(data);
|
|
1007
1031
|
let mustLoadOnDemand = this._setInitialState();
|
|
1008
1032
|
this._refreshElements(null);
|
|
1033
|
+
if (focusedNode) {
|
|
1034
|
+
this._restoreFocus(focusedNode);
|
|
1035
|
+
}
|
|
1009
1036
|
if (mustLoadOnDemand) {
|
|
1010
1037
|
// Load data on demand and then init the tree
|
|
1011
1038
|
void this._setInitialStateOnDemand().then(doInit);
|
|
@@ -1013,15 +1040,6 @@ class TreeElement {
|
|
|
1013
1040
|
doInit();
|
|
1014
1041
|
}
|
|
1015
1042
|
}
|
|
1016
|
-
|
|
1017
|
-
// Does an HTML element of the tree have the focus?
|
|
1018
|
-
_isFocusOnTree() {
|
|
1019
|
-
return this._getFocusedNode() !== null;
|
|
1020
|
-
}
|
|
1021
|
-
_isSelectedNodeInSubtree(subtree) {
|
|
1022
|
-
let selectedNode = this.getSelectedNode();
|
|
1023
|
-
return selectedNode ? subtree === selectedNode || subtree.isParentOf(selectedNode) : false;
|
|
1024
|
-
}
|
|
1025
1043
|
async _loadFolderOnDemand(node, slide) {
|
|
1026
1044
|
node.is_loading = true;
|
|
1027
1045
|
await this.loadDataFromUrl(undefined, node);
|
|
@@ -1062,10 +1080,10 @@ class TreeElement {
|
|
|
1062
1080
|
_mouseStop(positionInfo) {
|
|
1063
1081
|
/* istanbul ignore if */
|
|
1064
1082
|
if (!this._options.dragAndDrop) {
|
|
1065
|
-
return
|
|
1083
|
+
return;
|
|
1066
1084
|
}
|
|
1067
1085
|
this._scrollHandler._stopScrolling();
|
|
1068
|
-
|
|
1086
|
+
this._dndHandler._mouseStop(positionInfo);
|
|
1069
1087
|
}
|
|
1070
1088
|
_openParents(node) {
|
|
1071
1089
|
let parent = node.parent;
|
|
@@ -1079,25 +1097,32 @@ class TreeElement {
|
|
|
1079
1097
|
from_node: redraw this subtree
|
|
1080
1098
|
*/
|
|
1081
1099
|
_refreshElements(fromNode) {
|
|
1082
|
-
let
|
|
1083
|
-
|
|
1100
|
+
let focusedNode = this._getFocusedNode();
|
|
1101
|
+
|
|
1102
|
+
// The renderer marks the selected nodes, so only the focus needs restoring
|
|
1084
1103
|
this._renderer._render(fromNode);
|
|
1085
|
-
if (
|
|
1086
|
-
this.
|
|
1104
|
+
if (focusedNode) {
|
|
1105
|
+
this._restoreFocus(focusedNode);
|
|
1087
1106
|
}
|
|
1088
1107
|
this._updateTabStop();
|
|
1089
1108
|
this._triggerEvent("tree.refresh");
|
|
1090
1109
|
}
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
if (
|
|
1110
|
+
|
|
1111
|
+
// Rendering replaces the elements of the nodes, so a focused element can be
|
|
1112
|
+
// gone. Then move the focus to the new element of the same node. After
|
|
1113
|
+
// loadData the nodes are new objects, so look the node up by its id.
|
|
1114
|
+
_restoreFocus(focusedNode) {
|
|
1115
|
+
if (this._htmlElement.contains(document.activeElement)) {
|
|
1097
1116
|
return;
|
|
1098
1117
|
}
|
|
1099
|
-
let
|
|
1100
|
-
|
|
1118
|
+
let node = (focusedNode.id == null ? null : this.getNodeById(focusedNode.id)) ?? focusedNode;
|
|
1119
|
+
let element = node.element;
|
|
1120
|
+
if (element && this._htmlElement.contains(element)) {
|
|
1121
|
+
element.focus();
|
|
1122
|
+
}
|
|
1123
|
+
}
|
|
1124
|
+
_saveState() {
|
|
1125
|
+
this._saveStateHandler._saveState();
|
|
1101
1126
|
}
|
|
1102
1127
|
|
|
1103
1128
|
// Set initial state, either by restoring the state or auto-opening nodes
|
|
@@ -1152,6 +1177,25 @@ class TreeElement {
|
|
|
1152
1177
|
}
|
|
1153
1178
|
}
|
|
1154
1179
|
|
|
1180
|
+
/* Change multiSelect after construction. The attributes of the nodes
|
|
1181
|
+
* depend on it, so the tree is rendered again. The selection is kept: a
|
|
1182
|
+
* tree without multiSelect can also have several selected nodes, see
|
|
1183
|
+
* addToSelection.
|
|
1184
|
+
*/
|
|
1185
|
+
_setMultiSelect(multiSelect) {
|
|
1186
|
+
let focusedNode = this._getFocusedNode();
|
|
1187
|
+
this._keyHandler._setMultiSelect(multiSelect);
|
|
1188
|
+
this._renderer._setMultiSelect(multiSelect);
|
|
1189
|
+
if (multiSelect) {
|
|
1190
|
+
this._htmlElement.addEventListener("focusin", this._handleFocusIn);
|
|
1191
|
+
} else {
|
|
1192
|
+
this._htmlElement.removeEventListener("focusin", this._handleFocusIn);
|
|
1193
|
+
}
|
|
1194
|
+
this._activeNode = multiSelect ? focusedNode : null;
|
|
1195
|
+
this._fallbackTabStop = null;
|
|
1196
|
+
this._refreshElements(null);
|
|
1197
|
+
}
|
|
1198
|
+
|
|
1155
1199
|
// Set this HTML element to this node in the node map.
|
|
1156
1200
|
_setNodeElement(element, node) {
|
|
1157
1201
|
this._nodeMap.set(element, node);
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { TreeEventName, TreeEvents } from \"./events\";\nimport type { PositionInfo } from \"./mouseUtils\";\nimport type { NodeData, NodeId, Position } from \"./node\";\nimport type { TreeElementOptions } from \"./options\";\nimport type { SavedState } from \"./saveStateHandler\";\nimport type { SelectNodeOptions } from \"./selectNodeHandler\";\n\nimport createClassNames from \"./classNames\";\nimport DataLoader from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { Node } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { getOffsetTop } from \"./positionUtils\";\nimport RequestUrl from \"./requestUrl\";\nimport SaveStateHandler from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport setDefaultOptions from \"./setDefaultOptions\";\nimport triggerCustomEvent from \"./triggerCustomEvent\";\nimport __version__ from \"./version\";\n\n// The types that appear in the public api. Consumers cannot import them from\n// the submodules directly, because those are not exposed in package.json.\n// Type only, so that the iife build keeps exposing the TreeElement class itself\n// as its global, instead of an object of named exports.\n\nexport type TriggerEventProvider = (\n element: HTMLElement,\n eventName: TreeEventName,\n values?: TreeEvents[TreeEventName],\n) => boolean;\n\ninterface TreeElementParams extends Partial<TreeElementOptions> {\n /**\n The element the tree is rendered into. Its content is replaced.\n */\n htmlElement: HTMLElement;\n /** Replaces how events are dispatched. It must return whether the event\n * was not cancelled. This exists for tests and for integrating with\n * another event system. */\n overrideTriggerEventProvider?: TriggerEventProvider;\n}\n\nexport default class TreeElement {\n // With multiSelect: the node that is the tab stop, see updateTabStop\n private activeNode: Node | null;\n private classNames: ClassNames;\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\n private fallbackTabStop: HTMLElement | null;\n private htmlElement: HTMLElement;\n private isInitialized: boolean;\n private keyHandler: KeyHandler;\n private mouseHandler: MouseHandler;\n private nodeMap: WeakMap<HTMLElement, Node>;\n private options: TreeElementOptions;\n private renderer: ElementsRenderer;\n private saveStateHandler: SaveStateHandler;\n private scrollHandler: ScrollHandler;\n private selectNodeHandler: SelectNodeHandler;\n private tree: Node;\n private triggerEventProvider: TriggerEventProvider;\n\n /**\n @hidden\n */\n constructor({\n htmlElement,\n overrideTriggerEventProvider,\n ...options\n }: TreeElementParams) {\n this.htmlElement = htmlElement;\n this.options = setDefaultOptions(htmlElement, options);\n this.classNames = createClassNames(this.options);\n this.triggerEventProvider =\n overrideTriggerEventProvider ?? triggerCustomEvent;\n\n this.isInitialized = false;\n this.tree = new Node({}, true);\n this.nodeMap = new WeakMap();\n this.fallbackTabStop = null;\n this.activeNode = null;\n\n const {\n ariaLabel,\n ariaLabelledBy,\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n multiSelect,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState: saveStateOption,\n showEmptyFolder,\n slide,\n tabIndex,\n } = this.options;\n\n const classNames = this.classNames;\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this.getNodeElement.bind(this);\n const getNodeElementForNode = this.getNodeElementForNode.bind(this);\n const getFocusedNode = this.getFocusedNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this.openNode.bind(this);\n const openParents = this.openParents.bind(this);\n const refreshElements = this.refreshElements.bind(this);\n const refreshHitAreas = this.refreshHitAreas.bind(this);\n const setNodeElement = this.setNodeElement.bind(this);\n const treeElement = this.htmlElement;\n const triggerEvent = this.triggerEvent.bind(this);\n const updateTabStop = this.updateTabStop.bind(this);\n\n const saveState = () => {\n saveStateHandler.saveState();\n };\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n getNodeElementForNode,\n getOnCanSelectNode: () => this.options.onCanSelectNode,\n getSelectable: () => this.options.selectable,\n openParents,\n saveState,\n triggerEvent,\n updateTabStop,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const selectNode =\n selectNodeHandler.selectSingleNode.bind(selectNodeHandler);\n\n const toggleNodeInSelection =\n selectNodeHandler.toggleNodeInSelection.bind(selectNodeHandler);\n\n // With multiSelect, a click adds a node to the selection or removes it\n const onClickTitle = (node: Node) => {\n if (this.options.multiSelect) {\n toggleNodeInSelection(node, false);\n this.focusNode(node);\n } else {\n selectNode(node);\n }\n };\n\n const getMouseDelay = () => this.options.startDndDelay ?? 0;\n\n const dataLoader = new DataLoader({\n classNames,\n dataFilter,\n loadData,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState: saveStateOption,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\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 });\n\n const keyHandler = new KeyHandler({\n closeNode,\n focusNode: this.focusNode.bind(this),\n getActiveNode: this.getActiveNode.bind(this),\n getFocusedNode,\n getSelectedNode,\n getTree,\n keyboardSupport,\n multiSelect,\n openNode,\n selectNode,\n toggleNodeInSelection,\n triggerEvent,\n });\n\n const renderer = new ElementsRenderer({\n ariaLabel,\n ariaLabelledBy,\n autoEscape,\n buttonLeft,\n classNames,\n closedIcon,\n dragAndDrop,\n getTree,\n htmlElement: treeElement,\n isNodeSelected,\n multiSelect,\n onCreateLi,\n openedIcon,\n rtl,\n setNodeElement,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this.getNode.bind(this);\n const onMouseCapture = this.mouseCapture.bind(this);\n const onMouseDrag = this.mouseDrag.bind(this);\n const onMouseStart = this.mouseStart.bind(this);\n const onMouseStop = this.mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n classNames,\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this.options.useContextMenu,\n });\n\n this.dataLoader = dataLoader;\n this.dndHandler = dndHandler;\n this.keyHandler = keyHandler;\n this.mouseHandler = mouseHandler;\n this.renderer = renderer;\n this.saveStateHandler = saveStateHandler;\n this.scrollHandler = scrollHandler;\n this.selectNodeHandler = selectNodeHandler;\n\n if (multiSelect) {\n treeElement.addEventListener(\"focusin\", this.handleFocusIn);\n }\n\n this.initData();\n }\n\n /**\n * Adds a sibling after a node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addNodeAfter(nodeData: NodeData, existingNode: Node): Node | null {\n const newNode = existingNode.addAfter(nodeData);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n /**\n * Adds a sibling before a node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addNodeBefore(nodeData: NodeData, existingNode: Node): Node | null {\n const newNode = existingNode.addBefore(nodeData);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n /**\n * Inserts a new node between a node and its parent, taking the node as its\n * child.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addParentNode(nodeData: NodeData, existingNode: Node): Node | null {\n const newNode = existingNode.addParent(nodeData);\n\n if (newNode) {\n this.refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n /**\n * Adds a node to the selection instead of replacing it.\n *\n * @param mustSetFocus - Move the focus to the node. Default `true`.\n * @group Selection\n */\n public addToSelection(node: Node, mustSetFocus = true) {\n this.selectNodeHandler.addToSelection(node);\n this.openParents(node);\n\n this.getNodeElementForNode(node).select(mustSetFocus);\n\n this.updateTabStop();\n this.saveState();\n }\n\n /**\n * Adds a node as the last child of a parent.\n *\n * @example\n * ```js\n * tree.appendNode({ name: \"child\", id: 5 }, tree.getNodeById(1));\n * ```\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public appendNode(nodeData: NodeData, parentNode: Node): Node {\n const node = parentNode.append(nodeData);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n /**\n * Closes a folder. Await the promise when you need to know the closing\n * animation has finished.\n *\n * @example\n * ```js\n * await tree.closeNode(node);\n * console.log(\"closed\");\n * ```\n *\n * @param slide - Override the `slide` option for this call.\n * @group Opening and closing\n */\n public async closeNode(node: Node, slide?: boolean): Promise<void> {\n if (!(node.isFolder() || node.isEmptyFolder)) {\n return;\n }\n\n await this.createFolderElement(node).close(\n slide ?? this.options.slide,\n this.options.animationSpeed,\n );\n\n this.saveState();\n }\n\n /**\n * Empties the element and removes the tree's document-level keyboard\n * listener. Call it when you remove the tree from the page.\n *\n * @group Other\n */\n public deinit(): void {\n this.htmlElement.textContent = \"\";\n\n this.dataLoader.deinit();\n this.keyHandler.deinit();\n this.mouseHandler.deinit();\n this.htmlElement.removeEventListener(\"focusin\", this.handleFocusIn);\n\n this.tree = new Node({}, true);\n }\n\n /**\n * Returns the node that belongs to a `li` element the tree rendered.\n *\n * @group Finding nodes\n */\n public getNode(element: HTMLElement): Node | null {\n const liElement = element.closest<HTMLElement>(\n `li.${this.classNames.common}`,\n );\n\n return liElement ? (this.nodeMap.get(liElement) ?? null) : null;\n }\n\n /**\n * Returns the first node for which the callback returns `true`.\n *\n * @example\n * ```js\n * const node = tree.getNodeByCallback((node) => node.children.length > 3);\n * ```\n *\n * @group Finding nodes\n */\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n /**\n * Returns the node with this id.\n *\n * @example\n * ```js\n * const node = tree.getNodeById(1);\n * ```\n *\n * @group Finding nodes\n */\n public getNodeById(id: NodeId): Node | null {\n return this.tree.getNodeById(id);\n }\n\n /**\n * Returns the first node with this name.\n *\n * @group Finding nodes\n */\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n /**\n * Like `getNodeByName`, but throws when there is no such node. Convenient\n * in tests and when a missing node is a bug.\n *\n * @group Finding nodes\n */\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n /**\n * Returns all nodes with this property value.\n *\n * @example\n * ```js\n * tree.getNodesByProperty(\"color\", \"green\");\n * ```\n *\n * @group Finding nodes\n */\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n /**\n * Returns the selected node, or `null` when nothing is selected.\n *\n * @group Selection\n */\n public getSelectedNode(): Node | null {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n /**\n * Returns the selected nodes.\n *\n * @group Selection\n */\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n /**\n * Returns the current state — `open_nodes` and `selected_node` — whether or\n * not `saveState` is enabled.\n *\n * @group State\n */\n public getState(): null | SavedState {\n return this.saveStateHandler.getState();\n }\n\n /**\n * Returns the state as it is stored.\n *\n * @group State\n */\n public getStateFromStorage(): null | SavedState {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n /**\n * Returns the root node. It is not rendered; its `children` are the\n * top-level nodes. Also available as the `tree` property.\n *\n * @group Finding nodes\n */\n public getTree(): Node {\n return this.tree;\n }\n\n /**\n * Returns the version of tree-element.\n *\n * @group Other\n */\n public getVersion(): string {\n return __version__;\n }\n\n /**\n * Returns whether the user is dragging a node.\n *\n * @group Other\n */\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n /**\n * Returns whether the node is selected.\n *\n * @group Selection\n */\n public isNodeSelected(node: Node): boolean {\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n /**\n * Loads data into the tree.\n *\n * @param parentNode - Replace this node's children instead of the whole\n * tree.\n * @group Loading data\n */\n public loadData(data: NodeData[] | null, parentNode?: Node): void {\n if (data) {\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n\n this.triggerEvent(\"tree.set_data\", {\n node: parentNode,\n treeData: data ?? undefined,\n });\n }\n\n /**\n * Fetches data and loads it into the tree, or into `parentNode`.\n *\n * @param url - Defaults to the `dataUrl` option.\n * @group Loading data\n */\n public async loadDataFromUrl(url?: string, parentNode?: Node): Promise<void> {\n const requestUrl = url\n ? new RequestUrl(url)\n : this.createRequestUrl(parentNode);\n\n if (requestUrl) {\n await this.dataLoader.loadFromUrl(requestUrl, parentNode);\n }\n }\n\n /**\n * Selects the next visible node, like the down arrow key. With\n * `multiSelect` it moves the focus instead.\n *\n * @group Selection\n */\n public moveDown() {\n this.keyHandler.moveDown();\n }\n\n /**\n * Moves a node inside the tree.\n *\n * @example\n * ```js\n * tree.moveNode(tree.getNodeById(2), tree.getNodeById(1), \"inside\");\n * ```\n *\n * @param position - `\"before\"`, `\"after\"` or `\"inside\"`.\n * @group Changing the tree\n */\n public moveNode(node: Node, targetNode: Node, position: Position): void {\n this.tree.moveNode(node, targetNode, position);\n this.refreshElements(null);\n }\n\n /**\n * Selects the previous visible node, like the up arrow key. With\n * `multiSelect` it moves the focus instead.\n *\n * @group Selection\n */\n public moveUp() {\n this.keyHandler.moveUp();\n }\n\n /**\n * Opens a folder, and the folders above it. A node marked `load_on_demand`\n * is fetched first, so await the promise when you need to know it is really\n * open.\n *\n * @example\n * ```js\n * await tree.openNode(node);\n * console.log(\"open\");\n * ```\n *\n * @param slide - Override the `slide` option for this call.\n * @group Opening and closing\n */\n public async openNode(node: Node, slide?: boolean): Promise<void> {\n const mustSlide = slide ?? this.options.slide;\n\n const doOpenNode = async (\n openedNode: Node,\n slideOption: boolean,\n ): Promise<void> => {\n if (!node.children.length) {\n return;\n }\n\n const folderElement = this.createFolderElement(openedNode);\n\n await folderElement.open(slideOption, this.options.animationSpeed);\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n await this.loadFolderOnDemand(node, mustSlide);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n await doOpenNode(parent, false);\n }\n parent = parent.parent;\n }\n\n await doOpenNode(node, mustSlide);\n\n this.saveState();\n }\n }\n }\n\n /**\n * Adds a node as the first child of a parent.\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public prependNode(nodeData: NodeData, parentNode: Node): Node {\n const node = parentNode.prepend(nodeData);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n /**\n * Re-renders the whole tree. Needed after changing node data directly\n * instead of through these methods.\n *\n * @group Changing the tree\n */\n public refresh() {\n this.refreshElements(null);\n }\n\n /**\n * Recomputes the drop targets. Call this if the layout changes during a\n * drag.\n *\n * @group Other\n */\n public refreshHitAreas() {\n this.dndHandler.refresh();\n }\n\n /**\n * Removes a node from the selection.\n *\n * @group Selection\n */\n public removeFromSelection(node: Node) {\n this.selectNodeHandler.removeFromSelection(node);\n\n this.getNodeElementForNode(node).deselect();\n this.updateTabStop();\n this.saveState();\n }\n\n /**\n * Removes a node and its children.\n *\n * @group Changing the tree\n */\n public removeNode(node: Node): void {\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this.refreshElements(parent);\n }\n\n /**\n * Scrolls the node into view.\n *\n * @group Selection\n */\n public scrollToNode(node: Node) {\n if (!node.element) {\n return;\n }\n\n const top = getOffsetTop(node.element) - getOffsetTop(this.htmlElement);\n\n this.scrollHandler.scrollToY(top);\n }\n\n /**\n * Replaces the selection, and opens the parents of the node.\n *\n * @param node - `null` clears the selection.\n * @param options - `mustSetFocus`: move focus to the node, default `true`.\n * `mustToggle`: deselect the node if it is already selected, default\n * `false`.\n * @group Selection\n */\n public selectNode(node: Node | null, options?: SelectNodeOptions): void {\n if (!node) {\n // Called with empty node -> deselect all nodes\n this.deselectAllNodes();\n this.saveStateHandler.saveState();\n return;\n }\n\n // Unlike a click, selecting the selected node again keeps it selected\n this.selectNodeHandler.selectSingleNode(node, {\n mustToggle: false,\n ...options,\n });\n }\n\n /**\n * Changes an option after construction. See\n * [Options](/reference/options#changing-an-option-later) for the caveats.\n *\n * @group Other\n */\n public setOption(option: string, value: unknown) {\n (this.options as unknown as Record<string, unknown>)[option] = value;\n }\n\n /**\n * Applies a state to the tree, and saves it to storage when `saveState` is\n * enabled.\n *\n * @group State\n */\n public setState(state: SavedState) {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n this.saveState();\n }\n\n /**\n * Closes an open node and opens a closed one. Await the promise when you\n * need to know the node is really open or closed, like with `openNode` and\n * `closeNode`.\n *\n * @param slide - Override the `slide` option for this call.\n * @group Opening and closing\n */\n public async toggle(node: Node, slide: boolean | null = null): Promise<void> {\n const mustSlide = slide ?? this.options.slide;\n\n if (node.is_open) {\n await this.closeNode(node, mustSlide);\n } else {\n await this.openNode(node, mustSlide);\n }\n }\n\n /**\n * Returns the tree as a json string, including changes made through the\n * api.\n *\n * @group Other\n */\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n /**\n * Updates the data of a node and re-renders it. A string updates just the\n * name.\n *\n * Changing the `id` re-indexes the node. `children` and `parent` are\n * ignored — use `loadData` or `moveNode` for those.\n *\n * @example\n * ```js\n * tree.updateNode(node, \"new name\");\n * tree.updateNode(node, { name: \"new name\", color: \"red\" });\n * ```\n *\n * @group Changing the tree\n */\n public updateNode(node: Node, data: NodeData): void {\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data.children &&\n Array.isArray(data.children)\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children);\n }\n }\n\n this.refreshElements(node);\n }\n\n // Open the nodes up to the autoOpen level. A folder that is loaded on\n // demand is fetched first, and its children are opened when the data has\n // arrived.\n private async autoOpenNodesOnDemand(): Promise<void> {\n const maxLevel = this.getAutoOpenMaxLevel();\n\n const openNodes = async (): Promise<void> => {\n const loading: Promise<void>[] = [];\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loading.push(this.openNode(node, false).then(openNodes));\n }\n\n return false;\n }\n void this.openNode(node, false);\n\n return level !== maxLevel;\n });\n\n await Promise.all(loading);\n };\n\n await openNodes();\n }\n\n private createFolderElement(node: Node) {\n const classNames = this.classNames;\n const closedIconElement = this.renderer.closedIconElement;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const openedIconElement = this.renderer.openedIconElement;\n const tabIndex = this.options.tabIndex;\n const treeElement = this.htmlElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n // A selected node in a closed folder is rendered when the folder is\n // opened, which can be after it was selected. It becomes the tab stop\n // then, so the fallback tab stop must go.\n const renderChildren = (folder: Node) => {\n const ul = this.renderer.renderChildren(folder);\n this.updateTabStop();\n return ul;\n };\n\n return new FolderElement({\n classNames,\n closedIconElement,\n getScrollLeft,\n multiSelect: this.options.multiSelect,\n node,\n openedIconElement,\n renderChildren,\n tabIndex,\n treeElement,\n triggerEvent,\n });\n }\n\n private createNodeElement(node: Node) {\n const classNames = this.classNames;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n const treeElement = this.htmlElement;\n\n return new NodeElement({\n classNames,\n getScrollLeft,\n multiSelect: this.options.multiSelect,\n node,\n tabIndex,\n treeElement,\n });\n }\n\n /* Create a RequestUrl based on the url in the options.\n * Add a 'node' query parameter for loading on demand\n * Add a 'selected_node' query parameter if a node is selected.\n */\n private createRequestUrl(node?: Node): null | RequestUrl {\n const dataUrl = this.options.dataUrl;\n\n const url = typeof dataUrl === \"function\" ? dataUrl(node) : dataUrl;\n\n if (!url) {\n return null;\n }\n\n const requestUrl = new RequestUrl(url);\n\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n requestUrl.setSearchParam(\"node\", node.id.toString());\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n requestUrl.setSearchParam(\"selected_node\", selectedNodeId.toString());\n }\n }\n\n return requestUrl;\n }\n\n private deselectAllNodes(): void {\n for (const node of this.getSelectedNodes()) {\n this.removeFromSelection(node);\n }\n }\n\n // Deselect the children of the node.\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n // The treeitem of the first node, or null when the tree is empty\n // Move the focus to a node, without selecting it\n private focusNode(node: Node): void {\n this.activeNode = node;\n this.updateTabStop();\n node.element?.focus();\n }\n\n // With multiSelect: the active node, if it is still rendered in the tree\n private getActiveNode(): Node | null {\n const element = this.activeNode?.element;\n\n return element && this.htmlElement.contains(element)\n ? this.activeNode\n : null;\n }\n\n // Get the maximum level for auto open\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n }\n if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n }\n if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n }\n\n /* istanbul ignore next @preserve */\n return 0;\n }\n\n private getFirstTreeItem(): HTMLElement | null {\n return this.tree.children[0]?.element ?? null;\n }\n\n // The node of the HTML element that has the focus, if it is in this tree\n private getFocusedNode(): Node | null {\n const activeElement = document.activeElement;\n\n /* istanbul ignore if */\n if (!activeElement) {\n return null;\n }\n\n // The keyboard must still work for input elements.\n const tagName = activeElement.tagName;\n if (tagName !== \"A\" && tagName !== \"LI\" && tagName !== \"SPAN\") {\n return null;\n }\n\n const node = this.getNode(activeElement as HTMLElement);\n return node?.tree === this.tree ? node : null;\n }\n\n private getNodeElement(element: HTMLElement): NodeElement | null {\n const node = this.getNode(element);\n return node ? this.getNodeElementForNode(node) : null;\n }\n\n private getNodeElementForNode(node: Node): NodeElement {\n return node.isFolder()\n ? this.createFolderElement(node)\n : this.createNodeElement(node);\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n return this.saveStateHandler.getNodeIdToBeSelected();\n }\n\n // With multiSelect, the focused node becomes the tab stop\n private handleFocusIn = (): void => {\n const node = this.getFocusedNode();\n\n if (!node || node === this.activeNode) {\n return;\n }\n\n this.activeNode = node;\n this.updateTabStop();\n };\n\n private hasRenderedSelectedNode(): boolean {\n return this.getSelectedNodes().some((node) => Boolean(node.element));\n }\n\n private initData(): void {\n if (this.options.data) {\n this.loadData(this.options.data);\n } else {\n const dataUrl = this.createRequestUrl();\n\n if (dataUrl) {\n void this.loadDataFromUrl();\n } else {\n this.loadData([]);\n }\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (this.isInitialized) {\n return;\n }\n\n this.isInitialized = true;\n this.triggerEvent(\"tree.init\");\n };\n\n this.tree = new this.options.nodeClass(null, true, this.options.nodeClass);\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this.refreshElements(null);\n\n if (mustLoadOnDemand) {\n // Load data on demand and then init the tree\n void this.setInitialStateOnDemand().then(doInit);\n } else {\n doInit();\n }\n }\n\n // Does an HTML element of the tree have the focus?\n private isFocusOnTree(): boolean {\n return this.getFocusedNode() !== null;\n }\n\n private isSelectedNodeInSubtree(subtree: Node): boolean {\n const selectedNode = this.getSelectedNode();\n\n return selectedNode\n ? subtree === selectedNode || subtree.isParentOf(selectedNode)\n : false;\n }\n\n private async loadFolderOnDemand(node: Node, slide: boolean): Promise<void> {\n node.is_loading = true;\n\n await this.loadDataFromUrl(undefined, node);\n\n // Loading failed, or there is no url. Opening the node now would load it\n // again, without end. Leave it closed so the user can try again.\n if (node.load_on_demand) {\n node.is_loading = false;\n return;\n }\n\n await this.openNode(node, slide);\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this.refreshElements(parentNode);\n }\n\n private mouseCapture(positionInfo: PositionInfo): boolean | null {\n return this.options.dragAndDrop\n ? this.dndHandler.mouseCapture(positionInfo)\n : false;\n }\n\n private mouseDrag(positionInfo: PositionInfo): boolean {\n /* istanbul ignore if */\n if (!this.options.dragAndDrop) {\n return false;\n }\n\n const result = this.dndHandler.mouseDrag(positionInfo);\n this.scrollHandler.checkScrolling(positionInfo);\n return result;\n }\n\n private mouseStart(positionInfo: PositionInfo): boolean {\n /* istanbul ignore if */\n if (!this.options.dragAndDrop) {\n return false;\n }\n\n return this.dndHandler.mouseStart(positionInfo);\n }\n\n private mouseStop(positionInfo: PositionInfo): boolean {\n /* istanbul ignore if */\n if (!this.options.dragAndDrop) {\n return false;\n }\n\n this.scrollHandler.stopScrolling();\n return this.dndHandler.mouseStop(positionInfo);\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n void this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this.isFocusOnTree();\n const mustSelect = fromNode\n ? this.isSelectedNodeInSubtree(fromNode)\n : false;\n\n this.renderer.render(fromNode);\n\n if (mustSelect) {\n this.selectCurrentNode(mustSetFocus);\n }\n\n this.updateTabStop();\n\n this.triggerEvent(\"tree.refresh\");\n }\n\n private saveState(): void {\n this.saveStateHandler.saveState();\n }\n\n private selectCurrentNode(mustSetFocus: boolean): void {\n const node = this.getSelectedNode();\n if (!node) {\n return;\n }\n\n const nodeElement = this.getNodeElementForNode(node);\n nodeElement.select(mustSetFocus);\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): [boolean, boolean] => {\n // result: is state restored, must load on demand?\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (state) {\n const mustLoadOnDemand = this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n return [false, false];\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n }\n if (node.hasChildren()) {\n node.is_open = true;\n return level !== maxLevel;\n }\n return false;\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n private async setInitialStateOnDemand(): Promise<void> {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (state) {\n await this.saveStateHandler.setInitialStateOnDemand(state);\n } else {\n await this.autoOpenNodesOnDemand();\n }\n }\n\n // Set this HTML element to this node in the node map.\n private setNodeElement(element: HTMLElement, node: Node) {\n this.nodeMap.set(element, node);\n }\n\n private triggerEvent<Name extends TreeEventName>(\n eventName: Name,\n values?: TreeEvents[Name],\n ): boolean {\n return this.triggerEventProvider(this.htmlElement, eventName, values);\n }\n\n /* Keyboard users reach the tree through the tab stop. The selected node is\n * the tab stop, see NodeElement.select. Without a selected node, the first\n * node is the tab stop, so the tree can always be reached.\n * With multiSelect the tab stop is the active node: the node that was\n * focused last. Without one, it is the first node.\n */\n private updateTabStop(): void {\n const tabIndex = this.options.tabIndex;\n const multiSelect = this.options.multiSelect;\n const previousTabStop = this.fallbackTabStop;\n let tabStop: HTMLElement | null;\n\n if (tabIndex == null) {\n tabStop = null;\n } else if (multiSelect) {\n tabStop = this.getActiveNode()?.element ?? this.getFirstTreeItem();\n } else {\n tabStop = this.hasRenderedSelectedNode() ? null : this.getFirstTreeItem();\n }\n\n if (\n previousTabStop &&\n previousTabStop !== tabStop &&\n (multiSelect || previousTabStop.getAttribute(\"aria-selected\") !== \"true\")\n ) {\n previousTabStop.setAttribute(\"tabindex\", \"-1\");\n }\n\n if (tabStop && tabIndex != null) {\n tabStop.setAttribute(\"tabindex\", String(tabIndex));\n }\n\n this.fallbackTabStop = tabStop;\n }\n}\n\nexport {\n type MoveInfo,\n type TreeEvent,\n type TreeEventName,\n type TreeEvents,\n} from \"./events\";\nexport { type Node, type NodeData, type NodeId, type Position } from \"./node\";\nexport { type TreeElementOptions } from \"./options\";\nexport { type SavedState } from \"./saveStateHandler\";\nexport { type SelectNodeOptions } from \"./selectNodeHandler\";\n"],"names":["activeNode","classNames","dataLoader","dndHandler","fallbackTabStop","htmlElement","isInitialized","keyHandler","mouseHandler","nodeMap","options","renderer","saveStateHandler","scrollHandler","selectNodeHandler","tree","triggerEventProvider","getNodeElement","getNodeElementForNode","getFocusedNode","openParents","refreshElements","setNodeElement","triggerEvent","updateTabStop","saveState","addToSelection","getSelectedNodes","isNodeSelected","removeFromSelection","selectSingleNode","toggleNodeInSelection","focusNode","getScrollLeft","getActiveNode","mouseCapture","mouseDrag","mouseStart","mouseStop","handleFocusIn","initData","select","createFolderElement","close","deinit","getSelectedNode","getState","getStateFromStorage","__version__","isDragging","deselectNodes","loadSubtree","initTree","refresh","createRequestUrl","loadFromUrl","moveDown","moveUp","open","loadFolderOnDemand","deselect","scrollToY","deselectAllNodes","setInitialState","autoOpenNodesOnDemand","getAutoOpenMaxLevel","closedIconElement","openedIconElement","renderChildren","createNodeElement","setSearchParam","getNodeIdToBeSelected","getSelectedNodesUnder","getFirstTreeItem","hasRenderedSelectedNode","clear","setInitialStateOnDemand","isFocusOnTree","isSelectedNodeInSubtree","checkScrolling","stopScrolling","render","selectCurrentNode"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { TreeEventName, TreeEvents } from \"./events\";\nimport type { PositionInfo } from \"./mouseUtils\";\nimport type { NodeData, NodeId, Position } from \"./node\";\nimport type { ChangeableOption, TreeElementOptions } from \"./options\";\nimport type { SavedState } from \"./saveStateHandler\";\nimport type { SelectNodeOptions } from \"./selectNodeHandler\";\n\nimport createClassNames from \"./classNames\";\nimport DataLoader from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { Node } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { changeableOptions } from \"./options\";\nimport { getOffsetTop } from \"./positionUtils\";\nimport RequestUrl from \"./requestUrl\";\nimport SaveStateHandler from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport setDefaultOptions from \"./setDefaultOptions\";\nimport triggerCustomEvent from \"./triggerCustomEvent\";\nimport __version__ from \"./version\";\n\n// The types that appear in the public api. Consumers cannot import them from\n// the submodules directly, because those are not exposed in package.json.\n// Type only, so that the iife build keeps exposing the TreeElement class itself\n// as its global, instead of an object of named exports.\n\nexport type TriggerEventProvider = (\n element: HTMLElement,\n eventName: TreeEventName,\n values?: TreeEvents[TreeEventName],\n) => boolean;\n\ninterface TreeElementParams extends Partial<TreeElementOptions> {\n /**\n The element the tree is rendered into. Its content is replaced.\n */\n htmlElement: HTMLElement;\n /** Replaces how events are dispatched. It must return whether the event\n * was not cancelled. This exists for tests and for integrating with\n * another event system. */\n overrideTriggerEventProvider?: TriggerEventProvider;\n}\n\nexport default class TreeElement {\n // With multiSelect: the node that is the tab stop, see updateTabStop\n private activeNode: Node | null;\n private classNames: ClassNames;\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\n private fallbackTabStop: HTMLElement | null;\n private htmlElement: HTMLElement;\n private isInitialized: boolean;\n private keyHandler: KeyHandler;\n private mouseHandler: MouseHandler;\n private nodeMap: WeakMap<HTMLElement, Node>;\n private options: TreeElementOptions;\n private renderer: ElementsRenderer;\n private saveStateHandler: SaveStateHandler;\n private scrollHandler: ScrollHandler;\n private selectNodeHandler: SelectNodeHandler;\n private tree: Node;\n private triggerEventProvider: TriggerEventProvider;\n\n /**\n @hidden\n */\n constructor({\n htmlElement,\n overrideTriggerEventProvider,\n ...options\n }: TreeElementParams) {\n this.htmlElement = htmlElement;\n this.options = setDefaultOptions(htmlElement, options);\n this.classNames = createClassNames(this.options);\n this.triggerEventProvider =\n overrideTriggerEventProvider ?? triggerCustomEvent;\n\n this.isInitialized = false;\n this.tree = new Node({}, true);\n this.nodeMap = new WeakMap();\n this.fallbackTabStop = null;\n this.activeNode = null;\n\n const {\n ariaLabel,\n ariaLabelledBy,\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n multiSelect,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState: saveStateOption,\n showEmptyFolder,\n tabIndex,\n } = this.options;\n\n const classNames = this.classNames;\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this.getNodeElement.bind(this);\n const getNodeElementForNode = this.getNodeElementForNode.bind(this);\n const getFocusedNode = this.getFocusedNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this.openNode.bind(this);\n const openParents = this.openParents.bind(this);\n const refreshElements = this.refreshElements.bind(this);\n const refreshHitAreas = this.refreshHitAreas.bind(this);\n const setNodeElement = this.setNodeElement.bind(this);\n const treeElement = this.htmlElement;\n const triggerEvent = this.triggerEvent.bind(this);\n const updateTabStop = this.updateTabStop.bind(this);\n\n const saveState = () => {\n saveStateHandler.saveState();\n };\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n getNodeElementForNode,\n getOnCanSelectNode: () => this.options.onCanSelectNode,\n getSelectable: () => this.options.selectable,\n openParents,\n saveState,\n triggerEvent,\n updateTabStop,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const selectNode =\n selectNodeHandler.selectSingleNode.bind(selectNodeHandler);\n\n const toggleNodeInSelection =\n selectNodeHandler.toggleNodeInSelection.bind(selectNodeHandler);\n\n // With multiSelect, a click adds a node to the selection or removes it\n const onClickTitle = (node: Node) => {\n if (this.options.multiSelect) {\n toggleNodeInSelection(node, false);\n this.focusNode(node);\n } else {\n selectNode(node);\n }\n };\n\n const getMouseDelay = () => this.options.startDndDelay ?? 0;\n\n const dataLoader = new DataLoader({\n classNames,\n dataFilter,\n loadData,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState: saveStateOption,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\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 treeElement,\n triggerEvent,\n });\n\n const keyHandler = new KeyHandler({\n closeNode,\n focusNode: this.focusNode.bind(this),\n getActiveNode: this.getActiveNode.bind(this),\n getFocusedNode,\n getSelectedNode,\n getTree,\n keyboardSupport,\n multiSelect,\n openNode,\n selectNode,\n toggleNodeInSelection,\n triggerEvent,\n });\n\n const renderer = new ElementsRenderer({\n ariaLabel,\n ariaLabelledBy,\n autoEscape,\n buttonLeft,\n classNames,\n closedIcon,\n dragAndDrop,\n getTree,\n htmlElement: treeElement,\n isNodeSelected,\n multiSelect,\n onCreateLi,\n openedIcon,\n rtl,\n setNodeElement,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this.getNode.bind(this);\n const onMouseCapture = this.mouseCapture.bind(this);\n const onMouseDrag = this.mouseDrag.bind(this);\n const onMouseStart = this.mouseStart.bind(this);\n const onMouseStop = this.mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n classNames,\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this.options.useContextMenu,\n });\n\n this.dataLoader = dataLoader;\n this.dndHandler = dndHandler;\n this.keyHandler = keyHandler;\n this.mouseHandler = mouseHandler;\n this.renderer = renderer;\n this.saveStateHandler = saveStateHandler;\n this.scrollHandler = scrollHandler;\n this.selectNodeHandler = selectNodeHandler;\n\n if (multiSelect) {\n treeElement.addEventListener(\"focusin\", this.handleFocusIn);\n }\n\n this.initData();\n }\n\n /**\n * Adds a sibling after a node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addNodeAfter(nodeData: NodeData, existingNode: Node): Node | null {\n const newNode = existingNode.addAfter(nodeData);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n /**\n * Adds a sibling before a node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addNodeBefore(nodeData: NodeData, existingNode: Node): Node | null {\n const newNode = existingNode.addBefore(nodeData);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n /**\n * Inserts a new node between a node and its parent. The siblings of the node\n * move along: the new node takes all children of the parent, and becomes its\n * only child.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addParentNode(nodeData: NodeData, existingNode: Node): Node | null {\n const newNode = existingNode.addParent(nodeData);\n\n if (newNode) {\n this.refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n /**\n * Adds a node to the selection instead of replacing it.\n *\n * @param mustSetFocus - Move the focus to the node. Default `true`.\n * @group Selection\n */\n public addToSelection(node: Node, mustSetFocus = true) {\n this.selectNodeHandler.addToSelection(node);\n this.openParents(node);\n\n this.getNodeElementForNode(node).select(mustSetFocus);\n\n this.updateTabStop();\n this.saveState();\n }\n\n /**\n * Adds a node as the last child of a parent.\n *\n * @example\n * ```js\n * tree.appendNode({ name: \"child\", id: 5 }, tree.getNodeById(1));\n * ```\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public appendNode(nodeData: NodeData, parentNode: Node): Node {\n const node = parentNode.append(nodeData);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n /**\n * Closes a folder. Await the promise when you need to know the closing\n * animation has finished.\n *\n * @example\n * ```js\n * await tree.closeNode(node);\n * console.log(\"closed\");\n * ```\n *\n * @param slide - Override the `slide` option for this call.\n * @group Opening and closing\n */\n public async closeNode(node: Node, slide?: boolean): Promise<void> {\n if (!(node.isFolder() || node.isEmptyFolder)) {\n return;\n }\n\n await this.createFolderElement(node).close(\n slide ?? this.options.slide,\n this.options.animationSpeed,\n );\n\n this.saveState();\n }\n\n /**\n * Empties the element and removes the tree's document-level keyboard\n * listener. Call it when you remove the tree from the page.\n *\n * @group Other\n */\n public deinit(): void {\n this.htmlElement.textContent = \"\";\n\n this.dataLoader.deinit();\n this.keyHandler.deinit();\n this.mouseHandler.deinit();\n this.htmlElement.removeEventListener(\"focusin\", this.handleFocusIn);\n\n this.tree = new Node({}, true);\n }\n\n /**\n * Returns the node that belongs to a `li` element the tree rendered.\n *\n * @group Finding nodes\n */\n public getNode(element: HTMLElement): Node | null {\n const liElement = element.closest<HTMLElement>(\n `li.${this.classNames.common}`,\n );\n\n return liElement ? (this.nodeMap.get(liElement) ?? null) : null;\n }\n\n /**\n * Returns the first node for which the callback returns `true`.\n *\n * @example\n * ```js\n * const node = tree.getNodeByCallback((node) => node.children.length > 3);\n * ```\n *\n * @group Finding nodes\n */\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n /**\n * Returns the node with this id.\n *\n * @example\n * ```js\n * const node = tree.getNodeById(1);\n * ```\n *\n * @group Finding nodes\n */\n public getNodeById(id: NodeId): Node | null {\n return this.tree.getNodeById(id);\n }\n\n /**\n * Returns the first node with this name.\n *\n * @group Finding nodes\n */\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n /**\n * Like `getNodeByName`, but throws when there is no such node. Convenient\n * in tests and when a missing node is a bug.\n *\n * @group Finding nodes\n */\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n /**\n * Returns all nodes with this property value.\n *\n * @example\n * ```js\n * tree.getNodesByProperty(\"color\", \"green\");\n * ```\n *\n * @group Finding nodes\n */\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n /**\n * Returns the selected node, or `null` when nothing is selected.\n *\n * @group Selection\n */\n public getSelectedNode(): Node | null {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n /**\n * Returns the selected nodes.\n *\n * @group Selection\n */\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n /**\n * Returns the current state—`open_nodes` and `selected_node`—whether or\n * not `saveState` is enabled.\n *\n * @group State\n */\n public getState(): null | SavedState {\n return this.saveStateHandler.getState();\n }\n\n /**\n * Returns the state as it is stored.\n *\n * @group State\n */\n public getStateFromStorage(): null | SavedState {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n /**\n * Returns the root node. It is not rendered, and its `children` are the\n * top-level nodes. Also available as the `tree` property.\n *\n * @group Finding nodes\n */\n public getTree(): Node {\n return this.tree;\n }\n\n /**\n * Returns the version of tree-element.\n *\n * @group Other\n */\n public getVersion(): string {\n return __version__;\n }\n\n /**\n * Returns whether the user is dragging a node.\n *\n * @group Other\n */\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n /**\n * Returns whether the node is selected.\n *\n * @group Selection\n */\n public isNodeSelected(node: Node): boolean {\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n /**\n * Loads data into the tree.\n *\n * @param parentNode - Replace this node's children instead of the whole\n * tree.\n * @group Loading data\n */\n public loadData(data: NodeData[] | null, parentNode?: Node): void {\n if (data) {\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n\n this.triggerEvent(\"tree.set_data\", {\n node: parentNode,\n treeData: data ?? undefined,\n });\n }\n\n /**\n * Fetches data and loads it into the tree, or into `parentNode`.\n *\n * @param url - Defaults to the `dataUrl` option.\n * @group Loading data\n */\n public async loadDataFromUrl(url?: string, parentNode?: Node): Promise<void> {\n const requestUrl = url\n ? new RequestUrl(url)\n : this.createRequestUrl(parentNode);\n\n if (requestUrl) {\n await this.dataLoader.loadFromUrl(requestUrl, parentNode);\n }\n }\n\n /**\n * Selects the next visible node, like the down arrow key. With\n * `multiSelect` it moves the focus instead.\n *\n * @group Selection\n */\n public moveDown() {\n this.keyHandler.moveDown();\n }\n\n /**\n * Moves a node inside the tree.\n *\n * @example\n * ```js\n * tree.moveNode(tree.getNodeById(2), tree.getNodeById(1), \"inside\");\n * ```\n *\n * @param position - `\"before\"`, `\"after\"` or `\"inside\"`.\n * @group Changing the tree\n */\n public moveNode(node: Node, targetNode: Node, position: Position): void {\n this.tree.moveNode(node, targetNode, position);\n this.refreshElements(null);\n }\n\n /**\n * Selects the previous visible node, like the up arrow key. With\n * `multiSelect` it moves the focus instead.\n *\n * @group Selection\n */\n public moveUp() {\n this.keyHandler.moveUp();\n }\n\n /**\n * Opens a folder, and the folders that contain it. A node marked `load_on_demand`\n * is fetched first, so await the promise when you need to know it is really\n * open.\n *\n * @example\n * ```js\n * await tree.openNode(node);\n * console.log(\"open\");\n * ```\n *\n * @param slide - Override the `slide` option for this call.\n * @group Opening and closing\n */\n public async openNode(node: Node, slide?: boolean): Promise<void> {\n const mustSlide = slide ?? this.options.slide;\n\n const doOpenNode = async (\n openedNode: Node,\n slideOption: boolean,\n ): Promise<void> => {\n if (!openedNode.children.length) {\n return;\n }\n\n const folderElement = this.createFolderElement(openedNode);\n\n await folderElement.open(slideOption, this.options.animationSpeed);\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n await this.loadFolderOnDemand(node, mustSlide);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n await doOpenNode(parent, false);\n }\n parent = parent.parent;\n }\n\n await doOpenNode(node, mustSlide);\n\n this.saveState();\n }\n }\n }\n\n /**\n * Adds a node as the first child of a parent.\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public prependNode(nodeData: NodeData, parentNode: Node): Node {\n const node = parentNode.prepend(nodeData);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n /**\n * Re-renders the whole tree. Needed after changing node data directly\n * instead of through these methods.\n *\n * @group Changing the tree\n */\n public refresh() {\n this.refreshElements(null);\n }\n\n /**\n * Recomputes the drop targets. Call this if the layout changes during a\n * drag.\n *\n * @group Other\n */\n public refreshHitAreas() {\n this.dndHandler.refresh();\n }\n\n /**\n * Removes a node from the selection.\n *\n * @group Selection\n */\n public removeFromSelection(node: Node) {\n this.selectNodeHandler.removeFromSelection(node);\n\n this.getNodeElementForNode(node).deselect();\n this.updateTabStop();\n this.saveState();\n }\n\n /**\n * Removes a node and its children.\n *\n * @group Changing the tree\n */\n public removeNode(node: Node): void {\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this.refreshElements(parent);\n }\n\n /**\n * Scrolls the node into view.\n *\n * @group Selection\n */\n public scrollToNode(node: Node) {\n if (!node.element) {\n return;\n }\n\n const top = getOffsetTop(node.element) - getOffsetTop(this.htmlElement);\n\n this.scrollHandler.scrollToY(top);\n }\n\n /**\n * Replaces the selection, and opens the parents of the node.\n *\n * @param node - `null` clears the selection.\n * @param options - `mustSetFocus`: move focus to the node, default `true`.\n * `mustToggle`: deselect the node if it is already selected, default\n * `false`.\n * @group Selection\n */\n public selectNode(node: Node | null, options?: SelectNodeOptions): void {\n if (!node) {\n // Called with empty node -> deselect all nodes\n this.deselectAllNodes();\n this.saveStateHandler.saveState();\n return;\n }\n\n // Unlike a click, selecting the selected node again keeps it selected\n this.selectNodeHandler.selectSingleNode(node, {\n mustToggle: false,\n ...options,\n });\n }\n\n /**\n * Changes an option after construction. Only some options can be changed:\n * the others throw an error. See\n * [Options](/reference/options#changing-an-option-later).\n *\n * @group Other\n */\n public setOption(option: ChangeableOption, value: unknown) {\n if (!(changeableOptions as readonly string[]).includes(option)) {\n throw new Error(\n `The option ${option} can only be set in the constructor`,\n );\n }\n\n (this.options as unknown as Record<string, unknown>)[option] = value;\n\n switch (option) {\n case \"dragAndDrop\": {\n this.renderer.setDragAndDrop(Boolean(value));\n\n break;\n }\n case \"keyboardSupport\": {\n this.keyHandler.setKeyboardSupport(Boolean(value));\n\n break;\n }\n case \"multiSelect\": {\n this.setMultiSelect(Boolean(value));\n\n break;\n }\n case \"tabIndex\": {\n this.options.tabIndex = (value as null | number) ?? undefined;\n this.renderer.setTabIndex(this.options.tabIndex);\n this.fallbackTabStop = null;\n this.updateTabStop();\n\n break;\n }\n // No default\n }\n }\n\n /**\n * Applies a state to the tree, and saves it to storage when `saveState` is\n * enabled.\n *\n * @group State\n */\n public setState(state: SavedState) {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n this.saveState();\n }\n\n /**\n * Closes an open node and opens a closed one. Await the promise when you\n * need to know the node is really open or closed, like with `openNode` and\n * `closeNode`.\n *\n * @param slide - Override the `slide` option for this call.\n * @group Opening and closing\n */\n public async toggle(node: Node, slide: boolean | null = null): Promise<void> {\n const mustSlide = slide ?? this.options.slide;\n\n if (node.is_open) {\n await this.closeNode(node, mustSlide);\n } else {\n await this.openNode(node, mustSlide);\n }\n }\n\n /**\n * Returns the tree as a JSON string, including changes made through the\n * API.\n *\n * @group Other\n */\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n /**\n * Updates the data of a node and re-renders it. A string updates just the\n * name.\n *\n * Changing the `id` re-indexes the node. `children` and `parent` are\n * ignored—use `loadData` or `moveNode` for those.\n *\n * @example\n * ```js\n * tree.updateNode(node, \"new name\");\n * tree.updateNode(node, { name: \"new name\", color: \"red\" });\n * ```\n *\n * @group Changing the tree\n */\n public updateNode(node: Node, data: NodeData): void {\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data.children &&\n Array.isArray(data.children)\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children);\n }\n }\n\n this.refreshElements(node);\n }\n\n // Open the nodes up to the autoOpen level. A folder that is loaded on\n // demand is fetched first, and its children are opened when the data has\n // arrived.\n private async autoOpenNodesOnDemand(): Promise<void> {\n const maxLevel = this.getAutoOpenMaxLevel();\n\n const openNodes = async (): Promise<void> => {\n const loading: Promise<void>[] = [];\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loading.push(this.openNode(node, false).then(openNodes));\n }\n\n return false;\n }\n void this.openNode(node, false);\n\n return level !== maxLevel;\n });\n\n await Promise.all(loading);\n };\n\n await openNodes();\n }\n\n private createFolderElement(node: Node) {\n const classNames = this.classNames;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n const treeElement = this.htmlElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n // A selected node in a closed folder is rendered when the folder is\n // opened, which can be after it was selected. It becomes the tab stop\n // then, so the fallback tab stop must go.\n const renderChildren = (folder: Node) => {\n const ul = this.renderer.renderChildren(folder);\n this.updateTabStop();\n return ul;\n };\n\n return new FolderElement({\n classNames,\n getScrollLeft,\n icons: this.renderer.icons,\n multiSelect: this.options.multiSelect,\n node,\n renderChildren,\n tabIndex,\n treeElement,\n triggerEvent,\n });\n }\n\n private createNodeElement(node: Node) {\n const classNames = this.classNames;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n const treeElement = this.htmlElement;\n\n return new NodeElement({\n classNames,\n getScrollLeft,\n multiSelect: this.options.multiSelect,\n node,\n tabIndex,\n treeElement,\n });\n }\n\n /* Create a RequestUrl based on the url in the options.\n * Add a 'node' query parameter for loading on demand\n * Add a 'selected_node' query parameter if a node is selected.\n */\n private createRequestUrl(node?: Node): null | RequestUrl {\n const dataUrl = this.options.dataUrl;\n\n const url = typeof dataUrl === \"function\" ? dataUrl(node) : dataUrl;\n\n if (!url) {\n return null;\n }\n\n const requestUrl = new RequestUrl(url);\n\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n requestUrl.setSearchParam(\"node\", node.id.toString());\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n requestUrl.setSearchParam(\"selected_node\", selectedNodeId.toString());\n }\n }\n\n return requestUrl;\n }\n\n private deselectAllNodes(): void {\n for (const node of this.getSelectedNodes()) {\n this.removeFromSelection(node);\n }\n }\n\n // Deselect the children of the node.\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n // The treeitem of the first node, or null when the tree is empty\n // Move the focus to a node, without selecting it\n private focusNode(node: Node): void {\n this.activeNode = node;\n this.updateTabStop();\n node.element?.focus();\n }\n\n // With multiSelect: the active node, if it is still rendered in the tree\n private getActiveNode(): Node | null {\n const element = this.activeNode?.element;\n\n return element && this.htmlElement.contains(element)\n ? this.activeNode\n : null;\n }\n\n // Get the maximum level for auto open\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n }\n if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n }\n if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n }\n\n /* istanbul ignore next @preserve */\n return 0;\n }\n\n private getFirstTreeItem(): HTMLElement | null {\n return this.tree.children[0]?.element ?? null;\n }\n\n // The node of the HTML element that has the focus, if it is in this tree\n private getFocusedNode(): Node | null {\n const activeElement = document.activeElement;\n\n // An active element must exist and the keyboard must still work for input elements.\n if (\n !activeElement ||\n ![\"A\", \"LI\", \"SPAN\"].includes(activeElement.tagName)\n ) {\n return null;\n }\n\n const node = this.getNode(activeElement as HTMLElement);\n return node?.tree === this.tree ? node : null;\n }\n\n private getNodeElement(element: HTMLElement): NodeElement | null {\n const node = this.getNode(element);\n return node ? this.getNodeElementForNode(node) : null;\n }\n\n private getNodeElementForNode(node: Node): NodeElement {\n return node.isFolder()\n ? this.createFolderElement(node)\n : this.createNodeElement(node);\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n return this.saveStateHandler.getNodeIdToBeSelected();\n }\n\n // With multiSelect, the focused node becomes the tab stop\n private handleFocusIn = (): void => {\n const node = this.getFocusedNode();\n\n if (!node || node === this.activeNode) {\n return;\n }\n\n this.activeNode = node;\n this.updateTabStop();\n };\n\n private hasRenderedSelectedNode(): boolean {\n return this.getSelectedNodes().some((node) => Boolean(node.element));\n }\n\n private initData(): void {\n if (this.options.data) {\n this.loadData(this.options.data);\n } else {\n const dataUrl = this.createRequestUrl();\n\n if (dataUrl) {\n void this.loadDataFromUrl();\n } else {\n this.loadData([]);\n }\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (this.isInitialized) {\n return;\n }\n\n this.isInitialized = true;\n this.triggerEvent(\"tree.init\");\n };\n\n // Before the tree is replaced: then the focused node is no longer in it\n const focusedNode = this.getFocusedNode();\n\n this.tree = new this.options.nodeClass(null, true, this.options.nodeClass);\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this.refreshElements(null);\n\n if (focusedNode) {\n this.restoreFocus(focusedNode);\n }\n\n if (mustLoadOnDemand) {\n // Load data on demand and then init the tree\n void this.setInitialStateOnDemand().then(doInit);\n } else {\n doInit();\n }\n }\n\n private async loadFolderOnDemand(node: Node, slide: boolean): Promise<void> {\n node.is_loading = true;\n\n await this.loadDataFromUrl(undefined, node);\n\n // Loading failed, or there is no url. Opening the node now would load it\n // again, without end. Leave it closed so the user can try again.\n if (node.load_on_demand) {\n node.is_loading = false;\n return;\n }\n\n await this.openNode(node, slide);\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this.refreshElements(parentNode);\n }\n\n private mouseCapture(positionInfo: PositionInfo): boolean | null {\n return this.options.dragAndDrop\n ? this.dndHandler.mouseCapture(positionInfo)\n : false;\n }\n\n private mouseDrag(positionInfo: PositionInfo): boolean {\n /* istanbul ignore if */\n if (!this.options.dragAndDrop) {\n return false;\n }\n\n const result = this.dndHandler.mouseDrag(positionInfo);\n this.scrollHandler.checkScrolling(positionInfo);\n return result;\n }\n\n private mouseStart(positionInfo: PositionInfo): boolean {\n /* istanbul ignore if */\n if (!this.options.dragAndDrop) {\n return false;\n }\n\n return this.dndHandler.mouseStart(positionInfo);\n }\n\n private mouseStop(positionInfo: PositionInfo): void {\n /* istanbul ignore if */\n if (!this.options.dragAndDrop) {\n return;\n }\n\n this.scrollHandler.stopScrolling();\n this.dndHandler.mouseStop(positionInfo);\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n void this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private refreshElements(fromNode: Node | null): void {\n const focusedNode = this.getFocusedNode();\n\n // The renderer marks the selected nodes, so only the focus needs restoring\n this.renderer.render(fromNode);\n\n if (focusedNode) {\n this.restoreFocus(focusedNode);\n }\n\n this.updateTabStop();\n\n this.triggerEvent(\"tree.refresh\");\n }\n\n // Rendering replaces the elements of the nodes, so a focused element can be\n // gone. Then move the focus to the new element of the same node. After\n // loadData the nodes are new objects, so look the node up by its id.\n private restoreFocus(focusedNode: Node): void {\n if (this.htmlElement.contains(document.activeElement)) {\n return;\n }\n\n const node =\n (focusedNode.id == null ? null : this.getNodeById(focusedNode.id)) ??\n focusedNode;\n const element = node.element;\n\n if (element && this.htmlElement.contains(element)) {\n element.focus();\n }\n }\n\n private saveState(): void {\n this.saveStateHandler.saveState();\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): [boolean, boolean] => {\n // result: is state restored, must load on demand?\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (state) {\n const mustLoadOnDemand = this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n return [false, false];\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n }\n if (node.hasChildren()) {\n node.is_open = true;\n return level !== maxLevel;\n }\n return false;\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n private async setInitialStateOnDemand(): Promise<void> {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (state) {\n await this.saveStateHandler.setInitialStateOnDemand(state);\n } else {\n await this.autoOpenNodesOnDemand();\n }\n }\n\n /* Change multiSelect after construction. The attributes of the nodes\n * depend on it, so the tree is rendered again. The selection is kept: a\n * tree without multiSelect can also have several selected nodes, see\n * addToSelection.\n */\n private setMultiSelect(multiSelect: boolean): void {\n const focusedNode = this.getFocusedNode();\n\n this.keyHandler.setMultiSelect(multiSelect);\n this.renderer.setMultiSelect(multiSelect);\n\n if (multiSelect) {\n this.htmlElement.addEventListener(\"focusin\", this.handleFocusIn);\n } else {\n this.htmlElement.removeEventListener(\"focusin\", this.handleFocusIn);\n }\n\n this.activeNode = multiSelect ? focusedNode : null;\n this.fallbackTabStop = null;\n this.refreshElements(null);\n }\n\n // Set this HTML element to this node in the node map.\n private setNodeElement(element: HTMLElement, node: Node) {\n this.nodeMap.set(element, node);\n }\n\n private triggerEvent<Name extends TreeEventName>(\n eventName: Name,\n values?: TreeEvents[Name],\n ): boolean {\n return this.triggerEventProvider(this.htmlElement, eventName, values);\n }\n\n /* Keyboard users reach the tree through the tab stop. The selected node is\n * the tab stop, see NodeElement.select. Without a selected node, the first\n * node is the tab stop, so the tree can always be reached.\n * With multiSelect the tab stop is the active node: the node that was\n * focused last. Without one, it is the first node.\n */\n private updateTabStop(): void {\n const tabIndex = this.options.tabIndex;\n const multiSelect = this.options.multiSelect;\n const previousTabStop = this.fallbackTabStop;\n let tabStop: HTMLElement | null;\n\n if (tabIndex == null) {\n tabStop = null;\n } else if (multiSelect) {\n tabStop = this.getActiveNode()?.element ?? this.getFirstTreeItem();\n } else {\n tabStop = this.hasRenderedSelectedNode() ? null : this.getFirstTreeItem();\n }\n\n if (\n previousTabStop &&\n previousTabStop !== tabStop &&\n (multiSelect || previousTabStop.getAttribute(\"aria-selected\") !== \"true\")\n ) {\n previousTabStop.setAttribute(\"tabindex\", \"-1\");\n }\n\n if (tabStop && tabIndex != null) {\n tabStop.setAttribute(\"tabindex\", String(tabIndex));\n }\n\n this.fallbackTabStop = tabStop;\n }\n}\n\nexport {\n type MoveInfo,\n type TreeEvent,\n type TreeEventName,\n type TreeEvents,\n} from \"./events\";\nexport { type Node, type NodeData, type NodeId, type Position } from \"./node\";\nexport { type ChangeableOption, type TreeElementOptions } from \"./options\";\nexport { type SavedState } from \"./saveStateHandler\";\nexport { type SelectNodeOptions } from \"./selectNodeHandler\";\n"],"names":["activeNode","classNames","dataLoader","dndHandler","fallbackTabStop","htmlElement","isInitialized","keyHandler","mouseHandler","nodeMap","options","renderer","saveStateHandler","scrollHandler","selectNodeHandler","tree","triggerEventProvider","getNodeElement","getNodeElementForNode","getFocusedNode","openParents","refreshElements","setNodeElement","triggerEvent","updateTabStop","saveState","addToSelection","getSelectedNodes","isNodeSelected","removeFromSelection","selectSingleNode","toggleNodeInSelection","focusNode","getScrollLeft","getActiveNode","mouseCapture","mouseDrag","mouseStart","mouseStop","handleFocusIn","initData","select","createFolderElement","close","deinit","getSelectedNode","getState","getStateFromStorage","__version__","isDragging","deselectNodes","loadSubtree","initTree","refresh","createRequestUrl","loadFromUrl","moveDown","moveUp","open","loadFolderOnDemand","deselect","scrollToY","deselectAllNodes","setDragAndDrop","setKeyboardSupport","setMultiSelect","setTabIndex","setInitialState","autoOpenNodesOnDemand","getAutoOpenMaxLevel","renderChildren","icons","createNodeElement","setSearchParam","getNodeIdToBeSelected","getSelectedNodesUnder","getFirstTreeItem","hasRenderedSelectedNode","clear","restoreFocus","setInitialStateOnDemand","checkScrolling","stopScrolling","render"],"mappings":"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"}
|
package/lib/keyHandler.d.ts
CHANGED
|
@@ -30,6 +30,8 @@ export default class KeyHandler {
|
|
|
30
30
|
deinit(): void;
|
|
31
31
|
moveDown(): boolean;
|
|
32
32
|
moveUp(): boolean;
|
|
33
|
+
setKeyboardSupport(keyboardSupport: boolean): void;
|
|
34
|
+
setMultiSelect(multiSelect: boolean): void;
|
|
33
35
|
private activate;
|
|
34
36
|
private getCurrentNode;
|
|
35
37
|
private goToNode;
|
package/lib/keyHandler.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyHandler.d.ts","sourceRoot":"","sources":["../src/keyHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,OAAO,EACP,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,YAAY,EACb,MAAM,eAAe,CAAC;AAGvB,UAAU,gBAAgB;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,YAAY,EAAE,YAAY,CAAC;CAC5B;AAOD,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,OAAO,EACP,eAAe,EACf,WAAW,EACX,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,YAAY,GACb,EAAE,gBAAgB;IAmBZ,MAAM,IAAI,IAAI;IAMd,QAAQ,IAAI,OAAO;IAInB,MAAM,IAAI,OAAO;
|
|
1
|
+
{"version":3,"file":"keyHandler.d.ts","sourceRoot":"","sources":["../src/keyHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,OAAO,EACP,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,YAAY,EACb,MAAM,eAAe,CAAC;AAGvB,UAAU,gBAAgB;IACxB,SAAS,EAAE,SAAS,CAAC;IACrB,SAAS,EAAE,SAAS,CAAC;IACrB,aAAa,EAAE,aAAa,CAAC;IAC7B,cAAc,EAAE,cAAc,CAAC;IAC/B,eAAe,EAAE,eAAe,CAAC;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,QAAQ,CAAC;IACnB,UAAU,EAAE,UAAU,CAAC;IACvB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,YAAY,EAAE,YAAY,CAAC;CAC5B;AAOD,MAAM,CAAC,OAAO,OAAO,UAAU;IAC7B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,eAAe,CAAU;IACjC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,QAAQ,CAAW;IAC3B,OAAO,CAAC,kBAAkB,CAAa;IACvC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,SAAS,EACT,SAAS,EACT,aAAa,EACb,cAAc,EACd,eAAe,EACf,OAAO,EACP,eAAe,EACf,WAAW,EACX,QAAQ,EACR,UAAU,EACV,qBAAqB,EACrB,YAAY,GACb,EAAE,gBAAgB;IAmBZ,MAAM,IAAI,IAAI;IAMd,QAAQ,IAAI,OAAO;IAInB,MAAM,IAAI,OAAO;IAKjB,kBAAkB,CAAC,eAAe,EAAE,OAAO,GAAG,IAAI;IAelD,cAAc,CAAC,WAAW,EAAE,OAAO,GAAG,IAAI;IAKjD,OAAO,CAAC,QAAQ;IAOhB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,QAAQ;IAchB,OAAO,CAAC,cAAc;IAwBtB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,aAAa,CA8CnB;IAEF,OAAO,CAAC,yBAAyB;IAcjC,OAAO,CAAC,QAAQ;IAiBhB,OAAO,CAAC,SAAS;IAgBjB,OAAO,CAAC,MAAM;CAIf"}
|