52 lines
2.4 KiB
C#
52 lines
2.4 KiB
C#
namespace Htmx.ApiDemo.Templates.Components;
|
|
|
|
/// <summary>
|
|
/// shadcn-style FileInput component with optional label and description.
|
|
/// </summary>
|
|
public sealed class FileInput : FileInputBase
|
|
{
|
|
private readonly byte[] _idData;
|
|
private readonly byte[] _nameData;
|
|
private readonly byte[] _acceptData;
|
|
private readonly byte[] _multipleData;
|
|
private readonly byte[] _labelData;
|
|
private readonly byte[] _descriptionData;
|
|
private readonly byte[] _extraClassesData;
|
|
private readonly byte[] _hxAttrsData;
|
|
|
|
public FileInput(
|
|
string id,
|
|
string name = "",
|
|
string accept = "",
|
|
bool multiple = false,
|
|
string label = "",
|
|
string description = "",
|
|
string extraClasses = "",
|
|
string hxAttrs = "")
|
|
{
|
|
_idData = id.ToUtf8Bytes();
|
|
_nameData = (string.IsNullOrEmpty(name) ? id : name).ToUtf8Bytes();
|
|
_acceptData = string.IsNullOrEmpty(accept) ? [] : $"""accept="{accept}" """.ToUtf8Bytes();
|
|
_multipleData = multiple ? "multiple".ToUtf8Bytes() : [];
|
|
_extraClassesData = extraClasses.ToUtf8Bytes();
|
|
_hxAttrsData = hxAttrs.ToUtf8Bytes();
|
|
|
|
_labelData = string.IsNullOrEmpty(label)
|
|
? []
|
|
: $"""<label for="{id}" class="text-sm font-medium leading-none">{label}</label>""".ToUtf8Bytes();
|
|
|
|
_descriptionData = string.IsNullOrEmpty(description)
|
|
? []
|
|
: $"""<p class="text-xs text-muted-foreground">{description}</p>""".ToUtf8Bytes();
|
|
}
|
|
|
|
protected override void RenderId(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_idData);
|
|
protected override void RenderName(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_nameData);
|
|
protected override void RenderAccept(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_acceptData);
|
|
protected override void RenderMultiple(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_multipleData);
|
|
protected override void RenderLabel(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_labelData);
|
|
protected override void RenderDescription(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_descriptionData);
|
|
protected override void RenderExtraClasses(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_extraClassesData);
|
|
protected override void RenderHxAttrs(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_hxAttrsData);
|
|
}
|