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 @@
|
|
|
1
|
+
{"version":3,"file":"saveStateHandler.js","sources":["../src/saveStateHandler.ts"],"sourcesContent":["import type {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnGetStateFromStorage, OnSetStateFromStorage } from \"./options\";\n\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n if (!this.saveStateOption) {\n return null;\n }\n\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n if (!this.saveStateOption) {\n return null;\n }\n\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData);\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n if (!this.saveStateOption) {\n return;\n }\n\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand (boolean)\n */\n public setInitialState(state: SavedState): boolean {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n this.resetSelection();\n\n if (state.selected_node) {\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public async setInitialStateOnDemand(\n state: SavedState,\n ): Promise<void> {\n let nodeIds = state.open_nodes;\n\n const openNodes = async () => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n newNodesIds.push(nodeId);\n } else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n await loadAndOpenNode(node);\n } else {\n await this.openNode(node, false);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node) {\n if (this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\n }\n }\n };\n\n const loadAndOpenNode = async (node: Node) => {\n await this.openNode(node, false);\n await openNodes();\n };\n\n await openNodes();\n }\n\n private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else {\n return localStorage.getItem(this.getKeyName());\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record<string, unknown>;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n}\n"],"names":["addToSelection","getNodeById","getSelectedNodes","getTree","onGetStateFromStorage","onSetStateFromStorage","openNode","refreshElements","removeFromSelection","saveStateOption","loadFromStorage","parseState","getKeyName","openInitialNodes","resetSelection","selectInitialNodes"],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { HorizontalScrollDirection, VerticalScrollDirection } from "./scrollParent.js";
|
|
2
|
+
import { ScrollParent } from "./scrollParent.js";
|
|
3
|
+
export default class ContainerScrollParent extends ScrollParent {
|
|
4
|
+
private scrollParentBottom?;
|
|
5
|
+
private scrollParentTop?;
|
|
6
|
+
stopScrolling(): void;
|
|
7
|
+
protected getNewHorizontalScrollDirection(pageX: number): HorizontalScrollDirection | undefined;
|
|
8
|
+
protected getNewVerticalScrollDirection(pageY: number): undefined | VerticalScrollDirection;
|
|
9
|
+
private getScrollParentBottom;
|
|
10
|
+
private getScrollParentTop;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=containerScrollParent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/containerScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,yBAAyB,EACzB,uBAAuB,EAC1B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAG9C,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,YAAY;IAC3D,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,eAAe,CAAC,CAAS;IAE1B,aAAa;IAOpB,SAAS,CAAC,+BAA+B,CACrC,KAAK,EAAE,MAAM,GACd,yBAAyB,GAAG,SAAS;IAkBxC,SAAS,CAAC,6BAA6B,CACnC,KAAK,EAAE,MAAM,GACd,SAAS,GAAG,uBAAuB;IAYtC,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,kBAAkB;CAK7B"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { getElementPosition, getOffsetTop } from '../positionUtils.js';
|
|
2
|
+
import { ScrollParent } from './scrollParent.js';
|
|
3
|
+
|
|
4
|
+
class ContainerScrollParent extends ScrollParent {
|
|
5
|
+
_scrollParentBottom;
|
|
6
|
+
_scrollParentTop;
|
|
7
|
+
stopScrolling() {
|
|
8
|
+
super.stopScrolling();
|
|
9
|
+
this._horizontalScrollDirection = undefined;
|
|
10
|
+
this._verticalScrollDirection = undefined;
|
|
11
|
+
}
|
|
12
|
+
_getNewHorizontalScrollDirection(pageX) {
|
|
13
|
+
const scrollParentOffset = getElementPosition(this._container);
|
|
14
|
+
const containerWidth = this._container.getBoundingClientRect().width;
|
|
15
|
+
const rightEdge = scrollParentOffset.left + containerWidth;
|
|
16
|
+
const leftEdge = scrollParentOffset.left;
|
|
17
|
+
const isNearRightEdge = pageX > rightEdge - 20;
|
|
18
|
+
const isNearLeftEdge = pageX < leftEdge + 20;
|
|
19
|
+
if (isNearRightEdge) {
|
|
20
|
+
return "right";
|
|
21
|
+
} else if (isNearLeftEdge) {
|
|
22
|
+
return "left";
|
|
23
|
+
}
|
|
24
|
+
return undefined;
|
|
25
|
+
}
|
|
26
|
+
_getNewVerticalScrollDirection(pageY) {
|
|
27
|
+
if (pageY < this._getScrollParentTop()) {
|
|
28
|
+
return "top";
|
|
29
|
+
}
|
|
30
|
+
if (pageY > this._getScrollParentBottom()) {
|
|
31
|
+
return "bottom";
|
|
32
|
+
}
|
|
33
|
+
return undefined;
|
|
34
|
+
}
|
|
35
|
+
_getScrollParentBottom() {
|
|
36
|
+
if (this._scrollParentBottom == null) {
|
|
37
|
+
const containerHeight = this._container.getBoundingClientRect().height;
|
|
38
|
+
this._scrollParentBottom = this._getScrollParentTop() + containerHeight;
|
|
39
|
+
}
|
|
40
|
+
return this._scrollParentBottom;
|
|
41
|
+
}
|
|
42
|
+
_getScrollParentTop() {
|
|
43
|
+
this._scrollParentTop ??= getOffsetTop(this._container);
|
|
44
|
+
return this._scrollParentTop;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export { ContainerScrollParent as default };
|
|
49
|
+
//# sourceMappingURL=containerScrollParent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"containerScrollParent.js","sources":["../../src/scrollHandler/containerScrollParent.ts"],"sourcesContent":["import type {\n HorizontalScrollDirection,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nimport { getElementPosition, getOffsetTop } from \"../positionUtils\";\nimport { ScrollParent } from \"./scrollParent\";\n\n\nexport default class ContainerScrollParent extends ScrollParent {\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this.container);\n const containerWidth = this.container.getBoundingClientRect().width;\n\n const rightEdge = scrollParentOffset.left + containerWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n const isNearLeftEdge = pageX < leftEdge + 20;\n\n if (isNearRightEdge) {\n return \"right\";\n } else if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this.getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n const containerHeight =\n this.container.getBoundingClientRect().height;\n this.scrollParentBottom =\n this.getScrollParentTop() + containerHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n this.scrollParentTop ??= getOffsetTop(this.container);\n\n return this.scrollParentTop;\n }\n}\n"],"names":["scrollParentBottom","scrollParentTop","horizontalScrollDirection","verticalScrollDirection","getNewHorizontalScrollDirection","container","getNewVerticalScrollDirection","getScrollParentTop","getScrollParentBottom"],"mappings":";;;AASe,MAAM,qBAAqB,SAAS,YAAY,CAAC;EACpDA,mBAAkB;EAClBC,gBAAe;AAEhB,EAAA,aAAa,GAAG;IACnB,KAAK,CAAC,aAAa,EAAE;IAErB,IAAI,CAACC,0BAAyB,GAAG,SAAS;IAC1C,IAAI,CAACC,wBAAuB,GAAG,SAAS;AAC5C,EAAA;EAEUC,gCAA+BA,CACrC,KAAa,EACwB;AACrC,IAAA,MAAM,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAACC,UAAS,CAAC;IAC7D,MAAM,cAAc,GAAG,IAAI,CAACA,UAAS,CAAC,qBAAqB,EAAE,CAAC,KAAK;AAEnE,IAAA,MAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,GAAG,cAAc;AAC1D,IAAA,MAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI;AACxC,IAAA,MAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,EAAE;AAC9C,IAAA,MAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,EAAE;AAE5C,IAAA,IAAI,eAAe,EAAE;AACjB,MAAA,OAAO,OAAO;IAClB,CAAC,MAAM,IAAI,cAAc,EAAE;AACvB,MAAA,OAAO,MAAM;AACjB,IAAA;AAEA,IAAA,OAAO,SAAS;AACpB,EAAA;EAEUC,8BAA6BA,CACnC,KAAa,EACsB;AACnC,IAAA,IAAI,KAAK,GAAG,IAAI,CAACC,mBAAkB,EAAE,EAAE;AACnC,MAAA,OAAO,KAAK;AAChB,IAAA;AAEA,IAAA,IAAI,KAAK,GAAG,IAAI,CAACC,sBAAqB,EAAE,EAAE;AACtC,MAAA,OAAO,QAAQ;AACnB,IAAA;AAEA,IAAA,OAAO,SAAS;AACpB,EAAA;AAEQA,EAAAA,sBAAqBA,GAAG;AAC5B,IAAA,IAAI,IAAI,CAACR,mBAAkB,IAAI,IAAI,EAAE;MACjC,MAAM,eAAe,GACjB,IAAI,CAACK,UAAS,CAAC,qBAAqB,EAAE,CAAC,MAAM;MACjD,IAAI,CAACL,mBAAkB,GACnB,IAAI,CAACO,mBAAkB,EAAE,GAAG,eAAe;AACnD,IAAA;IAEA,OAAO,IAAI,CAACP,mBAAkB;AAClC,EAAA;AAEQO,EAAAA,mBAAkBA,GAAG;IACzB,IAAI,CAACN,gBAAe,KAAK,YAAY,CAAC,IAAI,CAACI,UAAS,CAAC;IAErD,OAAO,IAAI,CAACJ,gBAAe;AAC/B,EAAA;AACJ;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/createScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAkCnD,QAAA,MAAM,kBAAkB,GACpB,aAAa,WAAW,EACxB,iBAAiB,MAAM,IAAI,KAC5B,YAWF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import ContainerScrollParent from './containerScrollParent.js';
|
|
2
|
+
import DocumentScrollParent from './documentScrollParent.js';
|
|
3
|
+
|
|
4
|
+
const isOverflow = overflowValue => overflowValue === "auto" || overflowValue === "scroll";
|
|
5
|
+
const hasOverFlow = element => {
|
|
6
|
+
const style = getComputedStyle(element);
|
|
7
|
+
return isOverflow(style.overflowX) || isOverflow(style.overflowY);
|
|
8
|
+
};
|
|
9
|
+
const getParentWithOverflow = treeElement => {
|
|
10
|
+
if (hasOverFlow(treeElement)) {
|
|
11
|
+
return treeElement;
|
|
12
|
+
}
|
|
13
|
+
let parent = treeElement.parentElement;
|
|
14
|
+
while (parent) {
|
|
15
|
+
if (hasOverFlow(parent)) {
|
|
16
|
+
return parent;
|
|
17
|
+
}
|
|
18
|
+
parent = parent.parentElement;
|
|
19
|
+
}
|
|
20
|
+
return null;
|
|
21
|
+
};
|
|
22
|
+
const createScrollParent = (treeElement, refreshHitAreas) => {
|
|
23
|
+
const container = getParentWithOverflow(treeElement);
|
|
24
|
+
if (container && container.tagName !== "HTML") {
|
|
25
|
+
return new ContainerScrollParent({
|
|
26
|
+
container,
|
|
27
|
+
refreshHitAreas
|
|
28
|
+
});
|
|
29
|
+
} else {
|
|
30
|
+
return new DocumentScrollParent({
|
|
31
|
+
refreshHitAreas,
|
|
32
|
+
treeElement
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
export { createScrollParent as default };
|
|
38
|
+
//# sourceMappingURL=createScrollParent.js.map
|
|
@@ -0,0 +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 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,MAAM,UAAU,GAAI,aAAqB,IACrC,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,QAAQ;AAE1D,MAAM,WAAW,GAAI,OAAoB,IAAc;AACnD,EAAA,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAEvC,EAAA,OAAO,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;AACrE,CAAC;AAED,MAAM,qBAAqB,GACvB,WAAwB,IACH;AACrB,EAAA,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE;AAC1B,IAAA,OAAO,WAAW;AACtB,EAAA;AAEA,EAAA,IAAI,MAAM,GAAG,WAAW,CAAC,aAAa;AAEtC,EAAA,OAAO,MAAM,EAAE;AACX,IAAA,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;AACrB,MAAA,OAAO,MAAM;AACjB,IAAA;IAEA,MAAM,GAAG,MAAM,CAAC,aAAa;AACjC,EAAA;AAEA,EAAA,OAAO,IAAI;AACf,CAAC;AAED,MAAM,kBAAkB,GAAG,CACvB,WAAwB,EACxB,eAA2B,KACZ;AACf,EAAA,MAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,CAAC;AAEpD,EAAA,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,MAAM,EAAE;IAC3C,OAAO,IAAI,qBAAqB,CAAC;MAC7B,SAAS;AACT,MAAA;AACJ,KAAC,CAAC;AACN,EAAA,CAAC,MAAM;IACH,OAAO,IAAI,oBAAoB,CAAC;MAAE,eAAe;AAAE,MAAA;AAAY,KAAC,CAAC;AACrE,EAAA;AACJ;;"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { HorizontalScrollDirection, VerticalScrollDirection } from "./scrollParent.js";
|
|
2
|
+
import { ScrollParent } from "./scrollParent.js";
|
|
3
|
+
interface Params {
|
|
4
|
+
refreshHitAreas: () => void;
|
|
5
|
+
treeElement: HTMLElement;
|
|
6
|
+
}
|
|
7
|
+
export default class DocumentScrollParent extends ScrollParent {
|
|
8
|
+
private documentScrollHeight?;
|
|
9
|
+
private documentScrollWidth?;
|
|
10
|
+
private treeElement;
|
|
11
|
+
constructor({ refreshHitAreas, treeElement }: Params);
|
|
12
|
+
scrollToY(top: number): void;
|
|
13
|
+
stopScrolling(): void;
|
|
14
|
+
protected getNewHorizontalScrollDirection(pageX: number): HorizontalScrollDirection | undefined;
|
|
15
|
+
protected getNewVerticalScrollDirection(pageY: number): undefined | VerticalScrollDirection;
|
|
16
|
+
private canScrollDown;
|
|
17
|
+
private canScrollRight;
|
|
18
|
+
private getDocumentScrollHeight;
|
|
19
|
+
private getDocumentScrollWidth;
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
22
|
+
//# sourceMappingURL=documentScrollParent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documentScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/documentScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACR,yBAAyB,EACzB,uBAAuB,EAC1B,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,UAAU,MAAM;IACZ,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,YAAY;IAC1D,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,CACrC,KAAK,EAAE,MAAM,GACd,yBAAyB,GAAG,SAAS;IAkBxC,SAAS,CAAC,6BAA6B,CACnC,KAAK,EAAE,MAAM,GACd,SAAS,GAAG,uBAAuB;IAiBtC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,sBAAsB;CAMjC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
import { getOffsetTop } from '../positionUtils.js';
|
|
2
|
+
import { ScrollParent } from './scrollParent.js';
|
|
3
|
+
|
|
4
|
+
class DocumentScrollParent extends ScrollParent {
|
|
5
|
+
_documentScrollHeight;
|
|
6
|
+
_documentScrollWidth;
|
|
7
|
+
_treeElement;
|
|
8
|
+
constructor({
|
|
9
|
+
refreshHitAreas,
|
|
10
|
+
treeElement
|
|
11
|
+
}) {
|
|
12
|
+
super({
|
|
13
|
+
container: document.documentElement,
|
|
14
|
+
refreshHitAreas
|
|
15
|
+
});
|
|
16
|
+
this._treeElement = treeElement;
|
|
17
|
+
}
|
|
18
|
+
scrollToY(top) {
|
|
19
|
+
const treeTop = getOffsetTop(this._treeElement);
|
|
20
|
+
super.scrollToY(top + treeTop);
|
|
21
|
+
}
|
|
22
|
+
stopScrolling() {
|
|
23
|
+
super.stopScrolling();
|
|
24
|
+
this._documentScrollHeight = undefined;
|
|
25
|
+
this._documentScrollWidth = undefined;
|
|
26
|
+
}
|
|
27
|
+
_getNewHorizontalScrollDirection(pageX) {
|
|
28
|
+
const scrollLeft = this._container.scrollLeft;
|
|
29
|
+
const windowWidth = window.innerWidth;
|
|
30
|
+
const isNearRightEdge = pageX > windowWidth - 20;
|
|
31
|
+
const isNearLeftEdge = pageX - scrollLeft < 20;
|
|
32
|
+
if (isNearRightEdge && this._canScrollRight()) {
|
|
33
|
+
return "right";
|
|
34
|
+
}
|
|
35
|
+
if (isNearLeftEdge) {
|
|
36
|
+
return "left";
|
|
37
|
+
}
|
|
38
|
+
return undefined;
|
|
39
|
+
}
|
|
40
|
+
_getNewVerticalScrollDirection(pageY) {
|
|
41
|
+
const scrollTop = this._container.scrollTop;
|
|
42
|
+
const distanceTop = pageY - scrollTop;
|
|
43
|
+
if (distanceTop < 20) {
|
|
44
|
+
return "top";
|
|
45
|
+
}
|
|
46
|
+
const windowHeight = window.innerHeight;
|
|
47
|
+
if (windowHeight - (pageY - scrollTop) < 20 && this._canScrollDown()) {
|
|
48
|
+
return "bottom";
|
|
49
|
+
}
|
|
50
|
+
return undefined;
|
|
51
|
+
}
|
|
52
|
+
_canScrollDown() {
|
|
53
|
+
return this._container.scrollTop + this._container.clientHeight < this._getDocumentScrollHeight();
|
|
54
|
+
}
|
|
55
|
+
_canScrollRight() {
|
|
56
|
+
return this._container.scrollLeft + this._container.clientWidth < this._getDocumentScrollWidth();
|
|
57
|
+
}
|
|
58
|
+
_getDocumentScrollHeight() {
|
|
59
|
+
// Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.
|
|
60
|
+
this._documentScrollHeight ??= this._container.scrollHeight;
|
|
61
|
+
return this._documentScrollHeight;
|
|
62
|
+
}
|
|
63
|
+
_getDocumentScrollWidth() {
|
|
64
|
+
// Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.
|
|
65
|
+
this._documentScrollWidth ??= this._container.scrollWidth;
|
|
66
|
+
return this._documentScrollWidth;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export { DocumentScrollParent as default };
|
|
71
|
+
//# sourceMappingURL=documentScrollParent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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":["documentScrollHeight","documentScrollWidth","treeElement","getNewHorizontalScrollDirection","container","canScrollRight","getNewVerticalScrollDirection","canScrollDown","getDocumentScrollHeight","getDocumentScrollWidth"],"mappings":";;;AAae,MAAM,oBAAoB,SAAS,YAAY,CAAC;EACnDA,qBAAoB;EACpBC,oBAAmB;EACnBC,YAAW;AAEnB,EAAA,WAAW,CAAC;IAAE,eAAe;AAAE,IAAA;AAAoB,GAAC,EAAE;AAClD,IAAA,KAAK,CAAC;MAAE,SAAS,EAAE,QAAQ,CAAC,eAAe;AAAE,MAAA;AAAgB,KAAC,CAAC;IAE/D,IAAI,CAACA,YAAW,GAAG,WAAW;AAClC,EAAA;EAEO,SAAS,CAAC,GAAW,EAAQ;AAChC,IAAA,MAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAACA,YAAW,CAAC;AAE9C,IAAA,KAAK,CAAC,SAAS,CAAC,GAAG,GAAG,OAAO,CAAC;AAClC,EAAA;AAEO,EAAA,aAAa,GAAG;IACnB,KAAK,CAAC,aAAa,EAAE;IAErB,IAAI,CAACF,qBAAoB,GAAG,SAAS;IACrC,IAAI,CAACC,oBAAmB,GAAG,SAAS;AACxC,EAAA;EAEUE,gCAA+BA,CACrC,KAAa,EACwB;AACrC,IAAA,MAAM,UAAU,GAAG,IAAI,CAACC,UAAS,CAAC,UAAU;AAC5C,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,UAAU;AAErC,IAAA,MAAM,eAAe,GAAG,KAAK,GAAG,WAAW,GAAG,EAAE;AAChD,IAAA,MAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,EAAE;AAE9C,IAAA,IAAI,eAAe,IAAI,IAAI,CAACC,eAAc,EAAE,EAAE;AAC1C,MAAA,OAAO,OAAO;AAClB,IAAA;AAEA,IAAA,IAAI,cAAc,EAAE;AAChB,MAAA,OAAO,MAAM;AACjB,IAAA;AAEA,IAAA,OAAO,SAAS;AACpB,EAAA;EAEUC,8BAA6BA,CACnC,KAAa,EACsB;AACnC,IAAA,MAAM,SAAS,GAAG,IAAI,CAACF,UAAS,CAAC,SAAS;AAC1C,IAAA,MAAM,WAAW,GAAG,KAAK,GAAG,SAAS;IAErC,IAAI,WAAW,GAAG,EAAE,EAAE;AAClB,MAAA,OAAO,KAAK;AAChB,IAAA;AAEA,IAAA,MAAM,YAAY,GAAG,MAAM,CAAC,WAAW;AAEvC,IAAA,IAAI,YAAY,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,IAAI,CAACG,cAAa,EAAE,EAAE;AACjE,MAAA,OAAO,QAAQ;AACnB,IAAA;AAEA,IAAA,OAAO,SAAS;AACpB,EAAA;AAEQA,EAAAA,cAAaA,GAAG;AACpB,IAAA,OACI,IAAI,CAACH,UAAS,CAAC,SAAS,GAAG,IAAI,CAACA,UAAS,CAAC,YAAY,GACtD,IAAI,CAACI,wBAAuB,EAAE;AAEtC,EAAA;AAEQH,EAAAA,eAAcA,GAAG;AACrB,IAAA,OACI,IAAI,CAACD,UAAS,CAAC,UAAU,GAAG,IAAI,CAACA,UAAS,CAAC,WAAW,GACtD,IAAI,CAACK,uBAAsB,EAAE;AAErC,EAAA;AAEQD,EAAAA,wBAAuBA,GAAG;AAC9B;AACA,IAAA,IAAI,CAACR,qBAAoB,KAAK,IAAI,CAACI,UAAS,CAAC,YAAY;IAEzD,OAAO,IAAI,CAACJ,qBAAoB;AACpC,EAAA;AAEQS,EAAAA,uBAAsBA,GAAG;AAC7B;AACA,IAAA,IAAI,CAACR,oBAAmB,KAAK,IAAI,CAACG,UAAS,CAAC,WAAW;IAEvD,OAAO,IAAI,CAACH,oBAAmB;AACnC,EAAA;AACJ;;"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export type HorizontalScrollDirection = "left" | "right";
|
|
2
|
+
export type VerticalScrollDirection = "bottom" | "top";
|
|
3
|
+
interface ConstructorParams {
|
|
4
|
+
container: HTMLElement;
|
|
5
|
+
refreshHitAreas: () => void;
|
|
6
|
+
}
|
|
7
|
+
export declare abstract class ScrollParent {
|
|
8
|
+
protected container: HTMLElement;
|
|
9
|
+
protected horizontalScrollDirection?: HorizontalScrollDirection;
|
|
10
|
+
protected horizontalScrollTimeout?: number;
|
|
11
|
+
protected refreshHitAreas: () => void;
|
|
12
|
+
protected verticalScrollDirection?: VerticalScrollDirection;
|
|
13
|
+
protected verticalScrollTimeout?: number;
|
|
14
|
+
constructor({ container, refreshHitAreas }: ConstructorParams);
|
|
15
|
+
checkHorizontalScrolling(pageX: number): void;
|
|
16
|
+
checkVerticalScrolling(pageY: number): void;
|
|
17
|
+
getScrollLeft(): number;
|
|
18
|
+
scrollToY(top: number): void;
|
|
19
|
+
stopScrolling(): void;
|
|
20
|
+
protected abstract getNewHorizontalScrollDirection(pageX: number): HorizontalScrollDirection | undefined;
|
|
21
|
+
protected abstract getNewVerticalScrollDirection(pageY: number): undefined | VerticalScrollDirection;
|
|
22
|
+
protected scrollHorizontally(): void;
|
|
23
|
+
protected scrollVertically(): void;
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=scrollParent.d.ts.map
|
|
@@ -0,0 +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;IACvB,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,EAAE,MAAM,IAAI,CAAC;CAC/B;AAED,8BAAsB,YAAY;IAC9B,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,CAC9C,KAAK,EAAE,MAAM,GACd,yBAAyB,GAAG,SAAS;IACxC,SAAS,CAAC,QAAQ,CAAC,6BAA6B,CAC5C,KAAK,EAAE,MAAM,GACd,SAAS,GAAG,uBAAuB;IAEtC,SAAS,CAAC,kBAAkB;IAiB5B,SAAS,CAAC,gBAAgB;CAgB7B"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
class ScrollParent {
|
|
2
|
+
_container;
|
|
3
|
+
_horizontalScrollDirection;
|
|
4
|
+
_horizontalScrollTimeout;
|
|
5
|
+
_refreshHitAreas;
|
|
6
|
+
_verticalScrollDirection;
|
|
7
|
+
_verticalScrollTimeout;
|
|
8
|
+
constructor({
|
|
9
|
+
container,
|
|
10
|
+
refreshHitAreas
|
|
11
|
+
}) {
|
|
12
|
+
this._container = container;
|
|
13
|
+
this._refreshHitAreas = refreshHitAreas;
|
|
14
|
+
}
|
|
15
|
+
checkHorizontalScrolling(pageX) {
|
|
16
|
+
const newHorizontalScrollDirection = this._getNewHorizontalScrollDirection(pageX);
|
|
17
|
+
if (this._horizontalScrollDirection !== newHorizontalScrollDirection) {
|
|
18
|
+
this._horizontalScrollDirection = newHorizontalScrollDirection;
|
|
19
|
+
if (this._horizontalScrollTimeout != null) {
|
|
20
|
+
window.clearTimeout(this._horizontalScrollTimeout);
|
|
21
|
+
}
|
|
22
|
+
if (newHorizontalScrollDirection) {
|
|
23
|
+
this._horizontalScrollTimeout = window.setTimeout(this._scrollHorizontally.bind(this), 40);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
checkVerticalScrolling(pageY) {
|
|
28
|
+
const newVerticalScrollDirection = this._getNewVerticalScrollDirection(pageY);
|
|
29
|
+
if (this._verticalScrollDirection !== newVerticalScrollDirection) {
|
|
30
|
+
this._verticalScrollDirection = newVerticalScrollDirection;
|
|
31
|
+
if (this._verticalScrollTimeout != null) {
|
|
32
|
+
window.clearTimeout(this._verticalScrollTimeout);
|
|
33
|
+
this._verticalScrollTimeout = undefined;
|
|
34
|
+
}
|
|
35
|
+
if (newVerticalScrollDirection) {
|
|
36
|
+
this._verticalScrollTimeout = window.setTimeout(this._scrollVertically.bind(this), 40);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
getScrollLeft() {
|
|
41
|
+
return this._container.scrollLeft;
|
|
42
|
+
}
|
|
43
|
+
scrollToY(top) {
|
|
44
|
+
this._container.scrollTop = top;
|
|
45
|
+
}
|
|
46
|
+
stopScrolling() {
|
|
47
|
+
this._horizontalScrollDirection = undefined;
|
|
48
|
+
this._verticalScrollDirection = undefined;
|
|
49
|
+
}
|
|
50
|
+
_scrollHorizontally() {
|
|
51
|
+
if (!this._horizontalScrollDirection) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const distance = this._horizontalScrollDirection === "left" ? -20 : 20;
|
|
55
|
+
this._container.scrollBy({
|
|
56
|
+
behavior: "instant",
|
|
57
|
+
left: distance,
|
|
58
|
+
top: 0
|
|
59
|
+
});
|
|
60
|
+
this._refreshHitAreas();
|
|
61
|
+
setTimeout(this._scrollHorizontally.bind(this), 40);
|
|
62
|
+
}
|
|
63
|
+
_scrollVertically() {
|
|
64
|
+
if (!this._verticalScrollDirection) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
const distance = this._verticalScrollDirection === "top" ? -20 : 20;
|
|
68
|
+
this._container.scrollBy({
|
|
69
|
+
behavior: "instant",
|
|
70
|
+
left: 0,
|
|
71
|
+
top: distance
|
|
72
|
+
});
|
|
73
|
+
this._refreshHitAreas();
|
|
74
|
+
setTimeout(this._scrollVertically.bind(this), 40);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
export { ScrollParent };
|
|
79
|
+
//# sourceMappingURL=scrollParent.js.map
|
|
@@ -0,0 +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 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","horizontalScrollDirection","horizontalScrollTimeout","refreshHitAreas","verticalScrollDirection","verticalScrollTimeout","getNewHorizontalScrollDirection","scrollHorizontally","getNewVerticalScrollDirection","scrollVertically"],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { PositionInfo } from "./mouseUtils.js";
|
|
2
|
+
interface ScrollHandlerParams {
|
|
3
|
+
refreshHitAreas: () => void;
|
|
4
|
+
treeElement: HTMLElement;
|
|
5
|
+
}
|
|
6
|
+
export default class ScrollHandler {
|
|
7
|
+
private refreshHitAreas;
|
|
8
|
+
private scrollParent?;
|
|
9
|
+
private treeElement;
|
|
10
|
+
constructor({ refreshHitAreas, treeElement }: ScrollHandlerParams);
|
|
11
|
+
checkScrolling(positionInfo: PositionInfo): void;
|
|
12
|
+
getScrollLeft(): number;
|
|
13
|
+
scrollToY(top: number): void;
|
|
14
|
+
stopScrolling(): void;
|
|
15
|
+
private checkHorizontalScrolling;
|
|
16
|
+
private checkVerticalScrolling;
|
|
17
|
+
private getScrollParent;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=scrollHandler.d.ts.map
|
|
@@ -0,0 +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;IACzB,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B,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;CAQ1B"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import createScrollParent from './scrollHandler/createScrollParent.js';
|
|
2
|
+
|
|
3
|
+
class ScrollHandler {
|
|
4
|
+
_refreshHitAreas;
|
|
5
|
+
_scrollParent;
|
|
6
|
+
_treeElement;
|
|
7
|
+
constructor({
|
|
8
|
+
refreshHitAreas,
|
|
9
|
+
treeElement
|
|
10
|
+
}) {
|
|
11
|
+
this._refreshHitAreas = refreshHitAreas;
|
|
12
|
+
this._scrollParent = undefined;
|
|
13
|
+
this._treeElement = treeElement;
|
|
14
|
+
}
|
|
15
|
+
checkScrolling(positionInfo) {
|
|
16
|
+
this._checkVerticalScrolling(positionInfo);
|
|
17
|
+
this._checkHorizontalScrolling(positionInfo);
|
|
18
|
+
}
|
|
19
|
+
getScrollLeft() {
|
|
20
|
+
return this._getScrollParent().getScrollLeft();
|
|
21
|
+
}
|
|
22
|
+
scrollToY(top) {
|
|
23
|
+
this._getScrollParent().scrollToY(top);
|
|
24
|
+
}
|
|
25
|
+
stopScrolling() {
|
|
26
|
+
this._getScrollParent().stopScrolling();
|
|
27
|
+
}
|
|
28
|
+
_checkHorizontalScrolling(positionInfo) {
|
|
29
|
+
this._getScrollParent().checkHorizontalScrolling(positionInfo.pageX);
|
|
30
|
+
}
|
|
31
|
+
_checkVerticalScrolling(positionInfo) {
|
|
32
|
+
this._getScrollParent().checkVerticalScrolling(positionInfo.pageY);
|
|
33
|
+
}
|
|
34
|
+
_getScrollParent() {
|
|
35
|
+
this._scrollParent ??= createScrollParent(this._treeElement, this._refreshHitAreas);
|
|
36
|
+
return this._scrollParent;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export { ScrollHandler as default };
|
|
41
|
+
//# sourceMappingURL=scrollHandler.js.map
|
|
@@ -0,0 +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 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","checkVerticalScrolling","checkHorizontalScrolling","getScrollParent"],"mappings":";;AAUe,MAAM,aAAa,CAAC;EACvBA,gBAAe;EACfC,aAAY;EACZC,YAAW;AAEnB,EAAA,WAAW,CAAC;IAAE,eAAe;AAAE,IAAA;AAAiC,GAAC,EAAE;IAC/D,IAAI,CAACF,gBAAe,GAAG,eAAe;IACtC,IAAI,CAACC,aAAY,GAAG,SAAS;IAC7B,IAAI,CAACC,YAAW,GAAG,WAAW;AAClC,EAAA;EAEO,cAAc,CAAC,YAA0B,EAAQ;AACpD,IAAA,IAAI,CAACC,uBAAsB,CAAC,YAAY,CAAC;AACzC,IAAA,IAAI,CAACC,yBAAwB,CAAC,YAAY,CAAC;AAC/C,EAAA;AAEO,EAAA,aAAa,GAAW;IAC3B,OAAO,IAAI,CAACC,gBAAe,EAAE,CAAC,aAAa,EAAE;AACjD,EAAA;EAEO,SAAS,CAAC,GAAW,EAAQ;IAChC,IAAI,CAACA,gBAAe,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC;AACzC,EAAA;AAEO,EAAA,aAAa,GAAG;AACnB,IAAA,IAAI,CAACA,gBAAe,EAAE,CAAC,aAAa,EAAE;AAC1C,EAAA;EAEQD,yBAAwBA,CAAC,YAA0B,EAAQ;IAC/D,IAAI,CAACC,gBAAe,EAAE,CAAC,wBAAwB,CAAC,YAAY,CAAC,KAAK,CAAC;AACvE,EAAA;EAEQF,uBAAsBA,CAAC,YAA0B,EAAQ;IAC7D,IAAI,CAACE,gBAAe,EAAE,CAAC,sBAAsB,CAAC,YAAY,CAAC,KAAK,CAAC;AACrE,EAAA;AAEQA,EAAAA,gBAAeA,GAAiB;AACpC,IAAA,IAAI,CAACJ,aAAY,KAAK,kBAAkB,CACpC,IAAI,CAACC,YAAW,EAChB,IAAI,CAACF,gBACT,CAAC;IAED,OAAO,IAAI,CAACC,aAAY;AAC5B,EAAA;AACJ;;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { GetNodeById, GetNodeElementForNode, OpenParents, TriggerEvent } from "./methodTypes.js";
|
|
2
|
+
import type { Node } from "./node.js";
|
|
3
|
+
import type { OnCanSelectNode } from "./options.js";
|
|
4
|
+
export interface SelectNodeOptions {
|
|
5
|
+
mustSetFocus?: boolean;
|
|
6
|
+
mustToggle?: boolean;
|
|
7
|
+
}
|
|
8
|
+
interface SelectNodeHandlerParameters {
|
|
9
|
+
getNodeById: GetNodeById;
|
|
10
|
+
getNodeElementForNode: GetNodeElementForNode;
|
|
11
|
+
getOnCanSelectNode: () => OnCanSelectNode | undefined;
|
|
12
|
+
getSelectable: () => boolean;
|
|
13
|
+
openParents: OpenParents;
|
|
14
|
+
saveState: () => void;
|
|
15
|
+
triggerEvent: TriggerEvent;
|
|
16
|
+
}
|
|
17
|
+
export default class SelectNodeHandler {
|
|
18
|
+
private getNodeById;
|
|
19
|
+
private getNodeElementForNode;
|
|
20
|
+
private getOnCanSelectNode;
|
|
21
|
+
private getSelectable;
|
|
22
|
+
private openParents;
|
|
23
|
+
private saveState;
|
|
24
|
+
private selectedNodes;
|
|
25
|
+
private selectedSingleNode;
|
|
26
|
+
private triggerEvent;
|
|
27
|
+
constructor({ getNodeById, getNodeElementForNode, getOnCanSelectNode, getSelectable, openParents, saveState, triggerEvent }: SelectNodeHandlerParameters);
|
|
28
|
+
addToSelection(node: Node): void;
|
|
29
|
+
clear(): void;
|
|
30
|
+
getSelectedNode(): false | Node;
|
|
31
|
+
getSelectedNodes(): Node[];
|
|
32
|
+
getSelectedNodesUnder(parent: Node): Node[];
|
|
33
|
+
isNodeSelected(node: Node): boolean;
|
|
34
|
+
removeFromSelection(node: Node, includeChildren?: boolean): void;
|
|
35
|
+
selectSingleNode(node: Node, optionsParam?: SelectNodeOptions): void;
|
|
36
|
+
}
|
|
37
|
+
export {};
|
|
38
|
+
//# sourceMappingURL=selectNodeHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectNodeHandler.d.ts","sourceRoot":"","sources":["../src/selectNodeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,qBAAqB,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACnG,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAC9B,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,UAAU,2BAA2B;IACjC,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;CAC9B;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB;IAClC,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,EAAE,WAAW,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,aAAa,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,EAAE,2BAA2B;IAYjJ,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQhC,KAAK,IAAI,IAAI;IAKb,eAAe,IAAI,KAAK,GAAG,IAAI;IAU/B,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;IAgC9D,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,iBAAiB;CA8CvE"}
|