How to setup a component state machine like custom editor?

I am a noob and very lost when it comes to custom editors.
I have a state machine like component system set up which is built upon basically 1 component
Click for component code

using UnityEngine;

namespace StateBehavior
{
    public class Transition : Doable
    {
        [SerializeField] Checkable check;
        [SerializeField] Doable ifTrueDo;
        [SerializeField] Doable ifFalseDo;

        public override void Do()
        {
            TryTransition();
        }

        public void TryTransition()
        {
            if(check.Check())
            {
                if(ifTrueDo != null) ifTrueDo.Do();
            }else{
                if(ifFalseDo != null) ifFalseDo.Do();
            }
        }
    }
}

Basically its a component based if statement. The problem is, in the inspector it looks like this…
Click for image

I have no clue as to what references what (when double clicking the references, it only highlights the GameObject). Its just very messy, which brings me to wanting a custom editor/inspector.

What I am looking for is something more or less like this
Click for image

I want to be able to place transitions, then place the desired components into the transition slots while being able to edit them by clicking a button and opening a window of the component or even just highlighting the component somewhere.
We can either detect that a Transition component was placed and show its properties right there (as shown in the image), or require to press the edit button to see the properties and assign to them. I dont really care, which ever is easier to make tbh.

While it would be great to just have someone write the code all up for me ^_~, what I am asking for is mainly what methods/classes do I go about using to create this? How do I have the component show up in a new window? How do I drag a monobehavior script from the scripts folder directly to the component slot on this custom window and be able to edit it there? Will I have to go in and create a custom inspector type thing for every single type of component I want to use with this? How do I edit what I have and then have it properly update the gameobject components?

Any help is appreciated!

It seems to me you should actually be writing some kind of State Machine editor i.e similar to PlayMaker. There is an example right here on the forum on how to write a node editor.

You definitely want to make use of SerializedObject for your comparison and transition code with one MonoBehaviour that would take a final tree object and traverse it \ calculate it when you need to.