jqtree 1.9.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/bower.json +1 -1
  2. package/js-coverage/coverage-final.json +13 -0
  3. package/lib/jqtreeOptions.js +1 -0
  4. package/lib/tree.jquery.d.js +0 -0
  5. package/lib/tree.jquery.js +394 -0
  6. package/lib/triggerJQueryEvent.js +68 -0
  7. package/lib/typings.d.js +1 -0
  8. package/lib/version.js +2 -0
  9. package/package.json +20 -15
  10. package/pnpm-workspace.yaml +0 -1
  11. package/src/jqtreeOptions.ts +20 -62
  12. package/src/tree.jquery.d.ts +80 -92
  13. package/src/tree.jquery.ts +157 -967
  14. package/src/triggerJQueryEvent.ts +97 -0
  15. package/src/version.ts +2 -2
  16. package/tree.jquery.debug.js +4209 -3246
  17. package/tree.jquery.debug.js.map +1 -1
  18. package/tree.jquery.js +22 -2
  19. package/tree.jquery.js.map +1 -1
  20. package/src/animation.ts +0 -48
  21. package/src/dataLoader.ts +0 -143
  22. package/src/dragAndDropHandler/binarySearch.ts +0 -27
  23. package/src/dragAndDropHandler/dragElement.ts +0 -54
  24. package/src/dragAndDropHandler/generateHitAreas.ts +0 -195
  25. package/src/dragAndDropHandler/index.ts +0 -432
  26. package/src/dragAndDropHandler/iterateVisibleNodes.ts +0 -91
  27. package/src/dragAndDropHandler/types.ts +0 -12
  28. package/src/elementsRenderer.ts +0 -359
  29. package/src/jqtreeMethodTypes.ts +0 -40
  30. package/src/keyHandler.ts +0 -139
  31. package/src/mouseHandler.ts +0 -383
  32. package/src/mouseUtils.ts +0 -23
  33. package/src/node.ts +0 -653
  34. package/src/nodeElement/borderDropHint.ts +0 -32
  35. package/src/nodeElement/folderElement.ts +0 -138
  36. package/src/nodeElement/ghostDropHint.ts +0 -74
  37. package/src/nodeElement/index.ts +0 -94
  38. package/src/nodeUtils.ts +0 -10
  39. package/src/positionUtils.ts +0 -18
  40. package/src/saveStateHandler.ts +0 -276
  41. package/src/scrollHandler/containerScrollParent.ts +0 -71
  42. package/src/scrollHandler/createScrollParent.ts +0 -51
  43. package/src/scrollHandler/documentScrollParent.ts +0 -104
  44. package/src/scrollHandler/scrollParent.ts +0 -117
  45. package/src/scrollHandler.ts +0 -55
  46. package/src/selectNodeHandler.ts +0 -111
  47. package/src/util.ts +0 -5
