namespace Htmx.ApiDemo.Templates.Components; /// /// shadcn-style Calendar (date-picker) component driven entirely by HyperScript. /// Pass a selected date to pre-highlight a day; defaults to today. /// public sealed class Calendar : CalendarBase { private readonly byte[] _idData; private readonly byte[] _nameData; private readonly byte[] _yearData; private readonly byte[] _monthData; // 0-based JS month private readonly byte[] _selectedDayData; private readonly byte[] _selectedMonthData; // 0-based private readonly byte[] _selectedYearData; private readonly byte[] _defaultValueData; public Calendar( string id, string name = "date", DateOnly? selected = null) { var date = selected ?? DateOnly.FromDateTime(DateTime.Today); _idData = id.ToUtf8Bytes(); _nameData = name.ToUtf8Bytes(); _yearData = date.Year.ToString().ToUtf8Bytes(); _monthData = (date.Month - 1).ToString().ToUtf8Bytes(); // JS months are 0-based _selectedDayData = date.Day.ToString().ToUtf8Bytes(); _selectedMonthData= (date.Month - 1).ToString().ToUtf8Bytes(); _selectedYearData = date.Year.ToString().ToUtf8Bytes(); _defaultValueData = date.ToString("yyyy-MM-dd").ToUtf8Bytes(); } protected override void RenderId(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_idData); protected override void RenderName(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_nameData); protected override void RenderYear(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_yearData); protected override void RenderMonth(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_monthData); protected override void RenderSelectedDay(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_selectedDayData); protected override void RenderSelectedMonth(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_selectedMonthData); protected override void RenderSelectedYear(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_selectedYearData); protected override void RenderDefaultValue(HtmxRenderContext ctx) => ctx.Writer.WriteUtf8(_defaultValueData); }