tree-element 0.1.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/LICENSE +201 -0
- package/README.md +221 -0
- package/lib/animation.d.ts +5 -0
- package/lib/animation.d.ts.map +1 -0
- package/lib/animation.js +39 -0
- package/lib/animation.js.map +1 -0
- package/lib/classNames.d.ts +34 -0
- package/lib/classNames.d.ts.map +1 -0
- package/lib/classNames.js +39 -0
- package/lib/classNames.js.map +1 -0
- package/lib/dataLoader.d.ts +25 -0
- package/lib/dataLoader.d.ts.map +1 -0
- package/lib/dataLoader.js +69 -0
- package/lib/dataLoader.js.map +1 -0
- package/lib/dragAndDropHandler/binarySearch.d.ts +3 -0
- package/lib/dragAndDropHandler/binarySearch.d.ts.map +1 -0
- package/lib/dragAndDropHandler/binarySearch.js +23 -0
- package/lib/dragAndDropHandler/binarySearch.js.map +1 -0
- package/lib/dragAndDropHandler/dragElement.d.ts +20 -0
- package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -0
- package/lib/dragAndDropHandler/dragElement.js +39 -0
- package/lib/dragAndDropHandler/dragElement.js.map +1 -0
- package/lib/dragAndDropHandler/generateHitAreas.d.ts +13 -0
- package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -0
- package/lib/dragAndDropHandler/generateHitAreas.js +130 -0
- package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -0
- package/lib/dragAndDropHandler/index.d.ts +76 -0
- package/lib/dragAndDropHandler/index.d.ts.map +1 -0
- package/lib/dragAndDropHandler/index.js +311 -0
- package/lib/dragAndDropHandler/index.js.map +1 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts +11 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.js +54 -0
- package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -0
- package/lib/dragAndDropHandler/types.d.ts +11 -0
- package/lib/dragAndDropHandler/types.d.ts.map +1 -0
- package/lib/elementsRenderer.d.ts +53 -0
- package/lib/elementsRenderer.d.ts.map +1 -0
- package/lib/elementsRenderer.js +251 -0
- package/lib/elementsRenderer.js.map +1 -0
- package/lib/events.d.ts +224 -0
- package/lib/events.d.ts.map +1 -0
- package/lib/index.d.ts +367 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +1098 -0
- package/lib/index.js.map +1 -0
- package/lib/keyHandler.d.ts +29 -0
- package/lib/keyHandler.d.ts.map +1 -0
- package/lib/keyHandler.js +107 -0
- package/lib/keyHandler.js.map +1 -0
- package/lib/methodTypes.d.ts +21 -0
- package/lib/methodTypes.d.ts.map +1 -0
- package/lib/mouseHandler.d.ts +60 -0
- package/lib/mouseHandler.d.ts.map +1 -0
- package/lib/mouseHandler.js +283 -0
- package/lib/mouseHandler.js.map +1 -0
- package/lib/mouseUtils.d.ts +9 -0
- package/lib/mouseUtils.d.ts.map +1 -0
- package/lib/mouseUtils.js +15 -0
- package/lib/mouseUtils.js.map +1 -0
- package/lib/node.d.ts +320 -0
- package/lib/node.d.ts.map +1 -0
- package/lib/node.js +737 -0
- package/lib/node.js.map +1 -0
- package/lib/nodeElement/borderDropHint.d.ts +9 -0
- package/lib/nodeElement/borderDropHint.d.ts.map +1 -0
- package/lib/nodeElement/borderDropHint.js +24 -0
- package/lib/nodeElement/borderDropHint.js.map +1 -0
- package/lib/nodeElement/folderElement.d.ts +22 -0
- package/lib/nodeElement/folderElement.d.ts.map +1 -0
- package/lib/nodeElement/folderElement.js +100 -0
- package/lib/nodeElement/folderElement.js.map +1 -0
- package/lib/nodeElement/ghostDropHint.d.ts +18 -0
- package/lib/nodeElement/ghostDropHint.d.ts.map +1 -0
- package/lib/nodeElement/ghostDropHint.js +67 -0
- package/lib/nodeElement/ghostDropHint.js.map +1 -0
- package/lib/nodeElement/index.d.ts +28 -0
- package/lib/nodeElement/index.d.ts.map +1 -0
- package/lib/nodeElement/index.js +66 -0
- package/lib/nodeElement/index.js.map +1 -0
- package/lib/nodeUtils.d.ts +7 -0
- package/lib/nodeUtils.d.ts.map +1 -0
- package/lib/nodeUtils.js +4 -0
- package/lib/nodeUtils.js.map +1 -0
- package/lib/options.d.ts +310 -0
- package/lib/options.d.ts.map +1 -0
- package/lib/package.json +3 -0
- package/lib/positionUtils.d.ts +8 -0
- package/lib/positionUtils.d.ts.map +1 -0
- package/lib/positionUtils.js +14 -0
- package/lib/positionUtils.js.map +1 -0
- package/lib/requestUrl.d.ts +9 -0
- package/lib/requestUrl.d.ts.map +1 -0
- package/lib/requestUrl.js +37 -0
- package/lib/requestUrl.js.map +1 -0
- package/lib/saveStateHandler.d.ts +46 -0
- package/lib/saveStateHandler.d.ts.map +1 -0
- package/lib/saveStateHandler.js +204 -0
- package/lib/saveStateHandler.js.map +1 -0
- package/lib/scrollHandler/containerScrollParent.d.ts +12 -0
- package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/containerScrollParent.js +49 -0
- package/lib/scrollHandler/containerScrollParent.js.map +1 -0
- package/lib/scrollHandler/createScrollParent.d.ts +4 -0
- package/lib/scrollHandler/createScrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/createScrollParent.js +38 -0
- package/lib/scrollHandler/createScrollParent.js.map +1 -0
- package/lib/scrollHandler/documentScrollParent.d.ts +22 -0
- package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/documentScrollParent.js +71 -0
- package/lib/scrollHandler/documentScrollParent.js.map +1 -0
- package/lib/scrollHandler/scrollParent.d.ts +26 -0
- package/lib/scrollHandler/scrollParent.d.ts.map +1 -0
- package/lib/scrollHandler/scrollParent.js +79 -0
- package/lib/scrollHandler/scrollParent.js.map +1 -0
- package/lib/scrollHandler.d.ts +20 -0
- package/lib/scrollHandler.d.ts.map +1 -0
- package/lib/scrollHandler.js +41 -0
- package/lib/scrollHandler.js.map +1 -0
- package/lib/selectNodeHandler.d.ts +38 -0
- package/lib/selectNodeHandler.d.ts.map +1 -0
- package/lib/selectNodeHandler.js +166 -0
- package/lib/selectNodeHandler.js.map +1 -0
- package/lib/setDefaultOptions.d.ts +4 -0
- package/lib/setDefaultOptions.d.ts.map +1 -0
- package/lib/setDefaultOptions.js +86 -0
- package/lib/setDefaultOptions.js.map +1 -0
- package/lib/triggerCustomEvent.d.ts +3 -0
- package/lib/triggerCustomEvent.d.ts.map +1 -0
- package/lib/triggerCustomEvent.js +13 -0
- package/lib/triggerCustomEvent.js.map +1 -0
- package/lib/util.d.ts +3 -0
- package/lib/util.d.ts.map +1 -0
- package/lib/util.js +5 -0
- package/lib/util.js.map +1 -0
- package/lib/version.d.ts +3 -0
- package/lib/version.d.ts.map +1 -0
- package/lib/version.js +5 -0
- package/lib/version.js.map +1 -0
- package/package.json +110 -0
- package/src/animation.ts +48 -0
- package/src/classNames.ts +70 -0
- package/src/dataLoader.ts +92 -0
- package/src/dragAndDropHandler/binarySearch.ts +27 -0
- package/src/dragAndDropHandler/dragElement.ts +62 -0
- package/src/dragAndDropHandler/generateHitAreas.ts +195 -0
- package/src/dragAndDropHandler/index.ts +442 -0
- package/src/dragAndDropHandler/iterateVisibleNodes.ts +91 -0
- package/src/dragAndDropHandler/types.ts +12 -0
- package/src/elementsRenderer.ts +367 -0
- package/src/events.ts +237 -0
- package/src/header.txt +16 -0
- package/src/index.ts +1290 -0
- package/src/keyHandler.ts +139 -0
- package/src/methodTypes.ts +44 -0
- package/src/mouseHandler.ts +391 -0
- package/src/mouseUtils.ts +23 -0
- package/src/node.ts +831 -0
- package/src/nodeElement/borderDropHint.ts +37 -0
- package/src/nodeElement/folderElement.ts +140 -0
- package/src/nodeElement/ghostDropHint.ts +84 -0
- package/src/nodeElement/index.ts +103 -0
- package/src/nodeUtils.ts +12 -0
- package/src/options.ts +325 -0
- package/src/positionUtils.ts +18 -0
- package/src/requestUrl.ts +41 -0
- package/src/saveStateHandler.ts +279 -0
- package/src/scrollHandler/containerScrollParent.ts +71 -0
- package/src/scrollHandler/createScrollParent.ts +51 -0
- package/src/scrollHandler/documentScrollParent.ts +104 -0
- package/src/scrollHandler/scrollParent.ts +117 -0
- package/src/scrollHandler.ts +55 -0
- package/src/selectNodeHandler.ts +192 -0
- package/src/setDefaultOptions.ts +79 -0
- package/src/triggerCustomEvent.ts +14 -0
- package/src/util.ts +5 -0
- package/src/version.ts +4 -0
- package/tree_element.css +195 -0
- package/tree_element.debug.js +4153 -0
- package/tree_element.debug.js.map +1 -0
- package/tree_element.js +21 -0
- package/tree_element.js.map +1 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
class DataLoader {
|
|
2
|
+
_abortController;
|
|
3
|
+
_classNames;
|
|
4
|
+
_dataFilter;
|
|
5
|
+
_loadData;
|
|
6
|
+
_treeElement;
|
|
7
|
+
_triggerEvent;
|
|
8
|
+
constructor({
|
|
9
|
+
classNames,
|
|
10
|
+
dataFilter,
|
|
11
|
+
loadData,
|
|
12
|
+
treeElement,
|
|
13
|
+
triggerEvent
|
|
14
|
+
}) {
|
|
15
|
+
this._abortController = new AbortController();
|
|
16
|
+
this._classNames = classNames;
|
|
17
|
+
this._dataFilter = dataFilter;
|
|
18
|
+
this._loadData = loadData;
|
|
19
|
+
this._treeElement = treeElement;
|
|
20
|
+
this._triggerEvent = triggerEvent;
|
|
21
|
+
}
|
|
22
|
+
deinit() {
|
|
23
|
+
this._abortController.abort();
|
|
24
|
+
}
|
|
25
|
+
async loadFromUrl(url, node) {
|
|
26
|
+
const element = node?.element ?? this._treeElement;
|
|
27
|
+
element.classList.add(this._classNames.loading);
|
|
28
|
+
this._triggerEvent("tree.loading_data", {
|
|
29
|
+
element,
|
|
30
|
+
node
|
|
31
|
+
});
|
|
32
|
+
const stopLoading = () => {
|
|
33
|
+
element.classList.remove(this._classNames.loading);
|
|
34
|
+
this._triggerEvent("tree.loaded_data", {
|
|
35
|
+
element,
|
|
36
|
+
node
|
|
37
|
+
});
|
|
38
|
+
};
|
|
39
|
+
const handleResponse = async response => {
|
|
40
|
+
if (response.ok) {
|
|
41
|
+
const data = await response.json();
|
|
42
|
+
stopLoading();
|
|
43
|
+
this._loadData(this._dataFilter ? this._dataFilter(data) : data, node);
|
|
44
|
+
} else {
|
|
45
|
+
stopLoading();
|
|
46
|
+
this._triggerEvent("tree.load_failed", {
|
|
47
|
+
response
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
const signal = this._abortController.signal;
|
|
52
|
+
url.setSearchParam("_", Date.now().toString());
|
|
53
|
+
return fetch(url.toString(), {
|
|
54
|
+
headers: {
|
|
55
|
+
"Content-Type": "application/json"
|
|
56
|
+
},
|
|
57
|
+
signal
|
|
58
|
+
}).then(handleResponse).catch(error => {
|
|
59
|
+
if (this._abortController.signal.aborted) {
|
|
60
|
+
// The request was aborted by deinit.
|
|
61
|
+
return;
|
|
62
|
+
}
|
|
63
|
+
throw error;
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
export { DataLoader as default };
|
|
69
|
+
//# sourceMappingURL=dataLoader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataLoader.js","sources":["../src/dataLoader.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { LoadData, TriggerEvent } from \"./methodTypes\";\nimport type { Node, NodeData } from \"./node\";\nimport type { DataFilter } from \"./options\";\nimport type RequestUrl from \"./requestUrl\";\n\ninterface DataLoaderParams {\n classNames: ClassNames;\n dataFilter?: DataFilter;\n loadData: LoadData;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private abortController: AbortController;\n private classNames: ClassNames;\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n classNames,\n dataFilter,\n loadData,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.abortController = new AbortController();\n this.classNames = classNames;\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n public deinit(): void {\n this.abortController.abort();\n }\n\n public async loadFromUrl(\n url: RequestUrl,\n node?: Node,\n ): Promise<void> {\n const element = node?.element ?? this.treeElement;\n element.classList.add(this.classNames.loading);\n\n this.triggerEvent(\"tree.loading_data\", {\n element,\n node,\n });\n\n const stopLoading = (): void => {\n element.classList.remove(this.classNames.loading);\n this.triggerEvent(\"tree.loaded_data\", {\n element,\n node,\n });\n };\n\n const handleResponse = async (response: Response): Promise<void> => {\n if (response.ok) {\n const data = (await response.json()) as NodeData[];\n\n stopLoading();\n this.loadData(\n this.dataFilter ? this.dataFilter(data) : data,\n node\n );\n } else {\n stopLoading();\n\n this.triggerEvent(\"tree.load_failed\", { response });\n }\n };\n\n const signal = this.abortController.signal;\n url.setSearchParam(\"_\", Date.now().toString());\n\n return fetch(url.toString(), { headers: { \"Content-Type\": \"application/json\" }, signal })\n .then(handleResponse)\n .catch((error: unknown) => {\n if (this.abortController.signal.aborted) {\n // The request was aborted by deinit.\n return;\n }\n\n throw error;\n });\n }\n}\n"],"names":["abortController","classNames","dataFilter","loadData","treeElement","triggerEvent"],"mappings":"AAce,MAAM,UAAU,CAAC;EACpBA,gBAAe;EACfC,WAAU;EACVC,WAAU;EACVC,SAAQ;EACRC,YAAW;EACXC,aAAY;AAEpB,EAAA,WAAW,CAAC;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,WAAW;AACX,IAAA;AACc,GAAC,EAAE;AACjB,IAAA,IAAI,CAACL,gBAAe,GAAG,IAAI,eAAe,EAAE;IAC5C,IAAI,CAACC,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,WAAU,GAAG,UAAU;IAC5B,IAAI,CAACC,SAAQ,GAAG,QAAQ;IACxB,IAAI,CAACC,YAAW,GAAG,WAAW;IAC9B,IAAI,CAACC,aAAY,GAAG,YAAY;AACpC,EAAA;AAEO,EAAA,MAAM,GAAS;AAClB,IAAA,IAAI,CAACL,gBAAe,CAAC,KAAK,EAAE;AAChC,EAAA;AAEA,EAAA,MAAa,WAAW,CACpB,GAAe,EACf,IAAW,EACE;IACb,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,IAAI,CAACI,YAAW;IACjD,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAACH,WAAU,CAAC,OAAO,CAAC;AAE9C,IAAA,IAAI,CAACI,aAAY,CAAC,mBAAmB,EAAE;MACnC,OAAO;AACP,MAAA;AACJ,KAAC,CAAC;IAEF,MAAM,WAAW,GAAG,MAAY;MAC5B,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAACJ,WAAU,CAAC,OAAO,CAAC;AACjD,MAAA,IAAI,CAACI,aAAY,CAAC,kBAAkB,EAAE;QAClC,OAAO;AACP,QAAA;AACJ,OAAC,CAAC;IACN,CAAC;AAED,IAAA,MAAM,cAAc,GAAG,MAAO,QAAkB,IAAoB;MAChE,IAAI,QAAQ,CAAC,EAAE,EAAE;AACb,QAAA,MAAM,IAAI,GAAI,MAAM,QAAQ,CAAC,IAAI,EAAiB;AAElD,QAAA,WAAW,EAAE;AACb,QAAA,IAAI,CAACF,SAAQ,CACT,IAAI,CAACD,WAAU,GAAG,IAAI,CAACA,WAAU,CAAC,IAAI,CAAC,GAAG,IAAI,EAC9C,IACJ,CAAC;AACL,MAAA,CAAC,MAAM;AACH,QAAA,WAAW,EAAE;AAEb,QAAA,IAAI,CAACG,aAAY,CAAC,kBAAkB,EAAE;AAAE,UAAA;AAAS,SAAC,CAAC;AACvD,MAAA;IACJ,CAAC;AAED,IAAA,MAAM,MAAM,GAAG,IAAI,CAACL,gBAAe,CAAC,MAAM;AAC1C,IAAA,GAAG,CAAC,cAAc,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;AAE9C,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,EAAE;AAAE,MAAA,OAAO,EAAE;AAAE,QAAA,cAAc,EAAE;OAAoB;AAAE,MAAA;KAAQ,CAAC,CACpF,IAAI,CAAC,cAAc,CAAC,CACpB,KAAK,CAAE,KAAc,IAAK;AACvB,MAAA,IAAI,IAAI,CAACA,gBAAe,CAAC,MAAM,CAAC,OAAO,EAAE;AACrC;AACA,QAAA;AACJ,MAAA;AAEA,MAAA,MAAM,KAAK;AACf,IAAA,CAAC,CAAC;AACV,EAAA;AACJ;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binarySearch.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/binarySearch.ts"],"names":[],"mappings":"AAAA,iBAAS,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,CAwB1E;AAED,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
function binarySearch(items, compareFn) {
|
|
2
|
+
let low = 0;
|
|
3
|
+
let high = items.length;
|
|
4
|
+
while (low < high) {
|
|
5
|
+
const mid = low + high >> 1;
|
|
6
|
+
const item = items[mid];
|
|
7
|
+
if (item === undefined) {
|
|
8
|
+
return null;
|
|
9
|
+
}
|
|
10
|
+
const compareResult = compareFn(item);
|
|
11
|
+
if (compareResult > 0) {
|
|
12
|
+
high = mid;
|
|
13
|
+
} else if (compareResult < 0) {
|
|
14
|
+
low = mid + 1;
|
|
15
|
+
} else {
|
|
16
|
+
return item;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export { binarySearch as default };
|
|
23
|
+
//# sourceMappingURL=binarySearch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binarySearch.js","sources":["../../src/dragAndDropHandler/binarySearch.ts"],"sourcesContent":["function binarySearch<T>(items: T[], compareFn: (a: T) => number): null | T {\n let low = 0;\n let high = items.length;\n\n while (low < high) {\n const mid = (low + high) >> 1;\n const item = items[mid];\n\n if (item === undefined) {\n return null;\n }\n\n const compareResult = compareFn(item);\n\n if (compareResult > 0) {\n high = mid;\n } else if (compareResult < 0) {\n low = mid + 1;\n } else {\n return item;\n }\n }\n\n return null;\n}\n\nexport default binarySearch;\n"],"names":[],"mappings":"AAAA,SAAS,YAAY,CAAI,KAAU,EAAE,SAA2B,EAAY;EACxE,IAAI,GAAG,GAAG,CAAC;AACX,EAAA,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM;EAEvB,OAAO,GAAG,GAAG,IAAI,EAAE;AACf,IAAA,MAAM,GAAG,GAAI,GAAG,GAAG,IAAI,IAAK,CAAC;AAC7B,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,GAAG,CAAC;IAEvB,IAAI,IAAI,KAAK,SAAS,EAAE;AACpB,MAAA,OAAO,IAAI;AACf,IAAA;AAEA,IAAA,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC;IAErC,IAAI,aAAa,GAAG,CAAC,EAAE;AACnB,MAAA,IAAI,GAAG,GAAG;AACd,IAAA,CAAC,MAAM,IAAI,aAAa,GAAG,CAAC,EAAE;MAC1B,GAAG,GAAG,GAAG,GAAG,CAAC;AACjB,IAAA,CAAC,MAAM;AACH,MAAA,OAAO,IAAI;AACf,IAAA;AACJ,EAAA;AAEA,EAAA,OAAO,IAAI;AACf;;"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { ClassNames } from "../classNames.js";
|
|
2
|
+
interface DragElementParams {
|
|
3
|
+
autoEscape: boolean;
|
|
4
|
+
classNames: ClassNames;
|
|
5
|
+
nodeName: string;
|
|
6
|
+
offsetX: number;
|
|
7
|
+
offsetY: number;
|
|
8
|
+
treeElement: HTMLElement;
|
|
9
|
+
}
|
|
10
|
+
declare class DragElement {
|
|
11
|
+
private element;
|
|
12
|
+
private offsetX;
|
|
13
|
+
private offsetY;
|
|
14
|
+
constructor({ autoEscape, classNames, nodeName, offsetX, offsetY, treeElement, }: DragElementParams);
|
|
15
|
+
move(pageX: number, pageY: number): void;
|
|
16
|
+
remove(): void;
|
|
17
|
+
private createElement;
|
|
18
|
+
}
|
|
19
|
+
export default DragElement;
|
|
20
|
+
//# sourceMappingURL=dragElement.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dragElement.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/dragElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAEhD,UAAU,iBAAiB;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,WAAW,CAAC;CAC5B;AAED,cAAM,WAAW;IACb,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,OAAO,CAAS;gBAEZ,EACR,UAAU,EACV,UAAU,EACV,QAAQ,EACR,OAAO,EACP,OAAO,EACP,WAAW,GACd,EAAE,iBAAiB;IASb,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKxC,MAAM,IAAI,IAAI;IAIrB,OAAO,CAAC,aAAa;CAkBxB;AAED,eAAe,WAAW,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
class DragElement {
|
|
2
|
+
_element;
|
|
3
|
+
_offsetX;
|
|
4
|
+
_offsetY;
|
|
5
|
+
constructor({
|
|
6
|
+
autoEscape,
|
|
7
|
+
classNames,
|
|
8
|
+
nodeName,
|
|
9
|
+
offsetX,
|
|
10
|
+
offsetY,
|
|
11
|
+
treeElement
|
|
12
|
+
}) {
|
|
13
|
+
this._offsetX = offsetX;
|
|
14
|
+
this._offsetY = offsetY;
|
|
15
|
+
this._element = this._createElement(nodeName, autoEscape, classNames);
|
|
16
|
+
treeElement.appendChild(this._element);
|
|
17
|
+
}
|
|
18
|
+
move(pageX, pageY) {
|
|
19
|
+
this._element.style.left = `${pageX - this._offsetX}px`;
|
|
20
|
+
this._element.style.top = `${pageY - this._offsetY}px`;
|
|
21
|
+
}
|
|
22
|
+
remove() {
|
|
23
|
+
this._element.remove();
|
|
24
|
+
}
|
|
25
|
+
_createElement(nodeName, autoEscape, classNames) {
|
|
26
|
+
const element = document.createElement("span");
|
|
27
|
+
element.classList.add(classNames.title, classNames.dragging);
|
|
28
|
+
if (autoEscape) {
|
|
29
|
+
element.textContent = nodeName;
|
|
30
|
+
} else {
|
|
31
|
+
element.innerHTML = nodeName;
|
|
32
|
+
}
|
|
33
|
+
element.style.position = "absolute";
|
|
34
|
+
return element;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export { DragElement as default };
|
|
39
|
+
//# sourceMappingURL=dragElement.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dragElement.js","sources":["../../src/dragAndDropHandler/dragElement.ts"],"sourcesContent":["import type { ClassNames } from \"../classNames\";\n\ninterface DragElementParams {\n autoEscape: boolean;\n classNames: ClassNames;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private element: HTMLElement;\n private offsetX: number;\n private offsetY: number;\n\n constructor({\n autoEscape,\n classNames,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.element = this.createElement(nodeName, autoEscape, classNames);\n\n treeElement.appendChild(this.element);\n }\n\n public move(pageX: number, pageY: number): void {\n this.element.style.left = `${pageX - this.offsetX}px`;\n this.element.style.top = `${pageY - this.offsetY}px`;\n }\n\n public remove(): void {\n this.element.remove();\n }\n\n private createElement(\n nodeName: string,\n autoEscape: boolean,\n classNames: ClassNames,\n ) {\n const element = document.createElement(\"span\");\n element.classList.add(classNames.title, classNames.dragging);\n\n if (autoEscape) {\n element.textContent = nodeName;\n } else {\n element.innerHTML = nodeName;\n }\n\n element.style.position = \"absolute\";\n\n return element;\n }\n}\n\nexport default DragElement;\n"],"names":["element","offsetX","offsetY","createElement"],"mappings":"AAWA,MAAM,WAAW,CAAC;EACNA,QAAO;EACPC,QAAO;EACPC,QAAO;AAEf,EAAA,WAAW,CAAC;IACR,UAAU;IACV,UAAU;IACV,QAAQ;IACR,OAAO;IACP,OAAO;AACP,IAAA;AACe,GAAC,EAAE;IAClB,IAAI,CAACD,QAAO,GAAG,OAAO;IACtB,IAAI,CAACC,QAAO,GAAG,OAAO;AAEtB,IAAA,IAAI,CAACF,QAAO,GAAG,IAAI,CAACG,cAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC;AAEnE,IAAA,WAAW,CAAC,WAAW,CAAC,IAAI,CAACH,QAAO,CAAC;AACzC,EAAA;AAEO,EAAA,IAAI,CAAC,KAAa,EAAE,KAAa,EAAQ;AAC5C,IAAA,IAAI,CAACA,QAAO,CAAC,KAAK,CAAC,IAAI,GAAG,CAAA,EAAG,KAAK,GAAG,IAAI,CAACC,QAAO,CAAA,EAAA,CAAI;AACrD,IAAA,IAAI,CAACD,QAAO,CAAC,KAAK,CAAC,GAAG,GAAG,CAAA,EAAG,KAAK,GAAG,IAAI,CAACE,QAAO,CAAA,EAAA,CAAI;AACxD,EAAA;AAEO,EAAA,MAAM,GAAS;AAClB,IAAA,IAAI,CAACF,QAAO,CAAC,MAAM,EAAE;AACzB,EAAA;AAEQG,EAAAA,cAAaA,CACjB,QAAgB,EAChB,UAAmB,EACnB,UAAsB,EACxB;AACE,IAAA,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC;AAC9C,IAAA,OAAO,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC;AAE5D,IAAA,IAAI,UAAU,EAAE;MACZ,OAAO,CAAC,WAAW,GAAG,QAAQ;AAClC,IAAA,CAAC,MAAM;MACH,OAAO,CAAC,SAAS,GAAG,QAAQ;AAChC,IAAA;AAEA,IAAA,OAAO,CAAC,KAAK,CAAC,QAAQ,GAAG,UAAU;AAEnC,IAAA,OAAO,OAAO;AAClB,EAAA;AACJ;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Node, Position } from "../node.js";
|
|
2
|
+
import type { HitArea } from "./types.js";
|
|
3
|
+
interface HitPosition {
|
|
4
|
+
node: Node;
|
|
5
|
+
position: null | Position;
|
|
6
|
+
top: number;
|
|
7
|
+
}
|
|
8
|
+
export declare const generateHitPositions: (tree: Node, currentNode: Node) => HitPosition[];
|
|
9
|
+
export declare const generateHitAreasForGroup: (hitAreas: HitArea[], positionsInGroup: HitPosition[], top: number, bottom: number) => void;
|
|
10
|
+
export declare const generateHitAreasFromPositions: (hitPositions: HitPosition[], treeBottom: number) => HitArea[];
|
|
11
|
+
declare const generateHitAreas: (tree: Node, currentNode: Node, treeBottom: number) => HitArea[];
|
|
12
|
+
export default generateHitAreas;
|
|
13
|
+
//# sourceMappingURL=generateHitAreas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateHitAreas.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/generateHitAreas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAKvC,UAAU,WAAW;IACjB,IAAI,EAAE,IAAI,CAAC;IACX,QAAQ,EAAE,IAAI,GAAG,QAAQ,CAAC;IAC1B,GAAG,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,oBAAoB,GAC7B,MAAM,IAAI,EACV,aAAa,IAAI,KAClB,WAAW,EA8Gb,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACjC,UAAU,OAAO,EAAE,EACnB,kBAAkB,WAAW,EAAE,EAC/B,KAAK,MAAM,EACX,QAAQ,MAAM,SAsBjB,CAAC;AAEF,eAAO,MAAM,6BAA6B,GACtC,cAAc,WAAW,EAAE,EAC3B,YAAY,MAAM,KACnB,OAAO,EA4BT,CAAC;AAEF,QAAA,MAAM,gBAAgB,GAAI,MAAM,IAAI,EAAE,aAAa,IAAI,EAAE,YAAY,MAAM,cAItE,CAAC;AAEN,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
import { getOffsetTop } from '../positionUtils.js';
|
|
2
|
+
import iterateVisibleNodes from './iterateVisibleNodes.js';
|
|
3
|
+
|
|
4
|
+
const generateHitPositions = (tree, currentNode) => {
|
|
5
|
+
const hitPositions = [];
|
|
6
|
+
let lastTop = 0;
|
|
7
|
+
const addHitPosition = (node, position, top) => {
|
|
8
|
+
hitPositions.push({
|
|
9
|
+
node,
|
|
10
|
+
position,
|
|
11
|
+
top
|
|
12
|
+
});
|
|
13
|
+
lastTop = top;
|
|
14
|
+
};
|
|
15
|
+
const handleAfterOpenFolder = (node, nextNode) => {
|
|
16
|
+
if (node === currentNode || nextNode === currentNode) {
|
|
17
|
+
// Cannot move before or after current item
|
|
18
|
+
addHitPosition(node, null, lastTop);
|
|
19
|
+
} else {
|
|
20
|
+
addHitPosition(node, "after", lastTop);
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
const handleClosedFolder = (node, nextNode, element) => {
|
|
24
|
+
const top = getOffsetTop(element);
|
|
25
|
+
if (node === currentNode) {
|
|
26
|
+
// Cannot move after current item
|
|
27
|
+
addHitPosition(node, null, top);
|
|
28
|
+
} else {
|
|
29
|
+
addHitPosition(node, "inside", top);
|
|
30
|
+
|
|
31
|
+
// Cannot move before current item
|
|
32
|
+
if (nextNode !== currentNode) {
|
|
33
|
+
addHitPosition(node, "after", top);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
const handleFirstNode = node => {
|
|
38
|
+
if (node !== currentNode && node.element) {
|
|
39
|
+
addHitPosition(node, "before", getOffsetTop(node.element));
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
const handleNode = (node, nextNode, element) => {
|
|
43
|
+
const top = getOffsetTop(element);
|
|
44
|
+
if (node === currentNode) {
|
|
45
|
+
// Cannot move inside current item
|
|
46
|
+
addHitPosition(node, null, top);
|
|
47
|
+
} else {
|
|
48
|
+
addHitPosition(node, "inside", top);
|
|
49
|
+
}
|
|
50
|
+
if (nextNode === currentNode || node === currentNode) {
|
|
51
|
+
// Cannot move before or after current item
|
|
52
|
+
addHitPosition(node, null, top);
|
|
53
|
+
} else {
|
|
54
|
+
addHitPosition(node, "after", top);
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
const handleOpenFolder = (node, element) => {
|
|
58
|
+
if (node === currentNode) {
|
|
59
|
+
// Cannot move inside current item
|
|
60
|
+
|
|
61
|
+
// Dnd over the current element is not possible: add a position with type None for the top and the bottom.
|
|
62
|
+
const top = getOffsetTop(element);
|
|
63
|
+
const height = element.clientHeight;
|
|
64
|
+
addHitPosition(node, null, top);
|
|
65
|
+
if (height > 5) {
|
|
66
|
+
// Subtract 5 pixels to allow more space for the next element.
|
|
67
|
+
addHitPosition(node, null, top + height - 5);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Stop iterating
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Cannot move before current item
|
|
75
|
+
if (node.children[0] !== currentNode) {
|
|
76
|
+
addHitPosition(node, "inside", getOffsetTop(element));
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// Continue iterating
|
|
80
|
+
return true;
|
|
81
|
+
};
|
|
82
|
+
iterateVisibleNodes(tree, {
|
|
83
|
+
handleAfterOpenFolder,
|
|
84
|
+
handleClosedFolder,
|
|
85
|
+
handleFirstNode,
|
|
86
|
+
handleNode,
|
|
87
|
+
handleOpenFolder
|
|
88
|
+
});
|
|
89
|
+
return hitPositions;
|
|
90
|
+
};
|
|
91
|
+
const generateHitAreasForGroup = (hitAreas, positionsInGroup, top, bottom) => {
|
|
92
|
+
// limit positions in group
|
|
93
|
+
const positionCount = Math.min(positionsInGroup.length, 4);
|
|
94
|
+
const areaHeight = Math.round((bottom - top) / positionCount);
|
|
95
|
+
let areaTop = top;
|
|
96
|
+
for (let i = 0; i < positionCount; i++) {
|
|
97
|
+
const position = positionsInGroup[i];
|
|
98
|
+
if (position.position) {
|
|
99
|
+
hitAreas.push({
|
|
100
|
+
bottom: areaTop + areaHeight,
|
|
101
|
+
node: position.node,
|
|
102
|
+
position: position.position,
|
|
103
|
+
top: areaTop
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
areaTop += areaHeight;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
const generateHitAreasFromPositions = (hitPositions, treeBottom) => {
|
|
110
|
+
if (!hitPositions.length) {
|
|
111
|
+
return [];
|
|
112
|
+
}
|
|
113
|
+
let previousTop = hitPositions[0].top;
|
|
114
|
+
let group = [];
|
|
115
|
+
const hitAreas = [];
|
|
116
|
+
for (const position of hitPositions) {
|
|
117
|
+
if (position.top !== previousTop && group.length) {
|
|
118
|
+
generateHitAreasForGroup(hitAreas, group, previousTop, position.top);
|
|
119
|
+
previousTop = position.top;
|
|
120
|
+
group = [];
|
|
121
|
+
}
|
|
122
|
+
group.push(position);
|
|
123
|
+
}
|
|
124
|
+
generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);
|
|
125
|
+
return hitAreas;
|
|
126
|
+
};
|
|
127
|
+
const generateHitAreas = (tree, currentNode, treeBottom) => generateHitAreasFromPositions(generateHitPositions(tree, currentNode), treeBottom);
|
|
128
|
+
|
|
129
|
+
export { generateHitAreas as default, generateHitAreasForGroup, generateHitAreasFromPositions, generateHitPositions };
|
|
130
|
+
//# sourceMappingURL=generateHitAreas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generateHitAreas.js","sources":["../../src/dragAndDropHandler/generateHitAreas.ts"],"sourcesContent":["import type { Node, Position } from \"../node\";\nimport type { HitArea } from \"./types\";\n\nimport { getOffsetTop } from \"../positionUtils\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\n\ninterface HitPosition {\n node: Node;\n position: null | Position;\n top: number;\n}\n\nexport const generateHitPositions = (\n tree: Node,\n currentNode: Node,\n): HitPosition[] => {\n const hitPositions: HitPosition[] = [];\n let lastTop = 0;\n\n const addHitPosition = (\n node: Node,\n position: null | Position,\n top: number,\n ) => {\n hitPositions.push({\n node,\n position,\n top,\n });\n lastTop = top;\n };\n\n const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {\n if (node === currentNode || nextNode === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, lastTop);\n } else {\n addHitPosition(node, \"after\", lastTop);\n }\n };\n\n const handleClosedFolder = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move after current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n\n // Cannot move before current item\n if (nextNode !== currentNode) {\n addHitPosition(node, \"after\", top);\n }\n }\n };\n\n const handleFirstNode = (node: Node) => {\n if (node !== currentNode && node.element) {\n addHitPosition(node, \"before\", getOffsetTop(node.element));\n }\n };\n\n const handleNode = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move inside current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n }\n\n if (nextNode === currentNode || node === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"after\", top);\n }\n };\n\n const handleOpenFolder = (node: Node, element: HTMLElement) => {\n if (node === currentNode) {\n // Cannot move inside current item\n\n // Dnd over the current element is not possible: add a position with type None for the top and the bottom.\n const top = getOffsetTop(element);\n const height = element.clientHeight;\n addHitPosition(node, null, top);\n\n if (height > 5) {\n // Subtract 5 pixels to allow more space for the next element.\n addHitPosition(node, null, top + height - 5);\n }\n\n // Stop iterating\n return false;\n }\n\n // Cannot move before current item\n if (node.children[0] !== currentNode) {\n addHitPosition(node, \"inside\", getOffsetTop(element));\n }\n\n // Continue iterating\n return true;\n };\n\n iterateVisibleNodes(tree, {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n });\n\n return hitPositions;\n};\n\nexport const generateHitAreasForGroup = (\n hitAreas: HitArea[],\n positionsInGroup: HitPosition[],\n top: number,\n bottom: number,\n) => {\n // limit positions in group\n const positionCount = Math.min(positionsInGroup.length, 4);\n\n const areaHeight = Math.round((bottom - top) / positionCount);\n let areaTop = top;\n\n for (let i = 0; i < positionCount; i++) {\n const position = positionsInGroup[i] as HitPosition;\n\n if (position.position) {\n hitAreas.push({\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n top: areaTop,\n });\n }\n\n areaTop += areaHeight;\n }\n};\n\nexport const generateHitAreasFromPositions = (\n hitPositions: HitPosition[],\n treeBottom: number,\n): HitArea[] => {\n if (!hitPositions.length) {\n return [];\n }\n\n let previousTop = (hitPositions[0] as HitPosition).top;\n let group: HitPosition[] = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of hitPositions) {\n if (position.top !== previousTop && group.length) {\n generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top,\n );\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);\n\n return hitAreas;\n};\n\nconst generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>\n generateHitAreasFromPositions(\n generateHitPositions(tree, currentNode),\n treeBottom,\n );\n\nexport default generateHitAreas;\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import type { ClassNames } from "../classNames.js";
|
|
2
|
+
import type { GetScrollLeft, GetTree, OpenNode, RefreshElements, TriggerEvent } from "../methodTypes.js";
|
|
3
|
+
import type { PositionInfo } from "../mouseUtils.js";
|
|
4
|
+
import type { Node } from "../node.js";
|
|
5
|
+
import type NodeElement from "../nodeElement/index.js";
|
|
6
|
+
import type { DragMethod, OnCanMove, OnCanMoveTo, OnIsMoveHandle } from "../options.js";
|
|
7
|
+
import type { HitArea } from "./types.js";
|
|
8
|
+
interface DragAndDropHandlerParams {
|
|
9
|
+
autoEscape?: boolean;
|
|
10
|
+
classNames: ClassNames;
|
|
11
|
+
getNodeElement: GetNodeElement;
|
|
12
|
+
getNodeElementForNode: GetNodeElementForNode;
|
|
13
|
+
getScrollLeft: GetScrollLeft;
|
|
14
|
+
getTree: GetTree;
|
|
15
|
+
onCanMove?: OnCanMove;
|
|
16
|
+
onCanMoveTo?: OnCanMoveTo;
|
|
17
|
+
onDragMove?: DragMethod;
|
|
18
|
+
onDragStop?: DragMethod;
|
|
19
|
+
onIsMoveHandle?: OnIsMoveHandle;
|
|
20
|
+
openFolderDelay: false | number;
|
|
21
|
+
openNode: OpenNode;
|
|
22
|
+
refreshElements: RefreshElements;
|
|
23
|
+
slide: boolean;
|
|
24
|
+
treeElement: HTMLElement;
|
|
25
|
+
triggerEvent: TriggerEvent;
|
|
26
|
+
}
|
|
27
|
+
type GetNodeElement = (element: HTMLElement) => NodeElement | null;
|
|
28
|
+
type GetNodeElementForNode = (node: Node) => NodeElement;
|
|
29
|
+
export declare class DragAndDropHandler {
|
|
30
|
+
currentItem: NodeElement | null;
|
|
31
|
+
hitAreas: HitArea[];
|
|
32
|
+
hoveredArea: HitArea | null;
|
|
33
|
+
isDragging: boolean;
|
|
34
|
+
private autoEscape?;
|
|
35
|
+
private classNames;
|
|
36
|
+
private dragElement;
|
|
37
|
+
private getNodeElement;
|
|
38
|
+
private getNodeElementForNode;
|
|
39
|
+
private getScrollLeft;
|
|
40
|
+
private getTree;
|
|
41
|
+
private onCanMove?;
|
|
42
|
+
private onCanMoveTo?;
|
|
43
|
+
private onDragMove?;
|
|
44
|
+
private onDragStop?;
|
|
45
|
+
private onIsMoveHandle?;
|
|
46
|
+
private openFolderDelay;
|
|
47
|
+
private openFolderTimer;
|
|
48
|
+
private openNode;
|
|
49
|
+
private previousGhost;
|
|
50
|
+
private refreshElements;
|
|
51
|
+
private slide;
|
|
52
|
+
private treeElement;
|
|
53
|
+
private triggerEvent;
|
|
54
|
+
constructor({ autoEscape, classNames, getNodeElement, getNodeElementForNode, getScrollLeft, getTree, onCanMove, onCanMoveTo, onDragMove, onDragStop, onIsMoveHandle, openFolderDelay, openNode, refreshElements, slide, treeElement, triggerEvent, }: DragAndDropHandlerParams);
|
|
55
|
+
mouseCapture(positionInfo: PositionInfo): boolean | null;
|
|
56
|
+
mouseDrag(positionInfo: PositionInfo): boolean;
|
|
57
|
+
mouseStart(positionInfo: PositionInfo): boolean;
|
|
58
|
+
mouseStop(positionInfo: PositionInfo): boolean;
|
|
59
|
+
refresh(): void;
|
|
60
|
+
private canMoveToArea;
|
|
61
|
+
private clear;
|
|
62
|
+
private findHoveredArea;
|
|
63
|
+
private generateHitAreas;
|
|
64
|
+
private getTreeDimensions;
|
|
65
|
+
private moveItem;
|
|
66
|
+
private mustCaptureElement;
|
|
67
|
+
private mustOpenFolderTimer;
|
|
68
|
+
private removeDropHint;
|
|
69
|
+
private removeHitAreas;
|
|
70
|
+
private removeHover;
|
|
71
|
+
private startOpenFolderTimer;
|
|
72
|
+
private stopOpenFolderTimer;
|
|
73
|
+
private updateDropHint;
|
|
74
|
+
}
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/dragAndDropHandler/index.ts"],"names":[],"mappings":"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"}
|