Code/UI/NodePickRoot.cs
namespace Nodebox.UI;

[Title("Nodebox Node Pick Root")]
public sealed class NodePickRoot : PanelComponent, IGraphStyle {
    [Property]
    public GraphStyle GraphStyle { get; set; }

    [JsonIgnore]
    [Change(nameof(OnCollectionChange))]
    public Node.Collection Collection { get; set; } = null;
    [JsonIgnore]
    public NodePick NodePick { get; private set; } = null;



    protected override void OnTreeFirstBuilt() {
        base.OnTreeFirstBuilt();
        Recreate();
    }

    private void Recreate() {
        if (!Panel.IsValid()) { return; }
        NodePick = new();
        NodePick.Parent = Panel;
        NodePick.Collection = Collection;
        NodePick.NodeSelected += (type) => NodeSelected?.Invoke(type);
        NodePick.Focus();
    }

    public Action<SerializableType> NodeSelected { get; set; }

    private void OnCollectionChange() {
        NodePick?.Collection = Collection;
    }

    protected override void OnEnabled() {
        base.OnEnabled();
        NodePick?.TextEntryRef?.Focus();
    }

    protected override void OnDisabled() {
        base.OnDisabled();
        Panel.Blur();
    }

    protected override void OnMouseDown(MousePanelEvent e) {
        base.OnMouseDown(e);
        e.StopPropagation();
        if (e.Target == Panel) {
            Enabled = false;
        }
    }

    // protected override int BuildHash() => HashCode.Combine(
    // 	// GraphStyle,
    // );
}