Created more components
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
namespace Htmx.ApiDemo.Templates.Components;
|
||||
|
||||
/// <summary>
|
||||
/// shadcn-style Card component with optional header (title + description) and footer.
|
||||
/// </summary>
|
||||
public sealed class Card : CardBase
|
||||
{
|
||||
private readonly byte[] _extraClassesData;
|
||||
private readonly byte[] _headerData;
|
||||
private readonly byte[] _contentData;
|
||||
private readonly byte[] _footerData;
|
||||
|
||||
public Card(
|
||||
string content,
|
||||
string title = "",
|
||||
string description = "",
|
||||
string footer = "",
|
||||
string extraClasses = "")
|
||||
{
|
||||
_extraClassesData = extraClasses.ToUtf8Bytes();
|
||||
_contentData = content.ToUtf8Bytes();
|
||||
|
||||
_headerData = (string.IsNullOrEmpty(title) && string.IsNullOrEmpty(description))
|
||||
? []
|
||||
: BuildHeader(title, description);
|
||||
|
||||
_footerData = string.IsNullOrEmpty(footer)
|
||||
? []
|
||||
: $"""<div class="flex items-center p-6 pt-0">{footer}</div>""".ToUtf8Bytes();
|
||||
}
|
||||
|
||||
private static byte[] BuildHeader(string title, string description)
|
||||
{
|
||||
var sb = new System.Text.StringBuilder();
|
||||
sb.Append("""<div class="flex flex-col space-y-1.5 p-6">""");
|
||||
if (!string.IsNullOrEmpty(title))
|
||||
sb.Append($"""<h3 class="text-2xl font-semibold leading-none tracking-tight">{title}</h3>""");
|
||||
if (!string.IsNullOrEmpty(description))
|
||||
sb.Append($"""<p class="text-sm text-muted-foreground">{description}</p>""");
|
||||
sb.Append("</div>");
|
||||
return sb.ToString().ToUtf8Bytes();
|
||||
}
|
||||
|
||||
protected override void RenderExtraClasses(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_extraClassesData);
|
||||
protected override void RenderHeader(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_headerData);
|
||||
protected override void RenderContent(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_contentData);
|
||||
protected override void RenderFooter(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_footerData);
|
||||
}
|
||||
Reference in New Issue
Block a user