@@ -0,0 +1,394 @@
1
+ import TreeElement from "tree-element";
2
+ import triggerJQueryEvent from "./triggerJQueryEvent";
3
+ import __version__ from "./version";
4
+ const NODE_PARAM_IS_EMPTY = "Node parameter is empty";
5
+ const PARAM_IS_EMPTY = "Parameter is empty: ";
6
+ export class JqTreeWidget {
7
+ _element;
8
+ _inputOptions;
9
+ _treeElement;
10
+ constructor(el, options) {
11
+ this._element = jQuery(el);
12
+ this._inputOptions = options;
13
+ }
14
+ addNodeAfter(newNodeInfo, existingNode) {
15
+ return this._treeElement.addNodeAfter(newNodeInfo, existingNode);
16
+ }
17
+ addNodeBefore(newNodeInfo, existingNode) {
18
+ if (!existingNode) {
19
+ throw Error(PARAM_IS_EMPTY + "existingNode");
20
+ }
21
+ return this._treeElement.addNodeBefore(newNodeInfo, existingNode);
22
+ }
23
+ addParentNode(newNodeInfo, existingNode) {
24
+ if (!existingNode) {
25
+ throw Error(PARAM_IS_EMPTY + "existingNode");
26
+ }
27
+ return this._treeElement.addParentNode(newNodeInfo, existingNode);
28
+ }
29
+ addToSelection(node, mustSetFocus) {
30
+ if (!node) {
31
+ throw Error(NODE_PARAM_IS_EMPTY);
32
+ }
33
+ this._treeElement.addToSelection(node, mustSetFocus);
34
+ return this._element;
35
+ }
36
+ appendNode(newNodeInfo, parentNodeParam) {
37
+ const parentNode = parentNodeParam ?? this._treeElement.tree;
38
+ return this._treeElement.appendNode(newNodeInfo, parentNode);
39
+ }
40
+ closeNode(node, slideParam) {
41
+ if (!node) {
42
+ throw Error(NODE_PARAM_IS_EMPTY);
43
+ }
44
+ this._treeElement.closeNode(node, slideParam ?? undefined);
45
+ return this._element;
46
+ }
47
+ deinit() {
48
+ this._element.off();
49
+ this._treeElement.deinit();
50
+ }
51
+ destroy() {
52
+ this.deinit();
53
+ }
54
+ getNodeByCallback(callback) {
55
+ return this._treeElement.getNodeByCallback(callback);
56
+ }
57
+ getNodeByHtmlElement(inputElement) {
58
+ const element = inputElement instanceof HTMLElement ? inputElement : inputElement.get(0);
59
+ if (!element) {
60
+ return null;
61
+ }
62
+ return this._treeElement.getNode(element);
63
+ }
64
+ getNodeById(nodeId) {
65
+ return this._treeElement.getNodeById(nodeId);
66
+ }
67
+ getNodeByName(name) {
68
+ return this._treeElement.getNodeByName(name);
69
+ }
70
+ getNodeByNameMustExist(name) {
71
+ return this._treeElement.getNodeByNameMustExist(name);
72
+ }
73
+ getNodesByProperty(key, value) {
74
+ return this._treeElement.getNodesByProperty(key, value);
75
+ }
76
+ getSelectedNode() {
77
+ return this._treeElement.getSelectedNode();
78
+ }
79
+ getSelectedNodes() {
80
+ return this._treeElement.getSelectedNodes();
81
+ }
82
+ getState() {
83
+ return this._treeElement.getState();
84
+ }
85
+ getStateFromStorage() {
86
+ return this._treeElement.getStateFromStorage();
87
+ }
88
+ getTree() {
89
+ return this._treeElement.getTree();
90
+ }
91
+ getVersion() {
92
+ return __version__;
93
+ }
94
+ init() {
95
+ const htmlElement = this._element.get(0);
96
+ this._element.on("tree.loading_data", this._handleLoadingDataEvent.bind(this));
97
+ this._element.on("tree.load_failed", this._handleLoadFailedEvent.bind(this));
98
+ const options = this._transformInputOptions();
99
+ const treeElement = new TreeElement({
100
+ ...options,
101
+ classPrefix: "jqtree",
102
+ commonClassName: "jqtree_common",
103
+ htmlElement,
104
+ overrideTriggerEventProvider: triggerJQueryEvent,
105
+ treeClassName: "jqtree-tree"
106
+ });
107
+ this._treeElement = treeElement;
108
+ }
109
+ isDragging() {
110
+ return this._treeElement.isDragging();
111
+ }
112
+ isNodeSelected(node) {
113
+ if (!node) {
114
+ throw Error(NODE_PARAM_IS_EMPTY);
115
+ }
116
+ return this._treeElement.isNodeSelected(node);
117
+ }
118
+ loadData(data, parentNode) {
119
+ this._treeElement.loadData(data, parentNode);
120
+ return this._element;
121
+ }
122
+
123
+ /*
124
+ signatures:
125
+ - loadDataFromUrl(url, parent_node=null, on_finished=null)
126
+ loadDataFromUrl('/my_data');
127
+ loadDataFromUrl('/my_data', node1);
128
+ loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });
129
+ loadDataFromUrl('/my_data', null, function() { console.log('finished'); });
130
+ - loadDataFromUrl(parent_node=null, on_finished=null)
131
+ loadDataFromUrl();
132
+ loadDataFromUrl(node1);
133
+ loadDataFromUrl(null, function() { console.log('finished'); });
134
+ loadDataFromUrl(node1, function() { console.log('finished'); });
135
+ */
136
+ loadDataFromUrl(param1, param2, param3) {
137
+ let parentNode;
138
+ let onFinishedLoading;
139
+ let url;
140
+
141
+ // first parameter is url
142
+ if (typeof param1 === "string") {
143
+ url = param1;
144
+ parentNode = param2;
145
+ onFinishedLoading = param3;
146
+ } else {
147
+ // first parameter is not url
148
+ parentNode = param1;
149
+ onFinishedLoading = param2;
150
+ }
151
+ this._treeElement.loadDataFromUrl(url, parentNode).then(() => {
152
+ if (onFinishedLoading) {
153
+ onFinishedLoading();
154
+ }
155
+ }).catch(error => {
156
+ throw error;
157
+ });
158
+ return this._element;
159
+ }
160
+ moveDown() {
161
+ this._treeElement.moveDown();
162
+ return this._element;
163
+ }
164
+ moveNode(node, targetNode, position) {
165
+ if (!node) {
166
+ throw Error(NODE_PARAM_IS_EMPTY);
167
+ }
168
+ if (!targetNode) {
169
+ throw Error(PARAM_IS_EMPTY + "targetNode");
170
+ }
171
+ if (!position) {
172
+ throw Error(PARAM_IS_EMPTY + "position");
173
+ }
174
+ this._treeElement.moveNode(node, targetNode, position);
175
+ return this._element;
176
+ }
177
+ moveUp() {
178
+ this._treeElement.moveUp();
179
+ return this._element;
180
+ }
181
+ openNode(node, param1, param2) {
182
+ if (!node) {
183
+ throw Error(NODE_PARAM_IS_EMPTY);
184
+ }
185
+ let onFinished = null;
186
+ let slide;
187
+ if (typeof param1 === "function") {
188
+ onFinished = param1;
189
+ slide = param2;
190
+ } else {
191
+ slide = param1;
192
+ }
193
+ void this._treeElement.openNode(node, slide).then(() => {
194
+ if (onFinished) {
195
+ onFinished(node);
196
+ }
197
+ });
198
+ return this._element;
199
+ }
200
+ prependNode(newNodeInfo, parentNodeParam) {
201
+ const parentNode = parentNodeParam ?? this._treeElement.tree;
202
+ return this._treeElement.prependNode(newNodeInfo, parentNode);
203
+ }
204
+ refresh() {
205
+ this._treeElement.refresh();
206
+ return this._element;
207
+ }
208
+ reload(onFinished) {
209
+ this._treeElement.loadDataFromUrl(undefined, undefined).then(() => {
210
+ if (onFinished) {
211
+ onFinished();
212
+ }
213
+ }).catch(error => {
214
+ throw error;
215
+ });
216
+ return this._element;
217
+ }
218
+ removeFromSelection(node) {
219
+ if (!node) {
220
+ throw Error(NODE_PARAM_IS_EMPTY);
221
+ }
222
+ this._treeElement.removeFromSelection(node);
223
+ return this._element;
224
+ }
225
+ removeNode(node) {
226
+ if (!node) {
227
+ throw Error(NODE_PARAM_IS_EMPTY);
228
+ }
229
+ if (!node.parent) {
230
+ throw Error("Node has no parent");
231
+ }
232
+ this._treeElement.removeNode(node);
233
+ return this._element;
234
+ }
235
+ scrollToNode(node) {
236
+ if (!node) {
237
+ throw Error(NODE_PARAM_IS_EMPTY);
238
+ }
239
+ this._treeElement.scrollToNode(node);
240
+ return this._element;
241
+ }
242
+ selectNode(node, optionsParam) {
243
+ this._treeElement.selectNode(node, optionsParam);
244
+ return this._element;
245
+ }
246
+ setOption(option, value) {
247
+ this._treeElement.setOption(option, value);
248
+ return this._element;
249
+ }
250
+ setState(state) {
251
+ if (state) {
252
+ this._treeElement.setState(state);
253
+ }
254
+ return this._element;
255
+ }
256
+ toggle(node, slideParam = null) {
257
+ if (!node) {
258
+ throw Error(NODE_PARAM_IS_EMPTY);
259
+ }
260
+ this._treeElement.toggle(node, slideParam);
261
+ return this._element;
262
+ }
263
+ toJson() {
264
+ return this._treeElement.toJson();
265
+ }
266
+ updateNode(node, data) {
267
+ if (!node) {
268
+ throw Error(NODE_PARAM_IS_EMPTY);
269
+ }
270
+ if (!data) {
271
+ return this._element;
272
+ }
273
+ this._treeElement.updateNode(node, data);
274
+ return this._element;
275
+ }
276
+ _handleLoadFailedEvent(e) {
277
+ const jqTreeOnLoadFailed = this._inputOptions.onLoadFailed;
278
+ if (jqTreeOnLoadFailed) {
279
+ const {
280
+ response
281
+ } = e;
282
+ jqTreeOnLoadFailed(response);
283
+ }
284
+ }
285
+ _handleLoadingDataEvent(e) {
286
+ const jqTreeOnLoading = this._inputOptions.onLoading;
287
+ if (jqTreeOnLoading) {
288
+ const {
289
+ $el,
290
+ isLoading,
291
+ node
292
+ } = e;
293
+ jqTreeOnLoading(isLoading, node ?? undefined, $el);
294
+ }
295
+ }
296
+ _transformInputOptions() {
297
+ function convertToIconElement(jqtreeIconElement) {
298
+ if (jqtreeIconElement instanceof jQuery) {
299
+ return jqtreeIconElement.get(0);
300
+ } else {
301
+ return jqtreeIconElement;
302
+ }
303
+ }
304
+ const closedIcon = convertToIconElement(this._inputOptions.closedIcon);
305
+ const openedIcon = convertToIconElement(this._inputOptions.openedIcon);
306
+ let onCreateLi = undefined;
307
+ const jqTreeOnCreateLi = this._inputOptions.onCreateLi;
308
+ if (jqTreeOnCreateLi) {
309
+ onCreateLi = (node, el, isSelected) => {
310
+ jqTreeOnCreateLi(node, jQuery(el), isSelected);
311
+ };
312
+ }
313
+ let onIsMoveHandle = undefined;
314
+ const jqTreeOnIsMoveHandle = this._inputOptions.onIsMoveHandle;
315
+ if (jqTreeOnIsMoveHandle) {
316
+ onIsMoveHandle = el => jqTreeOnIsMoveHandle(jQuery(el));
317
+ }
318
+ return {
319
+ ...this._inputOptions,
320
+ closedIcon,
321
+ onCreateLi,
322
+ onIsMoveHandle,
323
+ openedIcon
324
+ };
325
+ }
326
+ }
327
+ const register = () => {
328
+ const getWidgetData = (el, dataKey) => {
329
+ const widget = jQuery.data(el, dataKey);
330
+ if (widget && widget instanceof JqTreeWidget) {
331
+ return widget;
332
+ } else {
333
+ return null;
334
+ }
335
+ };
336
+ const createWidget = ($el, options) => {
337
+ for (const el of $el.get()) {
338
+ const existingWidget = getWidgetData(el, "jqtree");
339
+ if (!existingWidget) {
340
+ const widget = new JqTreeWidget(el, options ?? {});
341
+ if (!jQuery.data(el, "jqtree")) {
342
+ jQuery.data(el, "jqtree", widget);
343
+ }
344
+
345
+ // Call init after setting data, so we can call methods
346
+ widget.init();
347
+ }
348
+ }
349
+ return $el;
350
+ };
351
+ const destroyWidget = $el => {
352
+ for (const el of $el.get()) {
353
+ const widget = getWidgetData(el, "jqtree");
354
+ if (widget) {
355
+ widget.destroy();
356
+ }
357
+ jQuery.removeData(el, "jqtree");
358
+ }
359
+ };
360
+ const callFunction = ($el, functionName, args) => {
361
+ let result = null;
362
+ for (const el of $el.get()) {
363
+ const widget = jQuery.data(el, "jqtree");
364
+ if (widget && widget instanceof JqTreeWidget) {
365
+ const widgetFunction = widget[functionName];
366
+ if (widgetFunction && typeof widgetFunction === "function") {
367
+ result = widgetFunction.apply(widget, args);
368
+ }
369
+ }
370
+ }
371
+ return result;
372
+ };
373
+
374
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
375
+ jQuery.fn.tree = function (argument1, ...args) {
376
+ if (!argument1) {
377
+ return createWidget(this, null);
378
+ } else if (typeof argument1 === "object") {
379
+ const options = argument1;
380
+ return createWidget(this, options);
381
+ } else if (typeof argument1 === "string" && argument1[0] !== "_") {
382
+ const functionName = argument1;
383
+ if (argument1 === "destroy") {
384
+ destroyWidget(this);
385
+ return undefined;
386
+ } else {
387
+ return callFunction(this, functionName, args);
388
+ }
389
+ } else {
390
+ return undefined;
391
+ }
392
+ };
393
+ };
394
+ register();
@@ -0,0 +1,68 @@
1
+ // Attributes of tree-element events that have a different name in the jqTree api.
2
+ // Attributes that are not listed here are passed on unchanged; e.g. 'node' and
3
+ // 'isLoading'.
4
+ const attributeNames = {
5
+ deselectedNode: "deselected_node",
6
+ moveInfo: "move_info",
7
+ originalEvent: "click_event",
8
+ parentNode: "parent_node",
9
+ treeData: "tree_data"
10
+ };
11
+
12
+ // Attributes of the move info of the tree.move event.
13
+ const moveInfoAttributeNames = {
14
+ doMove: "do_move",
15
+ movedNode: "moved_node",
16
+ originalEvent: "original_event",
17
+ previousParent: "previous_parent",
18
+ targetNode: "target_node"
19
+ };
20
+ const convertAttributes = (values, names) => Object.fromEntries(Object.entries(values).map(([key, value]) => [names[key] ?? key, value]));
21
+ const convertValues = values => {
22
+ const result = convertAttributes(values, attributeNames);
23
+ if (result.move_info) {
24
+ result.move_info = convertAttributes(result.move_info, moveInfoAttributeNames);
25
+ }
26
+ return result;
27
+ };
28
+ const triggerJQueryEvent = (element, eventName, inputValues) => {
29
+ const values = inputValues ? convertValues(inputValues) : {};
30
+ if (values.element) {
31
+ values.$el = jQuery(values.element);
32
+ delete values.element;
33
+ }
34
+ let event;
35
+ switch (eventName) {
36
+ case "tree.deselect":
37
+ event = jQuery.Event("tree.select", {
38
+ node: null,
39
+ previous_node: values.node
40
+ });
41
+ break;
42
+ case "tree.loaded_data":
43
+ event = jQuery.Event("tree.loading_data", {
44
+ ...values,
45
+ isLoading: false,
46
+ node: values.node ?? null
47
+ });
48
+ break;
49
+ case "tree.loading_data":
50
+ event = jQuery.Event("tree.loading_data", {
51
+ ...values,
52
+ isLoading: true,
53
+ node: values.node ?? null
54
+ });
55
+ break;
56
+ case "tree.set_data":
57
+ values.parent_node = values.node;
58
+ delete values.node;
59
+ event = jQuery.Event("tree.load_data", values);
60
+ break;
61
+ default:
62
+ event = jQuery.Event(eventName, values);
63
+ break;
64
+ }
65
+ jQuery(element).trigger(event);
66
+ return !event.isDefaultPrevented();
67
+ };
68
+ export default triggerJQueryEvent;
@@ -0,0 +1 @@
1
+ /// <reference path="./tree.jquery.d.ts" />
package/lib/version.js ADDED
@@ -0,0 +1,2 @@
1
+ const version = "2.0.0";
2
+ export default version;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jqtree",
3
- "version": "1.9.1",
3
+ "version": "2.0.0",
4
4
  "description": "Tree widget for jQuery",
