in packages/core/src/models/Selection.ts [118:147]
crossAddTo(node: TreeNode) {
if (node.parent) {
const selectedNodes = this.selectedNodes
if (this.has(node)) {
this.remove(node)
} else {
const minDistanceNode = selectedNodes.reduce(
(minDistanceNode, item) => {
return item.distanceTo(node) < minDistanceNode.distanceTo(node)
? item
: minDistanceNode
},
selectedNodes[0]
)
if (minDistanceNode) {
const crossNodes = node.crossSiblings(minDistanceNode)
crossNodes.forEach((node) => {
if (!this.has(node.id)) {
this.selected.push(node.id)
this.indexes[node.id] = true
}
})
}
if (!this.has(node.id)) {
this.selected.push(node.id)
this.indexes[node.id] = true
}
}
}
}