jqtree 1.7.0 → 1.7.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/.github/workflows/ci.yml +2 -15
  2. package/.github/workflows/codeql-analysis.yml +2 -2
  3. package/.github/workflows/size.yml +24 -0
  4. package/README.md +1 -1
  5. package/bower.json +1 -1
  6. package/docs/Gemfile.lock +39 -40
  7. package/docs/_config.yml +1 -1
  8. package/docs/_entries/03_features.md +1 -1
  9. package/docs/_entries/10_changelog.md +9 -0
  10. package/docs/_entries/16_closedicon.md +17 -3
  11. package/docs/_entries/31_openedicon.md +17 -3
  12. package/docs/package.json +7 -7
  13. package/docs/pnpm-lock.yaml +378 -284
  14. package/docs/static/bower.json +2 -2
  15. package/docs/static/bower_components/fontawesome/css/all.min.css +6 -2
  16. package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.ttf +0 -0
  17. package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  18. package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.ttf +0 -0
  19. package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  20. package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.ttf +0 -0
  21. package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  22. package/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.ttf +0 -0
  23. package/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.woff2 +0 -0
  24. package/docs/static/bower_components/jquery/dist/jquery.js +813 -1102
  25. package/docs/static/bower_components/jquery/dist/jquery.min.js +2 -2
  26. package/docs/static/documentation.css +104 -222
  27. package/docs/static/examples/autoescape.js +15 -17
  28. package/docs/static/examples/autoscroll.js +5 -7
  29. package/docs/static/examples/button-on-right.js +4 -6
  30. package/docs/static/examples/custom_html.js +22 -24
  31. package/docs/static/examples/drag-outside.js +23 -25
  32. package/docs/static/examples/drag_and_drop.js +4 -6
  33. package/docs/static/examples/icon_buttons.js +3 -5
  34. package/docs/static/examples/load_json_data.js +14 -16
  35. package/docs/static/examples/load_json_data_from_server.js +1 -3
  36. package/docs/static/examples/load_on_demand.js +3 -5
  37. package/docs/static/examples/multiple_select.js +19 -21
  38. package/docs/static/examples/right-to-left.js +2 -4
  39. package/docs/static/examples/save_state.js +2 -4
  40. package/docs/tree.jquery.js +3 -3
  41. package/lib/dataLoader.js +3 -3
  42. package/lib/dragAndDropHandler.js +22 -11
  43. package/lib/elementsRenderer.js +26 -16
  44. package/lib/keyHandler.js +1 -1
  45. package/lib/mouse.widget.js +13 -2
  46. package/lib/node.js +17 -14
  47. package/lib/nodeElement.js +20 -13
  48. package/lib/playwright/coverage.js +11 -16
  49. package/lib/playwright/playwright.test.js +37 -58
  50. package/lib/playwright/testUtils.js +27 -44
  51. package/lib/saveStateHandler.js +2 -2
  52. package/lib/scrollHandler.js +8 -4
  53. package/lib/selectNodeHandler.js +2 -2
  54. package/lib/simple.widget.js +5 -3
  55. package/lib/test/jqTree/accessibility.test.js +37 -0
  56. package/lib/test/jqTree/events.test.js +73 -77
  57. package/lib/test/jqTree/loadOnDemand.test.js +5 -4
  58. package/lib/test/jqTree/methods.test.js +2 -2
  59. package/lib/test/jqTree/options.test.js +43 -2
  60. package/lib/test/node.test.js +7 -4
  61. package/lib/tree.jquery.js +5 -5
  62. package/lib/version.js +1 -1
  63. package/package.json +37 -41
  64. package/src/dragAndDropHandler.ts +24 -10
  65. package/src/elementsRenderer.ts +57 -50
  66. package/src/jqtreeOptions.ts +5 -5
  67. package/src/mouse.widget.ts +12 -0
  68. package/src/node.ts +10 -5
  69. package/src/nodeElement.ts +27 -21
  70. package/src/saveStateHandler.ts +1 -1
  71. package/src/scrollHandler.ts +6 -2
  72. package/src/selectNodeHandler.ts +1 -1
  73. package/src/simple.widget.ts +2 -0
  74. package/src/test/.eslintrc +2 -1
  75. package/src/test/jqTree/accessibility.test.ts +25 -0
  76. package/src/test/jqTree/events.test.ts +79 -93
  77. package/src/test/jqTree/loadOnDemand.test.ts +6 -5
  78. package/src/test/jqTree/methods.test.ts +27 -27
  79. package/src/test/jqTree/options.test.ts +61 -8
  80. package/src/test/node.test.ts +6 -4
  81. package/src/test/nodeUtil.test.ts +1 -1
  82. package/src/tree.jquery.d.ts +20 -11
  83. package/src/tree.jquery.ts +1 -1
  84. package/src/version.ts +1 -1
  85. package/tree.jquery.debug.js +143 -97
  86. package/tree.jquery.debug.js.map +1 -1
  87. package/tree.jquery.js +3 -3
  88. package/tree.jquery.js.map +1 -1
  89. package/tsconfig.json +1 -0
  90. package/.tool-versions +0 -1
  91. package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.eot +0 -0
  92. package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.svg +0 -3717
  93. package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff +0 -0
  94. package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.eot +0 -0
  95. package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.svg +0 -801
  96. package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff +0 -0
  97. package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.eot +0 -0
  98. package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.svg +0 -5028
  99. package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff +0 -0
