Code/UI/Nodes/Basic.razor
@inherits NodePanel
@implements IGraphStyle
@namespace Nodebox.UI
<root>
<Card>
<Header>
<div class="name">@Node.Name</div>
</Header>
<Body>
<div class="right flex-column">
<div class="flex-column">@AboveInputs</div>
<div class="pin-column flex-grow" @ref=InputPinPanels>
@foreach ( var pinRef in Node.InputPinRefs )
{
<PinRefButton PinRef=@(pinRef)/>
}
</div>
<div class="flex-column">@BelowInputs</div>
</div>
<div class="center">@Center</div>
<div class="left flex-column">
<div class="flex-column">@AboveOutputs</div>
<div class="pin-column flex-column flex-grow" @ref=OutputPinPanels>
@foreach ( var pinRef in Node.OutputPinRefs )
{
<PinRefButton PinRef=@(pinRef)/>
}
</div>
<div class="flex-column">@BelowOutputs</div>
</div>
</Body>
<Footer>
<div class="groups">@TagsText</div>
</Footer>
</Card>
</root>
@code
{
public RenderFragment Center { get; set; }
public RenderFragment AboveInputs { get; set; }
public RenderFragment BelowInputs { get; set; }
public RenderFragment AboveOutputs { get; set; }
public RenderFragment BelowOutputs { get; set; }
public Panel InputPinPanels { get; protected set; }
public Panel OutputPinPanels { get; protected set; }
public override Panel GetPin(Flow flow, PinIndex pinIndex) {
var panels = flow == Flow.Input ? InputPinPanels : OutputPinPanels;
var pinRefButton = (PinRefButton)panels?.Children?.ElementAtOrDefault(pinIndex);
return pinRefButton?.PinButton;
}
public string TagsText => string.Join(", ", (Node?.Tags ?? []).Select(x => x.CapitalizeFirstLetter())) ?? "???";
protected override int BuildHash() => HashCode.Combine(Node, Node.Generation);
}