tree-element 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/README.md +12 -4
  2. package/lib/animation.d.ts +2 -2
  3. package/lib/animation.d.ts.map +1 -1
  4. package/lib/animation.js +13 -9
  5. package/lib/animation.js.map +1 -1
  6. package/lib/dataLoader.d.ts +1 -0
  7. package/lib/dataLoader.d.ts.map +1 -1
  8. package/lib/dataLoader.js +8 -0
  9. package/lib/dataLoader.js.map +1 -1
  10. package/lib/dragAndDropHandler/dragElement.d.ts.map +1 -1
  11. package/lib/dragAndDropHandler/dragElement.js +2 -1
  12. package/lib/dragAndDropHandler/dragElement.js.map +1 -1
  13. package/lib/dragAndDropHandler/index.d.ts.map +1 -1
  14. package/lib/dragAndDropHandler/index.js +56 -65
  15. package/lib/dragAndDropHandler/index.js.map +1 -1
  16. package/lib/dragAndDropHandler/iterateVisibleNodes.d.ts.map +1 -1
  17. package/lib/dragAndDropHandler/iterateVisibleNodes.js +16 -15
  18. package/lib/dragAndDropHandler/iterateVisibleNodes.js.map +1 -1
  19. package/lib/elementsRenderer.d.ts +5 -1
  20. package/lib/elementsRenderer.d.ts.map +1 -1
  21. package/lib/elementsRenderer.js +62 -39
  22. package/lib/elementsRenderer.js.map +1 -1
  23. package/lib/events.d.ts +44 -11
  24. package/lib/events.d.ts.map +1 -1
  25. package/lib/index.d.ts +31 -8
  26. package/lib/index.d.ts.map +1 -1
  27. package/lib/index.js +162 -122
  28. package/lib/index.js.map +1 -1
  29. package/lib/keyHandler.d.ts +11 -5
  30. package/lib/keyHandler.d.ts.map +1 -1
  31. package/lib/keyHandler.js +87 -33
  32. package/lib/keyHandler.js.map +1 -1
  33. package/lib/methodTypes.d.ts +2 -2
  34. package/lib/methodTypes.d.ts.map +1 -1
  35. package/lib/mouseHandler.d.ts +1 -1
  36. package/lib/mouseHandler.d.ts.map +1 -1
  37. package/lib/mouseHandler.js +10 -7
  38. package/lib/mouseHandler.js.map +1 -1
  39. package/lib/node.d.ts +45 -15
  40. package/lib/node.d.ts.map +1 -1
  41. package/lib/node.js +136 -139
  42. package/lib/node.js.map +1 -1
  43. package/lib/nodeElement/folderElement.d.ts +1 -1
  44. package/lib/nodeElement/folderElement.d.ts.map +1 -1
  45. package/lib/nodeElement/folderElement.js +46 -57
  46. package/lib/nodeElement/folderElement.js.map +1 -1
  47. package/lib/nodeElement/ghostDropHint.d.ts.map +1 -1
  48. package/lib/nodeElement/ghostDropHint.js +8 -4
  49. package/lib/nodeElement/ghostDropHint.js.map +1 -1
  50. package/lib/nodeElement/index.d.ts.map +1 -1
  51. package/lib/nodeElement/index.js +6 -6
  52. package/lib/nodeElement/index.js.map +1 -1
  53. package/lib/nodeUtils.d.ts.map +1 -1
  54. package/lib/nodeUtils.js +1 -1
  55. package/lib/nodeUtils.js.map +1 -1
  56. package/lib/options.d.ts +19 -3
  57. package/lib/options.d.ts.map +1 -1
  58. package/lib/requestUrl.d.ts.map +1 -1
  59. package/lib/requestUrl.js +2 -11
  60. package/lib/requestUrl.js.map +1 -1
  61. package/lib/saveStateHandler.d.ts.map +1 -1
  62. package/lib/saveStateHandler.js +21 -41
  63. package/lib/saveStateHandler.js.map +1 -1
  64. package/lib/scrollHandler/containerScrollParent.d.ts.map +1 -1
  65. package/lib/scrollHandler/containerScrollParent.js +3 -8
  66. package/lib/scrollHandler/containerScrollParent.js.map +1 -1
  67. package/lib/scrollHandler/createScrollParent.d.ts.map +1 -1
  68. package/lib/scrollHandler/createScrollParent.js +4 -5
  69. package/lib/scrollHandler/createScrollParent.js.map +1 -1
  70. package/lib/scrollHandler/documentScrollParent.d.ts.map +1 -1
  71. package/lib/scrollHandler/documentScrollParent.js +3 -9
  72. package/lib/scrollHandler/documentScrollParent.js.map +1 -1
  73. package/lib/scrollHandler/scrollParent.d.ts.map +1 -1
  74. package/lib/scrollHandler/scrollParent.js +19 -17
  75. package/lib/scrollHandler/scrollParent.js.map +1 -1
  76. package/lib/selectNodeHandler.d.ts +3 -1
  77. package/lib/selectNodeHandler.d.ts.map +1 -1
  78. package/lib/selectNodeHandler.js +27 -37
  79. package/lib/selectNodeHandler.js.map +1 -1
  80. package/lib/setDefaultOptions.d.ts.map +1 -1
  81. package/lib/setDefaultOptions.js +11 -10
  82. package/lib/setDefaultOptions.js.map +1 -1
  83. package/lib/util.d.ts.map +1 -1
  84. package/lib/util.js +1 -1
  85. package/lib/util.js.map +1 -1
  86. package/lib/version.d.ts +1 -1
  87. package/lib/version.js +1 -1
  88. package/lib/version.js.map +1 -1
  89. package/package.json +42 -33
  90. package/src/animation.ts +13 -11
  91. package/src/dataLoader.ts +11 -0
  92. package/src/dragAndDropHandler/dragElement.ts +2 -1
  93. package/src/dragAndDropHandler/index.ts +70 -75
  94. package/src/dragAndDropHandler/iterateVisibleNodes.ts +18 -16
  95. package/src/elementsRenderer.ts +76 -46
  96. package/src/events.ts +44 -11
  97. package/src/index.ts +210 -150
  98. package/src/keyHandler.ts +95 -41
  99. package/src/methodTypes.ts +3 -3
  100. package/src/mouseHandler.ts +10 -7
  101. package/src/node.ts +155 -148
  102. package/src/nodeElement/folderElement.ts +54 -63
  103. package/src/nodeElement/ghostDropHint.ts +4 -2
  104. package/src/nodeElement/index.ts +9 -15
  105. package/src/nodeUtils.ts +1 -1
  106. package/src/options.ts +19 -3
  107. package/src/requestUrl.ts +4 -11
  108. package/src/saveStateHandler.ts +29 -43
  109. package/src/scrollHandler/containerScrollParent.ts +3 -9
  110. package/src/scrollHandler/createScrollParent.ts +1 -2
  111. package/src/scrollHandler/documentScrollParent.ts +5 -11
  112. package/src/scrollHandler/scrollParent.ts +29 -25
  113. package/src/selectNodeHandler.ts +34 -38
  114. package/src/setDefaultOptions.ts +19 -10
  115. package/src/util.ts +1 -2
  116. package/src/version.ts +1 -1
  117. package/tree_element.css +87 -69
  118. package/tree_element.debug.js +706 -639
  119. package/tree_element.debug.js.map +1 -1
  120. package/tree_element.js +2 -2
  121. package/tree_element.js.map +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"saveStateHandler.js","sources":["../src/saveStateHandler.ts"],"sourcesContent":["import type {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnGetStateFromStorage, OnSetStateFromStorage } from \"./options\";\n\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n if (!this.saveStateOption) {\n return null;\n }\n\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n if (!this.saveStateOption) {\n return null;\n }\n\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData);\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n if (!this.saveStateOption) {\n return;\n }\n\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand (boolean)\n */\n public setInitialState(state: SavedState): boolean {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n this.resetSelection();\n\n if (state.selected_node) {\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public async setInitialStateOnDemand(state: SavedState): Promise<void> {\n let nodeIds = state.open_nodes;\n\n const openNodes = async () => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n newNodesIds.push(nodeId);\n } else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n await loadAndOpenNode(node);\n } else {\n await this.openNode(node, false);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node) {\n if (this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\n }\n }\n };\n\n const loadAndOpenNode = async (node: Node) => {\n await this.openNode(node, false);\n await openNodes();\n };\n\n await openNodes();\n }\n\n private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else {\n return localStorage.getItem(this.getKeyName());\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record<string, unknown>;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n}\n"],"names":["addToSelection","getNodeById","getSelectedNodes","getTree","onGetStateFromStorage","onSetStateFromStorage","openNode","refreshElements","removeFromSelection","saveStateOption","getNodeIdToBeSelected","getStateFromStorage","getState","loadFromStorage","parseState","saveState","getKeyName","setInitialState","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand"],"mappings":"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"}
