import { html, type TemplateResult } from '@design.estate/dees-element'; import type { DeesInputDatepicker } from './component.js'; export const renderDatepicker = (component: DeesInputDatepicker): TemplateResult => { const monthNames = [ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' ]; const weekDays = component.weekStartsOn === 1 ? ['Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa', 'Su'] : ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa']; const days = component.getDaysInMonth(); const isAM = component.selectedHour < 12; const timezones = component.getTimezones(); return html`
${component.value && !component.disabled ? html` ` : ''}
${monthNames[component.viewDate.getMonth()]} ${component.viewDate.getFullYear()}
${weekDays.map(day => html`
${day}
`)}
${days.map(day => { const isToday = component.isToday(day); const isSelected = component.isSelected(day); const isOtherMonth = day.getMonth() !== component.viewDate.getMonth(); const isDisabled = component.isDisabled(day); const dayEvents = component.getEventsForDate(day); const hasEvents = dayEvents.length > 0; const totalEventCount = dayEvents.reduce((sum, event) => sum + (event.count || 1), 0); return html`
!isDisabled && component.selectDate(day)} > ${day.getDate()} ${hasEvents ? html` ${totalEventCount > 3 ? html`
${totalEventCount}
` : html`
${dayEvents.slice(0, 3).map(event => html`
`)}
`} ${dayEvents[0].title ? html`
${dayEvents[0].title} ${totalEventCount > 1 ? html` (+${totalEventCount - 1} more)` : ''}
` : ''} ` : ''}
`; })}
${component.enableTime ? html`
Time
12 ? component.selectedHour - 12 : component.selectedHour).toString().padStart(2, '0') : component.selectedHour.toString().padStart(2, '0')} @input=${(e: InputEvent) => component.handleHourInput(e)} min="${component.timeFormat === '12h' ? 1 : 0}" max="${component.timeFormat === '12h' ? 12 : 23}" /> : component.handleMinuteInput(e)} min="0" max="59" step="${component.minuteIncrement || 1}" /> ${component.timeFormat === '12h' ? html`
` : ''}
` : ''} ${component.enableTimezone ? html`
Timezone
` : ''}
`; };