jqtree 1.6.0 → 1.6.3

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 (301) hide show
  1. package/.eslintrc +3 -11
  2. package/.github/workflows/ci.yml +48 -23
  3. package/.github/workflows/codeql-analysis.yml +9 -5
  4. package/.prettier +3 -0
  5. package/README.md +11 -8
  6. package/bower.json +1 -1
  7. package/{.postcssrc → config/.postcssrc} +0 -0
  8. package/config/babel.config.json +11 -0
  9. package/config/babel.coverage.config.json +4 -0
  10. package/{jest-jsdom.config.js → config/jest.config.js} +9 -5
  11. package/config/playwright.config.js +18 -0
  12. package/config/production +4 -0
  13. package/{rollup.config.js → config/rollup.config.js} +19 -14
  14. package/{jqtree.postcss → css/jqtree.postcss} +3 -0
  15. package/devserver/index.html +1 -9
  16. package/docs/Gemfile +2 -0
  17. package/docs/Gemfile.lock +263 -0
  18. package/{_config.yml → docs/_config.yml} +8 -1
  19. package/{_entries → docs/_entries}/01_general.md +0 -0
  20. package/{_entries → docs/_entries}/02_introduction.md +0 -0
  21. package/{_entries → docs/_entries}/03_features.md +1 -1
  22. package/{_entries → docs/_entries}/04_demo.html +1 -7
  23. package/{_entries → docs/_entries}/05_requirements.md +0 -0
  24. package/{_entries → docs/_entries}/06_downloads.md +0 -0
  25. package/{_entries → docs/_entries}/07_tutorial.md +0 -0
  26. package/{_entries → docs/_entries}/08_examples.md +0 -0
  27. package/{_entries → docs/_entries}/09_usecases.md +0 -0
  28. package/{_entries → docs/_entries}/10_changelog.md +14 -0
  29. package/{_entries → docs/_entries}/11_options.md +0 -0
  30. package/{_entries → docs/_entries}/12_animationspeed.md +0 -0
  31. package/{_entries → docs/_entries}/13_autoescape.md +0 -0
  32. package/{_entries → docs/_entries}/14_autoopen.md +0 -0
  33. package/{_entries → docs/_entries}/15_buttonleft.md +0 -0
  34. package/{_entries → docs/_entries}/16_closedicon.md +0 -0
  35. package/{_entries → docs/_entries}/17_data.md +0 -0
  36. package/{_entries → docs/_entries}/18_datafilter.md +0 -0
  37. package/{_entries → docs/_entries}/19_data-url.md +0 -0
  38. package/{_entries → docs/_entries}/20_draganddrop.md +0 -0
  39. package/{_entries → docs/_entries}/21_keyboardsupport.md +0 -0
  40. package/{_entries → docs/_entries}/22_oncanmove.md +0 -0
  41. package/{_entries → docs/_entries}/23_oncanmoveto.md +2 -2
  42. package/{_entries → docs/_entries}/24_oncanselectnode.md +0 -0
  43. package/{_entries → docs/_entries}/25_oncreateli.md +2 -2
  44. package/{_entries → docs/_entries}/26_ondragmove.md +0 -0
  45. package/{_entries → docs/_entries}/27_ondragstop.md +0 -0
  46. package/{_entries → docs/_entries}/28_onismovehandle.md +0 -0
  47. package/{_entries → docs/_entries}/29_onloadfailed.md +0 -0
  48. package/{_entries → docs/_entries}/30_onloading.md +2 -2
  49. package/{_entries → docs/_entries}/31_openedicon.md +0 -0
  50. package/{_entries → docs/_entries}/32_openfolderdelay.md +2 -0
  51. package/{_entries → docs/_entries}/33_rtl.md +0 -0
  52. package/{_entries → docs/_entries}/34_savestate.md +0 -0
  53. package/{_entries → docs/_entries}/35_selectable.md +0 -0
  54. package/{_entries → docs/_entries}/36_showemptyfolder.md +0 -0
  55. package/{_entries → docs/_entries}/37_slide.md +0 -0
  56. package/{_entries → docs/_entries}/38_start_dnd_delay.md +0 -0
  57. package/{_entries → docs/_entries}/39_tabindex.md +0 -0
  58. package/{_entries → docs/_entries}/40_usecontextmenu.md +0 -0
  59. package/{_entries → docs/_entries}/41_functions.md +0 -0
  60. package/{_entries → docs/_entries}/42_addparentnode.md +1 -1
  61. package/{_entries → docs/_entries}/43_addnodeafter.md +1 -1
  62. package/{_entries → docs/_entries}/44_addnodebefore.md +1 -1
  63. package/{_entries → docs/_entries}/45_appendnode.md +5 -5
  64. package/{_entries → docs/_entries}/46_closenode.md +0 -0
  65. package/{_entries → docs/_entries}/47_destroy.md +0 -0
  66. package/{_entries → docs/_entries}/48_getnodebycallback.md +0 -0
  67. package/{_entries → docs/_entries}/49_getnodebyid.md +0 -0
  68. package/{_entries → docs/_entries}/50_getnodebyhtmlelement.md +2 -2
  69. package/{_entries → docs/_entries}/51_getselectednode.md +0 -0
  70. package/{_entries → docs/_entries}/52_getstate.md +0 -0
  71. package/{_entries → docs/_entries}/53_gettree.md +1 -1
  72. package/{_entries → docs/_entries}/54_isdragging.md +1 -1
  73. package/{_entries → docs/_entries}/55_loaddata.md +3 -3
  74. package/{_entries → docs/_entries}/56_loaddatafromurl.md +4 -4
  75. package/{_entries → docs/_entries}/57_movedown.md +0 -0
  76. package/{_entries → docs/_entries}/58_movenode.md +3 -3
  77. package/{_entries → docs/_entries}/59_moveup.md +0 -0
  78. package/{_entries → docs/_entries}/60_opennode.md +3 -3
  79. package/docs/_entries/61_prependnode.md +21 -0
  80. package/docs/_entries/62_refresh.md +12 -0
  81. package/{_entries/62_reload.md → docs/_entries/63_reload.md} +2 -2
  82. package/{_entries/63_removenode.md → docs/_entries/64_removenode.md} +0 -0
  83. package/{_entries/64_selectnode.md → docs/_entries/65_selectnode.md} +0 -0
  84. package/{_entries/65_scrolltonode.md → docs/_entries/66_scrolltonode.md} +0 -0
  85. package/{_entries/66_setoption.md → docs/_entries/67_setoption.md} +0 -0
  86. package/{_entries/67_setstate.md → docs/_entries/68_setstate.md} +0 -0
  87. package/{_entries/68_toggle.md → docs/_entries/69_toggle.md} +0 -0
  88. package/{_entries/69_tojson.md → docs/_entries/70_tojson.md} +0 -0
  89. package/{_entries/70_updatenode.md → docs/_entries/71_updatenode.md} +1 -1
  90. package/{_entries/71_events.md → docs/_entries/72_events.md} +0 -0
  91. package/{_entries/72_tree-click.md → docs/_entries/73_tree-click.md} +0 -0
  92. package/{_entries/73_tree-close.md → docs/_entries/74_tree-close.md} +0 -0
  93. package/{_entries/74_tree-contextmenu.md → docs/_entries/75_tree-contextmenu.md} +0 -0
  94. package/{_entries/75_tree-dblclick.md → docs/_entries/76_tree-dblclick.md} +0 -0
  95. package/{_entries/76_tree-init.md → docs/_entries/77_tree-init.md} +0 -0
  96. package/{_entries/77_tree-load-data.md → docs/_entries/78_tree-load-data.md} +0 -0
  97. package/{_entries/78_tree-loading-data.md → docs/_entries/79_tree-loading-data.md} +0 -0
  98. package/{_entries/79_tree-move.md → docs/_entries/80_tree-move.md} +0 -0
  99. package/{_entries/80_tree-refresh.md → docs/_entries/81_tree-refresh.md} +0 -0
  100. package/{_entries/81_tree-open.md → docs/_entries/82_tree-open.md} +0 -0
  101. package/{_entries/82_tree-select.md → docs/_entries/83_tree-select.md} +0 -0
  102. package/{_entries/83_multiple-selection.md → docs/_entries/84_multiple-selection.md} +0 -0
  103. package/{_entries/84_add-to-selection.md → docs/_entries/85_add-to-selection.md} +0 -0
  104. package/{_entries/85_get-selected-nodes.md → docs/_entries/86_get-selected-nodes.md} +0 -0
  105. package/{_entries/86_is-node-selected.md → docs/_entries/87_is-node-selected.md} +1 -1
  106. package/{_entries/87_remove-from-selection.md → docs/_entries/88_remove-from-selection.md} +0 -0
  107. package/{_entries/88_node-functions.md → docs/_entries/89_node-functions.md} +0 -0
  108. package/{_entries/89_children.md → docs/_entries/90_children.md} +0 -0
  109. package/{_entries/90_getdata.md → docs/_entries/91_getdata.md} +2 -2
  110. package/{_entries/91_getlevel.md → docs/_entries/92_getlevel.md} +0 -0
  111. package/{_entries/92_getnextnode.md → docs/_entries/93_getnextnode.md} +0 -0
  112. package/{_entries/93_getnextsibling.md → docs/_entries/94_getnextsibling.md} +0 -0
  113. package/{_entries/94_getpreviousnode.md → docs/_entries/95_getpreviousnode.md} +0 -0
  114. package/{_entries/95_getprevioussibling.md → docs/_entries/96_getprevioussibling.md} +0 -0
  115. package/{_entries/96_parent.md → docs/_entries/97_parent.md} +1 -1
  116. package/{_entries → docs/_entries}/insert.py +0 -0
  117. package/{_entries → docs/_entries}/renumber.py +0 -0
  118. package/{_examples → docs/_examples}/01_load_json_data.html +3 -5
  119. package/{_examples → docs/_examples}/02_load_json_data_from_server.html +3 -5
  120. package/{_examples → docs/_examples}/03_drag_and_drop.html +3 -5
  121. package/{_examples → docs/_examples}/04_save_state.html +3 -5
  122. package/{_examples → docs/_examples}/05_load_on_demand.html +3 -5
  123. package/{_examples → docs/_examples}/06_autoescape.html +3 -5
  124. package/{_examples → docs/_examples}/07_autoscroll.html +3 -5
  125. package/{_examples → docs/_examples}/08_multiple_select.html +3 -5
  126. package/{_examples → docs/_examples}/09_custom_html.html +3 -5
  127. package/{_examples → docs/_examples}/10_icon_buttons.html +3 -5
  128. package/{_examples → docs/_examples}/11_right-to-left.html +3 -5
  129. package/{_examples → docs/_examples}/12_button_on_right.html +3 -5
  130. package/docs/_examples/13_drag_outside.html +48 -0
  131. package/docs/_examples/14_filter.html +111 -0
  132. package/docs/_layouts/example.html +7 -0
  133. package/docs/_layouts/page.html +26 -0
  134. package/docs/documentation.css +3 -0
  135. package/docs/index.html +65 -0
  136. package/docs/jqtree.css +189 -0
  137. package/docs/package.json +22 -0
  138. package/docs/pnpm-lock.yaml +768 -0
  139. package/docs/postcss.config.js +7 -0
  140. package/docs/static/bower.json +8 -0
  141. package/docs/static/bower_components/fontawesome/css/all.min.css +5 -0
  142. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.eot +0 -0
  143. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.svg +774 -627
  144. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-brands-400.ttf +0 -0
  145. package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff +0 -0
  146. package/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  147. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.eot +0 -0
  148. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.svg +93 -95
  149. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-regular-400.ttf +0 -0
  150. package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff +0 -0
  151. package/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  152. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.eot +0 -0
  153. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.svg +1164 -1074
  154. package/{static → docs/static}/bower_components/fontawesome/webfonts/fa-solid-900.ttf +0 -0
  155. package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff +0 -0
  156. package/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  157. package/{static → docs/static}/bower_components/jquery/dist/jquery.js +118 -109
  158. package/docs/static/bower_components/jquery/dist/jquery.min.js +2 -0
  159. package/{static → docs/static}/bower_components/jquery-mockjax/dist/jquery.mockjax.js +15 -9
  160. package/docs/static/documentation.css +1313 -0
  161. package/docs/static/documentation.js +26 -0
  162. package/{static → docs/static}/example.css +14 -33
  163. package/{static → docs/static}/example.postcss +15 -32
  164. package/{static → docs/static}/example_data.js +33 -36
  165. package/{static → docs/static}/examples/autoescape.js +0 -0
  166. package/{static → docs/static}/examples/autoscroll.js +0 -0
  167. package/{static → docs/static}/examples/button-on-right.js +0 -0
  168. package/{static → docs/static}/examples/custom_html.js +5 -9
  169. package/{static → docs/static}/examples/drag-outside.js +0 -0
  170. package/{static → docs/static}/examples/drag_and_drop.js +0 -0
  171. package/docs/static/examples/filter.js +63 -0
  172. package/{static → docs/static}/examples/icon_buttons.js +0 -0
  173. package/{static → docs/static}/examples/load_json_data.js +0 -0
  174. package/{static → docs/static}/examples/load_json_data_from_server.js +0 -0
  175. package/{static → docs/static}/examples/load_on_demand.js +0 -0
  176. package/{static → docs/static}/examples/multiple_select.js +0 -0
  177. package/{static → docs/static}/examples/right-to-left.js +0 -0
  178. package/{static → docs/static}/examples/save_state.js +0 -0
  179. package/{static → docs/static}/monokai.css +0 -0
  180. package/{static → docs/static}/spinner.gif +0 -0
  181. package/docs/tailwind.config.js +16 -0
  182. package/docs/tree.jquery.js +21 -0
  183. package/jqtree.css +4 -1
  184. package/lib/dataLoader.js +146 -98
  185. package/lib/dragAndDropHandler.js +672 -470
  186. package/lib/elementsRenderer.js +282 -197
  187. package/lib/jqtreeOptions.js +1 -2
  188. package/lib/keyHandler.js +134 -87
  189. package/lib/mouse.widget.js +285 -184
  190. package/lib/node.js +691 -505
  191. package/lib/nodeElement.js +329 -205
  192. package/lib/playwright/coverage.js +140 -0
  193. package/lib/playwright/playwright.test.js +298 -179
  194. package/lib/playwright/testUtils.js +267 -0
  195. package/lib/saveStateHandler.js +311 -204
  196. package/lib/scrollHandler.js +293 -199
  197. package/lib/selectNodeHandler.js +140 -100
  198. package/lib/simple.widget.js +184 -109
  199. package/lib/test/global.d.js +3 -0
  200. package/lib/test/jqTree/create.test.js +44 -40
  201. package/lib/test/jqTree/events.test.js +186 -138
  202. package/lib/test/jqTree/keyboard.test.js +216 -199
  203. package/lib/test/jqTree/loadOnDemand.test.js +238 -157
  204. package/lib/test/jqTree/methods.test.js +1289 -1019
  205. package/lib/test/jqTree/options.test.js +491 -410
  206. package/lib/test/node.test.js +1036 -873
  207. package/lib/test/nodeUtil.test.js +21 -20
  208. package/lib/test/support/exampleData.js +35 -23
  209. package/lib/test/support/jqTreeMatchers.js +72 -54
  210. package/lib/test/support/matchers.d.js +1 -0
  211. package/lib/test/support/setupTests.js +9 -3
  212. package/lib/test/support/testUtil.js +35 -15
  213. package/lib/test/support/treeStructure.js +41 -32
  214. package/lib/test/util.test.js +21 -20
  215. package/lib/tree.jquery.d.js +1 -0
  216. package/lib/tree.jquery.js +1264 -886
  217. package/lib/types.js +1 -2
  218. package/lib/typings.d.js +2 -0
  219. package/lib/util.js +19 -8
  220. package/lib/version.js +8 -3
  221. package/package.json +54 -47
  222. package/src/dataLoader.ts +6 -6
  223. package/src/dragAndDropHandler.ts +8 -8
  224. package/src/elementsRenderer.ts +4 -0
  225. package/src/jqtreeOptions.ts +2 -2
  226. package/src/mouse.widget.ts +19 -15
  227. package/src/node.ts +27 -41
  228. package/src/nodeElement.ts +17 -9
  229. package/src/playwright/.eslintrc +5 -0
  230. package/src/playwright/coverage.ts +41 -0
  231. package/src/playwright/playwright.test.ts +75 -77
  232. package/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-darwin.png +0 -0
  233. package/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-linux.png +0 -0
  234. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-darwin.png +0 -0
  235. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-linux.png +0 -0
  236. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-darwin.png +0 -0
  237. package/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-linux.png +0 -0
  238. package/src/playwright/testUtils.ts +122 -0
  239. package/src/saveStateHandler.ts +11 -6
  240. package/src/selectNodeHandler.ts +1 -1
  241. package/src/simple.widget.ts +1 -1
  242. package/src/test/.eslintrc +14 -0
  243. package/src/test/jqTree/create.test.ts +0 -1
  244. package/src/test/jqTree/events.test.ts +10 -10
  245. package/src/test/jqTree/keyboard.test.ts +0 -1
  246. package/src/test/jqTree/loadOnDemand.test.ts +56 -11
  247. package/src/test/jqTree/methods.test.ts +72 -55
  248. package/src/test/jqTree/options.test.ts +30 -33
  249. package/src/test/node.test.ts +2 -2
  250. package/src/test/support/jqTreeMatchers.ts +8 -9
  251. package/src/test/support/matchers.d.ts +2 -4
  252. package/src/test/support/setupTests.ts +2 -1
  253. package/src/tree.jquery.d.ts +19 -13
  254. package/src/tree.jquery.ts +35 -28
  255. package/src/version.ts +1 -1
  256. package/tree.jquery.debug.js +4810 -3325
  257. package/tree.jquery.debug.js.map +1 -1
  258. package/tree.jquery.js +3 -3
  259. package/tree.jquery.js.map +1 -1
  260. package/tsconfig.json +1 -0
  261. package/_entries/61_prependnode.md +0 -21
  262. package/_examples/13_drag_outside.html +0 -25
  263. package/_layouts/base.html +0 -55
  264. package/_layouts/frontpage.html +0 -20
  265. package/_layouts/page.html +0 -7
  266. package/index.html +0 -48
  267. package/jest-browser.config.js +0 -18
  268. package/jest-playwright.config.js +0 -21
  269. package/jest.config.js +0 -8
  270. package/lib/playwright/testUtil.js +0 -223
  271. package/lib/playwright/visualRegression.js +0 -128
  272. package/production +0 -5
  273. package/src/playwright/screenshots/displays_a_tree_Desktop.png +0 -0
  274. package/src/playwright/screenshots/displays_a_tree_iPhone 6.png +0 -0
  275. package/src/playwright/screenshots/moves_a_node_Desktop.png +0 -0
  276. package/src/playwright/screenshots/moves_a_node_iPhone 6.png +0 -0
  277. package/src/playwright/screenshots/opens_a_node_Desktop.png +0 -0
  278. package/src/playwright/screenshots/opens_a_node_iPhone 6.png +0 -0
  279. package/src/playwright/screenshots/selects_a_node_Desktop.png +0 -0
  280. package/src/playwright/screenshots/selects_a_node_iPhone 6.png +0 -0
  281. package/src/playwright/testUtil.ts +0 -171
  282. package/src/playwright/visualRegression.ts +0 -88
  283. package/static/bower.json +0 -9
  284. package/static/bower_components/bootstrap/dist/css/bootstrap-theme.min.css +0 -6
  285. package/static/bower_components/bootstrap/dist/css/bootstrap.min.css +0 -6
  286. package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.eot +0 -0
  287. package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.svg +0 -288
  288. package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.ttf +0 -0
  289. package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff +0 -0
  290. package/static/bower_components/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2 +0 -0
  291. package/static/bower_components/bootstrap/dist/js/bootstrap.min.js +0 -6
  292. package/static/bower_components/fontawesome/css/all.min.css +0 -5
  293. package/static/bower_components/fontawesome/webfonts/fa-brands-400.woff +0 -0
  294. package/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  295. package/static/bower_components/fontawesome/webfonts/fa-regular-400.woff +0 -0
  296. package/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  297. package/static/bower_components/fontawesome/webfonts/fa-solid-900.woff +0 -0
  298. package/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  299. package/static/bower_components/jquery/dist/jquery.min.js +0 -2
  300. package/static/documentation.css +0 -171
  301. package/static/documentation.js +0 -48