1
+ {"version":3,"file":"saveStateHandler.js","sources":["../src/saveStateHandler.ts"],"sourcesContent":["import type {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnGetStateFromStorage, OnSetStateFromStorage } from \"./options\";\n\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n if (!this.saveStateOption) {\n return null;\n }\n\n const state = this.getStateFromStorage();\n\n return state?.selected_node ? (state.selected_node[0] ?? null) : null;\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n for (const node of this.getSelectedNodes()) {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n }\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n if (!this.saveStateOption) {\n return null;\n }\n\n const jsonData = this.loadFromStorage();\n\n return jsonData ? this.parseState(jsonData) : null;\n }\n\n public saveState(): void {\n if (!this.saveStateOption) {\n return;\n }\n\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand (boolean)\n */\n public setInitialState(state: SavedState): boolean {\n const mustLoadOnDemand = state.open_nodes\n ? this.openInitialNodes(state.open_nodes)\n : false;\n\n this.resetSelection();\n\n if (state.selected_node) {\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public async setInitialStateOnDemand(state: SavedState): Promise<void> {\n let nodeIds = state.open_nodes;\n\n const openNodes = async () => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n await loadAndOpenNode(node);\n } else {\n await this.openNode(node, false);\n }\n }\n } else {\n newNodesIds.push(nodeId);\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node && this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\n }\n };\n\n const loadAndOpenNode = async (node: Node) => {\n await this.openNode(node, false);\n await openNodes();\n };\n\n await openNodes();\n }\n\n private getKeyName(): string {\n return typeof this.saveStateOption === \"string\"\n ? this.saveStateOption\n : \"tree\";\n }\n\n private loadFromStorage(): null | string {\n return this.onGetStateFromStorage\n ? this.onGetStateFromStorage()\n : localStorage.getItem(this.getKeyName());\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n } else {\n node.is_open = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record<string, unknown>;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n for (const node of selectedNodes) {\n this.removeFromSelection(node);\n }\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n continue;\n }\n\n selectCount += 1;\n\n this.addToSelection(node);\n }\n\n return selectCount !== 0;\n }\n}\n"],"names":["addToSelection","getNodeById","getSelectedNodes","getTree","onGetStateFromStorage","onSetStateFromStorage","openNode","refreshElements","removeFromSelection","saveStateOption","getNodeIdToBeSelected","getStateFromStorage","getState","loadFromStorage","parseState","saveState","getKeyName","setInitialState","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"containerScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/containerScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,YAAY;IAC7D,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,eAAe,CAAC,CAAS;IAE1B,aAAa;IAOpB,SAAS,CAAC,+BAA+B,CACvC,KAAK,EAAE,MAAM,GACZ,yBAAyB,GAAG,SAAS;IAkBxC,SAAS,CAAC,6BAA6B,CACrC,KAAK,EAAE,MAAM,GACZ,SAAS,GAAG,uBAAuB;IAYtC,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,kBAAkB;CAK3B"}
1
+ {"version":3,"file":"containerScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/containerScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,OAAO,qBAAsB,SAAQ,YAAY;IAC7D,OAAO,CAAC,kBAAkB,CAAC,CAAS;IACpC,OAAO,CAAC,eAAe,CAAC,CAAS;IAE1B,aAAa;IAOpB,SAAS,CAAC,+BAA+B,CACvC,KAAK,EAAE,MAAM,GACZ,yBAAyB,GAAG,SAAS;IAgBxC,SAAS,CAAC,6BAA6B,CACrC,KAAK,EAAE,MAAM,GACZ,SAAS,GAAG,uBAAuB;IAQtC,OAAO,CAAC,qBAAqB;IAS7B,OAAO,CAAC,kBAAkB;CAK3B"}
@@ -13,22 +13,17 @@ class ContainerScrollParent extends ScrollParent {
13
13
  let rightEdge = scrollParentOffset.left + containerWidth;
14
14
  let leftEdge = scrollParentOffset.left;
15
15
  let isNearRightEdge = pageX > rightEdge - 20;
16
- let isNearLeftEdge = pageX < leftEdge + 20;
17
16
  if (isNearRightEdge) {
18
17
  return "right";
19
- } else if (isNearLeftEdge) {
20
- return "left";
21
18
  }
22
- return undefined;
19
+ let isNearLeftEdge = pageX < leftEdge + 20;
20
+ return isNearLeftEdge ? "left" : undefined;
23
21
  }
24
22
  _getNewVerticalScrollDirection(pageY) {
25
23
  if (pageY < this._getScrollParentTop()) {
26
24
  return "top";
27
25
  }
28
- if (pageY > this._getScrollParentBottom()) {
29
- return "bottom";
30
- }
31
- return undefined;
26
+ return pageY > this._getScrollParentBottom() ? "bottom" : undefined;
32
27
  }
33
28
  _getScrollParentBottom() {
34
29
  if (this._scrollParentBottom == null) {
@@ -1 +1 @@
1
- {"version":3,"file":"containerScrollParent.js","sources":["../../src/scrollHandler/containerScrollParent.ts"],"sourcesContent":["import type {\n HorizontalScrollDirection,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nimport { getElementPosition, getOffsetTop } from \"../positionUtils\";\nimport { ScrollParent } from \"./scrollParent\";\n\nexport default class ContainerScrollParent extends ScrollParent {\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this.container);\n const containerWidth = this.container.getBoundingClientRect().width;\n\n const rightEdge = scrollParentOffset.left + containerWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n const isNearLeftEdge = pageX < leftEdge + 20;\n\n if (isNearRightEdge) {\n return \"right\";\n } else if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this.getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n const containerHeight = this.container.getBoundingClientRect().height;\n this.scrollParentBottom = this.getScrollParentTop() + containerHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n this.scrollParentTop ??= getOffsetTop(this.container);\n\n return this.scrollParentTop;\n }\n}\n"],"names":["stopScrolling","horizontalScrollDirection","verticalScrollDirection","getNewHorizontalScrollDirection","container","getNewVerticalScrollDirection","getScrollParentTop","getScrollParentBottom","scrollParentBottom","scrollParentTop"],"mappings":";;;AAQe,MAAM,qBAAqB,SAAS,YAAY,CAAC;AAIvDA,EAAAA,cAAaA,GAAG;IACrB,KAAK,CAACA,cAAa,EAAE;IAErB,IAAI,CAACC,0BAAyB,GAAG,SAAS;IAC1C,IAAI,CAACC,wBAAuB,GAAG,SAAS;AAC1C,EAAA;EAEUC,gCAA+BA,CACvC,KAAa,EAC0B;AACvC,IAAA,IAAM,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAACC,UAAS,CAAC;IAC7D,IAAM,cAAc,GAAG,IAAI,CAACA,UAAS,CAAC,qBAAqB,EAAE,CAAC,KAAK;AAEnE,IAAA,IAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,GAAG,cAAc;AAC1D,IAAA,IAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI;AACxC,IAAA,IAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,EAAE;AAC9C,IAAA,IAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,EAAE;AAE5C,IAAA,IAAI,eAAe,EAAE;AACnB,MAAA,OAAO,OAAO;IAChB,CAAC,MAAM,IAAI,cAAc,EAAE;AACzB,MAAA,OAAO,MAAM;AACf,IAAA;AAEA,IAAA,OAAO,SAAS;AAClB,EAAA;EAEUC,8BAA6BA,CACrC,KAAa,EACwB;AACrC,IAAA,IAAI,KAAK,GAAG,IAAI,CAACC,mBAAkB,EAAE,EAAE;AACrC,MAAA,OAAO,KAAK;AACd,IAAA;AAEA,IAAA,IAAI,KAAK,GAAG,IAAI,CAACC,sBAAqB,EAAE,EAAE;AACxC,MAAA,OAAO,QAAQ;AACjB,IAAA;AAEA,IAAA,OAAO,SAAS;AAClB,EAAA;AAEQA,EAAAA,sBAAqBA,GAAG;AAC9B,IAAA,IAAI,IAAI,CAACC,mBAAkB,IAAI,IAAI,EAAE;MACnC,IAAM,eAAe,GAAG,IAAI,CAACJ,UAAS,CAAC,qBAAqB,EAAE,CAAC,MAAM;MACrE,IAAI,CAACI,mBAAkB,GAAG,IAAI,CAACF,mBAAkB,EAAE,GAAG,eAAe;AACvE,IAAA;IAEA,OAAO,IAAI,CAACE,mBAAkB;AAChC,EAAA;AAEQF,EAAAA,mBAAkBA,GAAG;IAC3B,IAAI,CAACG,gBAAe,KAAK,YAAY,CAAC,IAAI,CAACL,UAAS,CAAC;IAErD,OAAO,IAAI,CAACK,gBAAe;AAC7B,EAAA;AACF;;"}
1
+ {"version":3,"file":"containerScrollParent.js","sources":["../../src/scrollHandler/containerScrollParent.ts"],"sourcesContent":["import type {\n HorizontalScrollDirection,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nimport { getElementPosition, getOffsetTop } from \"../positionUtils\";\nimport { ScrollParent } from \"./scrollParent\";\n\nexport default class ContainerScrollParent extends ScrollParent {\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this.container);\n const containerWidth = this.container.getBoundingClientRect().width;\n\n const rightEdge = scrollParentOffset.left + containerWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n\n if (isNearRightEdge) {\n return \"right\";\n }\n\n const isNearLeftEdge = pageX < leftEdge + 20;\n return isNearLeftEdge ? \"left\" : undefined;\n }\n\n protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n return pageY > this.getScrollParentBottom() ? \"bottom\" : undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n const containerHeight = this.container.getBoundingClientRect().height;\n this.scrollParentBottom = this.getScrollParentTop() + containerHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n this.scrollParentTop ??= getOffsetTop(this.container);\n\n return this.scrollParentTop;\n }\n}\n"],"names":["stopScrolling","horizontalScrollDirection","verticalScrollDirection","getNewHorizontalScrollDirection","container","getNewVerticalScrollDirection","getScrollParentTop","getScrollParentBottom","scrollParentBottom","scrollParentTop"],"mappings":";;;AAQe,MAAM,qBAAqB,SAAS,YAAY,CAAC;AAIvDA,EAAAA,cAAaA,GAAG;IACrB,KAAK,CAACA,cAAa,EAAE;IAErB,IAAI,CAACC,0BAAyB,GAAG,SAAS;IAC1C,IAAI,CAACC,wBAAuB,GAAG,SAAS;AAC1C,EAAA;EAEUC,gCAA+BA,CACvC,KAAa,EAC0B;AACvC,IAAA,IAAM,kBAAkB,GAAG,kBAAkB,CAAC,IAAI,CAACC,UAAS,CAAC;IAC7D,IAAM,cAAc,GAAG,IAAI,CAACA,UAAS,CAAC,qBAAqB,EAAE,CAAC,KAAK;AAEnE,IAAA,IAAM,SAAS,GAAG,kBAAkB,CAAC,IAAI,GAAG,cAAc;AAC1D,IAAA,IAAM,QAAQ,GAAG,kBAAkB,CAAC,IAAI;AACxC,IAAA,IAAM,eAAe,GAAG,KAAK,GAAG,SAAS,GAAG,EAAE;AAE9C,IAAA,IAAI,eAAe,EAAE;AACnB,MAAA,OAAO,OAAO;AAChB,IAAA;AAEA,IAAA,IAAM,cAAc,GAAG,KAAK,GAAG,QAAQ,GAAG,EAAE;AAC5C,IAAA,OAAO,cAAc,GAAG,MAAM,GAAG,SAAS;AAC5C,EAAA;EAEUC,8BAA6BA,CACrC,KAAa,EACwB;AACrC,IAAA,IAAI,KAAK,GAAG,IAAI,CAACC,mBAAkB,EAAE,EAAE;AACrC,MAAA,OAAO,KAAK;AACd,IAAA;IAEA,OAAO,KAAK,GAAG,IAAI,CAACC,sBAAqB,EAAE,GAAG,QAAQ,GAAG,SAAS;AACpE,EAAA;AAEQA,EAAAA,sBAAqBA,GAAG;AAC9B,IAAA,IAAI,IAAI,CAACC,mBAAkB,IAAI,IAAI,EAAE;MACnC,IAAM,eAAe,GAAG,IAAI,CAACJ,UAAS,CAAC,qBAAqB,EAAE,CAAC,MAAM;MACrE,IAAI,CAACI,mBAAkB,GAAG,IAAI,CAACF,mBAAkB,EAAE,GAAG,eAAe;AACvE,IAAA;IAEA,OAAO,IAAI,CAACE,mBAAkB;AAChC,EAAA;AAEQF,EAAAA,mBAAkBA,GAAG;IAC3B,IAAI,CAACG,gBAAe,KAAK,YAAY,CAAC,IAAI,CAACL,UAAS,CAAC;IAErD,OAAO,IAAI,CAACK,gBAAe;AAC7B,EAAA;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"createScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/createScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAkCnD,QAAA,MAAM,kBAAkB,GACtB,aAAa,WAAW,EACxB,iBAAiB,MAAM,IAAI,KAC1B,YAWF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
1
+ {"version":3,"file":"createScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/createScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAkCnD,QAAA,MAAM,kBAAkB,GACtB,aAAa,WAAW,EACxB,iBAAiB,MAAM,IAAI,KAC1B,YAUF,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -26,12 +26,11 @@ let createScrollParent = (treeElement, refreshHitAreas) => {
26
26
  _container: container,
27
27
  _refreshHitAreas: refreshHitAreas
28
28
  });
29
- } else {
30
- return new DocumentScrollParent({
31
- _refreshHitAreas: refreshHitAreas,
32
- _treeElement: treeElement
33
- });
34
29
  }
30
+ return new DocumentScrollParent({
31
+ _refreshHitAreas: refreshHitAreas,
32
+ _treeElement: treeElement
33
+ });
35
34
  };
36
35
 
37
36
  export { createScrollParent as default };
@@ -1 +1 @@
1
- {"version":3,"file":"createScrollParent.js","sources":["../../src/scrollHandler/createScrollParent.ts"],"sourcesContent":["import type { ScrollParent } from \"./scrollParent\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n"],"names":[],"mappings":";;;AAKA,IAAM,UAAU,GAAI,aAAqB,IACvC,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,QAAQ;AAExD,IAAM,WAAW,GAAI,OAAoB,IAAc;AACrD,EAAA,IAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAEvC,EAAA,OAAO,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,IAAM,qBAAqB,GACzB,WAAwB,IACD;AACvB,EAAA,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE;AAC5B,IAAA,OAAO,WAAW;AACpB,EAAA;AAEA,EAAA,IAAI,MAAM,GAAG,WAAW,CAAC,aAAa;AAEtC,EAAA,OAAO,MAAM,EAAE;AACb,IAAA,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;AACvB,MAAA,OAAO,MAAM;AACf,IAAA;IAEA,MAAM,GAAG,MAAM,CAAC,aAAa;AAC/B,EAAA;AAEA,EAAA,OAAO,IAAI;AACb,CAAC;AAED,IAAM,kBAAkB,GAAG,CACzB,WAAwB,EACxB,eAA2B,KACV;AACjB,EAAA,IAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,CAAC;AAEpD,EAAA,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,MAAM,EAAE;IAC7C,OAAO,IAAI,qBAAqB,CAAC;MAC/B,UAAA,EAAA,SAAS;AACT,MAAA,gBAAA,EAAA;AACF,KAAC,CAAC;AACJ,EAAA,CAAC,MAAM;IACL,OAAO,IAAI,oBAAoB,CAAC;MAAE,gBAAA,EAAA,eAAe;AAAE,MAAA,YAAA,EAAA;AAAY,KAAC,CAAC;AACnE,EAAA;AACF;;"}
1
+ {"version":3,"file":"createScrollParent.js","sources":["../../src/scrollHandler/createScrollParent.ts"],"sourcesContent":["import type { ScrollParent } from \"./scrollParent\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n }\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n};\n\nexport default createScrollParent;\n"],"names":[],"mappings":";;;AAKA,IAAM,UAAU,GAAI,aAAqB,IACvC,aAAa,KAAK,MAAM,IAAI,aAAa,KAAK,QAAQ;AAExD,IAAM,WAAW,GAAI,OAAoB,IAAc;AACrD,EAAA,IAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC;AAEvC,EAAA,OAAO,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,IAAM,qBAAqB,GACzB,WAAwB,IACD;AACvB,EAAA,IAAI,WAAW,CAAC,WAAW,CAAC,EAAE;AAC5B,IAAA,OAAO,WAAW;AACpB,EAAA;AAEA,EAAA,IAAI,MAAM,GAAG,WAAW,CAAC,aAAa;AAEtC,EAAA,OAAO,MAAM,EAAE;AACb,IAAA,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE;AACvB,MAAA,OAAO,MAAM;AACf,IAAA;IAEA,MAAM,GAAG,MAAM,CAAC,aAAa;AAC/B,EAAA;AAEA,EAAA,OAAO,IAAI;AACb,CAAC;AAED,IAAM,kBAAkB,GAAG,CACzB,WAAwB,EACxB,eAA2B,KACV;AACjB,EAAA,IAAM,SAAS,GAAG,qBAAqB,CAAC,WAAW,CAAC;AAEpD,EAAA,IAAI,SAAS,IAAI,SAAS,CAAC,OAAO,KAAK,MAAM,EAAE;IAC7C,OAAO,IAAI,qBAAqB,CAAC;MAC/B,UAAA,EAAA,SAAS;AACT,MAAA,gBAAA,EAAA;AACF,KAAC,CAAC;AACJ,EAAA;EACA,OAAO,IAAI,oBAAoB,CAAC;IAAE,gBAAA,EAAA,eAAe;AAAE,IAAA,YAAA,EAAA;AAAY,GAAC,CAAC;AACnE;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"documentScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/documentScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,UAAU,MAAM;IACd,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,YAAY;IAC5D,OAAO,CAAC,oBAAoB,CAAC,CAAS;IACtC,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,WAAW,CAAc;gBAErB,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE,MAAM;IAM7C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM5B,aAAa;IAOpB,SAAS,CAAC,+BAA+B,CACvC,KAAK,EAAE,MAAM,GACZ,yBAAyB,GAAG,SAAS;IAkBxC,SAAS,CAAC,6BAA6B,CACrC,KAAK,EAAE,MAAM,GACZ,SAAS,GAAG,uBAAuB;IAiBtC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,sBAAsB;CAM/B"}
1
+ {"version":3,"file":"documentScrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/documentScrollParent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,yBAAyB,EACzB,uBAAuB,EACxB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,UAAU,MAAM;IACd,eAAe,EAAE,MAAM,IAAI,CAAC;IAC5B,WAAW,EAAE,WAAW,CAAC;CAC1B;AAED,MAAM,CAAC,OAAO,OAAO,oBAAqB,SAAQ,YAAY;IAC5D,OAAO,CAAC,oBAAoB,CAAC,CAAS;IACtC,OAAO,CAAC,mBAAmB,CAAC,CAAS;IACrC,OAAO,CAAC,WAAW,CAAc;gBAErB,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE,MAAM;IAM7C,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAM5B,aAAa;IAOpB,SAAS,CAAC,+BAA+B,CACvC,KAAK,EAAE,MAAM,GACZ,yBAAyB,GAAG,SAAS;IAcxC,SAAS,CAAC,6BAA6B,CACrC,KAAK,EAAE,MAAM,GACZ,SAAS,GAAG,uBAAuB;IAetC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,cAAc;IAOtB,OAAO,CAAC,uBAAuB;IAO/B,OAAO,CAAC,sBAAsB;CAM/B"}
@@ -25,14 +25,11 @@ class DocumentScrollParent extends ScrollParent {
25
25
  let scrollLeft = this._container.scrollLeft;
26
26
  let windowWidth = window.innerWidth;
27
27
  let isNearRightEdge = pageX > windowWidth - 20;
28
- let isNearLeftEdge = pageX - scrollLeft < 20;
29
28
  if (isNearRightEdge && this._canScrollRight()) {
30
29
  return "right";
31
30
  }
32
- if (isNearLeftEdge) {
33
- return "left";
34
- }
35
- return undefined;
31
+ let isNearLeftEdge = pageX - scrollLeft < 20;
32
+ return isNearLeftEdge ? "left" : undefined;
36
33
  }
37
34
  _getNewVerticalScrollDirection(pageY) {
38
35
  let scrollTop = this._container.scrollTop;
@@ -41,10 +38,7 @@ class DocumentScrollParent extends ScrollParent {
41
38
  return "top";
42
39
  }
43
40
  let windowHeight = window.innerHeight;
44
- if (windowHeight - (pageY - scrollTop) < 20 && this._canScrollDown()) {
45
- return "bottom";
46
- }
47
- return undefined;
41
+ return windowHeight - (pageY - scrollTop) < 20 && this._canScrollDown() ? "bottom" : undefined;
48
42
  }
49
43
  _canScrollDown() {
50
44
  return this._container.scrollTop + this._container.clientHeight < this._getDocumentScrollHeight();
@@ -1 +1 @@
1
- {"version":3,"file":"documentScrollParent.js","sources":["../../src/scrollHandler/documentScrollParent.ts"],"sourcesContent":["import type {\n HorizontalScrollDirection,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nimport { getOffsetTop } from \"../positionUtils\";\nimport { ScrollParent } from \"./scrollParent\";\n\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class DocumentScrollParent extends ScrollParent {\n private documentScrollHeight?: number;\n private documentScrollWidth?: number;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: Params) {\n super({ container: document.documentElement, refreshHitAreas });\n\n this.treeElement = treeElement;\n }\n\n public scrollToY(top: number): void {\n const treeTop = getOffsetTop(this.treeElement);\n\n super.scrollToY(top + treeTop);\n }\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.documentScrollHeight = undefined;\n this.documentScrollWidth = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = this.container.scrollLeft;\n const windowWidth = window.innerWidth;\n\n const isNearRightEdge = pageX > windowWidth - 20;\n const isNearLeftEdge = pageX - scrollLeft < 20;\n\n if (isNearRightEdge && this.canScrollRight()) {\n return \"right\";\n }\n\n if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = this.container.scrollTop;\n const distanceTop = pageY - scrollTop;\n\n if (distanceTop < 20) {\n return \"top\";\n }\n\n const windowHeight = window.innerHeight;\n\n if (windowHeight - (pageY - scrollTop) < 20 && this.canScrollDown()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private canScrollDown() {\n return (\n this.container.scrollTop + this.container.clientHeight <\n this.getDocumentScrollHeight()\n );\n }\n\n private canScrollRight() {\n return (\n this.container.scrollLeft + this.container.clientWidth <\n this.getDocumentScrollWidth()\n );\n }\n\n private getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n this.documentScrollHeight ??= this.container.scrollHeight;\n\n return this.documentScrollHeight;\n }\n\n private getDocumentScrollWidth() {\n // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.\n this.documentScrollWidth ??= this.container.scrollWidth;\n\n return this.documentScrollWidth;\n }\n}\n"],"names":["treeElement","scrollToY","stopScrolling","documentScrollHeight","documentScrollWidth","getNewHorizontalScrollDirection","container","canScrollRight","getNewVerticalScrollDirection","canScrollDown","getDocumentScrollHeight","getDocumentScrollWidth"],"mappings":";;;AAae,MAAM,oBAAoB,SAAS,YAAY,CAAC;AAK7D,EAAA,WAAW,CAAC;IAAE,gBAAA,EAAA,eAAe;AAAE,IAAA,YAAA,EAAA;AAAoB,GAAC,EAAE;AACpD,IAAA,KAAK,CAAC;MAAE,UAAA,EAAW,QAAQ,CAAC,eAAe;AAAE,MAAA,gBAAA,EAAA;AAAgB,KAAC,CAAC;IAE/D,IAAI,CAACA,YAAW,GAAG,WAAW;AAChC,EAAA;EAEOC,UAASA,CAAC,GAAW,EAAQ;AAClC,IAAA,IAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAACD,YAAW,CAAC;AAE9C,IAAA,KAAK,CAACC,UAAS,CAAC,GAAG,GAAG,OAAO,CAAC;AAChC,EAAA;AAEOC,EAAAA,cAAaA,GAAG;IACrB,KAAK,CAACA,cAAa,EAAE;IAErB,IAAI,CAACC,qBAAoB,GAAG,SAAS;IACrC,IAAI,CAACC,oBAAmB,GAAG,SAAS;AACtC,EAAA;EAEUC,gCAA+BA,CACvC,KAAa,EAC0B;AACvC,IAAA,IAAM,UAAU,GAAG,IAAI,CAACC,UAAS,CAAC,UAAU;AAC5C,IAAA,IAAM,WAAW,GAAG,MAAM,CAAC,UAAU;AAErC,IAAA,IAAM,eAAe,GAAG,KAAK,GAAG,WAAW,GAAG,EAAE;AAChD,IAAA,IAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,EAAE;AAE9C,IAAA,IAAI,eAAe,IAAI,IAAI,CAACC,eAAc,EAAE,EAAE;AAC5C,MAAA,OAAO,OAAO;AAChB,IAAA;AAEA,IAAA,IAAI,cAAc,EAAE;AAClB,MAAA,OAAO,MAAM;AACf,IAAA;AAEA,IAAA,OAAO,SAAS;AAClB,EAAA;EAEUC,8BAA6BA,CACrC,KAAa,EACwB;AACrC,IAAA,IAAM,SAAS,GAAG,IAAI,CAACF,UAAS,CAAC,SAAS;AAC1C,IAAA,IAAM,WAAW,GAAG,KAAK,GAAG,SAAS;IAErC,IAAI,WAAW,GAAG,EAAE,EAAE;AACpB,MAAA,OAAO,KAAK;AACd,IAAA;AAEA,IAAA,IAAM,YAAY,GAAG,MAAM,CAAC,WAAW;AAEvC,IAAA,IAAI,YAAY,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,IAAI,CAACG,cAAa,EAAE,EAAE;AACnE,MAAA,OAAO,QAAQ;AACjB,IAAA;AAEA,IAAA,OAAO,SAAS;AAClB,EAAA;AAEQA,EAAAA,cAAaA,GAAG;AACtB,IAAA,OACE,IAAI,CAACH,UAAS,CAAC,SAAS,GAAG,IAAI,CAACA,UAAS,CAAC,YAAY,GACtD,IAAI,CAACI,wBAAuB,EAAE;AAElC,EAAA;AAEQH,EAAAA,eAAcA,GAAG;AACvB,IAAA,OACE,IAAI,CAACD,UAAS,CAAC,UAAU,GAAG,IAAI,CAACA,UAAS,CAAC,WAAW,GACtD,IAAI,CAACK,uBAAsB,EAAE;AAEjC,EAAA;AAEQD,EAAAA,wBAAuBA,GAAG;AAChC;AACA,IAAA,IAAI,CAACP,qBAAoB,KAAK,IAAI,CAACG,UAAS,CAAC,YAAY;IAEzD,OAAO,IAAI,CAACH,qBAAoB;AAClC,EAAA;AAEQQ,EAAAA,uBAAsBA,GAAG;AAC/B;AACA,IAAA,IAAI,CAACP,oBAAmB,KAAK,IAAI,CAACE,UAAS,CAAC,WAAW;IAEvD,OAAO,IAAI,CAACF,oBAAmB;AACjC,EAAA;AACF;;"}
1
+ {"version":3,"file":"documentScrollParent.js","sources":["../../src/scrollHandler/documentScrollParent.ts"],"sourcesContent":["import type {\n HorizontalScrollDirection,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nimport { getOffsetTop } from \"../positionUtils\";\nimport { ScrollParent } from \"./scrollParent\";\n\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class DocumentScrollParent extends ScrollParent {\n private documentScrollHeight?: number;\n private documentScrollWidth?: number;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: Params) {\n super({ container: document.documentElement, refreshHitAreas });\n\n this.treeElement = treeElement;\n }\n\n public scrollToY(top: number): void {\n const treeTop = getOffsetTop(this.treeElement);\n\n super.scrollToY(top + treeTop);\n }\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.documentScrollHeight = undefined;\n this.documentScrollWidth = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = this.container.scrollLeft;\n const windowWidth = window.innerWidth;\n\n const isNearRightEdge = pageX > windowWidth - 20;\n\n if (isNearRightEdge && this.canScrollRight()) {\n return \"right\";\n }\n\n const isNearLeftEdge = pageX - scrollLeft < 20;\n return isNearLeftEdge ? \"left\" : undefined;\n }\n\n protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = this.container.scrollTop;\n const distanceTop = pageY - scrollTop;\n\n if (distanceTop < 20) {\n return \"top\";\n }\n\n const windowHeight = window.innerHeight;\n\n return windowHeight - (pageY - scrollTop) < 20 && this.canScrollDown()\n ? \"bottom\"\n : undefined;\n }\n\n private canScrollDown() {\n return (\n this.container.scrollTop + this.container.clientHeight <\n this.getDocumentScrollHeight()\n );\n }\n\n private canScrollRight() {\n return (\n this.container.scrollLeft + this.container.clientWidth <\n this.getDocumentScrollWidth()\n );\n }\n\n private getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n this.documentScrollHeight ??= this.container.scrollHeight;\n\n return this.documentScrollHeight;\n }\n\n private getDocumentScrollWidth() {\n // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.\n this.documentScrollWidth ??= this.container.scrollWidth;\n\n return this.documentScrollWidth;\n }\n}\n"],"names":["treeElement","scrollToY","stopScrolling","documentScrollHeight","documentScrollWidth","getNewHorizontalScrollDirection","container","canScrollRight","getNewVerticalScrollDirection","canScrollDown","getDocumentScrollHeight","getDocumentScrollWidth"],"mappings":";;;AAae,MAAM,oBAAoB,SAAS,YAAY,CAAC;AAK7D,EAAA,WAAW,CAAC;IAAE,gBAAA,EAAA,eAAe;AAAE,IAAA,YAAA,EAAA;AAAoB,GAAC,EAAE;AACpD,IAAA,KAAK,CAAC;MAAE,UAAA,EAAW,QAAQ,CAAC,eAAe;AAAE,MAAA,gBAAA,EAAA;AAAgB,KAAC,CAAC;IAE/D,IAAI,CAACA,YAAW,GAAG,WAAW;AAChC,EAAA;EAEOC,UAASA,CAAC,GAAW,EAAQ;AAClC,IAAA,IAAM,OAAO,GAAG,YAAY,CAAC,IAAI,CAACD,YAAW,CAAC;AAE9C,IAAA,KAAK,CAACC,UAAS,CAAC,GAAG,GAAG,OAAO,CAAC;AAChC,EAAA;AAEOC,EAAAA,cAAaA,GAAG;IACrB,KAAK,CAACA,cAAa,EAAE;IAErB,IAAI,CAACC,qBAAoB,GAAG,SAAS;IACrC,IAAI,CAACC,oBAAmB,GAAG,SAAS;AACtC,EAAA;EAEUC,gCAA+BA,CACvC,KAAa,EAC0B;AACvC,IAAA,IAAM,UAAU,GAAG,IAAI,CAACC,UAAS,CAAC,UAAU;AAC5C,IAAA,IAAM,WAAW,GAAG,MAAM,CAAC,UAAU;AAErC,IAAA,IAAM,eAAe,GAAG,KAAK,GAAG,WAAW,GAAG,EAAE;AAEhD,IAAA,IAAI,eAAe,IAAI,IAAI,CAACC,eAAc,EAAE,EAAE;AAC5C,MAAA,OAAO,OAAO;AAChB,IAAA;AAEA,IAAA,IAAM,cAAc,GAAG,KAAK,GAAG,UAAU,GAAG,EAAE;AAC9C,IAAA,OAAO,cAAc,GAAG,MAAM,GAAG,SAAS;AAC5C,EAAA;EAEUC,8BAA6BA,CACrC,KAAa,EACwB;AACrC,IAAA,IAAM,SAAS,GAAG,IAAI,CAACF,UAAS,CAAC,SAAS;AAC1C,IAAA,IAAM,WAAW,GAAG,KAAK,GAAG,SAAS;IAErC,IAAI,WAAW,GAAG,EAAE,EAAE;AACpB,MAAA,OAAO,KAAK;AACd,IAAA;AAEA,IAAA,IAAM,YAAY,GAAG,MAAM,CAAC,WAAW;AAEvC,IAAA,OAAO,YAAY,IAAI,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,IAAI,IAAI,CAACG,cAAa,EAAE,GAClE,QAAQ,GACR,SAAS;AACf,EAAA;AAEQA,EAAAA,cAAaA,GAAG;AACtB,IAAA,OACE,IAAI,CAACH,UAAS,CAAC,SAAS,GAAG,IAAI,CAACA,UAAS,CAAC,YAAY,GACtD,IAAI,CAACI,wBAAuB,EAAE;AAElC,EAAA;AAEQH,EAAAA,eAAcA,GAAG;AACvB,IAAA,OACE,IAAI,CAACD,UAAS,CAAC,UAAU,GAAG,IAAI,CAACA,UAAS,CAAC,WAAW,GACtD,IAAI,CAACK,uBAAsB,EAAE;AAEjC,EAAA;AAEQD,EAAAA,wBAAuBA,GAAG;AAChC;AACA,IAAA,IAAI,CAACP,qBAAoB,KAAK,IAAI,CAACG,UAAS,CAAC,YAAY;IAEzD,OAAO,IAAI,CAACH,qBAAoB;AAClC,EAAA;AAEQQ,EAAAA,uBAAsBA,GAAG;AAC/B;AACA,IAAA,IAAI,CAACP,oBAAmB,KAAK,IAAI,CAACE,UAAS,CAAC,WAAW;IAEvD,OAAO,IAAI,CAACF,oBAAmB;AACjC,EAAA;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"scrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/scrollParent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,OAAO,CAAC;AACzD,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvD,UAAU,iBAAiB;IACzB,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,8BAAsB,YAAY;IAChC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC;IACjC,SAAS,CAAC,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IAChE,SAAS,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAE3C,SAAS,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC;IACtC,SAAS,CAAC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAC5D,SAAS,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;gBAE7B,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,iBAAiB;IAKtD,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAoB7C,sBAAsB,CAAC,KAAK,EAAE,MAAM;IAqBpC,aAAa,IAAI,MAAM;IAIvB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI5B,aAAa;IAKpB,SAAS,CAAC,QAAQ,CAAC,+BAA+B,CAChD,KAAK,EAAE,MAAM,GACZ,yBAAyB,GAAG,SAAS;IACxC,SAAS,CAAC,QAAQ,CAAC,6BAA6B,CAC9C,KAAK,EAAE,MAAM,GACZ,SAAS,GAAG,uBAAuB;IAEtC,SAAS,CAAC,kBAAkB;IAiB5B,SAAS,CAAC,gBAAgB;CAgB3B"}
1
+ {"version":3,"file":"scrollParent.d.ts","sourceRoot":"","sources":["../../src/scrollHandler/scrollParent.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,OAAO,CAAC;AACzD,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,KAAK,CAAC;AAEvD,UAAU,iBAAiB;IACzB,SAAS,EAAE,WAAW,CAAC;IACvB,eAAe,EAAE,MAAM,IAAI,CAAC;CAC7B;AAED,8BAAsB,YAAY;IAChC,SAAS,CAAC,SAAS,EAAE,WAAW,CAAC;IACjC,SAAS,CAAC,yBAAyB,CAAC,EAAE,yBAAyB,CAAC;IAChE,SAAS,CAAC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IAE3C,SAAS,CAAC,eAAe,EAAE,MAAM,IAAI,CAAC;IACtC,SAAS,CAAC,uBAAuB,CAAC,EAAE,uBAAuB,CAAC;IAC5D,SAAS,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;gBAE7B,EAAE,SAAS,EAAE,eAAe,EAAE,EAAE,iBAAiB;IAKtD,wBAAwB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAsB7C,sBAAsB,CAAC,KAAK,EAAE,MAAM;IAuBpC,aAAa,IAAI,MAAM;IAIvB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAI5B,aAAa;IAKpB,SAAS,CAAC,QAAQ,CAAC,+BAA+B,CAChD,KAAK,EAAE,MAAM,GACZ,yBAAyB,GAAG,SAAS;IACxC,SAAS,CAAC,QAAQ,CAAC,6BAA6B,CAC9C,KAAK,EAAE,MAAM,GACZ,SAAS,GAAG,uBAAuB;IAEtC,SAAS,CAAC,kBAAkB;IAiB5B,SAAS,CAAC,gBAAgB;CAgB3B"}
@@ -8,27 +8,29 @@ class ScrollParent {
8
8
  }
9
9
  _checkHorizontalScrolling(pageX) {
10
10
  let newHorizontalScrollDirection = this._getNewHorizontalScrollDirection(pageX);
11
- if (this._horizontalScrollDirection !== newHorizontalScrollDirection) {
12
- this._horizontalScrollDirection = newHorizontalScrollDirection;
13
- if (this._horizontalScrollTimeout != null) {
14
- window.clearTimeout(this._horizontalScrollTimeout);
15
- }
16
- if (newHorizontalScrollDirection) {
17
- this._horizontalScrollTimeout = window.setTimeout(this._scrollHorizontally.bind(this), 40);
18
- }
11
+ if (this._horizontalScrollDirection === newHorizontalScrollDirection) {
12
+ return;
13
+ }
14
+ this._horizontalScrollDirection = newHorizontalScrollDirection;
15
+ if (this._horizontalScrollTimeout != null) {
16
+ window.clearTimeout(this._horizontalScrollTimeout);
17
+ }
18
+ if (newHorizontalScrollDirection) {
19
+ this._horizontalScrollTimeout = window.setTimeout(this._scrollHorizontally.bind(this), 40);
19
20
  }
20
21
  }
21
22
  _checkVerticalScrolling(pageY) {
22
23
  let newVerticalScrollDirection = this._getNewVerticalScrollDirection(pageY);
23
- if (this._verticalScrollDirection !== newVerticalScrollDirection) {
24
- this._verticalScrollDirection = newVerticalScrollDirection;
25
- if (this._verticalScrollTimeout != null) {
26
- window.clearTimeout(this._verticalScrollTimeout);
27
- this._verticalScrollTimeout = undefined;
28
- }
29
- if (newVerticalScrollDirection) {
30
- this._verticalScrollTimeout = window.setTimeout(this._scrollVertically.bind(this), 40);
31
- }
24
+ if (this._verticalScrollDirection === newVerticalScrollDirection) {
25
+ return;
26
+ }
27
+ this._verticalScrollDirection = newVerticalScrollDirection;
28
+ if (this._verticalScrollTimeout != null) {
29
+ window.clearTimeout(this._verticalScrollTimeout);
30
+ this._verticalScrollTimeout = undefined;
31
+ }
32
+ if (newVerticalScrollDirection) {
33
+ this._verticalScrollTimeout = window.setTimeout(this._scrollVertically.bind(this), 40);
32
34
  }
33
35
  }
34
36
  _getScrollLeft() {
@@ -1 +1 @@
1
- {"version":3,"file":"scrollParent.js","sources":["../../src/scrollHandler/scrollParent.ts"],"sourcesContent":["export type HorizontalScrollDirection = \"left\" | \"right\";\nexport type VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface ConstructorParams {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\nexport abstract class ScrollParent {\n protected container: HTMLElement;\n protected horizontalScrollDirection?: HorizontalScrollDirection;\n protected horizontalScrollTimeout?: number;\n\n protected refreshHitAreas: () => void;\n protected verticalScrollDirection?: VerticalScrollDirection;\n protected verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: ConstructorParams) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection !== newHorizontalScrollDirection) {\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.horizontalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection !== newVerticalScrollDirection) {\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return this.container.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n this.container.scrollTop = top;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n }\n\n protected abstract getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined;\n protected abstract getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection;\n\n protected scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n protected scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n"],"names":["container","refreshHitAreas","checkHorizontalScrolling","getNewHorizontalScrollDirection","horizontalScrollDirection","horizontalScrollTimeout","scrollHorizontally","checkVerticalScrolling","getNewVerticalScrollDirection","verticalScrollDirection","verticalScrollTimeout","scrollVertically","getScrollLeft","scrollToY","stopScrolling"],"mappings":"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"}
1
+ {"version":3,"file":"scrollParent.js","sources":["../../src/scrollHandler/scrollParent.ts"],"sourcesContent":["export type HorizontalScrollDirection = \"left\" | \"right\";\nexport type VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface ConstructorParams {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\nexport abstract class ScrollParent {\n protected container: HTMLElement;\n protected horizontalScrollDirection?: HorizontalScrollDirection;\n protected horizontalScrollTimeout?: number;\n\n protected refreshHitAreas: () => void;\n protected verticalScrollDirection?: VerticalScrollDirection;\n protected verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: ConstructorParams) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection === newHorizontalScrollDirection) {\n return;\n }\n\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.horizontalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection === newVerticalScrollDirection) {\n return;\n }\n\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n\n public getScrollLeft(): number {\n return this.container.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n this.container.scrollTop = top;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n }\n\n protected abstract getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined;\n protected abstract getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection;\n\n protected scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n protected scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n"],"names":["container","refreshHitAreas","checkHorizontalScrolling","getNewHorizontalScrollDirection","horizontalScrollDirection","horizontalScrollTimeout","scrollHorizontally","checkVerticalScrolling","getNewVerticalScrollDirection","verticalScrollDirection","verticalScrollTimeout","scrollVertically","getScrollLeft","scrollToY","stopScrolling"],"mappings":"AAQO,MAAe,YAAY,CAAC;AASjC,EAAA,WAAW,CAAC;IAAE,UAAA,EAAA,SAAS;AAAE,IAAA,gBAAA,EAAA;AAAmC,GAAC,EAAE;IAC7D,IAAI,CAACA,UAAS,GAAG,SAAS;IAC1B,IAAI,CAACC,gBAAe,GAAG,eAAe;AACxC,EAAA;EAEOC,yBAAwBA,CAAC,KAAa,EAAQ;AACnD,IAAA,IAAM,4BAA4B,GAChC,IAAI,CAACC,gCAA+B,CAAC,KAAK,CAAC;AAE7C,IAAA,IAAI,IAAI,CAACC,0BAAyB,KAAK,4BAA4B,EAAE;AACnE,MAAA;AACF,IAAA;IAEA,IAAI,CAACA,0BAAyB,GAAG,4BAA4B;AAE7D,IAAA,IAAI,IAAI,CAACC,wBAAuB,IAAI,IAAI,EAAE;AACxC,MAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAACA,wBAAuB,CAAC;AACnD,IAAA;AAEA,IAAA,IAAI,4BAA4B,EAAE;AAChC,MAAA,IAAI,CAACA,wBAAuB,GAAG,MAAM,CAAC,UAAU,CAC9C,IAAI,CAACC,mBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAClC,EACF,CAAC;AACH,IAAA;AACF,EAAA;EAEOC,uBAAsBA,CAAC,KAAa,EAAE;AAC3C,IAAA,IAAM,0BAA0B,GAC9B,IAAI,CAACC,8BAA6B,CAAC,KAAK,CAAC;AAE3C,IAAA,IAAI,IAAI,CAACC,wBAAuB,KAAK,0BAA0B,EAAE;AAC/D,MAAA;AACF,IAAA;IAEA,IAAI,CAACA,wBAAuB,GAAG,0BAA0B;AAEzD,IAAA,IAAI,IAAI,CAACC,sBAAqB,IAAI,IAAI,EAAE;AACtC,MAAA,MAAM,CAAC,YAAY,CAAC,IAAI,CAACA,sBAAqB,CAAC;MAC/C,IAAI,CAACA,sBAAqB,GAAG,SAAS;AACxC,IAAA;AAEA,IAAA,IAAI,0BAA0B,EAAE;AAC9B,MAAA,IAAI,CAACA,sBAAqB,GAAG,MAAM,CAAC,UAAU,CAC5C,IAAI,CAACC,iBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAChC,EACF,CAAC;AACH,IAAA;AACF,EAAA;AAEOC,EAAAA,cAAaA,GAAW;AAC7B,IAAA,OAAO,IAAI,CAACZ,UAAS,CAAC,UAAU;AAClC,EAAA;EAEOa,UAASA,CAAC,GAAW,EAAQ;AAClC,IAAA,IAAI,CAACb,UAAS,CAAC,SAAS,GAAG,GAAG;AAChC,EAAA;AAEOc,EAAAA,cAAaA,GAAG;IACrB,IAAI,CAACV,0BAAyB,GAAG,SAAS;IAC1C,IAAI,CAACK,wBAAuB,GAAG,SAAS;AAC1C,EAAA;AASUH,EAAAA,mBAAkBA,GAAG;AAC7B,IAAA,IAAI,CAAC,IAAI,CAACF,0BAAyB,EAAE;AACnC,MAAA;AACF,IAAA;IAEA,IAAM,QAAQ,GAAG,IAAI,CAACA,0BAAyB,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AACrE,IAAA,IAAI,CAACJ,UAAS,CAAC,QAAQ,CAAC;AACtB,MAAA,QAAQ,EAAE,SAAS;AACnB,MAAA,IAAI,EAAE,QAAQ;AACd,MAAA,GAAG,EAAE;AACP,KAAC,CAAC;IAEF,IAAI,CAACC,gBAAe,EAAE;IAEtB,UAAU,CAAC,IAAI,CAACK,mBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AACpD,EAAA;AAEUK,EAAAA,iBAAgBA,GAAG;AAC3B,IAAA,IAAI,CAAC,IAAI,CAACF,wBAAuB,EAAE;AACjC,MAAA;AACF,IAAA;IAEA,IAAM,QAAQ,GAAG,IAAI,CAACA,wBAAuB,KAAK,KAAK,GAAG,GAAG,GAAG,EAAE;AAClE,IAAA,IAAI,CAACT,UAAS,CAAC,QAAQ,CAAC;AACtB,MAAA,QAAQ,EAAE,SAAS;AACnB,MAAA,IAAI,EAAE,CAAC;AACP,MAAA,GAAG,EAAE;AACP,KAAC,CAAC;IAEF,IAAI,CAACC,gBAAe,EAAE;IAEtB,UAAU,CAAC,IAAI,CAACU,iBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;AAClD,EAAA;AACF;;"}
@@ -13,6 +13,7 @@ interface SelectNodeHandlerParameters {
13
13
  openParents: OpenParents;
14
14
  saveState: () => void;
15
15
  triggerEvent: TriggerEvent;
16
+ updateTabStop: () => void;
16
17
  }
17
18
  export default class SelectNodeHandler {
18
19
  private getNodeById;
@@ -24,7 +25,8 @@ export default class SelectNodeHandler {
24
25
  private selectedNodes;
25
26
  private selectedSingleNode;
26
27
  private triggerEvent;
27
- constructor({ getNodeById, getNodeElementForNode, getOnCanSelectNode, getSelectable, openParents, saveState, triggerEvent, }: SelectNodeHandlerParameters);
28
+ private updateTabStop;
29
+ constructor({ getNodeById, getNodeElementForNode, getOnCanSelectNode, getSelectable, openParents, saveState, triggerEvent, updateTabStop, }: SelectNodeHandlerParameters);
28
30
  addToSelection(node: Node): void;
29
31
  clear(): void;
30
32
  getSelectedNode(): Node | null;
@@ -1 +1 @@
1
- {"version":3,"file":"selectNodeHandler.d.ts","sourceRoot":"","sources":["../src/selectNodeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,2BAA2B;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,kBAAkB,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;IACtD,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;CAC5B;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,kBAAkB,CAAc;IACxC,OAAO,CAAC,YAAY,CAAe;gBAEvB,EACV,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,SAAS,EACT,YAAY,GACb,EAAE,2BAA2B;IAYvB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQhC,KAAK,IAAI,IAAI;IAKb,eAAe,IAAI,IAAI,GAAG,IAAI;IAU9B,gBAAgB,IAAI,IAAI,EAAE;IAiB1B,qBAAqB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE;IAqB3C,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAUnC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,UAAQ,GAAG,IAAI;IA6B9D,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,iBAAiB;CA8CrE"}
1
+ {"version":3,"file":"selectNodeHandler.d.ts","sourceRoot":"","sources":["../src/selectNodeHandler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,qBAAqB,EACrB,WAAW,EACX,YAAY,EACb,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,IAAI,EAAU,MAAM,QAAQ,CAAC;AAC3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAEjD,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,UAAU,2BAA2B;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,qBAAqB,EAAE,qBAAqB,CAAC;IAC7C,kBAAkB,EAAE,MAAM,eAAe,GAAG,SAAS,CAAC;IACtD,aAAa,EAAE,MAAM,OAAO,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB,YAAY,EAAE,YAAY,CAAC;IAC3B,aAAa,EAAE,MAAM,IAAI,CAAC;CAC3B;AAED,MAAM,CAAC,OAAO,OAAO,iBAAiB;IACpC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,qBAAqB,CAAwB;IACrD,OAAO,CAAC,kBAAkB,CAAoC;IAC9D,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,kBAAkB,CAAc;IACxC,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,aAAa,CAAa;gBAEtB,EACV,WAAW,EACX,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,EACb,WAAW,EACX,SAAS,EACT,YAAY,EACZ,aAAa,GACd,EAAE,2BAA2B;IAavB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAQhC,KAAK,IAAI,IAAI;IAKb,eAAe,IAAI,IAAI,GAAG,IAAI;IAM9B,gBAAgB,IAAI,IAAI,EAAE;IAiB1B,qBAAqB,CAAC,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE;IAmB3C,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO;IAOnC,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,eAAe,UAAQ,GAAG,IAAI;IA6B9D,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,EAAE,iBAAiB;CA+CrE"}
@@ -6,7 +6,8 @@ class SelectNodeHandler {
6
6
  _getSelectable: getSelectable,
7
7
  _openParents: openParents,
8
8
  _saveState: saveState,
9
- _triggerEvent: triggerEvent
9
+ _triggerEvent: triggerEvent,
10
+ _updateTabStop: updateTabStop
10
11
  }) {
11
12
  this._getNodeById = getNodeById;
12
13
  this._getNodeElementForNode = getNodeElementForNode;
@@ -17,12 +18,13 @@ class SelectNodeHandler {
17
18
  this._selectedNodes = new Set();
18
19
  this._selectedSingleNode = null;
19
20
  this._triggerEvent = triggerEvent;
21
+ this._updateTabStop = updateTabStop;
20
22
  }
21
23
  _addToSelection(node) {
22
- if (node.id != null) {
23
- this._selectedNodes.add(node.id);
24
- } else {
24
+ if (node.id == null) {
25
25
  this._selectedSingleNode = node;
26
+ } else {
27
+ this._selectedNodes.add(node.id);
26
28
  }
27
29
  }
28
30
  _clear() {
@@ -31,52 +33,39 @@ class SelectNodeHandler {
31
33
  }
32
34
  _getSelectedNode() {
33
35
  let selectedNodes = this._getSelectedNodes();
34
- if (selectedNodes.length) {
35
- return selectedNodes[0] ?? null;
36
- } else {
37
- return null;
38
- }
36
+ return selectedNodes.length ? selectedNodes[0] ?? null : null;
39
37
  }
40
38
  _getSelectedNodes() {
41
39
  if (this._selectedSingleNode) {
42
40
  return [this._selectedSingleNode];
43
- } else {
44
- let selectedNodes = [];
45
- this._selectedNodes.forEach(id => {
46
- let node = this._getNodeById(id);
47
- if (node) {
48
- selectedNodes.push(node);
49
- }
50
- });
51
- return selectedNodes;
52
41
  }
42
+ let selectedNodes = [];
43
+ this._selectedNodes.forEach(id => {
44
+ let node = this._getNodeById(id);
45
+ if (node) {
46
+ selectedNodes.push(node);
47
+ }
48
+ });
49
+ return selectedNodes;
53
50
  }
54
51
  _getSelectedNodesUnder(parent) {
55
52
  if (this._selectedSingleNode) {
56
- if (parent.isParentOf(this._selectedSingleNode)) {
57
- return [this._selectedSingleNode];
58
- } else {
59
- return [];
60
- }
61
- } else {
62
- let selectedNodes = [];
63
- this._selectedNodes.forEach(id => {
64
- let node = this._getNodeById(id);
65
- if (node && parent.isParentOf(node)) {
66
- selectedNodes.push(node);
67
- }
68
- });
69
- return selectedNodes;
53
+ return parent.isParentOf(this._selectedSingleNode) ? [this._selectedSingleNode] : [];
70
54
  }
55
+ let selectedNodes = [];
56
+ this._selectedNodes.forEach(id => {
57
+ let node = this._getNodeById(id);
58
+ if (node && parent.isParentOf(node)) {
59
+ selectedNodes.push(node);
60
+ }
61
+ });
62
+ return selectedNodes;
71
63
  }
72
64
  _isNodeSelected(node) {
73
65
  if (node.id != null) {
74
66
  return this._selectedNodes.has(node.id);
75
- } else if (this._selectedSingleNode) {
76
- return this._selectedSingleNode === node;
77
- } else {
78
- return false;
79
67
  }
68
+ return this._selectedSingleNode ? this._selectedSingleNode === node : false;
80
69
  }
81
70
  _removeFromSelection(node, includeChildren = false) {
82
71
  if (node.id == null) {
@@ -113,7 +102,7 @@ class SelectNodeHandler {
113
102
  };
114
103
  let selectOptions = {
115
104
  ...defaultOptions,
116
- ...(optionsParam ?? {})
105
+ ...optionsParam
117
106
  };
118
107
  let canSelect = () => {
119
108
  if (!this._getSelectable()) {
@@ -149,6 +138,7 @@ class SelectNodeHandler {
149
138
  node
150
139
  });
151
140
  }
141
+ this._updateTabStop();
152
142
  this._saveState();
153
143
  }
154
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"selectNodeHandler.js","sources":["../src/selectNodeHandler.ts"],"sourcesContent":["import type {\n GetNodeById,\n GetNodeElementForNode,\n OpenParents,\n TriggerEvent,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnCanSelectNode } from \"./options\";\n\nexport interface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n getNodeElementForNode: GetNodeElementForNode;\n getOnCanSelectNode: () => OnCanSelectNode | undefined;\n getSelectable: () => boolean;\n openParents: OpenParents;\n saveState: () => void;\n triggerEvent: TriggerEvent;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private getNodeElementForNode: GetNodeElementForNode;\n private getOnCanSelectNode: () => OnCanSelectNode | undefined;\n private getSelectable: () => boolean;\n private openParents: OpenParents;\n private saveState: () => void;\n private selectedNodes: Set<NodeId>;\n private selectedSingleNode: Node | null;\n private triggerEvent: TriggerEvent;\n\n constructor({\n getNodeById,\n getNodeElementForNode,\n getOnCanSelectNode,\n getSelectable,\n openParents,\n saveState,\n triggerEvent,\n }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getOnCanSelectNode = getOnCanSelectNode;\n this.getSelectable = getSelectable;\n this.openParents = openParents;\n this.saveState = saveState;\n this.selectedNodes = new Set<NodeId>();\n this.selectedSingleNode = null;\n this.triggerEvent = triggerEvent;\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): Node | null {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode === node;\n } else {\n return false;\n }\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (this.selectedSingleNode === node) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n\n /* Select a single node.\n * Renders the changed elements.\n * Deselects if the node is currently selected (if the mustToggle is on).\n * Deselects the previously selected node.\n * Check if the node is selectable.\n * Saves the state.\n * Options:\n * mustSetFocus: set the focus to the selected node\n * mustToggle: support deselecting the selected node\n */\n public selectSingleNode(node: Node, optionsParam?: SelectNodeOptions) {\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) };\n\n const canSelect = (): boolean => {\n if (!this.getSelectable()) {\n return false;\n }\n\n const onCanSelectNode = this.getOnCanSelectNode();\n return onCanSelectNode ? onCanSelectNode(node) : true;\n };\n\n if (!canSelect()) {\n return;\n }\n\n const deselectCurrentNode = (deselectedNode: Node) => {\n this.removeFromSelection(deselectedNode);\n this.getNodeElementForNode(deselectedNode).deselect();\n };\n\n if (this.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n deselectCurrentNode(node);\n this.triggerEvent(\"tree.deselect\", { node });\n }\n } else {\n const deselectedNode = this.getSelectedNode();\n\n if (deselectedNode) {\n deselectCurrentNode(deselectedNode);\n }\n\n this.addToSelection(node);\n this.openParents(node);\n this.getNodeElementForNode(node).select(selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselectedNode,\n node,\n });\n }\n\n this.saveState();\n }\n}\n"],"names":["getNodeById","getNodeElementForNode","getOnCanSelectNode","getSelectable","openParents","saveState","selectedNodes","selectedSingleNode","triggerEvent","addToSelection","clear","getSelectedNode","getSelectedNodes","getSelectedNodesUnder","isNodeSelected","removeFromSelection","selectSingleNode","deselect","select"],"mappings":"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"}
1
+ {"version":3,"file":"selectNodeHandler.js","sources":["../src/selectNodeHandler.ts"],"sourcesContent":["import type {\n GetNodeById,\n GetNodeElementForNode,\n OpenParents,\n TriggerEvent,\n} from \"./methodTypes\";\nimport type { Node, NodeId } from \"./node\";\nimport type { OnCanSelectNode } from \"./options\";\n\nexport interface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n getNodeElementForNode: GetNodeElementForNode;\n getOnCanSelectNode: () => OnCanSelectNode | undefined;\n getSelectable: () => boolean;\n openParents: OpenParents;\n saveState: () => void;\n triggerEvent: TriggerEvent;\n updateTabStop: () => void;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private getNodeElementForNode: GetNodeElementForNode;\n private getOnCanSelectNode: () => OnCanSelectNode | undefined;\n private getSelectable: () => boolean;\n private openParents: OpenParents;\n private saveState: () => void;\n private selectedNodes: Set<NodeId>;\n private selectedSingleNode: Node | null;\n private triggerEvent: TriggerEvent;\n private updateTabStop: () => void;\n\n constructor({\n getNodeById,\n getNodeElementForNode,\n getOnCanSelectNode,\n getSelectable,\n openParents,\n saveState,\n triggerEvent,\n updateTabStop,\n }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getOnCanSelectNode = getOnCanSelectNode;\n this.getSelectable = getSelectable;\n this.openParents = openParents;\n this.saveState = saveState;\n this.selectedNodes = new Set<NodeId>();\n this.selectedSingleNode = null;\n this.triggerEvent = triggerEvent;\n this.updateTabStop = updateTabStop;\n }\n\n public addToSelection(node: Node): void {\n if (node.id == null) {\n this.selectedSingleNode = node;\n } else {\n this.selectedNodes.add(node.id);\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): Node | null {\n const selectedNodes = this.getSelectedNodes();\n\n return selectedNodes.length ? (selectedNodes[0] ?? null) : null;\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n }\n\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n return parent.isParentOf(this.selectedSingleNode)\n ? [this.selectedSingleNode]\n : [];\n }\n\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n }\n return this.selectedSingleNode ? this.selectedSingleNode === node : false;\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (this.selectedSingleNode === node) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n\n /* Select a single node.\n * Renders the changed elements.\n * Deselects if the node is currently selected (if the mustToggle is on).\n * Deselects the previously selected node.\n * Check if the node is selectable.\n * Saves the state.\n * Options:\n * mustSetFocus: set the focus to the selected node\n * mustToggle: support deselecting the selected node\n */\n public selectSingleNode(node: Node, optionsParam?: SelectNodeOptions) {\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...optionsParam };\n\n const canSelect = (): boolean => {\n if (!this.getSelectable()) {\n return false;\n }\n\n const onCanSelectNode = this.getOnCanSelectNode();\n return onCanSelectNode ? onCanSelectNode(node) : true;\n };\n\n if (!canSelect()) {\n return;\n }\n\n const deselectCurrentNode = (deselectedNode: Node) => {\n this.removeFromSelection(deselectedNode);\n this.getNodeElementForNode(deselectedNode).deselect();\n };\n\n if (this.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n deselectCurrentNode(node);\n this.triggerEvent(\"tree.deselect\", { node });\n }\n } else {\n const deselectedNode = this.getSelectedNode();\n\n if (deselectedNode) {\n deselectCurrentNode(deselectedNode);\n }\n\n this.addToSelection(node);\n this.openParents(node);\n this.getNodeElementForNode(node).select(selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselectedNode,\n node,\n });\n }\n\n this.updateTabStop();\n this.saveState();\n }\n}\n"],"names":["getNodeById","getNodeElementForNode","getOnCanSelectNode","getSelectable","openParents","saveState","selectedNodes","selectedSingleNode","triggerEvent","updateTabStop","addToSelection","clear","getSelectedNode","getSelectedNodes","getSelectedNodesUnder","isNodeSelected","removeFromSelection","selectSingleNode","deselect","select"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setDefaultOptions.d.ts","sourceRoot":"","sources":["../src/setDefaultOptions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AA6CpD,QAAA,MAAM,iBAAiB,GACrB,aAAa,WAAW,EACxB,cAAc,OAAO,CAAC,kBAAkB,CAAC,KACxC,kBASF,CAAC;AAwBF,eAAe,iBAAiB,CAAC"}
1
+ {"version":3,"file":"setDefaultOptions.d.ts","sourceRoot":"","sources":["../src/setDefaultOptions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AA6CpD,QAAA,MAAM,iBAAiB,GACrB,aAAa,WAAW,EACxB,cAAc,OAAO,CAAC,kBAAkB,CAAC,KACxC,kBAaF,CAAC;AA4BF,eAAe,iBAAiB,CAAC"}
@@ -10,7 +10,7 @@ let defaults = {
10
10
  classPrefix: DEFAULT_CLASS_PREFIX,
11
11
  // the prefix of all css classes
12
12
  // The symbol to use for a closed node - ► BLACK RIGHT-POINTING POINTER
13
- // http://www.fileformat.info/info/unicode/char/25ba/index.htm
13
+ // https://www.fileformat.info/info/unicode/char/25ba/index.htm
14
14
  // closedIcon: undefined,
15
15
  // commonClassName: undefined, // the class of every element; the default is "<classPrefix>-common"
16
16
  // data: undefined,
@@ -32,7 +32,7 @@ let defaults = {
32
32
  openFolderDelay: 500,
33
33
  // The delay for opening a folder during drag and drop; the value is in milliseconds
34
34
  // The symbol to use for an open node - ▼ BLACK DOWN-POINTING TRIANGLE
35
- // http://www.fileformat.info/info/unicode/char/25bc/index.htm
35
+ // https://www.fileformat.info/info/unicode/char/25bc/index.htm
36
36
  // rtl: undefined, // right-to-left support; true / false (default)
37
37
  saveState: false,
38
38
  // true / false / string (local storage key; the default key is "tree")
@@ -49,7 +49,8 @@ let defaults = {
49
49
  let setDefaultOptions = (htmlElement, inputOptions) => {
50
50
  let options = {
51
51
  ...defaults,
52
- ...inputOptions
52
+ ...inputOptions,
53
+ animationSpeed: inputOptions.animationSpeed ?? getDefaultAnimationSpeed()
53
54
  };
54
55
  options.dataUrl ??= htmlElement.dataset.url;
55
56
  options.rtl ??= getRtlOptionFromHTMLElement(htmlElement);
@@ -57,24 +58,24 @@ let setDefaultOptions = (htmlElement, inputOptions) => {
57
58
  options.openedIcon ??= "&#x25bc;";
58
59
  return options;
59
60
  };
61
+
62
+ // No animation when the user asked the system for reduced motion
63
+ let getDefaultAnimationSpeed = () => prefersReducedMotion() ? 0 : defaults.animationSpeed;
64
+ let prefersReducedMotion = () => typeof window.matchMedia === "function" && window.matchMedia("(prefers-reduced-motion: reduce)").matches;
60
65
  let getDefaultClosedIcon = options => {
61
66
  if (options.rtl) {
62
67
  // triangle to the left
63
68
  return "&#x25c0;";
64
- } else {
65
- // triangle to the right
66
- return "&#x25ba;";
67
69
  }
70
+ // triangle to the right
71
+ return "&#x25ba;";
68
72
  };
69
73
  let getRtlOptionFromHTMLElement = htmlElement => {
70
74
  let dataRtl = htmlElement.dataset.rtl;
71
75
  if (dataRtl == "") {
72
76
  return true;
73
- } else if (dataRtl === "false") {
74
- return false;
75
- } else {
76
- return Boolean(dataRtl);
77
77
  }
78
+ return dataRtl === "false" ? false : Boolean(dataRtl);
78
79
  };
79
80
 
80
81
  export { setDefaultOptions as default };
@@ -1 +1 @@
1
- {"version":3,"file":"setDefaultOptions.js","sources":["../src/setDefaultOptions.ts"],"sourcesContent":["import type { TreeElementOptions } from \"./options\";\n\nimport { DEFAULT_CLASS_PREFIX } from \"./classNames\";\nimport { Node } from \"./node\";\n\nconst defaults: TreeElementOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n classPrefix: DEFAULT_CLASS_PREFIX, // the prefix of all css classes\n // The symbol to use for a closed node - ► BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n // closedIcon: undefined,\n // commonClassName: undefined, // the class of every element; the default is \"<classPrefix>-common\"\n // data: undefined,\n // dataFilter: undefined,\n // dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n // onCanMove: undefined, // Can this node be moved?\n // onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n // onCanSelectNode: undefined,\n // onCreateLi: undefined,\n // onDragMove: undefined,\n // onDragStop: undefined,\n // onGetStateFromStorage: undefined,\n // onIsMoveHandle: undefined,\n // onSetStateFromStorage: undefined,\n // openedIcon: undefined,\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - ▼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n // rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (local storage key; the default key is \"tree\")\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n // treeClassName: undefined, // the class of the root element; the default is classPrefix\n useContextMenu: true,\n};\n\nconst setDefaultOptions = (\n htmlElement: HTMLElement,\n inputOptions: Partial<TreeElementOptions>,\n): TreeElementOptions => {\n const options = { ...defaults, ...inputOptions };\n\n options.dataUrl ??= htmlElement.dataset.url;\n options.rtl ??= getRtlOptionFromHTMLElement(htmlElement);\n options.closedIcon ??= getDefaultClosedIcon(options);\n options.openedIcon ??= \"&#x25bc;\";\n\n return options;\n};\n\nconst getDefaultClosedIcon = (options: TreeElementOptions): string => {\n if (options.rtl) {\n // triangle to the left\n return \"&#x25c0;\";\n } else {\n // triangle to the right\n return \"&#x25ba;\";\n }\n};\n\nconst getRtlOptionFromHTMLElement = (htmlElement: HTMLElement): boolean => {\n const dataRtl = htmlElement.dataset.rtl;\n\n if (dataRtl == \"\") {\n return true;\n } else if (dataRtl === \"false\") {\n return false;\n } else {\n return Boolean(dataRtl);\n }\n};\n\nexport default setDefaultOptions;\n"],"names":[],"mappings":";;;AAKA,IAAM,QAA4B,GAAG;AACnC,EAAA,cAAc,EAAE,MAAM;AACtB,EAAA,UAAU,EAAE,IAAI;AAChB,EAAA,QAAQ,EAAE,KAAK;AAAE;AACjB,EAAA,UAAU,EAAE,IAAI;AAChB,EAAA,WAAW,EAAE,oBAAoB;AAAE;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,WAAW,EAAE,KAAK;AAClB,EAAA,eAAe,EAAE,IAAI;AACrB,EAAA,SAAS,EAAE,IAAI;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,eAAe,EAAE,GAAG;AAAE;AACtB;AACA;AACA;AACA,EAAA,SAAS,EAAE,KAAK;AAAE;AAClB,EAAA,UAAU,EAAE,IAAI;AAChB,EAAA,eAAe,EAAE,KAAK;AACtB,EAAA,KAAK,EAAE,IAAI;AAAE;AACb,EAAA,aAAa,EAAE,GAAG;AAAE;AACpB,EAAA,QAAQ,EAAE,CAAC;AACX;AACA,EAAA,cAAc,EAAE;AAClB,CAAC;AAED,IAAM,iBAAiB,GAAG,CACxB,WAAwB,EACxB,YAAyC,KAClB;AACvB,EAAA,IAAM,OAAO,GAAG;AAAE,IAAA,GAAG,QAAQ;IAAE,GAAG;GAAc;AAEhD,EAAA,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC,OAAO,CAAC,GAAG;AAC3C,EAAA,OAAO,CAAC,GAAG,KAAK,2BAA2B,CAAC,WAAW,CAAC;AACxD,EAAA,OAAO,CAAC,UAAU,KAAK,oBAAoB,CAAC,OAAO,CAAC;EACpD,OAAO,CAAC,UAAU,KAAK,UAAU;AAEjC,EAAA,OAAO,OAAO;AAChB;AAEA,IAAM,oBAAoB,GAAI,OAA2B,IAAa;EACpE,IAAI,OAAO,CAAC,GAAG,EAAE;AACf;AACA,IAAA,OAAO,UAAU;AACnB,EAAA,CAAC,MAAM;AACL;AACA,IAAA,OAAO,UAAU;AACnB,EAAA;AACF,CAAC;AAED,IAAM,2BAA2B,GAAI,WAAwB,IAAc;AACzE,EAAA,IAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG;EAEvC,IAAI,OAAO,IAAI,EAAE,EAAE;AACjB,IAAA,OAAO,IAAI;AACb,EAAA,CAAC,MAAM,IAAI,OAAO,KAAK,OAAO,EAAE;AAC9B,IAAA,OAAO,KAAK;AACd,EAAA,CAAC,MAAM;IACL,OAAO,OAAO,CAAC,OAAO,CAAC;AACzB,EAAA;AACF,CAAC;;"}
1
+ {"version":3,"file":"setDefaultOptions.js","sources":["../src/setDefaultOptions.ts"],"sourcesContent":["import type { AnimationSpeed } from \"./animation\";\nimport type { TreeElementOptions } from \"./options\";\n\nimport { DEFAULT_CLASS_PREFIX } from \"./classNames\";\nimport { Node } from \"./node\";\n\nconst defaults: TreeElementOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n classPrefix: DEFAULT_CLASS_PREFIX, // the prefix of all css classes\n // The symbol to use for a closed node - ► BLACK RIGHT-POINTING POINTER\n // https://www.fileformat.info/info/unicode/char/25ba/index.htm\n // closedIcon: undefined,\n // commonClassName: undefined, // the class of every element; the default is \"<classPrefix>-common\"\n // data: undefined,\n // dataFilter: undefined,\n // dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n // onCanMove: undefined, // Can this node be moved?\n // onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n // onCanSelectNode: undefined,\n // onCreateLi: undefined,\n // onDragMove: undefined,\n // onDragStop: undefined,\n // onGetStateFromStorage: undefined,\n // onIsMoveHandle: undefined,\n // onSetStateFromStorage: undefined,\n // openedIcon: undefined,\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - ▼ BLACK DOWN-POINTING TRIANGLE\n // https://www.fileformat.info/info/unicode/char/25bc/index.htm\n // rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (local storage key; the default key is \"tree\")\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n // treeClassName: undefined, // the class of the root element; the default is classPrefix\n useContextMenu: true,\n};\n\nconst setDefaultOptions = (\n htmlElement: HTMLElement,\n inputOptions: Partial<TreeElementOptions>,\n): TreeElementOptions => {\n const options = {\n ...defaults,\n ...inputOptions,\n animationSpeed: inputOptions.animationSpeed ?? getDefaultAnimationSpeed(),\n };\n\n options.dataUrl ??= htmlElement.dataset.url;\n options.rtl ??= getRtlOptionFromHTMLElement(htmlElement);\n options.closedIcon ??= getDefaultClosedIcon(options);\n options.openedIcon ??= \"&#x25bc;\";\n\n return options;\n};\n\n// No animation when the user asked the system for reduced motion\nconst getDefaultAnimationSpeed = (): AnimationSpeed =>\n prefersReducedMotion() ? 0 : defaults.animationSpeed;\n\nconst prefersReducedMotion = (): boolean =>\n typeof window.matchMedia === \"function\" &&\n window.matchMedia(\"(prefers-reduced-motion: reduce)\").matches;\n\nconst getDefaultClosedIcon = (options: TreeElementOptions): string => {\n if (options.rtl) {\n // triangle to the left\n return \"&#x25c0;\";\n }\n // triangle to the right\n return \"&#x25ba;\";\n};\n\nconst getRtlOptionFromHTMLElement = (htmlElement: HTMLElement): boolean => {\n const dataRtl = htmlElement.dataset.rtl;\n\n if (dataRtl == \"\") {\n return true;\n }\n return dataRtl === \"false\" ? false : Boolean(dataRtl);\n};\n\nexport default setDefaultOptions;\n"],"names":[],"mappings":";;;AAMA,IAAM,QAA4B,GAAG;AACnC,EAAA,cAAc,EAAE,MAAM;AACtB,EAAA,UAAU,EAAE,IAAI;AAChB,EAAA,QAAQ,EAAE,KAAK;AAAE;AACjB,EAAA,UAAU,EAAE,IAAI;AAChB,EAAA,WAAW,EAAE,oBAAoB;AAAE;AACnC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,WAAW,EAAE,KAAK;AAClB,EAAA,eAAe,EAAE,IAAI;AACrB,EAAA,SAAS,EAAE,IAAI;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAA,eAAe,EAAE,GAAG;AAAE;AACtB;AACA;AACA;AACA,EAAA,SAAS,EAAE,KAAK;AAAE;AAClB,EAAA,UAAU,EAAE,IAAI;AAChB,EAAA,eAAe,EAAE,KAAK;AACtB,EAAA,KAAK,EAAE,IAAI;AAAE;AACb,EAAA,aAAa,EAAE,GAAG;AAAE;AACpB,EAAA,QAAQ,EAAE,CAAC;AACX;AACA,EAAA,cAAc,EAAE;AAClB,CAAC;AAED,IAAM,iBAAiB,GAAG,CACxB,WAAwB,EACxB,YAAyC,KAClB;AACvB,EAAA,IAAM,OAAO,GAAG;AACd,IAAA,GAAG,QAAQ;AACX,IAAA,GAAG,YAAY;AACf,IAAA,cAAc,EAAE,YAAY,CAAC,cAAc,IAAI,wBAAwB;GACxE;AAED,EAAA,OAAO,CAAC,OAAO,KAAK,WAAW,CAAC,OAAO,CAAC,GAAG;AAC3C,EAAA,OAAO,CAAC,GAAG,KAAK,2BAA2B,CAAC,WAAW,CAAC;AACxD,EAAA,OAAO,CAAC,UAAU,KAAK,oBAAoB,CAAC,OAAO,CAAC;EACpD,OAAO,CAAC,UAAU,KAAK,UAAU;AAEjC,EAAA,OAAO,OAAO;AAChB;;AAEA;AACA,IAAM,wBAAwB,GAAG,MAC/B,oBAAoB,EAAE,GAAG,CAAC,GAAG,QAAQ,CAAC,cAAc;AAEtD,IAAM,oBAAoB,GAAG,MAC3B,OAAO,MAAM,CAAC,UAAU,KAAK,UAAU,IACvC,MAAM,CAAC,UAAU,CAAC,kCAAkC,CAAC,CAAC,OAAO;AAE/D,IAAM,oBAAoB,GAAI,OAA2B,IAAa;EACpE,IAAI,OAAO,CAAC,GAAG,EAAE;AACf;AACA,IAAA,OAAO,UAAU;AACnB,EAAA;AACA;AACA,EAAA,OAAO,UAAU;AACnB,CAAC;AAED,IAAM,2BAA2B,GAAI,WAAwB,IAAc;AACzE,EAAA,IAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG;EAEvC,IAAI,OAAO,IAAI,EAAE,EAAE;AACjB,IAAA,OAAO,IAAI;AACb,EAAA;EACA,OAAO,OAAO,KAAK,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;AACvD,CAAC;;"}
package/lib/util.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,GAAI,GAAG,OAAO,KAAG,OACG,CAAC;AAEvC,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,MACrB,CAAC"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,KAAK,GAAI,GAAG,OAAO,KAAG,OAA8B,CAAC;AAElE,eAAO,MAAM,aAAa,GAAI,OAAO,OAAO,KAAG,MACrB,CAAC"}
package/lib/util.js CHANGED
@@ -1,4 +1,4 @@
1
- let isInt = n => typeof n === "number" && n % 1 === 0;
1
+ let isInt = n => Number.isInteger(n);
2
2
  let getBoolString = value => value ? "true" : "false";
3
3
 
4
4
  export { getBoolString, isInt };
package/lib/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sources":["../src/util.ts"],"sourcesContent":["export const isInt = (n: unknown): boolean =>\n typeof n === \"number\" && n % 1 === 0;\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n"],"names":[],"mappings":"AAAO,IAAM,KAAK,GAAI,CAAU,IAC9B,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,GAAG,CAAC,KAAK;AAE9B,IAAM,aAAa,GAAI,KAAc,IAC1C,KAAK,GAAG,MAAM,GAAG;;"}
1
+ {"version":3,"file":"util.js","sources":["../src/util.ts"],"sourcesContent":["export const isInt = (n: unknown): boolean => Number.isInteger(n);\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n"],"names":[],"mappings":"AAAO,IAAM,KAAK,GAAI,CAAU,IAAc,MAAM,CAAC,SAAS,CAAC,CAAC;AAEzD,IAAM,aAAa,GAAI,KAAc,IAC1C,KAAK,GAAG,MAAM,GAAG;;"}