@@ -111,7 +111,7 @@ export default class SaveStateHandler {
111
111
  const state = this.getStateFromStorage();
112
112
 
113
113
  if (state && state.selected_node) {
114
- return state.selected_node[0];
114
+ return state.selected_node[0] || null;
115
115
  } else {
116
116
  return null;
117
117
  }
@@ -23,7 +23,7 @@ export default class ScrollHandler {
23
23
  public scrollToY(top: number): void {
24
24
  this.ensureInit();
25
25
 
26
- if (this.$scrollParent) {
26
+ if (this.$scrollParent && this.$scrollParent[0]) {
27
27
  this.$scrollParent[0].scrollTop = top;
28
28
  } else {
29
29
  const offset = this.treeWidget.$el.offset();
@@ -121,7 +121,7 @@ export default class ScrollHandler {
121
121
  if (
122
122
  $scrollParent &&
123
123
  $scrollParent.length &&
124
- $scrollParent[0].tagName !== "HTML"
124
+ $scrollParent[0]?.tagName !== "HTML"
125
125
  ) {
126
126
  this.$scrollParent = $scrollParent;
127
127
 
@@ -223,6 +223,10 @@ export default class ScrollHandler {
223
223
 
224
224
  const scrollParent = $scrollParent[0];
225
225
 
226
+ if (!scrollParent) {
227
+ return;
228
+ }
229
+
226
230
  const canScrollRight =
227
231
  scrollParent.scrollLeft + scrollParent.clientWidth <
228
232
  scrollParent.scrollWidth;
@@ -16,7 +16,7 @@ export default class SelectNodeHandler {
16
16
  const selectedNodes = this.getSelectedNodes();
17
17
 
18
18
  if (selectedNodes.length) {
19
- return selectedNodes[0];
19
+ return selectedNodes[0] || false;
20
20
  } else {
21
21
  return false;
22
22
  }
@@ -94,6 +94,8 @@ const register = (widgetClass: unknown, widgetName: string): void => {
94
94
  } else {
95
95
  return callFunction(this, functionName, args);
96
96
  }
97
+ } else {
98
+ return undefined;
97
99
  }
98
100
  };
99
101
  };
@@ -11,6 +11,7 @@
11
11
  "jest/prefer-expect-assertions": "off",
12
12
  "jest/prefer-strict-equal": "off",
13
13
  "jest/require-hook": "off",
14
- "jest/require-top-level-describe": "off"
14
+ "jest/require-top-level-describe": "off",
15
+ "testing-library/no-node-access": "off"
15
16
  }
16
17
  }
@@ -0,0 +1,25 @@
1
+ import { axe, toHaveNoViolations } from "jest-axe";
2
+ import "../../tree.jquery";
3
+ import exampleData from "../support/exampleData";
4
+
5
+ expect.extend(toHaveNoViolations);
6
+
7
+ beforeEach(() => {
8
+ $("body").append('<div id="tree1"></div>');
9
+ });
10
+
11
+ afterEach(() => {
12
+ const $tree = $("#tree1");
13
+ $tree.tree("destroy");
14
+ $tree.remove();
15
+ });
16
+
17
+ it("has an accessible ui", async () => {
18
+ const $tree = $("#tree1");
19
+ $tree.tree({
20
+ data: exampleData,
21
+ });
22
+ const element = $tree.get()[0] as HTMLElement;
23
+
24
+ await expect(axe(element)).resolves.toHaveNoViolations();
25
+ });
@@ -1,6 +1,7 @@
1
1
  import getGiven from "givens";
2
2
  import { rest } from "msw";
3
3
  import { setupServer } from "msw/node";
4
+ import { waitFor } from "@testing-library/dom";
4
5
  import "../../tree.jquery";
5
6
  import exampleData from "../support/exampleData";
6
7
  import { titleSpan } from "../support/testUtil";
@@ -41,17 +42,15 @@ describe("tree.click", () => {
41
42
  given.$tree.tree({ data: exampleData });
42
43
  });
43
44
 
44
- it("fires tree.click", () =>
45
- new Promise<void>((done) => {
46
- given.$tree.on("tree.click", (e: unknown) => {
47
- const treeClickEvent = e as ClickNodeEvent;
45
+ it("fires tree.click", () => {
46
+ const onClick = jest.fn();
47
+ given.$tree.on("tree.click", onClick);
48
48
 
49
- expect(treeClickEvent.node).toBe(given.node1);
50
- done();
51
- });
52
-
53
- given.titleSpan.trigger("click");
54
- }));
49
+ given.titleSpan.trigger("click");
50
+ expect(onClick).toHaveBeenCalledWith(
51
+ expect.objectContaining({ node: given.node1 })
52
+ );
53
+ });
55
54
  });
56
55
 
57
56
  describe("tree.contextmenu", () => {
@@ -70,17 +69,15 @@ describe("tree.contextmenu", () => {
70
69
  given.$tree.tree({ data: exampleData });
71
70
  });
72
71
 
73
- it("fires tree.contextmenu", () =>
74
- new Promise<void>((done) => {
75
- given.$tree.on("tree.contextmenu", (e: unknown) => {
76
- const treeClickEvent = e as ClickNodeEvent;
72
+ it("fires tree.contextmenu", () => {
73
+ const onContextMenu = jest.fn();
74
+ given.$tree.on("tree.contextmenu", onContextMenu);
77
75
 
78
- expect(treeClickEvent.node).toBe(given.node1);
79
- done();
80
- });
81
-
82
- given.titleSpan.contextmenu();
83
- }));
76
+ given.titleSpan.trigger("contextmenu");
77
+ expect(onContextMenu).toHaveBeenCalledWith(
78
+ expect.objectContaining({ node: given.node1 })
79
+ );
80
+ });
84
81
  });
85
82
 
86
83
  describe("tree.dblclick", () => {
@@ -99,17 +96,15 @@ describe("tree.dblclick", () => {
99
96
  given.$tree.tree({ data: exampleData });
100
97
  });
101
98
 
102
- it("fires tree.dblclick", () =>
103
- new Promise<void>((done) => {
104
- given.$tree.on("tree.dblclick", (e: unknown) => {
105
- const treeClickEvent = e as ClickNodeEvent;
99
+ it("fires tree.dblclick", () => {
100
+ const onDoubleClick = jest.fn();
101
+ given.$tree.on("tree.dblclick", onDoubleClick);
106
102
 
107
- expect(treeClickEvent.node).toBe(given.node1);
108
- done();
109
- });
110
-
111
- given.titleSpan.trigger("dblclick");
112
- }));
103
+ given.titleSpan.trigger("dblclick");
104
+ expect(onDoubleClick).toHaveBeenCalledWith(
105
+ expect.objectContaining({ node: given.node1 })
106
+ );
107
+ });
113
108
  });
114
109
 
115
110
  describe("tree.init", () => {
@@ -120,22 +115,17 @@ describe("tree.init", () => {
120
115
  given("$tree", () => $("#tree1"));
121
116
 
122
117
  context("with json data", () => {
123
- it("is called", () =>
124
- new Promise<void>((done) => {
125
- given.$tree.on("tree.init", () => {
126
- expect(
127
- given.$tree.tree("getNodeByName", "node2")
128
- ).toMatchObject({
129
- id: 124,
130
- name: "node2",
131
- });
132
- done();
133
- });
134
-
135
- given.$tree.tree({
136
- data: exampleData,
137
- });
138
- }));
118
+ it("is called", () => {
119
+ const onInit = jest.fn();
120
+ given.$tree.on("tree.init", onInit);
121
+
122
+ given.$tree.tree({
123
+ data: exampleData,
124
+ });
125
+
126
+ // eslint-disable-next-line jest/prefer-called-with
127
+ expect(onInit).toHaveBeenCalled();
128
+ });
139
129
  });
140
130
 
141
131
  context("with data loaded from an url", () => {
@@ -147,20 +137,17 @@ describe("tree.init", () => {
147
137
  );
148
138
  });
149
139
 
150
- it("is called", () =>
151
- new Promise<void>((done) => {
152
- given.$tree.on("tree.init", () => {
153
- expect(
154
- given.$tree.tree("getNodeByName", "node2")
155
- ).toMatchObject({
156
- id: 124,
157
- name: "node2",
158
- });
159
- done();
160
- });
161
-
162
- given.$tree.tree({ dataUrl: "/tree/" });
163
- }));
140
+ it("is called", async () => {
141
+ const onInit = jest.fn();
142
+ given.$tree.on("tree.init", onInit);
143
+
144
+ given.$tree.tree({ dataUrl: "/tree/" });
145
+
146
+ await waitFor(() => {
147
+ // eslint-disable-next-line jest/prefer-called-with
148
+ expect(onInit).toHaveBeenCalled();
149
+ });
150
+ });
164
151
  });
165
152
  });
166
153
 
@@ -172,16 +159,15 @@ describe("tree.load_data", () => {
172
159
  given("$tree", () => $("#tree1"));
173
160
 
174
161
  context("when the tree is initialized with data", () => {
175
- it("fires tree.load_data", () =>
176
- new Promise<void>((resolve) => {
177
- given.$tree.on("tree.load_data", (e: any) => {
178
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
179
- expect(e.tree_data).toEqual(exampleData);
180
- resolve();
181
- });
182
-
183
- given.$tree.tree({ data: exampleData });
184
- }));
162
+ it("fires tree.load_data", () => {
163
+ const onLoadData = jest.fn();
164
+ given.$tree.on("tree.load_data", onLoadData);
165
+
166
+ given.$tree.tree({ data: exampleData });
167
+ expect(onLoadData).toHaveBeenCalledWith(
168
+ expect.objectContaining({ tree_data: exampleData })
169
+ );
170
+ });
185
171
  });
186
172
  });
187
173
 
@@ -203,35 +189,35 @@ describe("tree.select", () => {
203
189
  });
204
190
  });
205
191
 
206
- it("fires tree.click", () =>
207
- new Promise<void>((done) => {
208
- given.$tree.on("tree.select", (e: unknown) => {
209
- const treeClickEvent = e as ClickNodeEvent;
210
-
211
- expect(treeClickEvent.node).toBe(given.node1);
212
- expect(treeClickEvent.deselected_node).toBeNull();
213
- done();
214
- });
215
-
216
- given.titleSpan.trigger("click");
217
- }));
192
+ it("fires tree.select", () => {
193
+ const onSelect = jest.fn();
194
+ given.$tree.on("tree.select", onSelect);
195
+
196
+ given.titleSpan.trigger("click");
197
+ expect(onSelect).toHaveBeenCalledWith(
198
+ expect.objectContaining({
199
+ node: given.node1,
200
+ deselected_node: null,
201
+ })
202
+ );
203
+ });
218
204
 
219
205
  context("when the node was selected", () => {
220
206
  beforeEach(() => {
221
207
  given.$tree.tree("selectNode", given.node1);
222
208
  });
223
209
 
224
- it("fires tree.select with node is null", () =>
225
- new Promise<void>((done) => {
226
- given.$tree.on("tree.select", (e: unknown) => {
227
- const treeClickEvent = e as ClickNodeEvent;
228
-
229
- expect(treeClickEvent.node).toBeNull();
230
- expect(treeClickEvent.previous_node).toBe(given.node1);
231
- done();
232
- });
210
+ it("fires tree.select with node is null", () => {
211
+ const onSelect = jest.fn();
212
+ given.$tree.on("tree.select", onSelect);
233
213
 
234
- given.titleSpan.trigger("click");
235
- }));
214
+ given.titleSpan.trigger("click");
215
+ expect(onSelect).toHaveBeenCalledWith(
216
+ expect.objectContaining({
217
+ node: null,
218
+ previous_node: given.node1,
219
+ })
220
+ );
221
+ });
236
222
  });
237
223
  });
