void OnMouseDown(MouseDownEvent evt)
        {
            if (s_CurrentlyActiveBuilderDragger != null && s_CurrentlyActiveBuilderDragger != this)
            {
                return;
            }

            var target = evt.currentTarget as VisualElement;

            if (m_WeStartedTheDrag && target.HasMouseCapture())
            {
                evt.StopImmediatePropagation();
                evt.PreventDefault();
                return;
            }

            if (!CanStartManipulation(evt))
            {
                return;
            }

            var stopEvent = StopEventOnMouseDown(evt);

            if (stopEvent)
            {
                evt.StopImmediatePropagation();
            }

            if (target.HasMouseCapture())
            {
                if (!stopEvent)
                {
                    evt.StopImmediatePropagation();
                }

                return;
            }

            s_CurrentlyActiveBuilderDragger = this;
            m_Start            = evt.mousePosition;
            m_WeStartedTheDrag = true;
            target.CaptureMouse();
        }
        void OnMouseUp(MouseUpEvent evt)
        {
            if (evt.button != (int)MouseButton.LeftMouse)
            {
                evt.StopPropagation();
                evt.PreventDefault();

                return;
            }

            var target = evt.currentTarget as VisualElement;

            if (!CanStopManipulation(evt))
            {
                return;
            }

            target.ReleaseMouse();
            s_CurrentlyActiveBuilderDragger = null;
            m_WeStartedTheDrag = false;

            if (!m_Active)
            {
                SelectItemOnSingleClick(evt);
                return;
            }

            if (m_Active)
            {
                var currentMouse = evt.mousePosition;
                if (m_LastHoverElement != null)
                {
                    var localCanvasMouse = viewport != null?m_Canvas.WorldToLocal(currentMouse) : Vector2.zero;

                    var localHierarchyMouse = builderHierarchyRoot != null?builderHierarchyRoot.WorldToLocal(currentMouse) : Vector2.zero;

                    if (viewport != null && m_Canvas.ContainsPoint(localCanvasMouse))
                    {
                        PerformAction(m_LastHoverElement, DestinationPane.Viewport, localCanvasMouse, m_LastHoverElementChildIndex);
                    }
                    else if (builderHierarchyRoot != null && builderHierarchyRoot.ContainsPoint(localHierarchyMouse))
                    {
                        VisualElement newParent;
                        int           index;
                        GetPickedElementFromHoverElement(out newParent, out index);

                        PerformAction(newParent, DestinationPane.Hierarchy, localHierarchyMouse, index);
                    }
                }

                m_Active = false;
            }
            else
            {
                FailAction(target);
            }

            evt.StopPropagation();

            EndDragInner();
        }