5
5
  "keywords": [
6
6
  "jquery-plugin",
@@ -16,29 +16,33 @@
16
16
  },
17
17
  "scripts": {
18
18
  "ci": "pnpm lint && pnpm tsc && pnpm test",
19
- "vitest": "vitest run --coverage --config test/vitest.config.ts",
20
- "vitest-watch": "vitest --config test/vitest.config.ts",
19
+ "vitest": "vitest run --coverage --config test/vitest.config.mts",
20
+ "vitest-watch": "vitest --config test/vitest.config.mts",
21
21
  "lint": "eslint src playwright test",
22
22
  "production": "./config/production",
23
23
  "devserver": "SERVE=true rollup --config config/rollup.config.mjs --watch",
24
24
  "devserver-with-coverage": "COVERAGE=true SERVE=true rollup --config config/rollup.config.mjs",
25
25
  "build-with-coverage": "COVERAGE=true rollup --config config/rollup.config.mjs",
26
+ "bump-version": "./config/bump-version",
26
27
  "prettier": "prettier src/*.ts --write --tab-width 4",
27
28
  "tsc": "tsc --noEmit --project tsconfig.json",
28
29
  "playwright": "pnpm build-with-coverage && playwright test --config playwright/playwright.config.js",
29
30
  "test": "pnpm vitest && pnpm playwright"
30
31
  },
