tree-element 0.1.1 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +33 -29
- package/lib/animation.js +5 -5
- package/lib/animation.js.map +1 -1
- package/lib/classNames.d.ts.map +1 -1
- package/lib/classNames.js +2 -2
- package/lib/classNames.js.map +1 -1
- package/lib/dataLoader.d.ts.map +1 -1
- package/lib/dataLoader.js +14 -20
- package/lib/dataLoader.js.map +1 -1
- package/lib/dragAndDropHandler/binarySearch.js +3 -3
- package/lib/dragAndDropHandler/binarySearch.js.map +1 -1
- package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -1
- package/lib/dragAndDropHandler/dragElement.js +9 -12
- package/lib/dragAndDropHandler/dragElement.js.map +1 -1
- package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -1
- package/lib/dragAndDropHandler/generateHitAreas.js +25 -25
- package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -1
- package/lib/dragAndDropHandler/index.d.ts.map +1 -1
- package/lib/dragAndDropHandler/index.js +90 -114
- package/lib/dragAndDropHandler/index.js.map +1 -1
- package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -1
- package/lib/dragAndDropHandler/iterateVisibleNodes.js +10 -10
- package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -1
- package/lib/dragAndDropHandler/types.d.ts.map +1 -1
- package/lib/elementsRenderer.d.ts +15 -6
- package/lib/elementsRenderer.d.ts.map +1 -1
- package/lib/elementsRenderer.js +157 -121
- package/lib/elementsRenderer.js.map +1 -1
- package/lib/events.d.ts.map +1 -1
- package/lib/index.d.ts +5 -5
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +249 -252
- package/lib/index.js.map +1 -1
- package/lib/keyHandler.d.ts +2 -3
- package/lib/keyHandler.d.ts.map +1 -1
- package/lib/keyHandler.js +26 -25
- package/lib/keyHandler.js.map +1 -1
- package/lib/methodTypes.d.ts +1 -1
- package/lib/methodTypes.d.ts.map +1 -1
- package/lib/mouseHandler.d.ts.map +1 -1
- package/lib/mouseHandler.js +26 -42
- package/lib/mouseHandler.js.map +1 -1
- package/lib/mouseUtils.d.ts.map +1 -1
- package/lib/mouseUtils.js +2 -2
- package/lib/mouseUtils.js.map +1 -1
- package/lib/node.d.ts +2 -1
- package/lib/node.d.ts.map +1 -1
- package/lib/node.js +36 -35
- package/lib/node.js.map +1 -1
- package/lib/nodeElement/borderDropHint.d.ts.map +1 -1
- package/lib/nodeElement/borderDropHint.js +4 -5
- package/lib/nodeElement/borderDropHint.js.map +1 -1
- package/lib/nodeElement/folderElement.d.ts +7 -4
- package/lib/nodeElement/folderElement.d.ts.map +1 -1
- package/lib/nodeElement/folderElement.js +61 -42
- package/lib/nodeElement/folderElement.js.map +1 -1
- package/lib/nodeElement/ghostDropHint.d.ts.map +1 -1
- package/lib/nodeElement/ghostDropHint.js +5 -9
- package/lib/nodeElement/ghostDropHint.js.map +1 -1
- package/lib/nodeElement/index.d.ts +2 -1
- package/lib/nodeElement/index.d.ts.map +1 -1
- package/lib/nodeElement/index.js +34 -26
- package/lib/nodeElement/index.js.map +1 -1
- package/lib/nodeUtils.d.ts.map +1 -1
- package/lib/nodeUtils.js +1 -1
- package/lib/nodeUtils.js.map +1 -1
- package/lib/options.d.ts.map +1 -1
- package/lib/positionUtils.js +3 -3
- package/lib/positionUtils.js.map +1 -1
- package/lib/requestUrl.d.ts +1 -1
- package/lib/requestUrl.d.ts.map +1 -1
- package/lib/requestUrl.js +4 -6
- package/lib/requestUrl.js.map +1 -1
- package/lib/saveStateHandler.d.ts.map +1 -1
- package/lib/saveStateHandler.js +38 -48
- package/lib/saveStateHandler.js.map +1 -1
- package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -1
- package/lib/scrollHandler/containerScrollParent.js +9 -11
- package/lib/scrollHandler/containerScrollParent.js.map +1 -1
- package/lib/scrollHandler/createScrollParent.d.ts.map +1 -1
- package/lib/scrollHandler/createScrollParent.js +10 -10
- package/lib/scrollHandler/createScrollParent.js.map +1 -1
- package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -1
- package/lib/scrollHandler/documentScrollParent.js +16 -19
- package/lib/scrollHandler/documentScrollParent.js.map +1 -1
- package/lib/scrollHandler/scrollParent.d.ts.map +1 -1
- package/lib/scrollHandler/scrollParent.js +11 -17
- package/lib/scrollHandler/scrollParent.js.map +1 -1
- package/lib/scrollHandler.d.ts.map +1 -1
- package/lib/scrollHandler.js +11 -14
- package/lib/scrollHandler.js.map +1 -1
- package/lib/selectNodeHandler.d.ts +2 -2
- package/lib/selectNodeHandler.d.ts.map +1 -1
- package/lib/selectNodeHandler.js +45 -54
- package/lib/selectNodeHandler.js.map +1 -1
- package/lib/setDefaultOptions.d.ts.map +1 -1
- package/lib/setDefaultOptions.js +23 -28
- package/lib/setDefaultOptions.js.map +1 -1
- package/lib/triggerCustomEvent.d.ts.map +1 -1
- package/lib/triggerCustomEvent.js +2 -2
- package/lib/triggerCustomEvent.js.map +1 -1
- package/lib/util.d.ts.map +1 -1
- package/lib/util.js +2 -2
- package/lib/util.js.map +1 -1
- package/lib/version.d.ts +1 -1
- package/lib/version.js +1 -1
- package/lib/version.js.map +1 -1
- package/package.json +5 -3
- package/src/animation.ts +1 -1
- package/src/classNames.ts +52 -52
- package/src/dataLoader.ts +68 -71
- package/src/dragAndDropHandler/binarySearch.ts +17 -17
- package/src/dragAndDropHandler/dragElement.ts +50 -50
- package/src/dragAndDropHandler/generateHitAreas.ts +156 -161
- package/src/dragAndDropHandler/index.ts +342 -351
- package/src/dragAndDropHandler/iterateVisibleNodes.ts +59 -63
- package/src/dragAndDropHandler/types.ts +5 -5
- package/src/elementsRenderer.ts +351 -298
- package/src/events.ts +216 -216
- package/src/header.txt +1 -1
- package/src/index.ts +52 -82
- package/src/keyHandler.ts +125 -115
- package/src/methodTypes.ts +4 -7
- package/src/mouseHandler.ts +314 -317
- package/src/mouseUtils.ts +14 -14
- package/src/node.ts +761 -766
- package/src/nodeElement/borderDropHint.ts +25 -25
- package/src/nodeElement/folderElement.ts +135 -112
- package/src/nodeElement/ghostDropHint.ts +62 -62
- package/src/nodeElement/index.ts +88 -74
- package/src/nodeUtils.ts +5 -5
- package/src/options.ts +6 -2
- package/src/requestUrl.ts +3 -3
- package/src/saveStateHandler.ts +204 -206
- package/src/scrollHandler/containerScrollParent.ts +49 -52
- package/src/scrollHandler/createScrollParent.ts +27 -27
- package/src/scrollHandler/documentScrollParent.ts +70 -70
- package/src/scrollHandler/scrollParent.ts +98 -98
- package/src/scrollHandler.ts +45 -45
- package/src/selectNodeHandler.ts +176 -166
- package/src/setDefaultOptions.ts +25 -22
- package/src/triggerCustomEvent.ts +7 -3
- package/src/util.ts +2 -2
- package/src/version.ts +1 -1
- package/tree_element.debug.js +3752 -3784
- package/tree_element.debug.js.map +1 -1
- package/tree_element.js +2 -2
- package/tree_element.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createScrollParent.js","sources":["../../src/scrollHandler/createScrollParent.ts"],"sourcesContent":["import type { ScrollParent } from \"./scrollParent\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n
|
|
1
|
+
{"version":3,"file":"createScrollParent.js","sources":["../../src/scrollHandler/createScrollParent.ts"],"sourcesContent":["import type { ScrollParent } from \"./scrollParent\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n"],"names":[],"mappings":";;;AAKA,IAAM,UAAU,GAAI,aAAqB,IACvC,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,QAAQ;AAExD,IAAM,WAAW,GAAI,OAAoB,IAAc;AACrD,EAAA,IAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAEvC,EAAA,OAAO,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,IAAM,qBAAqB,GACzB,WAAwB,IACD;AACvB,EAAA,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE;AAC5B,IAAA,OAAO,WAAW;AACpB,EAAA;AAEA,EAAA,IAAI,MAAM,GAAG,WAAW,CAAC,aAAa;AAEtC,EAAA,OAAO,MAAM,EAAE;AACb,IAAA,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;AACvB,MAAA,OAAO,MAAM;AACf,IAAA;IAEA,MAAM,GAAG,MAAM,CAAC,aAAa;AAC/B,EAAA;AAEA,EAAA,OAAO,IAAI;AACb,CAAC;AAED,IAAM,kBAAkB,GAAG,CACzB,WAAwB,EACxB,eAA2B,KACV;AACjB,EAAA,IAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,CAAC;AAEpD,EAAA,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,MAAM,EAAE;IAC7C,OAAO,IAAI,qBAAqB,CAAC;MAC/B,UAAA,EAAA,SAAS;AACT,MAAA,gBAAA,EAAA;AACF,KAAC,CAAC;AACJ,EAAA,CAAC,MAAM;IACL,OAAO,IAAI,oBAAoB,CAAC;MAAE,gBAAA,EAAA,eAAe;AAAE,MAAA,YAAA,EAAA;AAAY,KAAC,CAAC;AACnE,EAAA;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documentScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/documentScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"documentScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/documentScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,UAAU,MAAM;IACd,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,YAAY;IAC5D,OAAO,CAAC,oBAAoB,CAAC,CAAS;IACtC,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,WAAW,CAAc;gBAErB,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE,MAAM;IAM7C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM5B,aAAa;IAOpB,SAAS,CAAC,+BAA+B,CACvC,KAAK,EAAE,MAAM,GACZ,yBAAyB,GAAG,SAAS;IAkBxC,SAAS,CAAC,6BAA6B,CACrC,KAAK,EAAE,MAAM,GACZ,SAAS,GAAG,uBAAuB;IAiBtC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,sBAAsB;CAM/B"}
|
|
@@ -2,33 +2,30 @@ import { getOffsetTop } from '../positionUtils.js';
|
|
|
2
2
|
import { ScrollParent } from './scrollParent.js';
|
|
3
3
|
|
|
4
4
|
class DocumentScrollParent extends ScrollParent {
|
|
5
|
-
_documentScrollHeight;
|
|
6
|
-
_documentScrollWidth;
|
|
7
|
-
_treeElement;
|
|
8
5
|
constructor({
|
|
9
|
-
refreshHitAreas,
|
|
10
|
-
treeElement
|
|
6
|
+
_refreshHitAreas: refreshHitAreas,
|
|
7
|
+
_treeElement: treeElement
|
|
11
8
|
}) {
|
|
12
9
|
super({
|
|
13
|
-
|
|
14
|
-
refreshHitAreas
|
|
10
|
+
_container: document.documentElement,
|
|
11
|
+
_refreshHitAreas: refreshHitAreas
|
|
15
12
|
});
|
|
16
13
|
this._treeElement = treeElement;
|
|
17
14
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
super.
|
|
15
|
+
_scrollToY(top) {
|
|
16
|
+
let treeTop = getOffsetTop(this._treeElement);
|
|
17
|
+
super._scrollToY(top + treeTop);
|
|
21
18
|
}
|
|
22
|
-
|
|
23
|
-
super.
|
|
19
|
+
_stopScrolling() {
|
|
20
|
+
super._stopScrolling();
|
|
24
21
|
this._documentScrollHeight = undefined;
|
|
25
22
|
this._documentScrollWidth = undefined;
|
|
26
23
|
}
|
|
27
24
|
_getNewHorizontalScrollDirection(pageX) {
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
25
|
+
let scrollLeft = this._container.scrollLeft;
|
|
26
|
+
let windowWidth = window.innerWidth;
|
|
27
|
+
let isNearRightEdge = pageX > windowWidth - 20;
|
|
28
|
+
let isNearLeftEdge = pageX - scrollLeft < 20;
|
|
32
29
|
if (isNearRightEdge && this._canScrollRight()) {
|
|
33
30
|
return "right";
|
|
34
31
|
}
|
|
@@ -38,12 +35,12 @@ class DocumentScrollParent extends ScrollParent {
|
|
|
38
35
|
return undefined;
|
|
39
36
|
}
|
|
40
37
|
_getNewVerticalScrollDirection(pageY) {
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
let scrollTop = this._container.scrollTop;
|
|
39
|
+
let distanceTop = pageY - scrollTop;
|
|
43
40
|
if (distanceTop < 20) {
|
|
44
41
|
return "top";
|
|
45
42
|
}
|
|
46
|
-
|
|
43
|
+
let windowHeight = window.innerHeight;
|
|
47
44
|
if (windowHeight - (pageY - scrollTop) < 20 && this._canScrollDown()) {
|
|
48
45
|
return "bottom";
|
|
49
46
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"documentScrollParent.js","sources":["../../src/scrollHandler/documentScrollParent.ts"],"sourcesContent":["import type {\n
|
|
1
|
+
{"version":3,"file":"documentScrollParent.js","sources":["../../src/scrollHandler/documentScrollParent.ts"],"sourcesContent":["import type {\n HorizontalScrollDirection,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nimport { getOffsetTop } from \"../positionUtils\";\nimport { ScrollParent } from \"./scrollParent\";\n\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class DocumentScrollParent extends ScrollParent {\n private documentScrollHeight?: number;\n private documentScrollWidth?: number;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: Params) {\n super({ container: document.documentElement, refreshHitAreas });\n\n this.treeElement = treeElement;\n }\n\n public scrollToY(top: number): void {\n const treeTop = getOffsetTop(this.treeElement);\n\n super.scrollToY(top + treeTop);\n }\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.documentScrollHeight = undefined;\n this.documentScrollWidth = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = this.container.scrollLeft;\n const windowWidth = window.innerWidth;\n\n const isNearRightEdge = pageX > windowWidth - 20;\n const isNearLeftEdge = pageX - scrollLeft < 20;\n\n if (isNearRightEdge && this.canScrollRight()) {\n return \"right\";\n }\n\n if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = this.container.scrollTop;\n const distanceTop = pageY - scrollTop;\n\n if (distanceTop < 20) {\n return \"top\";\n }\n\n const windowHeight = window.innerHeight;\n\n if (windowHeight - (pageY - scrollTop) < 20 && this.canScrollDown()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private canScrollDown() {\n return (\n this.container.scrollTop + this.container.clientHeight <\n this.getDocumentScrollHeight()\n );\n }\n\n private canScrollRight() {\n return (\n this.container.scrollLeft + this.container.clientWidth <\n this.getDocumentScrollWidth()\n );\n }\n\n private getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n this.documentScrollHeight ??= this.container.scrollHeight;\n\n return this.documentScrollHeight;\n }\n\n private getDocumentScrollWidth() {\n // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.\n this.documentScrollWidth ??= this.container.scrollWidth;\n\n return this.documentScrollWidth;\n }\n}\n"],"names":["treeElement","scrollToY","stopScrolling","documentScrollHeight","documentScrollWidth","getNewHorizontalScrollDirection","container","canScrollRight","getNewVerticalScrollDirection","canScrollDown","getDocumentScrollHeight","getDocumentScrollWidth"],"mappings":";;;AAae,MAAM,oBAAoB,SAAS,YAAY,CAAC;AAK7D,EAAA,WAAW,CAAC;IAAE,gBAAA,EAAA,eAAe;AAAE,IAAA,YAAA,EAAA;AAAoB,GAAC,EAAE;AACpD,IAAA,KAAK,CAAC;MAAE,UAAA,EAAW,QAAQ,CAAC,eAAe;AAAE,MAAA,gBAAA,EAAA;AAAgB,KAAC,CAAC;IAE/D,IAAI,CAACA,YAAW,GAAG,WAAW;AAChC,EAAA;EAEOC,UAASA,CAAC,GAAW,EAAQ;AAClC,IAAA,IAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAACD,YAAW,CAAC;AAE9C,IAAA,KAAK,CAACC,UAAS,CAAC,GAAG,GAAG,OAAO,CAAC;AAChC,EAAA;AAEOC,EAAAA,cAAaA,GAAG;IACrB,KAAK,CAACA,cAAa,EAAE;IAErB,IAAI,CAACC,qBAAoB,GAAG,SAAS;IACrC,IAAI,CAACC,oBAAmB,GAAG,SAAS;AACtC,EAAA;EAEUC,gCAA+BA,CACvC,KAAa,EAC0B;AACvC,IAAA,IAAM,UAAU,GAAG,IAAI,CAACC,UAAS,CAAC,UAAU;AAC5C,IAAA,IAAM,WAAW,GAAG,MAAM,CAAC,UAAU;AAErC,IAAA,IAAM,eAAe,GAAG,KAAK,GAAG,WAAW,GAAG,EAAE;AAChD,IAAA,IAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,EAAE;AAE9C,IAAA,IAAI,eAAe,IAAI,IAAI,CAACC,eAAc,EAAE,EAAE;AAC5C,MAAA,OAAO,OAAO;AAChB,IAAA;AAEA,IAAA,IAAI,cAAc,EAAE;AAClB,MAAA,OAAO,MAAM;AACf,IAAA;AAEA,IAAA,OAAO,SAAS;AAClB,EAAA;EAEUC,8BAA6BA,CACrC,KAAa,EACwB;AACrC,IAAA,IAAM,SAAS,GAAG,IAAI,CAACF,UAAS,CAAC,SAAS;AAC1C,IAAA,IAAM,WAAW,GAAG,KAAK,GAAG,SAAS;IAErC,IAAI,WAAW,GAAG,EAAE,EAAE;AACpB,MAAA,OAAO,KAAK;AACd,IAAA;AAEA,IAAA,IAAM,YAAY,GAAG,MAAM,CAAC,WAAW;AAEvC,IAAA,IAAI,YAAY,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,IAAI,CAACG,cAAa,EAAE,EAAE;AACnE,MAAA,OAAO,QAAQ;AACjB,IAAA;AAEA,IAAA,OAAO,SAAS;AAClB,EAAA;AAEQA,EAAAA,cAAaA,GAAG;AACtB,IAAA,OACE,IAAI,CAACH,UAAS,CAAC,SAAS,GAAG,IAAI,CAACA,UAAS,CAAC,YAAY,GACtD,IAAI,CAACI,wBAAuB,EAAE;AAElC,EAAA;AAEQH,EAAAA,eAAcA,GAAG;AACvB,IAAA,OACE,IAAI,CAACD,UAAS,CAAC,UAAU,GAAG,IAAI,CAACA,UAAS,CAAC,WAAW,GACtD,IAAI,CAACK,uBAAsB,EAAE;AAEjC,EAAA;AAEQD,EAAAA,wBAAuBA,GAAG;AAChC;AACA,IAAA,IAAI,CAACP,qBAAoB,KAAK,IAAI,CAACG,UAAS,CAAC,YAAY;IAEzD,OAAO,IAAI,CAACH,qBAAoB;AAClC,EAAA;AAEQQ,EAAAA,uBAAsBA,GAAG;AAC/B;AACA,IAAA,IAAI,CAACP,oBAAmB,KAAK,IAAI,CAACE,UAAS,CAAC,WAAW;IAEvD,OAAO,IAAI,CAACF,oBAAmB;AACjC,EAAA;AACF;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/scrollParent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,OAAO,CAAC;AACzD,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvD,UAAU,iBAAiB;
|
|
1
|
+
{"version":3,"file":"scrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/scrollParent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,OAAO,CAAC;AACzD,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvD,UAAU,iBAAiB;IACzB,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,8BAAsB,YAAY;IAChC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC;IACjC,SAAS,CAAC,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IAChE,SAAS,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAE3C,SAAS,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC;IACtC,SAAS,CAAC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAC5D,SAAS,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;gBAE7B,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,iBAAiB;IAKtD,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAoB7C,sBAAsB,CAAC,KAAK,EAAE,MAAM;IAqBpC,aAAa,IAAI,MAAM;IAIvB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI5B,aAAa;IAKpB,SAAS,CAAC,QAAQ,CAAC,+BAA+B,CAChD,KAAK,EAAE,MAAM,GACZ,yBAAyB,GAAG,SAAS;IACxC,SAAS,CAAC,QAAQ,CAAC,6BAA6B,CAC9C,KAAK,EAAE,MAAM,GACZ,SAAS,GAAG,uBAAuB;IAEtC,SAAS,CAAC,kBAAkB;IAiB5B,SAAS,CAAC,gBAAgB;CAgB3B"}
|
|
@@ -1,19 +1,13 @@
|
|
|
1
1
|
class ScrollParent {
|
|
2
|
-
_container;
|
|
3
|
-
_horizontalScrollDirection;
|
|
4
|
-
_horizontalScrollTimeout;
|
|
5
|
-
_refreshHitAreas;
|
|
6
|
-
_verticalScrollDirection;
|
|
7
|
-
_verticalScrollTimeout;
|
|
8
2
|
constructor({
|
|
9
|
-
container,
|
|
10
|
-
refreshHitAreas
|
|
3
|
+
_container: container,
|
|
4
|
+
_refreshHitAreas: refreshHitAreas
|
|
11
5
|
}) {
|
|
12
6
|
this._container = container;
|
|
13
7
|
this._refreshHitAreas = refreshHitAreas;
|
|
14
8
|
}
|
|
15
|
-
|
|
16
|
-
|
|
9
|
+
_checkHorizontalScrolling(pageX) {
|
|
10
|
+
let newHorizontalScrollDirection = this._getNewHorizontalScrollDirection(pageX);
|
|
17
11
|
if (this._horizontalScrollDirection !== newHorizontalScrollDirection) {
|
|
18
12
|
this._horizontalScrollDirection = newHorizontalScrollDirection;
|
|
19
13
|
if (this._horizontalScrollTimeout != null) {
|
|
@@ -24,8 +18,8 @@ class ScrollParent {
|
|
|
24
18
|
}
|
|
25
19
|
}
|
|
26
20
|
}
|
|
27
|
-
|
|
28
|
-
|
|
21
|
+
_checkVerticalScrolling(pageY) {
|
|
22
|
+
let newVerticalScrollDirection = this._getNewVerticalScrollDirection(pageY);
|
|
29
23
|
if (this._verticalScrollDirection !== newVerticalScrollDirection) {
|
|
30
24
|
this._verticalScrollDirection = newVerticalScrollDirection;
|
|
31
25
|
if (this._verticalScrollTimeout != null) {
|
|
@@ -37,13 +31,13 @@ class ScrollParent {
|
|
|
37
31
|
}
|
|
38
32
|
}
|
|
39
33
|
}
|
|
40
|
-
|
|
34
|
+
_getScrollLeft() {
|
|
41
35
|
return this._container.scrollLeft;
|
|
42
36
|
}
|
|
43
|
-
|
|
37
|
+
_scrollToY(top) {
|
|
44
38
|
this._container.scrollTop = top;
|
|
45
39
|
}
|
|
46
|
-
|
|
40
|
+
_stopScrolling() {
|
|
47
41
|
this._horizontalScrollDirection = undefined;
|
|
48
42
|
this._verticalScrollDirection = undefined;
|
|
49
43
|
}
|
|
@@ -51,7 +45,7 @@ class ScrollParent {
|
|
|
51
45
|
if (!this._horizontalScrollDirection) {
|
|
52
46
|
return;
|
|
53
47
|
}
|
|
54
|
-
|
|
48
|
+
let distance = this._horizontalScrollDirection === "left" ? -20 : 20;
|
|
55
49
|
this._container.scrollBy({
|
|
56
50
|
behavior: "instant",
|
|
57
51
|
left: distance,
|
|
@@ -64,7 +58,7 @@ class ScrollParent {
|
|
|
64
58
|
if (!this._verticalScrollDirection) {
|
|
65
59
|
return;
|
|
66
60
|
}
|
|
67
|
-
|
|
61
|
+
let distance = this._verticalScrollDirection === "top" ? -20 : 20;
|
|
68
62
|
this._container.scrollBy({
|
|
69
63
|
behavior: "instant",
|
|
70
64
|
left: 0,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollParent.js","sources":["../../src/scrollHandler/scrollParent.ts"],"sourcesContent":["export type HorizontalScrollDirection = \"left\" | \"right\";\nexport type VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface ConstructorParams {\n
|
|
1
|
+
{"version":3,"file":"scrollParent.js","sources":["../../src/scrollHandler/scrollParent.ts"],"sourcesContent":["export type HorizontalScrollDirection = \"left\" | \"right\";\nexport type VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface ConstructorParams {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\nexport abstract class ScrollParent {\n protected container: HTMLElement;\n protected horizontalScrollDirection?: HorizontalScrollDirection;\n protected horizontalScrollTimeout?: number;\n\n protected refreshHitAreas: () => void;\n protected verticalScrollDirection?: VerticalScrollDirection;\n protected verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: ConstructorParams) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection !== newHorizontalScrollDirection) {\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.horizontalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection !== newVerticalScrollDirection) {\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return this.container.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n this.container.scrollTop = top;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n }\n\n protected abstract getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined;\n protected abstract getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection;\n\n protected scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n protected scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n"],"names":["container","refreshHitAreas","checkHorizontalScrolling","getNewHorizontalScrollDirection","horizontalScrollDirection","horizontalScrollTimeout","scrollHorizontally","checkVerticalScrolling","getNewVerticalScrollDirection","verticalScrollDirection","verticalScrollTimeout","scrollVertically","getScrollLeft","scrollToY","stopScrolling"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollHandler.d.ts","sourceRoot":"","sources":["../src/scrollHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAKjD,UAAU,mBAAmB;
|
|
1
|
+
{"version":3,"file":"scrollHandler.d.ts","sourceRoot":"","sources":["../src/scrollHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAKjD,UAAU,mBAAmB;IAC3B,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,OAAO,aAAa;IAChC,OAAO,CAAC,eAAe,CAAa;IACpC,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,OAAO,CAAC,WAAW,CAAc;gBAErB,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE,mBAAmB;IAM1D,cAAc,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAKhD,aAAa,IAAI,MAAM;IAIvB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI5B,aAAa;IAIpB,OAAO,CAAC,wBAAwB;IAIhC,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,eAAe;CAQxB"}
|
package/lib/scrollHandler.js
CHANGED
|
@@ -1,35 +1,32 @@
|
|
|
1
1
|
import createScrollParent from './scrollHandler/createScrollParent.js';
|
|
2
2
|
|
|
3
3
|
class ScrollHandler {
|
|
4
|
-
_refreshHitAreas;
|
|
5
|
-
_scrollParent;
|
|
6
|
-
_treeElement;
|
|
7
4
|
constructor({
|
|
8
|
-
refreshHitAreas,
|
|
9
|
-
treeElement
|
|
5
|
+
_refreshHitAreas: refreshHitAreas,
|
|
6
|
+
_treeElement: treeElement
|
|
10
7
|
}) {
|
|
11
8
|
this._refreshHitAreas = refreshHitAreas;
|
|
12
9
|
this._scrollParent = undefined;
|
|
13
10
|
this._treeElement = treeElement;
|
|
14
11
|
}
|
|
15
|
-
|
|
12
|
+
_checkScrolling(positionInfo) {
|
|
16
13
|
this._checkVerticalScrolling(positionInfo);
|
|
17
14
|
this._checkHorizontalScrolling(positionInfo);
|
|
18
15
|
}
|
|
19
|
-
|
|
20
|
-
return this._getScrollParent().
|
|
16
|
+
_getScrollLeft() {
|
|
17
|
+
return this._getScrollParent()._getScrollLeft();
|
|
21
18
|
}
|
|
22
|
-
|
|
23
|
-
this._getScrollParent().
|
|
19
|
+
_scrollToY(top) {
|
|
20
|
+
this._getScrollParent()._scrollToY(top);
|
|
24
21
|
}
|
|
25
|
-
|
|
26
|
-
this._getScrollParent().
|
|
22
|
+
_stopScrolling() {
|
|
23
|
+
this._getScrollParent()._stopScrolling();
|
|
27
24
|
}
|
|
28
25
|
_checkHorizontalScrolling(positionInfo) {
|
|
29
|
-
this._getScrollParent().
|
|
26
|
+
this._getScrollParent()._checkHorizontalScrolling(positionInfo.pageX);
|
|
30
27
|
}
|
|
31
28
|
_checkVerticalScrolling(positionInfo) {
|
|
32
|
-
this._getScrollParent().
|
|
29
|
+
this._getScrollParent()._checkVerticalScrolling(positionInfo.pageY);
|
|
33
30
|
}
|
|
34
31
|
_getScrollParent() {
|
|
35
32
|
this._scrollParent ??= createScrollParent(this._treeElement, this._refreshHitAreas);
|
package/lib/scrollHandler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrollHandler.js","sources":["../src/scrollHandler.ts"],"sourcesContent":["import type { PositionInfo } from \"./mouseUtils\";\nimport type { ScrollParent } from \"./scrollHandler/scrollParent\";\n\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\n\ninterface ScrollHandlerParams {\n
|
|
1
|
+
{"version":3,"file":"scrollHandler.js","sources":["../src/scrollHandler.ts"],"sourcesContent":["import type { PositionInfo } from \"./mouseUtils\";\nimport type { ScrollParent } from \"./scrollHandler/scrollParent\";\n\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\n\ninterface ScrollHandlerParams {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class ScrollHandler {\n private refreshHitAreas: () => void;\n private scrollParent?: ScrollParent;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: ScrollHandlerParams) {\n this.refreshHitAreas = refreshHitAreas;\n this.scrollParent = undefined;\n this.treeElement = treeElement;\n }\n\n public checkScrolling(positionInfo: PositionInfo): void {\n this.checkVerticalScrolling(positionInfo);\n this.checkHorizontalScrolling(positionInfo);\n }\n\n public getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private getScrollParent(): ScrollParent {\n this.scrollParent ??= createScrollParent(\n this.treeElement,\n this.refreshHitAreas,\n );\n\n return this.scrollParent;\n }\n}\n"],"names":["refreshHitAreas","scrollParent","treeElement","checkScrolling","checkVerticalScrolling","checkHorizontalScrolling","getScrollLeft","getScrollParent","scrollToY","stopScrolling"],"mappings":";;AAUe,MAAM,aAAa,CAAC;AAKjC,EAAA,WAAW,CAAC;IAAE,gBAAA,EAAA,eAAe;AAAE,IAAA,YAAA,EAAA;AAAiC,GAAC,EAAE;IACjE,IAAI,CAACA,gBAAe,GAAG,eAAe;IACtC,IAAI,CAACC,aAAY,GAAG,SAAS;IAC7B,IAAI,CAACC,YAAW,GAAG,WAAW;AAChC,EAAA;EAEOC,eAAcA,CAAC,YAA0B,EAAQ;AACtD,IAAA,IAAI,CAACC,uBAAsB,CAAC,YAAY,CAAC;AACzC,IAAA,IAAI,CAACC,yBAAwB,CAAC,YAAY,CAAC;AAC7C,EAAA;AAEOC,EAAAA,cAAaA,GAAW;IAC7B,OAAO,IAAI,CAACC,gBAAe,EAAE,CAACD,cAAa,EAAE;AAC/C,EAAA;EAEOE,UAASA,CAAC,GAAW,EAAQ;IAClC,IAAI,CAACD,gBAAe,EAAE,CAACC,UAAS,CAAC,GAAG,CAAC;AACvC,EAAA;AAEOC,EAAAA,cAAaA,GAAG;AACrB,IAAA,IAAI,CAACF,gBAAe,EAAE,CAACE,cAAa,EAAE;AACxC,EAAA;EAEQJ,yBAAwBA,CAAC,YAA0B,EAAQ;IACjE,IAAI,CAACE,gBAAe,EAAE,CAACF,yBAAwB,CAAC,YAAY,CAAC,KAAK,CAAC;AACrE,EAAA;EAEQD,uBAAsBA,CAAC,YAA0B,EAAQ;IAC/D,IAAI,CAACG,gBAAe,EAAE,CAACH,uBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC;AACnE,EAAA;AAEQG,EAAAA,gBAAeA,GAAiB;AACtC,IAAA,IAAI,CAACN,aAAY,KAAK,kBAAkB,CACtC,IAAI,CAACC,YAAW,EAChB,IAAI,CAACF,gBACP,CAAC;IAED,OAAO,IAAI,CAACC,aAAY;AAC1B,EAAA;AACF;;"}
|
|
@@ -24,10 +24,10 @@ export default class SelectNodeHandler {
|
|
|
24
24
|
private selectedNodes;
|
|
25
25
|
private selectedSingleNode;
|
|
26
26
|
private triggerEvent;
|
|
27
|
-
constructor({ getNodeById, getNodeElementForNode, getOnCanSelectNode, getSelectable, openParents, saveState, triggerEvent }: SelectNodeHandlerParameters);
|
|
27
|
+
constructor({ getNodeById, getNodeElementForNode, getOnCanSelectNode, getSelectable, openParents, saveState, triggerEvent, }: SelectNodeHandlerParameters);
|
|
28
28
|
addToSelection(node: Node): void;
|
|
29
29
|
clear(): void;
|
|
30
|
-
getSelectedNode():
|
|
30
|
+
getSelectedNode(): Node | null;
|
|
31
31
|
getSelectedNodes(): Node[];
|
|
32
32
|
getSelectedNodesUnder(parent: Node): Node[];
|
|
33
33
|
isNodeSelected(node: Node): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectNodeHandler.d.ts","sourceRoot":"","sources":["../src/selectNodeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"selectNodeHandler.d.ts","sourceRoot":"","sources":["../src/selectNodeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,2BAA2B;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,kBAAkB,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;IACtD,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,kBAAkB,CAAc;IACxC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,SAAS,EACT,YAAY,GACb,EAAE,2BAA2B;IAYvB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQhC,KAAK,IAAI,IAAI;IAKb,eAAe,IAAI,IAAI,GAAG,IAAI;IAU9B,gBAAgB,IAAI,IAAI,EAAE;IAiB1B,qBAAqB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE;IAqB3C,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAUnC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,UAAQ,GAAG,IAAI;IA6B9D,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,iBAAiB;CA8CrE"}
|
package/lib/selectNodeHandler.js
CHANGED
|
@@ -1,21 +1,12 @@
|
|
|
1
1
|
class SelectNodeHandler {
|
|
2
|
-
_getNodeById;
|
|
3
|
-
_getNodeElementForNode;
|
|
4
|
-
_getOnCanSelectNode;
|
|
5
|
-
_getSelectable;
|
|
6
|
-
_openParents;
|
|
7
|
-
_saveState;
|
|
8
|
-
_selectedNodes;
|
|
9
|
-
_selectedSingleNode;
|
|
10
|
-
_triggerEvent;
|
|
11
2
|
constructor({
|
|
12
|
-
getNodeById,
|
|
13
|
-
getNodeElementForNode,
|
|
14
|
-
getOnCanSelectNode,
|
|
15
|
-
getSelectable,
|
|
16
|
-
openParents,
|
|
17
|
-
saveState,
|
|
18
|
-
triggerEvent
|
|
3
|
+
_getNodeById: getNodeById,
|
|
4
|
+
_getNodeElementForNode: getNodeElementForNode,
|
|
5
|
+
_getOnCanSelectNode: getOnCanSelectNode,
|
|
6
|
+
_getSelectable: getSelectable,
|
|
7
|
+
_openParents: openParents,
|
|
8
|
+
_saveState: saveState,
|
|
9
|
+
_triggerEvent: triggerEvent
|
|
19
10
|
}) {
|
|
20
11
|
this._getNodeById = getNodeById;
|
|
21
12
|
this._getNodeElementForNode = getNodeElementForNode;
|
|
@@ -27,32 +18,32 @@ class SelectNodeHandler {
|
|
|
27
18
|
this._selectedSingleNode = null;
|
|
28
19
|
this._triggerEvent = triggerEvent;
|
|
29
20
|
}
|
|
30
|
-
|
|
21
|
+
_addToSelection(node) {
|
|
31
22
|
if (node.id != null) {
|
|
32
23
|
this._selectedNodes.add(node.id);
|
|
33
24
|
} else {
|
|
34
25
|
this._selectedSingleNode = node;
|
|
35
26
|
}
|
|
36
27
|
}
|
|
37
|
-
|
|
28
|
+
_clear() {
|
|
38
29
|
this._selectedNodes.clear();
|
|
39
30
|
this._selectedSingleNode = null;
|
|
40
31
|
}
|
|
41
|
-
|
|
42
|
-
|
|
32
|
+
_getSelectedNode() {
|
|
33
|
+
let selectedNodes = this._getSelectedNodes();
|
|
43
34
|
if (selectedNodes.length) {
|
|
44
|
-
return selectedNodes[0] ??
|
|
35
|
+
return selectedNodes[0] ?? null;
|
|
45
36
|
} else {
|
|
46
|
-
return
|
|
37
|
+
return null;
|
|
47
38
|
}
|
|
48
39
|
}
|
|
49
|
-
|
|
40
|
+
_getSelectedNodes() {
|
|
50
41
|
if (this._selectedSingleNode) {
|
|
51
42
|
return [this._selectedSingleNode];
|
|
52
43
|
} else {
|
|
53
|
-
|
|
44
|
+
let selectedNodes = [];
|
|
54
45
|
this._selectedNodes.forEach(id => {
|
|
55
|
-
|
|
46
|
+
let node = this._getNodeById(id);
|
|
56
47
|
if (node) {
|
|
57
48
|
selectedNodes.push(node);
|
|
58
49
|
}
|
|
@@ -60,7 +51,7 @@ class SelectNodeHandler {
|
|
|
60
51
|
return selectedNodes;
|
|
61
52
|
}
|
|
62
53
|
}
|
|
63
|
-
|
|
54
|
+
_getSelectedNodesUnder(parent) {
|
|
64
55
|
if (this._selectedSingleNode) {
|
|
65
56
|
if (parent.isParentOf(this._selectedSingleNode)) {
|
|
66
57
|
return [this._selectedSingleNode];
|
|
@@ -68,9 +59,9 @@ class SelectNodeHandler {
|
|
|
68
59
|
return [];
|
|
69
60
|
}
|
|
70
61
|
} else {
|
|
71
|
-
|
|
62
|
+
let selectedNodes = [];
|
|
72
63
|
this._selectedNodes.forEach(id => {
|
|
73
|
-
|
|
64
|
+
let node = this._getNodeById(id);
|
|
74
65
|
if (node && parent.isParentOf(node)) {
|
|
75
66
|
selectedNodes.push(node);
|
|
76
67
|
}
|
|
@@ -78,18 +69,18 @@ class SelectNodeHandler {
|
|
|
78
69
|
return selectedNodes;
|
|
79
70
|
}
|
|
80
71
|
}
|
|
81
|
-
|
|
72
|
+
_isNodeSelected(node) {
|
|
82
73
|
if (node.id != null) {
|
|
83
74
|
return this._selectedNodes.has(node.id);
|
|
84
75
|
} else if (this._selectedSingleNode) {
|
|
85
|
-
return this._selectedSingleNode
|
|
76
|
+
return this._selectedSingleNode === node;
|
|
86
77
|
} else {
|
|
87
78
|
return false;
|
|
88
79
|
}
|
|
89
80
|
}
|
|
90
|
-
|
|
81
|
+
_removeFromSelection(node, includeChildren = false) {
|
|
91
82
|
if (node.id == null) {
|
|
92
|
-
if (this._selectedSingleNode
|
|
83
|
+
if (this._selectedSingleNode === node) {
|
|
93
84
|
this._selectedSingleNode = null;
|
|
94
85
|
}
|
|
95
86
|
} else {
|
|
@@ -106,39 +97,39 @@ class SelectNodeHandler {
|
|
|
106
97
|
}
|
|
107
98
|
|
|
108
99
|
/* Select a single node.
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
100
|
+
* Renders the changed elements.
|
|
101
|
+
* Deselects if the node is currently selected (if the mustToggle is on).
|
|
102
|
+
* Deselects the previously selected node.
|
|
103
|
+
* Check if the node is selectable.
|
|
104
|
+
* Saves the state.
|
|
105
|
+
* Options:
|
|
106
|
+
* mustSetFocus: set the focus to the selected node
|
|
107
|
+
* mustToggle: support deselecting the selected node
|
|
108
|
+
*/
|
|
109
|
+
_selectSingleNode(node, optionsParam) {
|
|
110
|
+
let defaultOptions = {
|
|
120
111
|
mustSetFocus: true,
|
|
121
112
|
mustToggle: true
|
|
122
113
|
};
|
|
123
|
-
|
|
114
|
+
let selectOptions = {
|
|
124
115
|
...defaultOptions,
|
|
125
116
|
...(optionsParam ?? {})
|
|
126
117
|
};
|
|
127
|
-
|
|
118
|
+
let canSelect = () => {
|
|
128
119
|
if (!this._getSelectable()) {
|
|
129
120
|
return false;
|
|
130
121
|
}
|
|
131
|
-
|
|
122
|
+
let onCanSelectNode = this._getOnCanSelectNode();
|
|
132
123
|
return onCanSelectNode ? onCanSelectNode(node) : true;
|
|
133
124
|
};
|
|
134
125
|
if (!canSelect()) {
|
|
135
126
|
return;
|
|
136
127
|
}
|
|
137
|
-
|
|
138
|
-
this.
|
|
139
|
-
this._getNodeElementForNode(deselectedNode).
|
|
128
|
+
let deselectCurrentNode = deselectedNode => {
|
|
129
|
+
this._removeFromSelection(deselectedNode);
|
|
130
|
+
this._getNodeElementForNode(deselectedNode)._deselect();
|
|
140
131
|
};
|
|
141
|
-
if (this.
|
|
132
|
+
if (this._isNodeSelected(node)) {
|
|
142
133
|
if (selectOptions.mustToggle) {
|
|
143
134
|
deselectCurrentNode(node);
|
|
144
135
|
this._triggerEvent("tree.deselect", {
|
|
@@ -146,15 +137,15 @@ class SelectNodeHandler {
|
|
|
146
137
|
});
|
|
147
138
|
}
|
|
148
139
|
} else {
|
|
149
|
-
|
|
140
|
+
let deselectedNode = this._getSelectedNode();
|
|
150
141
|
if (deselectedNode) {
|
|
151
142
|
deselectCurrentNode(deselectedNode);
|
|
152
143
|
}
|
|
153
|
-
this.
|
|
144
|
+
this._addToSelection(node);
|
|
154
145
|
this._openParents(node);
|
|
155
|
-
this._getNodeElementForNode(node).
|
|
146
|
+
this._getNodeElementForNode(node)._select(selectOptions.mustSetFocus);
|
|
156
147
|
this._triggerEvent("tree.select", {
|
|
157
|
-
deselectedNode
|
|
148
|
+
deselectedNode,
|
|
158
149
|
node
|
|
159
150
|
});
|
|
160
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selectNodeHandler.js","sources":["../src/selectNodeHandler.ts"],"sourcesContent":["import type { GetNodeById, GetNodeElementForNode, OpenParents, TriggerEvent } from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnCanSelectNode } from \"./options\";\n\nexport interface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n getNodeElementForNode: GetNodeElementForNode;\n getOnCanSelectNode: () => OnCanSelectNode | undefined;\n getSelectable: () => boolean;\n openParents: OpenParents;\n saveState: () => void;\n triggerEvent: TriggerEvent;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private getNodeElementForNode: GetNodeElementForNode;\n private getOnCanSelectNode: () => OnCanSelectNode | undefined;\n private getSelectable: () => boolean;\n private openParents: OpenParents;\n private saveState: () => void;\n private selectedNodes: Set<NodeId>;\n private selectedSingleNode: Node | null;\n private triggerEvent: TriggerEvent;\n\n constructor({ getNodeById, getNodeElementForNode, getOnCanSelectNode, getSelectable, openParents, saveState, triggerEvent }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getOnCanSelectNode = getOnCanSelectNode;\n this.getSelectable = getSelectable;\n this.openParents = openParents;\n this.saveState = saveState;\n this.selectedNodes = new Set<NodeId>();\n this.selectedSingleNode = null;\n this.triggerEvent = triggerEvent;\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): false | Node {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? false;\n } else {\n return false;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n } else {\n return false;\n }\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (\n this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element\n ) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n\n /* Select a single node.\n * Renders the changed elements.\n * Deselects if the node is currently selected (if the mustToggle is on).\n * Deselects the previously selected node.\n * Check if the node is selectable.\n * Saves the state.\n * Options:\n * mustSetFocus: set the focus to the selected node\n * mustToggle: support deselecting the selected node\n */\n public selectSingleNode(node: Node, optionsParam?: SelectNodeOptions) {\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) };\n\n const canSelect = (): boolean => {\n if (!this.getSelectable()) {\n return false;\n }\n\n const onCanSelectNode = this.getOnCanSelectNode();\n return onCanSelectNode ? onCanSelectNode(node) : true;\n };\n\n if (!canSelect()) {\n return;\n }\n\n const deselectCurrentNode = (deselectedNode: Node) => {\n this.removeFromSelection(deselectedNode);\n this.getNodeElementForNode(deselectedNode).deselect();\n };\n\n if (this.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n deselectCurrentNode(node);\n this.triggerEvent(\"tree.deselect\", { node });\n }\n } else {\n const deselectedNode = this.getSelectedNode();\n\n if (deselectedNode) {\n deselectCurrentNode(deselectedNode);\n }\n\n this.addToSelection(node);\n this.openParents(node);\n this.getNodeElementForNode(node).select(selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselectedNode: deselectedNode || null,\n node,\n });\n }\n\n this.saveState();\n }\n}\n"],"names":["getNodeById","getNodeElementForNode","getOnCanSelectNode","getSelectable","openParents","saveState","selectedNodes","selectedSingleNode","triggerEvent"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"selectNodeHandler.js","sources":["../src/selectNodeHandler.ts"],"sourcesContent":["import type {\n GetNodeById,\n GetNodeElementForNode,\n OpenParents,\n TriggerEvent,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnCanSelectNode } from \"./options\";\n\nexport interface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n getNodeElementForNode: GetNodeElementForNode;\n getOnCanSelectNode: () => OnCanSelectNode | undefined;\n getSelectable: () => boolean;\n openParents: OpenParents;\n saveState: () => void;\n triggerEvent: TriggerEvent;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private getNodeElementForNode: GetNodeElementForNode;\n private getOnCanSelectNode: () => OnCanSelectNode | undefined;\n private getSelectable: () => boolean;\n private openParents: OpenParents;\n private saveState: () => void;\n private selectedNodes: Set<NodeId>;\n private selectedSingleNode: Node | null;\n private triggerEvent: TriggerEvent;\n\n constructor({\n getNodeById,\n getNodeElementForNode,\n getOnCanSelectNode,\n getSelectable,\n openParents,\n saveState,\n triggerEvent,\n }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getOnCanSelectNode = getOnCanSelectNode;\n this.getSelectable = getSelectable;\n this.openParents = openParents;\n this.saveState = saveState;\n this.selectedNodes = new Set<NodeId>();\n this.selectedSingleNode = null;\n this.triggerEvent = triggerEvent;\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): Node | null {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode === node;\n } else {\n return false;\n }\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (this.selectedSingleNode === node) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n\n /* Select a single node.\n * Renders the changed elements.\n * Deselects if the node is currently selected (if the mustToggle is on).\n * Deselects the previously selected node.\n * Check if the node is selectable.\n * Saves the state.\n * Options:\n * mustSetFocus: set the focus to the selected node\n * mustToggle: support deselecting the selected node\n */\n public selectSingleNode(node: Node, optionsParam?: SelectNodeOptions) {\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) };\n\n const canSelect = (): boolean => {\n if (!this.getSelectable()) {\n return false;\n }\n\n const onCanSelectNode = this.getOnCanSelectNode();\n return onCanSelectNode ? onCanSelectNode(node) : true;\n };\n\n if (!canSelect()) {\n return;\n }\n\n const deselectCurrentNode = (deselectedNode: Node) => {\n this.removeFromSelection(deselectedNode);\n this.getNodeElementForNode(deselectedNode).deselect();\n };\n\n if (this.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n deselectCurrentNode(node);\n this.triggerEvent(\"tree.deselect\", { node });\n }\n } else {\n const deselectedNode = this.getSelectedNode();\n\n if (deselectedNode) {\n deselectCurrentNode(deselectedNode);\n }\n\n this.addToSelection(node);\n this.openParents(node);\n this.getNodeElementForNode(node).select(selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselectedNode,\n node,\n });\n }\n\n this.saveState();\n }\n}\n"],"names":["getNodeById","getNodeElementForNode","getOnCanSelectNode","getSelectable","openParents","saveState","selectedNodes","selectedSingleNode","triggerEvent","addToSelection","clear","getSelectedNode","getSelectedNodes","getSelectedNodesUnder","isNodeSelected","removeFromSelection","selectSingleNode","deselect","select"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setDefaultOptions.d.ts","sourceRoot":"","sources":["../src/setDefaultOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AA6CpD,QAAA,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"setDefaultOptions.d.ts","sourceRoot":"","sources":["../src/setDefaultOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AA6CpD,QAAA,MAAM,iBAAiB,GACrB,aAAa,WAAW,EACxB,cAAc,OAAO,CAAC,kBAAkB,CAAC,KACxC,kBASF,CAAC;AAwBF,eAAe,iBAAiB,CAAC"}
|