shirkasoft-ui-components 1.3.1 → 1.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/shirkasoft-ui-components-date-picker.mjs +325 -2
- package/fesm2022/shirkasoft-ui-components-date-picker.mjs.map +1 -1
- package/fesm2022/shirkasoft-ui-components-table.mjs +61 -5
- package/fesm2022/shirkasoft-ui-components-table.mjs.map +1 -1
- package/fesm2022/shirkasoft-ui-components-timeline.mjs +4 -4
- package/fesm2022/shirkasoft-ui-components-timeline.mjs.map +1 -1
- package/package.json +1 -1
- package/types/shirkasoft-ui-components-date-picker.d.ts +92 -1
- package/types/shirkasoft-ui-components-table.d.ts +16 -0
- package/types/shirkasoft-ui-components-timeline.d.ts +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shirkasoft-ui-components-date-picker.mjs","sources":["../../../projects/ui-components/date-picker/date-picker.component.ts","../../../projects/ui-components/date-picker/date-picker.component.html","../../../projects/ui-components/date-picker/shirkasoft-ui-components-date-picker.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n DestroyRef,\n HostListener,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n effect,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormGroup,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslocoService } from '@jsverse/transloco';\n\n/** Which granularity the picker edits: a day, a month or a year. */\nexport type DatePickerView = 'date' | 'month' | 'year';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Date/time picker implemented as a ControlValueAccessor. Supports choosing a\n * day, month or year, optional time selection (with seconds/12-hour format),\n * min/max constraints and locale-aware labels.\n */\n@Component({\n selector: 'shk-date-picker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './date-picker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n },\n ],\n})\nexport class DatePickerComponent implements ControlValueAccessor {\n private elementRef = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n private destroyRef = inject(DestroyRef);\n private transloco = inject(TranslocoService);\n\n /** HTML id for the input (for label/for pairing). */\n id = input<string>('');\n /** Granularity of the picker ('date' | 'month' | 'year'). */\n view = input<DatePickerView>('date');\n /** Label shown above the input. */\n label = input<string>('');\n /** Placeholder of the input. */\n placeholder = input<string>('');\n /** FormGroup used to resolve the control from `label`. */\n formGroup = input<FormGroup | undefined>(undefined);\n /** Directly bound FormControl. */\n control = input<FormControl | undefined>(undefined);\n /** Disables the picker. */\n disabled = input<boolean>(false);\n /** Custom error message displayed (overrides translated ones). */\n errorMessage = input<string>('');\n /** Per-validation-key custom error messages. */\n errorMessages = input<{ [key: string]: string }>({});\n /** Minimum allowed date (YYYY-MM-DD) or year/month string. */\n minValue = input<string>('');\n /** Maximum allowed date (YYYY-MM-DD) or year/month string. */\n maxValue = input<string>('');\n /** Locale used for month/day names and formatted labels. */\n locale = input<string>('es');\n /** Edits only the time portion of the value. */\n timeOnly = input<boolean>(false);\n /** Shows the time selectors alongside the date. */\n showTime = input<boolean>(false);\n /** Hour format: '12' or '24'. */\n hourFormat = input<'12' | '24'>('24');\n /** Whether the seconds selector is shown. */\n showSeconds = input<boolean>(false);\n /** Step (in minutes) for the minute selector. */\n minuteStep = input<number>(1);\n\n /** Whether the dropdown calendar is open. */\n isOpen = signal(false);\n /** Year currently displayed in the calendar. */\n viewYear = signal(new Date().getFullYear());\n /** Month currently displayed in the calendar (0-based). */\n viewMonth = signal(new Date().getMonth());\n /** Starting year of the decade shown in year view. */\n viewDecade = signal(Math.floor(new Date().getFullYear() / 10) * 10);\n /** Hour selected in the time selectors. */\n viewHour = signal(0);\n /** Minute selected in the time selectors. */\n viewMinute = signal(0);\n /** Second selected in the time selectors. */\n viewSecond = signal(0);\n /** Meridiem selected in 12-hour format. */\n viewMeridiem = signal<'AM' | 'PM'>('AM');\n /** Date part selected but not yet committed until the time is confirmed. */\n private pendingDate = signal<string | null>(null);\n\n /** Underlying value (mirrors the reactive control). */\n private _value = signal<string | null>(null);\n /** Disabled state coming from the reactive form infrastructure. */\n private _disabledState = signal<boolean>(false);\n /** Whether status subscriptions have been attached to the control. */\n private subscribed = signal(false);\n private valueSubscribed = signal(false);\n /** Counter used to recompute the error helpers reactively. */\n private errorTracker = signal(0);\n /** Whether an error was displayed at some point. */\n hadError = signal(false);\n\n /** ControlValueAccessor callbacks. */\n private onChange: (value: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n /** Current value of the picker. */\n value = computed(() => this._value());\n\n /** Whether the picker is disabled (input or reactive form). */\n isDisabled = computed(() => this.disabled() || this._disabledState());\n\n /** Resolves the control from `control` input or `formGroup`+`label`. */\n actualControl = computed(() => {\n const ctrl = this.control();\n if (ctrl) return ctrl;\n const fg = this.formGroup();\n const lbl = this.label();\n if (fg && lbl) return fg.get(lbl) as FormControl;\n return undefined;\n });\n\n /** Whether the bound control should show its error message. */\n shouldShowError = computed(() => {\n this.errorTracker();\n const ctrl = this.actualControl();\n return ctrl?.invalid && (ctrl?.dirty || ctrl?.touched);\n });\n\n /** Whether an error was fixed (invalid before, now valid and touched). */\n wasFixedError = computed(() => {\n this.errorTracker();\n const ctrl = this.actualControl();\n return this.hadError() && ctrl?.valid && ctrl?.touched;\n });\n\n /** Validation error messages to display, custom or translated. */\n getErrorMessages = computed(() => {\n this.errorTracker();\n const customError = this.errorMessage();\n if (customError) return [customError];\n\n const ctrl = this.actualControl();\n if (!ctrl?.errors) return [];\n\n const customErrors = this.errorMessages();\n const t = this.transloco;\n\n return Object.keys(ctrl.errors).map((key) => {\n if (customErrors[key]) return customErrors[key];\n switch (key) {\n case 'required':\n return t.translate('validation.required');\n default:\n return t.translate('validation.invalid');\n }\n });\n });\n\n /** Date part displayed in the calendar (pending date or committed value). */\n displayedDate = computed(() => {\n if (this.timeOnly()) return null;\n const value = this.pendingDate();\n if (value) return value;\n const current = this._value();\n if (!current) return null;\n return this.datePartOf(current);\n });\n\n /** Human-readable label for the selected value in the input. */\n displayLabel = computed(() => {\n const value = this._value();\n if (!value) return '';\n\n if (this.timeOnly()) {\n return this.formatTimeFromValue(value);\n }\n\n const datePart = this.datePartOf(value);\n const timePart = value.includes('T') ? value.split('T')[1] : null;\n const v = this.view();\n\n let label: string;\n if (v === 'year') {\n label = datePart;\n } else if (v === 'month') {\n const [y, m] = datePart.split('-').map(Number);\n const fmt = new Intl.DateTimeFormat(this.locale(), {\n month: 'long',\n year: 'numeric',\n });\n label = fmt.format(new Date(y, m - 1, 1));\n label = label.charAt(0).toUpperCase() + label.slice(1);\n } else {\n const fmt = new Intl.DateTimeFormat(this.locale(), {\n dateStyle: 'long',\n });\n label = fmt.format(new Date(datePart + 'T12:00:00'));\n }\n\n if (this.showTime() && timePart) {\n label += ' ' + this.formatTimeFromValue(timePart);\n }\n return label;\n });\n\n /** Localized short month names for the year view. */\n monthNames = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { month: 'short' });\n return Array.from({ length: 12 }, (_, i) => {\n const name = fmt.format(new Date(2000, i, 1)).replace('.', '');\n return name.charAt(0).toUpperCase() + name.slice(1);\n });\n });\n\n /** Localized short weekday names for the calendar header. */\n dayNames = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { weekday: 'short' });\n return Array.from({ length: 7 }, (_, i) => {\n const name = fmt.format(new Date(2024, 0, i + 1));\n return name.charAt(0).toUpperCase() + name.slice(1, 3);\n });\n });\n\n /** Number of days in the currently viewed month. */\n daysInMonth = computed(() => {\n return new Date(this.viewYear(), this.viewMonth() + 1, 0).getDate();\n });\n\n /** Weekday index (0=Sunday) of the first day of the viewed month. */\n firstDayOfMonth = computed(() => {\n return new Date(this.viewYear(), this.viewMonth(), 1).getDay();\n });\n\n /** Calendar grid: nulls for leading blanks then the days of the month. */\n calendarDays = computed(() => {\n const totalDays = this.daysInMonth();\n const firstDay = this.firstDayOfMonth();\n const days: (number | null)[] = [];\n for (let i = 0; i < firstDay; i++) days.push(null);\n for (let i = 1; i <= totalDays; i++) days.push(i);\n return days;\n });\n\n /** Whether the prev navigation button is allowed by `minValue`. */\n canGoPrev = computed(() => {\n const v = this.view();\n const min = this.minValue();\n if (v === 'date') {\n if (!min) return true;\n const prev = new Date(this.viewYear(), this.viewMonth() - 1, 1);\n return prev >= new Date(min + 'T12:00:00');\n }\n if (v === 'month') {\n const minY = min ? Number(min.split('-')[0]) : undefined;\n return minY === undefined || this.viewYear() > minY;\n }\n const minY = min ? Number(min) : undefined;\n return minY === undefined || this.viewYear() > minY;\n });\n\n /** Whether the next navigation button is allowed by `maxValue`. */\n canGoNext = computed(() => {\n const v = this.view();\n const max = this.maxValue();\n if (v === 'date') {\n if (!max) return true;\n const next = new Date(this.viewYear(), this.viewMonth() + 1, 1);\n return next <= new Date(max + 'T12:00:00');\n }\n if (v === 'month') {\n const maxY = max ? Number(max.split('-')[0]) : undefined;\n return maxY === undefined || this.viewYear() < maxY;\n }\n const maxY = max ? Number(max) : undefined;\n return maxY === undefined || this.viewYear() < maxY;\n });\n\n /** Year of the displayed date, if any. */\n selectedYear = computed(() => {\n const value = this.displayedDate();\n return value ? Number(value.split('-')[0]) : null;\n });\n\n /** Month index (0-based) of the displayed date, if any. */\n selectedMonth = computed(() => {\n const value = this.displayedDate();\n return value ? Number(value.split('-')[1]) - 1 : null;\n });\n\n /** Day of the displayed date, if any (date view only). */\n selectedDay = computed(() => {\n const value = this.displayedDate();\n return value && this.view() === 'date' ? Number(value.split('-')[2]) : null;\n });\n\n /** 12 years of the viewed decade for the year view. */\n decadeYears = computed(() => {\n const start = this.viewDecade();\n return Array.from({ length: 12 }, (_, i) => start + i);\n });\n\n /** (Unused legacy placeholder) plain year list. */\n years: number[] = [];\n\n constructor() {\n // Attach error-state subscriptions to the validated control once found.\n effect(() => {\n const ctrl = this.actualControl();\n if (!ctrl) {\n this.subscribed.set(false);\n return;\n }\n if (this.subscribed()) return;\n\n if (ctrl.invalid && ctrl.touched) this.hadError.set(true);\n\n ctrl.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n if (ctrl.invalid && ctrl.touched) this.hadError.set(true);\n });\n\n this.subscribed.set(true);\n });\n\n // One-way sync from the reactive control to the internal value signal.\n effect(() => {\n const ctrl = this.actualControl();\n if (!ctrl) return;\n\n if (!this.valueSubscribed()) {\n this.writeValue(ctrl.value);\n\n ctrl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.writeValue(value);\n });\n\n this.valueSubscribed.set(true);\n }\n });\n }\n\n /** Closes the dropdown when clicking outside the component. */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.isOpen()) return;\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.close();\n }\n }\n\n /** Closes the dropdown on Escape. */\n @HostListener('document:keydown.escape')\n onEscape(): void {\n this.close();\n }\n\n /** Opens/closes the dropdown, syncing the calendar to the current value. */\n toggle(): void {\n if (this.isDisabled()) return;\n if (this.isOpen()) {\n this.close();\n } else {\n this.syncViewToValue();\n this.isOpen.set(true);\n }\n }\n\n /** Aligns the calendar view signals with the current value (or today). */\n private syncViewToValue(): void {\n const val = this._value();\n const v = this.view();\n if (!val) {\n const now = new Date();\n this.viewYear.set(now.getFullYear());\n this.viewMonth.set(now.getMonth());\n this.viewDecade.set(Math.floor(now.getFullYear() / 10) * 10);\n this.viewHour.set(now.getHours());\n this.viewMinute.set(now.getMinutes());\n this.viewSecond.set(now.getSeconds());\n this.pendingDate.set(this.toISODate(now));\n return;\n }\n const datePart = this.datePartOf(val);\n const timePart = val.includes('T') ? val.split('T')[1] : undefined;\n if (v === 'year') {\n this.viewYear.set(Number(datePart));\n } else if (v === 'month') {\n this.viewYear.set(Number(datePart.split('-')[0]));\n } else {\n const d = new Date(datePart + 'T12:00:00');\n this.viewYear.set(d.getFullYear());\n this.viewMonth.set(d.getMonth());\n }\n const time = timePart ?? (this.timeOnly() ? val : undefined);\n if (time) {\n const [h, m, ss] = time.split(':').map(Number);\n this.viewHour.set(h || 0);\n this.viewMinute.set(m || 0);\n this.viewSecond.set(ss || 0);\n if (this.hourFormat() === '12') {\n this.viewMeridiem.set(h >= 12 ? 'PM' : 'AM');\n }\n }\n this.pendingDate.set(datePart);\n }\n\n /** Closes the dropdown, marks the control as touched and refreshes errors. */\n close(): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.onTouched();\n const ctrl = this.actualControl();\n if (ctrl) ctrl.markAsTouched();\n this.errorTracker.update((v) => v + 1);\n if (ctrl?.invalid && ctrl?.touched) this.hadError.set(true);\n }\n\n /** Navigates the calendar to the previous year/month/decade. */\n prev(): void {\n const v = this.view();\n if (v === 'year') {\n this.viewDecade.update((d) => d - 12);\n this.viewYear.update((y) => y - 12);\n } else if (v === 'month') {\n this.viewYear.update((y) => y - 1);\n } else {\n this.viewMonth.update((m) => {\n if (m === 0) {\n this.viewYear.update((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }\n }\n\n /** Navigates the calendar to the next year/month/decade. */\n next(): void {\n const v = this.view();\n if (v === 'year') {\n this.viewDecade.update((d) => d + 12);\n this.viewYear.update((y) => y + 12);\n } else if (v === 'month') {\n this.viewYear.update((y) => y + 1);\n } else {\n this.viewMonth.update((m) => {\n if (m === 11) {\n this.viewYear.update((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }\n }\n\n /** Selects a day of the month (pending if time is shown). */\n selectDay(day: number): void {\n const y = this.viewYear();\n const m = String(this.viewMonth() + 1).padStart(2, '0');\n const d = String(day).padStart(2, '0');\n const value = `${y}-${m}-${d}`;\n if (this.showTime()) {\n this.pendingDate.set(value);\n return;\n }\n this.setValue(value);\n }\n\n /** Selects a month of the year (pending if time is shown). */\n selectMonth(monthIndex: number): void {\n const value = `${this.viewYear()}-${String(monthIndex + 1).padStart(2, '0')}`;\n if (this.showTime()) {\n this.pendingDate.set(value);\n return;\n }\n this.setValue(value);\n }\n\n /** Selects a year (pending if time is shown). */\n selectYear(year: number): void {\n const value = String(year);\n if (this.showTime()) {\n this.pendingDate.set(value);\n return;\n }\n this.setValue(value);\n }\n\n /** Commits a value, updates the component, the control and the outputs. */\n private setValue(value: string, close = true): void {\n this._value.set(value);\n this.onChange(value);\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.setValue(value);\n ctrl.markAsDirty();\n }\n if (close) this.close();\n }\n\n /** Confirms the selected time and commits the combined date+time value. */\n confirmTime(): void {\n const h = this.viewHour();\n const m = this.viewMinute();\n const s = this.viewSecond();\n let time = `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;\n if (this.showSeconds()) time += `:${String(s).padStart(2, '0')}`;\n\n if (this.timeOnly()) {\n this.setValue(time);\n return;\n }\n\n const datePart =\n this.pendingDate() ??\n `${this.viewYear()}-${String(this.viewMonth() + 1).padStart(2, '0')}-01`;\n this.setValue(`${datePart}T${time}`);\n }\n\n /** Reads the hour selected in the time selector. */\n onHourChange(event: Event): void {\n this.viewHour.set(Number((event.target as HTMLSelectElement).value));\n }\n\n /** Reads the minute selected in the time selector. */\n onMinuteChange(event: Event): void {\n this.viewMinute.set(Number((event.target as HTMLSelectElement).value));\n }\n\n /** Reads the second selected in the time selector. */\n onSecondChange(event: Event): void {\n this.viewSecond.set(Number((event.target as HTMLSelectElement).value));\n }\n\n /** Current meridiem (\"AM\"/\"PM\") for the 12-hour format. */\n meridiem(): 'AM' | 'PM' {\n return this.viewMeridiem();\n }\n\n /** Reads the meridiem selected in the time selector. */\n onMeridiemChange(event: Event): void {\n this.viewMeridiem.set((event.target as HTMLSelectElement).value as 'AM' | 'PM');\n }\n\n /** Splits the date part from a full ISO \"date\" or \"dateTtime\" value. */\n private datePartOf(value: string): string {\n const i = value.indexOf('T');\n return i >= 0 ? value.slice(0, i) : value;\n }\n\n /** Formats a raw time string (\"HH:mm[:ss]\") using the configured format. */\n private formatTimeFromValue(time: string): string {\n const [h, m, ss] = time.split(':').map(Number);\n return this.formatTime(h || 0, m || 0, ss || 0);\n }\n\n /** Formats hour/minute/second according to hour format and seconds option. */\n private formatTime(h: number, m: number, s: number): string {\n if (this.hourFormat() === '12') {\n const h12 = h % 12 || 12;\n const suffix = h < 12 ? ' AM' : ' PM';\n return `${String(h12).padStart(2, '0')}:${String(m).padStart(2, '0')}${suffix}`;\n }\n let label = `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;\n if (this.showSeconds()) label += `:${String(s).padStart(2, '0')}`;\n return label;\n }\n\n /** Formats a Date as a YYYY-MM-DD ISO string. */\n private toISODate(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(\n 2,\n '0',\n )}-${String(date.getDate()).padStart(2, '0')}`;\n }\n\n /** Whether the given day matches the currently selected date. */\n isSelectedDay(day: number): boolean {\n return (\n this.selectedYear() === this.viewYear() &&\n this.selectedMonth() === this.viewMonth() &&\n this.selectedDay() === day\n );\n }\n\n /** Hours available in the time selector ('12' maps to 0..11 or 12..23). */\n hoursRange(): number[] {\n if (this.hourFormat() === '12') {\n const oneToTwelve = Array.from({ length: 12 }, (_, i) => i + 1);\n return this.viewMeridiem() === 'PM'\n ? oneToTwelve.map((h) => (h === 12 ? 12 : h + 12))\n : oneToTwelve.map((h) => (h === 12 ? 0 : h));\n }\n return Array.from({ length: 24 }, (_, i) => i);\n }\n\n /** Minutes available in the time selector, stepped by `minuteStep`. */\n minutesRange(): number[] {\n const step = this.minuteStep();\n return Array.from({ length: Math.ceil(60 / step) }, (_, i) => i * step);\n }\n\n /** Seconds available in the time selector (0..59). */\n secondsRange(): number[] {\n return Array.from({ length: 60 }, (_, i) => i);\n }\n\n /** Formats an hour for display in the selector (12-hour aware). */\n hourDisplay(hour: number): string {\n if (this.hourFormat() === '12') {\n return String(hour % 12 || 12).padStart(2, '0');\n }\n return String(hour).padStart(2, '0');\n }\n\n /** Pads a minute value with a leading zero. */\n minutesLabel(value: number): string {\n return String(value).padStart(2, '0');\n }\n\n /** Whether the given day is today's date. */\n isToday(day: number): boolean {\n const now = new Date();\n return (\n this.viewYear() === now.getFullYear() &&\n this.viewMonth() === now.getMonth() &&\n day === now.getDate()\n );\n }\n\n /** Whether the given month matches the selected month and year. */\n isSelectedMonth(monthIndex: number): boolean {\n return (\n this.selectedYear() === this.viewYear() &&\n this.selectedMonth() === monthIndex\n );\n }\n\n isCurrentMonth(monthIndex: number): boolean {\n const now = new Date();\n return (\n this.viewYear() === now.getFullYear() && monthIndex === now.getMonth()\n );\n }\n\n isSelectedYear(year: number): boolean {\n return this.selectedYear() === year;\n }\n\n isCurrentYear(year: number): boolean {\n return new Date().getFullYear() === year;\n }\n\n writeValue(value: any): void {\n this._value.set(value || null);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabledState.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","<div class=\"relative mb-4\">\n @if (label()) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] mb-1\">\n {{ label() }}\n </div>\n }\n\n <div class=\"relative\">\n <button\n type=\"button\"\n [id]=\"id()\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n class=\"flex items-center justify-between w-full px-3 py-2 text-left _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] border rounded-lg transition-colors sm:text-sm focus:outline-none focus:ring-1 disabled:cursor-not-allowed disabled:[color:var(--shk-surface-400)] dark:disabled:[color:var(--shk-surface-500)]\"\n [ngClass]=\"{\n 'border-red-500 focus:border-red-500 focus:ring-red-500': shouldShowError(),\n 'border-green-500 focus:border-green-500 focus:ring-green-500': wasFixedError(),\n '_shk-border dark:[border-color:var(--shk-surface-200)] focus:[border-color:var(--shk-primary-500)] focus:[--tw-ring-color:var(--shk-primary-500)]': !shouldShowError() && !wasFixedError(),\n }\"\n >\n <span\n [ngClass]=\"value() ? '_shk-text-surface-700 dark:[color:var(--shk-surface-700)]' : '_shk-text-surface-400 dark:[color:var(--shk-surface-400)]'\"\n >\n {{ displayLabel() || placeholder() || label() }}\n </span>\n <svg\n class=\"w-4 h-4 _shk-text-surface-400 dark:[color:var(--shk-surface-400)] shrink-0\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"></rect>\n <path d=\"M16 2v4M8 2v4M3 10h18\"></path>\n </svg>\n </button>\n\n @if (isOpen()) {\n <div class=\"fixed inset-0 z-40 bg-black/30\" (click)=\"close()\"></div>\n <div\n class=\"fixed z-50 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-72 p-4 bg-white dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-lg shadow-xl\"\n (click)=\"$event.stopPropagation()\"\n >\n @if (!timeOnly() && view() === 'date') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <span class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)]\">\n {{ monthNames()[viewMonth()] }} {{ viewYear() }}\n </span>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-7 gap-0 mb-1\">\n @for (name of dayNames(); track $index) {\n <div class=\"text-center text-xs font-medium _shk-text-surface-400 dark:[color:var(--shk-surface-400)] py-1\">\n {{ name }}\n </div>\n }\n </div>\n\n <div class=\"grid grid-cols-7 gap-0\">\n @for (day of calendarDays(); track $index) {\n @if (day !== null) {\n <button\n type=\"button\"\n (click)=\"selectDay(day)\"\n class=\"py-1.5 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedDay(day),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isToday(day) && !isSelectedDay(day),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedDay(day) && !isToday(day),\n }\"\n >\n {{ day }}\n </button>\n } @else {\n <div></div>\n }\n }\n </div>\n }\n\n @if (!timeOnly() && view() === 'month') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <span class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)]\">{{ viewYear() }}</span>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-3 gap-1\">\n @for (name of monthNames(); track $index) {\n <button\n type=\"button\"\n (click)=\"selectMonth($index)\"\n class=\"py-2 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedMonth($index),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isCurrentMonth($index) && !isSelectedMonth($index),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedMonth($index) && !isCurrentMonth($index),\n }\"\n >\n {{ name }}\n </button>\n }\n </div>\n }\n\n @if (!timeOnly() && view() === 'year') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <span class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)]\">\n {{ viewDecade() }} - {{ viewDecade() + 11 }}\n </span>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-3 gap-1\">\n @for (year of decadeYears(); track year) {\n <button\n type=\"button\"\n (click)=\"selectYear(year)\"\n class=\"py-2 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedYear(year),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isCurrentYear(year) && !isSelectedYear(year),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedYear(year) && !isCurrentYear(year),\n }\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n\n @if (timeOnly() || showTime()) {\n <div class=\"mt-3 pt-3 _shk-border dark:[border-color:var(--shk-surface-200)]\">\n <div class=\"flex items-center justify-center gap-1\">\n <select\n class=\"px-2 py-1.5 text-sm _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-md\"\n [value]=\"viewHour()\"\n (change)=\"onHourChange($event)\"\n aria-label=\"Hora\"\n >\n @for (h of hoursRange(); track h) {\n <option [value]=\"h\">{{ hourDisplay(h) }}</option>\n }\n </select>\n <span class=\"_shk-text-surface-400\">:</span>\n <select\n class=\"px-2 py-1.5 text-sm _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-md\"\n [value]=\"viewMinute()\"\n (change)=\"onMinuteChange($event)\"\n aria-label=\"Minutos\"\n >\n @for (minutes of minutesRange(); track minutes) {\n <option [value]=\"minutes\">{{ minutesLabel(minutes) }}</option>\n }\n </select>\n @if (showSeconds()) {\n <span class=\"text-sm _shk-text-surface-400\">:</span>\n <select\n class=\"px-2 py-1.5 text-sm _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-md\"\n [value]=\"viewSecond()\"\n (change)=\"onSecondChange($event)\"\n aria-label=\"Segundos\"\n >\n @for (seconds of secondsRange(); track seconds) {\n <option [value]=\"seconds\">{{ minutesLabel(seconds) }}</option>\n }\n </select>\n }\n @if (hourFormat() === '12') {\n <select\n class=\"px-2 py-1.5 text-sm _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-md\"\n [value]=\"meridiem()\"\n (change)=\"onMeridiemChange($event)\"\n aria-label=\"AM/PM\"\n >\n <option value=\"AM\">AM</option>\n <option value=\"PM\">PM</option>\n </select>\n }\n </div>\n <button\n type=\"button\"\n (click)=\"confirmTime()\"\n class=\"mt-3 w-full py-2 text-sm _shk-bg-primary _shk-text-white rounded-lg hover:[background-color:var(--shk-primary-700)] transition-colors\"\n >\n {{ timeOnly() ? 'Confirmar' : 'Introducir hora' }}\n </button>\n </div>\n }\n </div>\n }\n </div>\n\n @if (shouldShowError()) {\n <div class=\"mt-1 text-xs text-red-500 max-h-20 overflow-y-auto _shk-scrollbar\">\n <ul class=\"list-disc pl-4 space-y-1\">\n @for (error of getErrorMessages(); track error) {\n <li>{{ error }}</li>\n }\n </ul>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"shirkasoft-ui-components-date-picker.mjs","sources":["../../../projects/ui-components/date-picker/date-picker.component.ts","../../../projects/ui-components/date-picker/date-picker.component.html","../../../projects/ui-components/date-picker/shirkasoft-ui-components-date-picker.ts"],"sourcesContent":["import { CommonModule } from '@angular/common';\nimport {\n Component,\n ElementRef,\n DestroyRef,\n HostListener,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n computed,\n forwardRef,\n inject,\n input,\n signal,\n effect,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n FormControl,\n FormGroup,\n NG_VALUE_ACCESSOR,\n ReactiveFormsModule,\n} from '@angular/forms';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslocoService } from '@jsverse/transloco';\n\n/** Which granularity the picker edits: a day, a month or a year. */\nexport type DatePickerView = 'date' | 'month' | 'year';\n\n/** Which time selection mode the analog clock is in. */\nexport type ClockMode = 'hours' | 'minutes';\n\n/**\n * Shirkasoft UI Components.\n * Authors: Roberto Valladares Martin (Ansem13), Julio César García García (Sanjuli14).\n * Belongs to Shirkasoft.\n */\n\n/**\n * Date/time picker implemented as a ControlValueAccessor. Supports choosing a\n * day, month or year, optional time selection (with seconds/12-hour format),\n * min/max constraints and locale-aware labels.\n */\n@Component({\n selector: 'shk-date-picker',\n standalone: true,\n imports: [CommonModule, ReactiveFormsModule],\n templateUrl: './date-picker.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => DatePickerComponent),\n multi: true,\n },\n ],\n styles: [\n `\n .clock-container {\n position: relative;\n width: 200px;\n height: 200px;\n margin: 0 auto;\n }\n .clock-face {\n width: 100%;\n height: 100%;\n border-radius: 50%;\n border: 2px solid var(--shk-surface-200);\n position: relative;\n background-color: var(--shk-surface-50);\n }\n .dark .clock-face {\n border-color: var(--shk-surface-200);\n background-color: var(--shk-surface-100);\n }\n .clock-number {\n position: absolute;\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 12px;\n font-weight: 500;\n border-radius: 50%;\n transform: translate(-50%, -50%);\n cursor: pointer;\n transition: background-color 0.15s, color 0.15s;\n user-select: none;\n color: var(--shk-surface-700);\n }\n .dark .clock-number {\n color: var(--shk-surface-700);\n }\n .clock-number:hover {\n background-color: var(--shk-surface-100);\n }\n .dark .clock-number:hover {\n background-color: var(--shk-surface-200);\n }\n .clock-number.selected {\n background-color: var(--shk-primary-500);\n color: white;\n }\n .clock-number.current {\n font-weight: 700;\n }\n .clock-hand {\n position: absolute;\n bottom: 50%;\n left: 50%;\n width: 2px;\n background-color: var(--shk-primary-500);\n transform-origin: bottom center;\n border-radius: 1px;\n pointer-events: none;\n transition: transform 0.2s ease-out;\n }\n .clock-center {\n position: absolute;\n top: 50%;\n left: 50%;\n width: 8px;\n height: 8px;\n border-radius: 50%;\n background-color: var(--shk-primary-500);\n transform: translate(-50%, -50%);\n pointer-events: none;\n z-index: 2;\n }\n .clock-minute-marker {\n position: absolute;\n width: 1px;\n height: 8px;\n background-color: var(--shk-surface-300);\n top: 6px;\n left: 50%;\n transform-origin: center 94px;\n }\n .dark .clock-minute-marker {\n background-color: var(--shk-surface-400);\n }\n .clock-minute-marker.major {\n width: 2px;\n height: 12px;\n background-color: var(--shk-surface-400);\n }\n .dark .clock-minute-marker.major {\n background-color: var(--shk-surface-500);\n }\n .clock-mode-toggle {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 0.5rem;\n margin-top: 0.75rem;\n }\n .clock-mode-btn {\n padding: 0.25rem 0.75rem;\n font-size: 0.75rem;\n font-weight: 500;\n border-radius: 9999px;\n cursor: pointer;\n transition: background-color 0.15s, color 0.15s;\n border: none;\n background: transparent;\n color: var(--shk-surface-500);\n }\n .dark .clock-mode-btn {\n color: var(--shk-surface-400);\n }\n .clock-mode-btn.active {\n background-color: var(--shk-primary-500);\n color: white;\n }\n .clock-mode-btn:hover:not(.active) {\n background-color: var(--shk-surface-100);\n }\n .dark .clock-mode-btn:hover:not(.active) {\n background-color: var(--shk-surface-200);\n }\n .date-input-field {\n width: 100%;\n padding: 0.5rem 0.75rem;\n padding-right: 2.5rem;\n font-size: 0.875rem;\n border-radius: 0.5rem;\n outline: none;\n transition: border-color 0.15s, box-shadow 0.15s;\n background-color: var(--shk-surface-50);\n color: var(--shk-surface-700);\n border: 1px solid var(--shk-surface-200);\n }\n .dark .date-input-field {\n background-color: var(--shk-surface-100);\n color: var(--shk-surface-700);\n border-color: var(--shk-surface-200);\n }\n .date-input-field::placeholder {\n color: var(--shk-surface-400);\n }\n .dark .date-input-field::placeholder {\n color: var(--shk-surface-400);\n }\n .date-input-field:focus {\n border-color: var(--shk-primary-500);\n box-shadow: 0 0 0 1px var(--shk-primary-500);\n }\n .date-input-field:disabled {\n opacity: 0.5;\n cursor: not-allowed;\n }\n .date-input-field.input-error {\n border-color: #ef4444;\n }\n .date-input-field.input-error:focus {\n border-color: #ef4444;\n box-shadow: 0 0 0 1px #ef4444;\n }\n .date-input-field.input-valid {\n border-color: #22c55e;\n }\n .date-input-field.input-valid:focus {\n border-color: #22c55e;\n box-shadow: 0 0 0 1px #22c55e;\n }\n `,\n ],\n})\nexport class DatePickerComponent implements ControlValueAccessor {\n private elementRef = inject(ElementRef);\n private cdr = inject(ChangeDetectorRef);\n private destroyRef = inject(DestroyRef);\n private transloco = inject(TranslocoService);\n\n /** HTML id for the input (for label/for pairing). */\n id = input<string>('');\n /** Granularity of the picker ('date' | 'month' | 'year'). */\n view = input<DatePickerView>('date');\n /** Label shown above the input. */\n label = input<string>('');\n /** Placeholder of the input. */\n placeholder = input<string>('');\n /** FormGroup used to resolve the control from `label`. */\n formGroup = input<FormGroup | undefined>(undefined);\n /** Directly bound FormControl. */\n control = input<FormControl | undefined>(undefined);\n /** Disables the picker. */\n disabled = input<boolean>(false);\n /** Custom error message displayed (overrides translated ones). */\n errorMessage = input<string>('');\n /** Per-validation-key custom error messages. */\n errorMessages = input<{ [key: string]: string }>({});\n /** Minimum allowed date (YYYY-MM-DD) or year/month string. */\n minValue = input<string>('');\n /** Maximum allowed date (YYYY-MM-DD) or year/month string. */\n maxValue = input<string>('');\n /** Locale used for month/day names and formatted labels. */\n locale = input<string>('es');\n /** Edits only the time portion of the value. */\n timeOnly = input<boolean>(false);\n /** Shows the time selectors alongside the date. */\n showTime = input<boolean>(false);\n /** Hour format: '12' or '24'. */\n hourFormat = input<'12' | '24'>('24');\n /** Whether the seconds selector is shown. */\n showSeconds = input<boolean>(false);\n /** Step (in minutes) for the minute selector. */\n minuteStep = input<number>(1);\n\n /** Whether the dropdown calendar is open. */\n isOpen = signal(false);\n /** Year currently displayed in the calendar. */\n viewYear = signal(new Date().getFullYear());\n /** Month currently displayed in the calendar (0-based). */\n viewMonth = signal(new Date().getMonth());\n /** Starting year of the decade shown in year view. */\n viewDecade = signal(Math.floor(new Date().getFullYear() / 10) * 10);\n /** Hour selected in the time selectors. */\n viewHour = signal(0);\n /** Minute selected in the time selectors. */\n viewMinute = signal(0);\n /** Second selected in the time selectors. */\n viewSecond = signal(0);\n /** Meridiem selected in 12-hour format. */\n viewMeridiem = signal<'AM' | 'PM'>('AM');\n /** Date part selected but not yet committed until the time is confirmed. */\n private pendingDate = signal<string | null>(null);\n\n /** Analog clock mode: 'hours' or 'minutes'. */\n clockMode = signal<ClockMode>('hours');\n /** Internal view state for drill-down navigation (separates from input `view`). */\n currentView = signal<DatePickerView>('date');\n /** Whether the user is typing in the input field. */\n isTyping = signal(false);\n /** The raw text being typed by the user. */\n typedValue = signal('');\n /** Whether the typed value is valid. */\n typingValid = signal<boolean | null>(null);\n\n /** Underlying value (mirrors the reactive control). */\n private _value = signal<string | null>(null);\n /** Disabled state coming from the reactive form infrastructure. */\n private _disabledState = signal<boolean>(false);\n /** Whether status subscriptions have been attached to the control. */\n private subscribed = signal(false);\n private valueSubscribed = signal(false);\n /** Counter used to recompute the error helpers reactively. */\n private errorTracker = signal(0);\n /** Whether an error was displayed at some point. */\n hadError = signal(false);\n\n /** ControlValueAccessor callbacks. */\n private onChange: (value: any) => void = () => {};\n private onTouched: () => void = () => {};\n\n /** Current value of the picker. */\n value = computed(() => this._value());\n\n /** Whether the picker is disabled (input or reactive form). */\n isDisabled = computed(() => this.disabled() || this._disabledState());\n\n /** Resolves the control from `control` input or `formGroup`+`label`. */\n actualControl = computed(() => {\n const ctrl = this.control();\n if (ctrl) return ctrl;\n const fg = this.formGroup();\n const lbl = this.label();\n if (fg && lbl) return fg.get(lbl) as FormControl;\n return undefined;\n });\n\n /** Whether the bound control should show its error message. */\n shouldShowError = computed(() => {\n this.errorTracker();\n const ctrl = this.actualControl();\n return ctrl?.invalid && (ctrl?.dirty || ctrl?.touched);\n });\n\n /** Whether an error was fixed (invalid before, now valid and touched). */\n wasFixedError = computed(() => {\n this.errorTracker();\n const ctrl = this.actualControl();\n return this.hadError() && ctrl?.valid && ctrl?.touched;\n });\n\n /** Validation error messages to display, custom or translated. */\n getErrorMessages = computed(() => {\n this.errorTracker();\n const customError = this.errorMessage();\n if (customError) return [customError];\n\n const ctrl = this.actualControl();\n if (!ctrl?.errors) return [];\n\n const customErrors = this.errorMessages();\n const t = this.transloco;\n\n return Object.keys(ctrl.errors).map((key) => {\n if (customErrors[key]) return customErrors[key];\n switch (key) {\n case 'required':\n return t.translate('validation.required');\n default:\n return t.translate('validation.invalid');\n }\n });\n });\n\n /** Date part displayed in the calendar (pending date or committed value). */\n displayedDate = computed(() => {\n if (this.timeOnly()) return null;\n const value = this.pendingDate();\n if (value) return value;\n const current = this._value();\n if (!current) return null;\n return this.datePartOf(current);\n });\n\n /** Human-readable label for the selected value in the input. */\n displayLabel = computed(() => {\n const value = this._value();\n if (!value) return '';\n\n if (this.timeOnly()) {\n return this.formatTimeFromValue(value);\n }\n\n const datePart = this.datePartOf(value);\n const timePart = value.includes('T') ? value.split('T')[1] : null;\n const v = this.view();\n\n let label: string;\n if (v === 'year') {\n label = datePart;\n } else if (v === 'month') {\n const [y, m] = datePart.split('-').map(Number);\n const fmt = new Intl.DateTimeFormat(this.locale(), {\n month: 'long',\n year: 'numeric',\n });\n label = fmt.format(new Date(y, m - 1, 1));\n label = label.charAt(0).toUpperCase() + label.slice(1);\n } else {\n const fmt = new Intl.DateTimeFormat(this.locale(), {\n dateStyle: 'long',\n });\n label = fmt.format(new Date(datePart + 'T12:00:00'));\n }\n\n if (this.showTime() && timePart) {\n label += ' ' + this.formatTimeFromValue(timePart);\n }\n return label;\n });\n\n /** Localized short month names for the year view. */\n monthNames = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { month: 'short' });\n return Array.from({ length: 12 }, (_, i) => {\n const name = fmt.format(new Date(2000, i, 1)).replace('.', '');\n return name.charAt(0).toUpperCase() + name.slice(1);\n });\n });\n\n /** Localized short weekday names for the calendar header. */\n dayNames = computed(() => {\n const fmt = new Intl.DateTimeFormat(this.locale(), { weekday: 'short' });\n return Array.from({ length: 7 }, (_, i) => {\n const name = fmt.format(new Date(2024, 0, i + 1));\n return name.charAt(0).toUpperCase() + name.slice(1, 3);\n });\n });\n\n /** Number of days in the currently viewed month. */\n daysInMonth = computed(() => {\n return new Date(this.viewYear(), this.viewMonth() + 1, 0).getDate();\n });\n\n /** Weekday index (0=Sunday) of the first day of the viewed month. */\n firstDayOfMonth = computed(() => {\n return new Date(this.viewYear(), this.viewMonth(), 1).getDay();\n });\n\n /** Calendar grid: nulls for leading blanks then the days of the month. */\n calendarDays = computed(() => {\n const totalDays = this.daysInMonth();\n const firstDay = this.firstDayOfMonth();\n const days: (number | null)[] = [];\n for (let i = 0; i < firstDay; i++) days.push(null);\n for (let i = 1; i <= totalDays; i++) days.push(i);\n return days;\n });\n\n /** Whether the prev navigation button is allowed by `minValue`. */\n canGoPrev = computed(() => {\n const v = this.view();\n const min = this.minValue();\n if (v === 'date') {\n if (!min) return true;\n const prev = new Date(this.viewYear(), this.viewMonth() - 1, 1);\n return prev >= new Date(min + 'T12:00:00');\n }\n if (v === 'month') {\n const minY = min ? Number(min.split('-')[0]) : undefined;\n return minY === undefined || this.viewYear() > minY;\n }\n const minY = min ? Number(min) : undefined;\n return minY === undefined || this.viewYear() > minY;\n });\n\n /** Whether the next navigation button is allowed by `maxValue`. */\n canGoNext = computed(() => {\n const v = this.view();\n const max = this.maxValue();\n if (v === 'date') {\n if (!max) return true;\n const next = new Date(this.viewYear(), this.viewMonth() + 1, 1);\n return next <= new Date(max + 'T12:00:00');\n }\n if (v === 'month') {\n const maxY = max ? Number(max.split('-')[0]) : undefined;\n return maxY === undefined || this.viewYear() < maxY;\n }\n const maxY = max ? Number(max) : undefined;\n return maxY === undefined || this.viewYear() < maxY;\n });\n\n /** Year of the displayed date, if any. */\n selectedYear = computed(() => {\n const value = this.displayedDate();\n return value ? Number(value.split('-')[0]) : null;\n });\n\n /** Month index (0-based) of the displayed date, if any. */\n selectedMonth = computed(() => {\n const value = this.displayedDate();\n return value ? Number(value.split('-')[1]) - 1 : null;\n });\n\n /** Day of the displayed date, if any (date view only). */\n selectedDay = computed(() => {\n const value = this.displayedDate();\n return value && this.view() === 'date' ? Number(value.split('-')[2]) : null;\n });\n\n /** 12 years of the viewed decade for the year view. */\n decadeYears = computed(() => {\n const start = this.viewDecade();\n return Array.from({ length: 12 }, (_, i) => start + i);\n });\n\n /** Angle (in degrees) of the analog clock hand based on current mode. */\n clockHandAngle = computed(() => {\n if (this.clockMode() === 'hours') {\n const h = this.viewHour();\n const display = this.hourFormat() === '12' ? h % 12 || 12 : h % 12 || 12;\n return (display % 12) * 30;\n }\n return this.viewMinute() * 6;\n });\n\n /** Hours to display on the analog clock face (1-12). */\n clockHours = computed(() => Array.from({ length: 12 }, (_, i) => i + 1));\n\n /** Minutes to display on the analog clock face (0-55, step 5). */\n clockMinutes = computed(() => Array.from({ length: 12 }, (_, i) => i * 5));\n\n /** The input format string based on locale. */\n inputFormat = computed(() => {\n const loc = this.locale();\n return loc === 'en' ? 'MM/DD/YYYY' : 'DD/MM/YYYY';\n });\n\n /** Whether the drill-down navigation is active (view differs from input). */\n isDrilledDown = computed(() => this.currentView() !== this.view());\n\n /** (Unused legacy placeholder) plain year list. */\n years: number[] = [];\n\n constructor() {\n // Attach error-state subscriptions to the validated control once found.\n effect(() => {\n const ctrl = this.actualControl();\n if (!ctrl) {\n this.subscribed.set(false);\n return;\n }\n if (this.subscribed()) return;\n\n if (ctrl.invalid && ctrl.touched) this.hadError.set(true);\n\n ctrl.statusChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe(() => {\n this.errorTracker.update((v) => v + 1);\n if (ctrl.invalid && ctrl.touched) this.hadError.set(true);\n });\n\n this.subscribed.set(true);\n });\n\n // One-way sync from the reactive control to the internal value signal.\n effect(() => {\n const ctrl = this.actualControl();\n if (!ctrl) return;\n\n if (!this.valueSubscribed()) {\n this.writeValue(ctrl.value);\n\n ctrl.valueChanges\n .pipe(takeUntilDestroyed(this.destroyRef))\n .subscribe((value) => {\n this.writeValue(value);\n });\n\n this.valueSubscribed.set(true);\n }\n });\n }\n\n /** Closes the dropdown when clicking outside the component. */\n @HostListener('document:click', ['$event'])\n onDocumentClick(event: MouseEvent): void {\n if (!this.isOpen()) return;\n if (!this.elementRef.nativeElement.contains(event.target)) {\n this.close();\n }\n }\n\n /** Closes the dropdown on Escape. */\n @HostListener('document:keydown.escape')\n onEscape(): void {\n this.close();\n }\n\n /** Opens/closes the dropdown, syncing the calendar to the current value. */\n toggle(): void {\n if (this.isDisabled()) return;\n if (this.isOpen()) {\n this.close();\n } else {\n this.syncViewToValue();\n this.currentView.set(this.view());\n this.clockMode.set('hours');\n this.isTyping.set(false);\n this.isOpen.set(true);\n }\n }\n\n /** Aligns the calendar view signals with the current value (or today). */\n private syncViewToValue(): void {\n const val = this._value();\n const v = this.view();\n if (!val) {\n const now = new Date();\n this.viewYear.set(now.getFullYear());\n this.viewMonth.set(now.getMonth());\n this.viewDecade.set(Math.floor(now.getFullYear() / 10) * 10);\n this.viewHour.set(now.getHours());\n this.viewMinute.set(now.getMinutes());\n this.viewSecond.set(now.getSeconds());\n this.pendingDate.set(this.toISODate(now));\n return;\n }\n const datePart = this.datePartOf(val);\n const timePart = val.includes('T') ? val.split('T')[1] : undefined;\n if (v === 'year') {\n this.viewYear.set(Number(datePart));\n } else if (v === 'month') {\n this.viewYear.set(Number(datePart.split('-')[0]));\n } else {\n const d = new Date(datePart + 'T12:00:00');\n this.viewYear.set(d.getFullYear());\n this.viewMonth.set(d.getMonth());\n }\n const time = timePart ?? (this.timeOnly() ? val : undefined);\n if (time) {\n const [h, m, ss] = time.split(':').map(Number);\n this.viewHour.set(h || 0);\n this.viewMinute.set(m || 0);\n this.viewSecond.set(ss || 0);\n if (this.hourFormat() === '12') {\n this.viewMeridiem.set(h >= 12 ? 'PM' : 'AM');\n }\n }\n this.pendingDate.set(datePart);\n }\n\n /** Closes the dropdown, marks the control as touched and refreshes errors. */\n close(): void {\n if (!this.isOpen()) return;\n this.isOpen.set(false);\n this.onTouched();\n const ctrl = this.actualControl();\n if (ctrl) ctrl.markAsTouched();\n this.errorTracker.update((v) => v + 1);\n if (ctrl?.invalid && ctrl?.touched) this.hadError.set(true);\n }\n\n /** Navigates the calendar to the previous year/month/decade. */\n prev(): void {\n const v = this.view();\n if (v === 'year') {\n this.viewDecade.update((d) => d - 12);\n this.viewYear.update((y) => y - 12);\n } else if (v === 'month') {\n this.viewYear.update((y) => y - 1);\n } else {\n this.viewMonth.update((m) => {\n if (m === 0) {\n this.viewYear.update((y) => y - 1);\n return 11;\n }\n return m - 1;\n });\n }\n }\n\n /** Navigates the calendar to the next year/month/decade. */\n next(): void {\n const v = this.view();\n if (v === 'year') {\n this.viewDecade.update((d) => d + 12);\n this.viewYear.update((y) => y + 12);\n } else if (v === 'month') {\n this.viewYear.update((y) => y + 1);\n } else {\n this.viewMonth.update((m) => {\n if (m === 11) {\n this.viewYear.update((y) => y + 1);\n return 0;\n }\n return m + 1;\n });\n }\n }\n\n /** Selects a day of the month (pending if time is shown). */\n selectDay(day: number): void {\n const y = this.viewYear();\n const m = String(this.viewMonth() + 1).padStart(2, '0');\n const d = String(day).padStart(2, '0');\n const value = `${y}-${m}-${d}`;\n if (this.showTime()) {\n this.pendingDate.set(value);\n return;\n }\n this.setValue(value);\n }\n\n /** Selects a month of the year (pending if time is shown). */\n selectMonth(monthIndex: number): void {\n const value = `${this.viewYear()}-${String(monthIndex + 1).padStart(2, '0')}`;\n if (this.showTime()) {\n this.pendingDate.set(value);\n return;\n }\n this.setValue(value);\n }\n\n /** Selects a year (pending if time is shown). */\n selectYear(year: number): void {\n const value = String(year);\n if (this.showTime()) {\n this.pendingDate.set(value);\n return;\n }\n this.setValue(value);\n }\n\n /** Commits a value, updates the component, the control and the outputs. */\n private setValue(value: string, close = true): void {\n this._value.set(value);\n this.onChange(value);\n const ctrl = this.actualControl();\n if (ctrl) {\n ctrl.setValue(value);\n ctrl.markAsDirty();\n }\n if (close) this.close();\n }\n\n /** Confirms the selected time and commits the combined date+time value. */\n confirmTime(): void {\n const h = this.viewHour();\n const m = this.viewMinute();\n const s = this.viewSecond();\n let time = `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;\n if (this.showSeconds()) time += `:${String(s).padStart(2, '0')}`;\n\n if (this.timeOnly()) {\n this.setValue(time);\n return;\n }\n\n const datePart =\n this.pendingDate() ??\n `${this.viewYear()}-${String(this.viewMonth() + 1).padStart(2, '0')}-01`;\n this.setValue(`${datePart}T${time}`);\n }\n\n /** Reads the hour selected in the time selector. */\n onHourChange(event: Event): void {\n this.viewHour.set(Number((event.target as HTMLSelectElement).value));\n }\n\n /** Reads the minute selected in the time selector. */\n onMinuteChange(event: Event): void {\n this.viewMinute.set(Number((event.target as HTMLSelectElement).value));\n }\n\n /** Reads the second selected in the time selector. */\n onSecondChange(event: Event): void {\n this.viewSecond.set(Number((event.target as HTMLSelectElement).value));\n }\n\n /** Current meridiem (\"AM\"/\"PM\") for the 12-hour format. */\n meridiem(): 'AM' | 'PM' {\n return this.viewMeridiem();\n }\n\n /** Reads the meridiem selected in the time selector. */\n onMeridiemChange(event: Event): void {\n this.viewMeridiem.set((event.target as HTMLSelectElement).value as 'AM' | 'PM');\n }\n\n /** Splits the date part from a full ISO \"date\" or \"dateTtime\" value. */\n private datePartOf(value: string): string {\n const i = value.indexOf('T');\n return i >= 0 ? value.slice(0, i) : value;\n }\n\n /** Formats a raw time string (\"HH:mm[:ss]\") using the configured format. */\n private formatTimeFromValue(time: string): string {\n const [h, m, ss] = time.split(':').map(Number);\n return this.formatTime(h || 0, m || 0, ss || 0);\n }\n\n /** Formats hour/minute/second according to hour format and seconds option. */\n private formatTime(h: number, m: number, s: number): string {\n if (this.hourFormat() === '12') {\n const h12 = h % 12 || 12;\n const suffix = h < 12 ? ' AM' : ' PM';\n return `${String(h12).padStart(2, '0')}:${String(m).padStart(2, '0')}${suffix}`;\n }\n let label = `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;\n if (this.showSeconds()) label += `:${String(s).padStart(2, '0')}`;\n return label;\n }\n\n /** Formats a Date as a YYYY-MM-DD ISO string. */\n private toISODate(date: Date): string {\n return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(\n 2,\n '0',\n )}-${String(date.getDate()).padStart(2, '0')}`;\n }\n\n /** Whether the given day matches the currently selected date. */\n isSelectedDay(day: number): boolean {\n return (\n this.selectedYear() === this.viewYear() &&\n this.selectedMonth() === this.viewMonth() &&\n this.selectedDay() === day\n );\n }\n\n /** Hours available in the time selector ('12' maps to 0..11 or 12..23). */\n hoursRange(): number[] {\n if (this.hourFormat() === '12') {\n const oneToTwelve = Array.from({ length: 12 }, (_, i) => i + 1);\n return this.viewMeridiem() === 'PM'\n ? oneToTwelve.map((h) => (h === 12 ? 12 : h + 12))\n : oneToTwelve.map((h) => (h === 12 ? 0 : h));\n }\n return Array.from({ length: 24 }, (_, i) => i);\n }\n\n /** Minutes available in the time selector, stepped by `minuteStep`. */\n minutesRange(): number[] {\n const step = this.minuteStep();\n return Array.from({ length: Math.ceil(60 / step) }, (_, i) => i * step);\n }\n\n /** Seconds available in the time selector (0..59). */\n secondsRange(): number[] {\n return Array.from({ length: 60 }, (_, i) => i);\n }\n\n /** Formats an hour for display in the selector (12-hour aware). */\n hourDisplay(hour: number): string {\n if (this.hourFormat() === '12') {\n return String(hour % 12 || 12).padStart(2, '0');\n }\n return String(hour).padStart(2, '0');\n }\n\n /** Pads a minute value with a leading zero. */\n minutesLabel(value: number): string {\n return String(value).padStart(2, '0');\n }\n\n /** Returns the position (x, y) for a clock number at the given index (0-11). */\n getClockNumberPosition(index: number): { x: number; y: number } {\n const angle = (index * 30 - 90) * (Math.PI / 180);\n const radius = 76;\n const x = 100 + radius * Math.cos(angle);\n const y = 100 + radius * Math.sin(angle);\n return { x, y };\n }\n\n /** Returns the position (x, y) for a minute marker at the given index (0-59). */\n getMinuteMarkerPosition(index: number): { x: number; y: number; rotation: number } {\n const angle = (index * 6 - 90) * (Math.PI / 180);\n const radius = 88;\n const x = 100 + radius * Math.cos(angle);\n const y = 100 + radius * Math.sin(angle);\n return { x, y, rotation: index * 6 };\n }\n\n /** Handles click on the analog clock face. */\n onClockClick(event: MouseEvent, mode: 'hours' | 'minutes'): void {\n const target = event.currentTarget as HTMLElement;\n const rect = target.getBoundingClientRect();\n const centerX = rect.left + rect.width / 2;\n const centerY = rect.top + rect.height / 2;\n const dx = event.clientX - centerX;\n const dy = event.clientY - centerY;\n let angle = Math.atan2(dy, dx) * (180 / Math.PI) + 90;\n if (angle < 0) angle += 360;\n\n if (mode === 'hours') {\n let hour = Math.round(angle / 30) % 12;\n if (hour === 0) hour = 12;\n let actualHour = hour;\n if (this.hourFormat() === '12') {\n if (this.viewMeridiem() === 'PM' && hour !== 12) {\n actualHour = hour + 12;\n } else if (this.viewMeridiem() === 'AM' && hour === 12) {\n actualHour = 0;\n }\n } else {\n actualHour = hour === 12 ? 12 : hour;\n if (this.viewHour() >= 12 && hour !== 12) {\n actualHour = hour + 12;\n } else if (this.viewHour() < 12 && hour === 12) {\n actualHour = 12;\n }\n }\n this.viewHour.set(actualHour);\n this.clockMode.set('minutes');\n } else {\n const minute = Math.round(angle / 6) % 60;\n const stepped = Math.round(minute / this.minuteStep()) * this.minuteStep();\n this.viewMinute.set(stepped % 60);\n }\n }\n\n /** Switches the clock mode between hours and minutes. */\n toggleClockMode(): void {\n this.clockMode.update((m) => (m === 'hours' ? 'minutes' : 'hours'));\n }\n\n /** Whether the given hour number matches the current selection on the clock face. */\n isClockHourSelected(hour12: number): boolean {\n const h = this.viewHour();\n if (this.hourFormat() === '12') {\n const display = h % 12 || 12;\n return display === hour12;\n }\n const display = h % 12 || 12;\n return display === hour12;\n }\n\n /** Whether the given minute value matches the current selection. */\n isClockMinuteSelected(minute: number): boolean {\n return this.viewMinute() === minute;\n }\n\n /** Formats the clock display time for the header above the clock. */\n clockDisplayTime(): string {\n return this.formatTime(this.viewHour(), this.viewMinute(), this.viewSecond());\n }\n\n /** Returns SVG line coordinates for a clock hand from center to angle. */\n clockHandLine(length: number = 60): { x2: number; y2: number } {\n const angle = this.clockHandAngle();\n // clockHandAngle: 0=12h, 90=3h, 180=6h, 270=9h\n // SVG cos/sin: 0=3h, 90=6h, 180=9h, 270=12h → offset -90°\n const rad = ((angle - 90) * Math.PI) / 180;\n return {\n x2: 100 + length * Math.cos(rad),\n y2: 100 + length * Math.sin(rad),\n };\n }\n\n /** Returns SVG text position for a clock number at the given index (0-11). */\n clockNumberPos(index: number): { x: number; y: number } {\n const angle = ((index % 12) * 30 - 90) * (Math.PI / 180);\n return {\n x: 100 + 68 * Math.cos(angle),\n y: 100 + 68 * Math.sin(angle),\n };\n }\n\n /** Returns SVG text position for a minute label at the given minute (0-55). */\n clockMinutePos(minute: number): { x: number; y: number } {\n const angle = (minute * 6 - 90) * (Math.PI / 180);\n return {\n x: 100 + 68 * Math.cos(angle),\n y: 100 + 68 * Math.sin(angle),\n };\n }\n\n /** Returns SVG line coordinates for a minute marker. */\n clockMinuteMarker(i: number): { x1: number; y1: number; x2: number; y2: number } {\n const angle = (i * 6 - 90) * (Math.PI / 180);\n const outerR = 84;\n const innerR = i % 5 === 0 ? 78 : 82;\n return {\n x1: 100 + outerR * Math.cos(angle),\n y1: 100 + outerR * Math.sin(angle),\n x2: 100 + innerR * Math.cos(angle),\n y2: 100 + innerR * Math.sin(angle),\n };\n }\n\n /** Switches the drill-down view to months (from date view). */\n drillToMonths(): void {\n this.currentView.set('month');\n }\n\n /** Switches the drill-down view to years (from month view). */\n drillToYears(): void {\n this.currentView.set('year');\n }\n\n /** Drills down from year view to month view for the selected year. */\n drillDownToMonth(year: number): void {\n this.viewYear.set(year);\n this.currentView.set('month');\n }\n\n /** Drills down from month view to date view for the selected month. */\n drillDownToDate(monthIndex: number): void {\n this.viewMonth.set(monthIndex);\n this.currentView.set('date');\n }\n\n /** Goes back one level in drill-down navigation. */\n drillUp(): void {\n const v = this.currentView();\n if (v === 'date') {\n this.currentView.set('month');\n } else if (v === 'month') {\n this.currentView.set('year');\n }\n }\n\n /** Returns to the initial view from any drill-down level. */\n drillToInitial(): void {\n this.currentView.set(this.view());\n }\n\n /** Formats input placeholder based on locale. */\n inputPlaceholder(): string {\n if (this.timeOnly()) return this.inputFormat();\n if (this.view() === 'year') return 'YYYY';\n if (this.view() === 'month') return 'MM/YYYY';\n return this.inputFormat();\n }\n\n /** Handles text input in the date field. */\n onInputText(event: Event): void {\n const value = (event.target as HTMLInputElement).value;\n this.typedValue.set(value);\n this.typingValid.set(null);\n }\n\n /** Handles focus on the input field. */\n onInputFocus(): void {\n this.isTyping.set(true);\n const val = this._value();\n if (val) {\n if (this.timeOnly()) {\n this.typedValue.set(val);\n } else {\n this.typedValue.set(val);\n }\n } else {\n this.typedValue.set('');\n }\n this.typingValid.set(null);\n }\n\n /** Validates and commits the typed value on blur or Enter. */\n onInputBlur(): void {\n const text = this.typedValue().trim();\n if (!text) {\n this.isTyping.set(false);\n return;\n }\n const parsed = this.parseTypedDate(text);\n if (parsed) {\n this.setValue(parsed);\n this.typingValid.set(true);\n } else {\n this.typingValid.set(false);\n setTimeout(() => this.typingValid.set(null), 1500);\n }\n this.isTyping.set(false);\n }\n\n /** Cancels typing and reverts to the previous value. */\n cancelTyping(): void {\n this.isTyping.set(false);\n this.typedValue.set('');\n this.typingValid.set(null);\n }\n\n /** Parses a typed date string according to the locale format. */\n private parseTypedDate(text: string): string | null {\n const clean = text.replace(/[\\/\\-\\.\\s]/g, '/').trim();\n const parts = clean.split('/').filter(Boolean);\n\n if (this.timeOnly()) {\n return this.parseTimeOnly(clean);\n }\n\n if (this.view() === 'year') {\n const y = Number(parts[0]);\n if (parts.length === 1 && y >= 1900 && y <= 2100) return String(y);\n return null;\n }\n\n if (this.view() === 'month') {\n if (parts.length === 2) {\n let m: number, y: number;\n if (this.locale() === 'en') {\n m = Number(parts[0]);\n y = Number(parts[1]);\n } else {\n m = Number(parts[0]);\n y = Number(parts[1]);\n }\n if (m >= 1 && m <= 12 && y >= 1900 && y <= 2100) {\n return `${y}-${String(m).padStart(2, '0')}`;\n }\n }\n return null;\n }\n\n // date view\n if (parts.length >= 3) {\n let d: number, m: number, y: number;\n if (this.locale() === 'en') {\n m = Number(parts[0]);\n d = Number(parts[1]);\n y = Number(parts[2]);\n } else {\n d = Number(parts[0]);\n m = Number(parts[1]);\n y = Number(parts[2]);\n }\n if (y >= 1900 && y <= 2100 && m >= 1 && m <= 12 && d >= 1 && d <= 31) {\n const date = new Date(y, m - 1, d);\n if (date.getMonth() === m - 1 && date.getDate() === d) {\n let result = `${y}-${String(m).padStart(2, '0')}-${String(d).padStart(2, '0')}`;\n if (this.showTime()) {\n const time = `${String(this.viewHour()).padStart(2, '0')}:${String(this.viewMinute()).padStart(2, '0')}`;\n result += `T${time}`;\n }\n return result;\n }\n }\n }\n return null;\n }\n\n /** Parses time-only input. */\n private parseTimeOnly(text: string): string | null {\n const clean = text.replace(/[\\.]/g, ':').trim();\n const parts = clean.split(':').filter(Boolean);\n if (parts.length >= 2) {\n let h = Number(parts[0]);\n const m = Number(parts[1]);\n const s = parts.length >= 3 ? Number(parts[2]) : 0;\n if (this.hourFormat() === '12') {\n const isPM = /pm/i.test(text);\n const isAM = /am/i.test(text);\n if (isPM && h < 12) h += 12;\n if (isAM && h === 12) h = 0;\n }\n if (h >= 0 && h <= 23 && m >= 0 && m <= 59 && s >= 0 && s <= 59) {\n let result = `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;\n if (this.showSeconds()) result += `:${String(s).padStart(2, '0')}`;\n return result;\n }\n }\n return null;\n }\n\n /** Whether the given day is today's date. */\n isToday(day: number): boolean {\n const now = new Date();\n return (\n this.viewYear() === now.getFullYear() &&\n this.viewMonth() === now.getMonth() &&\n day === now.getDate()\n );\n }\n\n /** Whether the given month matches the selected month and year. */\n isSelectedMonth(monthIndex: number): boolean {\n return (\n this.selectedYear() === this.viewYear() &&\n this.selectedMonth() === monthIndex\n );\n }\n\n isCurrentMonth(monthIndex: number): boolean {\n const now = new Date();\n return (\n this.viewYear() === now.getFullYear() && monthIndex === now.getMonth()\n );\n }\n\n isSelectedYear(year: number): boolean {\n return this.selectedYear() === year;\n }\n\n isCurrentYear(year: number): boolean {\n return new Date().getFullYear() === year;\n }\n\n writeValue(value: any): void {\n this._value.set(value || null);\n }\n\n registerOnChange(fn: any): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: any): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this._disabledState.set(isDisabled);\n this.cdr.markForCheck();\n }\n}\n","<div class=\"relative mb-4\">\n @if (label()) {\n <div class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] mb-1\">\n {{ label() }}\n </div>\n }\n\n <div class=\"relative\">\n <div class=\"relative\">\n <input\n [id]=\"id()\"\n type=\"text\"\n [disabled]=\"isDisabled()\"\n [placeholder]=\"inputPlaceholder()\"\n [value]=\"isTyping() ? typedValue() : displayLabel()\"\n (input)=\"onInputText($event)\"\n (focus)=\"onInputFocus()\"\n (blur)=\"onInputBlur()\"\n (keydown.enter)=\"$any($event.target).blur()\"\n (keydown.escape)=\"cancelTyping()\"\n (click)=\"toggle()\"\n class=\"date-input-field\"\n [ngClass]=\"{\n 'input-error': shouldShowError() || typingValid() === false,\n 'input-valid': wasFixedError() || typingValid() === true,\n }\"\n [attr.aria-invalid]=\"shouldShowError()\"\n [attr.aria-describedby]=\"shouldShowError() ? id() + '-error' : null\"\n />\n <button\n type=\"button\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n class=\"absolute right-2 top-1/2 -translate-y-1/2 p-1 _shk-text-surface-400 dark:[color:var(--shk-surface-400)] hover:[color:var(--shk-surface-600)] dark:hover:[color:var(--shk-surface-300)] transition-colors\"\n >\n <svg\n class=\"w-4 h-4\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"18\" rx=\"2\"></rect>\n <path d=\"M16 2v4M8 2v4M3 10h18\"></path>\n </svg>\n </button>\n </div>\n\n @if (isOpen()) {\n <div class=\"fixed inset-0 z-40 bg-black/30\" (click)=\"close()\"></div>\n <div\n class=\"fixed z-50 top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 w-72 p-4 bg-white dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-lg shadow-xl\"\n (click)=\"$event.stopPropagation()\"\n >\n <!-- DATE VIEW -->\n @if (!timeOnly() && currentView() === 'date') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <button\n type=\"button\"\n (click)=\"drillToMonths()\"\n class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] hover:_shk-text-primary cursor-pointer hover:underline transition-colors\"\n >\n {{ monthNames()[viewMonth()] }} {{ viewYear() }}\n </button>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-7 gap-0 mb-1\">\n @for (name of dayNames(); track $index) {\n <div class=\"text-center text-xs font-medium _shk-text-surface-400 dark:[color:var(--shk-surface-400)] py-1\">\n {{ name }}\n </div>\n }\n </div>\n\n <div class=\"grid grid-cols-7 gap-0\">\n @for (day of calendarDays(); track $index) {\n @if (day !== null) {\n <button\n type=\"button\"\n (click)=\"selectDay(day)\"\n class=\"py-1.5 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedDay(day),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isToday(day) && !isSelectedDay(day),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedDay(day) && !isToday(day),\n }\"\n >\n {{ day }}\n </button>\n } @else {\n <div></div>\n }\n }\n </div>\n }\n\n <!-- MONTH VIEW -->\n @if (!timeOnly() && currentView() === 'month') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <button\n type=\"button\"\n (click)=\"drillToYears()\"\n class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)] hover:_shk-text-primary cursor-pointer hover:underline transition-colors\"\n >\n {{ viewYear() }}\n </button>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-3 gap-1\">\n @for (name of monthNames(); track $index) {\n <button\n type=\"button\"\n (click)=\"drillDownToDate($index)\"\n class=\"py-2 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedMonth($index),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isCurrentMonth($index) && !isSelectedMonth($index),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedMonth($index) && !isCurrentMonth($index),\n }\"\n >\n {{ name }}\n </button>\n }\n </div>\n }\n\n <!-- YEAR VIEW -->\n @if (!timeOnly() && currentView() === 'year') {\n <div class=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n (click)=\"prev()\"\n [disabled]=\"!canGoPrev()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M15 18l-6-6 6-6\"></path>\n </svg>\n </button>\n <span class=\"text-sm font-medium _shk-text-surface-700 dark:[color:var(--shk-surface-600)]\">\n {{ viewDecade() }} - {{ viewDecade() + 11 }}\n </span>\n <button\n type=\"button\"\n (click)=\"next()\"\n [disabled]=\"!canGoNext()\"\n class=\"p-1 rounded hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)] disabled:opacity-30 disabled:cursor-not-allowed\"\n >\n <svg class=\"w-4 h-4\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M9 18l6-6-6-6\"></path>\n </svg>\n </button>\n </div>\n\n <div class=\"grid grid-cols-3 gap-1\">\n @for (year of decadeYears(); track year) {\n <button\n type=\"button\"\n (click)=\"drillDownToMonth(year)\"\n class=\"py-2 text-sm rounded transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white hover:[background-color:var(--shk-primary-700)]': isSelectedYear(year),\n 'ring-1 [--tw-ring-color:var(--shk-primary-500)] _shk-text-surface-700 dark:[color:var(--shk-surface-700)]': isCurrentYear(year) && !isSelectedYear(year),\n '_shk-text-surface-700 dark:[color:var(--shk-surface-700)] hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': !isSelectedYear(year) && !isCurrentYear(year),\n }\"\n >\n {{ year }}\n </button>\n }\n </div>\n }\n\n <!-- ANALOG CLOCK TIME PICKER -->\n @if (timeOnly() || showTime()) {\n <div class=\"mt-3 pt-3 _shk-border dark:[border-color:var(--shk-surface-200)]\">\n <!-- Clock display time -->\n <div class=\"text-center mb-2\">\n <span class=\"text-lg font-semibold _shk-text-surface-700 dark:[color:var(--shk-surface-700)]\">\n {{ clockDisplayTime() }}\n </span>\n </div>\n\n <!-- Analog clock face -->\n <div class=\"clock-container\">\n <svg\n viewBox=\"0 0 200 200\"\n class=\"w-full h-full cursor-pointer\"\n (click)=\"onClockClick($event, clockMode())\"\n >\n <!-- Clock face background -->\n <circle cx=\"100\" cy=\"100\" r=\"96\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"1\"\n class=\"_shk-text-surface-200 dark:[color:var(--shk-surface-200)]\" />\n\n <!-- Minute markers -->\n @if (clockMode() === 'minutes') {\n @for (i of [0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59]; track i) {\n <line\n [attr.x1]=\"clockMinuteMarker(i).x1\"\n [attr.y1]=\"clockMinuteMarker(i).y1\"\n [attr.x2]=\"clockMinuteMarker(i).x2\"\n [attr.y2]=\"clockMinuteMarker(i).y2\"\n [attr.stroke-width]=\"i % 5 === 0 ? 2 : 1\"\n [class]=\"i % 5 === 0 ? '_shk-text-surface-500 dark:[color:var(--shk-surface-500)]' : '_shk-text-surface-300 dark:[color:var(--shk-surface-400)]'\"\n stroke=\"currentColor\"\n />\n }\n <!-- Minute numbers (00, 05, 10, ...) -->\n @for (m of [0,5,10,15,20,25,30,35,40,45,50,55]; track m) {\n <text\n [attr.x]=\"clockMinutePos(m).x\"\n [attr.y]=\"clockMinutePos(m).y\"\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n class=\"text-[9px] _shk-text-surface-500 dark:[color:var(--shk-surface-400)]\"\n [class._shk-text-primary]=\"viewMinute() === m\"\n >\n {{ m.toString().padStart(2, '0') }}\n </text>\n }\n }\n\n <!-- Hour numbers -->\n @if (clockMode() === 'hours') {\n @for (h of clockHours(); track h) {\n <text\n [attr.x]=\"clockNumberPos(h).x\"\n [attr.y]=\"clockNumberPos(h).y\"\n text-anchor=\"middle\"\n dominant-baseline=\"central\"\n class=\"text-sm font-medium\"\n [class._shk-text-primary]=\"isClockHourSelected(h)\"\n [class._shk-text-surface-700]=\"!isClockHourSelected(h)\"\n >\n {{ h }}\n </text>\n }\n }\n\n <!-- Clock hand -->\n <line\n x1=\"100\" y1=\"100\"\n [attr.x2]=\"clockHandLine(60).x2\"\n [attr.y2]=\"clockHandLine(60).y2\"\n class=\"_shk-text-primary\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n />\n\n <!-- Center dot -->\n <circle cx=\"100\" cy=\"100\" r=\"4\" class=\"fill-current _shk-text-primary\" />\n </svg>\n </div>\n\n <!-- Mode toggle: Hours / Minutes -->\n <div class=\"clock-mode-toggle\">\n <button\n type=\"button\"\n (click)=\"clockMode.set('hours')\"\n class=\"clock-mode-btn\"\n [class.active]=\"clockMode() === 'hours'\"\n >\n {{ 'Horas' }}\n </button>\n <button\n type=\"button\"\n (click)=\"clockMode.set('minutes')\"\n class=\"clock-mode-btn\"\n [class.active]=\"clockMode() === 'minutes'\"\n >\n {{ 'Minutos' }}\n </button>\n </div>\n\n <!-- AM/PM toggle for 12h format -->\n @if (hourFormat() === '12') {\n <div class=\"flex items-center justify-center gap-2 mt-2\">\n <button\n type=\"button\"\n (click)=\"viewMeridiem.set('AM')\"\n class=\"px-3 py-1 text-xs font-medium rounded-full transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white': viewMeridiem() === 'AM',\n '_shk-text-surface-500 hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': viewMeridiem() !== 'AM'\n }\"\n >\n AM\n </button>\n <button\n type=\"button\"\n (click)=\"viewMeridiem.set('PM')\"\n class=\"px-3 py-1 text-xs font-medium rounded-full transition-colors\"\n [ngClass]=\"{\n '_shk-bg-primary _shk-text-white': viewMeridiem() === 'PM',\n '_shk-text-surface-500 hover:[background-color:var(--shk-surface-100)] dark:hover:[background-color:var(--shk-surface-200)]': viewMeridiem() !== 'PM'\n }\"\n >\n PM\n </button>\n </div>\n }\n\n <!-- Seconds selector (if enabled) -->\n @if (showSeconds()) {\n <div class=\"flex items-center justify-center gap-1 mt-2\">\n <span class=\"text-xs _shk-text-surface-400\">Seg:</span>\n <select\n class=\"px-2 py-1 text-xs _shk-bg-surface-50 dark:[background-color:var(--shk-surface-100)] _shk-border dark:[border-color:var(--shk-surface-200)] rounded-md\"\n [value]=\"viewSecond()\"\n (change)=\"onSecondChange($event)\"\n aria-label=\"Segundos\"\n >\n @for (seconds of secondsRange(); track seconds) {\n <option [value]=\"seconds\">{{ minutesLabel(seconds) }}</option>\n }\n </select>\n </div>\n }\n\n <!-- Confirm button -->\n <button\n type=\"button\"\n (click)=\"confirmTime()\"\n class=\"mt-3 w-full py-2 text-sm _shk-bg-primary _shk-text-white rounded-lg hover:[background-color:var(--shk-primary-700)] transition-colors\"\n >\n {{ timeOnly() ? 'Confirmar' : 'Introducir hora' }}\n </button>\n </div>\n }\n </div>\n }\n </div>\n\n @if (shouldShowError()) {\n <div [id]=\"id() + '-error'\" class=\"mt-1 text-xs text-red-500 max-h-20 overflow-y-auto _shk-scrollbar\">\n <ul class=\"list-disc pl-4 space-y-1\">\n @for (error of getErrorMessages(); track error) {\n <li>{{ error }}</li>\n }\n </ul>\n </div>\n }\n</div>\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|