     let results = document.concepts.filter { (concept) -> Bool in
       return concept.rect.contains(clickedPoint)
     }
+    guard results.count > 0 else { return nil }
+    return results
+  }
+  
+  func clickedElements(atPoint clickedPoint: NSPoint) -> [Element]? {
+    var results = [Element]()
+    let clickedConcepts: [Element] = document.concepts.filter { (concept) -> Bool in
+      return concept.rect.contains(clickedPoint)
+    }
+    let clickedLinks: [Element] = document.links.filter { (link) -> Bool in
+      return link.rect.contains(clickedPoint)
+    }
+    
+    results.append(contentsOf: clickedConcepts)
+    results.append(contentsOf: clickedLinks)
+    
     guard results.count > 0 else { return nil }
     return results
   }

    let point = convertToCanvasCoordinates(point: event.locationInWindow)
    
    if event.isSingleClick() {
      if let clickedConcepts = clickedConcepts(atPoint: point) {
        Swift.print("[mouseDown][singleClick] clicked concepts [\(clickedConcepts)]")
        
        if (!currentState.isSimilar(to: .multipleSelectedElements(elements: [Element]()))) {
          safeTransiton {
            try stateManager.toSelectedElement(element: clickedConcepts.first!)
          }
        }
        


protocol GraphLink {
  var color: NSColor { get }
  var isSelected: Bool { get set }
  
  var stringValue: String { get }
  var attributedStringValue: NSAttributedString { get }
