tree-element 0.3.2 → 0.4.1
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 +23 -20
- package/lib/classNames.js +4 -4
- package/lib/classNames.js.map +1 -1
- package/lib/dataLoader.d.ts +0 -1
- package/lib/dataLoader.d.ts.map +1 -1
- package/lib/dataLoader.js +10 -7
- package/lib/dataLoader.js.map +1 -1
- package/lib/dragAndDropHandler/generateHitAreas.d.ts.map +1 -1
- package/lib/dragAndDropHandler/generateHitAreas.js +3 -2
- package/lib/dragAndDropHandler/generateHitAreas.js.map +1 -1
- package/lib/dragAndDropHandler/index.d.ts +2 -4
- package/lib/dragAndDropHandler/index.d.ts.map +1 -1
- package/lib/dragAndDropHandler/index.js +2 -9
- package/lib/dragAndDropHandler/index.js.map +1 -1
- package/lib/elementsRenderer.d.ts +11 -4
- package/lib/elementsRenderer.d.ts.map +1 -1
- package/lib/elementsRenderer.js +104 -43
- package/lib/elementsRenderer.js.map +1 -1
- package/lib/events.d.ts +13 -7
- package/lib/events.d.ts.map +1 -1
- package/lib/folderOpenState.d.ts +8 -0
- package/lib/folderOpenState.d.ts.map +1 -0
- package/lib/folderOpenState.js +22 -0
- package/lib/folderOpenState.js.map +1 -0
- package/lib/index.d.ts +27 -20
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +166 -65
- package/lib/index.js.map +1 -1
- package/lib/keyHandler.d.ts +16 -3
- package/lib/keyHandler.d.ts.map +1 -1
- package/lib/keyHandler.js +79 -32
- package/lib/keyHandler.js.map +1 -1
- package/lib/methodTypes.d.ts +3 -0
- package/lib/methodTypes.d.ts.map +1 -1
- package/lib/mouseHandler.d.ts.map +1 -1
- package/lib/mouseHandler.js +12 -12
- package/lib/mouseHandler.js.map +1 -1
- package/lib/node.d.ts +12 -10
- package/lib/node.d.ts.map +1 -1
- package/lib/node.js +12 -10
- package/lib/node.js.map +1 -1
- package/lib/nodeElement/folderElement.d.ts +7 -5
- package/lib/nodeElement/folderElement.d.ts.map +1 -1
- package/lib/nodeElement/folderElement.js +35 -55
- package/lib/nodeElement/folderElement.js.map +1 -1
- package/lib/nodeElement/index.d.ts +3 -2
- package/lib/nodeElement/index.d.ts.map +1 -1
- package/lib/nodeElement/index.js +15 -12
- package/lib/nodeElement/index.js.map +1 -1
- package/lib/options.d.ts +29 -14
- package/lib/options.d.ts.map +1 -1
- package/lib/options.js +12 -0
- package/lib/options.js.map +1 -0
- package/lib/saveStateHandler.d.ts.map +1 -1
- package/lib/saveStateHandler.js +6 -6
- package/lib/saveStateHandler.js.map +1 -1
- package/lib/selectNodeHandler.d.ts +3 -0
- package/lib/selectNodeHandler.d.ts.map +1 -1
- package/lib/selectNodeHandler.js +66 -22
- package/lib/selectNodeHandler.js.map +1 -1
- package/lib/setDefaultOptions.d.ts.map +1 -1
- package/lib/setDefaultOptions.js +1 -0
- package/lib/setDefaultOptions.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 +38 -32
- package/src/classNames.ts +4 -4
- package/src/dataLoader.ts +9 -10
- package/src/dragAndDropHandler/generateHitAreas.ts +3 -2
- package/src/dragAndDropHandler/index.ts +3 -17
- package/src/elementsRenderer.ts +124 -55
- package/src/events.ts +13 -7
- package/src/folderOpenState.ts +38 -0
- package/src/index.ts +191 -82
- package/src/keyHandler.ts +104 -34
- package/src/methodTypes.ts +6 -0
- package/src/mouseHandler.ts +15 -13
- package/src/node.ts +12 -10
- package/src/nodeElement/folderElement.ts +47 -72
- package/src/nodeElement/index.ts +20 -17
- package/src/options.ts +46 -14
- package/src/saveStateHandler.ts +5 -8
- package/src/selectNodeHandler.ts +69 -25
- package/src/setDefaultOptions.ts +1 -0
- package/src/version.ts +1 -1
- package/tree_element.css +48 -5
- package/tree_element.debug.js +540 -278
- package/tree_element.debug.js.map +1 -1
- package/tree_element.js +2 -2
- package/tree_element.js.map +1 -1
package/lib/keyHandler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyHandler.js","sources":["../src/keyHandler.ts"],"sourcesContent":["import type {\n CloseNode,\n GetFocusedNode,\n GetSelectedNode,\n GetTree,\n OpenNode,\n SelectNode,\n TriggerEvent,\n} from \"./methodTypes\";\nimport type { Node } from \"./node\";\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getFocusedNode: GetFocusedNode;\n getSelectedNode: GetSelectedNode;\n getTree: GetTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n triggerEvent: TriggerEvent;\n}\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private getFocusedNode: GetFocusedNode;\n private getSelectedNode: GetSelectedNode;\n private getTree: GetTree;\n\n private keyboardSupport: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n private triggerEvent: TriggerEvent;\n\n constructor({\n closeNode,\n getFocusedNode,\n getSelectedNode,\n getTree,\n keyboardSupport,\n openNode,\n selectNode,\n triggerEvent,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.getFocusedNode = getFocusedNode;\n this.getSelectedNode = getSelectedNode;\n this.getTree = getTree;\n this.keyboardSupport = keyboardSupport;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n this.triggerEvent = triggerEvent;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public deinit(): void {\n if (this.keyboardSupport) {\n document.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public moveDown(): boolean {\n return this.selectNode(this.getSelectedNode()?.getNextVisibleNode());\n }\n\n public moveUp(): boolean {\n return this.selectNode(this.getSelectedNode()?.getPreviousVisibleNode());\n }\n\n // Activate the node, for example to open its edit page.\n private activate(node: Node, originalEvent: KeyboardEvent): boolean {\n this.triggerEvent(\"tree.activate\", { node, originalEvent });\n return true;\n }\n\n private handleArrowKey(key: string): boolean {\n switch (key) {\n case \"ArrowDown\": {\n return this.moveDown();\n }\n\n case \"ArrowLeft\": {\n return this.moveLeft();\n }\n\n case \"ArrowRight\": {\n return this.moveRight();\n }\n\n case \"ArrowUp\": {\n return this.moveUp();\n }\n\n default: {\n return false;\n }\n }\n }\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n const focusedNode = this.getFocusedNode();\n\n if (!focusedNode) {\n return;\n }\n\n let isKeyHandled: boolean;\n\n const selectedNode = this.getSelectedNode();\n\n switch (e.key) {\n case \"End\": {\n isKeyHandled = this.selectNode(this.getTree()?.getLastChild());\n break;\n }\n\n case \"Enter\": {\n // Without a selected node, activate the focused node\n isKeyHandled = this.activate(selectedNode ?? focusedNode, e);\n break;\n }\n\n case \"Home\": {\n isKeyHandled = this.selectNode(this.getTree()?.children[0]);\n break;\n }\n\n default: {\n isKeyHandled = selectedNode\n ? this.handleArrowKey(e.key)\n : this.handleKeyWithoutSelection(e.key, focusedNode);\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n // No node is selected. These keys select the focused node, which is\n // usually the first node, see TreeElement.updateTabStop.\n private handleKeyWithoutSelection(key: string, focusedNode: Node): boolean {\n switch (key) {\n case \" \":\n case \"ArrowDown\":\n case \"ArrowRight\": {\n return this.selectNode(focusedNode);\n }\n\n default: {\n return false;\n }\n }\n }\n\n private moveLeft(): boolean {\n const selectedNode = this.getSelectedNode();\n\n /* istanbul ignore if */\n if (!selectedNode) {\n return false;\n }\n\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n void this.closeNode(selectedNode);\n return true;\n }\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n\n private moveRight(): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (selectedNode?.isFolder()) {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextVisibleNode());\n }\n // Right expands a closed node\n void this.openNode(selectedNode);\n return true;\n }\n return false;\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private selectNode(node?: Node | null): boolean {\n if (node) {\n this.originalSelectNode(node);\n\n return true;\n }\n return false;\n }\n}\n"],"names":["closeNode","getFocusedNode","getSelectedNode","getTree","keyboardSupport","openNode","originalSelectNode","triggerEvent","handleKeyDown","deinit","moveDown","selectNode","moveUp","activate","handleArrowKey","moveLeft","moveRight","handleKeyWithoutSelection"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"keyHandler.js","sources":["../src/keyHandler.ts"],"sourcesContent":["import type {\n CloseNode,\n FocusNode,\n GetActiveNode,\n GetFocusedNode,\n GetSelectedNode,\n GetTree,\n OpenNode,\n SelectNode,\n ToggleNodeInSelection,\n TriggerEvent,\n} from \"./methodTypes\";\nimport type { Node } from \"./node\";\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n focusNode: FocusNode;\n getActiveNode: GetActiveNode;\n getFocusedNode: GetFocusedNode;\n getSelectedNode: GetSelectedNode;\n getTree: GetTree;\n keyboardSupport: boolean;\n multiSelect: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n toggleNodeInSelection: ToggleNodeInSelection;\n triggerEvent: TriggerEvent;\n}\n\n/* The keys move from the selected node and select the node they move to.\n * With multiSelect they move from the focused node and only move the focus;\n * Space adds the focused node to the selection or removes it.\n */\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private focusNode: FocusNode;\n private getActiveNode: GetActiveNode;\n private getFocusedNode: GetFocusedNode;\n private getSelectedNode: GetSelectedNode;\n private getTree: GetTree;\n\n private keyboardSupport: boolean;\n private multiSelect: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n private toggleNodeInSelection: ToggleNodeInSelection;\n private triggerEvent: TriggerEvent;\n\n constructor({\n closeNode,\n focusNode,\n getActiveNode,\n getFocusedNode,\n getSelectedNode,\n getTree,\n keyboardSupport,\n multiSelect,\n openNode,\n selectNode,\n toggleNodeInSelection,\n triggerEvent,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.focusNode = focusNode;\n this.getActiveNode = getActiveNode;\n this.getFocusedNode = getFocusedNode;\n this.getSelectedNode = getSelectedNode;\n this.getTree = getTree;\n this.keyboardSupport = keyboardSupport;\n this.multiSelect = multiSelect;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n this.toggleNodeInSelection = toggleNodeInSelection;\n this.triggerEvent = triggerEvent;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public deinit(): void {\n if (this.keyboardSupport) {\n document.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public moveDown(): boolean {\n return this.goToNode(this.getCurrentNode()?.getNextVisibleNode());\n }\n\n public moveUp(): boolean {\n return this.goToNode(this.getCurrentNode()?.getPreviousVisibleNode());\n }\n\n // Change keyboardSupport after construction\n public setKeyboardSupport(keyboardSupport: boolean): void {\n if (keyboardSupport === this.keyboardSupport) {\n return;\n }\n\n this.keyboardSupport = keyboardSupport;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n } else {\n document.removeEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n // Change multiSelect after construction\n public setMultiSelect(multiSelect: boolean): void {\n this.multiSelect = multiSelect;\n }\n\n // Activate the node, for example to open its edit page.\n private activate(node: Node, originalEvent: KeyboardEvent): boolean {\n this.triggerEvent(\"tree.activate\", { node, originalEvent });\n return true;\n }\n\n // No node is selected. These keys select the focused node, which is\n // usually the first node, see TreeElement.updateTabStop.\n private getCurrentNode(): Node | null {\n return this.multiSelect ? this.getActiveNode() : this.getSelectedNode();\n }\n\n // Move to the node: select it, or with multiSelect focus it.\n // Result: there was a node to move to.\n private goToNode(node?: Node | null): boolean {\n if (!node) {\n return false;\n }\n\n if (this.multiSelect) {\n this.focusNode(node);\n } else {\n this.originalSelectNode(node);\n }\n\n return true;\n }\n\n private handleArrowKey(key: string): boolean {\n switch (key) {\n case \"ArrowDown\": {\n return this.moveDown();\n }\n\n case \"ArrowLeft\": {\n return this.moveLeft();\n }\n\n case \"ArrowRight\": {\n return this.moveRight();\n }\n\n case \"ArrowUp\": {\n return this.moveUp();\n }\n\n default: {\n return false;\n }\n }\n }\n\n private handleKey(key: string, focusedNode: Node): boolean {\n return this.getCurrentNode()\n ? this.handleArrowKey(key)\n : this.handleKeyWithoutSelection(key, focusedNode);\n }\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n const focusedNode = this.getFocusedNode();\n\n if (!focusedNode) {\n return;\n }\n\n let isKeyHandled: boolean;\n\n switch (e.key) {\n case \" \": {\n isKeyHandled = this.multiSelect\n ? this.toggle(focusedNode)\n : this.handleKey(e.key, focusedNode);\n break;\n }\n\n case \"End\": {\n isKeyHandled = this.goToNode(this.getTree()?.getLastChild());\n break;\n }\n\n case \"Enter\": {\n // Without a selected node, activate the focused node\n isKeyHandled = this.activate(\n this.multiSelect\n ? focusedNode\n : (this.getSelectedNode() ?? focusedNode),\n e,\n );\n break;\n }\n\n case \"Home\": {\n isKeyHandled = this.goToNode(this.getTree()?.children[0]);\n break;\n }\n\n default: {\n isKeyHandled = this.handleKey(e.key, focusedNode);\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private handleKeyWithoutSelection(key: string, focusedNode: Node): boolean {\n switch (key) {\n case \" \":\n case \"ArrowDown\":\n case \"ArrowRight\": {\n return this.goToNode(focusedNode);\n }\n\n default: {\n return false;\n }\n }\n }\n\n private moveLeft(): boolean {\n const currentNode = this.getCurrentNode();\n\n /* istanbul ignore if */\n if (!currentNode) {\n return false;\n }\n\n if (currentNode.isFolder() && currentNode.is_open) {\n // Left on an open node closes the node\n void this.closeNode(currentNode);\n return true;\n }\n // Left on a closed or end node moves focus to the node's parent\n return this.goToNode(currentNode.getParent());\n }\n\n private moveRight(): boolean {\n const currentNode = this.getCurrentNode();\n\n if (currentNode?.isFolder()) {\n // folder node\n if (currentNode.is_open) {\n // Right moves to the first child of an open node\n return this.goToNode(currentNode.getNextVisibleNode());\n }\n // Right expands a closed node\n void this.openNode(currentNode);\n return true;\n }\n return false;\n }\n\n private toggle(node: Node): boolean {\n this.toggleNodeInSelection(node);\n return true;\n }\n}\n"],"names":["closeNode","focusNode","getActiveNode","getFocusedNode","getSelectedNode","getTree","keyboardSupport","multiSelect","openNode","originalSelectNode","toggleNodeInSelection","triggerEvent","handleKeyDown","deinit","moveDown","goToNode","getCurrentNode","moveUp","setKeyboardSupport","setMultiSelect","activate","handleArrowKey","moveLeft","moveRight","handleKey","handleKeyWithoutSelection","toggle"],"mappings":"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"}
|
package/lib/methodTypes.d.ts
CHANGED
|
@@ -3,6 +3,8 @@ import type { Node, NodeData, NodeId } from "./node.js";
|
|
|
3
3
|
import type NodeElement from "./nodeElement/index.js";
|
|
4
4
|
export type AddToSelection = (node: Node) => void;
|
|
5
5
|
export type CloseNode = (node: Node) => Promise<void>;
|
|
6
|
+
export type FocusNode = (node: Node) => void;
|
|
7
|
+
export type GetActiveNode = () => Node | null;
|
|
6
8
|
export type GetFocusedNode = () => Node | null;
|
|
7
9
|
export type GetNodeById = (nodeId: NodeId) => Node | null;
|
|
8
10
|
export type GetNodeElementForNode = (node: Node) => NodeElement;
|
|
@@ -17,5 +19,6 @@ export type OpenParents = (node: Node) => void;
|
|
|
17
19
|
export type RefreshElements = (fromNode: Node | null) => void;
|
|
18
20
|
export type RemoveFromSelection = (node: Node) => void;
|
|
19
21
|
export type SelectNode = (node: Node) => void;
|
|
22
|
+
export type ToggleNodeInSelection = (node: Node) => void;
|
|
20
23
|
export type TriggerEvent = <Name extends TreeEventName>(eventName: Name, values?: TreeEvents[Name]) => boolean;
|
|
21
24
|
//# sourceMappingURL=methodTypes.d.ts.map
|
package/lib/methodTypes.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"methodTypes.d.ts","sourceRoot":"","sources":["../src/methodTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAElD,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtD,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAE/C,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,WAAW,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;AAEzC,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAEhD,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,EAAE,CAAC;AAE5C,MAAM,MAAM,OAAO,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;AAErE,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtE,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;AAE9D,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"methodTypes.d.ts","sourceRoot":"","sources":["../src/methodTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,KAAK,WAAW,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAElD,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtD,MAAM,MAAM,SAAS,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAE7C,MAAM,MAAM,aAAa,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAE9C,MAAM,MAAM,cAAc,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAE/C,MAAM,MAAM,WAAW,GAAG,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI,CAAC;AAE1D,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,WAAW,CAAC;AAEhE,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;AAEzC,MAAM,MAAM,eAAe,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAEhD,MAAM,MAAM,gBAAgB,GAAG,MAAM,IAAI,EAAE,CAAC;AAE5C,MAAM,MAAM,OAAO,GAAG,MAAM,IAAI,GAAG,IAAI,CAAC;AAExC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC;AAErD,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,UAAU,CAAC,EAAE,IAAI,KAAK,IAAI,CAAC;AAErE,MAAM,MAAM,QAAQ,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;AAEtE,MAAM,MAAM,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,KAAK,IAAI,CAAC;AAE9D,MAAM,MAAM,mBAAmB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAEvD,MAAM,MAAM,UAAU,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAE9C,MAAM,MAAM,qBAAqB,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;AAGzD,MAAM,MAAM,YAAY,GAAG,CAAC,IAAI,SAAS,aAAa,EACpD,SAAS,EAAE,IAAI,EACf,MAAM,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,KACtB,OAAO,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mouseHandler.d.ts","sourceRoot":"","sources":["../src/mouseHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAOnC,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;AACzC,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAAC;AAC5D,MAAM,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,KAAK,OAAO,GAAG,IAAI,CAAC;AAC1E,MAAM,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,YAAY,KAAK,OAAO,CAAC;AAOjE,UAAU,kBAAkB;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,cAAc,EAAE,YAAY,CAAC;IAC7B,WAAW,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD,YAAY,EAAE,UAAU,CAAC;IACzB,WAAW,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,cAAM,YAAY;IAChB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,eAAe,CAAU;IAEjC,OAAO,CAAC,cAAc,CAAU;IAEhC,OAAO,CAAC,eAAe,CAAgB;IAEvC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,YAAY,CAAuB;IAE3C,OAAO,CAAC,cAAc,CAAe;IAErC,OAAO,CAAC,WAAW,CAAuC;IAE1D,OAAO,CAAC,YAAY,CAAa;IAEjC,OAAO,CAAC,WAAW,CAAuC;IAE1D,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,cAAc,CAAU;gBACpB,EACV,UAAU,EACV,OAAO,EACP,aAAa,EACb,OAAO,EACP,aAAa,EACb,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,GACf,EAAE,kBAAkB;IAgCd,MAAM,IAAI,IAAI;IAYrB,OAAO,CAAC,cAAc;IA8BtB,OAAO,CAAC,WAAW,CAgCjB;IAEF,OAAO,CAAC,iBAAiB,
|
|
1
|
+
{"version":3,"file":"mouseHandler.d.ts","sourceRoot":"","sources":["../src/mouseHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAOnC,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;AACzC,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,WAAW,KAAK,IAAI,GAAG,IAAI,CAAC;AAC5D,MAAM,MAAM,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,KAAK,OAAO,GAAG,IAAI,CAAC;AAC1E,MAAM,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,YAAY,KAAK,OAAO,CAAC;AAOjE,UAAU,kBAAkB;IAC1B,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,YAAY,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IACnC,cAAc,EAAE,YAAY,CAAC;IAC7B,WAAW,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD,YAAY,EAAE,UAAU,CAAC;IACzB,WAAW,EAAE,CAAC,YAAY,EAAE,YAAY,KAAK,IAAI,CAAC;IAClD,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,cAAM,YAAY;IAChB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,eAAe,CAAU;IAEjC,OAAO,CAAC,cAAc,CAAU;IAEhC,OAAO,CAAC,eAAe,CAAgB;IAEvC,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,YAAY,CAAuB;IAE3C,OAAO,CAAC,cAAc,CAAe;IAErC,OAAO,CAAC,WAAW,CAAuC;IAE1D,OAAO,CAAC,YAAY,CAAa;IAEjC,OAAO,CAAC,WAAW,CAAuC;IAE1D,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,cAAc,CAAU;gBACpB,EACV,UAAU,EACV,OAAO,EACP,aAAa,EACb,OAAO,EACP,aAAa,EACb,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,cAAc,GACf,EAAE,kBAAkB;IAgCd,MAAM,IAAI,IAAI;IAYrB,OAAO,CAAC,cAAc;IA8BtB,OAAO,CAAC,WAAW,CAgCjB;IAEF,OAAO,CAAC,iBAAiB,CA0BvB;IAEF,OAAO,CAAC,cAAc,CAapB;IAEF,OAAO,CAAC,eAAe;IAiBvB,OAAO,CAAC,eAAe;IA+BvB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,SAAS,CAWf;IAEF,OAAO,CAAC,SAAS,CAEf;IAEF,OAAO,CAAC,OAAO,CAEb;IAEF,OAAO,CAAC,6BAA6B;IAOrC,OAAO,CAAC,oBAAoB;IAc5B,OAAO,CAAC,QAAQ,CAYd;IAEF,OAAO,CAAC,SAAS,CAYf;IAEF,OAAO,CAAC,UAAU,CAYhB;CACH;AAED,eAAe,YAAY,CAAC"}
|
package/lib/mouseHandler.js
CHANGED
|
@@ -110,19 +110,19 @@ class MouseHandler {
|
|
|
110
110
|
return;
|
|
111
111
|
}
|
|
112
112
|
let div = e.target.closest(`ul.${this._classNames.tree} .${this._classNames.element}`);
|
|
113
|
-
if (div) {
|
|
114
|
-
|
|
115
|
-
if (node) {
|
|
116
|
-
e.preventDefault();
|
|
117
|
-
e.stopPropagation();
|
|
118
|
-
this._triggerEvent("tree.contextmenu", {
|
|
119
|
-
node,
|
|
120
|
-
originalEvent: e
|
|
121
|
-
});
|
|
122
|
-
return false;
|
|
123
|
-
}
|
|
113
|
+
if (!div) {
|
|
114
|
+
return;
|
|
124
115
|
}
|
|
125
|
-
|
|
116
|
+
let node = this._getNode(div);
|
|
117
|
+
if (!node) {
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
e.preventDefault();
|
|
121
|
+
e.stopPropagation();
|
|
122
|
+
this._triggerEvent("tree.contextmenu", {
|
|
123
|
+
node,
|
|
124
|
+
originalEvent: e
|
|
125
|
+
});
|
|
126
126
|
};
|
|
127
127
|
_handleDblclick = e => {
|
|
128
128
|
if (!e.target) {
|
package/lib/mouseHandler.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mouseHandler.js","sources":["../src/mouseHandler.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { TriggerEvent } from \"./methodTypes\";\nimport type { PositionInfo } from \"./mouseUtils\";\nimport type { Node } from \"./node\";\n\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n} from \"./mouseUtils\";\n\nexport type GetMouseDelay = () => number;\nexport type GetNode = (element: HTMLElement) => Node | null;\nexport type MouseCapture = (positionInfo: PositionInfo) => boolean | null;\nexport type MouseStart = (positionInfo: PositionInfo) => boolean;\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ninterface MouseHandlerParams {\n classNames: ClassNames;\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => Promise<void>;\n onClickTitle: (node: Node) => void;\n onMouseCapture: MouseCapture;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: MouseStart;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private classNames: ClassNames;\n private element: HTMLElement;\n private getMouseDelay: GetMouseDelay;\n private getNode: GetNode;\n\n private isMouseDelayMet: boolean;\n\n private isMouseStarted: boolean;\n\n private mouseDelayTimer: null | number;\n\n private mouseDownInfo: null | PositionInfo;\n private onClickButton: (node: Node) => Promise<void>;\n private onClickTitle: (node: Node) => void;\n\n private onMouseCapture: MouseCapture;\n\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n\n private onMouseStart: MouseStart;\n\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\n constructor({\n classNames,\n element,\n getMouseDelay,\n getNode,\n onClickButton,\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu,\n }: MouseHandlerParams) {\n this.classNames = classNames;\n this.element = element;\n this.getMouseDelay = getMouseDelay;\n this.getNode = getNode;\n this.onClickButton = onClickButton;\n this.onClickTitle = onClickTitle;\n this.onMouseCapture = onMouseCapture;\n this.onMouseDrag = onMouseDrag;\n this.onMouseStart = onMouseStart;\n this.onMouseStop = onMouseStop;\n this.triggerEvent = triggerEvent;\n this.useContextMenu = useContextMenu;\n\n element.addEventListener(\"click\", this.handleClick);\n element.addEventListener(\"dblclick\", this.handleDblclick);\n element.addEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n\n if (useContextMenu) {\n element.addEventListener(\"contextmenu\", this.handleContextmenu);\n }\n\n this.isMouseStarted = false;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n }\n public deinit(): void {\n this.element.removeEventListener(\"click\", this.handleClick);\n this.element.removeEventListener(\"dblclick\", this.handleDblclick);\n\n if (this.useContextMenu) {\n this.element.removeEventListener(\"contextmenu\", this.handleContextmenu);\n }\n\n this.element.removeEventListener(\"mousedown\", this.mouseDown);\n this.element.removeEventListener(\"touchstart\", this.touchStart);\n this.removeMouseMoveEventListeners();\n }\n private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest<HTMLElement>(`.${this.classNames.toggler}`);\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const treeElement = element.closest<HTMLElement>(\n `.${this.classNames.element}`,\n );\n\n if (treeElement) {\n const node = this.getNode(treeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\": {\n void this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n\n case \"label\": {\n if (\n this.triggerEvent(\"tree.click\", {\n node: clickTarget.node,\n originalEvent: e,\n })\n ) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest<HTMLElement>(\n `ul.${this.classNames.tree} .${this.classNames.element}`,\n );\n\n if (div) {\n const node = this.getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n node,\n originalEvent: e,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n node: clickTarget.node,\n originalEvent: e,\n });\n }\n };\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (!this.isMouseStarted) {\n return;\n }\n\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private mouseDown = (e: MouseEvent): void => {\n // Left mouse button?\n if (e.button !== 0) {\n return;\n }\n\n const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));\n\n if (result && e.cancelable) {\n e.preventDefault();\n }\n };\n\n private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseHandler;\n"],"names":["classNames","element","getMouseDelay","getNode","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","triggerEvent","useContextMenu","handleClick","handleDblclick","mouseDown","touchStart","handleContextmenu","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","deinit","removeMouseMoveEventListeners","getClickTarget","handleMouseDown","handleMouseUp","handleStartMouse","handleMouseMove","mouseMove","touchMove","mouseUp","touchEnd","startMouseDelayTimer"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mouseHandler.js","sources":["../src/mouseHandler.ts"],"sourcesContent":["import type { ClassNames } from \"./classNames\";\nimport type { TriggerEvent } from \"./methodTypes\";\nimport type { PositionInfo } from \"./mouseUtils\";\nimport type { Node } from \"./node\";\n\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n} from \"./mouseUtils\";\n\nexport type GetMouseDelay = () => number;\nexport type GetNode = (element: HTMLElement) => Node | null;\nexport type MouseCapture = (positionInfo: PositionInfo) => boolean | null;\nexport type MouseStart = (positionInfo: PositionInfo) => boolean;\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ninterface MouseHandlerParams {\n classNames: ClassNames;\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => Promise<void>;\n onClickTitle: (node: Node) => void;\n onMouseCapture: MouseCapture;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: MouseStart;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private classNames: ClassNames;\n private element: HTMLElement;\n private getMouseDelay: GetMouseDelay;\n private getNode: GetNode;\n\n private isMouseDelayMet: boolean;\n\n private isMouseStarted: boolean;\n\n private mouseDelayTimer: null | number;\n\n private mouseDownInfo: null | PositionInfo;\n private onClickButton: (node: Node) => Promise<void>;\n private onClickTitle: (node: Node) => void;\n\n private onMouseCapture: MouseCapture;\n\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n\n private onMouseStart: MouseStart;\n\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\n constructor({\n classNames,\n element,\n getMouseDelay,\n getNode,\n onClickButton,\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu,\n }: MouseHandlerParams) {\n this.classNames = classNames;\n this.element = element;\n this.getMouseDelay = getMouseDelay;\n this.getNode = getNode;\n this.onClickButton = onClickButton;\n this.onClickTitle = onClickTitle;\n this.onMouseCapture = onMouseCapture;\n this.onMouseDrag = onMouseDrag;\n this.onMouseStart = onMouseStart;\n this.onMouseStop = onMouseStop;\n this.triggerEvent = triggerEvent;\n this.useContextMenu = useContextMenu;\n\n element.addEventListener(\"click\", this.handleClick);\n element.addEventListener(\"dblclick\", this.handleDblclick);\n element.addEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n\n if (useContextMenu) {\n element.addEventListener(\"contextmenu\", this.handleContextmenu);\n }\n\n this.isMouseStarted = false;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n }\n public deinit(): void {\n this.element.removeEventListener(\"click\", this.handleClick);\n this.element.removeEventListener(\"dblclick\", this.handleDblclick);\n\n if (this.useContextMenu) {\n this.element.removeEventListener(\"contextmenu\", this.handleContextmenu);\n }\n\n this.element.removeEventListener(\"mousedown\", this.mouseDown);\n this.element.removeEventListener(\"touchstart\", this.touchStart);\n this.removeMouseMoveEventListeners();\n }\n private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest<HTMLElement>(`.${this.classNames.toggler}`);\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const treeElement = element.closest<HTMLElement>(\n `.${this.classNames.element}`,\n );\n\n if (treeElement) {\n const node = this.getNode(treeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\": {\n void this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n }\n\n case \"label\": {\n if (\n this.triggerEvent(\"tree.click\", {\n node: clickTarget.node,\n originalEvent: e,\n })\n ) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest<HTMLElement>(\n `ul.${this.classNames.tree} .${this.classNames.element}`,\n );\n\n if (!div) {\n return;\n }\n\n const node = this.getNode(div);\n\n if (!node) {\n return;\n }\n\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n node,\n originalEvent: e,\n });\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n node: clickTarget.node,\n originalEvent: e,\n });\n }\n };\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (!this.isMouseStarted) {\n return;\n }\n\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private mouseDown = (e: MouseEvent): void => {\n // Left mouse button?\n if (e.button !== 0) {\n return;\n }\n\n const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));\n\n if (result && e.cancelable) {\n e.preventDefault();\n }\n };\n\n private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseHandler;\n"],"names":["classNames","element","getMouseDelay","getNode","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","triggerEvent","useContextMenu","handleClick","handleDblclick","mouseDown","touchStart","handleContextmenu","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","deinit","removeMouseMoveEventListeners","getClickTarget","handleMouseDown","handleMouseUp","handleStartMouse","handleMouseMove","mouseMove","touchMove","mouseUp","touchEnd","startMouseDelayTimer"],"mappings":"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"}
|
package/lib/node.d.ts
CHANGED
|
@@ -14,14 +14,14 @@ type IterateCallback = (node: Node, level: number) => boolean;
|
|
|
14
14
|
*
|
|
15
15
|
* @groupDescription Searching
|
|
16
16
|
* These work on any node, and search that node's subtree. Called on the root
|
|
17
|
-
* node, they search the whole tree
|
|
17
|
+
* node, they search the whole tree—which is what the tree's own methods of
|
|
18
18
|
* the same name do.
|
|
19
19
|
*
|
|
20
20
|
* @groupDescription Changing the tree
|
|
21
21
|
* ::: warning
|
|
22
22
|
* These methods change the data without re-rendering. The tree's
|
|
23
|
-
* [methods](/reference/methods)
|
|
24
|
-
* friends
|
|
23
|
+
* [methods](/reference/methods)—`appendNode`, `removeNode`, `moveNode` and
|
|
24
|
+
* friends—do the same and refresh the display, so prefer those. If you do
|
|
25
25
|
* use these, call `tree.refresh()` afterwards.
|
|
26
26
|
* :::
|
|
27
27
|
*/
|
|
@@ -70,7 +70,7 @@ export declare class Node {
|
|
|
70
70
|
*/
|
|
71
71
|
nodeClass?: typeof Node;
|
|
72
72
|
/**
|
|
73
|
-
The parent
|
|
73
|
+
The parent, or `null` for the root node.
|
|
74
74
|
*/
|
|
75
75
|
parent: Node | null;
|
|
76
76
|
/**
|
|
@@ -113,7 +113,9 @@ export declare class Node {
|
|
|
113
113
|
*/
|
|
114
114
|
addNodeToIndex(node: Node): void;
|
|
115
115
|
/**
|
|
116
|
-
* Inserts a new parent between this node and its current parent.
|
|
116
|
+
* Inserts a new parent between this node and its current parent. Its
|
|
117
|
+
* siblings move along: the new node takes all children of the current
|
|
118
|
+
* parent, and becomes its only child.
|
|
117
119
|
*
|
|
118
120
|
* @returns The new node, or `null` when the node has no parent.
|
|
119
121
|
* @group Changing the tree
|
|
@@ -148,7 +150,7 @@ export declare class Node {
|
|
|
148
150
|
* Returns the subtree as plain data, ready for `JSON.stringify`.
|
|
149
151
|
* Internal properties (`parent`, `children`, `element`, `tree`,
|
|
150
152
|
* `idMapping`, `nodeClass`, `load_on_demand`, `isEmptyFolder`) are left
|
|
151
|
-
* out
|
|
153
|
+
* out. Your own properties are kept.
|
|
152
154
|
*
|
|
153
155
|
* ```js
|
|
154
156
|
* tree.getTree().getData();
|
|
@@ -187,7 +189,7 @@ export declare class Node {
|
|
|
187
189
|
*/
|
|
188
190
|
getNextSibling(): Node | null;
|
|
189
191
|
/**
|
|
190
|
-
* Like `getNextNode`, but skipping nodes inside closed folders
|
|
192
|
+
* Like `getNextNode`, but skipping nodes inside closed folders. This is
|
|
191
193
|
* what the arrow keys use.
|
|
192
194
|
*
|
|
193
195
|
* @group Moving around the tree
|
|
@@ -225,7 +227,7 @@ export declare class Node {
|
|
|
225
227
|
*/
|
|
226
228
|
getNodesByProperty(key: string, value: unknown): Node[];
|
|
227
229
|
/**
|
|
228
|
-
* Returns the parent
|
|
230
|
+
* Returns the parent, or `null` for a top-level node: the root node is not
|
|
229
231
|
* returned.
|
|
230
232
|
*
|
|
231
233
|
* @group Moving around the tree
|
|
@@ -245,8 +247,8 @@ export declare class Node {
|
|
|
245
247
|
*/
|
|
246
248
|
getPreviousSibling(): Node | null;
|
|
247
249
|
/**
|
|
248
|
-
* Like `getPreviousNode`, but skipping nodes inside closed folders
|
|
249
|
-
*
|
|
250
|
+
* Like `getPreviousNode`, but skipping nodes inside closed folders.
|
|
251
|
+
* This is what the arrow keys use.
|
|
250
252
|
*
|
|
251
253
|
* @group Moving around the tree
|
|
252
254
|
*/
|
package/lib/node.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"AASA,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC;AAE3C,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,QAAQ,CAAC,EAAE,QAAQ,EAAE,CAAC;IACtB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAErD,KAAK,eAAe,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC;AAE9D;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,IAAI;IACf;;MAEE;IACF,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;IAEvB;;MAEE;IACK,QAAQ,EAAE,IAAI,EAAE,CAAC;IACxB;wDACoD;IAC7C,OAAO,CAAC,EAAE,WAAW,CAAC;IAC7B;;MAEE;IACK,EAAE,CAAC,EAAE,MAAM,CAAC;IACnB;;MAEE;IACK,SAAS,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IACrC;;MAEE;IACK,UAAU,CAAC,EAAE,OAAO,CAAC;IAC5B;;MAEE;IACK,OAAO,CAAC,EAAE,OAAO,CAAC;IACzB;;MAEE;IACK,aAAa,EAAE,OAAO,CAAC;IAC9B;;MAEE;IACK,cAAc,UAAS;IAC9B;;MAEE;IACK,IAAI,SAAM;IACjB;;MAEE;IACK,SAAS,CAAC,EAAE,OAAO,IAAI,CAAC;IAC/B;;MAEE;IACK,MAAM,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B;;MAEE;IACK,IAAI,CAAC,EAAE,IAAI,CAAC;IAEnB;;MAEE;gBAEA,QAAQ,GAAE,QAAQ,GAAG,IAAW,EAChC,MAAM,UAAQ,EACd,SAAS,cAAO;IAuBlB;;;;;OAKG;IACI,QAAQ,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAahD;;;;;OAKG;IACI,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAajD;;;;OAIG;IACI,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAKjC;;;;;OAKG;IACI,kBAAkB,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAK1D;;MAEE;IACK,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAMvC
|
|
1
|
+
{"version":3,"file":"node.d.ts","sourceRoot":"","sources":["../src/node.ts"],"names":[],"mappings":"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"}
|
package/lib/node.js
CHANGED
|
@@ -14,14 +14,14 @@ prefix-private-members: all
|
|
|
14
14
|
*
|
|
15
15
|
* @groupDescription Searching
|
|
16
16
|
* These work on any node, and search that node's subtree. Called on the root
|
|
17
|
-
* node, they search the whole tree
|
|
17
|
+
* node, they search the whole tree—which is what the tree's own methods of
|
|
18
18
|
* the same name do.
|
|
19
19
|
*
|
|
20
20
|
* @groupDescription Changing the tree
|
|
21
21
|
* ::: warning
|
|
22
22
|
* These methods change the data without re-rendering. The tree's
|
|
23
|
-
* [methods](/reference/methods)
|
|
24
|
-
* friends
|
|
23
|
+
* [methods](/reference/methods)—`appendNode`, `removeNode`, `moveNode` and
|
|
24
|
+
* friends—do the same and refresh the display, so prefer those. If you do
|
|
25
25
|
* use these, call `tree.refresh()` afterwards.
|
|
26
26
|
* :::
|
|
27
27
|
*/
|
|
@@ -70,7 +70,7 @@ class Node {
|
|
|
70
70
|
*/
|
|
71
71
|
nodeClass;
|
|
72
72
|
/**
|
|
73
|
-
The parent
|
|
73
|
+
The parent, or `null` for the root node.
|
|
74
74
|
*/
|
|
75
75
|
parent;
|
|
76
76
|
/**
|
|
@@ -162,7 +162,9 @@ class Node {
|
|
|
162
162
|
}
|
|
163
163
|
|
|
164
164
|
/**
|
|
165
|
-
* Inserts a new parent between this node and its current parent.
|
|
165
|
+
* Inserts a new parent between this node and its current parent. Its
|
|
166
|
+
* siblings move along: the new node takes all children of the current
|
|
167
|
+
* parent, and becomes its only child.
|
|
166
168
|
*
|
|
167
169
|
* @returns The new node, or `null` when the node has no parent.
|
|
168
170
|
* @group Changing the tree
|
|
@@ -232,7 +234,7 @@ class Node {
|
|
|
232
234
|
* Returns the subtree as plain data, ready for `JSON.stringify`.
|
|
233
235
|
* Internal properties (`parent`, `children`, `element`, `tree`,
|
|
234
236
|
* `idMapping`, `nodeClass`, `load_on_demand`, `isEmptyFolder`) are left
|
|
235
|
-
* out
|
|
237
|
+
* out. Your own properties are kept.
|
|
236
238
|
*
|
|
237
239
|
* ```js
|
|
238
240
|
* tree.getTree().getData();
|
|
@@ -324,7 +326,7 @@ class Node {
|
|
|
324
326
|
}
|
|
325
327
|
|
|
326
328
|
/**
|
|
327
|
-
* Like `getNextNode`, but skipping nodes inside closed folders
|
|
329
|
+
* Like `getNextNode`, but skipping nodes inside closed folders. This is
|
|
328
330
|
* what the arrow keys use.
|
|
329
331
|
*
|
|
330
332
|
* @group Moving around the tree
|
|
@@ -408,7 +410,7 @@ class Node {
|
|
|
408
410
|
}
|
|
409
411
|
|
|
410
412
|
/**
|
|
411
|
-
* Returns the parent
|
|
413
|
+
* Returns the parent, or `null` for a top-level node: the root node is not
|
|
412
414
|
* returned.
|
|
413
415
|
*
|
|
414
416
|
* @group Moving around the tree
|
|
@@ -456,8 +458,8 @@ class Node {
|
|
|
456
458
|
}
|
|
457
459
|
|
|
458
460
|
/**
|
|
459
|
-
* Like `getPreviousNode`, but skipping nodes inside closed folders
|
|
460
|
-
*
|
|
461
|
+
* Like `getPreviousNode`, but skipping nodes inside closed folders.
|
|
462
|
+
* This is what the arrow keys use.
|
|
461
463
|
*
|
|
462
464
|
* @group Moving around the tree
|
|
463
465
|
*/
|
package/lib/node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node.js","sources":["../src/node.ts"],"sourcesContent":["/*\nA node reads and writes the private members of other nodes (node.setParent),\nso the `_` prefix that the build adds cannot be limited to `this.`:\n\nprefix-private-members: all\n*/\n\nimport { isNodeRecordWithChildren } from \"./nodeUtils\";\n\nexport type NodeData = NodeRecord | string;\n\nexport type NodeId = number | string;\n\nexport interface NodeRecord {\n [key: string]: unknown;\n children?: NodeData[];\n id?: NodeId;\n}\n\nexport type Position = \"after\" | \"before\" | \"inside\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\n/**\n * @groupDescription Properties\n * Any other key in the node data is copied onto the node, so\n * `{ name: \"node1\", color: \"green\" }` gives you `node.color`.\n *\n * @groupDescription Searching\n * These work on any node, and search that node's subtree. Called on the root\n * node, they search the whole tree — which is what the tree's own methods of\n * the same name do.\n *\n * @groupDescription Changing the tree\n * ::: warning\n * These methods change the data without re-rendering. The tree's\n * [methods](/reference/methods) — `appendNode`, `removeNode`, `moveNode` and\n * friends — do the same and refresh the display, so prefer those. If you do\n * use these, call `tree.refresh()` afterwards.\n * :::\n */\nexport class Node {\n /**\n @hidden\n */\n [key: string]: unknown;\n\n /**\n The child nodes.\n */\n public children: Node[];\n /** The `li` element, once the node is rendered. Nodes inside a closed\n * folder are rendered when the folder is opened. */\n public element?: HTMLElement;\n /**\n The id from the node data.\n */\n public id?: NodeId;\n /**\n @hidden\n */\n public idMapping?: Map<NodeId, Node>;\n /**\n Whether the node's children are being fetched.\n */\n public is_loading?: boolean;\n /**\n Whether the folder is open.\n */\n public is_open?: boolean;\n /**\n Whether the node data had an empty `children` array.\n */\n public isEmptyFolder: boolean;\n /**\n Whether the children still have to be fetched.\n */\n public load_on_demand = false;\n /**\n The label. Also settable from the `label` key in node data.\n */\n public name = \"\";\n /**\n @hidden\n */\n public nodeClass?: typeof Node;\n /**\n The parent; `null` for the root node.\n */\n public parent: Node | null;\n /**\n The root node.\n */\n public tree?: Node;\n\n /**\n @hidden\n */\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n this.is_loading = undefined;\n this.is_open ??= undefined;\n\n if (isRoot) {\n this.idMapping = new Map<NodeId, Node>();\n this.tree = this;\n this.nodeClass = nodeClass;\n } else {\n this.idMapping = undefined;\n }\n }\n\n /**\n * Adds a sibling after this node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addAfter(nodeInfo: NodeData): Node | null {\n if (this.parent) {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n return null;\n }\n\n /**\n * Adds a sibling before this node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addBefore(nodeInfo: NodeData): Node | null {\n if (this.parent) {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n return null;\n }\n\n /**\n * Adds an existing `Node` object as the last child.\n *\n * @group Changing the tree\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /**\n * Adds an existing `Node` object as a child, at this position in\n * `children`. The index starts at `0`.\n *\n * @group Changing the tree\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n /**\n @hidden\n */\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping?.set(node.id, node);\n }\n }\n\n /**\n * Inserts a new parent between this node and its current parent.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addParent(nodeInfo: NodeData): Node | null {\n if (this.parent) {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n return null;\n }\n\n /**\n * Adds a child at the end.\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n /**\n * Returns all nodes in the subtree for which the callback returns\n * `true`.\n *\n * @example\n * ```js\n * const folders = tree.getTree().filter((node) => node.isFolder());\n * ```\n *\n * @group Searching\n */\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /**\n * Returns the position of a child in `children`, or `-1`.\n *\n * @group Inspecting a node\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /**\n * Returns the subtree as plain data, ready for `JSON.stringify`.\n * Internal properties (`parent`, `children`, `element`, `tree`,\n * `idMapping`, `nodeClass`, `load_on_demand`, `isEmptyFolder`) are left\n * out; your own properties are kept.\n *\n * ```js\n * tree.getTree().getData();\n * // [{ name: \"node1\", id: 1, children: [{ name: \"child1\", id: 2 }] }]\n * ```\n *\n * @param includeParent - Make the result the node itself rather than its\n * children. Default `false`.\n * @group Reading data back\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record<string, unknown>[] => {\n return nodes.map((node) => {\n const tmpNode: Record<string, unknown> = {};\n\n for (const k in node) {\n if (\n [\n \"children\",\n \"element\",\n \"idMapping\",\n \"isEmptyFolder\",\n \"load_on_demand\",\n \"nodeClass\",\n \"parent\",\n \"tree\",\n ].includes(k) ||\n !Object.prototype.hasOwnProperty.call(node, k)\n ) {\n continue;\n }\n\n const v = node[k];\n tmpNode[k] = v;\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n return getDataFromNodes(includeParent ? [this] : this.children);\n }\n\n /**\n * Returns the last child, or `null`. When that child is an open folder,\n * its own last child, and so on.\n *\n * @group Moving around the tree\n */\n public getLastChild(): Node | null {\n if (this.hasChildren()) {\n const lastChild = this.children[this.children.length - 1] as Node;\n\n return lastChild.hasChildren() && lastChild.is_open\n ? lastChild.getLastChild()\n : lastChild;\n }\n return null;\n }\n\n /**\n * Returns the depth of the node, counting the top level as `1`.\n *\n * @group Inspecting a node\n */\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias, unicorn/no-this-assignment\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n /**\n * Returns the next node in the tree, regardless of whether it is\n * visible. `getNextNode(false)` skips the node's own children.\n *\n * @group Moving around the tree\n */\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n }\n if (this.parent) {\n const nextSibling = this.getNextSibling();\n\n return nextSibling ?? this.parent.getNextNode(false);\n }\n return null;\n }\n\n /**\n * Returns the next sibling, or `null`.\n *\n * @group Moving around the tree\n */\n public getNextSibling(): Node | null {\n if (this.parent) {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n return nextIndex < this.parent.children.length\n ? (this.parent.children[nextIndex] ?? null)\n : null;\n }\n return null;\n }\n\n /**\n * Like `getNextNode`, but skipping nodes inside closed folders — this is\n * what the arrow keys use.\n *\n * @group Moving around the tree\n */\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n }\n if (this.parent) {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n }\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n return null;\n }\n\n /**\n * Returns the first node for which the callback returns `true`.\n *\n * @group Searching\n */\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n }\n if (callback(node)) {\n result = node;\n return false;\n }\n return true;\n });\n\n return result;\n }\n\n /**\n * Returns the node with this id. Only available on the root node, which\n * keeps the id index.\n *\n * @group Searching\n */\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping?.get(nodeId) ?? null;\n }\n\n /**\n * Returns the first node with this name.\n *\n * @group Searching\n */\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n /**\n * Like `getNodeByName`, but throws when there is no such node.\n *\n * @group Searching\n */\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n /**\n * Returns all nodes with this property value.\n *\n * @group Searching\n */\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n /**\n * Returns the parent: `null` for a top-level node — the root node is not\n * returned.\n *\n * @group Moving around the tree\n */\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n }\n if (this.parent.parent) {\n return this.parent;\n }\n // Root node -> null\n return null;\n }\n\n /**\n * Returns the previous node in the tree, regardless of whether it is\n * visible.\n *\n * @group Moving around the tree\n */\n public getPreviousNode(): Node | null {\n if (this.parent) {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n }\n return previousSibling.hasChildren()\n ? previousSibling.getLastChild()\n : previousSibling;\n }\n return null;\n }\n\n /**\n * Returns the previous sibling, or `null`.\n *\n * @group Moving around the tree\n */\n public getPreviousSibling(): Node | null {\n if (this.parent) {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n return previousIndex >= 0\n ? (this.parent.children[previousIndex] ?? null)\n : null;\n }\n return null;\n }\n\n /**\n * Like `getPreviousNode`, but skipping nodes inside closed folders —\n * this is what the arrow keys use.\n *\n * @group Moving around the tree\n */\n public getPreviousVisibleNode(): Node | null {\n if (this.parent) {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n }\n if (!previousSibling.hasChildren() || !previousSibling.is_open) {\n // Previous sibling\n return previousSibling;\n }\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n return null;\n }\n\n /**\n * Whether the node has children.\n *\n * @group Inspecting a node\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n /**\n * Init Node from data without making it the root of the tree.\n *\n * @hidden\n */\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (isNodeRecordWithChildren(nodeData) && nodeData.children.length) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n /**\n * `true` when the node has children, or is marked `load_on_demand`.\n *\n * @group Inspecting a node\n */\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n /**\n * Whether this node is an ancestor of the other node.\n *\n * @group Inspecting a node\n */\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /**\n * Walks the subtree, calling the callback with `(node, level)`. Return\n * `false` from the callback to stop descending into that node:\n *\n * ```js\n * tree.getTree().iterate((node, level) => {\n * console.log(\" \".repeat(level) + node.name);\n * return level <= 2; // don't go deeper than level 2\n * });\n * ```\n *\n * @group Searching\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /**\n * Replaces the children with new node data.\n *\n * @group Changing the tree\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /**\n * Moves a node relative to another node. Called on the root node.\n *\n * @param position - `\"before\"`, `\"after\"` or `\"inside\"`.\n * @returns `false` when the move is impossible, for instance moving a\n * node into its own subtree.\n * @group Changing the tree\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n }\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case \"after\": {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode) + 1,\n );\n return true;\n }\n return false;\n }\n\n case \"before\": {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode),\n );\n return true;\n }\n return false;\n }\n\n case \"inside\": {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n }\n }\n\n /**\n * Adds a child at the start.\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n /**\n * Removes this node from its parent.\n *\n * @group Changing the tree\n */\n public remove(): void {\n if (!this.parent) {\n return;\n }\n\n this.parent.removeChild(this);\n this.parent = null;\n }\n\n /**\n * Removes a child and its children.\n *\n * @group Changing the tree\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n /**\n * Removes all children.\n *\n * @group Changing the tree\n */\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n /**\n @hidden\n */\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping?.delete(node.id);\n }\n }\n\n /**\n * Updates the node's properties from node data. `children` and `parent`\n * are ignored. A string sets the name. Existing node values are not\n * removed.\n *\n * @group Changing the tree\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n }\n if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (!Object.prototype.hasOwnProperty.call(o, key)) {\n continue;\n }\n\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n}\n"],"names":["createNode","loadChildrenFromData","setParent","doRemoveChild","getNodeClass"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"node.js","sources":["../src/node.ts"],"sourcesContent":["/*\nA node reads and writes the private members of other nodes (node.setParent),\nso the `_` prefix that the build adds cannot be limited to `this.`:\n\nprefix-private-members: all\n*/\n\nimport { isNodeRecordWithChildren } from \"./nodeUtils\";\n\nexport type NodeData = NodeRecord | string;\n\nexport type NodeId = number | string;\n\nexport interface NodeRecord {\n [key: string]: unknown;\n children?: NodeData[];\n id?: NodeId;\n}\n\nexport type Position = \"after\" | \"before\" | \"inside\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\n/**\n * @groupDescription Properties\n * Any other key in the node data is copied onto the node, so\n * `{ name: \"node1\", color: \"green\" }` gives you `node.color`.\n *\n * @groupDescription Searching\n * These work on any node, and search that node's subtree. Called on the root\n * node, they search the whole tree—which is what the tree's own methods of\n * the same name do.\n *\n * @groupDescription Changing the tree\n * ::: warning\n * These methods change the data without re-rendering. The tree's\n * [methods](/reference/methods)—`appendNode`, `removeNode`, `moveNode` and\n * friends—do the same and refresh the display, so prefer those. If you do\n * use these, call `tree.refresh()` afterwards.\n * :::\n */\nexport class Node {\n /**\n @hidden\n */\n [key: string]: unknown;\n\n /**\n The child nodes.\n */\n public children: Node[];\n /** The `li` element, once the node is rendered. Nodes inside a closed\n * folder are rendered when the folder is opened. */\n public element?: HTMLElement;\n /**\n The id from the node data.\n */\n public id?: NodeId;\n /**\n @hidden\n */\n public idMapping?: Map<NodeId, Node>;\n /**\n Whether the node's children are being fetched.\n */\n public is_loading?: boolean;\n /**\n Whether the folder is open.\n */\n public is_open?: boolean;\n /**\n Whether the node data had an empty `children` array.\n */\n public isEmptyFolder: boolean;\n /**\n Whether the children still have to be fetched.\n */\n public load_on_demand = false;\n /**\n The label. Also settable from the `label` key in node data.\n */\n public name = \"\";\n /**\n @hidden\n */\n public nodeClass?: typeof Node;\n /**\n The parent, or `null` for the root node.\n */\n public parent: Node | null;\n /**\n The root node.\n */\n public tree?: Node;\n\n /**\n @hidden\n */\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n this.is_loading = undefined;\n this.is_open ??= undefined;\n\n if (isRoot) {\n this.idMapping = new Map<NodeId, Node>();\n this.tree = this;\n this.nodeClass = nodeClass;\n } else {\n this.idMapping = undefined;\n }\n }\n\n /**\n * Adds a sibling after this node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addAfter(nodeInfo: NodeData): Node | null {\n if (this.parent) {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n return null;\n }\n\n /**\n * Adds a sibling before this node.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addBefore(nodeInfo: NodeData): Node | null {\n if (this.parent) {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n return null;\n }\n\n /**\n * Adds an existing `Node` object as the last child.\n *\n * @group Changing the tree\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /**\n * Adds an existing `Node` object as a child, at this position in\n * `children`. The index starts at `0`.\n *\n * @group Changing the tree\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n /**\n @hidden\n */\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping?.set(node.id, node);\n }\n }\n\n /**\n * Inserts a new parent between this node and its current parent. Its\n * siblings move along: the new node takes all children of the current\n * parent, and becomes its only child.\n *\n * @returns The new node, or `null` when the node has no parent.\n * @group Changing the tree\n */\n public addParent(nodeInfo: NodeData): Node | null {\n if (this.parent) {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n return null;\n }\n\n /**\n * Adds a child at the end.\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n /**\n * Returns all nodes in the subtree for which the callback returns\n * `true`.\n *\n * @example\n * ```js\n * const folders = tree.getTree().filter((node) => node.isFolder());\n * ```\n *\n * @group Searching\n */\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /**\n * Returns the position of a child in `children`, or `-1`.\n *\n * @group Inspecting a node\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /**\n * Returns the subtree as plain data, ready for `JSON.stringify`.\n * Internal properties (`parent`, `children`, `element`, `tree`,\n * `idMapping`, `nodeClass`, `load_on_demand`, `isEmptyFolder`) are left\n * out. Your own properties are kept.\n *\n * ```js\n * tree.getTree().getData();\n * // [{ name: \"node1\", id: 1, children: [{ name: \"child1\", id: 2 }] }]\n * ```\n *\n * @param includeParent - Make the result the node itself rather than its\n * children. Default `false`.\n * @group Reading data back\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record<string, unknown>[] => {\n return nodes.map((node) => {\n const tmpNode: Record<string, unknown> = {};\n\n for (const k in node) {\n if (\n [\n \"children\",\n \"element\",\n \"idMapping\",\n \"isEmptyFolder\",\n \"load_on_demand\",\n \"nodeClass\",\n \"parent\",\n \"tree\",\n ].includes(k) ||\n !Object.prototype.hasOwnProperty.call(node, k)\n ) {\n continue;\n }\n\n const v = node[k];\n tmpNode[k] = v;\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n return getDataFromNodes(includeParent ? [this] : this.children);\n }\n\n /**\n * Returns the last child, or `null`. When that child is an open folder,\n * its own last child, and so on.\n *\n * @group Moving around the tree\n */\n public getLastChild(): Node | null {\n if (this.hasChildren()) {\n const lastChild = this.children[this.children.length - 1] as Node;\n\n return lastChild.hasChildren() && lastChild.is_open\n ? lastChild.getLastChild()\n : lastChild;\n }\n return null;\n }\n\n /**\n * Returns the depth of the node, counting the top level as `1`.\n *\n * @group Inspecting a node\n */\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias, unicorn/no-this-assignment\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n /**\n * Returns the next node in the tree, regardless of whether it is\n * visible. `getNextNode(false)` skips the node's own children.\n *\n * @group Moving around the tree\n */\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n }\n if (this.parent) {\n const nextSibling = this.getNextSibling();\n\n return nextSibling ?? this.parent.getNextNode(false);\n }\n return null;\n }\n\n /**\n * Returns the next sibling, or `null`.\n *\n * @group Moving around the tree\n */\n public getNextSibling(): Node | null {\n if (this.parent) {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n return nextIndex < this.parent.children.length\n ? (this.parent.children[nextIndex] ?? null)\n : null;\n }\n return null;\n }\n\n /**\n * Like `getNextNode`, but skipping nodes inside closed folders. This is\n * what the arrow keys use.\n *\n * @group Moving around the tree\n */\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n }\n if (this.parent) {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n }\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n return null;\n }\n\n /**\n * Returns the first node for which the callback returns `true`.\n *\n * @group Searching\n */\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n }\n if (callback(node)) {\n result = node;\n return false;\n }\n return true;\n });\n\n return result;\n }\n\n /**\n * Returns the node with this id. Only available on the root node, which\n * keeps the id index.\n *\n * @group Searching\n */\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping?.get(nodeId) ?? null;\n }\n\n /**\n * Returns the first node with this name.\n *\n * @group Searching\n */\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n /**\n * Like `getNodeByName`, but throws when there is no such node.\n *\n * @group Searching\n */\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n /**\n * Returns all nodes with this property value.\n *\n * @group Searching\n */\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n /**\n * Returns the parent, or `null` for a top-level node: the root node is not\n * returned.\n *\n * @group Moving around the tree\n */\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n }\n if (this.parent.parent) {\n return this.parent;\n }\n // Root node -> null\n return null;\n }\n\n /**\n * Returns the previous node in the tree, regardless of whether it is\n * visible.\n *\n * @group Moving around the tree\n */\n public getPreviousNode(): Node | null {\n if (this.parent) {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n }\n return previousSibling.hasChildren()\n ? previousSibling.getLastChild()\n : previousSibling;\n }\n return null;\n }\n\n /**\n * Returns the previous sibling, or `null`.\n *\n * @group Moving around the tree\n */\n public getPreviousSibling(): Node | null {\n if (this.parent) {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n return previousIndex >= 0\n ? (this.parent.children[previousIndex] ?? null)\n : null;\n }\n return null;\n }\n\n /**\n * Like `getPreviousNode`, but skipping nodes inside closed folders.\n * This is what the arrow keys use.\n *\n * @group Moving around the tree\n */\n public getPreviousVisibleNode(): Node | null {\n if (this.parent) {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n }\n if (!previousSibling.hasChildren() || !previousSibling.is_open) {\n // Previous sibling\n return previousSibling;\n }\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n return null;\n }\n\n /**\n * Whether the node has children.\n *\n * @group Inspecting a node\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n /**\n * Init Node from data without making it the root of the tree.\n *\n * @hidden\n */\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (isNodeRecordWithChildren(nodeData) && nodeData.children.length) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n /**\n * `true` when the node has children, or is marked `load_on_demand`.\n *\n * @group Inspecting a node\n */\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n /**\n * Whether this node is an ancestor of the other node.\n *\n * @group Inspecting a node\n */\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /**\n * Walks the subtree, calling the callback with `(node, level)`. Return\n * `false` from the callback to stop descending into that node:\n *\n * ```js\n * tree.getTree().iterate((node, level) => {\n * console.log(\" \".repeat(level) + node.name);\n * return level <= 2; // don't go deeper than level 2\n * });\n * ```\n *\n * @group Searching\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /**\n * Replaces the children with new node data.\n *\n * @group Changing the tree\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /**\n * Moves a node relative to another node. Called on the root node.\n *\n * @param position - `\"before\"`, `\"after\"` or `\"inside\"`.\n * @returns `false` when the move is impossible, for instance moving a\n * node into its own subtree.\n * @group Changing the tree\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n }\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case \"after\": {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode) + 1,\n );\n return true;\n }\n return false;\n }\n\n case \"before\": {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode),\n );\n return true;\n }\n return false;\n }\n\n case \"inside\": {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n }\n }\n\n /**\n * Adds a child at the start.\n *\n * @returns The new node.\n * @group Changing the tree\n */\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n /**\n * Removes this node from its parent.\n *\n * @group Changing the tree\n */\n public remove(): void {\n if (!this.parent) {\n return;\n }\n\n this.parent.removeChild(this);\n this.parent = null;\n }\n\n /**\n * Removes a child and its children.\n *\n * @group Changing the tree\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n /**\n * Removes all children.\n *\n * @group Changing the tree\n */\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n /**\n @hidden\n */\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping?.delete(node.id);\n }\n }\n\n /**\n * Updates the node's properties from node data. `children` and `parent`\n * are ignored. A string sets the name. Existing node values are not\n * removed.\n *\n * @group Changing the tree\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n }\n if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (!Object.prototype.hasOwnProperty.call(o, key)) {\n continue;\n }\n\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n}\n"],"names":["createNode","loadChildrenFromData","setParent","doRemoveChild","getNodeClass"],"mappings":";;AAAA;AACA;AACA;;AAEA;AACA;;AAkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAM,IAAI,CAAC;AAChB;AACF;AACA;;AAGE;AACF;AACA;EACS,QAAQ;AACf;AACF;EACS,OAAO;AACd;AACF;AACA;EACS,EAAE;AACT;AACF;AACA;EACS,SAAS;AAChB;AACF;AACA;EACS,UAAU;AACjB;AACF;AACA;EACS,OAAO;AACd;AACF;AACA;EACS,aAAa;AACpB;AACF;AACA;AACS,EAAA,cAAc,GAAG,KAAK;AAC7B;AACF;AACA;AACS,EAAA,IAAI,GAAG,EAAE;AAChB;AACF;AACA;EACS,SAAS;AAChB;AACF;AACA;EACS,MAAM;AACb;AACF;AACA;EACS,IAAI;;AAEX;AACF;AACA;AACE,EAAA,WAAW,CACT,QAAyB,GAAG,IAAI,EAChC,MAAM,GAAG,KAAK,EACd,SAAS,GAAG,IAAI,EAChB;AACA,IAAA,IAAI,CAAC,aAAa,GAChB,QAAQ,IAAI,IAAI,IAChB,wBAAwB,CAAC,QAAQ,CAAC,IAClC,QAAQ,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AAEhC,IAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;IAEtB,IAAI,CAAC,QAAQ,GAAG,EAAE;IAClB,IAAI,CAAC,MAAM,GAAG,IAAI;IAClB,IAAI,CAAC,UAAU,GAAG,SAAS;IAC3B,IAAI,CAAC,OAAO,KAAK,SAAS;AAE1B,IAAA,IAAI,MAAM,EAAE;AACV,MAAA,IAAI,CAAC,SAAS,GAAG,IAAI,GAAG,EAAgB;MACxC,IAAI,CAAC,IAAI,GAAG,IAAI;MAChB,IAAI,CAAC,SAAS,GAAG,SAAS;AAC5B,IAAA,CAAC,MAAM;MACL,IAAI,CAAC,SAAS,GAAG,SAAS;AAC5B,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACS,QAAQ,CAAC,QAAkB,EAAe;IAC/C,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,MAAA,IAAM,IAAI,GAAG,IAAI,CAACA,WAAU,CAAC,QAAQ,CAAC;MAEtC,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;MAClD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,GAAG,CAAC,CAAC;AAEpD,MAAA,IAAI,CAACC,qBAAoB,CAAC,QAAQ,CAAC;AACnC,MAAA,OAAO,IAAI;AACb,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACS,SAAS,CAAC,QAAkB,EAAe;IAChD,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,MAAA,IAAM,IAAI,GAAG,IAAI,CAACD,WAAU,CAAC,QAAQ,CAAC;MAEtC,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC;MAClD,IAAI,CAAC,MAAM,CAAC,kBAAkB,CAAC,IAAI,EAAE,UAAU,CAAC;AAEhD,MAAA,IAAI,CAACC,qBAAoB,CAAC,QAAQ,CAAC;AACnC,MAAA,OAAO,IAAI;AACb,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,QAAQ,CAAC,IAAU,EAAQ;AAChC,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;AACxB,IAAA,IAAI,CAACC,UAAS,CAAC,IAAI,CAAC;AACtB,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,kBAAkB,CAAC,IAAU,EAAE,KAAa,EAAQ;IACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC;AACpC,IAAA,IAAI,CAACA,UAAS,CAAC,IAAI,CAAC;AACtB,EAAA;;AAEA;AACF;AACA;EACS,cAAc,CAAC,IAAU,EAAQ;AACtC,IAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;MACnB,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC;AACpC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;EACS,SAAS,CAAC,QAAkB,EAAe;IAChD,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,MAAA,IAAM,SAAS,GAAG,IAAI,CAACF,WAAU,CAAC,QAAQ,CAAC;MAE3C,IAAI,IAAI,CAAC,IAAI,EAAE;AACb,QAAA,SAAS,CAACE,UAAS,CAAC,IAAI,CAAC,IAAI,CAAC;AAChC,MAAA;AACA,MAAA,IAAM,cAAc,GAAG,IAAI,CAAC,MAAM;AAElC,MAAA,KAAK,IAAM,KAAK,IAAI,cAAc,CAAC,QAAQ,EAAE;AAC3C,QAAA,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC;AAC3B,MAAA;MAEA,cAAc,CAAC,QAAQ,GAAG,EAAE;AAC5B,MAAA,cAAc,CAAC,QAAQ,CAAC,SAAS,CAAC;AAClC,MAAA,OAAO,SAAS;AAClB,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACS,MAAM,CAAC,QAAkB,EAAQ;AACtC,IAAA,IAAM,IAAI,GAAG,IAAI,CAACF,WAAU,CAAC,QAAQ,CAAC;AACtC,IAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEnB,IAAA,IAAI,CAACC,qBAAoB,CAAC,QAAQ,CAAC;AACnC,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACS,MAAM,CAAC,CAA0B,EAAU;IAChD,IAAM,MAAc,GAAG,EAAE;AAEzB,IAAA,IAAI,CAAC,OAAO,CAAE,IAAU,IAAK;AAC3B,MAAA,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;AACX,QAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;AACnB,MAAA;AAEA,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAM;AACf,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,aAAa,CAAC,IAAU,EAAU;AACvC,IAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;AACpC,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACS,EAAA,OAAO,CAAC,aAAa,GAAG,KAAK,EAAgB;IAClD,IAAM,gBAAgB,GAAI,KAAa,IAAgC;AACrE,MAAA,OAAO,KAAK,CAAC,GAAG,CAAE,IAAI,IAAK;QACzB,IAAM,OAAgC,GAAG,EAAE;AAE3C,QAAA,KAAK,IAAM,CAAC,IAAI,IAAI,EAAE;AACpB,UAAA,IACE,CACE,UAAU,EACV,SAAS,EACT,WAAW,EACX,eAAe,EACf,gBAAgB,EAChB,WAAW,EACX,QAAQ,EACR,MAAM,CACP,CAAC,QAAQ,CAAC,CAAC,CAAC,IACb,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,EAC9C;AACA,YAAA;AACF,UAAA;AAEA,UAAA,IAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;AACjB,UAAA,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC;AAChB,QAAA;AAEA,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;UACtB,OAAO,CAAC,QAAQ,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;AACpD,QAAA;AAEA,QAAA,OAAO,OAAO;AAChB,MAAA,CAAC,CAAC;IACJ,CAAC;IAED,OAAO,gBAAgB,CAAC,aAAa,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;AACjE,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,YAAY,GAAgB;AACjC,IAAA,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACtB,MAAA,IAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAS;AAEjE,MAAA,OAAO,SAAS,CAAC,WAAW,EAAE,IAAI,SAAS,CAAC,OAAO,GAC/C,SAAS,CAAC,YAAY,EAAE,GACxB,SAAS;AACf,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,QAAQ,GAAW;IACxB,IAAI,KAAK,GAAG,CAAC;AACb,IAAA,IAAI,IAAU,GAAG,IAAI,CAAC;;IAEtB,OAAO,IAAI,CAAC,MAAM,EAAE;AAClB,MAAA,KAAK,IAAI,CAAC;MACV,IAAI,GAAG,IAAI,CAAC,MAAM;AACpB,IAAA;AAEA,IAAA,OAAO,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,WAAW,CAAC,eAAe,GAAG,IAAI,EAAe;AACtD,IAAA,IAAI,eAAe,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE;AACzC,MAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI;AACjC,IAAA;IACA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,MAAA,IAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;MAEzC,OAAO,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AACtD,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,cAAc,GAAgB;IACnC,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;MACrD,OAAO,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,GACzC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,GACxC,IAAI;AACV,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,kBAAkB,GAAgB;IACvC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;AACtC;AACA,MAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAI;AACjC,IAAA;IACA,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,MAAA,IAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE;AACzC,MAAA,IAAI,WAAW,EAAE;AACf;AACA,QAAA,OAAO,WAAW;AACpB,MAAA;AACA;AACA,MAAA,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC;AACvC,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,iBAAiB,CAAC,QAAiC,EAAe;IACvE,IAAI,MAAmB,GAAG,IAAI;AAE9B,IAAA,IAAI,CAAC,OAAO,CAAE,IAAU,IAAK;AAC3B,MAAA,IAAI,MAAM,EAAE;AACV,QAAA,OAAO,KAAK;AACd,MAAA;AACA,MAAA,IAAI,QAAQ,CAAC,IAAI,CAAC,EAAE;AAClB,QAAA,MAAM,GAAG,IAAI;AACb,QAAA,OAAO,KAAK;AACd,MAAA;AACA,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC;AAEF,IAAA,OAAO,MAAM;AACf,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACS,WAAW,CAAC,MAAc,EAAe;IAC9C,OAAO,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI;AAC5C,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,aAAa,CAAC,IAAY,EAAe;IAC9C,OAAO,IAAI,CAAC,iBAAiB,CAAE,IAAU,IAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC;AACnE,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,sBAAsB,CAAC,IAAY,EAAQ;AAChD,IAAA,IAAM,IAAI,GAAG,IAAI,CAAC,iBAAiB,CAAE,CAAO,IAAK,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;IAEjE,IAAI,CAAC,IAAI,EAAE;AACT,MAAA,MAAM,IAAI,KAAK,CAAC,CAAA,eAAA,EAAkB,IAAI,YAAY,CAAC;AACrD,IAAA;AAEA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,kBAAkB,CAAC,GAAW,EAAE,KAAc,EAAU;AAC7D,IAAA,OAAO,IAAI,CAAC,MAAM,CAAE,IAAU,IAAK,IAAI,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC;AACzD,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,SAAS,GAAgB;AAC9B;AACA,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,MAAA,OAAO,IAAI;AACb,IAAA;AACA,IAAA,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;MACtB,OAAO,IAAI,CAAC,MAAM;AACpB,IAAA;AACA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,eAAe,GAAgB;IACpC,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,MAAA,IAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE;MAEjD,IAAI,CAAC,eAAe,EAAE;AACpB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;AACzB,MAAA;AACA,MAAA,OAAO,eAAe,CAAC,WAAW,EAAE,GAChC,eAAe,CAAC,YAAY,EAAE,GAC9B,eAAe;AACrB,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,kBAAkB,GAAgB;IACvC,IAAI,IAAI,CAAC,MAAM,EAAE;MACf,IAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;AACzD,MAAA,OAAO,aAAa,IAAI,CAAC,GACpB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,IAAI,GAC5C,IAAI;AACV,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACS,EAAA,sBAAsB,GAAgB;IAC3C,IAAI,IAAI,CAAC,MAAM,EAAE;AACf,MAAA,IAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE;MAEjD,IAAI,CAAC,eAAe,EAAE;AACpB,QAAA,OAAO,IAAI,CAAC,SAAS,EAAE;AACzB,MAAA;MACA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE;AAC9D;AACA,QAAA,OAAO,eAAe;AACxB,MAAA;AACA;AACA,MAAA,OAAO,eAAe,CAAC,YAAY,EAAE;AACvC,IAAA;AACA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,WAAW,GAAY;AAC5B,IAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;AACnC,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,YAAY,CAAC,IAAc,EAAQ;IACxC,IAAM,OAAO,GAAI,QAAkB,IAAW;AAC5C,MAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;MAEtB,IAAI,wBAAwB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;AAClE,QAAA,WAAW,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAChC,MAAA;IACF,CAAC;IAED,IAAM,WAAW,GAAI,YAAwB,IAAW;AACtD,MAAA,KAAK,IAAM,KAAK,IAAI,YAAY,EAAE;AAChC,QAAA,IAAM,IAAI,GAAG,IAAI,CAACD,WAAU,EAAE;AAC9B,QAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;AACxB,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AACrB,MAAA;IACF,CAAC;IAED,OAAO,CAAC,IAAI,CAAC;AACf,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,QAAQ,GAAY;IACzB,OAAO,IAAI,CAAC,WAAW,EAAE,IAAI,IAAI,CAAC,cAAc;AAClD,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,UAAU,CAAC,IAAU,EAAW;AACrC,IAAA,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM;AAExB,IAAA,OAAO,MAAM,EAAE;MACb,IAAI,MAAM,KAAK,IAAI,EAAE;AACnB,QAAA,OAAO,IAAI;AACb,MAAA;MAEA,MAAM,GAAG,MAAM,CAAC,MAAM;AACxB,IAAA;AAEA,IAAA,OAAO,KAAK;AACd,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;EACS,OAAO,CAAC,QAAyB,EAAQ;AAC9C,IAAA,IAAM,QAAQ,GAAG,CAAC,IAAU,EAAE,KAAa,KAAW;AACpD,MAAA,KAAK,IAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;AACjC,QAAA,IAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;AAErC,QAAA,IAAI,MAAM,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE;AACjC,UAAA,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;AAC5B,QAAA;AACF,MAAA;IACF,CAAC;AAED,IAAA,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AACnB,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,YAAY,CAAC,IAAgB,EAAQ;IAC1C,IAAI,CAAC,cAAc,EAAE;AAErB,IAAA,KAAK,IAAM,SAAS,IAAI,IAAI,EAAE;AAC5B,MAAA,IAAM,IAAI,GAAG,IAAI,CAACA,WAAU,CAAC,SAAS,CAAC;AACvC,MAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;AAEnB,MAAA,IAAI,wBAAwB,CAAC,SAAS,CAAC,EAAE;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,QAAQ,CAAC;AACvC,MAAA;AACF,IAAA;AAEA,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AACS,EAAA,QAAQ,CACb,SAAe,EACf,UAAgB,EAChB,QAAkB,EACT;IACT,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;AACzD;AACA;AACA,MAAA,OAAO,KAAK;AACd,IAAA;AACA,IAAA,SAAS,CAAC,MAAM,CAACG,cAAa,CAAC,SAAS,CAAC;AAEzC,IAAA,QAAQ,QAAQ;AACd,MAAA,KAAK,OAAO;AAAE,QAAA;UACZ,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,YAAA,UAAU,CAAC,MAAM,CAAC,kBAAkB,CAClC,SAAS,EACT,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAChD,CAAC;AACD,YAAA,OAAO,IAAI;AACb,UAAA;AACA,UAAA,OAAO,KAAK;AACd,QAAA;AAEA,MAAA,KAAK,QAAQ;AAAE,QAAA;UACb,IAAI,UAAU,CAAC,MAAM,EAAE;AACrB,YAAA,UAAU,CAAC,MAAM,CAAC,kBAAkB,CAClC,SAAS,EACT,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAC5C,CAAC;AACD,YAAA,OAAO,IAAI;AACb,UAAA;AACA,UAAA,OAAO,KAAK;AACd,QAAA;AAEA,MAAA,KAAK,QAAQ;AAAE,QAAA;AACb;AACA,UAAA,UAAU,CAAC,kBAAkB,CAAC,SAAS,EAAE,CAAC,CAAC;AAC3C,UAAA,OAAO,IAAI;AACb,QAAA;AACF;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACS,OAAO,CAAC,QAAkB,EAAQ;AACvC,IAAA,IAAM,IAAI,GAAG,IAAI,CAACH,WAAU,CAAC,QAAQ,CAAC;AACtC,IAAA,IAAI,CAAC,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC;AAEhC,IAAA,IAAI,CAACC,qBAAoB,CAAC,QAAQ,CAAC;AACnC,IAAA,OAAO,IAAI;AACb,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,MAAM,GAAS;AACpB,IAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AAChB,MAAA;AACF,IAAA;AAEA,IAAA,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC;IAC7B,IAAI,CAAC,MAAM,GAAG,IAAI;AACpB,EAAA;;AAEA;AACF;AACA;AACA;AACA;EACS,WAAW,CAAC,IAAU,EAAQ;AACnC;IACA,IAAI,CAAC,cAAc,EAAE;AAErB,IAAA,IAAI,CAACE,cAAa,CAAC,IAAI,CAAC;AAC1B,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACS,EAAA,cAAc,GAAS;AAC5B,IAAA,IAAI,CAAC,OAAO,CAAE,KAAW,IAAK;AAC5B,MAAA,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,KAAK,CAAC;AACrC,MAAA,OAAO,IAAI;AACb,IAAA,CAAC,CAAC;IAEF,IAAI,CAAC,QAAQ,GAAG,EAAE;AACpB,EAAA;;AAEA;AACF;AACA;EACS,mBAAmB,CAAC,IAAU,EAAQ;AAC3C,IAAA,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,EAAE;MACnB,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;AACjC,IAAA;AACF,EAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACA;EACS,OAAO,CAAC,CAAkB,EAAQ;IACvC,IAAI,CAAC,CAAC,EAAE;AACN,MAAA;AACF,IAAA;AACA,IAAA,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;MACzB,IAAI,CAAC,IAAI,GAAG,CAAC;AACf,IAAA,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,QAAQ,EAAE;AAChC,MAAA,KAAK,IAAM,GAAG,IAAI,CAAC,EAAE;AACnB,QAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;AACjD,UAAA;AACF,QAAA;AAEA,QAAA,IAAM,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC;AAEpB,QAAA,IAAI,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK,MAAM,EAAE;AACrC;AACA,UAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,IAAI,CAAC,IAAI,GAAG,KAAK;AACnB,UAAA;QACF,CAAC,MAAM,IAAI,GAAG,KAAK,UAAU,IAAI,GAAG,KAAK,QAAQ,EAAE;AACjD;AACA,UAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK;AACnB,QAAA;AACF,MAAA;AACF,IAAA;AACF,EAAA;EAEQH,WAAUA,CAAC,QAAmB,EAAQ;AAC5C,IAAA,IAAM,SAAS,GAAG,IAAI,CAACI,aAAY,EAAE;AACrC,IAAA,OAAO,IAAI,SAAS,CAAC,QAAQ,CAAC;AAChC,EAAA;EAEQD,cAAaA,CAAC,IAAU,EAAQ;AACtC,IAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACjD,IAAA,IAAI,CAAC,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC;AACtC,EAAA;AAEQC,EAAAA,aAAYA,GAAgB;IAClC,OAAO,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,SAAS,IAAI,IAAI;AACvD,EAAA;;AAEA;EACQH,qBAAoBA,CAAC,QAAkB,EAAE;IAC/C,IAAI,wBAAwB,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,EAAE;AAClE,MAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC;AACtC,IAAA;AACF,EAAA;EAEQC,UAASA,CAAC,MAAY,EAAQ;IACpC,IAAI,CAAC,MAAM,GAAG,MAAM;AACpB,IAAA,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI;AACvB,IAAA,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC,IAAI,CAAC;AACjC,EAAA;AACF;;"}
|
|
@@ -1,25 +1,27 @@
|
|
|
1
1
|
import type { AnimationSpeed } from "../animation.js";
|
|
2
|
+
import type { FolderIcons } from "../folderOpenState.js";
|
|
2
3
|
import type { TriggerEvent } from "../methodTypes.js";
|
|
3
4
|
import type { Node, Position } from "../node.js";
|
|
4
5
|
import type { NodeElementParams } from "./index.js";
|
|
5
6
|
import NodeElement from "./index.js";
|
|
6
7
|
export type RenderChildren = (node: Node) => HTMLUListElement | null;
|
|
7
8
|
interface FolderElementParams extends NodeElementParams {
|
|
8
|
-
|
|
9
|
-
openedIconElement?: globalThis.Node;
|
|
9
|
+
icons: FolderIcons;
|
|
10
10
|
renderChildren: RenderChildren;
|
|
11
11
|
triggerEvent: TriggerEvent;
|
|
12
12
|
}
|
|
13
13
|
declare class FolderElement extends NodeElement {
|
|
14
|
-
private
|
|
15
|
-
private openedIconElement?;
|
|
14
|
+
private icons;
|
|
16
15
|
private renderChildren;
|
|
17
16
|
private triggerEvent;
|
|
18
|
-
constructor({ classNames,
|
|
17
|
+
constructor({ classNames, getScrollLeft, icons, multiSelect, node, renderChildren, tabIndex, treeElement, triggerEvent, }: FolderElementParams);
|
|
19
18
|
close(slide: boolean, animationSpeed: AnimationSpeed): Promise<void>;
|
|
20
19
|
open(slide: boolean, animationSpeed: AnimationSpeed): Promise<void>;
|
|
21
20
|
protected mustShowBorderDropHint(position: Position): boolean;
|
|
22
21
|
private getButton;
|
|
22
|
+
private setButtonState;
|
|
23
|
+
private setElementState;
|
|
24
|
+
private setUlState;
|
|
23
25
|
}
|
|
24
26
|
export default FolderElement;
|
|
25
27
|
//# sourceMappingURL=folderElement.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folderElement.d.ts","sourceRoot":"","sources":["../../src/nodeElement/folderElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"folderElement.d.ts","sourceRoot":"","sources":["../../src/nodeElement/folderElement.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC9C,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAIjD,OAAO,WAAW,MAAM,SAAS,CAAC;AAElC,MAAM,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,IAAI,KAAK,gBAAgB,GAAG,IAAI,CAAC;AAErE,UAAU,mBAAoB,SAAQ,iBAAiB;IACrD,KAAK,EAAE,WAAW,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,cAAM,aAAc,SAAQ,WAAW;IACrC,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,cAAc,CAAiB;IACvC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,UAAU,EACV,aAAa,EACb,KAAK,EACL,WAAW,EACX,IAAI,EACJ,cAAc,EACd,QAAQ,EACR,WAAW,EACX,YAAY,GACb,EAAE,mBAAmB;IAeT,KAAK,CAChB,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC;IAgBH,IAAI,CACf,KAAK,EAAE,OAAO,EACd,cAAc,EAAE,cAAc,GAC7B,OAAO,CAAC,IAAI,CAAC;IAsBhB,SAAS,CAAC,sBAAsB,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO;IAI7D,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,eAAe;YAIT,UAAU;CAgBzB;AAED,eAAe,aAAa,CAAC"}
|