32
+ "dependencies": {
33
+ "tree-element": "^0.1.0"
34
+ },
31
35
  "peerDependencies": {
32
36
  "jquery": ">= 3"
33
37
  },
34
38
  "devDependencies": {
35
- "@babel/cli": "^8.0.4",
36
- "@babel/core": "^8.0.1",
37
- "@babel/preset-env": "^8.0.2",
39
+ "@babel/cli": "^8.0.5",
40
+ "@babel/core": "^8.0.5",
41
+ "@babel/preset-env": "^8.0.5",
38
42
  "@babel/preset-typescript": "^8.0.1",
39
- "@cspell/eslint-plugin": "^10.2.1",
43
+ "@cspell/eslint-plugin": "^10.3.0",
40
44
  "@eslint/js": "^10.0.1",
41
- "@playwright/test": "^1.62.1",
45
+ "@playwright/test": "^1.63.0",
42
46
  "@rollup/plugin-babel": "^7.1.0",
43
47
  "@rollup/plugin-node-resolve": "^16.0.3",
44
48
  "@rollup/plugin-terser": "^1.0.0",
@@ -47,17 +51,17 @@
47
51
  "@testing-library/user-event": "^14.6.7",
48
52
  "@types/debug": "^4.1.13",
49
53
  "@types/jquery": "^4.0.1",
50
- "@types/node": "^26.4.1",
54
+ "@types/node": "^26.5.1",
51
55
  "@vitest/coverage-istanbul": "^4.1.11",
52
56
  "@vitest/eslint-plugin": "^1.6.27",
53
- "autoprefixer": "^10.5.4",
57
+ "autoprefixer": "^10.5.6",
54
58
  "axe-core": "^4.13.0",
55
59
  "babel-plugin-istanbul": "^8.0.0",
56
- "eslint": "^10.9.1",
60
+ "eslint": "^10.10.0",
57
61
  "eslint-import-resolver-typescript": "^4.4.5",
58
62
  "eslint-plugin-import-x": "^4.17.1",
59
63
  "eslint-plugin-jest-dom": "^5.10.1",
60
- "eslint-plugin-jest-extended": "github:Aesthermortis/eslint-plugin-jest-extended#v4.0.0",
64
+ "eslint-plugin-jest-extended": "github:mbraak/eslint-plugin-jest-extended#modernize",
61
65
  "eslint-plugin-perfectionist": "^5.11.0",
62
66
  "eslint-plugin-playwright": "^2.11.0",
63
67
  "eslint-plugin-testing-library": "^7.16.2",
@@ -68,16 +72,17 @@
68
72
  "lodash": "^4.18.1",
69
73
  "msw": "^2.15.0",
70
74
  "postcss": "^8.5.28",
71
- "postcss-cli": "^11.0.1",
75
+ "postcss-cli": "^12.0.0",
72
76
  "postcss-import": "^17.0.0",
73
77
  "postcss-load-config": "^6.0.1",
74
78
  "postcss-nested": "^8.0.1",
75
79
  "prettier": "^3.9.6",
76
- "rollup": "^4.63.1",
80
+ "rollup": "^4.63.2",
77
81
  "rollup-plugin-serve": "^3.0.0",
82
+ "rollup-plugin-tsconfig-paths": "^1.5.2",
78
83
  "tslib": "^2.8.1",
79
84
  "typescript": "^6.0.3",
80
- "typescript-eslint": "^8.69.0",
85
+ "typescript-eslint": "^8.70.0",
81
86
  "vitest": "^4.1.11"
82
87
  }
