44 lines
2.2 KiB
C#
44 lines
2.2 KiB
C#
namespace Htmx.ApiDemo.Templates.Components;
|
|
|
|
/// <summary>
|
|
/// shadcn-style Calendar (date-picker) component driven entirely by HyperScript.
|
|
/// Pass a selected date to pre-highlight a day; defaults to today.
|
|
/// </summary>
|
|
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);
|
|
}
|