@@ -1,6 +1,5 @@
1
- import * as $ from "jquery";
2
1
  import getGiven from "givens";
3
- import { screen } from "@testing-library/dom";
2
+ import { screen, waitFor } from "@testing-library/dom";
4
3
  import { rest } from "msw";
5
4
  import { setupServer } from "msw/node";
6
5
  import "../../tree.jquery";
@@ -10,17 +9,25 @@ import __version__ from "../../version";
10
9
 
11
10
  const context = describe;
12
11
 
12
+ const server = setupServer();
13
+
14
+ beforeAll(() => server.listen());
15
+
13
16
  beforeEach(() => {
14
17
  $("body").append('<div id="tree1"></div>');
15
18
  });
16
19
 
17
20
  afterEach(() => {
21
+ server.resetHandlers();
22
+
18
23
  const $tree = $("#tree1");
19
24
  $tree.tree("destroy");
20
25
  $tree.remove();
21
26
  localStorage.clear();
22
27
  });
23
28
 
29
+ afterAll(() => server.close());
30
+
24
31
  describe("addNodeAfter", () => {
25
32
  interface Vars {
26
33
  node: INode;
@@ -740,22 +747,13 @@ describe("loadDataFromUrl", () => {
740
747
  given("serverData", () => exampleData);
741
748
  given("$tree", () => $("#tree1"));
742
749
 
743
- let server: ReturnType<typeof setupServer> | null = null;
744
-
745
- beforeAll(() => {
746
- server = setupServer(
747
- rest.get("/tree/", (_request, response, ctx) => {
748
- return response(ctx.status(200), ctx.json(given.serverData));
749
- })
750
+ beforeEach(() => {
751
+ server.use(
752
+ rest.get("/tree/", (_request, response, ctx) =>
753
+ response(ctx.status(200), ctx.json(given.serverData))
754
+ )
750
755
  );
751
- server.listen();
752
- });
753
-
754
- afterAll(() => {
755
- server?.close();
756
- });
757
756
 
758
- beforeEach(() => {
759
757
  given.$tree.tree({ data: given.initialData });
760
758
  });
761
759
 
@@ -910,12 +908,15 @@ describe("openNode", () => {
910
908
  });
911
909
 
912
910
  context("with onFinished parameter", () => {
913
- it("calls the function", () =>
914
- new Promise((resolve) =>
915
- given.$tree.tree("openNode", given.node1, (node) =>
916
- resolve(expect(node).toBe(given.node1))
917
- )
918
- ));
911
+ it("calls the function", async () => {
912
+ const onFinished = jest.fn();
913
+
914
+ given.$tree.tree("openNode", given.node1, onFinished);
915
+
916
+ await waitFor(() => {
917
+ expect(onFinished).toHaveBeenCalledWith(given.node1);
918
+ });
919
+ });
919
920
  });
920
921
  });
921
922
 
@@ -967,6 +968,38 @@ describe("prependNode", () => {
967
968
  });
968
969
  });
969
970
 
971
+ describe("refresh", () => {
972
+ interface Vars {
973
+ $tree: JQuery<HTMLElement>;
974
+ }
975
+
976
+ const given = getGiven<Vars>();
977
+ given("$tree", () => $("#tree1"));
978
+
979
+ beforeEach(() => {
980
+ given.$tree.tree({
981
+ data: exampleData,
982
+ });
983
+ });
984
+
985
+ it("rerenders the tree", () => {
986
+ const tree = given.$tree.tree("getTree");
987
+ tree.children[0].name = "node1a";
988
+
989
+ expect(given.$tree).toHaveTreeStructure([
990
+ expect.objectContaining({ name: "node1" }),
991
+ expect.objectContaining({ name: "node2" }),
992
+ ]);
993
+
994
+ given.$tree.tree("refresh");
995
+
996
+ expect(given.$tree).toHaveTreeStructure([
997
+ expect.objectContaining({ name: "node1a" }),
998
+ expect.objectContaining({ name: "node2" }),
999
+ ]);
1000
+ });
1001
+ });
1002
+
970
1003
  describe("reload", () => {
971
1004
  interface Vars {
972
1005
  node1: INode;
@@ -977,23 +1010,14 @@ describe("reload", () => {
977
1010
  given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1"));
978
1011
  given("$tree", () => $("#tree1"));
979
1012
 
980
- let server: ReturnType<typeof setupServer> | null = null;
981
-
982
- beforeAll(() => {
983
- server = setupServer(
984
- rest.get("/tree/", (_request, response, ctx) =>
1013
+ beforeEach(async () => {
1014
+ server.use(
1015
+ rest.get("/tree2/", (_request, response, ctx) =>
985
1016
  response(ctx.status(200), ctx.json(exampleData))
986
1017
  )
987
1018
  );
988
- server.listen();
989
- });
990
1019
 
991
- afterAll(() => {
992
- server?.close();
993
- });
994
-
995
- beforeEach(async () => {
996
- given.$tree.tree({ dataUrl: "/tree/" });
1020
+ given.$tree.tree({ dataUrl: "/tree2/" });
997
1021
  await screen.findByText("node1");
998
1022
 
999
1023
  given.$tree.tree("removeNode", given.node1);
@@ -1014,19 +1038,18 @@ describe("reload", () => {
1014
1038
  });
1015
1039
 
1016
1040
  context("with a onFinished parameter", () => {
1017
- it("calls onFinished", () =>
1018
- new Promise<void>((resolve) => {
1019
- const handleFinished = () => {
1020
- expect(given.$tree).toHaveTreeStructure([
1021
- expect.objectContaining({ name: "node1" }),
1022
- expect.objectContaining({ name: "node2" }),
1023
- ]);
1041
+ it("calls onFinished", async () => {
1042
+ const handleFinished = jest.fn();
1024
1043
 
1025
- resolve();
1026
- };
1044
+ given.$tree.tree("reload", handleFinished);
1027
1045
 
1028
- given.$tree.tree("reload", handleFinished);
1029
- }));
1046
+ await waitFor(() => expect(handleFinished).toHaveBeenCalledWith());
1047
+
1048
+ expect(given.$tree).toHaveTreeStructure([
1049
+ expect.objectContaining({ name: "node1" }),
1050
+ expect.objectContaining({ name: "node2" }),
1051
+ ]);
1052
+ });
1030
1053
  });
1031
1054
  });
1032
1055
 
@@ -1149,7 +1172,7 @@ describe("selectNode", () => {
1149
1172
 
1150
1173
  it("selects the node and deselects the previous node", () => {
1151
1174
  expect(given.node1.element).toBeSelected();
1152
- expect(given.node2.element).notToBeSelected();
1175
+ expect(given.node2.element).not.toBeSelected();
1153
1176
  });
1154
1177
  });
1155
1178
 
@@ -1170,7 +1193,7 @@ describe("selectNode", () => {
1170
1193
 
1171
1194
  it("deselects the node", () => {
1172
1195
  given.$tree.tree("selectNode", given.node1);
1173
- expect(given.node1.element).notToBeSelected();
1196
+ expect(given.node1.element).not.toBeSelected();
1174
1197
  });
1175
1198
  });
1176
1199
 
@@ -1436,13 +1459,7 @@ describe("updateNode", () => {
1436
1459
  });
1437
1460
 
1438
1461
  it("keeps the focus on the node", () => {
1439
- expect(document.activeElement).not.toBeNil();
1440
- expect(
1441
- given.$tree.tree(
1442
- "getNodeByHtmlElement",
1443
- document.activeElement as HTMLElement
1444
- )
1445
- ).not.toBeNil();
1462
+ expect(given.node.element).toBeFocused();
1446
1463
  });
1447
1464
  });
1448
1465
  });
@@ -1,6 +1,5 @@
1
- import * as $ from "jquery";
2
1
  import getGiven from "givens";
3
- import { screen } from "@testing-library/dom";
2
+ import { screen, waitFor } from "@testing-library/dom";
4
3
  import { rest } from "msw";
5
4
  import { setupServer } from "msw/node";
6
5
  import "../../tree.jquery";
@@ -9,17 +8,25 @@ import { titleSpan, togglerLink } from "../support/testUtil";
9
8
 
10
9
  const context = describe;
11
10
 
11
+ const server = setupServer();
12
+
13
+ beforeAll(() => server.listen());
14
+
12
15
  beforeEach(() => {
13
16
  $("body").append('<div id="tree1"></div>');
14
17
  });
15
18
 
16
19
  afterEach(() => {
20
+ server.resetHandlers();
21
+
17
22
  const $tree = $("#tree1");
18
23
  $tree.tree("destroy");
19
24
  $tree.remove();
20
25
  localStorage.clear();
21
26
  });
22
27
 
28
+ afterAll(() => server.close());
29
+
23
30
  describe("autoEscape", () => {
24
31
  interface Vars {
25
32
  autoEscape: boolean;
@@ -187,10 +194,8 @@ describe("dataUrl", () => {
187
194
  },
188
195
  ];
189
196
 
190
- let server: ReturnType<typeof setupServer> | null = null;
191
-
192
- beforeAll(() => {
193
- server = setupServer(
197
+ beforeEach(() => {
198
+ server.use(
194
199
  rest.get("/tree/", (request, response, ctx) => {
195
200
  const nodeName = request.headers.get("node");
196
201
  const data = nodeName ? [nodeName] : exampleData;
@@ -198,11 +203,6 @@ describe("dataUrl", () => {
198
203
  return response(ctx.status(200), ctx.json(data));
199
204
  })
200
205
  );
201
- server.listen();
202
- });
203
-
204
- afterAll(() => {
205
- server?.close();
206
206
  });
207
207
 
208
208
  interface Vars {
@@ -348,31 +348,28 @@ describe("onLoadFailed", () => {
348
348
  given("$tree", () => $("#tree1"));
349
349
 
350
350
  context("when the loading fails", () => {
351
- let server: ReturnType<typeof setupServer> | null = null;
352
-
353
- beforeAll(() => {
354
- server = setupServer(
351
+ beforeEach(() => {
352
+ server.use(
355
353
  rest.get("/tree/", (_request, response, ctx) =>
356
354
  response(ctx.status(500), ctx.body("Internal server error"))
357
355
  )
358
356
  );
359
- server.listen();
360
357
  });
361
358
 
362
- afterAll(() => {
363
- server?.close();
364
- });
359
+ it("calls onLoadFailed", async () => {
360
+ const onLoadFailed = jest.fn();
361
+
362
+ given.$tree.tree({
363
+ dataUrl: "/tree/",
364
+ onLoadFailed,
365
+ });
365
366
 
366
- it("calls onLoadFailed", () =>
367
- new Promise<void>((done) => {
368
- given.$tree.tree({
369
- dataUrl: "/tree/",
370
- onLoadFailed: (jqXHR) => {
371
- expect(jqXHR.status).toBe(500);
372
- done();
373
- },
374
- });
375
- }));
367
+ await waitFor(() => {
368
+ expect(onLoadFailed).toHaveBeenCalledWith(
369
+ expect.objectContaining({ status: 500 })
370
+ );
371
+ });
372
+ });
376
373
  });
377
374
  });
378
375
 
@@ -391,7 +388,7 @@ describe("rtl", () => {
391
388
  });
392
389
 
393
390
  it("has a different closed icon", () => {
394
- expect(togglerLink(given.node1.element).text()).toEqual("◀");
391
+ expect(togglerLink(given.node1.element).text()).toBe("◀");
395
392
  });
396
393
  });
397
394
 
@@ -402,7 +399,7 @@ describe("rtl", () => {
402
399
  });
403
400
 
404
401
  it("has a different closed icon", () => {
405
- expect(togglerLink(given.node1.element).text()).toEqual("◀");
402
+ expect(togglerLink(given.node1.element).text()).toBe("◀");
406
403
  });
407
404
  });
408
405
  });
@@ -434,7 +431,7 @@ describe("saveState", () => {
434
431
  given("saveState", () => true);
435
432
 
436
433
  it("saves the state to local storage", () => {
437
- expect(localStorage.getItem("tree")).toEqual(
434
+ expect(localStorage.getItem("tree")).toBe(
438
435
  '{"open_nodes":[123],"selected_node":[123]}'
439
436
  );
440
437
  });
@@ -444,7 +441,7 @@ describe("saveState", () => {
444
441
  given("saveState", () => "my-state");
445
442
 
446
443
  it("uses the string as a key", () => {
447
- expect(localStorage.getItem("my-state")).toEqual(
444
+ expect(localStorage.getItem("my-state")).toBe(
448
445
  '{"open_nodes":[123],"selected_node":[123]}'
449
446
  );
450
447
  });
@@ -855,13 +855,13 @@ describe("hasChildren", () => {
855
855
  });
856
856
 
857
857
  it("returns true", () => {
858
- expect(given.node.hasChildren()).toEqual(true);
858
+ expect(given.node.hasChildren()).toBe(true);
859
859
  });
860
860
  });
861
861
 
862
862
  context("when a node doesn't have children", () => {
863
863
  it("returns false", () => {
864
- expect(given.node.hasChildren()).toEqual(false);
864
+ expect(given.node.hasChildren()).toBe(false);
865
865
  });
866
866
  });
867
867
  });
@@ -1,4 +1,5 @@
1
1
  import treeStructure from "./treeStructure";
2
+ import { titleSpan } from "./testUtil";
2
3
 
3
4
  const assertJqTreeFolder = ($el: JQuery<HTMLElement>) => {
4
5
  /* istanbul ignore if */
@@ -8,15 +9,6 @@ const assertJqTreeFolder = ($el: JQuery<HTMLElement>) => {
8
9
  };
9
10
 
10
11
  expect.extend({
11
- notToBeSelected(el: HTMLElement | JQuery<HTMLElement>) {
12
- const $el = jQuery(el);
13
-
14
- /* istanbul ignore next */
15
- return {
16
- message: () => "The node is selected",
17
- pass: !$el.hasClass("jqtree-selected"),
18
- };
19
- },
20
12
  toBeClosed(el: HTMLElement | JQuery<HTMLElement>) {
21
13
  const $el = jQuery(el);
22
14
  assertJqTreeFolder($el);
@@ -27,6 +19,13 @@ expect.extend({
27
19
  pass: $el.hasClass("jqtree-closed"),
28
20
  };
29
21
  },
22
+ toBeFocused(el: HTMLElement | JQuery<HTMLElement>) {
23
+ /* istanbul ignore next */
24
+ return {
25
+ message: () => "The is node is not focused",
26
+ pass: document.activeElement === titleSpan(el)[0],
27
+ };
28
+ },
30
29
  toBeOpen(el: HTMLElement | JQuery<HTMLElement>) {
31
30
  const $el = jQuery(el);
32
31
  assertJqTreeFolder($el);
@@ -22,12 +22,10 @@ declare namespace JQTreeMatchers {
22
22
  declare namespace jest {
23
23
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
24
24
  interface Matchers<R> {
25
- notToBeSelected(): boolean;
26
25
  toBeClosed(): boolean;
26
+ toBeFocused(): boolean;
27
27
  toBeOpen(): boolean;
28
28
  toBeSelected(): boolean;
29
- toHaveTreeStructure(
30
- treeStructure: JQTreeMatchers.TreeStructure
31
- ): boolean;
29
+ toHaveTreeStructure(treeStructure: any): boolean;
32
30
  }
33
31
  }
@@ -1,4 +1,5 @@
1
- import * as jQuery from "jquery";
1
+ import jQuery from "jquery";
2
2
  import "./jqTreeMatchers";
3
3
 
4
+ (window as any).$ = jQuery; // eslint-disable-line @typescript-eslint/no-unsafe-member-access
4
5
  (window as any).jQuery = jQuery; // eslint-disable-line @typescript-eslint/no-unsafe-member-access
@@ -1,21 +1,26 @@
1
1
  type NodeId = number | string;
2
2
 
3
- type DefaultRecord = Record<string, unknown>;
4
- type NodeData = string | DefaultRecord;
3
+ interface NodeRecord {
4
+ [key: string]: unknown;
5
+ id?: NodeId;
6
+ children?: NodeData[];
7
+ }
8
+
9
+ type NodeData = string | NodeRecord;
5
10
 
6
11
  type IterateCallback = (node: INode, level: number) => boolean;
7
12
 
8
- declare class INode {
9
- public id?: NodeId;
10
- public name: string;
11
- public children: INode[];
12
- public element: HTMLElement;
13
- public is_open: boolean;
14
- public parent: INode | null;
13
+ interface INode {
14
+ id?: NodeId;
15
+ name: string;
16
+ children: INode[];
17
+ element: HTMLElement;
18
+ is_open: boolean;
19
+ parent: INode | null;
15
20
 
16
21
  [key: string]: unknown;
17
22
 
18
- public iterate(callback: IterateCallback): void;
23
+ iterate(callback: IterateCallback): void;
19
24
  }
20
25
 
21
26
  type DataUrlFunction = (node?: Node) => JQuery.AjaxSettings;
@@ -41,7 +46,7 @@ interface IJQTreeOptions {
41
46
  buttonLeft?: boolean;
42
47
  closedIcon?: string | Element;
43
48
  data?: NodeData[];
44
- dataFilter?: (data: unknown) => NodeData[];
49
+ dataFilter?: (data: NodeData[]) => NodeData[];
45
50
  dataUrl?: DataUrl;
46
51
  dragAndDrop?: boolean;
47
52
  nodeClass?: any;
@@ -57,7 +62,7 @@ interface IJQTreeOptions {
57
62
  onGetStateFromStorage?: () => string;
58
63
  onSetStateFromStorage?: (data: string) => void;
59
64
  openedIcon?: string | Element;
60
- openFolderDelay?: number;
65
+ openFolderDelay?: number | false;
61
66
  rtl?: boolean;
62
67
  selectable?: boolean;
63
68
  saveState?: boolean | string;
@@ -135,13 +140,14 @@ interface IJQTreePlugin {
135
140
  onFinished?: (node: INode) => void
136
141
  ): JQuery;
137
142
  (behavior: "prependNode", newNodeInfo: NodeData, parentNode?: INode): INode;
143
+ (behavior: "refresh"): JQuery;
138
144
  (behavior: "reload", onFinished?: () => void): JQuery;
139
145
  (behavior: "removeFromSelection", node: INode): JQuery;
140
146
  (behavior: "removeNode", node: INode): JQuery;
141
147
  (behavior: "scrollToNode", node: INode): JQuery;
142
148
  (behavior: "selectNode", node: INode | null): JQuery;
143
149
  (behavior: "setOption", option: string, value: unknown): JQuery;
144
- (behavior: "setState", options: DefaultRecord): JQuery;
150
+ (behavior: "setState", options: Record<string, unknown>): JQuery;
145
151
  (behavior: "toggle", node: INode, slideParam?: boolean): JQuery;
146
152
  (behavior: "toJson"): string;
147
153
  (behavior: "updateNode", node: INode, data: NodeData): JQuery;
@@ -1,23 +1,19 @@
1
1
  import __version__ from "./version";
2
- import * as jQueryProxy from "jquery";
3
2
  import { DragAndDropHandler } from "./dragAndDropHandler";
4
3
  import ElementsRenderer from "./elementsRenderer";
5
4
  import DataLoader, { HandleFinishedLoading } from "./dataLoader";
6
5
  import KeyHandler from "./keyHandler";
7
6
  import MouseWidget from "./mouse.widget";
8
7
  import { PositionInfo } from "./types";
9
- import SaveStateHandler from "./saveStateHandler";
8
+ import SaveStateHandler, { SavedState } from "./saveStateHandler";
10
9
  import ScrollHandler from "./scrollHandler";
11
10
  import SelectNodeHandler from "./selectNodeHandler";
12
11
  import SimpleWidget from "./simple.widget";
13
- import { Node, NodeId, getPosition, NodeData } from "./node";
12
+ import { Node, getPosition } from "./node";
14
13
  import { isFunction } from "./util";
15
14
  import { FolderElement, NodeElement, OnFinishOpenNode } from "./nodeElement";
16
15
  import { JQTreeOptions } from "./jqtreeOptions";
17
16
 
18
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
19
- const jQuery: JQueryStatic = (<any>jQueryProxy).default || jQueryProxy;
20
-
21
17
  interface ClickTarget {
22
18
  node: Node;
23
19
  type: "button" | "label";
@@ -167,6 +163,11 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
167
163
  return this.element;
168
164
  }
169
165
 
166
+ public refresh(): JQuery {
167
+ this._refreshElements(null);
168
+ return this.element;
169
+ }
170
+
170
171
  public getNodeById(nodeId: NodeId): Node | null {
171
172
  return this.tree.getNodeById(nodeId);
172
173
  }
@@ -366,19 +367,12 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
366
367
  node.removeChildren();
367
368
 
368
369
  if (data.children.length) {
369
- node.loadFromData(data.children);
370
+ node.loadFromData(data.children as Node[]);
370
371
  }
371
372
  }
372
373
 
373
- const mustSetFocus = this.selectNodeHandler.isFocusOnTree();
374
- const mustSelect = this.isSelectedNodeInSubtree(node);
375
-
376
374
  this._refreshElements(node);
377
375
 
378
- if (mustSelect) {
379
- this.selectCurrentNode(mustSetFocus);
380
- }
381
-
382
376
  return this.element;
383
377
  }
384
378
 
@@ -486,7 +480,7 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
486
480
  }
487
481
 
488
482
  public setOption(option: string, value: unknown): JQuery {
489
- ((this.options as unknown) as Record<string, unknown>)[option] = value;
483
+ (this.options as unknown as Record<string, unknown>)[option] = value;
490
484
  return this.element;
491
485
  }
492
486
 
@@ -514,7 +508,7 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
514
508
 
515
509
  public _triggerEvent(
516
510
  eventName: string,
517
- values?: DefaultRecord
511
+ values?: Record<string, unknown>
518
512
  ): JQuery.Event {
519
513
  const event = jQuery.Event(eventName, values);
520
514
  this.element.trigger(event);
@@ -528,7 +522,7 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
528
522
  ): void {
529
523
  const doOpenNode = (
530
524
  _node: Node,
531
- _slide: any,
525
+ _slide: boolean,
532
526
  _onFinished: OnFinishOpenNode | null
533
527
  ): void => {
534
528
  const folderElement = new FolderElement(_node, this);
@@ -564,8 +558,17 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
564
558
  from_node: redraw this subtree
565
559
  */
566
560
  public _refreshElements(fromNode: Node | null): void {
561
+ const mustSetFocus = this.selectNodeHandler.isFocusOnTree();
562
+ const mustSelect = fromNode
563
+ ? this.isSelectedNodeInSubtree(fromNode)
564
+ : false;
565
+
567
566
  this.renderer.render(fromNode);
568
567
 
568
+ if (mustSelect) {
569
+ this.selectCurrentNode(mustSetFocus);
570
+ }
571
+
569
572
  this._triggerEvent("tree.refresh");
570
573
  }
571
574
 
@@ -737,7 +740,7 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
737
740
  }
738
741
  }
739
742
 
740
- private initTree(data: any): void {
743
+ private initTree(data: NodeData[]): void {
741
744
  const doInit = (): void => {
742
745
  if (!this.isInitialized) {
743
746
  this.isInitialized = true;
@@ -784,9 +787,8 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
784
787
  if (!state) {
785
788
  return [false, false];
786
789
  } else {
787
- const mustLoadOnDemand = this.saveStateHandler.setInitialState(
788
- state
789
- );
790
+ const mustLoadOnDemand =
791
+ this.saveStateHandler.setInitialState(state);
790
792
 
791
793
  // return true: the state is restored
792
794
  return [true, mustLoadOnDemand];
@@ -901,7 +903,9 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
901
903
  }
902
904
  }
903
905
 
904
- private handleClick = (e: JQuery.ClickEvent): void => {
906
+ private handleClick = (
907
+ e: JQuery.ClickEvent<HTMLElement, any, HTMLElement, HTMLElement>
908
+ ): void => {
905
909
  const clickTarget = this.getClickTarget(e.target);
906
910
 
907
911
  if (clickTarget) {
@@ -924,7 +928,9 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
924
928
  }
925
929
  };
926
930
 
927
- private handleDblclick = (e: JQuery.DoubleClickEvent): void => {
931
+ private handleDblclick = (
932
+ e: JQuery.DoubleClickEvent<HTMLElement, any, HTMLElement, HTMLElement>
933
+ ): void => {
928
934
  const clickTarget = this.getClickTarget(e.target);
929
935
 
930
936
  if (clickTarget?.type === "label") {
@@ -974,7 +980,9 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
974
980
  }
975
981
  }
976
982
 
977
- private handleContextmenu = (e: JQuery.ContextMenuEvent) => {
983
+ private handleContextmenu = (
984
+ e: JQuery.ContextMenuEvent<HTMLElement, any, HTMLElement, HTMLElement>
985
+ ) => {
978
986
  const $div = jQuery(e.target).closest("ul.jqtree-tree .jqtree-element");
979
987
  if ($div.length) {
980
988
  const node = this.getNode($div);
@@ -1129,15 +1137,14 @@ export class JqTreeWidget extends MouseWidget<JQTreeOptions> {
1129
1137
  }
1130
1138
 
1131
1139
  private deselectNodes(parentNode: Node): void {
1132
- const selectedNodesUnderParent = this.selectNodeHandler.getSelectedNodesUnder(
1133
- parentNode
1134
- );
1140
+ const selectedNodesUnderParent =
1141
+ this.selectNodeHandler.getSelectedNodesUnder(parentNode);
1135
1142
  for (const n of selectedNodesUnderParent) {
1136
1143
  this.selectNodeHandler.removeFromSelection(n);
1137
1144
  }
1138
1145
  }
1139
1146
 
1140
- private loadSubtree(data: any[], parentNode: Node): void {
1147
+ private loadSubtree(data: NodeData[], parentNode: Node): void {
1141
1148
  parentNode.loadFromData(data);
1142
1149
 
1143
1150
  parentNode.load_on_demand = false;
package/src/version.ts CHANGED
@@ -1,3 +1,3 @@
1
- const version = "1.6.0";
1
+ const version = "1.6.2";
2
2
 
3
3
  export default version;