83
88
  }
@@ -2,4 +2,3 @@ allowBuilds:
2
2
  esbuild: true
3
3
  msw: true
4
4
  unrs-resolver: true
5
- eslint-plugin-jest-extended@https://codeload.github.com/Aesthermortis/eslint-plugin-jest-extended/tar.gz/0b24376411f45e9f3f11f9104cc9966ebc80dd8c: true
@@ -1,71 +1,29 @@
1
- import type { AnimationSpeed } from "./animation";
2
- import type { Node } from "./node";
1
+ import type { Node, TreeElementOptions } from "tree-element";
3
2
 
4
- export type DataFilter = (data: unknown) => NodeData[];
3
+ export type JQTreeIconElement = HTMLElement | JQuery | string;
5
4
 
6
- export type DataUrl = DataUrlFunction | JQuery.AjaxSettings | string;
5
+ export type JQTreeOnCreateLi = (node: Node, el: JQuery, isSelected: boolean) => void;
7
6
 
8
- export type DragMethod = (node: Node, event: Event | Touch) => void;
7
+ export type JQTreeOnIsMoveHandle = (el: JQuery) => boolean;
9
8
 
10
- export type IconElement = HTMLElement | JQuery | string;
9
+ export type JQTreeOnLoadFailed = (el: Response) => void;
11
10
 