@@ -53,12 +53,12 @@ context("when a node has load_on_demand in the data", () => {
53
53
  if (parentId === "1") {
54
54
  return response(
55
55
  ctx.status(200),
56
- ctx.json([{ id: 2, name: "loaded-on-demand" }])
56
+ ctx.json([{ id: 2, name: "loaded-on-demand" }]),
57
57
  );
58
58
  } else {
59
59
  return response(ctx.status(400));
60
60
  }
61
- })
61
+ }),
62
62
  );
63
63
  });
64
64
 
@@ -87,7 +87,7 @@ context("when a node has load_on_demand in the data", () => {
87
87
 
88
88
  context("when the node is opened", () => {
89
89
  given("node", () =>
90
- given.$tree.tree("getNodeByNameMustExist", "parent-node")
90
+ given.$tree.tree("getNodeByNameMustExist", "parent-node"),
91
91
  );
92
92
 
93
93
  it("loads the subtree", async () => {
@@ -136,8 +136,9 @@ context("when a node has load_on_demand in the data", () => {
136
136
 
137
137
  context("when the node is selected and doesn't have the focus", () => {
138
138
  beforeEach(() => {
139
- given.$tree.tree("selectNode", given.node);
140
- (document.activeElement as HTMLElement).blur();
139
+ given.$tree.tree("selectNode", given.node, {
140
+ mustSetFocus: false,
141
+ });
141
142
  });
142
143
 
143
144
  it("keeps the node selected and not focused", async () => {
@@ -146,7 +146,7 @@ describe("addToSelection", () => {
146
146
 
147
147
  it("selects the nodes", () => {
148
148
  expect(given.$tree.tree("getSelectedNodes")).toEqual(
149
- expect.arrayContaining([given.child1, given.child2])
149
+ expect.arrayContaining([given.child1, given.child2]),
150
150
  );
151
151
  });
152
152
 
@@ -207,7 +207,7 @@ describe("appendNode", () => {
207
207
 
208
208
  context("when appending to a parent node", () => {
209
209
  given("parent", () =>
210
- given.$tree.tree("getNodeByNameMustExist", "node1")
210
+ given.$tree.tree("getNodeByNameMustExist", "node1"),
211
211
  );
212
212
 
213
213
  it("appends the node to parent node", () => {
@@ -244,7 +244,7 @@ describe("appendNode", () => {
244
244
 
245
245
  it("sets the properties of the object", () => {
246
246
  expect(given.$tree.tree("getNodeById", 99)).toMatchObject(
247
- given.nodeData
247
+ given.nodeData,
248
248
  );
249
249
  });
250
250
  });
@@ -302,7 +302,7 @@ describe("getNodeByHtmlElement", () => {
302
302
 
303
303
  const given = getGiven<Vars>();
304
304
  given("htmlElement", () =>
305
- screen.getByText("node1", { selector: ".jqtree-title" })
305
+ screen.getByText("node1", { selector: ".jqtree-title" }),
306
306
  );
307
307
  given("$tree", () => $("#tree1"));
308
308
 
@@ -312,7 +312,7 @@ describe("getNodeByHtmlElement", () => {
312
312
 
313
313
  it("returns the node", () => {
314
314
  expect(
315
- given.$tree.tree("getNodeByHtmlElement", given.htmlElement)
315
+ given.$tree.tree("getNodeByHtmlElement", given.htmlElement),
316
316
  ).toEqual(expect.objectContaining({ name: "node1" }));
317
317
  });
318
318
  });
@@ -394,7 +394,7 @@ describe("getNodesByProperty", () => {
394
394
 
395
395
  it("gets nodes by property", () => {
396
396
  expect(
397
- given.$tree.tree("getNodesByProperty", "intProperty", 1)
397
+ given.$tree.tree("getNodesByProperty", "intProperty", 1),
398
398
  ).toEqual([given.node1]);
399
399
  });
400
400
  });
@@ -417,7 +417,7 @@ describe("getSelectedNode", () => {
417
417
 
418
418
  context("when nodes have ids", () => {
419
419
  given("node", () =>
420
- given.$tree.tree("getNodeByNameMustExist", "node1")
420
+ given.$tree.tree("getNodeByNameMustExist", "node1"),
421
421
  );
422
422
  given("treeData", () => exampleData);
423
423
 
@@ -440,7 +440,7 @@ describe("getSelectedNode", () => {
440
440
 
441
441
  context("when nodes don't have ids", () => {
442
442
  given("node", () =>
443
- given.$tree.tree("getNodeByNameMustExist", "without-id1")
443
+ given.$tree.tree("getNodeByNameMustExist", "without-id1"),
444
444
  );
445
445
  given("treeData", () => ["without-id1", "without-id2"]);
446
446
 
@@ -494,7 +494,7 @@ describe("getSelectedNodes", () => {
494
494
 
495
495
  it("returns the selected nodes", () => {
496
496
  expect(given.$tree.tree("getSelectedNodes")).toEqual(
497
- expect.arrayContaining([given.child1, given.child2])
497
+ expect.arrayContaining([given.child1, given.child2]),
498
498
  );
499
499
  });
500
500
  });
@@ -659,7 +659,7 @@ describe("loadData", () => {
659
659
  given.$tree.tree(
660
660
  "loadData",
661
661
  exampleData,
662
- given.$tree.tree("getNodeByNameMustExist", "initial1")
662
+ given.$tree.tree("getNodeByNameMustExist", "initial1"),
663
663
  );
664
664
  });
665
665
 
@@ -688,7 +688,7 @@ describe("loadData", () => {
688
688
  beforeEach(() => {
689
689
  given.$tree.tree(
690
690
  "selectNode",
691
- given.$tree.tree("getNodeByNameMustExist", "child1")
691
+ given.$tree.tree("getNodeByNameMustExist", "child1"),
692
692
  );
693
693
  });
694
694
 
@@ -696,7 +696,7 @@ describe("loadData", () => {
696
696
  given.$tree.tree(
697
697
  "loadData",
698
698
  ["new-child1"],
699
- given.$tree.tree("getNodeByNameMustExist", "node1")
699
+ given.$tree.tree("getNodeByNameMustExist", "node1"),
700
700
  );
701
701
 
702
702
  expect(given.$tree.tree("getSelectedNode")).toBeFalse();
@@ -712,7 +712,7 @@ describe("loadData", () => {
712
712
  given.$tree.tree(
713
713
  "loadData",
714
714
  ["new-child1"],
715
- given.$tree.tree("getNodeByNameMustExist", "node1")
715
+ given.$tree.tree("getNodeByNameMustExist", "node1"),
716
716
  );
717
717
 
718
718
  expect(given.$tree.tree("getSelectedNode")).toBeFalse();
@@ -723,7 +723,7 @@ describe("loadData", () => {
723
723
  given.$tree.tree(
724
724
  "loadData",
725
725
  ["new-child1"],
726
- given.$tree.tree("getNodeByNameMustExist", "node2")
726
+ given.$tree.tree("getNodeByNameMustExist", "node2"),
727
727
  );
728
728
 
729
729
  expect(given.$tree.tree("getSelectedNode")).toMatchObject({
@@ -750,8 +750,8 @@ describe("loadDataFromUrl", () => {
750
750
  beforeEach(() => {
751
751
  server.use(
752
752
  rest.get("/tree/", (_request, response, ctx) =>
753
- response(ctx.status(200), ctx.json(given.serverData))
754
- )
753
+ response(ctx.status(200), ctx.json(given.serverData)),
754
+ ),
755
755
  );
756
756
 
757
757
  given.$tree.tree({ data: given.initialData });
@@ -775,7 +775,7 @@ describe("loadDataFromUrl", () => {
775
775
  it("loads a subtree", async () => {
776
776
  const parentNode = given.$tree.tree(
777
777
  "getNodeByNameMustExist",
778
- "initial1"
778
+ "initial1",
779
779
  );
780
780
  given.$tree.tree("loadDataFromUrl", "/tree/", parentNode);
781
781
  await screen.findByText("new1");
@@ -949,7 +949,7 @@ describe("prependNode", () => {
949
949
 
950
950
  context("with a parent node", () => {
951
951
  given("parent", () =>
952
- given.$tree.tree("getNodeByNameMustExist", "node1")
952
+ given.$tree.tree("getNodeByNameMustExist", "node1"),
953
953
  );
954
954
 
955
955
  it("prepends the node to the parent", () => {
@@ -984,7 +984,7 @@ describe("refresh", () => {
984
984
 
985
985
  it("rerenders the tree", () => {
986
986
  const tree = given.$tree.tree("getTree");
987
- tree.children[0].name = "node1a";
987
+ (tree.children[0] as INode).name = "node1a";
988
988
 
989
989
  expect(given.$tree).toHaveTreeStructure([
990
990
  expect.objectContaining({ name: "node1" }),
@@ -1013,8 +1013,8 @@ describe("reload", () => {
1013
1013
  beforeEach(async () => {
1014
1014
  server.use(
1015
1015
  rest.get("/tree2/", (_request, response, ctx) =>
1016
- response(ctx.status(200), ctx.json(exampleData))
1017
- )
1016
+ response(ctx.status(200), ctx.json(exampleData)),
1017
+ ),
1018
1018
  );
1019
1019
 
1020
1020
  given.$tree.tree({ dataUrl: "/tree2/" });
@@ -1070,7 +1070,7 @@ describe("removeNode", () => {
1070
1070
 
1071
1071
  context("with a child node", () => {
1072
1072
  given("node", () =>
1073
- given.$tree.tree("getNodeByNameMustExist", "child1")
1073
+ given.$tree.tree("getNodeByNameMustExist", "child1"),
1074
1074
  );
1075
1075
 
1076
1076
  it("removes the node", () => {
@@ -1103,7 +1103,7 @@ describe("removeNode", () => {
1103
1103
 
1104
1104
  context("with a parent node and its children", () => {
1105
1105
  given("node", () =>
1106
- given.$tree.tree("getNodeByNameMustExist", "node1")
1106
+ given.$tree.tree("getNodeByNameMustExist", "node1"),
1107
1107
  );
1108
1108
 
1109
1109
  it("removes the node", () => {
@@ -1121,7 +1121,7 @@ describe("removeNode", () => {
1121
1121
  beforeEach(() => {
1122
1122
  const child1 = given.$tree.tree(
1123
1123
  "getNodeByNameMustExist",
1124
- "child1"
1124
+ "child1",
1125
1125
  );
1126
1126
  given.$tree.tree("selectNode", child1);
1127
1127
  });
@@ -1139,7 +1139,7 @@ describe("removeNode", () => {
1139
1139
 
1140
1140
  it("raises an exception", () => {
1141
1141
  expect(() => given.$tree.tree("removeNode", given.node)).toThrow(
1142
- "Node has no parent"
1142
+ "Node has no parent",
1143
1143
  );
1144
1144
  });
1145
1145
  });
@@ -1382,7 +1382,7 @@ describe("updateNode", () => {
1382
1382
  expect.objectContaining({ name: "node2" }),
1383
1383
  ]);
1384
1384
  expect(given.$tree.tree("getNodeById", 999)).toMatchObject(
1385
- given.nodeData
1385
+ given.nodeData,
1386
1386
  );
1387
1387
  });
1388
1388
  });
@@ -1406,7 +1406,7 @@ describe("updateNode", () => {
1406
1406
  context("when adding a child to a child node", () => {
1407
1407
  given("nodeData", () => ({ children: ["new-child"] }));
1408
1408
  given("node", () =>
1409
- given.$tree.tree("getNodeByNameMustExist", "child1")
1409
+ given.$tree.tree("getNodeByNameMustExist", "child1"),
1410
1410
  );
1411
1411
 
1412
1412
  it("adds the child node", () => {