tree-element 0.3.2 → 0.4.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.
- package/README.md +1 -0
- package/lib/classNames.js +4 -4
- package/lib/classNames.js.map +1 -1
- package/lib/dataLoader.d.ts +0 -1
- package/lib/dataLoader.d.ts.map +1 -1
- package/lib/dataLoader.js +6 -6
- package/lib/dataLoader.js.map +1 -1
- package/lib/elementsRenderer.d.ts +4 -2
- package/lib/elementsRenderer.d.ts.map +1 -1
- package/lib/elementsRenderer.js +35 -21
- package/lib/elementsRenderer.js.map +1 -1
- package/lib/index.d.ts +10 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +75 -18
- package/lib/index.js.map +1 -1
- package/lib/keyHandler.d.ts +14 -3
- package/lib/keyHandler.d.ts.map +1 -1
- package/lib/keyHandler.js +61 -32
- package/lib/keyHandler.js.map +1 -1
- package/lib/methodTypes.d.ts +3 -0
- package/lib/methodTypes.d.ts.map +1 -1
- package/lib/nodeElement/folderElement.d.ts +1 -1
- package/lib/nodeElement/folderElement.d.ts.map +1 -1
- package/lib/nodeElement/folderElement.js +4 -4
- package/lib/nodeElement/folderElement.js.map +1 -1
- package/lib/nodeElement/index.d.ts +3 -2
- package/lib/nodeElement/index.d.ts.map +1 -1
- package/lib/nodeElement/index.js +15 -12
- package/lib/nodeElement/index.js.map +1 -1
- package/lib/options.d.ts +13 -0
- package/lib/options.d.ts.map +1 -1
- package/lib/selectNodeHandler.d.ts +3 -0
- package/lib/selectNodeHandler.d.ts.map +1 -1
- package/lib/selectNodeHandler.js +54 -22
- package/lib/selectNodeHandler.js.map +1 -1
- package/lib/setDefaultOptions.d.ts.map +1 -1
- package/lib/setDefaultOptions.js +1 -0
- package/lib/setDefaultOptions.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 +19 -19
- package/src/classNames.ts +4 -4
- package/src/dataLoader.ts +6 -9
- package/src/elementsRenderer.ts +42 -24
- package/src/index.ts +83 -24
- package/src/keyHandler.ts +84 -34
- package/src/methodTypes.ts +6 -0
- package/src/nodeElement/folderElement.ts +4 -4
- package/src/nodeElement/index.ts +20 -17
- package/src/options.ts +13 -0
- package/src/selectNodeHandler.ts +58 -25
- package/src/setDefaultOptions.ts +1 -0
- package/src/version.ts +1 -1
- package/tree_element.css +16 -0
- package/tree_element.debug.js +256 -120
- package/tree_element.debug.js.map +1 -1
- package/tree_element.js +2 -2
- package/tree_element.js.map +1 -1
package/lib/keyHandler.js
CHANGED
|
@@ -1,21 +1,34 @@
|
|
|
1
|
+
/* The keys move from the selected node and select the node they move to.
|
|
2
|
+
* With multiSelect they move from the focused node and only move the focus;
|
|
3
|
+
* Space adds the focused node to the selection or removes it.
|
|
4
|
+
*/
|
|
5
|
+
|
|
1
6
|
class KeyHandler {
|
|
2
7
|
constructor({
|
|
3
8
|
_closeNode: closeNode,
|
|
9
|
+
_focusNode: focusNode,
|
|
10
|
+
_getActiveNode: getActiveNode,
|
|
4
11
|
_getFocusedNode: getFocusedNode,
|
|
5
12
|
_getSelectedNode: getSelectedNode,
|
|
6
13
|
_getTree: getTree,
|
|
7
14
|
_keyboardSupport: keyboardSupport,
|
|
15
|
+
_multiSelect: multiSelect,
|
|
8
16
|
_openNode: openNode,
|
|
9
17
|
_selectNode: selectNode,
|
|
18
|
+
_toggleNodeInSelection: toggleNodeInSelection,
|
|
10
19
|
_triggerEvent: triggerEvent
|
|
11
20
|
}) {
|
|
12
21
|
this._closeNode = closeNode;
|
|
22
|
+
this._focusNode = focusNode;
|
|
23
|
+
this._getActiveNode = getActiveNode;
|
|
13
24
|
this._getFocusedNode = getFocusedNode;
|
|
14
25
|
this._getSelectedNode = getSelectedNode;
|
|
15
26
|
this._getTree = getTree;
|
|
16
27
|
this._keyboardSupport = keyboardSupport;
|
|
28
|
+
this._multiSelect = multiSelect;
|
|
17
29
|
this._openNode = openNode;
|
|
18
30
|
this._originalSelectNode = selectNode;
|
|
31
|
+
this._toggleNodeInSelection = toggleNodeInSelection;
|
|
19
32
|
this._triggerEvent = triggerEvent;
|
|
20
33
|
if (keyboardSupport) {
|
|
21
34
|
document.addEventListener("keydown", this._handleKeyDown);
|
|
@@ -27,10 +40,10 @@ class KeyHandler {
|
|
|
27
40
|
}
|
|
28
41
|
}
|
|
29
42
|
_moveDown() {
|
|
30
|
-
return this.
|
|
43
|
+
return this._goToNode(this._getCurrentNode()?.getNextVisibleNode());
|
|
31
44
|
}
|
|
32
45
|
_moveUp() {
|
|
33
|
-
return this.
|
|
46
|
+
return this._goToNode(this._getCurrentNode()?.getPreviousVisibleNode());
|
|
34
47
|
}
|
|
35
48
|
|
|
36
49
|
// Activate the node, for example to open its edit page.
|
|
@@ -41,6 +54,26 @@ class KeyHandler {
|
|
|
41
54
|
});
|
|
42
55
|
return true;
|
|
43
56
|
}
|
|
57
|
+
|
|
58
|
+
// No node is selected. These keys select the focused node, which is
|
|
59
|
+
// usually the first node, see TreeElement.updateTabStop.
|
|
60
|
+
_getCurrentNode() {
|
|
61
|
+
return this._multiSelect ? this._getActiveNode() : this._getSelectedNode();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
// Move to the node: select it, or with multiSelect focus it.
|
|
65
|
+
// Result: there was a node to move to.
|
|
66
|
+
_goToNode(node) {
|
|
67
|
+
if (!node) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
if (this._multiSelect) {
|
|
71
|
+
this._focusNode(node);
|
|
72
|
+
} else {
|
|
73
|
+
this._originalSelectNode(node);
|
|
74
|
+
}
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
44
77
|
_handleArrowKey(key) {
|
|
45
78
|
switch (key) {
|
|
46
79
|
case "ArrowDown":
|
|
@@ -65,49 +98,53 @@ class KeyHandler {
|
|
|
65
98
|
}
|
|
66
99
|
}
|
|
67
100
|
}
|
|
101
|
+
_handleKey(key, focusedNode) {
|
|
102
|
+
return this._getCurrentNode() ? this._handleArrowKey(key) : this._handleKeyWithoutSelection(key, focusedNode);
|
|
103
|
+
}
|
|
68
104
|
_handleKeyDown = e => {
|
|
69
105
|
let focusedNode = this._getFocusedNode();
|
|
70
106
|
if (!focusedNode) {
|
|
71
107
|
return;
|
|
72
108
|
}
|
|
73
109
|
let isKeyHandled;
|
|
74
|
-
let selectedNode = this._getSelectedNode();
|
|
75
110
|
switch (e.key) {
|
|
111
|
+
case " ":
|
|
112
|
+
{
|
|
113
|
+
isKeyHandled = this._multiSelect ? this._toggle(focusedNode) : this._handleKey(e.key, focusedNode);
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
76
116
|
case "End":
|
|
77
117
|
{
|
|
78
|
-
isKeyHandled = this.
|
|
118
|
+
isKeyHandled = this._goToNode(this._getTree()?.getLastChild());
|
|
79
119
|
break;
|
|
80
120
|
}
|
|
81
121
|
case "Enter":
|
|
82
122
|
{
|
|
83
123
|
// Without a selected node, activate the focused node
|
|
84
|
-
isKeyHandled = this._activate(
|
|
124
|
+
isKeyHandled = this._activate(this._multiSelect ? focusedNode : this._getSelectedNode() ?? focusedNode, e);
|
|
85
125
|
break;
|
|
86
126
|
}
|
|
87
127
|
case "Home":
|
|
88
128
|
{
|
|
89
|
-
isKeyHandled = this.
|
|
129
|
+
isKeyHandled = this._goToNode(this._getTree()?.children[0]);
|
|
90
130
|
break;
|
|
91
131
|
}
|
|
92
132
|
default:
|
|
93
133
|
{
|
|
94
|
-
isKeyHandled =
|
|
134
|
+
isKeyHandled = this._handleKey(e.key, focusedNode);
|
|
95
135
|
}
|
|
96
136
|
}
|
|
97
137
|
if (isKeyHandled) {
|
|
98
138
|
e.preventDefault();
|
|
99
139
|
}
|
|
100
140
|
};
|
|
101
|
-
|
|
102
|
-
// No node is selected. These keys select the focused node, which is
|
|
103
|
-
// usually the first node, see TreeElement.updateTabStop.
|
|
104
141
|
_handleKeyWithoutSelection(key, focusedNode) {
|
|
105
142
|
switch (key) {
|
|
106
143
|
case " ":
|
|
107
144
|
case "ArrowDown":
|
|
108
145
|
case "ArrowRight":
|
|
109
146
|
{
|
|
110
|
-
return this.
|
|
147
|
+
return this._goToNode(focusedNode);
|
|
111
148
|
}
|
|
112
149
|
default:
|
|
113
150
|
{
|
|
@@ -116,45 +153,37 @@ class KeyHandler {
|
|
|
116
153
|
}
|
|
117
154
|
}
|
|
118
155
|
_moveLeft() {
|
|
119
|
-
let
|
|
156
|
+
let currentNode = this._getCurrentNode();
|
|
120
157
|
|
|
121
158
|
/* istanbul ignore if */
|
|
122
|
-
if (!
|
|
159
|
+
if (!currentNode) {
|
|
123
160
|
return false;
|
|
124
161
|
}
|
|
125
|
-
if (
|
|
162
|
+
if (currentNode.isFolder() && currentNode.is_open) {
|
|
126
163
|
// Left on an open node closes the node
|
|
127
|
-
void this._closeNode(
|
|
164
|
+
void this._closeNode(currentNode);
|
|
128
165
|
return true;
|
|
129
166
|
}
|
|
130
167
|
// Left on a closed or end node moves focus to the node's parent
|
|
131
|
-
return this.
|
|
168
|
+
return this._goToNode(currentNode.getParent());
|
|
132
169
|
}
|
|
133
170
|
_moveRight() {
|
|
134
|
-
let
|
|
135
|
-
if (
|
|
171
|
+
let currentNode = this._getCurrentNode();
|
|
172
|
+
if (currentNode?.isFolder()) {
|
|
136
173
|
// folder node
|
|
137
|
-
if (
|
|
174
|
+
if (currentNode.is_open) {
|
|
138
175
|
// Right moves to the first child of an open node
|
|
139
|
-
return this.
|
|
176
|
+
return this._goToNode(currentNode.getNextVisibleNode());
|
|
140
177
|
}
|
|
141
178
|
// Right expands a closed node
|
|
142
|
-
void this._openNode(
|
|
179
|
+
void this._openNode(currentNode);
|
|
143
180
|
return true;
|
|
144
181
|
}
|
|
145
182
|
return false;
|
|
146
183
|
}
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
* Result: a different node was selected.
|
|
151
|
-
*/
|
|
152
|
-
_selectNode(node) {
|
|
153
|
-
if (node) {
|
|
154
|
-
this._originalSelectNode(node);
|
|
155
|
-
return true;
|
|
156
|
-
}
|
|
157
|
-
return false;
|
|
184
|
+
_toggle(node) {
|
|
185
|
+
this._toggleNodeInSelection(node);
|
|
186
|
+
return true;
|
|
158
187
|
}
|
|
159
188
|
}
|
|
160
189
|
|
package/lib/keyHandler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyHandler.js","sources":["../src/keyHandler.ts"],"sourcesContent":["import type {\n CloseNode,\n GetFocusedNode,\n GetSelectedNode,\n GetTree,\n OpenNode,\n SelectNode,\n TriggerEvent,\n} from \"./methodTypes\";\nimport type { Node } from \"./node\";\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getFocusedNode: GetFocusedNode;\n getSelectedNode: GetSelectedNode;\n getTree: GetTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n triggerEvent: TriggerEvent;\n}\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private getFocusedNode: GetFocusedNode;\n private getSelectedNode: GetSelectedNode;\n private getTree: GetTree;\n\n private keyboardSupport: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n private triggerEvent: TriggerEvent;\n\n constructor({\n closeNode,\n getFocusedNode,\n getSelectedNode,\n getTree,\n keyboardSupport,\n openNode,\n selectNode,\n triggerEvent,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.getFocusedNode = getFocusedNode;\n this.getSelectedNode = getSelectedNode;\n this.getTree = getTree;\n this.keyboardSupport = keyboardSupport;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n this.triggerEvent = triggerEvent;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public deinit(): void {\n if (this.keyboardSupport) {\n document.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public moveDown(): boolean {\n return this.selectNode(this.getSelectedNode()?.getNextVisibleNode());\n }\n\n public moveUp(): boolean {\n return this.selectNode(this.getSelectedNode()?.getPreviousVisibleNode());\n }\n\n // Activate the node, for example to open its edit page.\n private activate(node: Node, originalEvent: KeyboardEvent): boolean {\n this.triggerEvent(\"tree.activate\", { node, originalEvent });\n return true;\n }\n\n private handleArrowKey(key: string): boolean {\n switch (key) {\n case \"ArrowDown\": {\n return this.moveDown();\n }\n\n case \"ArrowLeft\": {\n return this.moveLeft();\n }\n\n case \"ArrowRight\": {\n return this.moveRight();\n }\n\n case \"ArrowUp\": {\n return this.moveUp();\n }\n\n default: {\n return false;\n }\n }\n }\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n const focusedNode = this.getFocusedNode();\n\n if (!focusedNode) {\n return;\n }\n\n let isKeyHandled: boolean;\n\n const selectedNode = this.getSelectedNode();\n\n switch (e.key) {\n case \"End\": {\n isKeyHandled = this.selectNode(this.getTree()?.getLastChild());\n break;\n }\n\n case \"Enter\": {\n // Without a selected node, activate the focused node\n isKeyHandled = this.activate(selectedNode ?? focusedNode, e);\n break;\n }\n\n case \"Home\": {\n isKeyHandled = this.selectNode(this.getTree()?.children[0]);\n break;\n }\n\n default: {\n isKeyHandled = selectedNode\n ? this.handleArrowKey(e.key)\n : this.handleKeyWithoutSelection(e.key, focusedNode);\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n // No node is selected. These keys select the focused node, which is\n // usually the first node, see TreeElement.updateTabStop.\n private handleKeyWithoutSelection(key: string, focusedNode: Node): boolean {\n switch (key) {\n case \" \":\n case \"ArrowDown\":\n case \"ArrowRight\": {\n return this.selectNode(focusedNode);\n }\n\n default: {\n return false;\n }\n }\n }\n\n private moveLeft(): boolean {\n const selectedNode = this.getSelectedNode();\n\n /* istanbul ignore if */\n if (!selectedNode) {\n return false;\n }\n\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n void this.closeNode(selectedNode);\n return true;\n }\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n\n private moveRight(): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (selectedNode?.isFolder()) {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextVisibleNode());\n }\n // Right expands a closed node\n void this.openNode(selectedNode);\n return true;\n }\n return false;\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private selectNode(node?: Node | null): boolean {\n if (node) {\n this.originalSelectNode(node);\n\n return true;\n }\n return false;\n }\n}\n"],"names":["closeNode","getFocusedNode","getSelectedNode","getTree","keyboardSupport","openNode","originalSelectNode","triggerEvent","handleKeyDown","deinit","moveDown","selectNode","moveUp","activate","handleArrowKey","moveLeft","moveRight","handleKeyWithoutSelection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keyHandler.js","sources":["../src/keyHandler.ts"],"sourcesContent":["import type {\n CloseNode,\n FocusNode,\n GetActiveNode,\n GetFocusedNode,\n GetSelectedNode,\n GetTree,\n OpenNode,\n SelectNode,\n ToggleNodeInSelection,\n TriggerEvent,\n} from \"./methodTypes\";\nimport type { Node } from \"./node\";\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n focusNode: FocusNode;\n getActiveNode: GetActiveNode;\n getFocusedNode: GetFocusedNode;\n getSelectedNode: GetSelectedNode;\n getTree: GetTree;\n keyboardSupport: boolean;\n multiSelect: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n toggleNodeInSelection: ToggleNodeInSelection;\n triggerEvent: TriggerEvent;\n}\n\n/* The keys move from the selected node and select the node they move to.\n * With multiSelect they move from the focused node and only move the focus;\n * Space adds the focused node to the selection or removes it.\n */\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private focusNode: FocusNode;\n private getActiveNode: GetActiveNode;\n private getFocusedNode: GetFocusedNode;\n private getSelectedNode: GetSelectedNode;\n private getTree: GetTree;\n\n private keyboardSupport: boolean;\n private multiSelect: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n private toggleNodeInSelection: ToggleNodeInSelection;\n private triggerEvent: TriggerEvent;\n\n constructor({\n closeNode,\n focusNode,\n getActiveNode,\n getFocusedNode,\n getSelectedNode,\n getTree,\n keyboardSupport,\n multiSelect,\n openNode,\n selectNode,\n toggleNodeInSelection,\n triggerEvent,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.focusNode = focusNode;\n this.getActiveNode = getActiveNode;\n this.getFocusedNode = getFocusedNode;\n this.getSelectedNode = getSelectedNode;\n this.getTree = getTree;\n this.keyboardSupport = keyboardSupport;\n this.multiSelect = multiSelect;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n this.toggleNodeInSelection = toggleNodeInSelection;\n this.triggerEvent = triggerEvent;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public deinit(): void {\n if (this.keyboardSupport) {\n document.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public moveDown(): boolean {\n return this.goToNode(this.getCurrentNode()?.getNextVisibleNode());\n }\n\n public moveUp(): boolean {\n return this.goToNode(this.getCurrentNode()?.getPreviousVisibleNode());\n }\n\n // Activate the node, for example to open its edit page.\n private activate(node: Node, originalEvent: KeyboardEvent): boolean {\n this.triggerEvent(\"tree.activate\", { node, originalEvent });\n return true;\n }\n\n // No node is selected. These keys select the focused node, which is\n // usually the first node, see TreeElement.updateTabStop.\n private getCurrentNode(): Node | null {\n return this.multiSelect ? this.getActiveNode() : this.getSelectedNode();\n }\n\n // Move to the node: select it, or with multiSelect focus it.\n // Result: there was a node to move to.\n private goToNode(node?: Node | null): boolean {\n if (!node) {\n return false;\n }\n\n if (this.multiSelect) {\n this.focusNode(node);\n } else {\n this.originalSelectNode(node);\n }\n\n return true;\n }\n\n private handleArrowKey(key: string): boolean {\n switch (key) {\n case \"ArrowDown\": {\n return this.moveDown();\n }\n\n case \"ArrowLeft\": {\n return this.moveLeft();\n }\n\n case \"ArrowRight\": {\n return this.moveRight();\n }\n\n case \"ArrowUp\": {\n return this.moveUp();\n }\n\n default: {\n return false;\n }\n }\n }\n\n private handleKey(key: string, focusedNode: Node): boolean {\n return this.getCurrentNode()\n ? this.handleArrowKey(key)\n : this.handleKeyWithoutSelection(key, focusedNode);\n }\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n const focusedNode = this.getFocusedNode();\n\n if (!focusedNode) {\n return;\n }\n\n let isKeyHandled: boolean;\n\n switch (e.key) {\n case \" \": {\n isKeyHandled = this.multiSelect\n ? this.toggle(focusedNode)\n : this.handleKey(e.key, focusedNode);\n break;\n }\n\n case \"End\": {\n isKeyHandled = this.goToNode(this.getTree()?.getLastChild());\n break;\n }\n\n case \"Enter\": {\n // Without a selected node, activate the focused node\n isKeyHandled = this.activate(\n this.multiSelect\n ? focusedNode\n : (this.getSelectedNode() ?? focusedNode),\n e,\n );\n break;\n }\n\n case \"Home\": {\n isKeyHandled = this.goToNode(this.getTree()?.children[0]);\n break;\n }\n\n default: {\n isKeyHandled = this.handleKey(e.key, focusedNode);\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private handleKeyWithoutSelection(key: string, focusedNode: Node): boolean {\n switch (key) {\n case \" \":\n case \"ArrowDown\":\n case \"ArrowRight\": {\n return this.goToNode(focusedNode);\n }\n\n default: {\n return false;\n }\n }\n }\n\n private moveLeft(): boolean {\n const currentNode = this.getCurrentNode();\n\n /* istanbul ignore if */\n if (!currentNode) {\n return false;\n }\n\n if (currentNode.isFolder() && currentNode.is_open) {\n // Left on an open node closes the node\n void this.closeNode(currentNode);\n return true;\n }\n // Left on a closed or end node moves focus to the node's parent\n return this.goToNode(currentNode.getParent());\n }\n\n private moveRight(): boolean {\n const currentNode = this.getCurrentNode();\n\n if (currentNode?.isFolder()) {\n // folder node\n if (currentNode.is_open) {\n // Right moves to the first child of an open node\n return this.goToNode(currentNode.getNextVisibleNode());\n }\n // Right expands a closed node\n void this.openNode(currentNode);\n return true;\n }\n return false;\n }\n\n private toggle(node: Node): boolean {\n this.toggleNodeInSelection(node);\n return true;\n }\n}\n"],"names":["closeNode","focusNode","getActiveNode","getFocusedNode","getSelectedNode","getTree","keyboardSupport","multiSelect","openNode","originalSelectNode","toggleNodeInSelection","triggerEvent","handleKeyDown","deinit","moveDown","goToNode","getCurrentNode","moveUp","activate","handleArrowKey","moveLeft","moveRight","handleKey","handleKeyWithoutSelection","toggle"],"mappings":"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"}
|
package/lib/methodTypes.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import type { Node, NodeData, NodeId } from "./node.js";
|
|
|
3
3
|
import type NodeElement from "./nodeElement/index.js";
|
|
4
4
|
export type AddToSelection = (node: Node) => void;
|
|
5
5
|
export type CloseNode = (node: Node) => Promise<void>;
|
|
6
|
+
export type FocusNode = (node: Node) => void;
|
|
7
|
+
export type GetActiveNode = () => Node | null;
|
|
6
8
|
export type GetFocusedNode = () => Node | null;
|
|
7
9
|
export type GetNodeById = (nodeId: NodeId) => Node | null;
|
|
8
10
|
export type GetNodeElementForNode = (node: Node) => NodeElement;
|
|
@@ -17,5 +19,6 @@ export type OpenParents = (node: Node) => void;
|
|
|
17
19
|
export type RefreshElements = (fromNode: Node | null) => void;
|
|
18
20
|
export type RemoveFromSelection = (node: Node) => void;
|
|
19
21
|
export type SelectNode = (node: Node) => void;
|
|
22
|
+
export type ToggleNodeInSelection = (node: Node) => void;
|
|
20
23
|
export type TriggerEvent = <Name extends TreeEventName>(eventName: Name, values?: TreeEvents[Name]) => boolean;
|
|
21
24
|
//# sourceMappingURL=methodTypes.d.ts.map
|
package/lib/methodTypes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"methodTypes.d.ts","sourceRoot":"","sources":["../src/methodTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAElD,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAE/C,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,WAAW,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;AAEzC,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAEhD,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,EAAE,CAAC;AAE5C,MAAM,MAAM,OAAO,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;AAErE,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtE,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;AAE9D,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"methodTypes.d.ts","sourceRoot":"","sources":["../src/methodTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAElD,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAE7C,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAE/C,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,WAAW,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;AAEzC,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAEhD,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,EAAE,CAAC;AAE5C,MAAM,MAAM,OAAO,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;AAErE,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtE,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;AAE9D,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAE9C,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAGzD,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,SAAS,aAAa,EACpD,SAAS,EAAE,IAAI,EACf,MAAM,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KACtB,OAAO,CAAC"}
|
|
@@ -15,7 +15,7 @@ declare class FolderElement extends NodeElement {
|
|
|
15
15
|
private openedIconElement?;
|
|
16
16
|
private renderChildren;
|
|
17
17
|
private triggerEvent;
|
|
18
|
-
constructor({ classNames, closedIconElement, getScrollLeft, node, openedIconElement, renderChildren, tabIndex, treeElement, triggerEvent, }: FolderElementParams);
|
|
18
|
+
constructor({ classNames, closedIconElement, getScrollLeft, multiSelect, node, openedIconElement, renderChildren, tabIndex, treeElement, triggerEvent, }: FolderElementParams);
|
|
19
19
|
close(slide: boolean, animationSpeed: AnimationSpeed): Promise<void>;
|
|
20
20
|
open(slide: boolean, animationSpeed: AnimationSpeed): Promise<void>;
|
|
21
21
|
protected mustShowBorderDropHint(position: Position): boolean;
|
|
@@ -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;
|
|
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,WAAW,EACX,IAAI,EACJ,iBAAiB,EACjB,cAAc,EACd,QAAQ,EACR,WAAW,EACX,YAAY,GACb,EAAE,mBAAmB;IAgBT,KAAK,CAChB,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC;IA0CH,IAAI,CACf,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC;IA4ChB,SAAS,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAI7D,OAAO,CAAC,SAAS;CAKlB;AAED,eAAe,aAAa,CAAC"}
|
|
@@ -6,6 +6,7 @@ class FolderElement extends NodeElement {
|
|
|
6
6
|
_classNames: classNames,
|
|
7
7
|
_closedIconElement: closedIconElement,
|
|
8
8
|
_getScrollLeft: getScrollLeft,
|
|
9
|
+
_multiSelect: multiSelect,
|
|
9
10
|
_node: node,
|
|
10
11
|
_openedIconElement: openedIconElement,
|
|
11
12
|
_renderChildren: renderChildren,
|
|
@@ -16,6 +17,7 @@ class FolderElement extends NodeElement {
|
|
|
16
17
|
super({
|
|
17
18
|
_classNames: classNames,
|
|
18
19
|
_getScrollLeft: getScrollLeft,
|
|
20
|
+
_multiSelect: multiSelect,
|
|
19
21
|
_node: node,
|
|
20
22
|
_tabIndex: tabIndex,
|
|
21
23
|
_treeElement: treeElement
|
|
@@ -53,8 +55,7 @@ class FolderElement extends NodeElement {
|
|
|
53
55
|
}
|
|
54
56
|
}
|
|
55
57
|
this._element.classList.add(this._classNames.closed);
|
|
56
|
-
|
|
57
|
-
titleSpan.setAttribute("aria-expanded", "false");
|
|
58
|
+
this._element.setAttribute("aria-expanded", "false");
|
|
58
59
|
this._triggerEvent("tree.close", {
|
|
59
60
|
node: this._node
|
|
60
61
|
});
|
|
@@ -90,8 +91,7 @@ class FolderElement extends NodeElement {
|
|
|
90
91
|
}
|
|
91
92
|
}
|
|
92
93
|
this._element.classList.remove(this._classNames.closed);
|
|
93
|
-
|
|
94
|
-
titleSpan.setAttribute("aria-expanded", "true");
|
|
94
|
+
this._element.setAttribute("aria-expanded", "true");
|
|
95
95
|
this._triggerEvent("tree.open", {
|
|
96
96
|
node: this._node
|
|
97
97
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folderElement.js","sources":["../../src/nodeElement/folderElement.ts"],"sourcesContent":["import type { AnimationSpeed } from \"../animation\";\nimport type { TriggerEvent } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\nimport type { NodeElementParams } from \"./index\";\n\nimport { slideDown, slideUp } from \"../animation\";\nimport NodeElement from \"./index\";\n\nexport type RenderChildren = (node: Node) => HTMLUListElement | null;\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: globalThis.Node;\n openedIconElement?: globalThis.Node;\n renderChildren: RenderChildren;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: globalThis.Node;\n private openedIconElement?: globalThis.Node;\n private renderChildren: RenderChildren;\n private triggerEvent: TriggerEvent;\n\n constructor({\n classNames,\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n renderChildren,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n classNames,\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.renderChildren = renderChildren;\n this.triggerEvent = triggerEvent;\n }\n\n public async close(\n slide: boolean,\n animationSpeed: AnimationSpeed,\n ): Promise<void> {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n if (!this.isRendered()) {\n this.triggerEvent(\"tree.close\", { node: this.node });\n return;\n }\n\n const button = this.getButton();\n button.classList.add(this.classNames.closed);\n button.replaceChildren();\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.append(icon);\n }\n\n const ul = this.getUl();\n\n if (ul) {\n if (slide) {\n await slideUp(ul, animationSpeed);\n } else {\n ul.style.display = \"none\";\n }\n }\n\n this.element.classList.add(this.classNames.closed);\n\n
|
|
1
|
+
{"version":3,"file":"folderElement.js","sources":["../../src/nodeElement/folderElement.ts"],"sourcesContent":["import type { AnimationSpeed } from \"../animation\";\nimport type { TriggerEvent } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\nimport type { NodeElementParams } from \"./index\";\n\nimport { slideDown, slideUp } from \"../animation\";\nimport NodeElement from \"./index\";\n\nexport type RenderChildren = (node: Node) => HTMLUListElement | null;\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: globalThis.Node;\n openedIconElement?: globalThis.Node;\n renderChildren: RenderChildren;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: globalThis.Node;\n private openedIconElement?: globalThis.Node;\n private renderChildren: RenderChildren;\n private triggerEvent: TriggerEvent;\n\n constructor({\n classNames,\n closedIconElement,\n getScrollLeft,\n multiSelect,\n node,\n openedIconElement,\n renderChildren,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n classNames,\n getScrollLeft,\n multiSelect,\n node,\n tabIndex,\n treeElement,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.renderChildren = renderChildren;\n this.triggerEvent = triggerEvent;\n }\n\n public async close(\n slide: boolean,\n animationSpeed: AnimationSpeed,\n ): Promise<void> {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n if (!this.isRendered()) {\n this.triggerEvent(\"tree.close\", { node: this.node });\n return;\n }\n\n const button = this.getButton();\n button.classList.add(this.classNames.closed);\n button.replaceChildren();\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.append(icon);\n }\n\n const ul = this.getUl();\n\n if (ul) {\n if (slide) {\n await slideUp(ul, animationSpeed);\n } else {\n ul.style.display = \"none\";\n }\n }\n\n this.element.classList.add(this.classNames.closed);\n\n this.element.setAttribute(\"aria-expanded\", \"false\");\n\n this.triggerEvent(\"tree.close\", {\n node: this.node,\n });\n }\n\n public async open(\n slide: boolean,\n animationSpeed: AnimationSpeed,\n ): Promise<void> {\n if (this.node.is_open) {\n return;\n }\n\n this.node.is_open = true;\n\n if (!this.isRendered()) {\n // The folder is rendered open when its parent is opened\n this.triggerEvent(\"tree.open\", { node: this.node });\n return;\n }\n\n const button = this.getButton();\n button.classList.remove(this.classNames.closed);\n button.replaceChildren();\n\n const openedIconElement = this.openedIconElement;\n\n if (openedIconElement) {\n const icon = openedIconElement.cloneNode(true);\n button.append(icon);\n }\n\n // The children are rendered the first time the folder is opened\n const ul = this.getUl() ?? this.renderChildren(this.node);\n\n if (ul) {\n if (slide) {\n await slideDown(ul, animationSpeed);\n } else {\n ul.style.display = \"block\";\n }\n }\n\n this.element.classList.remove(this.classNames.closed);\n\n this.element.setAttribute(\"aria-expanded\", \"true\");\n\n this.triggerEvent(\"tree.open\", {\n node: this.node,\n });\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && position === \"inside\";\n }\n\n private getButton(): HTMLElement {\n return this.element.querySelector(\n `:scope > .${this.classNames.element} > .${this.classNames.toggler}`,\n ) as HTMLElement;\n }\n}\n\nexport default FolderElement;\n"],"names":["closedIconElement","openedIconElement","renderChildren","triggerEvent","close","node","isRendered","getButton","classNames","getUl","element","open","mustShowBorderDropHint"],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ import type { Node, Position } from "../node.js";
|
|
|
5
5
|
export interface NodeElementParams {
|
|
6
6
|
classNames: ClassNames;
|
|
7
7
|
getScrollLeft: GetScrollLeft;
|
|
8
|
+
multiSelect?: boolean;
|
|
8
9
|
node: Node;
|
|
9
10
|
tabIndex?: number;
|
|
10
11
|
treeElement: HTMLElement;
|
|
@@ -14,13 +15,13 @@ declare class NodeElement {
|
|
|
14
15
|
node: Node;
|
|
15
16
|
protected classNames: ClassNames;
|
|
16
17
|
private getScrollLeft;
|
|
18
|
+
private multiSelect;
|
|
17
19
|
private tabIndex?;
|
|
18
20
|
private treeElement;
|
|
19
|
-
constructor({ classNames, getScrollLeft, node, tabIndex, treeElement, }: NodeElementParams);
|
|
21
|
+
constructor({ classNames, getScrollLeft, multiSelect, node, tabIndex, treeElement, }: NodeElementParams);
|
|
20
22
|
addDropHint(position: Position): DropHint;
|
|
21
23
|
deselect(): void;
|
|
22
24
|
select(mustSetFocus: boolean): void;
|
|
23
|
-
protected getTitleSpan(): HTMLSpanElement;
|
|
24
25
|
protected getUl(): HTMLUListElement | null;
|
|
25
26
|
protected isRendered(): boolean;
|
|
26
27
|
protected mustShowBorderDropHint(position: Position): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nodeElement/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAK9C,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/nodeElement/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAK9C,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,UAAU,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;IAI7B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,cAAM,WAAW;IACR,OAAO,EAAE,WAAW,CAAC;IACrB,IAAI,EAAE,IAAI,CAAC;IAClB,SAAS,CAAC,UAAU,EAAE,UAAU,CAAC;IACjC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAU;IAC7B,OAAO,CAAC,QAAQ,CAAC,CAAS;IAC1B,OAAO,CAAC,WAAW,CAAc;gBAErB,EACV,UAAU,EACV,aAAa,EACb,WAAmB,EACnB,IAAI,EACJ,QAAQ,EACR,WAAW,GACZ,EAAE,iBAAiB;IAYb,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,QAAQ;IAMzC,QAAQ,IAAI,IAAI;IAuBhB,MAAM,CAAC,YAAY,EAAE,OAAO,GAAG,IAAI;IAoB1C,SAAS,CAAC,KAAK,IAAI,gBAAgB,GAAG,IAAI;IAO1C,SAAS,CAAC,UAAU,IAAI,OAAO;IAI/B,SAAS,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;CAG9D;AAED,eAAe,WAAW,CAAC"}
|
package/lib/nodeElement/index.js
CHANGED
|
@@ -5,12 +5,14 @@ class NodeElement {
|
|
|
5
5
|
constructor({
|
|
6
6
|
_classNames: classNames,
|
|
7
7
|
_getScrollLeft: getScrollLeft,
|
|
8
|
+
_multiSelect: multiSelect = false,
|
|
8
9
|
_node: node,
|
|
9
10
|
_tabIndex: tabIndex,
|
|
10
11
|
_treeElement: treeElement
|
|
11
12
|
}) {
|
|
12
13
|
this._classNames = classNames;
|
|
13
14
|
this._getScrollLeft = getScrollLeft;
|
|
15
|
+
this._multiSelect = multiSelect;
|
|
14
16
|
this._node = node;
|
|
15
17
|
this._tabIndex = tabIndex;
|
|
16
18
|
this._treeElement = treeElement;
|
|
@@ -26,35 +28,36 @@ class NodeElement {
|
|
|
26
28
|
return;
|
|
27
29
|
}
|
|
28
30
|
this._element.classList.remove(this._classNames.selected);
|
|
29
|
-
|
|
31
|
+
|
|
32
|
+
// Only a multiselect tree marks the nodes that are not selected
|
|
33
|
+
if (this._multiSelect) {
|
|
34
|
+
this._element.setAttribute("aria-selected", "false");
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
this._element.removeAttribute("aria-selected");
|
|
30
38
|
|
|
31
39
|
// Check for null or undefined
|
|
32
40
|
if (this._tabIndex != null) {
|
|
33
|
-
|
|
41
|
+
this._element.setAttribute("tabindex", "-1");
|
|
34
42
|
}
|
|
35
|
-
|
|
36
|
-
titleSpan.blur();
|
|
43
|
+
this._element.blur();
|
|
37
44
|
}
|
|
38
45
|
_select(mustSetFocus) {
|
|
39
46
|
if (!this._isRendered()) {
|
|
40
47
|
return;
|
|
41
48
|
}
|
|
42
49
|
this._element.classList.add(this._classNames.selected);
|
|
43
|
-
|
|
50
|
+
this._element.setAttribute("aria-selected", "true");
|
|
44
51
|
let tabIndex = this._tabIndex;
|
|
45
52
|
|
|
46
53
|
// Check for null or undefined
|
|
47
|
-
if (tabIndex != null) {
|
|
48
|
-
|
|
54
|
+
if (tabIndex != null && !this._multiSelect) {
|
|
55
|
+
this._element.setAttribute("tabindex", tabIndex.toString());
|
|
49
56
|
}
|
|
50
|
-
titleSpan.setAttribute("aria-selected", "true");
|
|
51
57
|
if (mustSetFocus) {
|
|
52
|
-
|
|
58
|
+
this._element.focus();
|
|
53
59
|
}
|
|
54
60
|
}
|
|
55
|
-
_getTitleSpan() {
|
|
56
|
-
return this._element.querySelector(`:scope > .${this._classNames.element} > span.${this._classNames.title}`);
|
|
57
|
-
}
|
|
58
61
|
_getUl() {
|
|
59
62
|
return this._element.querySelector(":scope > ul");
|
|
60
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../src/nodeElement/index.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { GetScrollLeft } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\n\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n classNames: ClassNames;\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n public element: HTMLElement;\n public node: Node;\n protected classNames: ClassNames;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private treeElement: HTMLElement;\n\n constructor({\n classNames,\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n }: NodeElementParams) {\n this.classNames = classNames;\n this.getScrollLeft = getScrollLeft;\n this.node = node;\n this.tabIndex = tabIndex;\n this.treeElement = treeElement;\n\n // The root node has no element of its own; it uses the tree element.\n this.element = node.element ?? this.treeElement;\n }\n\n public addDropHint(position: Position): DropHint {\n return this.mustShowBorderDropHint(position)\n ? new BorderDropHint(this.element, this.getScrollLeft(), this.classNames)\n : new GhostDropHint(this.node, this.element, position, this.classNames);\n }\n\n public deselect(): void {\n if (!this.isRendered()) {\n return;\n }\n\n this.element.classList.remove(this.classNames.selected);\n\n
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/nodeElement/index.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\nimport type { DropHint } from \"../dragAndDropHandler/types\";\nimport type { GetScrollLeft } from \"../methodTypes\";\nimport type { Node, Position } from \"../node\";\n\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n classNames: ClassNames;\n getScrollLeft: GetScrollLeft;\n /* With multiSelect the focus moves independently of the selection, so\n * selecting doesn't change the tabindex or the focus.\n */\n multiSelect?: boolean;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n public element: HTMLElement;\n public node: Node;\n protected classNames: ClassNames;\n private getScrollLeft: GetScrollLeft;\n private multiSelect: boolean;\n private tabIndex?: number;\n private treeElement: HTMLElement;\n\n constructor({\n classNames,\n getScrollLeft,\n multiSelect = false,\n node,\n tabIndex,\n treeElement,\n }: NodeElementParams) {\n this.classNames = classNames;\n this.getScrollLeft = getScrollLeft;\n this.multiSelect = multiSelect;\n this.node = node;\n this.tabIndex = tabIndex;\n this.treeElement = treeElement;\n\n // The root node has no element of its own; it uses the tree element.\n this.element = node.element ?? this.treeElement;\n }\n\n public addDropHint(position: Position): DropHint {\n return this.mustShowBorderDropHint(position)\n ? new BorderDropHint(this.element, this.getScrollLeft(), this.classNames)\n : new GhostDropHint(this.node, this.element, position, this.classNames);\n }\n\n public deselect(): void {\n if (!this.isRendered()) {\n return;\n }\n\n this.element.classList.remove(this.classNames.selected);\n\n // Only a multiselect tree marks the nodes that are not selected\n if (this.multiSelect) {\n this.element.setAttribute(\"aria-selected\", \"false\");\n return;\n }\n\n this.element.removeAttribute(\"aria-selected\");\n\n // Check for null or undefined\n if (this.tabIndex != null) {\n this.element.setAttribute(\"tabindex\", \"-1\");\n }\n\n this.element.blur();\n }\n\n public select(mustSetFocus: boolean): void {\n if (!this.isRendered()) {\n return;\n }\n\n this.element.classList.add(this.classNames.selected);\n this.element.setAttribute(\"aria-selected\", \"true\");\n\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null && !this.multiSelect) {\n this.element.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n if (mustSetFocus) {\n this.element.focus();\n }\n }\n\n protected getUl(): HTMLUListElement | null {\n return this.element.querySelector(\":scope > ul\");\n }\n\n /* A node inside a closed folder is not rendered. Its selected and open\n * state is applied when it is rendered.\n */\n protected isRendered(): boolean {\n return Boolean(this.node.element);\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === \"inside\";\n }\n}\n\nexport default NodeElement;\n"],"names":["classNames","getScrollLeft","multiSelect","node","tabIndex","treeElement","element","addDropHint","mustShowBorderDropHint","deselect","isRendered","select","getUl"],"mappings":"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"}
|
package/lib/options.d.ts
CHANGED
|
@@ -131,6 +131,19 @@ export interface TreeElementOptions {
|
|
|
131
131
|
* @group Selection
|
|
132
132
|
*/
|
|
133
133
|
keyboardSupport: boolean;
|
|
134
|
+
/**
|
|
135
|
+
* Let the user select multiple nodes: a click adds a node to the
|
|
136
|
+
* selection, or removes it when it is selected. The arrow keys move the
|
|
137
|
+
* focus instead of the selection, and `Space` adds the focused node or
|
|
138
|
+
* removes it. See [Selection](/guide/selection#multiple-nodes).
|
|
139
|
+
*
|
|
140
|
+
* Set it in the constructor; changing it with `setOption` is not
|
|
141
|
+
* supported.
|
|
142
|
+
*
|
|
143
|
+
* @defaultValue `false`
|
|
144
|
+
* @group Selection
|
|
145
|
+
*/
|
|
146
|
+
multiSelect: boolean;
|
|
134
147
|
/**
|
|
135
148
|
* The class used to create nodes. Subclass [`Node`](/reference/node) to
|
|
136
149
|
* add your own methods. The `Node` class is not exposed on the global
|
package/lib/options.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"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"}
|
|
@@ -35,6 +35,9 @@ export default class SelectNodeHandler {
|
|
|
35
35
|
isNodeSelected(node: Node): boolean;
|
|
36
36
|
removeFromSelection(node: Node, includeChildren?: boolean): void;
|
|
37
37
|
selectSingleNode(node: Node, optionsParam?: SelectNodeOptions): void;
|
|
38
|
+
toggleNodeInSelection(node: Node, mustSetFocus?: boolean): void;
|
|
39
|
+
private canSelect;
|
|
40
|
+
private deselectNode;
|
|
38
41
|
}
|
|
39
42
|
export {};
|
|
40
43
|
//# sourceMappingURL=selectNodeHandler.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectNodeHandler.d.ts","sourceRoot":"","sources":["../src/selectNodeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,2BAA2B;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,kBAAkB,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;IACtD,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,kBAAkB,CAAc;IACxC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAa;gBAEtB,EACV,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,GACd,EAAE,2BAA2B;IAavB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQhC,KAAK,IAAI,IAAI;IAKb,eAAe,IAAI,IAAI,GAAG,IAAI;IAM9B,gBAAgB,IAAI,IAAI,EAAE;IAiB1B,qBAAqB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE;IAmB3C,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAOnC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,UAAQ,GAAG,IAAI;IA6B9D,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,iBAAiB;
|
|
1
|
+
{"version":3,"file":"selectNodeHandler.d.ts","sourceRoot":"","sources":["../src/selectNodeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,2BAA2B;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,kBAAkB,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;IACtD,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,kBAAkB,CAAc;IACxC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAa;gBAEtB,EACV,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,GACd,EAAE,2BAA2B;IAavB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQhC,KAAK,IAAI,IAAI;IAKb,eAAe,IAAI,IAAI,GAAG,IAAI;IAM9B,gBAAgB,IAAI,IAAI,EAAE;IAiB1B,qBAAqB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE;IAmB3C,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAOnC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,UAAQ,GAAG,IAAI;IA6B9D,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,iBAAiB;IA+C7D,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,UAAO,GAAG,IAAI;IAoBnE,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,YAAY;CAIrB"}
|