namespace Htmx.ApiDemo.Templates.Components; /// /// shadcn-style Table component. /// Headers: column header strings. /// Rows: each row is an IEnumerable of cell strings. /// Caption and Footer are optional. /// public sealed class Table : TableBase { private readonly byte[] _captionData; private readonly byte[] _headersData; private readonly byte[] _rowsData; private readonly byte[] _footerData; public Table( IEnumerable headers, IEnumerable> rows, string caption = "", string footer = "") { _captionData = string.IsNullOrEmpty(caption) ? [] : $"""{caption}""".ToUtf8Bytes(); var hSb = new System.Text.StringBuilder(); foreach (var h in headers) hSb.Append($"""{h}"""); _headersData = hSb.ToString().ToUtf8Bytes(); var rSb = new System.Text.StringBuilder(); foreach (var row in rows) { rSb.Append(""""""); foreach (var cell in row) rSb.Append($"""{cell}"""); rSb.Append(""); } _rowsData = rSb.ToString().ToUtf8Bytes(); _footerData = string.IsNullOrEmpty(footer) ? [] : $"""{footer}""".ToUtf8Bytes(); } protected override void RenderCaption(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_captionData); protected override void RenderHeaders(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_headersData); protected override void RenderRows(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_rowsData); protected override void RenderFooter(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_footerData); }