anchor.diff:      // do actual start in case we were pending before
       _pendingToDrag();
       
  -    // call the drag in callback
  -    if(dragOver != null) {
  -      dragOver(this, event.currentTarget, event);
  -    }
  +    // send over event
  +    _dragOverStreamController.add(new DragEvent(this, event.currentTarget, event));
     }
     void _mouseOutHandler(MouseEvent event) {
       // only respond to this event when the element we're going to is
  
positive.code: part of Tabasci;
  
  typedef void DragCallback(DragHandler dragHandler, Element element, MouseEvent event);
  // type of a function that determines if a drag should be allowed to start
  typedef bool AllowDragStart(DragHandler dragHandler, Element element, MouseEvent event);
  
  // TODO this should probably be a singleton. when do you drag more than one thing at a time?
  // TODO make universal enable/disable flag
  class DragHandler {
    
    /// The function to be called on mouse move when dragging
    DragCallback drag;
    
    /// The function to be called when dragging begins
    DragCallback dragStart;
    
    /// The function to be called when dragging ends
    DragCallback dragEnd;
    
    /// The function to be called when the mouse is dragged out of the original element
    DragCallback dragOut;
    
    /// The function to be called when the mouse is dragged (back) into the original element
    DragCallback dragOver;
    
    /// The function to call to determine if the drag should be allowed to start on mouse down
    AllowDragStart dragConditions;
  
negative.code:     // signal that we are no longer dragging
      _dragging = false;
      
      // TODO if elements are changed during a drag, they won't be removed either
      
      // remove callbacks
      // TODO this can just be paused
      // TODO as Element?
      _cancel("mouseMove", document);
      for(Element e in _targets) {
        _cancel("mouseOver", e);
      }
      for(Element e in _targets) {
        _cancel("mouseOut", e);
      }
      
      // send end event if we weren't just pending
      if(!_dragStartPending) {
        _dragEndStreamController.add(new DragEvent(this, _currentTarget, event));
      }
      
      // clear current target
  