12
- export interface JQTreeOptions {
13
- animationSpeed: AnimationSpeed;
14
- autoEscape: boolean;
15
- autoOpen: boolean | number;
16
- buttonLeft: boolean;
17
- closedIcon?: IconElement;
18
- data?: NodeData[];
19
- dataFilter?: DataFilter;
20
- dataUrl?: DataUrl;
21
- dragAndDrop: boolean;
22
- keyboardSupport: boolean;
23
- nodeClass: typeof Node;
24
- onCanMove?: OnCanMove;
25
- onCanMoveTo?: OnCanMoveTo;
26
- onCanSelectNode?: (node: Node) => boolean;
27
- onCreateLi?: OnCreateLi;
28
- onDragMove?: DragMethod;
29
- onDragStop?: DragMethod;
30
- onGetStateFromStorage?: OnGetStateFromStorage;
31
- onIsMoveHandle?: OnIsMoveHandle;
32
- onLoadFailed?: OnLoadFailed;
33
- onLoading?: OnLoading;
34
- onSetStateFromStorage?: OnSetStateFromStorage;
35
- openedIcon?: IconElement;
36
- openFolderDelay: false | number;
37
- rtl?: boolean;
38
- saveState: boolean | string;
39
- selectable: boolean;
40
- showEmptyFolder: boolean;
41
- slide: boolean;
42
- startDndDelay?: number;
43
- tabIndex?: number;
44
- useContextMenu: boolean;
45
- }
46
-
47
- export type OnCanMove = ((node: Node) => boolean) | undefined;
48
-
49
- export type OnCanMoveTo = (
50
- node: Node,
51
- targetNode: Node,
52
- positionName: string,
53
- ) => boolean;
54
-
55
- export type OnCreateLi = (node: Node, el: JQuery, isSelected: boolean) => void;
56
-
57
- export type OnGetStateFromStorage = (() => string) | undefined;
58
-
59
- export type OnIsMoveHandle = (el: JQuery) => boolean;
60
-
61
- export type OnLoadFailed = (response: JQuery.jqXHR) => void;
62
-
63
- export type OnLoading = (
11
+ export type JQTreeOnLoading = (
64
12
  isLoading: boolean,
65
- node: Node | null,
13
+ node: Node | undefined,
66
14
  $el: JQuery,
67
15
  ) => void;
68
16
 
69
- export type OnSetStateFromStorage = ((data: string) => void) | undefined;
70
-
71
- type DataUrlFunction = (node: Node | null) => JQuery.AjaxSettings;
17
+ /* The class name options are set by jqTree itself, so they are not part of the
18
+ * jqTree options.
19
+ */
20
+ export type JQTreeOptions = Modify<Omit<TreeElementOptions, "classPrefix" | "commonClassName" | "treeClassName">, {
21
+ closedIcon?: JQTreeIconElement;
22
+ onCreateLi?: JQTreeOnCreateLi;
23
+ onIsMoveHandle?: JQTreeOnIsMoveHandle;
24
+ onLoadFailed?: JQTreeOnLoadFailed;
25
+ onLoading?: JQTreeOnLoading;
26
+ openedIcon?: JQTreeIconElement;
27
+ }>
28
+
29
+ type Modify<T, R> = Omit<T, keyof R> & R;