@mk-kit/ui 0.51.0 → 0.52.1
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/mk-kit-ui-block-editor.mjs +2 -1
- package/fesm2022/mk-kit-ui-block-editor.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-checkbox.mjs +2 -1
- package/fesm2022/mk-kit-ui-checkbox.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-core-signal-forms.mjs +56 -0
- package/fesm2022/mk-kit-ui-core-signal-forms.mjs.map +1 -0
- package/fesm2022/mk-kit-ui-core.mjs +1 -43
- package/fesm2022/mk-kit-ui-core.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-data.mjs +2 -1
- package/fesm2022/mk-kit-ui-data.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-datetime.mjs +2 -1
- package/fesm2022/mk-kit-ui-datetime.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-forms.mjs +2 -1
- package/fesm2022/mk-kit-ui-forms.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-rich-text.mjs +2 -1
- package/fesm2022/mk-kit-ui-rich-text.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-testing.mjs +8 -3
- package/fesm2022/mk-kit-ui-testing.mjs.map +1 -1
- package/fesm2022/mk-kit-ui.mjs +1 -0
- package/fesm2022/mk-kit-ui.mjs.map +1 -1
- package/package.json +5 -1
- package/types/mk-kit-ui-core-signal-forms.d.ts +31 -0
- package/types/mk-kit-ui-core.d.ts +1 -29
- package/types/mk-kit-ui-testing.d.ts +5 -2
- package/types/mk-kit-ui.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mk-kit-ui-datetime.mjs","sources":["../../../projects/mk-kit/datetime/datetime/date-utils.ts","../../../projects/mk-kit/datetime/calendar/calendar.ts","../../../projects/mk-kit/datetime/calendar/calendar.html","../../../projects/mk-kit/datetime/date-picker/date-picker.ts","../../../projects/mk-kit/datetime/date-picker/date-picker.html","../../../projects/mk-kit/datetime/time-picker/time-picker.ts","../../../projects/mk-kit/datetime/time-picker/time-picker.html","../../../projects/mk-kit/datetime/datetime-picker/datetime-picker.ts","../../../projects/mk-kit/datetime/datetime-picker/datetime-picker.html","../../../projects/mk-kit/datetime/date-range-picker/date-range-picker.ts","../../../projects/mk-kit/datetime/date-range-picker/date-range-picker.html","../../../projects/mk-kit/datetime/month-picker/month-picker.ts","../../../projects/mk-kit/datetime/month-picker/month-picker.html","../../../projects/mk-kit/datetime/week-picker/week-picker.ts","../../../projects/mk-kit/datetime/week-picker/week-picker.html","../../../projects/mk-kit/datetime/event-calendar/event-calendar-layout.ts","../../../projects/mk-kit/datetime/event-calendar/event-calendar.ts","../../../projects/mk-kit/datetime/event-calendar/event-calendar.html","../../../projects/mk-kit/datetime/mini-date/mini-date.ts","../../../projects/mk-kit/datetime/mini-date/mini-date.html","../../../projects/mk-kit/datetime/index.ts","../../../projects/mk-kit/datetime/mk-kit-ui-datetime.ts"],"sourcesContent":["/** Delegates to `@mk-kit/core` — the exported names are unchanged. */\nexport {\n addDays,\n addMonths,\n buildMonthMatrix,\n clampDate,\n endOfMonth,\n endOfWeek,\n formatDate,\n formatISODate,\n getISOWeek,\n getMonthNames,\n getWeekdayFullName,\n getWeekdayNames,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n parseISODate,\n startOfDay,\n startOfMonth,\n startOfWeek,\n type MkWeekday,\n} from '@mk-kit/core';\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n forwardRef,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport {\n addDays,\n addMonths,\n buildMonthMatrix,\n clampDate,\n formatDate,\n getWeekdayFullName,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n startOfDay,\n startOfMonth,\n} from '../datetime/date-utils';\n\n/** Weekday header descriptor (short label + full name for `abbr[title]`). */\ninterface MkWeekdayHeader {\n short: string;\n full: string;\n}\n\n/**\n * Calendar — an accessible month-grid date picker following the WAI-ARIA\n * grid / date-picker pattern. It is the reusable core behind\n * `mk-date-picker` and `mk-date-range-picker`.\n *\n * Keyboard (when a day has focus): Arrow keys move by day/week (crossing month\n * boundaries updates the view), Home/End jump to the start/end of the week,\n * PageUp/PageDown change month, Shift+PageUp/PageDown change year, and\n * Enter/Space selects the focused day. A roving tabindex keeps a single tab\n * stop. Month changes are announced via {@link MkLiveAnnouncer}.\n *\n * Exposes a two-way `value` model and implements `ControlValueAccessor`, so it\n * also works directly with `ngModel` / `formControl` (single-date mode).\n * Additive range inputs (`rangeMode`,\n * `rangeStart`, `rangeEnd`) let it highlight an in-progress selection without\n * affecting single-date use; range hosts listen to `dateSelected`.\n *\n * ```html\n * <mk-calendar [(value)]=\"date\" [min]=\"minDate\" [firstDayOfWeek]=\"1\" />\n * ```\n */\n@Component({\n selector: 'mk-calendar',\n templateUrl: './calendar.html',\n styleUrl: './calendar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkCalendar),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkCalendar),\n multi: true,\n },\n ],\n host: {\n class: 'mk-calendar',\n '[class.mk-calendar--disabled]': 'isControlDisabled()',\n '(focusout)': 'onFocusout($event)',\n '[class.mk-calendar--sm]': \"size() === 'sm'\",\n '[class.mk-calendar--md]': \"size() === 'md'\",\n '[class.mk-calendar--lg]': \"size() === 'lg'\",\n '[class.mk-calendar--full]': 'fullWidth()',\n '[class.mk-calendar--range]': 'rangeMode()',\n '[class.mk-calendar--invalid]': 'isInvalid()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n },\n})\nexport class MkCalendar implements ControlValueAccessor, Validator {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly i18n = inject(MK_I18N);\n private readonly injector = inject(Injector);\n private readonly announcer = inject(MkLiveAnnouncer);\n\n /** Two-way selected date (single-date mode). */\n readonly value = model<Date | null>(null);\n /** Earliest selectable date (inclusive, day granularity). */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable date (inclusive, day granularity). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** First column of the week: 0 = Sunday … 6 = Saturday. */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Disable the whole calendar. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Predicate marking individual days as disabled. */\n readonly disabledDate = input<((d: Date) => boolean) | null>(null);\n /** Control size. */\n readonly size = input<MkSize>('md');\n /**\n * Stretch to fill the container instead of sizing to content.\n *\n * Off by default, because the common host is a date-picker popover that must\n * stay a compact widget. Turn it on when the calendar is laid out as part of\n * a page — a sidebar or a column — where sizing to content leaves the space\n * beside it empty. Cells share the width evenly and `--_cell-size` becomes\n * their minimum rather than their fixed size.\n */\n readonly fullWidth = input(false, { transform: booleanAttribute });\n\n // --- Range mode (additive; does not affect single-date use) --------------\n /** Enable range highlighting. Hosts drive selection via `dateSelected`. */\n readonly rangeMode = input(false, { transform: booleanAttribute });\n /** Range start endpoint to highlight (range mode). */\n readonly rangeStart = input<Date | null>(null);\n /** Range end endpoint to highlight (range mode). */\n readonly rangeEnd = input<Date | null>(null);\n\n /** Emitted whenever a (non-disabled) day is activated. */\n readonly dateSelected = output<Date>();\n /**\n * Emitted (in range mode) as the pointer hovers days — the hovered day, or\n * `null` on leave. Lets hosts preview a selection (e.g. a whole-week\n * highlight in `mk-week-picker`).\n */\n readonly dateHovered = output<Date | null>();\n\n /** id of the visible month/year label — wire as the grid's label. */\n readonly labelId = mkUniqueId('mk-calendar-label');\n\n /** Disabled state driven by forms (`setDisabledState`). */\n protected readonly cvaDisabled = signal(false);\n\n /** The day that currently owns the roving tabindex; also drives the view. */\n protected readonly focusedDate = signal<Date>(this.initialFocus());\n /** Hovered day used to preview a range before the end is picked. */\n protected readonly hoveredDate = signal<Date | null>(null);\n\n /** Disabled by the `disabled` input or by the bound form control. */\n protected readonly isControlDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly isInvalid = computed(() => this.invalid() && this.fieldTouched());\n\n /** First day of the visible month. */\n protected readonly viewMonth = computed(() =>\n startOfMonth(this.focusedDate()),\n );\n /** Human label for the visible month, e.g. `July 2026`. */\n protected readonly monthLabel = computed(() =>\n formatDate(this.viewMonth(), 'MMMM yyyy', this.i18n.dateNames),\n );\n /** 6×7 grid of dates for the visible month. */\n protected readonly weeks = computed(() =>\n buildMonthMatrix(this.viewMonth(), this.firstDayOfWeek()),\n );\n /** Weekday column headers ordered from `firstDayOfWeek`. */\n protected readonly weekdays = computed<MkWeekdayHeader[]>(() =>\n this.weeks()[0].map((d) => ({\n short: formatDate(d, 'ddd', this.i18n.dateNames),\n full: getWeekdayFullName(d, this.i18n.dateNames),\n })),\n );\n\n private announcedMonth = this.monthLabel();\n\n constructor() {\n // Follow external value changes into the view/focus. Read focusedDate\n // untracked so this effect only reacts to `value` — otherwise navigating\n // months (which moves focusedDate) would re-run it and snap the view back.\n effect(() => {\n const v = this.value();\n if (v && !isSameDay(v, untracked(this.focusedDate))) {\n this.focusedDate.set(startOfDay(v));\n }\n });\n // Announce month transitions for screen-reader users.\n effect(() => {\n const label = this.monthLabel();\n if (label !== this.announcedMonth) {\n this.announcedMonth = label;\n this.announcer.announce(label);\n }\n });\n }\n\n // --- ControlValueAccessor ---------------------------------------------------\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: Date | null): void {\n this.value.set(value instanceof Date ? startOfDay(value) : null);\n }\n\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n /** Marks the control touched when focus leaves the calendar entirely. */\n protected onFocusout(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (!next || !this.host.nativeElement.contains(next)) this.onTouched();\n }\n\n private initialFocus(): Date {\n const base = this.value() ?? new Date();\n return startOfDay(clampDate(startOfDay(base), this.min(), this.max()));\n }\n\n // --- Day classification ---------------------------------------------------\n protected isOutside(d: Date): boolean {\n return !isSameMonth(d, this.viewMonth());\n }\n\n protected isDisabled(d: Date): boolean {\n if (this.isControlDisabled()) return true;\n const day = startOfDay(d);\n const min = this.min();\n const max = this.max();\n if (min && isBefore(day, startOfDay(min))) return true;\n if (max && isAfter(day, startOfDay(max))) return true;\n return this.disabledDate()?.(d) ?? false;\n }\n\n protected isToday(d: Date): boolean {\n return isSameDay(d, new Date());\n }\n\n protected isSelected(d: Date): boolean {\n const v = this.value();\n return !this.rangeMode() && !!v && isSameDay(d, v);\n }\n\n protected isFocused(d: Date): boolean {\n return isSameDay(d, this.focusedDate());\n }\n\n /** Effective range end while previewing (falls back to the hovered day). */\n private previewEnd(): Date | null {\n return this.rangeEnd() ?? this.hoveredDate();\n }\n\n protected isRangeStart(d: Date): boolean {\n const s = this.rangeStart();\n return this.rangeMode() && !!s && isSameDay(d, s);\n }\n\n protected isRangeEnd(d: Date): boolean {\n if (!this.rangeMode()) return false;\n const end = this.previewEnd();\n return !!end && isSameDay(d, end);\n }\n\n protected isInRange(d: Date): boolean {\n if (!this.rangeMode()) return false;\n const s = this.rangeStart();\n const end = this.previewEnd();\n if (!s || !end) return false;\n const [lo, hi] = isAfter(end, s) ? [s, end] : [end, s];\n const day = startOfDay(d);\n return isAfter(day, startOfDay(lo)) && isBefore(day, startOfDay(hi));\n }\n\n /**\n * `aria-selected` state of a day's gridcell. Single-date mode mirrors\n * `isSelected`; range mode exposes the committed endpoints and the days\n * between them (hover previews stay visual-only so the accessibility tree\n * doesn't churn while the pointer moves).\n */\n protected isAriaSelected(d: Date): boolean {\n if (!this.rangeMode()) return this.isSelected(d);\n const s = this.rangeStart();\n const e = this.rangeEnd();\n if (s && isSameDay(d, s)) return true;\n if (e && isSameDay(d, e)) return true;\n if (!s || !e) return false;\n const [lo, hi] = isAfter(e, s) ? [s, e] : [e, s];\n const day = startOfDay(d);\n return isAfter(day, startOfDay(lo)) && isBefore(day, startOfDay(hi));\n }\n\n protected dayLabel(d: Date): string {\n return formatDate(d, 'MMMM d, yyyy', this.i18n.dateNames);\n }\n\n // --- Interaction ----------------------------------------------------------\n protected select(d: Date): void {\n if (this.isDisabled(d)) return;\n const day = startOfDay(d);\n this.focusedDate.set(day);\n if (!this.rangeMode()) {\n this.value.set(day);\n this.onChange(day);\n }\n this.dateSelected.emit(day);\n this.focusActiveCell();\n }\n\n protected onHover(d: Date): void {\n if (!this.rangeMode()) return;\n const day = startOfDay(d);\n this.hoveredDate.set(day);\n this.dateHovered.emit(day);\n }\n\n protected clearHover(): void {\n if (!this.rangeMode()) return;\n this.hoveredDate.set(null);\n this.dateHovered.emit(null);\n }\n\n protected prevMonth(): void {\n this.moveFocus(addMonths(this.focusedDate(), -1));\n }\n protected nextMonth(): void {\n this.moveFocus(addMonths(this.focusedDate(), 1));\n }\n protected prevYear(): void {\n this.moveFocus(addMonths(this.focusedDate(), -12));\n }\n protected nextYear(): void {\n this.moveFocus(addMonths(this.focusedDate(), 12));\n }\n\n protected onGridKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n const current = this.focusedDate();\n let next: Date | null = null;\n\n switch (e.key) {\n case 'ArrowLeft':\n next = addDays(current, -1);\n break;\n case 'ArrowRight':\n next = addDays(current, 1);\n break;\n case 'ArrowUp':\n next = addDays(current, -7);\n break;\n case 'ArrowDown':\n next = addDays(current, 7);\n break;\n case 'Home':\n next = addDays(current, -this.weekdayOffset(current));\n break;\n case 'End':\n next = addDays(current, 6 - this.weekdayOffset(current));\n break;\n case 'PageUp':\n next = addMonths(current, e.shiftKey ? -12 : -1);\n break;\n case 'PageDown':\n next = addMonths(current, e.shiftKey ? 12 : 1);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n this.select(current);\n return;\n default:\n return;\n }\n\n e.preventDefault();\n if (next) this.moveFocus(next);\n }\n\n private weekdayOffset(d: Date): number {\n return (d.getDay() - this.firstDayOfWeek() + 7) % 7;\n }\n\n private moveFocus(target: Date): void {\n this.focusedDate.set(startOfDay(target));\n this.focusActiveCell();\n }\n\n private focusActiveCell(): void {\n afterNextRender(\n {\n write: () => {\n const el = this.host.nativeElement.querySelector<HTMLElement>(\n '.mk-calendar__day[tabindex=\"0\"]',\n );\n el?.focus();\n },\n },\n { injector: this.injector },\n );\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n this.disabledDate();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` for a date outside `[min]`/`[max]`, and\n * `mkDateFilter` for one rejected by `[disabledDate]`.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!(v instanceof Date) || Number.isNaN(v.getTime())) return null;\n const day = startOfDay(v);\n const min = this.min();\n if (min && isBefore(day, startOfDay(min))) return { mkMinDate: { min, actual: v } };\n const max = this.max();\n if (max && isAfter(day, startOfDay(max))) return { mkMaxDate: { max, actual: v } };\n return this.disabledDate()?.(v) ? { mkDateFilter: true } : null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div class=\"mk-calendar__header\">\n <button\n type=\"button\"\n class=\"mk-calendar__nav\"\n [attr.aria-label]=\"i18n.previousMonth\"\n (click)=\"prevMonth()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n d=\"M15 5l-7 7 7 7\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <span class=\"mk-calendar__label\" [id]=\"labelId\" aria-live=\"polite\">{{\n monthLabel()\n }}</span>\n\n <button\n type=\"button\"\n class=\"mk-calendar__nav\"\n [attr.aria-label]=\"i18n.nextMonth\"\n (click)=\"nextMonth()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n d=\"M9 5l7 7-7 7\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n</div>\n\n<table\n class=\"mk-calendar__grid\"\n role=\"grid\"\n [attr.aria-labelledby]=\"labelId\"\n (keydown)=\"onGridKeydown($event)\"\n>\n <thead>\n <tr>\n @for (wd of weekdays(); track $index) {\n <th class=\"mk-calendar__weekday\" scope=\"col\">\n <abbr [title]=\"wd.full\">{{ wd.short }}</abbr>\n </th>\n }\n </tr>\n </thead>\n <tbody (mouseleave)=\"clearHover()\">\n @for (week of weeks(); track $index) {\n <tr>\n @for (day of week; track day.getTime()) {\n <td\n class=\"mk-calendar__cell\"\n role=\"gridcell\"\n [attr.aria-selected]=\"isAriaSelected(day) || null\"\n >\n <button\n type=\"button\"\n class=\"mk-calendar__day\"\n [class.mk-calendar__day--outside]=\"isOutside(day)\"\n [class.mk-calendar__day--today]=\"isToday(day)\"\n [class.mk-calendar__day--selected]=\"isSelected(day)\"\n [class.mk-calendar__day--range-start]=\"isRangeStart(day)\"\n [class.mk-calendar__day--range-end]=\"isRangeEnd(day)\"\n [class.mk-calendar__day--in-range]=\"isInRange(day)\"\n [class.mk-calendar__day--disabled]=\"isDisabled(day)\"\n [attr.tabindex]=\"isFocused(day) ? 0 : -1\"\n [attr.aria-label]=\"dayLabel(day)\"\n [attr.aria-current]=\"isToday(day) ? 'date' : null\"\n [attr.aria-disabled]=\"isDisabled(day) || null\"\n (click)=\"select(day)\"\n (mouseenter)=\"onHover(day)\"\n >\n <span class=\"mk-calendar__day-num\">{{ day.getDate() }}</span>\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport { MkCalendar } from '../calendar/calendar';\nimport {\n clampDate,\n formatDate,\n isAfter,\n isBefore,\n parseISODate,\n startOfDay,\n} from '../datetime/date-utils';\n\n/**\n * DatePicker — a text field paired with a calendar popover. Type a date (parsed\n * on blur/Enter) or pick one from the `mk-calendar`. Implements\n * `ControlValueAccessor` and a two-way `value` model, so it works with\n * `[(ngModel)]`, reactive forms and `[(value)]`.\n *\n * The calendar opens below the field, closes on Escape / outside click / after\n * a selection, and wires `aria-expanded` / `aria-haspopup` / `aria-invalid`.\n * When nested in an `mk-form-field` it adopts the field's id and aria wiring.\n *\n * ```html\n * <mk-date-picker [(value)]=\"date\" [min]=\"minDate\" clearable />\n * ```\n */\n@Component({\n selector: 'mk-date-picker',\n templateUrl: './date-picker.html',\n styleUrl: './date-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkCalendar, MkAnchoredPanel],\n host: {\n class: 'mk-date-picker',\n '[class.mk-date-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-date-picker--md]': \"effectiveSize() === 'md'\",\n '[class.mk-date-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-date-picker--open]': 'open()',\n '[class.mk-date-picker--invalid]': 'isInvalid()',\n '[class.mk-date-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkDatePicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkDatePicker),\n multi: true,\n },\n ],\n})\nexport class MkDatePicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly inputRef =\n viewChild<ElementRef<HTMLInputElement>>('textInput');\n /** The calendar panel — lives in the top layer once opened. */\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** Two-way selected date. */\n readonly value = model<Date | null>(null);\n /** Earliest selectable date (inclusive). */\n /** Accessible name when the picker is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n protected readonly ariaLabelAttr = computed(() => (this.field ? null : this.ariaLabel() || null));\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable date (inclusive). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Predicate marking individual days as disabled (threaded to the calendar). */\n readonly disabledDate = input<((d: Date) => boolean) | null>(null);\n /** Placeholder shown when empty. */\n readonly placeholder = input(this.i18n.selectDate);\n /** Pattern used to render the selected date in the field. */\n readonly displayFormat = input<string>('MMM d, yyyy');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a date is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** First column of the calendar week (0 = Sunday). */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n /** Editable text mirror of the field. */\n protected readonly inputText = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-date-picker');\n readonly panelId = mkUniqueId('mk-date-picker-panel');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly showClear = computed(\n () => this.clearable() && !!this.value() && !this.isDisabled(),\n );\n\n constructor() {\n // Keep the text field in sync with the model (typing does not touch value).\n effect(() => {\n const v = this.value();\n this.inputText.set(\n v ? formatDate(v, this.displayFormat(), this.i18n.dateNames) : '',\n );\n });\n }\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n afterNextRender(\n {\n write: () => {\n const el = this.panelRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-calendar__day[tabindex=\"0\"]',\n );\n el?.focus();\n },\n },\n { injector: this.injector },\n );\n }\n\n protected close(): void {\n if (this.open()) this.open.set(false);\n }\n\n protected onCalendarPick(date: Date | null): void {\n this.setValue(date);\n this.close();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onInput(event: Event): void {\n this.inputText.set((event.target as HTMLInputElement).value);\n }\n\n protected onInputKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n this.commitInput();\n break;\n case 'ArrowDown':\n e.preventDefault();\n this.openPanel();\n break;\n case 'Escape':\n if (this.open()) {\n e.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n protected clear(): void {\n this.setValue(null);\n this.inputRef()?.nativeElement.focus();\n }\n\n private commitInput(): void {\n const text = this.inputText().trim();\n if (!text) {\n this.setValue(null);\n return;\n }\n const parsed = this.parse(text);\n if (parsed) {\n this.setValue(clampDate(parsed, this.min(), this.max()));\n } else {\n // Invalid entry — revert to the current model's display. The signal may\n // already hold that string (the model did not change), so the `[value]`\n // binding would not re-apply it: write the DOM value directly as well.\n const v = this.value();\n const text = v ? formatDate(v, this.displayFormat(), this.i18n.dateNames) : '';\n this.inputText.set(text);\n const el = this.inputRef()?.nativeElement;\n if (el) el.value = text;\n }\n }\n\n private parse(text: string): Date | null {\n const iso = parseISODate(text);\n if (iso) return iso;\n const ms = Date.parse(text);\n return Number.isNaN(ms) ? null : startOfDay(new Date(ms));\n }\n\n private setValue(date: Date | null): void {\n this.value.set(date);\n this.onChange(date);\n }\n\n protected onFocusOut(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n // Ignore focus moving into the field or the (top-layer) calendar panel.\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.commitInput();\n this.close();\n this.onTouched();\n }\n\n /**\n * Escape pressed inside the (teleported) calendar panel — close and return\n * focus to the input. `preventDefault` + `stopPropagation` keep any outer\n * Escape handling (e.g. a containing dialog) from also firing.\n */\n protected onPanelEscape(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n this.inputRef()?.nativeElement.focus();\n }\n\n /**\n * Focus left the teleported panel. The host `(focusout)` never sees this —\n * the panel lives under `document.body` — so Tab-out of the calendar is\n * handled here: close unless focus moved back into the field or the panel.\n */\n protected onPanelFocusout(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n // Focus fell to a non-focusable spot (body) — keep open; an outside\n // pointerdown is dismissed by the anchored panel itself.\n if (!related) return;\n if (this.host.nativeElement.contains(related)) return;\n if (this.panelRef()?.nativeElement.contains(related)) return;\n this.commitInput();\n this.close();\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: Date | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!(v instanceof Date) || Number.isNaN(v.getTime())) return null;\n const day = startOfDay(v);\n const min = this.min();\n if (min && isBefore(day, startOfDay(min))) return { mkMinDate: { min, actual: v } };\n const max = this.max();\n if (max && isAfter(day, startOfDay(max))) return { mkMaxDate: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-date-picker__field\">\n <input\n #textInput\n type=\"text\"\n class=\"mk-date-picker__input\"\n [id]=\"inputId\"\n [value]=\"inputText()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n autocomplete=\"off\"\n role=\"combobox\"\n [attr.aria-label]=\"ariaLabelAttr()\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onInputKeydown($event)\"\n />\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-date-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear()\"\n >\n <span class=\"mk-date-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"mk-date-picker__toggle\"\n [attr.aria-label]=\"i18n.openCalendar\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg\n class=\"mk-date-picker__icon\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"17\" rx=\"2\" />\n <path d=\"M3 9h18M8 2v4M16 2v4\" />\n </svg>\n </button>\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-date-picker__panel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n [id]=\"panelId\"\n role=\"dialog\"\n [attr.aria-label]=\"i18n.chooseDate\"\n (keydown.escape)=\"onPanelEscape($event)\"\n (focusout)=\"onPanelFocusout($event)\"\n >\n <mk-calendar\n [value]=\"value()\"\n (valueChange)=\"onCalendarPick($event)\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [size]=\"effectiveSize()\"\n [disabledDate]=\"disabledDate()\"\n />\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '@mk-kit/ui/forms';\n\n/** A selectable time option. */\ninterface MkTimeOption {\n /** Canonical `HH:mm` (24h) value. */\n value: string;\n /** Display label (respects `hour12`). */\n label: string;\n}\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : `${n}`;\n}\n\n/**\n * TimePicker — a 24-hour-canonical time field with an editable input plus a\n * scrollable list of times generated from `step`. The time itself is always\n * 24h canonical regardless of the `hour12` display. Implements\n * `ControlValueAccessor` and a two-way `value` model.\n *\n * The form value is either a `HH:mm` string (`\"14:30\"`, default) or a `Date`\n * carrying the time in its **local** hours/minutes (`valueFormat=\"date\"`, for\n * hosts whose model is a datetime — e.g. migrating off Material's\n * `mat-timepicker`); both modes read back either shape and `null` when empty.\n * Only the *emitted* value depends on `valueFormat` — internally the time is\n * always normalised to `HH:mm`, which is also what `min` / `max` compare.\n *\n * In `date` mode seconds and milliseconds are zeroed, and the **date part** is\n * taken from the current model value when that is already a `Date` (so editing\n * the time repeatedly never drifts the day); otherwise today's local date is\n * used. Assign a `Date` first if the day matters.\n *\n * Type a time (`14:30`, `2:30 pm`) or pick from the ARIA listbox\n * (Up/Down/Home/End/Enter/Esc; the active option scrolls into view). When\n * nested in an `mk-form-field` it adopts the field's id and aria wiring.\n *\n * ```html\n * <mk-time-picker [(value)]=\"time\" [step]=\"15\" hour12 clearable />\n * <mk-time-picker valueFormat=\"date\" [(value)]=\"pickupAt\" [step]=\"15\" />\n * ```\n */\n@Component({\n selector: 'mk-time-picker',\n templateUrl: './time-picker.html',\n styleUrl: './time-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-time-picker',\n '[class.mk-time-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-time-picker--md]': \"effectiveSize() === 'md'\",\n '[class.mk-time-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-time-picker--open]': 'open()',\n '[class.mk-time-picker--invalid]': 'isInvalid()',\n '[class.mk-time-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkTimePicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkTimePicker),\n multi: true,\n },\n ],\n})\nexport class MkTimePicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('textInput');\n /** The listbox panel — lives in the top layer once opened. */\n private readonly listRef = viewChild<ElementRef<HTMLElement>>('list');\n\n /**\n * Two-way selected time: a canonical `HH:mm` (24h) string, a `Date` when\n * `valueFormat=\"date\"`, or `null`. Either shape may be assigned in either\n * mode; it is normalised to the configured format.\n */\n readonly value = model<string | Date | null>(null);\n /** Shape of the form value: a `HH:mm` string or a `Date`. */\n /** Accessible name when the picker is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n protected readonly ariaLabelAttr = computed(() => (this.field ? null : this.ariaLabel() || null));\n readonly valueFormat = input<'string' | 'date'>('string');\n /** Earliest selectable time `HH:mm` (inclusive). */\n readonly min = input<string | null, string | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable time `HH:mm` (inclusive). */\n readonly max = input<string | null, string | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Interval between generated options, in minutes. */\n readonly step = input(30, { transform: numberAttribute });\n /** Display 12-hour time with AM/PM (the model stays 24h). */\n readonly hour12 = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input(this.i18n.selectTime);\n /** Show a clear button when a time is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n protected readonly inputText = signal('');\n /** The canonical `HH:mm` time behind whatever shape `value` carries. */\n private readonly time = signal<string | null>(null);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string | Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n /** The last value this component itself wrote into the `value` model. */\n private lastDerived: string | Date | null = null;\n /** The day `date`-mode values land on — see {@link toDate}. */\n private datePart: Date | null = null;\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-time-picker');\n readonly listId = mkUniqueId('mk-time-picker-list');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly describedBy = computed(() => this.field?.describedBy() ?? null);\n protected readonly showClear = computed(\n () => this.clearable() && !!this.time() && !this.isDisabled(),\n );\n\n /** Generated, min/max-filtered list of selectable times. */\n protected readonly options = computed<MkTimeOption[]>(() => {\n const step = Math.max(1, Math.floor(this.step()));\n const min = this.min();\n const max = this.max();\n const out: MkTimeOption[] = [];\n for (let mins = 0; mins < 24 * 60; mins += step) {\n const value = `${pad2(Math.floor(mins / 60))}:${pad2(mins % 60)}`;\n if (min && value < min) continue;\n if (max && value > max) continue;\n out.push({ value, label: this.display(value) });\n }\n return out;\n });\n\n protected readonly selectedIndex = computed(() =>\n this.options().findIndex((o) => o.value === this.time()),\n );\n\n constructor() {\n effect(() => {\n const v = this.time();\n // hour12 is read so the label follows the display mode.\n this.inputText.set(v ? this.display(v) : '');\n });\n // Parse values assigned from outside ([(value)] writes we didn't derive),\n // and re-shape the model when `valueFormat` changes.\n effect(() => {\n const v = this.value();\n const external = v !== this.lastDerived;\n this.valueFormat();\n untracked(() => {\n if (external) this.applyExternal(v);\n this.deriveValue(false);\n });\n });\n }\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n private display(hhmm: string): string {\n const [h, m] = hhmm.split(':').map(Number);\n if (this.hour12()) {\n const ap = h < 12 ? 'AM' : 'PM';\n const hh = h % 12 || 12;\n return `${hh}:${pad2(m)} ${ap}`;\n }\n return `${pad2(h)}:${pad2(m)}`;\n }\n\n private parse(text: string): string | null {\n const m = /^\\s*(\\d{1,2})(?::(\\d{2}))?\\s*(am|pm)?\\s*$/i.exec(text);\n if (!m) return null;\n let h = Number(m[1]);\n const min = m[2] ? Number(m[2]) : 0;\n const ap = m[3]?.toLowerCase();\n if (ap) {\n if (h < 1 || h > 12) return null;\n if (ap === 'pm' && h !== 12) h += 12;\n if (ap === 'am' && h === 12) h = 0;\n }\n if (h > 23 || min > 59) return null;\n return `${pad2(h)}:${pad2(min)}`;\n }\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openList();\n }\n\n protected openList(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n const sel = this.selectedIndex();\n this.activeIndex.set(sel >= 0 ? sel : 0);\n this.scrollActiveIntoView();\n }\n\n protected close(): void {\n if (this.open()) {\n this.open.set(false);\n this.activeIndex.set(-1);\n }\n }\n\n protected selectOption(index: number): void {\n const opt = this.options()[index];\n if (!opt) return;\n this.setValue(opt.value);\n this.close();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected clear(): void {\n this.setValue(null);\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onInput(event: Event): void {\n this.inputText.set((event.target as HTMLInputElement).value);\n }\n\n protected onInputKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n\n if (!this.open()) {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n this.openList();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n this.commitInput();\n }\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.moveActive(-1);\n break;\n case 'Home':\n e.preventDefault();\n this.activeIndex.set(0);\n this.scrollActiveIntoView();\n break;\n case 'End':\n e.preventDefault();\n this.activeIndex.set(this.options().length - 1);\n this.scrollActiveIntoView();\n break;\n case 'Enter':\n e.preventDefault();\n if (this.activeIndex() >= 0) this.selectOption(this.activeIndex());\n else this.commitInput();\n break;\n case 'Escape':\n e.preventDefault();\n this.close();\n break;\n }\n }\n\n private moveActive(delta: number): void {\n const len = this.options().length;\n if (!len) return;\n const next = (this.activeIndex() + delta + len) % len;\n this.activeIndex.set(next);\n this.scrollActiveIntoView();\n }\n\n private commitInput(): void {\n const text = this.inputText().trim();\n if (!text) {\n this.setValue(null);\n this.close();\n return;\n }\n const parsed = this.parse(text);\n if (parsed && this.withinBounds(parsed)) {\n this.setValue(parsed);\n } else {\n const v = this.time();\n this.inputText.set(v ? this.display(v) : '');\n }\n this.close();\n }\n\n private withinBounds(value: string): boolean {\n const min = this.min();\n const max = this.max();\n if (min && value < min) return false;\n if (max && value > max) return false;\n return true;\n }\n\n // --- Value plumbing -------------------------------------------------------\n\n private setValue(value: string | null): void {\n this.time.set(value);\n this.deriveValue(true);\n }\n\n /** Compute the outward value and push it to the model (+ form when `emit`). */\n private deriveValue(emit: boolean): void {\n const hhmm = this.time();\n const next = hhmm === null ? null : this.valueFormat() === 'date' ? this.toDate(hhmm) : hhmm;\n // Keep the previous instance when it means the same time, so repeated\n // edits don't churn `Date` identities (nor the date part they carry).\n if (!this.sameValue(next, this.lastDerived) || this.value() !== this.lastDerived) {\n this.lastDerived = next;\n this.value.set(next);\n }\n if (emit) this.onChange(this.lastDerived);\n }\n\n private sameValue(a: string | Date | null, b: string | Date | null): boolean {\n if (a === b) return true;\n if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime();\n return false;\n }\n\n /**\n * Interpret an externally-assigned value (`writeValue` or `[value]`): it\n * seeds the canonical time and, when it is a `Date`, the day that `date`-mode\n * values land on.\n */\n private applyExternal(v: unknown): void {\n this.datePart = v instanceof Date && !Number.isNaN(v.getTime()) ? new Date(v) : null;\n this.time.set(this.toHhmm(v));\n }\n\n /** Normalise any accepted shape to canonical `HH:mm`, or `null`. */\n private toHhmm(v: unknown): string | null {\n if (v instanceof Date) {\n return Number.isNaN(v.getTime()) ? null : `${pad2(v.getHours())}:${pad2(v.getMinutes())}`;\n }\n if (typeof v !== 'string' || !v.trim()) return null;\n return this.parse(v);\n }\n\n /**\n * Put `hh:mm` on a `Date`. The date part comes from the current value when\n * that is already a `Date` (so repeated edits never drift the day),\n * otherwise from today — always via the local accessors, never the UTC ones.\n */\n private toDate(hhmm: string): Date {\n const [h, m] = hhmm.split(':').map(Number);\n const base = this.datePart ? new Date(this.datePart) : new Date();\n base.setHours(h, m, 0, 0);\n this.datePart = base;\n return base;\n }\n\n private scrollActiveIntoView(): void {\n afterNextRender(\n {\n write: () => {\n const el = this.listRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-time-picker__option--active',\n );\n el?.scrollIntoView({ block: 'nearest' });\n },\n },\n { injector: this.injector },\n );\n }\n\n protected onFocusOut(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.listRef()?.nativeElement.contains(related)) return;\n this.commitInput();\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | Date | null): void {\n this.applyExternal(value);\n this.deriveValue(false);\n }\n registerOnChange(fn: (value: string | Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinTime` / `mkMaxTime` against the `[min]` and `[max]` inputs.\n * The control value is normalised to `HH:mm` first (so a `Date` model\n * validates too); both sides are then zero-padded `HH:mm`, so a\n * lexicographic compare is a chronological one.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = this.toHhmm(control.value);\n if (!v) return null;\n const min = this.min();\n if (min && v < min) return { mkMinTime: { min, actual: v } };\n const max = this.max();\n if (max && v > max) return { mkMaxTime: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-time-picker__field\">\n <input\n #textInput\n type=\"text\"\n class=\"mk-time-picker__input\"\n [id]=\"inputId\"\n [value]=\"inputText()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n autocomplete=\"off\"\n role=\"combobox\"\n [attr.aria-label]=\"ariaLabelAttr()\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"none\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"\n open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onInputKeydown($event)\"\n />\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-time-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear()\"\n >\n <span class=\"mk-time-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"mk-time-picker__toggle\"\n [attr.aria-label]=\"i18n.openTimeList\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg\n class=\"mk-time-picker__icon\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </svg>\n </button>\n</div>\n\n@if (open()) {\n <ul\n #list\n class=\"mk-time-picker__list\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n [matchWidth]=\"true\"\n (dismiss)=\"close()\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @for (opt of options(); track opt.value; let i = $index) {\n <li\n class=\"mk-time-picker__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"i === selectedIndex()\"\n [class.mk-time-picker__option--active]=\"i === activeIndex()\"\n [class.mk-time-picker__option--selected]=\"i === selectedIndex()\"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"activeIndex.set(i)\"\n (click)=\"selectOption(i)\"\n >\n {{ opt.label }}\n </li>\n } @empty {\n <li class=\"mk-time-picker__empty\" role=\"presentation\">\n {{ i18n.noOptions }}\n </li>\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport { MkCalendar } from '../calendar/calendar';\nimport {\n formatDate,\n isSameDay,\n parseISODate,\n startOfDay,\n} from '../datetime/date-utils';\n\n/** A selectable time-of-day option in the panel's list. */\ninterface MkTimeOption {\n /** Minutes since midnight. */\n minutes: number;\n /** Display label (respects `hour12`). */\n label: string;\n /** Stable id for `aria-activedescendant`. */\n id: string;\n}\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : `${n}`;\n}\n\n/** Minutes since local midnight, ignoring seconds. */\nfunction minutesOfDay(d: Date): number {\n return d.getHours() * 60 + d.getMinutes();\n}\n\n/** Same instant floored to the minute — bounds compare at minute precision. */\nfunction toMinute(d: Date): number {\n const c = new Date(d);\n c.setSeconds(0, 0);\n return c.getTime();\n}\n\n/** Put `minutes` since midnight onto `day`'s local date. */\nfunction combine(day: Date, minutes: number): Date {\n return new Date(\n day.getFullYear(),\n day.getMonth(),\n day.getDate(),\n Math.floor(minutes / 60),\n minutes % 60,\n 0,\n 0,\n );\n}\n\n/** Parse `14:30`, `2:30 pm`, `9` … into minutes since midnight, or null. */\nfunction parseTime(text: string): number | null {\n const m = /^\\s*(\\d{1,2})(?::(\\d{2}))?\\s*(am|pm)?\\s*$/i.exec(text);\n if (!m) return null;\n let h = Number(m[1]);\n const min = m[2] ? Number(m[2]) : 0;\n const ap = m[3]?.toLowerCase();\n if (ap) {\n if (h < 1 || h > 12) return null;\n if (ap === 'pm' && h !== 12) h += 12;\n if (ap === 'am' && h === 12) h = 0;\n }\n if (h > 23 || min > 59) return null;\n return h * 60 + min;\n}\n\n/**\n * DateTimePicker — one field for a date **and** a time of day. The panel pairs\n * an `mk-calendar` with a time list generated from `step`; the value is a\n * single `Date` carrying both parts in local time (seconds and milliseconds\n * zeroed). Implements `ControlValueAccessor` and a two-way `value` model, so it\n * works with `[(ngModel)]`, reactive forms and `[(value)]`.\n *\n * Interaction: picking a day keeps the panel open and — when a value already\n * exists — moves that value to the new day, preserving its time; picking a\n * time commits and closes. With no value yet, the day is held until a time is\n * chosen (so a half-picked datetime is never emitted). Typing also works:\n * `2026-08-26 14:30`, `2026-08-26T09:05`, `Aug 26, 2026 2:30 pm` and a bare\n * ISO date (→ midnight) are parsed on Enter/blur.\n *\n * `min` / `max` bound the whole instant at minute precision: the calendar\n * greys out days outside the range and the time list hides times outside it\n * on the boundary days. Validation reports `mkMinDate` / `mkMaxDate`.\n *\n * When nested in an `mk-form-field` it adopts the field's id and aria wiring.\n *\n * ```html\n * <mk-datetime-picker [(value)]=\"startsAt\" [step]=\"15\" [min]=\"now\" clearable />\n * <mk-datetime-picker [(value)]=\"startsAt\" hour12 />\n * ```\n */\n@Component({\n selector: 'mk-datetime-picker',\n templateUrl: './datetime-picker.html',\n styleUrl: './datetime-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkCalendar, MkAnchoredPanel],\n host: {\n class: 'mk-datetime-picker',\n '[class.mk-datetime-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-datetime-picker--md]': \"effectiveSize() === 'md'\",\n '[class.mk-datetime-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-datetime-picker--open]': 'open()',\n '[class.mk-datetime-picker--invalid]': 'isInvalid()',\n '[class.mk-datetime-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkDateTimePicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkDateTimePicker),\n multi: true,\n },\n ],\n})\nexport class MkDateTimePicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly inputRef =\n viewChild<ElementRef<HTMLInputElement>>('textInput');\n /** The panel — lives in the top layer once opened. */\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n private readonly timesRef = viewChild<ElementRef<HTMLElement>>('times');\n\n /** Two-way selected date-time (local; seconds and ms are zero). */\n readonly value = model<Date | null>(null);\n /** Earliest selectable instant (inclusive, minute precision). */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable instant (inclusive, minute precision). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Predicate marking individual days as disabled (threaded to the calendar). */\n readonly disabledDate = input<((d: Date) => boolean) | null>(null);\n /** Placeholder shown when empty. */\n readonly placeholder = input(this.i18n.selectDateTime);\n /**\n * Pattern used to render the value in the field. Defaults to\n * `'MMM d, yyyy HH:mm'`, or `'MMM d, yyyy h:mm a'` when `hour12` is set.\n */\n readonly displayFormat = input<string | null>(null);\n /** Interval between generated time options, in minutes. */\n readonly step = input(30, { transform: numberAttribute });\n /** Display 12-hour times with AM/PM (the model is a `Date` either way). */\n readonly hour12 = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a value is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** First column of the calendar week (0 = Sunday). */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n /** Editable text mirror of the field. */\n protected readonly inputText = signal('');\n /** Keyboard-active option in the time list (index into `options`). */\n protected readonly activeIndex = signal(-1);\n /** Day picked in the calendar while there is no value yet. */\n private readonly pendingDay = signal<Date | null>(null);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-datetime-picker');\n readonly panelId = mkUniqueId('mk-datetime-picker-panel');\n readonly listId = mkUniqueId('mk-datetime-picker-times');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly showClear = computed(\n () => this.clearable() && !!this.value() && !this.isDisabled(),\n );\n protected readonly effectiveFormat = computed(\n () =>\n this.displayFormat() ??\n (this.hour12() ? 'MMM d, yyyy h:mm a' : 'MMM d, yyyy HH:mm'),\n );\n\n /** The day the calendar shows as selected: the value's day, else the pending one. */\n protected readonly calendarValue = computed<Date | null>(() => {\n const v = this.value();\n return v ? startOfDay(v) : this.pendingDay();\n });\n /** Day-granular bounds for the calendar (inclusive). */\n protected readonly calendarMin = computed(() => {\n const m = this.min();\n return m ? startOfDay(m) : null;\n });\n protected readonly calendarMax = computed(() => {\n const m = this.max();\n return m ? startOfDay(m) : null;\n });\n\n /**\n * Generated time options. On the `min` / `max` boundary day the list only\n * offers times inside the bound; on other days every step is listed.\n */\n protected readonly options = computed<MkTimeOption[]>(() => {\n const step = Math.max(1, Math.floor(this.step()));\n const day = this.calendarValue();\n const min = this.min();\n const max = this.max();\n const lo = day && min && isSameDay(day, min) ? minutesOfDay(min) : 0;\n const hi = day && max && isSameDay(day, max) ? minutesOfDay(max) : 24 * 60 - 1;\n const out: MkTimeOption[] = [];\n for (let mins = 0; mins < 24 * 60; mins += step) {\n if (mins < lo || mins > hi) continue;\n out.push({\n minutes: mins,\n label: this.displayTime(mins),\n id: `${this.listId}-opt-${mins}`,\n });\n }\n return out;\n });\n\n protected readonly selectedIndex = computed(() => {\n const v = this.value();\n if (!v) return -1;\n const mins = minutesOfDay(v);\n return this.options().findIndex((o) => o.minutes === mins);\n });\n\n constructor() {\n // Keep the text field in sync with the model (typing does not touch value).\n effect(() => {\n const v = this.value();\n this.inputText.set(\n v ? formatDate(v, this.effectiveFormat(), this.i18n.dateNames) : '',\n );\n });\n }\n\n // --- Display / parsing ------------------------------------------------------\n\n private displayTime(mins: number): string {\n const h = Math.floor(mins / 60);\n const m = mins % 60;\n if (this.hour12()) {\n const ap = h < 12 ? 'AM' : 'PM';\n return `${h % 12 || 12}:${pad2(m)} ${ap}`;\n }\n return `${pad2(h)}:${pad2(m)}`;\n }\n\n /**\n * Accepts `YYYY-MM-DD[ T]HH:mm[ am|pm]`, a bare ISO date (→ midnight), any\n * `Date.parse`-able date followed by a time, or a full `Date.parse`-able\n * string. Seconds are dropped.\n */\n private parse(text: string): Date | null {\n const iso = /^(\\d{4}-\\d{2}-\\d{2})(?:[T\\s]+(.+))?$/.exec(text);\n if (iso) {\n const day = parseISODate(iso[1]);\n if (!day) return null;\n if (!iso[2]) return day;\n const mins = parseTime(iso[2]);\n return mins === null ? null : combine(day, mins);\n }\n const split = /^(.*\\S)[\\s,]+(\\d{1,2}(?::\\d{2})?\\s*(?:am|pm)?)$/i.exec(text);\n if (split) {\n const mins = parseTime(split[2]);\n const ms = Date.parse(split[1]);\n if (mins !== null && !Number.isNaN(ms)) {\n return combine(startOfDay(new Date(ms)), mins);\n }\n }\n const ms = Date.parse(text);\n if (Number.isNaN(ms)) return null;\n const d = new Date(ms);\n d.setSeconds(0, 0);\n return d;\n }\n\n private clamp(d: Date): Date {\n const min = this.min();\n const max = this.max();\n if (min && toMinute(d) < toMinute(min)) return combine(min, minutesOfDay(min));\n if (max && toMinute(d) > toMinute(max)) return combine(max, minutesOfDay(max));\n return d;\n }\n\n // --- Panel ---------------------------------------------------------------\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n const sel = this.selectedIndex();\n this.activeIndex.set(sel >= 0 ? sel : this.nearestIndex(new Date()));\n afterNextRender(\n {\n write: () => {\n const el = this.panelRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-calendar__day[tabindex=\"0\"]',\n );\n el?.focus();\n this.scrollActiveIntoView();\n },\n },\n { injector: this.injector },\n );\n }\n\n protected close(): void {\n if (this.open()) {\n this.open.set(false);\n this.activeIndex.set(-1);\n }\n }\n\n /** Index of the first option at or after `d`'s time of day (for the initial highlight). */\n private nearestIndex(d: Date): number {\n const mins = minutesOfDay(d);\n const i = this.options().findIndex((o) => o.minutes >= mins);\n return i >= 0 ? i : Math.max(0, this.options().length - 1);\n }\n\n protected onCalendarPick(day: Date | null): void {\n if (!day) return;\n const current = this.value();\n if (current) {\n this.setValue(this.clamp(combine(day, minutesOfDay(current))));\n } else {\n this.pendingDay.set(startOfDay(day));\n }\n // Hand focus to the time list so the second half of the pick is one\n // keystroke away; the highlighted option follows the (new) value.\n const sel = this.selectedIndex();\n this.activeIndex.set(sel >= 0 ? sel : this.nearestIndex(current ?? new Date()));\n afterNextRender(\n {\n write: () => {\n this.timesRef()?.nativeElement.focus();\n this.scrollActiveIntoView();\n },\n },\n { injector: this.injector },\n );\n }\n\n protected selectTime(index: number): void {\n const opt = this.options()[index];\n if (!opt) return;\n const day = this.calendarValue() ?? startOfDay(new Date());\n this.setValue(this.clamp(combine(day, opt.minutes)));\n this.close();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onListKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.moveActive(-1);\n break;\n case 'Home':\n e.preventDefault();\n this.activeIndex.set(0);\n this.scrollActiveIntoView();\n break;\n case 'End':\n e.preventDefault();\n this.activeIndex.set(this.options().length - 1);\n this.scrollActiveIntoView();\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (this.activeIndex() >= 0) this.selectTime(this.activeIndex());\n break;\n }\n }\n\n private moveActive(delta: number): void {\n const len = this.options().length;\n if (!len) return;\n const next = (this.activeIndex() + delta + len) % len;\n this.activeIndex.set(next);\n this.scrollActiveIntoView();\n }\n\n private scrollActiveIntoView(): void {\n afterNextRender(\n {\n write: () => {\n const el = this.timesRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-datetime-picker__option--active',\n );\n el?.scrollIntoView({ block: 'nearest' });\n },\n },\n { injector: this.injector },\n );\n }\n\n // --- Field ----------------------------------------------------------------\n\n protected onInput(event: Event): void {\n this.inputText.set((event.target as HTMLInputElement).value);\n }\n\n protected onInputKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n this.commitInput();\n break;\n case 'ArrowDown':\n e.preventDefault();\n this.openPanel();\n break;\n case 'Escape':\n if (this.open()) {\n e.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n protected clear(): void {\n this.pendingDay.set(null);\n this.setValue(null);\n this.inputRef()?.nativeElement.focus();\n }\n\n private commitInput(): void {\n const text = this.inputText().trim();\n if (!text) {\n this.setValue(null);\n return;\n }\n const parsed = this.parse(text);\n if (parsed) {\n this.setValue(this.clamp(parsed));\n } else {\n // Invalid entry — revert to the current model's display. The signal may\n // already hold that string (the model did not change), so the `[value]`\n // binding would not re-apply it: write the DOM value directly as well.\n const v = this.value();\n const text = v ? formatDate(v, this.effectiveFormat(), this.i18n.dateNames) : '';\n this.inputText.set(text);\n const el = this.inputRef()?.nativeElement;\n if (el) el.value = text;\n }\n }\n\n private setValue(date: Date | null): void {\n if (date) this.pendingDay.set(null);\n this.value.set(date);\n this.onChange(date);\n }\n\n protected onFocusOut(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n // Ignore focus moving into the field or the (top-layer) panel.\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.commitInput();\n this.close();\n this.onTouched();\n }\n\n /**\n * Escape pressed inside the (teleported) panel — close and return focus to\n * the input. `preventDefault` + `stopPropagation` keep any outer Escape\n * handling (e.g. a containing dialog) from also firing.\n */\n protected onPanelEscape(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n this.inputRef()?.nativeElement.focus();\n }\n\n /**\n * Focus left the teleported panel. The host `(focusout)` never sees this —\n * the panel lives under `document.body` — so Tab-out is handled here: close\n * unless focus moved back into the field or stayed inside the panel.\n */\n protected onPanelFocusout(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n if (!related) return;\n if (this.host.nativeElement.contains(related)) return;\n if (this.panelRef()?.nativeElement.contains(related)) return;\n this.commitInput();\n this.close();\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: Date | null): void {\n this.pendingDay.set(null);\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs,\n * comparing whole instants at minute precision.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!(v instanceof Date) || Number.isNaN(v.getTime())) return null;\n const t = toMinute(v);\n const min = this.min();\n if (min && t < toMinute(min)) return { mkMinDate: { min, actual: v } };\n const max = this.max();\n if (max && t > toMinute(max)) return { mkMaxDate: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-datetime-picker__field\">\n <input\n #textInput\n type=\"text\"\n class=\"mk-datetime-picker__input\"\n [id]=\"inputId\"\n [value]=\"inputText()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n autocomplete=\"off\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onInputKeydown($event)\"\n />\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-datetime-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear()\"\n >\n <span class=\"mk-datetime-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"mk-datetime-picker__toggle\"\n [attr.aria-label]=\"i18n.openDateTimePicker\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg\n class=\"mk-datetime-picker__icon\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path d=\"M3 9h18M8 2v4M16 2v4\" />\n <path d=\"M21 12V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h6\" />\n <circle cx=\"17.5\" cy=\"17.5\" r=\"4.5\" />\n <path d=\"M17.5 15.5v2l1.5 1\" />\n </svg>\n </button>\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-datetime-picker__panel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n [id]=\"panelId\"\n role=\"dialog\"\n [attr.aria-label]=\"i18n.chooseDateTime\"\n (keydown.escape)=\"onPanelEscape($event)\"\n (focusout)=\"onPanelFocusout($event)\"\n >\n <mk-calendar\n [value]=\"calendarValue()\"\n (valueChange)=\"onCalendarPick($event)\"\n [min]=\"calendarMin()\"\n [max]=\"calendarMax()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [size]=\"effectiveSize()\"\n [disabledDate]=\"disabledDate()\"\n />\n\n <ul\n #times\n class=\"mk-datetime-picker__times\"\n [id]=\"listId\"\n role=\"listbox\"\n tabindex=\"0\"\n [attr.aria-label]=\"i18n.chooseTime\"\n [attr.aria-activedescendant]=\"\n activeIndex() >= 0 && options()[activeIndex()] ? options()[activeIndex()].id : null\n \"\n (keydown)=\"onListKeydown($event)\"\n >\n @for (opt of options(); track opt.minutes; let i = $index) {\n <li\n class=\"mk-datetime-picker__option\"\n [id]=\"opt.id\"\n role=\"option\"\n [attr.aria-selected]=\"i === selectedIndex()\"\n [class.mk-datetime-picker__option--active]=\"i === activeIndex()\"\n [class.mk-datetime-picker__option--selected]=\"i === selectedIndex()\"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"activeIndex.set(i)\"\n (click)=\"selectTime(i)\"\n >\n {{ opt.label }}\n </li>\n } @empty {\n <li class=\"mk-datetime-picker__empty\" role=\"presentation\">\n {{ i18n.noOptions }}\n </li>\n }\n </ul>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport { MkCalendar } from '../calendar/calendar';\nimport { formatDate, isAfter, isBefore, startOfDay } from '../datetime/date-utils';\n\n/** A selected date range. Either endpoint may be `null` while incomplete. */\nexport interface MkDateRange {\n start: Date | null;\n end: Date | null;\n}\n\n/**\n * DateRangePicker — select a start + end date from a single calendar popover.\n * The first click sets the start, the second sets the end (endpoints are\n * swapped if picked in reverse), and the hovered range is previewed live.\n * Implements `ControlValueAccessor` and a two-way `value` model of\n * {@link MkDateRange}.\n *\n * ```html\n * <mk-date-range-picker [(value)]=\"range\" [min]=\"minDate\" clearable />\n * ```\n */\n@Component({\n selector: 'mk-date-range-picker',\n templateUrl: './date-range-picker.html',\n styleUrl: './date-range-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkCalendar, MkAnchoredPanel],\n host: {\n class: 'mk-date-range-picker',\n '[class.mk-date-range-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-date-range-picker--md]': \"effectiveSize() === 'md'\",\n '[class.mk-date-range-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-date-range-picker--open]': 'open()',\n '[class.mk-date-range-picker--invalid]': 'isInvalid()',\n '[class.mk-date-range-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkDateRangePicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkDateRangePicker),\n multi: true,\n },\n ],\n})\nexport class MkDateRangePicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n /** The calendar panel — lives in the top layer once opened. */\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** Two-way selected range. */\n readonly value = model<MkDateRange>({ start: null, end: null });\n /** Earliest selectable date (inclusive). */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable date (inclusive). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Predicate marking individual days as disabled. */\n readonly disabledDate = input<((d: Date) => boolean) | null>(null);\n /** Placeholder shown when no range is selected. */\n readonly placeholder = input(this.i18n.selectRange);\n /** Pattern used to render each endpoint. */\n readonly displayFormat = input<string>('MMM d, yyyy');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a range is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** First column of the calendar week (0 = Sunday). */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n /** In-progress start endpoint (drives calendar highlighting). */\n protected readonly selStart = signal<Date | null>(null);\n /** In-progress end endpoint. */\n protected readonly selEnd = signal<Date | null>(null);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: MkDateRange) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-date-range');\n readonly panelId = mkUniqueId('mk-date-range-panel');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly showClear = computed(() => {\n const v = this.value();\n return this.clearable() && !!(v.start || v.end) && !this.isDisabled();\n });\n\n /** Display label, e.g. `Jul 1, 2026 – Jul 9, 2026`. */\n protected readonly displayLabel = computed(() => {\n const { start, end } = this.value();\n const fmt = this.displayFormat();\n if (!start && !end) return '';\n const names = this.i18n.dateNames;\n const s = start ? formatDate(start, fmt, names) : '…';\n const e = end ? formatDate(end, fmt, names) : '…';\n return `${s} – ${e}`;\n });\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n const v = this.value();\n this.selStart.set(v.start);\n this.selEnd.set(v.end);\n this.open.set(true);\n afterNextRender(\n {\n write: () => {\n const el = this.panelRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-calendar__day[tabindex=\"0\"]',\n );\n el?.focus();\n },\n },\n { injector: this.injector },\n );\n }\n\n protected close(): void {\n if (this.open()) this.open.set(false);\n }\n\n protected onPick(date: Date): void {\n const start = this.selStart();\n const end = this.selEnd();\n const day = startOfDay(date);\n\n if (!start || (start && end)) {\n // Begin a fresh range.\n this.selStart.set(day);\n this.selEnd.set(null);\n return;\n }\n\n // Complete the range, swapping if picked in reverse.\n if (isBefore(day, start)) {\n this.selStart.set(day);\n this.selEnd.set(start);\n } else {\n this.selEnd.set(day);\n }\n this.commit();\n this.close();\n this.triggerRef()?.nativeElement.focus();\n }\n\n protected clear(): void {\n this.selStart.set(null);\n this.selEnd.set(null);\n this.setValue({ start: null, end: null });\n this.triggerRef()?.nativeElement.focus();\n }\n\n private commit(): void {\n this.setValue({ start: this.selStart(), end: this.selEnd() });\n }\n\n private setValue(range: MkDateRange): void {\n this.value.set(range);\n this.onChange(range);\n }\n\n protected onFocusOut(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n /**\n * Escape pressed inside the (teleported) calendar panel — close and return\n * focus to the trigger. `preventDefault` + `stopPropagation` keep any outer\n * Escape handling (e.g. a containing dialog) from also firing.\n */\n protected onPanelEscape(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n this.triggerRef()?.nativeElement.focus();\n }\n\n /**\n * Focus left the teleported panel. The host `(focusout)` never sees this —\n * the panel lives under `document.body` — so Tab-out of the calendar is\n * handled here: close unless focus moved back into the field or the panel.\n */\n protected onPanelFocusout(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n // Focus fell to a non-focusable spot (body) — keep open; an outside\n // pointerdown is dismissed by the anchored panel itself.\n if (!related) return;\n if (this.host.nativeElement.contains(related)) return;\n if (this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: MkDateRange | null): void {\n this.value.set(value ?? { start: null, end: null });\n }\n registerOnChange(fn: (value: MkDateRange) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n this.disabledDate();\n });\n\n /**\n * Reports `mkDateRangeIncomplete` for a half-picked range, `mkMinDate` /\n * `mkMaxDate` for ends outside `[min]`/`[max]`, and `mkDateFilter` for an\n * end rejected by `[disabledDate]`. A fully empty range passes; compose\n * with `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n const start = v?.start instanceof Date ? v.start : null;\n const end = v?.end instanceof Date ? v.end : null;\n if (!start && !end) return null;\n if (!start || !end) return { mkDateRangeIncomplete: true };\n\n const min = this.min();\n if (min && isBefore(startOfDay(start), startOfDay(min))) {\n return { mkMinDate: { min, actual: start } };\n }\n const max = this.max();\n if (max && isAfter(startOfDay(end), startOfDay(max))) {\n return { mkMaxDate: { max, actual: end } };\n }\n const filter = this.disabledDate();\n if (filter?.(start) || filter?.(end)) return { mkDateFilter: true };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-date-range-picker__field\">\n <button\n #trigger\n type=\"button\"\n class=\"mk-date-range-picker__trigger\"\n [id]=\"triggerId\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n @if (displayLabel()) {\n <span class=\"mk-date-range-picker__value\">{{ displayLabel() }}</span>\n } @else {\n <span class=\"mk-date-range-picker__value mk-date-range-picker__value--placeholder\">{{\n placeholder()\n }}</span>\n }\n </button>\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-date-range-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear()\"\n >\n <span class=\"mk-date-range-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"mk-date-range-picker__toggle\"\n [attr.aria-label]=\"i18n.openCalendar\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg\n class=\"mk-date-range-picker__icon\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"17\" rx=\"2\" />\n <path d=\"M3 9h18M8 2v4M16 2v4\" />\n </svg>\n </button>\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-date-range-picker__panel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n [id]=\"panelId\"\n role=\"dialog\"\n [attr.aria-label]=\"i18n.chooseDateRange\"\n (keydown.escape)=\"onPanelEscape($event)\"\n (focusout)=\"onPanelFocusout($event)\"\n >\n <mk-calendar\n [rangeMode]=\"true\"\n [rangeStart]=\"selStart()\"\n [rangeEnd]=\"selEnd()\"\n (dateSelected)=\"onPick($event)\"\n [min]=\"min()\"\n [max]=\"max()\"\n [disabledDate]=\"disabledDate()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [size]=\"effectiveSize()\"\n />\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport {\n endOfMonth,\n formatDate,\n isAfter,\n isBefore,\n startOfMonth,\n} from '../datetime/date-utils';\n\n/** Selection granularity for {@link MkMonthPicker}. */\nexport type MkMonthPickerMode = 'month' | 'year';\n\ninterface Cell {\n label: string;\n /** Year (both modes) and month index (month mode only). */\n year: number;\n month: number;\n disabled: boolean;\n selected: boolean;\n}\n\n/**\n * MonthPicker — a compact field + popover for picking a **month** (`MMM yyyy`)\n * or a **year**. The panel shows a 12-month grid (with year nav) or a 12-year\n * grid (with decade nav). Value is a `Date` at the first day of the selection.\n * Implements `ControlValueAccessor` + a two-way `value` model; the panel renders\n * in the top layer so it is never clipped.\n *\n * ```html\n * <mk-month-picker [(value)]=\"month\" />\n * <mk-month-picker mode=\"year\" [(value)]=\"year\" />\n * ```\n */\n@Component({\n selector: 'mk-month-picker',\n templateUrl: './month-picker.html',\n styleUrl: './month-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-month-picker',\n '[class.mk-month-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-month-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-month-picker--open]': 'open()',\n '[class.mk-month-picker--invalid]': 'isInvalid()',\n '[class.mk-month-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkMonthPicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkMonthPicker),\n multi: true,\n },\n ],\n})\nexport class MkMonthPicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n private readonly cellRefs =\n viewChildren<ElementRef<HTMLButtonElement>>('cell');\n\n /** Two-way selected date (first of the month / year). */\n readonly value = model<Date | null>(null);\n /** Pick a month or a whole year. */\n readonly mode = input<MkMonthPickerMode>('month');\n /** Earliest selectable date. */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable date. */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('');\n /** Display pattern (defaults to `MMM yyyy` / `yyyy`). */\n readonly displayFormat = input<string>('');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a value is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n /** The year currently shown in the panel (base for the month/decade grid). */\n protected readonly viewYear = signal(new Date().getFullYear());\n protected readonly activeIndex = signal(0);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-month-picker');\n readonly panelId = mkUniqueId('mk-month-picker-panel');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n protected readonly resolvedPlaceholder = computed(\n () =>\n this.placeholder() ||\n (this.mode() === 'year' ? this.i18n.selectYear : this.i18n.selectMonth),\n );\n private readonly pattern = computed(\n () => this.displayFormat() || (this.mode() === 'year' ? 'yyyy' : 'MMM yyyy'),\n );\n protected readonly displayLabel = computed(() => {\n const v = this.value();\n return v ? formatDate(v, this.pattern(), this.i18n.dateNames) : '';\n });\n\n /** The decade start when in year mode. */\n private readonly decadeStart = computed(\n () => Math.floor(this.viewYear() / 12) * 12,\n );\n\n /** Header label (year, or decade range). */\n protected readonly headerLabel = computed(() => {\n if (this.mode() === 'year') {\n const s = this.decadeStart();\n return `${s} – ${s + 11}`;\n }\n return `${this.viewYear()}`;\n });\n\n /** Abbreviated month labels for the grid, from the active locale. */\n private readonly months = this.i18n.dateNames.monthsShort;\n\n /** The 12 grid cells (months or years). */\n protected readonly cells = computed<Cell[]>(() => {\n const value = this.value();\n if (this.mode() === 'year') {\n const start = this.decadeStart();\n return Array.from({ length: 12 }, (_, i) => {\n const year = start + i;\n const date = new Date(year, 0, 1);\n return {\n label: `${year}`,\n year,\n month: 0,\n disabled: this.outOfRange(date, new Date(year, 11, 31)),\n selected: value?.getFullYear() === year,\n };\n });\n }\n const year = this.viewYear();\n return this.months.map((label, m) => {\n const date = new Date(year, m, 1);\n return {\n label,\n year,\n month: m,\n disabled: this.outOfRange(date, endOfMonth(date)),\n selected: value?.getFullYear() === year && value?.getMonth() === m,\n };\n });\n });\n\n constructor() {\n // Keep the panel's view year in sync with the selected value.\n effect(() => {\n const v = this.value();\n if (v) this.viewYear.set(v.getFullYear());\n });\n }\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n const v = this.value();\n if (v) this.viewYear.set(v.getFullYear());\n // Focus the selected (or first enabled) cell once the panel is in the DOM.\n const cells = this.cells();\n const sel = cells.findIndex((c) => c.selected);\n this.activeIndex.set(sel >= 0 ? sel : cells.findIndex((c) => !c.disabled));\n this.open.set(true);\n afterNextRender(() => this.focusActive(), { injector: this.injector });\n }\n\n protected close(restoreFocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (restoreFocus) this.triggerRef()?.nativeElement.focus();\n }\n\n protected shiftView(delta: number): void {\n const step = this.mode() === 'year' ? 12 : 1;\n this.viewYear.set(this.viewYear() + delta * step);\n }\n\n protected selectCell(cell: Cell): void {\n if (cell.disabled) return;\n const date = new Date(cell.year, this.mode() === 'year' ? 0 : cell.month, 1);\n this.value.set(date);\n this.onChange(date);\n this.close(true);\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n this.onChange(null);\n this.triggerRef()?.nativeElement.focus();\n }\n\n protected onGridKeydown(event: KeyboardEvent): void {\n const cols = 3;\n const total = this.cells().length;\n let next = this.activeIndex();\n switch (event.key) {\n case 'ArrowRight': next += 1; break;\n case 'ArrowLeft': next -= 1; break;\n case 'ArrowDown': next += cols; break;\n case 'ArrowUp': next -= cols; break;\n case 'Home': next = 0; break;\n case 'End': next = total - 1; break;\n case 'Escape':\n event.preventDefault();\n this.close(true);\n return;\n default:\n return;\n }\n event.preventDefault();\n this.activeIndex.set(Math.max(0, Math.min(total - 1, next)));\n this.focusActive();\n }\n\n private focusActive(): void {\n this.cellRefs()[this.activeIndex()]?.nativeElement.focus();\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n private outOfRange(start: Date, end: Date): boolean {\n const min = this.min();\n const max = this.max();\n if (min && isBefore(end, min)) return true;\n if (max && isAfter(start, max)) return true;\n return false;\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: Date | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs,\n * compared at month granularity.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!(v instanceof Date) || Number.isNaN(v.getTime())) return null;\n const month = startOfMonth(v);\n const min = this.min();\n if (min && isBefore(month, startOfMonth(min))) return { mkMinDate: { min, actual: v } };\n const max = this.max();\n if (max && isAfter(month, startOfMonth(max))) return { mkMaxDate: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-month-picker__field\">\n <button\n #trigger\n type=\"button\"\n class=\"mk-month-picker__trigger\"\n [id]=\"triggerId\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n @if (displayLabel()) {\n <span class=\"mk-month-picker__value\">{{ displayLabel() }}</span>\n } @else {\n <span class=\"mk-month-picker__value mk-month-picker__value--placeholder\">{{\n resolvedPlaceholder()\n }}</span>\n }\n <span class=\"mk-month-picker__icon\" aria-hidden=\"true\"></span>\n </button>\n\n @if (clearable() && value() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"mk-month-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear($event)\"\n >\n <span class=\"mk-month-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-month-picker__panel\"\n role=\"dialog\"\n [id]=\"panelId\"\n [attr.aria-label]=\"mode() === 'year' ? i18n.chooseYear : i18n.chooseMonth\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n >\n <div class=\"mk-month-picker__header\">\n <button\n type=\"button\"\n class=\"mk-month-picker__nav\"\n [attr.aria-label]=\"mode() === 'year' ? i18n.previousYears : i18n.previousYear\"\n (click)=\"shiftView(-1)\"\n >\n ‹\n </button>\n <span class=\"mk-month-picker__header-label\" aria-live=\"polite\">{{ headerLabel() }}</span>\n <button\n type=\"button\"\n class=\"mk-month-picker__nav\"\n [attr.aria-label]=\"mode() === 'year' ? i18n.nextYears : i18n.nextYear\"\n (click)=\"shiftView(1)\"\n >\n ›\n </button>\n </div>\n\n <div class=\"mk-month-picker__grid\" role=\"grid\" (keydown)=\"onGridKeydown($event)\">\n @for (cell of cells(); track cell.label; let i = $index) {\n <button\n #cell\n type=\"button\"\n class=\"mk-month-picker__cell\"\n [class.mk-month-picker__cell--selected]=\"cell.selected\"\n [attr.tabindex]=\"i === activeIndex() ? 0 : -1\"\n [attr.aria-selected]=\"cell.selected\"\n [disabled]=\"cell.disabled\"\n (click)=\"selectCell(cell)\"\n >\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport { MkCalendar } from '../calendar/calendar';\nimport {\n endOfWeek,\n formatDate,\n getISOWeek,\n isAfter,\n isBefore,\n startOfDay,\n startOfWeek,\n} from '../datetime/date-utils';\n\n/** A selected calendar week (its first and last day, at midnight). */\nexport interface MkWeek {\n start: Date;\n end: Date;\n}\n\n/**\n * WeekPicker — pick a whole calendar week from a popover calendar. Hovering a\n * day previews its entire week; clicking selects it. The value is an\n * {@link MkWeek} (`{ start, end }`, aligned to `firstDayOfWeek`). Implements\n * `ControlValueAccessor` and a two-way `value` model; the panel renders in the\n * top layer so it is never clipped.\n *\n * ```html\n * <mk-week-picker [(value)]=\"week\" [firstDayOfWeek]=\"1\" clearable />\n * ```\n */\n@Component({\n selector: 'mk-week-picker',\n templateUrl: './week-picker.html',\n styleUrl: './week-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkCalendar, MkAnchoredPanel],\n host: {\n class: 'mk-week-picker',\n '[class.mk-week-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-week-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-week-picker--open]': 'open()',\n '[class.mk-week-picker--invalid]': 'isInvalid()',\n '[class.mk-week-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkWeekPicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkWeekPicker),\n multi: true,\n },\n ],\n})\nexport class MkWeekPicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** Two-way selected week. */\n readonly value = model<MkWeek | null>(null);\n /** Earliest selectable date (inclusive). */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable date (inclusive). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** First column of the calendar week (0 = Sunday). Also anchors the week. */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input(this.i18n.selectWeek);\n /** Pattern used to render each endpoint of the week range. */\n readonly displayFormat = input<string>('MMM d');\n /** Prefix the label with the ISO week number, e.g. `W28 · …`. */\n readonly showWeekNumber = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a week is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n /** The week currently previewed under the pointer (drives highlighting). */\n private readonly hoverWeek = signal<MkWeek | null>(null);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: MkWeek | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-week-picker');\n readonly panelId = mkUniqueId('mk-week-picker-panel');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly showClear = computed(\n () => this.clearable() && !!this.value() && !this.isDisabled(),\n );\n\n /** The week to highlight: the hovered one while previewing, else the value. */\n protected readonly highlightWeek = computed(\n () => this.hoverWeek() ?? this.value(),\n );\n\n /** Display label, e.g. `W28 · Jul 6 – Jul 12, 2026`. */\n protected readonly displayLabel = computed(() => {\n const week = this.value();\n if (!week) return '';\n const fmt = this.displayFormat();\n const names = this.i18n.dateNames;\n const range = `${formatDate(week.start, fmt, names)} – ${formatDate(\n week.end,\n `${fmt}, yyyy`,\n names,\n )}`;\n return this.showWeekNumber() ? `W${getISOWeek(week.start)} · ${range}` : range;\n });\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n afterNextRender(\n {\n write: () => {\n const el = this.panelRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-calendar__day[tabindex=\"0\"]',\n );\n el?.focus();\n },\n },\n { injector: this.injector },\n );\n }\n\n protected close(): void {\n if (this.open()) {\n this.open.set(false);\n this.hoverWeek.set(null);\n }\n }\n\n /** A day inside the calendar was activated — select its whole week. */\n protected onPick(date: Date): void {\n const week = this.weekOf(date);\n this.value.set(week);\n this.onChange(week);\n this.close();\n this.triggerRef()?.nativeElement.focus();\n }\n\n /** Preview the hovered day's week. */\n protected onHover(date: Date | null): void {\n this.hoverWeek.set(date ? this.weekOf(date) : null);\n }\n\n protected clear(): void {\n this.value.set(null);\n this.onChange(null);\n this.triggerRef()?.nativeElement.focus();\n }\n\n private weekOf(date: Date): MkWeek {\n const fdow = this.firstDayOfWeek();\n return { start: startOfWeek(date, fdow), end: endOfWeek(date, fdow) };\n }\n\n /** Reference date the calendar should open on (the selected week's start). */\n protected readonly calendarValue = computed(() => this.value()?.start ?? null);\n\n protected onFocusOut(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: MkWeek | null): void {\n // Re-anchor any incoming date to a full week for consistent highlighting.\n if (value?.start) this.value.set(this.weekOf(value.start));\n else this.value.set(null);\n }\n registerOnChange(fn: (value: MkWeek | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n /** Expose the raw highlight endpoints to the template. */\n protected highlightStart = computed(() => this.highlightWeek()?.start ?? null);\n protected highlightEnd = computed(() => this.highlightWeek()?.end ?? null);\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` when the selected week starts before\n * `[min]` or ends after `[max]`.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n const start = v?.start;\n const end = v?.end;\n if (!(start instanceof Date) || !(end instanceof Date)) return null;\n const min = this.min();\n if (min && isBefore(startOfDay(start), startOfDay(min))) {\n return { mkMinDate: { min, actual: start } };\n }\n const max = this.max();\n if (max && isAfter(startOfDay(end), startOfDay(max))) {\n return { mkMaxDate: { max, actual: end } };\n }\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-week-picker__field\">\n <button\n #trigger\n type=\"button\"\n class=\"mk-week-picker__trigger\"\n [id]=\"triggerId\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n @if (displayLabel()) {\n <span class=\"mk-week-picker__value\">{{ displayLabel() }}</span>\n } @else {\n <span class=\"mk-week-picker__value mk-week-picker__value--placeholder\">{{\n placeholder()\n }}</span>\n }\n <svg\n class=\"mk-week-picker__icon\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"17\" rx=\"2\" />\n <path d=\"M3 9h18M8 2v4M16 2v4\" />\n </svg>\n </button>\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-week-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear()\"\n >\n <span class=\"mk-week-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-week-picker__panel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n [id]=\"panelId\"\n role=\"dialog\"\n [attr.aria-label]=\"i18n.chooseWeek\"\n >\n <mk-calendar\n [value]=\"calendarValue()\"\n [rangeMode]=\"true\"\n [rangeStart]=\"highlightStart()\"\n [rangeEnd]=\"highlightEnd()\"\n (dateSelected)=\"onPick($event)\"\n (dateHovered)=\"onHover($event)\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [size]=\"effectiveSize()\"\n />\n </div>\n}\n","import { isSameDay } from '../datetime/date-utils';\nimport type { MkCalendarEvent } from './event-calendar';\n\n/** A timed event positioned inside a day column of the time grid. */\nexport interface MkTimedPlacement {\n event: MkCalendarEvent;\n /** Offset from the top of the grid, percent of the visible hour range. */\n top: number;\n /** Height, percent of the visible hour range (never below ~15 min). */\n height: number;\n /** Column inside the overlap cluster (0-based). */\n lane: number;\n /** Total columns in the overlap cluster — width is `100 / lanes`%. */\n lanes: number;\n}\n\nfunction minutes(d: Date): number {\n return d.getHours() * 60 + d.getMinutes();\n}\n\n/**\n * Position a day's timed events on an hour grid, packing overlaps side by\n * side instead of stacking them: within a cluster of transitively-overlapping\n * events each takes the lowest free lane, and every member of the cluster is\n * widened to the same lane count so columns line up (the layout every\n * scheduler UI uses).\n *\n * Pure — no Angular, no DOM — so the packing has direct unit tests.\n */\nexport function layoutTimedEvents(\n events: readonly MkCalendarEvent[],\n day: Date,\n startHour: number,\n endHour: number,\n): MkTimedPlacement[] {\n const rangeMin = (endHour - startHour) * 60;\n if (rangeMin <= 0) return [];\n\n const timed = events\n .filter((e) => e.start && isSameDay(e.start, day))\n .sort(\n (a, b) =>\n a.start!.getTime() - b.start!.getTime() ||\n (b.end?.getTime() ?? 0) - (a.end?.getTime() ?? 0),\n );\n\n interface Working extends MkTimedPlacement {\n startMin: number;\n endMin: number;\n }\n\n const placed: Working[] = [];\n let cluster: Working[] = [];\n let clusterEnd = -1;\n\n const closeCluster = () => {\n const lanes = Math.max(1, ...cluster.map((p) => p.lane + 1));\n for (const p of cluster) p.lanes = lanes;\n cluster = [];\n clusterEnd = -1;\n };\n\n for (const event of timed) {\n const startMin = minutes(event.start!);\n // A missing end reads as 30 minutes — long enough to click.\n const endMin = event.end && isSameDay(event.end, day)\n ? Math.max(minutes(event.end), startMin + 15)\n : startMin + 30;\n\n if (cluster.length && startMin >= clusterEnd) closeCluster();\n\n // Lowest lane whose latest occupant has finished.\n const laneEnds: number[] = [];\n for (const p of cluster) {\n laneEnds[p.lane] = Math.max(laneEnds[p.lane] ?? 0, p.endMin);\n }\n let lane = 0;\n while ((laneEnds[lane] ?? 0) > startMin) lane++;\n\n const clampedStart = Math.max(startMin, startHour * 60);\n const clampedEnd = Math.min(endMin, endHour * 60);\n if (clampedEnd <= startHour * 60 || clampedStart >= endHour * 60) continue;\n\n const item: Working = {\n event,\n startMin,\n endMin,\n lane,\n lanes: 1,\n top: ((clampedStart - startHour * 60) / rangeMin) * 100,\n height: Math.max(((clampedEnd - clampedStart) / rangeMin) * 100, 2.5),\n };\n cluster.push(item);\n placed.push(item);\n clusterEnd = Math.max(clusterEnd, endMin);\n }\n if (cluster.length) closeCluster();\n\n return placed.map(({ startMin: _s, endMin: _e, ...p }) => p);\n}\n\n/** Events on `day` with no start time — rendered in the all-day strip. */\nexport function allDayEvents(\n events: readonly MkCalendarEvent[],\n day: Date,\n): MkCalendarEvent[] {\n return events.filter((e) => !e.start && isSameDay(e.date, day));\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MK_I18N, MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport {\n addDays,\n addMonths,\n buildMonthMatrix,\n formatDate,\n getWeekdayFullName,\n isSameDay,\n isSameMonth,\n startOfDay,\n startOfMonth,\n startOfWeek,\n} from '../datetime/date-utils';\nimport { MkTimedPlacement, layoutTimedEvents } from './event-calendar-layout';\n\n/** The calendar's presentation: month grid, or a timed week/day grid. */\nexport type MkCalendarView = 'month' | 'week' | 'day';\n\n/** A single event plotted onto the {@link MkEventCalendar}. */\nexport interface MkCalendarEvent {\n /**\n * The day the event falls on. Month view places by this alone; in week/day\n * view an event with no `start` renders in the all-day strip.\n */\n date: Date;\n /** Start instant — positions the event on the week/day time grid. */\n start?: Date;\n /** End instant; defaults to 30 minutes after `start`. */\n end?: Date;\n /** Short label shown inside the event pill. */\n title: string;\n /** Optional pill background colour; falls back to `--mk-primary`. */\n color?: string;\n /** Optional caller-supplied identifier, echoed back on `eventClick`. */\n id?: unknown;\n}\n\n/**\n * Payload of `eventMove` / `eventResize`: the untouched source event plus the\n * would-be new time range. The calendar itself never mutates `events` — the\n * consumer owns the data and applies (or rejects) the change.\n */\nexport interface MkCalendarEventEdit {\n /** The event that was dragged — the exact object from the `events` input. */\n event: MkCalendarEvent;\n /** New start instant (snapped to `snapMinutes`). */\n start: Date;\n /** New end instant (snapped; never closer than `snapMinutes` to `start`). */\n end: Date;\n}\n\n/** Weekday column header (short label + full name for the `abbr[title]`). */\ninterface MkWeekdayHeader {\n short: string;\n full: string;\n}\n\n/** Pixels the pointer must travel before a press turns into an edit drag. */\nconst DRAG_THRESHOLD = 5;\n/**\n * Pixels a *touch* pointer may wander during the long-press delay before the\n * press is treated as a scroll and the pending drag is abandoned.\n */\nconst TOUCH_SLOP = 10;\n/** Long-press delay (ms) before a touch pointer arms an edit drag. */\nconst TOUCH_DELAY_MS = 300;\n/** Safety window (ms) for swallowing the synthetic click after a real drag. */\nconst CLICK_SWALLOW_MS = 400;\n\n/** Minutes since local midnight. */\nfunction minutesOfDay(d: Date): number {\n return d.getHours() * 60 + d.getMinutes();\n}\n\n/** `minutes` since midnight as a zero-padded `HH:mm` label. */\nfunction minutesLabel(minutes: number): string {\n const h = Math.floor(minutes / 60) % 24;\n const m = Math.round(minutes % 60);\n return `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;\n}\n\nfunction clampNumber(value: number, lo: number, hi: number): number {\n return Math.min(Math.max(value, lo), Math.max(lo, hi));\n}\n\n/**\n * `[startMin, endMin]` of a timed event, mirroring the layout's defaults: a\n * missing end reads as 30 minutes, an end on the same day never less than 15.\n */\nfunction eventMinutes(event: MkCalendarEvent): [number, number] {\n const start = event.start ? minutesOfDay(event.start) : 0;\n const end =\n event.end && event.start && isSameDay(event.end, event.start)\n ? Math.max(minutesOfDay(event.end), start + 15)\n : start + 30;\n return [start, end];\n}\n\n/**\n * One in-flight edit gesture (pointer drag or keyboard move mode). Geometry is\n * snapshotted once when the edit lifts — every subsequent move works off the\n * cached rects, so a drag never forces layout.\n */\ninterface EditSession {\n kind: 'move' | 'resize';\n event: MkCalendarEvent;\n /** The pill element the gesture started on. */\n el: HTMLElement;\n /** Pointer id (`null` for the keyboard session). */\n pointerId: number | null;\n /** True once the pointer crossed {@link DRAG_THRESHOLD} (a real drag). */\n started: boolean;\n /** Gate for moves: mouse/pen arm on pointerdown, touch after the long press. */\n armed: boolean;\n startX: number;\n startY: number;\n touchTimer: number | null;\n savedTouchAction: string | null;\n /** Per-column bounds snapshotted at lift. */\n colRects: DOMRect[];\n pxPerMin: number;\n origDay: number;\n origStartMin: number;\n origEndMin: number;\n /** Current (snapped) target — mutated by moves / arrow steps. */\n day: number;\n startMin: number;\n endMin: number;\n}\n\n/** Template-facing state of the in-flight edit, driving the pill + outline. */\ninterface EditPreviewState {\n event: MkCalendarEvent;\n /** Target column index — the drop outline renders in this column. */\n day: number;\n /** Compositor-friendly lift transform for the dragged pill. */\n transform: string;\n /** Height override (%) while the duration differs, else `null`. */\n heightPct: number | null;\n /** Would-be range shown on the pill, e.g. `09:30 – 10:45`. */\n label: string;\n /** Drop-outline top, percent of the visible hour range. */\n top: number;\n /** Drop-outline height, percent of the visible hour range. */\n outlineHeight: number;\n}\n\n/** A rendered day cell: its date, classification, and the events on it. */\ninterface MkDayCell {\n date: Date;\n outside: boolean;\n today: boolean;\n /** Up to `maxPerDay` events shown as pills. */\n visible: readonly MkCalendarEvent[];\n /** Count beyond `maxPerDay` (0 when nothing is hidden). */\n overflow: number;\n /**\n * Precomputed screen-reader label (see {@link MkEventCalendar#dayLabel}) —\n * formatting it once here keeps `formatDate` out of the per-CD template path\n * for all 42 cells.\n */\n label: string;\n}\n\n/**\n * Event calendar — a month-grid scheduler view. Renders a 6×7 grid of day\n * cells built from {@link buildMonthMatrix}; each cell lists the events whose\n * `date` falls on that day as coloured pills, capped at `maxPerDay` with a\n * \"+N more\" line for the remainder.\n *\n * Shares the month-grid rendering, header navigation, and weekday header of\n * `mk-calendar` but is display-only (no date selection). Exposes the viewed\n * month as a two-way `viewDate` model plus `dayClick` / `eventClick` outputs.\n *\n * With `editable`, the week/day time grids additionally support drag-to-move\n * and drag-to-resize (pointer *and* keyboard — WCAG 2.5.7): times snap to\n * `snapMinutes` and the would-be range is emitted via `eventMove` /\n * `eventResize` — the calendar never mutates `events` itself.\n *\n * ```html\n * <mk-event-calendar [events]=\"events\" [(viewDate)]=\"month\"\n * (eventClick)=\"open($event)\" />\n * ```\n */\n@Component({\n selector: 'mk-event-calendar',\n templateUrl: './event-calendar.html',\n styleUrl: './event-calendar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-event-calendar',\n },\n})\nexport class MkEventCalendar implements OnDestroy {\n protected readonly i18n = inject(MK_I18N);\n private readonly doc = inject(DOCUMENT);\n private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly announcer = inject(MkLiveAnnouncer);\n\n /** Events to plot onto the grid. */\n readonly events = input<readonly MkCalendarEvent[]>([]);\n /** Two-way month being viewed (any day within it). Defaults to today. */\n readonly viewDate = model<Date>(new Date());\n /** First column of the week: 0 = Sunday … 6 = Saturday. */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Max event pills per day before collapsing the rest into \"+N more\". */\n readonly maxPerDay = input(3, { transform: numberAttribute });\n /** Presentation: the classic month grid, or a timed `week`/`day` grid. */\n readonly view = model<MkCalendarView>('month');\n /** First hour shown on the week/day time grid. */\n readonly dayStartHour = input(8, { transform: numberAttribute });\n /** Hour the time grid ends at (exclusive). */\n readonly dayEndHour = input(22, { transform: numberAttribute });\n /**\n * Week/day views: allow rescheduling events by dragging a pill (move) or its\n * bottom edge (resize end time), by pointer or keyboard. Off by default —\n * without it the grid renders exactly as before (no handles, no ARIA\n * additions, no drag behavior).\n */\n readonly editable = input(false, { transform: booleanAttribute });\n /** Snap grid (minutes) for drag/keyboard edits; also the minimum duration. */\n readonly snapMinutes = input(15, { transform: numberAttribute });\n\n /** Emitted when a day cell is activated (click / Enter). */\n readonly dayClick = output<Date>();\n /**\n * Emitted when an event pill is clicked (does not also fire `dayClick`).\n * Mouse-only convenience: the pills are presentational (`aria-hidden`), so\n * keyboard / screen-reader users reach events via the day button — its label\n * announces the day's events and activating it fires `dayClick`.\n */\n readonly eventClick = output<MkCalendarEvent>();\n /** Emitted when the viewed range changes via the prev/next buttons. */\n readonly monthChange = output<Date>();\n /** Week/day view: an empty hour slot was clicked — the slot's start instant. */\n readonly slotClick = output<Date>();\n /**\n * Editable week/day grid: an event pill was dragged (or keyboard-moved) to a\n * new start time and/or day. Carries the would-be `start`/`end` — the\n * calendar does **not** mutate `events`; the consumer owns the data and\n * applies the change, typically:\n *\n * ```ts\n * onMove = ({ event, start, end }: MkCalendarEventEdit) =>\n * (this.events = this.events.map((e) =>\n * e === event ? { ...e, date: start, start, end } : e,\n * ));\n * ```\n */\n readonly eventMove = output<MkCalendarEventEdit>();\n /**\n * Editable week/day grid: the pill's bottom edge was dragged (or\n * Shift+Arrow-resized) — only `end` differs, never below `snapMinutes` of\n * duration. Same consumer-owns-the-data contract as `eventMove`.\n */\n readonly eventResize = output<MkCalendarEventEdit>();\n\n /** id of the visible month/year label — wired as the grid's label. */\n readonly labelId = mkUniqueId('mk-event-calendar-label');\n\n /** First day of the visible month. */\n protected readonly viewMonth = computed(() => startOfMonth(this.viewDate()));\n /** Header label — month, day, or week range, matching the active view. */\n protected readonly monthLabel = computed(() => {\n const d = this.viewDate();\n const names = this.i18n.dateNames;\n switch (this.view()) {\n case 'day':\n return formatDate(d, 'MMMM d, yyyy', names);\n case 'week': {\n const from = startOfWeek(d, this.firstDayOfWeek());\n const to = addDays(from, 6);\n return `${formatDate(from, 'MMM d', names)} – ${formatDate(to, 'MMM d, yyyy', names)}`;\n }\n default:\n return formatDate(d, 'MMMM yyyy', names);\n }\n });\n\n /** Days of the active time grid: one for `day`, seven for `week`. */\n protected readonly gridDays = computed<Date[]>(() => {\n const d = startOfDay(this.viewDate());\n if (this.view() === 'day') return [d];\n const from = startOfWeek(d, this.firstDayOfWeek());\n return Array.from({ length: 7 }, (_, i) => addDays(from, i));\n });\n\n /** Hour rows of the time grid. */\n protected readonly hours = computed<number[]>(() => {\n const from = this.dayStartHour();\n const to = this.dayEndHour();\n return Array.from({ length: Math.max(to - from, 0) }, (_, i) => from + i);\n });\n\n /**\n * Timed events bucketed by their start's calendar day — a single pass over\n * the events, shared by every column of the week/day grid instead of\n * re-filtering (and re-sorting) the whole array once per day.\n */\n private readonly timedByDay = computed(() => {\n const map = new Map<number, MkCalendarEvent[]>();\n for (const event of this.events()) {\n if (!event.start) continue;\n const key = startOfDay(event.start).getTime();\n const bucket = map.get(key);\n if (bucket) bucket.push(event);\n else map.set(key, [event]);\n }\n return map;\n });\n\n /** Untimed events (all-day strip) bucketed by `date`'s calendar day. */\n private readonly allDayByDay = computed(() => {\n const map = new Map<number, MkCalendarEvent[]>();\n for (const event of this.events()) {\n if (event.start) continue;\n const key = startOfDay(event.date).getTime();\n const bucket = map.get(key);\n if (bucket) bucket.push(event);\n else map.set(key, [event]);\n }\n return map;\n });\n\n /**\n * Per-day positioned events + all-day strip for the time grid. The column\n * head (`Mon 21`) is precomputed here so the template never calls\n * `formatDate` during change detection.\n */\n protected readonly timedColumns = computed(() => {\n const timedByDay = this.timedByDay();\n const allDayByDay = this.allDayByDay();\n const startHour = this.dayStartHour();\n const endHour = this.dayEndHour();\n const names = this.i18n.dateNames;\n const today = new Date();\n // gridDays() are `startOfDay` instants, so `getTime()` matches the keys.\n return this.gridDays().map((day) => ({\n day,\n today: isSameDay(day, today),\n head: formatDate(day, 'ddd d', names),\n placements: layoutTimedEvents(\n timedByDay.get(day.getTime()) ?? [],\n day,\n startHour,\n endHour,\n ),\n allDay: allDayByDay.get(day.getTime()) ?? [],\n }));\n });\n\n protected hourLabel(hour: number): string {\n return `${String(hour).padStart(2, '0')}:00`;\n }\n\n protected placementTitle(p: MkTimedPlacement): string {\n const from = p.event.start ? minutesLabel(minutesOfDay(p.event.start)) : '';\n return from ? `${from} ${p.event.title}` : p.event.title;\n }\n\n protected onSlotClick(day: Date, hour: number): void {\n const at = new Date(day);\n at.setHours(hour, 0, 0, 0);\n this.slotClick.emit(at);\n }\n\n // ===================================================================\n // Editable time grid — drag-to-move / drag-to-resize (pointer)\n // ===================================================================\n\n /** Template-facing state of the in-flight edit (`null` when idle). */\n protected readonly editPreview = signal<EditPreviewState | null>(null);\n\n /** The active pointer gesture, if any (only one at a time). */\n private pointerSession: EditSession | null = null;\n /** The active keyboard \"move mode\" session, if any. */\n private kbSession: EditSession | null = null;\n\n /** Pending rAF id for the coalesced pointer-move pass. */\n private editRaf: number | null = null;\n private pendingX = 0;\n private pendingY = 0;\n /** Set after a real drag so the trailing synthetic click never fires `eventClick`. */\n private swallowNextClick = false;\n\n private readonly pointerMoveHandler = (e: PointerEvent) => this.onEditPointerMove(e);\n private readonly pointerUpHandler = (e: PointerEvent) => this.onEditPointerUp(e);\n private readonly pointerCancelHandler = () => this.abortPointerEdit();\n /** Escape aborts an in-flight pointer drag (document-level while dragging). */\n private readonly escHandler = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.pointerSession?.started) {\n e.stopPropagation();\n this.abortPointerEdit();\n }\n };\n /**\n * `touch-action: pan-y` keeps native scrolling alive while the long-press is\n * pending, so once armed the drag must eat `touchmove` itself\n * (`passive: false` — same pattern as `MkDrag`).\n */\n private readonly touchMoveEater = (e: TouchEvent) => {\n if (this.pointerSession?.armed && e.cancelable) e.preventDefault();\n };\n /** Android fires `contextmenu` on long-press — keep it off the gesture. */\n private readonly contextMenuHandler = (e: Event) => e.preventDefault();\n\n protected onBlockPointerDown(event: Event, p: MkTimedPlacement, colIndex: number): void {\n const e = event as PointerEvent;\n if (!this.editable() || this.pointerSession || this.kbSession) return;\n if (e.button !== undefined && e.button !== 0) return;\n const el = e.currentTarget as HTMLElement;\n const kind = (e.target as HTMLElement | null)?.closest?.(\n '.mk-event-calendar__resize-handle',\n )\n ? 'resize'\n : 'move';\n const [startMin, endMin] = eventMinutes(p.event);\n this.pointerSession = {\n kind,\n event: p.event,\n el,\n pointerId: e.pointerId,\n started: false,\n armed: false,\n startX: e.clientX,\n startY: e.clientY,\n touchTimer: null,\n savedTouchAction: null,\n colRects: [],\n pxPerMin: 1,\n origDay: colIndex,\n origStartMin: startMin,\n origEndMin: endMin,\n day: colIndex,\n startMin,\n endMin,\n };\n try {\n el.setPointerCapture(e.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n el.addEventListener('pointermove', this.pointerMoveHandler);\n el.addEventListener('pointerup', this.pointerUpHandler);\n el.addEventListener('pointercancel', this.pointerCancelHandler);\n if (e.pointerType === 'touch') {\n // Touch long-press arming, as in MkDrag: until the timer fires this\n // press may just be the start of a scroll, so nothing is prevented yet.\n el.addEventListener('touchmove', this.touchMoveEater, { passive: false });\n el.addEventListener('contextmenu', this.contextMenuHandler);\n this.pointerSession.touchTimer =\n this.doc.defaultView?.setTimeout(() => this.armTouch(), TOUCH_DELAY_MS) ??\n null;\n } else {\n // Mouse / pen: armed immediately, the 5px threshold does the rest.\n this.pointerSession.armed = true;\n }\n }\n\n /** The long-press delay elapsed with the finger still down — arm the drag. */\n private armTouch(): void {\n const s = this.pointerSession;\n if (!s) return;\n s.touchTimer = null;\n s.armed = true;\n s.savedTouchAction = s.el.style.touchAction;\n s.el.style.touchAction = 'none';\n }\n\n private onEditPointerMove(e: PointerEvent): void {\n const s = this.pointerSession;\n if (!s || e.pointerId !== s.pointerId) return;\n if (!s.armed) {\n // Long-press still pending: real movement means the user is scrolling.\n if (Math.hypot(e.clientX - s.startX, e.clientY - s.startY) > TOUCH_SLOP) {\n this.teardownPointer(false);\n }\n return;\n }\n if (!s.started) {\n if (Math.hypot(e.clientX - s.startX, e.clientY - s.startY) < DRAG_THRESHOLD) {\n return;\n }\n this.beginEdit(s);\n }\n e.preventDefault();\n // Only record the coordinates — the math + signal write is rAF-coalesced\n // (one pass per frame, same pattern as the table's column resize).\n this.pendingX = e.clientX;\n this.pendingY = e.clientY;\n if (this.editRaf !== null) return;\n const raf = this.doc.defaultView?.requestAnimationFrame(() => {\n this.editRaf = null;\n this.applyPendingEdit();\n });\n if (raf === undefined) this.applyPendingEdit(); // no window — degrade to sync\n else this.editRaf = raf;\n }\n\n /**\n * The drag crossed the threshold — snapshot geometry once (column rects and\n * the px↔minute scale); every subsequent move works off this cache, so a\n * drag never forces layout.\n */\n private beginEdit(s: EditSession): void {\n s.started = true;\n const cols = this.hostEl.querySelectorAll<HTMLElement>('.mk-event-calendar__col');\n s.colRects = Array.from(cols, (c) => c.getBoundingClientRect());\n const rangeMin = Math.max((this.dayEndHour() - this.dayStartHour()) * 60, 1);\n s.pxPerMin = (s.colRects[s.origDay]?.height || rangeMin) / rangeMin;\n this.doc.addEventListener('keydown', this.escHandler, true);\n this.updatePreview(s);\n }\n\n /** Per-frame move pass: snap, clamp, and publish the preview signal. */\n private applyPendingEdit(): void {\n const s = this.pointerSession;\n if (!s || !s.started) return;\n const snap = Math.max(1, this.snapMinutes());\n const gridStart = this.dayStartHour() * 60;\n const gridEnd = this.dayEndHour() * 60;\n const deltaMin = (this.pendingY - s.startY) / s.pxPerMin;\n const snapped = Math.round(deltaMin / snap) * snap;\n if (s.kind === 'move') {\n const duration = s.origEndMin - s.origStartMin;\n s.startMin = clampNumber(\n s.origStartMin + snapped,\n gridStart,\n Math.max(gridStart, gridEnd - duration),\n );\n s.endMin = s.startMin + duration;\n s.day = this.columnAt(s, this.pendingX);\n } else {\n s.endMin = clampNumber(s.origEndMin + snapped, s.startMin + snap, gridEnd);\n }\n this.updatePreview(s);\n }\n\n /** Column index under `x`, from the rects snapshotted at lift. */\n private columnAt(s: EditSession, x: number): number {\n const rects = s.colRects;\n if (!rects.length || !rects[s.origDay]?.width) return s.day;\n for (let i = 0; i < rects.length; i++) {\n if (x >= rects[i].left && x < rects[i].right) return i;\n }\n return x < rects[0].left ? 0 : rects.length - 1;\n }\n\n private onEditPointerUp(e: PointerEvent): void {\n const s = this.pointerSession;\n if (!s || e.pointerId !== s.pointerId) return;\n // Flush (don't drop) the last coalesced move so the drop lands exactly\n // where the pointer ended, not on the last painted frame.\n if (this.editRaf !== null) {\n this.doc.defaultView?.cancelAnimationFrame(this.editRaf);\n this.editRaf = null;\n this.applyPendingEdit();\n }\n const started = s.started;\n this.teardownPointer(started);\n if (!started) return; // was a click, never a drag — eventClick may follow\n this.editPreview.set(null);\n this.commitEdit(s, 'pointer');\n }\n\n /** Escape / pointercancel: the pill snaps back, nothing is emitted. */\n private abortPointerEdit(): void {\n const s = this.pointerSession;\n if (!s) return;\n const started = s.started;\n this.teardownPointer(started);\n this.editPreview.set(null);\n if (started) this.announceCancelled('polite');\n }\n\n /** Undo everything `onBlockPointerDown`/`beginEdit` set up. */\n private teardownPointer(swallowClick: boolean): void {\n const s = this.pointerSession;\n if (!s) return;\n this.pointerSession = null;\n if (this.editRaf !== null) {\n this.doc.defaultView?.cancelAnimationFrame(this.editRaf);\n this.editRaf = null;\n }\n const el = s.el;\n if (s.pointerId !== null) {\n try {\n el.releasePointerCapture(s.pointerId);\n } catch {\n // Capture may already be gone.\n }\n }\n el.removeEventListener('pointermove', this.pointerMoveHandler);\n el.removeEventListener('pointerup', this.pointerUpHandler);\n el.removeEventListener('pointercancel', this.pointerCancelHandler);\n el.removeEventListener('touchmove', this.touchMoveEater);\n el.removeEventListener('contextmenu', this.contextMenuHandler);\n if (s.touchTimer !== null) this.doc.defaultView?.clearTimeout(s.touchTimer);\n if (s.savedTouchAction !== null) el.style.touchAction = s.savedTouchAction;\n this.doc.removeEventListener('keydown', this.escHandler, true);\n if (swallowClick) {\n // The browser fires a synthetic click right after pointerup, which would\n // re-fire `eventClick` from a drag (the carousel's click-swallower\n // pattern, kept as a flag because the Angular listener on the same\n // element registered first). The timeout covers gestures with no click.\n this.swallowNextClick = true;\n this.doc.defaultView?.setTimeout(\n () => (this.swallowNextClick = false),\n CLICK_SWALLOW_MS,\n );\n }\n }\n\n // ===================================================================\n // Editable time grid — keyboard move mode (WCAG 2.5.7)\n // ===================================================================\n\n protected onBlockKeydown(event: Event, p: MkTimedPlacement, colIndex: number): void {\n const e = event as KeyboardEvent;\n if (!this.editable()) return;\n const s = this.kbSession;\n if (!s || s.event !== p.event) {\n // Enter/Space arms \"move mode\" (and, via preventDefault, keeps the\n // button's synthetic click — and thus `eventClick` — from firing).\n if ((e.key === 'Enter' || e.key === ' ') && !this.pointerSession) {\n e.preventDefault();\n this.armKeyboard(e.currentTarget as HTMLElement, p, colIndex);\n }\n return;\n }\n const snap = Math.max(1, this.snapMinutes());\n const gridStart = this.dayStartHour() * 60;\n const gridEnd = this.dayEndHour() * 60;\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n this.commitKeyboard();\n break;\n case 'Escape':\n e.preventDefault();\n this.cancelKeyboard();\n break;\n case 'ArrowUp':\n case 'ArrowDown': {\n e.preventDefault();\n const dir = e.key === 'ArrowUp' ? -1 : 1;\n if (e.shiftKey) {\n // Shift+Up/Down resizes the end, never below the snap duration.\n s.endMin = clampNumber(s.endMin + dir * snap, s.startMin + snap, gridEnd);\n } else {\n const duration = s.endMin - s.startMin;\n s.startMin = clampNumber(\n s.startMin + dir * snap,\n gridStart,\n Math.max(gridStart, gridEnd - duration),\n );\n s.endMin = s.startMin + duration;\n }\n this.updatePreview(s);\n this.announceStep(s);\n break;\n }\n case 'ArrowLeft':\n case 'ArrowRight': {\n e.preventDefault();\n const dir = e.key === 'ArrowLeft' ? -1 : 1;\n s.day = clampNumber(s.day + dir, 0, this.gridDays().length - 1);\n this.updatePreview(s);\n this.announceStep(s);\n break;\n }\n default:\n break;\n }\n }\n\n /** Losing focus mid-move cancels the keyboard edit (no stuck state). */\n protected onBlockBlur(): void {\n if (this.kbSession) this.cancelKeyboard();\n }\n\n private armKeyboard(el: HTMLElement, p: MkTimedPlacement, colIndex: number): void {\n const [startMin, endMin] = eventMinutes(p.event);\n const cols = this.hostEl.querySelectorAll<HTMLElement>('.mk-event-calendar__col');\n const colRects = Array.from(cols, (c) => c.getBoundingClientRect());\n const rangeMin = Math.max((this.dayEndHour() - this.dayStartHour()) * 60, 1);\n const s: EditSession = {\n kind: 'move',\n event: p.event,\n el,\n pointerId: null,\n started: true,\n armed: true,\n startX: 0,\n startY: 0,\n touchTimer: null,\n savedTouchAction: null,\n colRects,\n pxPerMin: (colRects[colIndex]?.height || rangeMin) / rangeMin,\n origDay: colIndex,\n origStartMin: startMin,\n origEndMin: endMin,\n day: colIndex,\n startMin,\n endMin,\n };\n this.kbSession = s;\n this.updatePreview(s);\n this.announcer.announce(\n this.i18n.eventCalendarGrabbed(\n p.event.title,\n minutesLabel(startMin),\n minutesLabel(endMin),\n ),\n 'assertive',\n );\n }\n\n private commitKeyboard(): void {\n const s = this.kbSession;\n if (!s) return;\n this.kbSession = null;\n this.editPreview.set(null);\n this.commitEdit(s, 'keyboard');\n }\n\n private cancelKeyboard(): void {\n this.kbSession = null;\n this.editPreview.set(null);\n this.announceCancelled('assertive');\n }\n\n // ===================================================================\n // Editable time grid — shared commit / preview / template helpers\n // ===================================================================\n\n /**\n * Emit the edited range (if anything actually changed): `eventResize` when\n * only the end moved, `eventMove` otherwise. The `events` input is never\n * touched — applying the change is the consumer's job.\n */\n private commitEdit(s: EditSession, source: 'pointer' | 'keyboard'): void {\n const dayChanged = s.day !== s.origDay;\n const startChanged = s.startMin !== s.origStartMin;\n const endChanged = s.endMin !== s.origEndMin;\n if (!dayChanged && !startChanged && !endChanged) return;\n const day = this.gridDays()[s.day] ?? this.gridDays()[s.origDay];\n const start = new Date(day);\n start.setHours(0, s.startMin, 0, 0);\n const end = new Date(day);\n end.setHours(0, s.endMin, 0, 0);\n const detail: MkCalendarEventEdit = { event: s.event, start, end };\n const resize = !dayChanged && !startChanged;\n if (resize) this.eventResize.emit(detail);\n else this.eventMove.emit(detail);\n this.announcer.announce(\n resize\n ? this.i18n.eventCalendarResized(s.event.title, minutesLabel(s.endMin))\n : this.i18n.eventCalendarMoved(\n s.event.title,\n formatDate(day, 'MMMM d, yyyy', this.i18n.dateNames),\n minutesLabel(s.startMin),\n minutesLabel(s.endMin),\n ),\n source === 'keyboard' ? 'assertive' : 'polite',\n );\n }\n\n /** Publish the session's current target as template-facing preview state. */\n private updatePreview(s: EditSession): void {\n const gridStart = this.dayStartHour() * 60;\n const gridEnd = this.dayEndHour() * 60;\n const rangeMin = Math.max(gridEnd - gridStart, 1);\n const clampedStart = Math.max(s.startMin, gridStart);\n const clampedEnd = Math.min(s.endMin, gridEnd);\n const dx = (s.colRects[s.day]?.left ?? 0) - (s.colRects[s.origDay]?.left ?? 0);\n const dy = (s.startMin - s.origStartMin) * s.pxPerMin;\n const durationChanged =\n s.endMin - s.startMin !== s.origEndMin - s.origStartMin;\n this.editPreview.set({\n event: s.event,\n day: s.day,\n transform: `translate(${dx}px, ${dy}px)`,\n heightPct: durationChanged\n ? Math.max(((clampedEnd - clampedStart) / rangeMin) * 100, 2.5)\n : null,\n label: `${minutesLabel(s.startMin)} – ${minutesLabel(s.endMin)}`,\n top: ((clampedStart - gridStart) / rangeMin) * 100,\n outlineHeight: Math.max(((clampedEnd - clampedStart) / rangeMin) * 100, 1),\n });\n }\n\n private announceCancelled(politeness: 'polite' | 'assertive'): void {\n this.announcer.announce(this.i18n.eventCalendarEditCancelled, politeness);\n }\n\n /** Position update after each keyboard step. */\n private announceStep(s: EditSession): void {\n const day = this.gridDays()[s.day];\n this.announcer.announce(\n this.i18n.eventCalendarPosition(\n s.event.title,\n formatDate(day, 'MMMM d, yyyy', this.i18n.dateNames),\n minutesLabel(s.startMin),\n minutesLabel(s.endMin),\n ),\n 'assertive',\n );\n }\n\n /** Is this placement the pill currently being edited? */\n protected isEditing(p: MkTimedPlacement): boolean {\n return this.editPreview()?.event === p.event;\n }\n\n /** Lift transform for the dragged pill (`null` when idle). */\n protected blockTransform(p: MkTimedPlacement): string | null {\n const d = this.editPreview();\n return d && d.event === p.event ? d.transform : null;\n }\n\n /** Height (%) — the resize preview overrides the layout's height. */\n protected blockHeight(p: MkTimedPlacement): number {\n const d = this.editPreview();\n return d && d.event === p.event && d.heightPct !== null ? d.heightPct : p.height;\n }\n\n /** Would-be time range shown on the pill while it is being edited. */\n protected dragLabelFor(p: MkTimedPlacement): string | null {\n const d = this.editPreview();\n return d && d.event === p.event ? d.label : null;\n }\n\n /** Drop-outline geometry when the edit currently targets column `i`. */\n protected dropOutlineFor(i: number): EditPreviewState | null {\n const d = this.editPreview();\n return d && d.day === i ? d : null;\n }\n\n /**\n * Accessible name for an editable pill — the title plus its time range\n * (composed with, not replacing, the visible title text and tooltip).\n */\n protected blockAriaLabel(p: MkTimedPlacement): string {\n const [startMin, endMin] = eventMinutes(p.event);\n return `${p.event.title}, ${minutesLabel(startMin)} – ${minutesLabel(endMin)}`;\n }\n\n /** `aria-roledescription` for editable pills. */\n protected readonly movableRoledescription = this.i18n.eventCalendarMovableEvent;\n\n ngOnDestroy(): void {\n if (this.pointerSession) this.teardownPointer(false);\n this.kbSession = null;\n }\n\n /** Raw 6×7 grid of dates for the visible month. */\n private readonly weeks = computed(() =>\n buildMonthMatrix(this.viewDate(), this.firstDayOfWeek()),\n );\n\n /** Weekday column headers ordered from `firstDayOfWeek`. */\n protected readonly weekdays = computed<MkWeekdayHeader[]>(() =>\n this.weeks()[0].map((d) => ({\n short: formatDate(d, 'ddd', this.i18n.dateNames),\n full: getWeekdayFullName(d, this.i18n.dateNames),\n })),\n );\n\n /** Events grouped by local calendar day, keyed by `startOfDay` timestamp. */\n private readonly eventsByDay = computed(() => {\n const map = new Map<number, MkCalendarEvent[]>();\n for (const event of this.events()) {\n const key = startOfDay(event.date).getTime();\n const bucket = map.get(key);\n if (bucket) bucket.push(event);\n else map.set(key, [event]);\n }\n return map;\n });\n\n /** 6×7 grid of day cells with their (capped) events resolved. */\n protected readonly weekCells = computed<MkDayCell[][]>(() => {\n const month = this.viewMonth();\n const today = new Date();\n const max = this.maxPerDay();\n const byDay = this.eventsByDay();\n return this.weeks().map((week) =>\n week.map((date) => {\n const dayEvents = byDay.get(startOfDay(date).getTime()) ?? [];\n const cell = {\n date,\n outside: !isSameMonth(date, month),\n today: isSameDay(date, today),\n visible: dayEvents.slice(0, max),\n overflow: Math.max(0, dayEvents.length - max),\n };\n // Label formatted once per rebuild, not on every CD pass (42 cells).\n return { ...cell, label: this.dayLabel(cell) };\n }),\n );\n });\n\n /**\n * Screen-reader label for a day cell. The button's `aria-label` replaces its\n * visual content, so the label also announces the day's events — count plus\n * up to three titles — e.g. `July 9, 2026, 2 events: Standup, Demo`.\n * Precomputed into {@link MkDayCell#label} by `weekCells`.\n */\n protected dayLabel(cell: Omit<MkDayCell, 'label'>): string {\n const formatted = formatDate(cell.date, 'MMMM d, yyyy', this.i18n.dateNames);\n const count = cell.visible.length + cell.overflow;\n if (count === 0) return formatted;\n const titles = cell.visible\n .slice(0, 3)\n .map((e) => e.title)\n .join(', ');\n return `${formatted}, ${this.i18n.dayEvents(count, titles)}`;\n }\n\n protected prevMonth(): void {\n this.shiftMonth(-1);\n }\n\n protected nextMonth(): void {\n this.shiftMonth(1);\n }\n\n private shiftMonth(delta: number): void {\n const view = this.view();\n const next =\n view === 'month'\n ? addMonths(this.viewDate(), delta)\n : addDays(this.viewDate(), delta * (view === 'week' ? 7 : 1));\n this.viewDate.set(next);\n this.monthChange.emit(next);\n }\n\n protected onDayClick(d: Date): void {\n this.dayClick.emit(d);\n }\n\n protected onEventClick(event: Event, calendarEvent: MkCalendarEvent): void {\n event.stopPropagation();\n // A real drag just ended — the browser's trailing synthetic click must not\n // read as an event activation.\n if (this.swallowNextClick) {\n this.swallowNextClick = false;\n event.preventDefault();\n return;\n }\n this.eventClick.emit(calendarEvent);\n }\n}\n","<div class=\"mk-event-calendar__header\">\n <button\n type=\"button\"\n class=\"mk-event-calendar__nav\"\n [attr.aria-label]=\"i18n.previousMonth\"\n (click)=\"prevMonth()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n d=\"M15 5l-7 7 7 7\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <span class=\"mk-event-calendar__label\" [id]=\"labelId\" aria-live=\"polite\">{{\n monthLabel()\n }}</span>\n\n <button\n type=\"button\"\n class=\"mk-event-calendar__nav\"\n [attr.aria-label]=\"i18n.nextMonth\"\n (click)=\"nextMonth()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n d=\"M9 5l7 7-7 7\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n</div>\n\n@if (view() === 'month') {\n<!--\n The days are a plain list of buttons (role=\"group\"), not an ARIA grid — there\n is no roving-tabindex arrow navigation here, so grid semantics would be wrong.\n-->\n<div class=\"mk-event-calendar__grid\" role=\"group\" [attr.aria-labelledby]=\"labelId\">\n <div class=\"mk-event-calendar__weekdays\" aria-hidden=\"true\">\n @for (wd of weekdays(); track $index) {\n <span class=\"mk-event-calendar__weekday\">\n <abbr [title]=\"wd.full\">{{ wd.short }}</abbr>\n </span>\n }\n </div>\n\n @for (week of weekCells(); track $index) {\n <div class=\"mk-event-calendar__week\">\n @for (cell of week; track cell.date.getTime()) {\n <button\n type=\"button\"\n class=\"mk-event-calendar__cell\"\n [class.mk-event-calendar__cell--outside]=\"cell.outside\"\n [class.mk-event-calendar__cell--today]=\"cell.today\"\n [attr.aria-label]=\"cell.label\"\n [attr.aria-current]=\"cell.today ? 'date' : null\"\n (click)=\"onDayClick(cell.date)\"\n >\n <span class=\"mk-event-calendar__day-num\">{{\n cell.date.getDate()\n }}</span>\n\n <!--\n Presentational for assistive tech: the day button's aria-label\n already announces the events, and nested interactive content inside\n a button is invalid. The pill (click) is a mouse-only shortcut to\n `eventClick`; keyboard users activate the day (`dayClick`) instead.\n -->\n <span class=\"mk-event-calendar__events\" aria-hidden=\"true\">\n @for (event of cell.visible; track $index) {\n <span\n class=\"mk-event-calendar__pill\"\n [style.background-color]=\"event.color || 'var(--mk-primary)'\"\n [title]=\"event.title\"\n (click)=\"onEventClick($event, event)\"\n >\n {{ event.title }}\n </span>\n }\n @if (cell.overflow > 0) {\n <span class=\"mk-event-calendar__more\">{{\n i18n.moreEvents(cell.overflow)\n }}</span>\n }\n </span>\n </button>\n }\n </div>\n }\n</div>\n} @else {\n <div\n class=\"mk-event-calendar__timegrid\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n >\n @if (view() === 'week') {\n <div class=\"mk-event-calendar__timegrid-head\" aria-hidden=\"true\">\n <span class=\"mk-event-calendar__gutter-spacer\"></span>\n @for (col of timedColumns(); track col.day.getTime()) {\n <span\n class=\"mk-event-calendar__col-head\"\n [class.mk-event-calendar__col-head--today]=\"col.today\"\n >\n {{ col.head }}\n </span>\n }\n </div>\n }\n\n <div class=\"mk-event-calendar__timegrid-body\">\n <div class=\"mk-event-calendar__gutter\" aria-hidden=\"true\">\n @for (h of hours(); track h) {\n <span class=\"mk-event-calendar__hour-label\">{{ hourLabel(h) }}</span>\n }\n </div>\n\n @for (col of timedColumns(); track col.day.getTime(); let ci = $index) {\n <div\n class=\"mk-event-calendar__col\"\n [class.mk-event-calendar__col--today]=\"col.today\"\n >\n @for (h of hours(); track h) {\n <button\n type=\"button\"\n class=\"mk-event-calendar__slot\"\n [attr.aria-label]=\"col.head + ' ' + hourLabel(h)\"\n (click)=\"onSlotClick(col.day, h)\"\n ></button>\n }\n\n @for (p of col.placements; track $index) {\n <button\n type=\"button\"\n class=\"mk-event-calendar__block\"\n [class.mk-event-calendar__block--editable]=\"editable()\"\n [class.mk-event-calendar__block--dragging]=\"isEditing(p)\"\n [style.top.%]=\"p.top\"\n [style.height.%]=\"blockHeight(p)\"\n [style.left.%]=\"(100 / p.lanes) * p.lane\"\n [style.width.%]=\"100 / p.lanes\"\n [style.transform]=\"blockTransform(p)\"\n [style.background-color]=\"p.event.color || 'var(--mk-primary)'\"\n [title]=\"placementTitle(p)\"\n [attr.aria-label]=\"editable() ? blockAriaLabel(p) : null\"\n [attr.aria-roledescription]=\"editable() ? movableRoledescription : null\"\n (click)=\"onEventClick($event, p.event)\"\n (pointerdown)=\"onBlockPointerDown($event, p, ci)\"\n (keydown)=\"onBlockKeydown($event, p, ci)\"\n (blur)=\"onBlockBlur()\"\n >\n @if (dragLabelFor(p); as lbl) {\n <span class=\"mk-event-calendar__drag-time\" aria-hidden=\"true\">{{\n lbl\n }}</span>\n }\n {{ p.event.title }}\n @if (editable()) {\n <span\n class=\"mk-event-calendar__resize-handle\"\n aria-hidden=\"true\"\n ></span>\n }\n </button>\n }\n\n @if (dropOutlineFor(ci); as outline) {\n <div\n class=\"mk-event-calendar__drop-outline\"\n aria-hidden=\"true\"\n [style.top.%]=\"outline.top\"\n [style.height.%]=\"outline.outlineHeight\"\n ></div>\n }\n\n @if (col.allDay.length) {\n <span class=\"mk-event-calendar__all-day\" aria-hidden=\"true\">\n @for (event of col.allDay; track $index) {\n <span\n class=\"mk-event-calendar__pill\"\n [style.background-color]=\"event.color || 'var(--mk-primary)'\"\n [title]=\"event.title\"\n (click)=\"onEventClick($event, event)\"\n >\n {{ event.title }}\n </span>\n }\n </span>\n }\n </div>\n }\n </div>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport { clampDate, isAfter, isBefore, isSameDay, startOfDay } from '../datetime/date-utils';\n\n/** Which segment a part represents. */\ntype MkDateSegment = 'day' | 'month' | 'year';\n\n/** Segment display order. */\nexport type MkMiniDateOrder = 'dmy' | 'mdy' | 'ymd';\n\n/** A rendered segment descriptor (view-model for one spinbutton). */\ninterface MkDatePart {\n key: MkDateSegment;\n /** Text shown in the segment, or the placeholder when empty. */\n display: string;\n /** Whether the segment currently holds a value. */\n filled: boolean;\n valueNow: number | null;\n valueMin: number;\n valueMax: number;\n valueText: string;\n label: string;\n}\n\n/** Number of days in month `m` (1–12) of `year`. */\nfunction daysInMonth(m: number, year: number): number {\n return new Date(year, m, 0).getDate();\n}\n\n/**\n * MiniDate — a compact, popover-free inline date editor with segmented\n * day / month / year spin fields (like a native `<input type=\"date\">` but\n * themed and signal-driven). Each segment is an ARIA `spinbutton`: Arrow\n * Up/Down step the value (day wraps within the month), Home/End jump to the\n * segment's minimum/maximum, Arrow Left/Right move between segments, and\n * typing digits fills the focused segment and auto-advances (OTP-style). Implements `ControlValueAccessor` and a two-way\n * `value` model over a real `Date | null`.\n *\n * A non-null `Date` is emitted only when all three segments are set and valid;\n * the day is clamped to the month's length (e.g. Feb 31 → 28/29) and the\n * result is clamped to `[min, max]`.\n *\n * ```html\n * <mk-mini-date [(value)]=\"date\" order=\"dmy\" [min]=\"minDate\" />\n * ```\n */\n@Component({\n selector: 'mk-mini-date',\n templateUrl: './mini-date.html',\n styleUrl: './mini-date.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'mkMiniDate',\n host: {\n class: 'mk-mini-date',\n role: 'group',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n '[attr.aria-required]': 'isRequired() || null',\n '[class.mk-mini-date--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-mini-date--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-mini-date--invalid]': 'isInvalid()',\n '[class.mk-mini-date--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkMiniDate),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkMiniDate),\n multi: true,\n },\n ],\n})\nexport class MkMiniDate implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly segEls =\n viewChildren<ElementRef<HTMLElement>>('seg');\n\n /** Minimum selectable date (inclusive). */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Maximum selectable date (inclusive). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Two-way value — a real `Date`, or `null` while incomplete. */\n readonly value = model<Date | null>(null);\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Segment order. */\n readonly order = input<MkMiniDateOrder>('dmy');\n /** Lowest selectable year (for the year spinbutton range). */\n readonly yearMin = input(1900, { transform: numberAttribute });\n /** Highest selectable year (for the year spinbutton range). */\n readonly yearMax = input(2100, { transform: numberAttribute });\n\n readonly segId = mkUniqueId('mk-mini-date');\n\n // --- Segment state --------------------------------------------------------\n private readonly daySeg = signal<number | null>(null);\n private readonly monthSeg = signal<number | null>(null);\n private readonly yearSeg = signal<number | null>(null);\n /** Per-segment digit buffer used for OTP-style typing/auto-advance. */\n private buffer = '';\n private bufferKey: MkDateSegment | null = null;\n\n private readonly cvaDisabled = signal(false);\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Days available in the current month/year (defaults to a leap year). */\n private readonly monthLength = computed(() =>\n daysInMonth(this.monthSeg() ?? 1, this.yearSeg() ?? 2000),\n );\n\n /** Ordered, rendered segment descriptors. */\n protected readonly parts = computed<MkDatePart[]>(() => {\n const names = this.i18n.dateNames;\n const byKey: Record<MkDateSegment, MkDatePart> = {\n day: {\n key: 'day',\n display: this.pad(this.daySeg(), 2, 'dd'),\n filled: this.daySeg() != null,\n valueNow: this.daySeg(),\n valueMin: 1,\n valueMax: this.monthLength(),\n valueText:\n this.daySeg() != null ? String(this.daySeg()) : this.i18n.empty,\n label: this.i18n.daySegment,\n },\n month: {\n key: 'month',\n display:\n this.monthSeg() != null\n ? names.monthsShort[this.monthSeg()! - 1]\n : 'mmm',\n filled: this.monthSeg() != null,\n valueNow: this.monthSeg(),\n valueMin: 1,\n valueMax: 12,\n valueText:\n this.monthSeg() != null\n ? names.months[this.monthSeg()! - 1]\n : this.i18n.empty,\n label: this.i18n.monthSegment,\n },\n year: {\n key: 'year',\n display: this.pad(this.yearSeg(), 4, 'yyyy'),\n filled: this.yearSeg() != null,\n valueNow: this.yearSeg(),\n valueMin: this.yearMin(),\n valueMax: this.yearMax(),\n valueText:\n this.yearSeg() != null ? String(this.yearSeg()) : this.i18n.empty,\n label: this.i18n.yearSegment,\n },\n };\n return this.order()\n .split('')\n .map((c) =>\n c === 'd' ? byKey.day : c === 'm' ? byKey.month : byKey.year,\n );\n });\n\n // --- Interaction ----------------------------------------------------------\n protected onSegKeydown(key: MkDateSegment, index: number, e: KeyboardEvent): void {\n if (this.isDisabled()) return;\n switch (e.key) {\n case 'ArrowUp':\n e.preventDefault();\n this.step(key, 1);\n break;\n case 'ArrowDown':\n e.preventDefault();\n this.step(key, -1);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n this.focusSeg(index - 1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n this.focusSeg(index + 1);\n break;\n case 'Home':\n e.preventDefault();\n this.setSegment(key, this.segMin(key));\n this.resetBuffer();\n break;\n case 'End':\n e.preventDefault();\n this.setSegment(key, this.segMax(key));\n this.resetBuffer();\n break;\n case 'Backspace':\n case 'Delete':\n e.preventDefault();\n this.setSegment(key, null);\n this.resetBuffer();\n if (e.key === 'Backspace') this.focusSeg(index - 1);\n break;\n default:\n if (/^[0-9]$/.test(e.key)) {\n e.preventDefault();\n this.typeDigit(key, index, e.key);\n }\n }\n }\n\n protected onSegFocus(key: MkDateSegment): void {\n // A fresh focus starts a new typing buffer for that segment.\n if (this.bufferKey !== key) this.resetBuffer();\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n /** A segment's minimum value (Home key). */\n private segMin(key: MkDateSegment): number {\n return key === 'year' ? this.yearMin() : 1;\n }\n\n /** A segment's maximum value (End key). */\n private segMax(key: MkDateSegment): number {\n if (key === 'day') return this.monthLength();\n if (key === 'month') return 12;\n return this.yearMax();\n }\n\n /** Step a segment by `delta`; the day wraps within the current month. */\n protected step(key: MkDateSegment, delta: number): void {\n if (key === 'day') {\n const len = this.monthLength();\n const cur = this.daySeg() ?? (delta > 0 ? 0 : len + 1);\n const next = ((cur - 1 + delta) % len + len) % len + 1;\n this.setSegment('day', next);\n } else if (key === 'month') {\n const cur = this.monthSeg() ?? (delta > 0 ? 0 : 13);\n const next = ((cur - 1 + delta) % 12 + 12) % 12 + 1;\n this.setSegment('month', next);\n } else {\n const base = this.yearSeg() ?? new Date().getFullYear() - delta;\n const next = Math.min(this.yearMax(), Math.max(this.yearMin(), base + delta));\n this.setSegment('year', next);\n }\n this.resetBuffer();\n }\n\n /** OTP-style digit entry with auto-advance to the next segment when full. */\n private typeDigit(key: MkDateSegment, index: number, digit: string): void {\n if (this.bufferKey !== key) this.buffer = '';\n this.bufferKey = key;\n const maxDigits = key === 'year' ? 4 : 2;\n const max =\n key === 'day'\n ? this.monthLength()\n : key === 'month'\n ? 12\n : this.yearMax();\n\n let buf = this.buffer + digit;\n let num = Number(buf);\n // If the running value overflows the max, restart the buffer with this digit.\n if (num > max || buf.length > maxDigits) {\n buf = digit;\n num = Number(buf);\n }\n this.buffer = buf;\n this.setSegment(key, num === 0 ? null : num);\n\n // Advance when the segment is saturated (full width, or another digit\n // could only overflow the max).\n const full = buf.length >= maxDigits || num * 10 > max;\n if (full) {\n this.resetBuffer();\n this.focusSeg(index + 1);\n }\n }\n\n /** Set a segment, then rebuild + emit the composite date. */\n protected setSegment(key: MkDateSegment, value: number | null): void {\n if (key === 'day') this.daySeg.set(value);\n else if (key === 'month') this.monthSeg.set(value);\n else this.yearSeg.set(value);\n this.recompute();\n }\n\n /**\n * Rebuild the `Date` from the three segments and emit it. Emits `null` unless\n * all three are set; clamps the day to the month length and the whole date to\n * `[min, max]`, writing any clamp back into the segments.\n */\n private recompute(): void {\n const d = this.daySeg();\n const m = this.monthSeg();\n const y = this.yearSeg();\n if (d == null || m == null || y == null) {\n this.emit(null);\n return;\n }\n const len = daysInMonth(m, y);\n const clampedDay = Math.min(d, len);\n if (clampedDay !== d) this.daySeg.set(clampedDay);\n\n const raw = new Date(y, m - 1, clampedDay);\n const bounded = clampDate(startOfDay(raw), this.min(), this.max());\n if (!isSameDay(bounded, raw)) this.split(bounded);\n this.emit(startOfDay(bounded));\n }\n\n private emit(v: Date | null): void {\n this.value.set(v);\n this.onChange(v);\n }\n\n /** Populate the three segments from a `Date`. */\n private split(date: Date): void {\n this.daySeg.set(date.getDate());\n this.monthSeg.set(date.getMonth() + 1);\n this.yearSeg.set(date.getFullYear());\n }\n\n private resetBuffer(): void {\n this.buffer = '';\n this.bufferKey = null;\n }\n\n private focusSeg(index: number): void {\n const els = this.segEls();\n const el = els[Math.max(0, Math.min(els.length - 1, index))];\n el?.nativeElement.focus();\n this.resetBuffer();\n }\n\n private pad(v: number | null, width: number, placeholder: string): string {\n return v == null ? placeholder : String(v).padStart(width, '0');\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: Date | null): void {\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n this.split(value);\n } else {\n this.daySeg.set(null);\n this.monthSeg.set(null);\n this.yearSeg.set(null);\n }\n this.value.set(value ?? null);\n this.resetBuffer();\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!(v instanceof Date) || Number.isNaN(v.getTime())) return null;\n const day = startOfDay(v);\n const min = this.min();\n if (min && isBefore(day, startOfDay(min))) return { mkMinDate: { min, actual: v } };\n const max = this.max();\n if (max && isAfter(day, startOfDay(max))) return { mkMaxDate: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","@for (part of parts(); track part.key; let last = $last) {\n <span\n #seg\n class=\"mk-mini-date__seg\"\n [class.mk-mini-date__seg--empty]=\"!part.filled\"\n [id]=\"segId + '-' + part.key\"\n role=\"spinbutton\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-label]=\"part.label\"\n [attr.aria-valuenow]=\"part.valueNow\"\n [attr.aria-valuemin]=\"part.valueMin\"\n [attr.aria-valuemax]=\"part.valueMax\"\n [attr.aria-valuetext]=\"part.valueText\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onSegKeydown(part.key, $index, $event)\"\n (focus)=\"onSegFocus(part.key)\"\n (blur)=\"onBlur()\"\n >{{ part.display }}</span>\n @if (!last) {\n <span class=\"mk-mini-date__sep\" aria-hidden=\"true\">/</span>\n }\n}\n","/**\n * DATE & TIME components group barrel for @mk-kit/ui.\n * Re-exports every public component, the shared date helpers, and the\n * `MkDateRange` type.\n */\nexport * from './datetime/date-utils';\nexport * from './calendar';\nexport * from './date-picker';\nexport * from './time-picker';\nexport * from './datetime-picker';\nexport * from './date-range-picker';\nexport * from './month-picker';\nexport * from './week-picker';\nexport * from './event-calendar';\nexport * from './mini-date';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["pad2","minutesOfDay"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mk-kit-ui-datetime.mjs","sources":["../../../projects/mk-kit/datetime/datetime/date-utils.ts","../../../projects/mk-kit/datetime/calendar/calendar.ts","../../../projects/mk-kit/datetime/calendar/calendar.html","../../../projects/mk-kit/datetime/date-picker/date-picker.ts","../../../projects/mk-kit/datetime/date-picker/date-picker.html","../../../projects/mk-kit/datetime/time-picker/time-picker.ts","../../../projects/mk-kit/datetime/time-picker/time-picker.html","../../../projects/mk-kit/datetime/datetime-picker/datetime-picker.ts","../../../projects/mk-kit/datetime/datetime-picker/datetime-picker.html","../../../projects/mk-kit/datetime/date-range-picker/date-range-picker.ts","../../../projects/mk-kit/datetime/date-range-picker/date-range-picker.html","../../../projects/mk-kit/datetime/month-picker/month-picker.ts","../../../projects/mk-kit/datetime/month-picker/month-picker.html","../../../projects/mk-kit/datetime/week-picker/week-picker.ts","../../../projects/mk-kit/datetime/week-picker/week-picker.html","../../../projects/mk-kit/datetime/event-calendar/event-calendar-layout.ts","../../../projects/mk-kit/datetime/event-calendar/event-calendar.ts","../../../projects/mk-kit/datetime/event-calendar/event-calendar.html","../../../projects/mk-kit/datetime/mini-date/mini-date.ts","../../../projects/mk-kit/datetime/mini-date/mini-date.html","../../../projects/mk-kit/datetime/index.ts","../../../projects/mk-kit/datetime/mk-kit-ui-datetime.ts"],"sourcesContent":["/** Delegates to `@mk-kit/core` — the exported names are unchanged. */\nexport {\n addDays,\n addMonths,\n buildMonthMatrix,\n clampDate,\n endOfMonth,\n endOfWeek,\n formatDate,\n formatISODate,\n getISOWeek,\n getMonthNames,\n getWeekdayFullName,\n getWeekdayNames,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n parseISODate,\n startOfDay,\n startOfMonth,\n startOfWeek,\n type MkWeekday,\n} from '@mk-kit/core';\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n forwardRef,\n booleanAttribute,\n computed,\n effect,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n untracked,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport {\n addDays,\n addMonths,\n buildMonthMatrix,\n clampDate,\n formatDate,\n getWeekdayFullName,\n isAfter,\n isBefore,\n isSameDay,\n isSameMonth,\n startOfDay,\n startOfMonth,\n} from '../datetime/date-utils';\n\n/** Weekday header descriptor (short label + full name for `abbr[title]`). */\ninterface MkWeekdayHeader {\n short: string;\n full: string;\n}\n\n/**\n * Calendar — an accessible month-grid date picker following the WAI-ARIA\n * grid / date-picker pattern. It is the reusable core behind\n * `mk-date-picker` and `mk-date-range-picker`.\n *\n * Keyboard (when a day has focus): Arrow keys move by day/week (crossing month\n * boundaries updates the view), Home/End jump to the start/end of the week,\n * PageUp/PageDown change month, Shift+PageUp/PageDown change year, and\n * Enter/Space selects the focused day. A roving tabindex keeps a single tab\n * stop. Month changes are announced via {@link MkLiveAnnouncer}.\n *\n * Exposes a two-way `value` model and implements `ControlValueAccessor`, so it\n * also works directly with `ngModel` / `formControl` (single-date mode).\n * Additive range inputs (`rangeMode`,\n * `rangeStart`, `rangeEnd`) let it highlight an in-progress selection without\n * affecting single-date use; range hosts listen to `dateSelected`.\n *\n * ```html\n * <mk-calendar [(value)]=\"date\" [min]=\"minDate\" [firstDayOfWeek]=\"1\" />\n * ```\n */\n@Component({\n selector: 'mk-calendar',\n templateUrl: './calendar.html',\n styleUrl: './calendar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkCalendar),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkCalendar),\n multi: true,\n },\n ],\n host: {\n class: 'mk-calendar',\n '[class.mk-calendar--disabled]': 'isControlDisabled()',\n '(focusout)': 'onFocusout($event)',\n '[class.mk-calendar--sm]': \"size() === 'sm'\",\n '[class.mk-calendar--md]': \"size() === 'md'\",\n '[class.mk-calendar--lg]': \"size() === 'lg'\",\n '[class.mk-calendar--full]': 'fullWidth()',\n '[class.mk-calendar--range]': 'rangeMode()',\n '[class.mk-calendar--invalid]': 'isInvalid()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n },\n})\nexport class MkCalendar implements ControlValueAccessor, Validator {\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n protected readonly i18n = inject(MK_I18N);\n private readonly injector = inject(Injector);\n private readonly announcer = inject(MkLiveAnnouncer);\n\n /** Two-way selected date (single-date mode). */\n readonly value = model<Date | null>(null);\n /** Earliest selectable date (inclusive, day granularity). */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable date (inclusive, day granularity). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** First column of the week: 0 = Sunday … 6 = Saturday. */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Disable the whole calendar. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force the invalid visual + `aria-invalid` when used standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Predicate marking individual days as disabled. */\n readonly disabledDate = input<((d: Date) => boolean) | null>(null);\n /** Control size. */\n readonly size = input<MkSize>('md');\n /**\n * Stretch to fill the container instead of sizing to content.\n *\n * Off by default, because the common host is a date-picker popover that must\n * stay a compact widget. Turn it on when the calendar is laid out as part of\n * a page — a sidebar or a column — where sizing to content leaves the space\n * beside it empty. Cells share the width evenly and `--_cell-size` becomes\n * their minimum rather than their fixed size.\n */\n readonly fullWidth = input(false, { transform: booleanAttribute });\n\n // --- Range mode (additive; does not affect single-date use) --------------\n /** Enable range highlighting. Hosts drive selection via `dateSelected`. */\n readonly rangeMode = input(false, { transform: booleanAttribute });\n /** Range start endpoint to highlight (range mode). */\n readonly rangeStart = input<Date | null>(null);\n /** Range end endpoint to highlight (range mode). */\n readonly rangeEnd = input<Date | null>(null);\n\n /** Emitted whenever a (non-disabled) day is activated. */\n readonly dateSelected = output<Date>();\n /**\n * Emitted (in range mode) as the pointer hovers days — the hovered day, or\n * `null` on leave. Lets hosts preview a selection (e.g. a whole-week\n * highlight in `mk-week-picker`).\n */\n readonly dateHovered = output<Date | null>();\n\n /** id of the visible month/year label — wire as the grid's label. */\n readonly labelId = mkUniqueId('mk-calendar-label');\n\n /** Disabled state driven by forms (`setDisabledState`). */\n protected readonly cvaDisabled = signal(false);\n\n /** The day that currently owns the roving tabindex; also drives the view. */\n protected readonly focusedDate = signal<Date>(this.initialFocus());\n /** Hovered day used to preview a range before the end is picked. */\n protected readonly hoveredDate = signal<Date | null>(null);\n\n /** Disabled by the `disabled` input or by the bound form control. */\n protected readonly isControlDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly isInvalid = computed(() => this.invalid() && this.fieldTouched());\n\n /** First day of the visible month. */\n protected readonly viewMonth = computed(() =>\n startOfMonth(this.focusedDate()),\n );\n /** Human label for the visible month, e.g. `July 2026`. */\n protected readonly monthLabel = computed(() =>\n formatDate(this.viewMonth(), 'MMMM yyyy', this.i18n.dateNames),\n );\n /** 6×7 grid of dates for the visible month. */\n protected readonly weeks = computed(() =>\n buildMonthMatrix(this.viewMonth(), this.firstDayOfWeek()),\n );\n /** Weekday column headers ordered from `firstDayOfWeek`. */\n protected readonly weekdays = computed<MkWeekdayHeader[]>(() =>\n this.weeks()[0].map((d) => ({\n short: formatDate(d, 'ddd', this.i18n.dateNames),\n full: getWeekdayFullName(d, this.i18n.dateNames),\n })),\n );\n\n private announcedMonth = this.monthLabel();\n\n constructor() {\n // Follow external value changes into the view/focus. Read focusedDate\n // untracked so this effect only reacts to `value` — otherwise navigating\n // months (which moves focusedDate) would re-run it and snap the view back.\n effect(() => {\n const v = this.value();\n if (v && !isSameDay(v, untracked(this.focusedDate))) {\n this.focusedDate.set(startOfDay(v));\n }\n });\n // Announce month transitions for screen-reader users.\n effect(() => {\n const label = this.monthLabel();\n if (label !== this.announcedMonth) {\n this.announcedMonth = label;\n this.announcer.announce(label);\n }\n });\n }\n\n // --- ControlValueAccessor ---------------------------------------------------\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n writeValue(value: Date | null): void {\n this.value.set(value instanceof Date ? startOfDay(value) : null);\n }\n\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n /** Marks the control touched when focus leaves the calendar entirely. */\n protected onFocusout(event: FocusEvent): void {\n const next = event.relatedTarget as Node | null;\n if (!next || !this.host.nativeElement.contains(next)) this.onTouched();\n }\n\n private initialFocus(): Date {\n const base = this.value() ?? new Date();\n return startOfDay(clampDate(startOfDay(base), this.min(), this.max()));\n }\n\n // --- Day classification ---------------------------------------------------\n protected isOutside(d: Date): boolean {\n return !isSameMonth(d, this.viewMonth());\n }\n\n protected isDisabled(d: Date): boolean {\n if (this.isControlDisabled()) return true;\n const day = startOfDay(d);\n const min = this.min();\n const max = this.max();\n if (min && isBefore(day, startOfDay(min))) return true;\n if (max && isAfter(day, startOfDay(max))) return true;\n return this.disabledDate()?.(d) ?? false;\n }\n\n protected isToday(d: Date): boolean {\n return isSameDay(d, new Date());\n }\n\n protected isSelected(d: Date): boolean {\n const v = this.value();\n return !this.rangeMode() && !!v && isSameDay(d, v);\n }\n\n protected isFocused(d: Date): boolean {\n return isSameDay(d, this.focusedDate());\n }\n\n /** Effective range end while previewing (falls back to the hovered day). */\n private previewEnd(): Date | null {\n return this.rangeEnd() ?? this.hoveredDate();\n }\n\n protected isRangeStart(d: Date): boolean {\n const s = this.rangeStart();\n return this.rangeMode() && !!s && isSameDay(d, s);\n }\n\n protected isRangeEnd(d: Date): boolean {\n if (!this.rangeMode()) return false;\n const end = this.previewEnd();\n return !!end && isSameDay(d, end);\n }\n\n protected isInRange(d: Date): boolean {\n if (!this.rangeMode()) return false;\n const s = this.rangeStart();\n const end = this.previewEnd();\n if (!s || !end) return false;\n const [lo, hi] = isAfter(end, s) ? [s, end] : [end, s];\n const day = startOfDay(d);\n return isAfter(day, startOfDay(lo)) && isBefore(day, startOfDay(hi));\n }\n\n /**\n * `aria-selected` state of a day's gridcell. Single-date mode mirrors\n * `isSelected`; range mode exposes the committed endpoints and the days\n * between them (hover previews stay visual-only so the accessibility tree\n * doesn't churn while the pointer moves).\n */\n protected isAriaSelected(d: Date): boolean {\n if (!this.rangeMode()) return this.isSelected(d);\n const s = this.rangeStart();\n const e = this.rangeEnd();\n if (s && isSameDay(d, s)) return true;\n if (e && isSameDay(d, e)) return true;\n if (!s || !e) return false;\n const [lo, hi] = isAfter(e, s) ? [s, e] : [e, s];\n const day = startOfDay(d);\n return isAfter(day, startOfDay(lo)) && isBefore(day, startOfDay(hi));\n }\n\n protected dayLabel(d: Date): string {\n return formatDate(d, 'MMMM d, yyyy', this.i18n.dateNames);\n }\n\n // --- Interaction ----------------------------------------------------------\n protected select(d: Date): void {\n if (this.isDisabled(d)) return;\n const day = startOfDay(d);\n this.focusedDate.set(day);\n if (!this.rangeMode()) {\n this.value.set(day);\n this.onChange(day);\n }\n this.dateSelected.emit(day);\n this.focusActiveCell();\n }\n\n protected onHover(d: Date): void {\n if (!this.rangeMode()) return;\n const day = startOfDay(d);\n this.hoveredDate.set(day);\n this.dateHovered.emit(day);\n }\n\n protected clearHover(): void {\n if (!this.rangeMode()) return;\n this.hoveredDate.set(null);\n this.dateHovered.emit(null);\n }\n\n protected prevMonth(): void {\n this.moveFocus(addMonths(this.focusedDate(), -1));\n }\n protected nextMonth(): void {\n this.moveFocus(addMonths(this.focusedDate(), 1));\n }\n protected prevYear(): void {\n this.moveFocus(addMonths(this.focusedDate(), -12));\n }\n protected nextYear(): void {\n this.moveFocus(addMonths(this.focusedDate(), 12));\n }\n\n protected onGridKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n const current = this.focusedDate();\n let next: Date | null = null;\n\n switch (e.key) {\n case 'ArrowLeft':\n next = addDays(current, -1);\n break;\n case 'ArrowRight':\n next = addDays(current, 1);\n break;\n case 'ArrowUp':\n next = addDays(current, -7);\n break;\n case 'ArrowDown':\n next = addDays(current, 7);\n break;\n case 'Home':\n next = addDays(current, -this.weekdayOffset(current));\n break;\n case 'End':\n next = addDays(current, 6 - this.weekdayOffset(current));\n break;\n case 'PageUp':\n next = addMonths(current, e.shiftKey ? -12 : -1);\n break;\n case 'PageDown':\n next = addMonths(current, e.shiftKey ? 12 : 1);\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n this.select(current);\n return;\n default:\n return;\n }\n\n e.preventDefault();\n if (next) this.moveFocus(next);\n }\n\n private weekdayOffset(d: Date): number {\n return (d.getDay() - this.firstDayOfWeek() + 7) % 7;\n }\n\n private moveFocus(target: Date): void {\n this.focusedDate.set(startOfDay(target));\n this.focusActiveCell();\n }\n\n private focusActiveCell(): void {\n afterNextRender(\n {\n write: () => {\n const el = this.host.nativeElement.querySelector<HTMLElement>(\n '.mk-calendar__day[tabindex=\"0\"]',\n );\n el?.focus();\n },\n },\n { injector: this.injector },\n );\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n this.disabledDate();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` for a date outside `[min]`/`[max]`, and\n * `mkDateFilter` for one rejected by `[disabledDate]`.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!(v instanceof Date) || Number.isNaN(v.getTime())) return null;\n const day = startOfDay(v);\n const min = this.min();\n if (min && isBefore(day, startOfDay(min))) return { mkMinDate: { min, actual: v } };\n const max = this.max();\n if (max && isAfter(day, startOfDay(max))) return { mkMaxDate: { max, actual: v } };\n return this.disabledDate()?.(v) ? { mkDateFilter: true } : null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div class=\"mk-calendar__header\">\n <button\n type=\"button\"\n class=\"mk-calendar__nav\"\n [attr.aria-label]=\"i18n.previousMonth\"\n (click)=\"prevMonth()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n d=\"M15 5l-7 7 7 7\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <span class=\"mk-calendar__label\" [id]=\"labelId\" aria-live=\"polite\">{{\n monthLabel()\n }}</span>\n\n <button\n type=\"button\"\n class=\"mk-calendar__nav\"\n [attr.aria-label]=\"i18n.nextMonth\"\n (click)=\"nextMonth()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n d=\"M9 5l7 7-7 7\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n</div>\n\n<table\n class=\"mk-calendar__grid\"\n role=\"grid\"\n [attr.aria-labelledby]=\"labelId\"\n (keydown)=\"onGridKeydown($event)\"\n>\n <thead>\n <tr>\n @for (wd of weekdays(); track $index) {\n <th class=\"mk-calendar__weekday\" scope=\"col\">\n <abbr [title]=\"wd.full\">{{ wd.short }}</abbr>\n </th>\n }\n </tr>\n </thead>\n <tbody (mouseleave)=\"clearHover()\">\n @for (week of weeks(); track $index) {\n <tr>\n @for (day of week; track day.getTime()) {\n <td\n class=\"mk-calendar__cell\"\n role=\"gridcell\"\n [attr.aria-selected]=\"isAriaSelected(day) || null\"\n >\n <button\n type=\"button\"\n class=\"mk-calendar__day\"\n [class.mk-calendar__day--outside]=\"isOutside(day)\"\n [class.mk-calendar__day--today]=\"isToday(day)\"\n [class.mk-calendar__day--selected]=\"isSelected(day)\"\n [class.mk-calendar__day--range-start]=\"isRangeStart(day)\"\n [class.mk-calendar__day--range-end]=\"isRangeEnd(day)\"\n [class.mk-calendar__day--in-range]=\"isInRange(day)\"\n [class.mk-calendar__day--disabled]=\"isDisabled(day)\"\n [attr.tabindex]=\"isFocused(day) ? 0 : -1\"\n [attr.aria-label]=\"dayLabel(day)\"\n [attr.aria-current]=\"isToday(day) ? 'date' : null\"\n [attr.aria-disabled]=\"isDisabled(day) || null\"\n (click)=\"select(day)\"\n (mouseenter)=\"onHover(day)\"\n >\n <span class=\"mk-calendar__day-num\">{{ day.getDate() }}</span>\n </button>\n </td>\n }\n </tr>\n }\n </tbody>\n</table>\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport { MkCalendar } from '../calendar/calendar';\nimport {\n clampDate,\n formatDate,\n isAfter,\n isBefore,\n parseISODate,\n startOfDay,\n} from '../datetime/date-utils';\n\n/**\n * DatePicker — a text field paired with a calendar popover. Type a date (parsed\n * on blur/Enter) or pick one from the `mk-calendar`. Implements\n * `ControlValueAccessor` and a two-way `value` model, so it works with\n * `[(ngModel)]`, reactive forms and `[(value)]`.\n *\n * The calendar opens below the field, closes on Escape / outside click / after\n * a selection, and wires `aria-expanded` / `aria-haspopup` / `aria-invalid`.\n * When nested in an `mk-form-field` it adopts the field's id and aria wiring.\n *\n * ```html\n * <mk-date-picker [(value)]=\"date\" [min]=\"minDate\" clearable />\n * ```\n */\n@Component({\n selector: 'mk-date-picker',\n templateUrl: './date-picker.html',\n styleUrl: './date-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkCalendar, MkAnchoredPanel],\n host: {\n class: 'mk-date-picker',\n '[class.mk-date-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-date-picker--md]': \"effectiveSize() === 'md'\",\n '[class.mk-date-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-date-picker--open]': 'open()',\n '[class.mk-date-picker--invalid]': 'isInvalid()',\n '[class.mk-date-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkDatePicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkDatePicker),\n multi: true,\n },\n ],\n})\nexport class MkDatePicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly inputRef =\n viewChild<ElementRef<HTMLInputElement>>('textInput');\n /** The calendar panel — lives in the top layer once opened. */\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** Two-way selected date. */\n readonly value = model<Date | null>(null);\n /** Earliest selectable date (inclusive). */\n /** Accessible name when the picker is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n protected readonly ariaLabelAttr = computed(() => (this.field ? null : this.ariaLabel() || null));\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable date (inclusive). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Predicate marking individual days as disabled (threaded to the calendar). */\n readonly disabledDate = input<((d: Date) => boolean) | null>(null);\n /** Placeholder shown when empty. */\n readonly placeholder = input(this.i18n.selectDate);\n /** Pattern used to render the selected date in the field. */\n readonly displayFormat = input<string>('MMM d, yyyy');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a date is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** First column of the calendar week (0 = Sunday). */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n /** Editable text mirror of the field. */\n protected readonly inputText = signal('');\n private readonly cvaDisabled = signal(false);\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-date-picker');\n readonly panelId = mkUniqueId('mk-date-picker-panel');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly showClear = computed(\n () => this.clearable() && !!this.value() && !this.isDisabled(),\n );\n\n constructor() {\n // Keep the text field in sync with the model (typing does not touch value).\n effect(() => {\n const v = this.value();\n this.inputText.set(\n v ? formatDate(v, this.displayFormat(), this.i18n.dateNames) : '',\n );\n });\n }\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n afterNextRender(\n {\n write: () => {\n const el = this.panelRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-calendar__day[tabindex=\"0\"]',\n );\n el?.focus();\n },\n },\n { injector: this.injector },\n );\n }\n\n protected close(): void {\n if (this.open()) this.open.set(false);\n }\n\n protected onCalendarPick(date: Date | null): void {\n this.setValue(date);\n this.close();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onInput(event: Event): void {\n this.inputText.set((event.target as HTMLInputElement).value);\n }\n\n protected onInputKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n this.commitInput();\n break;\n case 'ArrowDown':\n e.preventDefault();\n this.openPanel();\n break;\n case 'Escape':\n if (this.open()) {\n e.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n protected clear(): void {\n this.setValue(null);\n this.inputRef()?.nativeElement.focus();\n }\n\n private commitInput(): void {\n const text = this.inputText().trim();\n if (!text) {\n this.setValue(null);\n return;\n }\n const parsed = this.parse(text);\n if (parsed) {\n this.setValue(clampDate(parsed, this.min(), this.max()));\n } else {\n // Invalid entry — revert to the current model's display. The signal may\n // already hold that string (the model did not change), so the `[value]`\n // binding would not re-apply it: write the DOM value directly as well.\n const v = this.value();\n const text = v ? formatDate(v, this.displayFormat(), this.i18n.dateNames) : '';\n this.inputText.set(text);\n const el = this.inputRef()?.nativeElement;\n if (el) el.value = text;\n }\n }\n\n private parse(text: string): Date | null {\n const iso = parseISODate(text);\n if (iso) return iso;\n const ms = Date.parse(text);\n return Number.isNaN(ms) ? null : startOfDay(new Date(ms));\n }\n\n private setValue(date: Date | null): void {\n this.value.set(date);\n this.onChange(date);\n }\n\n protected onFocusOut(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n // Ignore focus moving into the field or the (top-layer) calendar panel.\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.commitInput();\n this.close();\n this.onTouched();\n }\n\n /**\n * Escape pressed inside the (teleported) calendar panel — close and return\n * focus to the input. `preventDefault` + `stopPropagation` keep any outer\n * Escape handling (e.g. a containing dialog) from also firing.\n */\n protected onPanelEscape(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n this.inputRef()?.nativeElement.focus();\n }\n\n /**\n * Focus left the teleported panel. The host `(focusout)` never sees this —\n * the panel lives under `document.body` — so Tab-out of the calendar is\n * handled here: close unless focus moved back into the field or the panel.\n */\n protected onPanelFocusout(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n // Focus fell to a non-focusable spot (body) — keep open; an outside\n // pointerdown is dismissed by the anchored panel itself.\n if (!related) return;\n if (this.host.nativeElement.contains(related)) return;\n if (this.panelRef()?.nativeElement.contains(related)) return;\n this.commitInput();\n this.close();\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: Date | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!(v instanceof Date) || Number.isNaN(v.getTime())) return null;\n const day = startOfDay(v);\n const min = this.min();\n if (min && isBefore(day, startOfDay(min))) return { mkMinDate: { min, actual: v } };\n const max = this.max();\n if (max && isAfter(day, startOfDay(max))) return { mkMaxDate: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-date-picker__field\">\n <input\n #textInput\n type=\"text\"\n class=\"mk-date-picker__input\"\n [id]=\"inputId\"\n [value]=\"inputText()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n autocomplete=\"off\"\n role=\"combobox\"\n [attr.aria-label]=\"ariaLabelAttr()\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onInputKeydown($event)\"\n />\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-date-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear()\"\n >\n <span class=\"mk-date-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"mk-date-picker__toggle\"\n [attr.aria-label]=\"i18n.openCalendar\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg\n class=\"mk-date-picker__icon\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"17\" rx=\"2\" />\n <path d=\"M3 9h18M8 2v4M16 2v4\" />\n </svg>\n </button>\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-date-picker__panel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n [id]=\"panelId\"\n role=\"dialog\"\n [attr.aria-label]=\"i18n.chooseDate\"\n (keydown.escape)=\"onPanelEscape($event)\"\n (focusout)=\"onPanelFocusout($event)\"\n >\n <mk-calendar\n [value]=\"value()\"\n (valueChange)=\"onCalendarPick($event)\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [size]=\"effectiveSize()\"\n [disabledDate]=\"disabledDate()\"\n />\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n untracked,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '@mk-kit/ui/forms';\n\n/** A selectable time option. */\ninterface MkTimeOption {\n /** Canonical `HH:mm` (24h) value. */\n value: string;\n /** Display label (respects `hour12`). */\n label: string;\n}\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : `${n}`;\n}\n\n/**\n * TimePicker — a 24-hour-canonical time field with an editable input plus a\n * scrollable list of times generated from `step`. The time itself is always\n * 24h canonical regardless of the `hour12` display. Implements\n * `ControlValueAccessor` and a two-way `value` model.\n *\n * The form value is either a `HH:mm` string (`\"14:30\"`, default) or a `Date`\n * carrying the time in its **local** hours/minutes (`valueFormat=\"date\"`, for\n * hosts whose model is a datetime — e.g. migrating off Material's\n * `mat-timepicker`); both modes read back either shape and `null` when empty.\n * Only the *emitted* value depends on `valueFormat` — internally the time is\n * always normalised to `HH:mm`, which is also what `min` / `max` compare.\n *\n * In `date` mode seconds and milliseconds are zeroed, and the **date part** is\n * taken from the current model value when that is already a `Date` (so editing\n * the time repeatedly never drifts the day); otherwise today's local date is\n * used. Assign a `Date` first if the day matters.\n *\n * Type a time (`14:30`, `2:30 pm`) or pick from the ARIA listbox\n * (Up/Down/Home/End/Enter/Esc; the active option scrolls into view). When\n * nested in an `mk-form-field` it adopts the field's id and aria wiring.\n *\n * ```html\n * <mk-time-picker [(value)]=\"time\" [step]=\"15\" hour12 clearable />\n * <mk-time-picker valueFormat=\"date\" [(value)]=\"pickupAt\" [step]=\"15\" />\n * ```\n */\n@Component({\n selector: 'mk-time-picker',\n templateUrl: './time-picker.html',\n styleUrl: './time-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-time-picker',\n '[class.mk-time-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-time-picker--md]': \"effectiveSize() === 'md'\",\n '[class.mk-time-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-time-picker--open]': 'open()',\n '[class.mk-time-picker--invalid]': 'isInvalid()',\n '[class.mk-time-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkTimePicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkTimePicker),\n multi: true,\n },\n ],\n})\nexport class MkTimePicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly inputRef = viewChild<ElementRef<HTMLInputElement>>('textInput');\n /** The listbox panel — lives in the top layer once opened. */\n private readonly listRef = viewChild<ElementRef<HTMLElement>>('list');\n\n /**\n * Two-way selected time: a canonical `HH:mm` (24h) string, a `Date` when\n * `valueFormat=\"date\"`, or `null`. Either shape may be assigned in either\n * mode; it is normalised to the configured format.\n */\n readonly value = model<string | Date | null>(null);\n /** Shape of the form value: a `HH:mm` string or a `Date`. */\n /** Accessible name when the picker is used without an `mk-form-field` label. */\n readonly ariaLabel = input<string>('', { alias: 'aria-label' });\n protected readonly ariaLabelAttr = computed(() => (this.field ? null : this.ariaLabel() || null));\n readonly valueFormat = input<'string' | 'date'>('string');\n /** Earliest selectable time `HH:mm` (inclusive). */\n readonly min = input<string | null, string | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable time `HH:mm` (inclusive). */\n readonly max = input<string | null, string | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Interval between generated options, in minutes. */\n readonly step = input(30, { transform: numberAttribute });\n /** Display 12-hour time with AM/PM (the model stays 24h). */\n readonly hour12 = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input(this.i18n.selectTime);\n /** Show a clear button when a time is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n protected readonly activeIndex = signal(-1);\n protected readonly inputText = signal('');\n /** The canonical `HH:mm` time behind whatever shape `value` carries. */\n private readonly time = signal<string | null>(null);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: string | Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n /** The last value this component itself wrote into the `value` model. */\n private lastDerived: string | Date | null = null;\n /** The day `date`-mode values land on — see {@link toDate}. */\n private datePart: Date | null = null;\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-time-picker');\n readonly listId = mkUniqueId('mk-time-picker-list');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(() => this.disabled() || this.cvaDisabled());\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly describedBy = computed(() => this.field?.describedBy() ?? null);\n protected readonly showClear = computed(\n () => this.clearable() && !!this.time() && !this.isDisabled(),\n );\n\n /** Generated, min/max-filtered list of selectable times. */\n protected readonly options = computed<MkTimeOption[]>(() => {\n const step = Math.max(1, Math.floor(this.step()));\n const min = this.min();\n const max = this.max();\n const out: MkTimeOption[] = [];\n for (let mins = 0; mins < 24 * 60; mins += step) {\n const value = `${pad2(Math.floor(mins / 60))}:${pad2(mins % 60)}`;\n if (min && value < min) continue;\n if (max && value > max) continue;\n out.push({ value, label: this.display(value) });\n }\n return out;\n });\n\n protected readonly selectedIndex = computed(() =>\n this.options().findIndex((o) => o.value === this.time()),\n );\n\n constructor() {\n effect(() => {\n const v = this.time();\n // hour12 is read so the label follows the display mode.\n this.inputText.set(v ? this.display(v) : '');\n });\n // Parse values assigned from outside ([(value)] writes we didn't derive),\n // and re-shape the model when `valueFormat` changes.\n effect(() => {\n const v = this.value();\n const external = v !== this.lastDerived;\n this.valueFormat();\n untracked(() => {\n if (external) this.applyExternal(v);\n this.deriveValue(false);\n });\n });\n }\n\n protected optionId(index: number): string {\n return `${this.listId}-opt-${index}`;\n }\n\n private display(hhmm: string): string {\n const [h, m] = hhmm.split(':').map(Number);\n if (this.hour12()) {\n const ap = h < 12 ? 'AM' : 'PM';\n const hh = h % 12 || 12;\n return `${hh}:${pad2(m)} ${ap}`;\n }\n return `${pad2(h)}:${pad2(m)}`;\n }\n\n private parse(text: string): string | null {\n const m = /^\\s*(\\d{1,2})(?::(\\d{2}))?\\s*(am|pm)?\\s*$/i.exec(text);\n if (!m) return null;\n let h = Number(m[1]);\n const min = m[2] ? Number(m[2]) : 0;\n const ap = m[3]?.toLowerCase();\n if (ap) {\n if (h < 1 || h > 12) return null;\n if (ap === 'pm' && h !== 12) h += 12;\n if (ap === 'am' && h === 12) h = 0;\n }\n if (h > 23 || min > 59) return null;\n return `${pad2(h)}:${pad2(min)}`;\n }\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openList();\n }\n\n protected openList(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n const sel = this.selectedIndex();\n this.activeIndex.set(sel >= 0 ? sel : 0);\n this.scrollActiveIntoView();\n }\n\n protected close(): void {\n if (this.open()) {\n this.open.set(false);\n this.activeIndex.set(-1);\n }\n }\n\n protected selectOption(index: number): void {\n const opt = this.options()[index];\n if (!opt) return;\n this.setValue(opt.value);\n this.close();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected clear(): void {\n this.setValue(null);\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onInput(event: Event): void {\n this.inputText.set((event.target as HTMLInputElement).value);\n }\n\n protected onInputKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n\n if (!this.open()) {\n if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {\n e.preventDefault();\n this.openList();\n } else if (e.key === 'Enter') {\n e.preventDefault();\n this.commitInput();\n }\n return;\n }\n\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.moveActive(-1);\n break;\n case 'Home':\n e.preventDefault();\n this.activeIndex.set(0);\n this.scrollActiveIntoView();\n break;\n case 'End':\n e.preventDefault();\n this.activeIndex.set(this.options().length - 1);\n this.scrollActiveIntoView();\n break;\n case 'Enter':\n e.preventDefault();\n if (this.activeIndex() >= 0) this.selectOption(this.activeIndex());\n else this.commitInput();\n break;\n case 'Escape':\n e.preventDefault();\n this.close();\n break;\n }\n }\n\n private moveActive(delta: number): void {\n const len = this.options().length;\n if (!len) return;\n const next = (this.activeIndex() + delta + len) % len;\n this.activeIndex.set(next);\n this.scrollActiveIntoView();\n }\n\n private commitInput(): void {\n const text = this.inputText().trim();\n if (!text) {\n this.setValue(null);\n this.close();\n return;\n }\n const parsed = this.parse(text);\n if (parsed && this.withinBounds(parsed)) {\n this.setValue(parsed);\n } else {\n const v = this.time();\n this.inputText.set(v ? this.display(v) : '');\n }\n this.close();\n }\n\n private withinBounds(value: string): boolean {\n const min = this.min();\n const max = this.max();\n if (min && value < min) return false;\n if (max && value > max) return false;\n return true;\n }\n\n // --- Value plumbing -------------------------------------------------------\n\n private setValue(value: string | null): void {\n this.time.set(value);\n this.deriveValue(true);\n }\n\n /** Compute the outward value and push it to the model (+ form when `emit`). */\n private deriveValue(emit: boolean): void {\n const hhmm = this.time();\n const next = hhmm === null ? null : this.valueFormat() === 'date' ? this.toDate(hhmm) : hhmm;\n // Keep the previous instance when it means the same time, so repeated\n // edits don't churn `Date` identities (nor the date part they carry).\n if (!this.sameValue(next, this.lastDerived) || this.value() !== this.lastDerived) {\n this.lastDerived = next;\n this.value.set(next);\n }\n if (emit) this.onChange(this.lastDerived);\n }\n\n private sameValue(a: string | Date | null, b: string | Date | null): boolean {\n if (a === b) return true;\n if (a instanceof Date && b instanceof Date) return a.getTime() === b.getTime();\n return false;\n }\n\n /**\n * Interpret an externally-assigned value (`writeValue` or `[value]`): it\n * seeds the canonical time and, when it is a `Date`, the day that `date`-mode\n * values land on.\n */\n private applyExternal(v: unknown): void {\n this.datePart = v instanceof Date && !Number.isNaN(v.getTime()) ? new Date(v) : null;\n this.time.set(this.toHhmm(v));\n }\n\n /** Normalise any accepted shape to canonical `HH:mm`, or `null`. */\n private toHhmm(v: unknown): string | null {\n if (v instanceof Date) {\n return Number.isNaN(v.getTime()) ? null : `${pad2(v.getHours())}:${pad2(v.getMinutes())}`;\n }\n if (typeof v !== 'string' || !v.trim()) return null;\n return this.parse(v);\n }\n\n /**\n * Put `hh:mm` on a `Date`. The date part comes from the current value when\n * that is already a `Date` (so repeated edits never drift the day),\n * otherwise from today — always via the local accessors, never the UTC ones.\n */\n private toDate(hhmm: string): Date {\n const [h, m] = hhmm.split(':').map(Number);\n const base = this.datePart ? new Date(this.datePart) : new Date();\n base.setHours(h, m, 0, 0);\n this.datePart = base;\n return base;\n }\n\n private scrollActiveIntoView(): void {\n afterNextRender(\n {\n write: () => {\n const el = this.listRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-time-picker__option--active',\n );\n el?.scrollIntoView({ block: 'nearest' });\n },\n },\n { injector: this.injector },\n );\n }\n\n protected onFocusOut(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.listRef()?.nativeElement.contains(related)) return;\n this.commitInput();\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: string | Date | null): void {\n this.applyExternal(value);\n this.deriveValue(false);\n }\n registerOnChange(fn: (value: string | Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinTime` / `mkMaxTime` against the `[min]` and `[max]` inputs.\n * The control value is normalised to `HH:mm` first (so a `Date` model\n * validates too); both sides are then zero-padded `HH:mm`, so a\n * lexicographic compare is a chronological one.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = this.toHhmm(control.value);\n if (!v) return null;\n const min = this.min();\n if (min && v < min) return { mkMinTime: { min, actual: v } };\n const max = this.max();\n if (max && v > max) return { mkMaxTime: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-time-picker__field\">\n <input\n #textInput\n type=\"text\"\n class=\"mk-time-picker__input\"\n [id]=\"inputId\"\n [value]=\"inputText()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n autocomplete=\"off\"\n role=\"combobox\"\n [attr.aria-label]=\"ariaLabelAttr()\"\n aria-haspopup=\"listbox\"\n aria-autocomplete=\"none\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [attr.aria-activedescendant]=\"\n open() && activeIndex() >= 0 ? optionId(activeIndex()) : null\n \"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onInputKeydown($event)\"\n />\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-time-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear()\"\n >\n <span class=\"mk-time-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"mk-time-picker__toggle\"\n [attr.aria-label]=\"i18n.openTimeList\"\n aria-haspopup=\"listbox\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"listId\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg\n class=\"mk-time-picker__icon\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <circle cx=\"12\" cy=\"12\" r=\"9\" />\n <path d=\"M12 7v5l3 2\" />\n </svg>\n </button>\n</div>\n\n@if (open()) {\n <ul\n #list\n class=\"mk-time-picker__list\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n [matchWidth]=\"true\"\n (dismiss)=\"close()\"\n [id]=\"listId\"\n role=\"listbox\"\n >\n @for (opt of options(); track opt.value; let i = $index) {\n <li\n class=\"mk-time-picker__option\"\n [id]=\"optionId(i)\"\n role=\"option\"\n [attr.aria-selected]=\"i === selectedIndex()\"\n [class.mk-time-picker__option--active]=\"i === activeIndex()\"\n [class.mk-time-picker__option--selected]=\"i === selectedIndex()\"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"activeIndex.set(i)\"\n (click)=\"selectOption(i)\"\n >\n {{ opt.label }}\n </li>\n } @empty {\n <li class=\"mk-time-picker__empty\" role=\"presentation\">\n {{ i18n.noOptions }}\n </li>\n }\n </ul>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport { MkCalendar } from '../calendar/calendar';\nimport {\n formatDate,\n isSameDay,\n parseISODate,\n startOfDay,\n} from '../datetime/date-utils';\n\n/** A selectable time-of-day option in the panel's list. */\ninterface MkTimeOption {\n /** Minutes since midnight. */\n minutes: number;\n /** Display label (respects `hour12`). */\n label: string;\n /** Stable id for `aria-activedescendant`. */\n id: string;\n}\n\nfunction pad2(n: number): string {\n return n < 10 ? `0${n}` : `${n}`;\n}\n\n/** Minutes since local midnight, ignoring seconds. */\nfunction minutesOfDay(d: Date): number {\n return d.getHours() * 60 + d.getMinutes();\n}\n\n/** Same instant floored to the minute — bounds compare at minute precision. */\nfunction toMinute(d: Date): number {\n const c = new Date(d);\n c.setSeconds(0, 0);\n return c.getTime();\n}\n\n/** Put `minutes` since midnight onto `day`'s local date. */\nfunction combine(day: Date, minutes: number): Date {\n return new Date(\n day.getFullYear(),\n day.getMonth(),\n day.getDate(),\n Math.floor(minutes / 60),\n minutes % 60,\n 0,\n 0,\n );\n}\n\n/** Parse `14:30`, `2:30 pm`, `9` … into minutes since midnight, or null. */\nfunction parseTime(text: string): number | null {\n const m = /^\\s*(\\d{1,2})(?::(\\d{2}))?\\s*(am|pm)?\\s*$/i.exec(text);\n if (!m) return null;\n let h = Number(m[1]);\n const min = m[2] ? Number(m[2]) : 0;\n const ap = m[3]?.toLowerCase();\n if (ap) {\n if (h < 1 || h > 12) return null;\n if (ap === 'pm' && h !== 12) h += 12;\n if (ap === 'am' && h === 12) h = 0;\n }\n if (h > 23 || min > 59) return null;\n return h * 60 + min;\n}\n\n/**\n * DateTimePicker — one field for a date **and** a time of day. The panel pairs\n * an `mk-calendar` with a time list generated from `step`; the value is a\n * single `Date` carrying both parts in local time (seconds and milliseconds\n * zeroed). Implements `ControlValueAccessor` and a two-way `value` model, so it\n * works with `[(ngModel)]`, reactive forms and `[(value)]`.\n *\n * Interaction: picking a day keeps the panel open and — when a value already\n * exists — moves that value to the new day, preserving its time; picking a\n * time commits and closes. With no value yet, the day is held until a time is\n * chosen (so a half-picked datetime is never emitted). Typing also works:\n * `2026-08-26 14:30`, `2026-08-26T09:05`, `Aug 26, 2026 2:30 pm` and a bare\n * ISO date (→ midnight) are parsed on Enter/blur.\n *\n * `min` / `max` bound the whole instant at minute precision: the calendar\n * greys out days outside the range and the time list hides times outside it\n * on the boundary days. Validation reports `mkMinDate` / `mkMaxDate`.\n *\n * When nested in an `mk-form-field` it adopts the field's id and aria wiring.\n *\n * ```html\n * <mk-datetime-picker [(value)]=\"startsAt\" [step]=\"15\" [min]=\"now\" clearable />\n * <mk-datetime-picker [(value)]=\"startsAt\" hour12 />\n * ```\n */\n@Component({\n selector: 'mk-datetime-picker',\n templateUrl: './datetime-picker.html',\n styleUrl: './datetime-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkCalendar, MkAnchoredPanel],\n host: {\n class: 'mk-datetime-picker',\n '[class.mk-datetime-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-datetime-picker--md]': \"effectiveSize() === 'md'\",\n '[class.mk-datetime-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-datetime-picker--open]': 'open()',\n '[class.mk-datetime-picker--invalid]': 'isInvalid()',\n '[class.mk-datetime-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkDateTimePicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkDateTimePicker),\n multi: true,\n },\n ],\n})\nexport class MkDateTimePicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly inputRef =\n viewChild<ElementRef<HTMLInputElement>>('textInput');\n /** The panel — lives in the top layer once opened. */\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n private readonly timesRef = viewChild<ElementRef<HTMLElement>>('times');\n\n /** Two-way selected date-time (local; seconds and ms are zero). */\n readonly value = model<Date | null>(null);\n /** Earliest selectable instant (inclusive, minute precision). */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable instant (inclusive, minute precision). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Predicate marking individual days as disabled (threaded to the calendar). */\n readonly disabledDate = input<((d: Date) => boolean) | null>(null);\n /** Placeholder shown when empty. */\n readonly placeholder = input(this.i18n.selectDateTime);\n /**\n * Pattern used to render the value in the field. Defaults to\n * `'MMM d, yyyy HH:mm'`, or `'MMM d, yyyy h:mm a'` when `hour12` is set.\n */\n readonly displayFormat = input<string | null>(null);\n /** Interval between generated time options, in minutes. */\n readonly step = input(30, { transform: numberAttribute });\n /** Display 12-hour times with AM/PM (the model is a `Date` either way). */\n readonly hour12 = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a value is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Mark required (adds `aria-required`). Set by Signal Forms' `[formField]` from the schema. */\n readonly required = input(false, { transform: booleanAttribute });\n /** First column of the calendar week (0 = Sunday). */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n /** Editable text mirror of the field. */\n protected readonly inputText = signal('');\n /** Keyboard-active option in the time list (index into `options`). */\n protected readonly activeIndex = signal(-1);\n /** Day picked in the calendar while there is no value yet. */\n private readonly pendingDay = signal<Date | null>(null);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly inputId = this.field?.controlId ?? mkUniqueId('mk-datetime-picker');\n readonly panelId = mkUniqueId('mk-datetime-picker-panel');\n readonly listId = mkUniqueId('mk-datetime-picker-times');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(\n () => this.required() || (this.field?.isRequired() ?? false),\n );\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly showClear = computed(\n () => this.clearable() && !!this.value() && !this.isDisabled(),\n );\n protected readonly effectiveFormat = computed(\n () =>\n this.displayFormat() ??\n (this.hour12() ? 'MMM d, yyyy h:mm a' : 'MMM d, yyyy HH:mm'),\n );\n\n /** The day the calendar shows as selected: the value's day, else the pending one. */\n protected readonly calendarValue = computed<Date | null>(() => {\n const v = this.value();\n return v ? startOfDay(v) : this.pendingDay();\n });\n /** Day-granular bounds for the calendar (inclusive). */\n protected readonly calendarMin = computed(() => {\n const m = this.min();\n return m ? startOfDay(m) : null;\n });\n protected readonly calendarMax = computed(() => {\n const m = this.max();\n return m ? startOfDay(m) : null;\n });\n\n /**\n * Generated time options. On the `min` / `max` boundary day the list only\n * offers times inside the bound; on other days every step is listed.\n */\n protected readonly options = computed<MkTimeOption[]>(() => {\n const step = Math.max(1, Math.floor(this.step()));\n const day = this.calendarValue();\n const min = this.min();\n const max = this.max();\n const lo = day && min && isSameDay(day, min) ? minutesOfDay(min) : 0;\n const hi = day && max && isSameDay(day, max) ? minutesOfDay(max) : 24 * 60 - 1;\n const out: MkTimeOption[] = [];\n for (let mins = 0; mins < 24 * 60; mins += step) {\n if (mins < lo || mins > hi) continue;\n out.push({\n minutes: mins,\n label: this.displayTime(mins),\n id: `${this.listId}-opt-${mins}`,\n });\n }\n return out;\n });\n\n protected readonly selectedIndex = computed(() => {\n const v = this.value();\n if (!v) return -1;\n const mins = minutesOfDay(v);\n return this.options().findIndex((o) => o.minutes === mins);\n });\n\n constructor() {\n // Keep the text field in sync with the model (typing does not touch value).\n effect(() => {\n const v = this.value();\n this.inputText.set(\n v ? formatDate(v, this.effectiveFormat(), this.i18n.dateNames) : '',\n );\n });\n }\n\n // --- Display / parsing ------------------------------------------------------\n\n private displayTime(mins: number): string {\n const h = Math.floor(mins / 60);\n const m = mins % 60;\n if (this.hour12()) {\n const ap = h < 12 ? 'AM' : 'PM';\n return `${h % 12 || 12}:${pad2(m)} ${ap}`;\n }\n return `${pad2(h)}:${pad2(m)}`;\n }\n\n /**\n * Accepts `YYYY-MM-DD[ T]HH:mm[ am|pm]`, a bare ISO date (→ midnight), any\n * `Date.parse`-able date followed by a time, or a full `Date.parse`-able\n * string. Seconds are dropped.\n */\n private parse(text: string): Date | null {\n const iso = /^(\\d{4}-\\d{2}-\\d{2})(?:[T\\s]+(.+))?$/.exec(text);\n if (iso) {\n const day = parseISODate(iso[1]);\n if (!day) return null;\n if (!iso[2]) return day;\n const mins = parseTime(iso[2]);\n return mins === null ? null : combine(day, mins);\n }\n const split = /^(.*\\S)[\\s,]+(\\d{1,2}(?::\\d{2})?\\s*(?:am|pm)?)$/i.exec(text);\n if (split) {\n const mins = parseTime(split[2]);\n const ms = Date.parse(split[1]);\n if (mins !== null && !Number.isNaN(ms)) {\n return combine(startOfDay(new Date(ms)), mins);\n }\n }\n const ms = Date.parse(text);\n if (Number.isNaN(ms)) return null;\n const d = new Date(ms);\n d.setSeconds(0, 0);\n return d;\n }\n\n private clamp(d: Date): Date {\n const min = this.min();\n const max = this.max();\n if (min && toMinute(d) < toMinute(min)) return combine(min, minutesOfDay(min));\n if (max && toMinute(d) > toMinute(max)) return combine(max, minutesOfDay(max));\n return d;\n }\n\n // --- Panel ---------------------------------------------------------------\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n const sel = this.selectedIndex();\n this.activeIndex.set(sel >= 0 ? sel : this.nearestIndex(new Date()));\n afterNextRender(\n {\n write: () => {\n const el = this.panelRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-calendar__day[tabindex=\"0\"]',\n );\n el?.focus();\n this.scrollActiveIntoView();\n },\n },\n { injector: this.injector },\n );\n }\n\n protected close(): void {\n if (this.open()) {\n this.open.set(false);\n this.activeIndex.set(-1);\n }\n }\n\n /** Index of the first option at or after `d`'s time of day (for the initial highlight). */\n private nearestIndex(d: Date): number {\n const mins = minutesOfDay(d);\n const i = this.options().findIndex((o) => o.minutes >= mins);\n return i >= 0 ? i : Math.max(0, this.options().length - 1);\n }\n\n protected onCalendarPick(day: Date | null): void {\n if (!day) return;\n const current = this.value();\n if (current) {\n this.setValue(this.clamp(combine(day, minutesOfDay(current))));\n } else {\n this.pendingDay.set(startOfDay(day));\n }\n // Hand focus to the time list so the second half of the pick is one\n // keystroke away; the highlighted option follows the (new) value.\n const sel = this.selectedIndex();\n this.activeIndex.set(sel >= 0 ? sel : this.nearestIndex(current ?? new Date()));\n afterNextRender(\n {\n write: () => {\n this.timesRef()?.nativeElement.focus();\n this.scrollActiveIntoView();\n },\n },\n { injector: this.injector },\n );\n }\n\n protected selectTime(index: number): void {\n const opt = this.options()[index];\n if (!opt) return;\n const day = this.calendarValue() ?? startOfDay(new Date());\n this.setValue(this.clamp(combine(day, opt.minutes)));\n this.close();\n this.inputRef()?.nativeElement.focus();\n }\n\n protected onListKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n switch (e.key) {\n case 'ArrowDown':\n e.preventDefault();\n this.moveActive(1);\n break;\n case 'ArrowUp':\n e.preventDefault();\n this.moveActive(-1);\n break;\n case 'Home':\n e.preventDefault();\n this.activeIndex.set(0);\n this.scrollActiveIntoView();\n break;\n case 'End':\n e.preventDefault();\n this.activeIndex.set(this.options().length - 1);\n this.scrollActiveIntoView();\n break;\n case 'Enter':\n case ' ':\n e.preventDefault();\n if (this.activeIndex() >= 0) this.selectTime(this.activeIndex());\n break;\n }\n }\n\n private moveActive(delta: number): void {\n const len = this.options().length;\n if (!len) return;\n const next = (this.activeIndex() + delta + len) % len;\n this.activeIndex.set(next);\n this.scrollActiveIntoView();\n }\n\n private scrollActiveIntoView(): void {\n afterNextRender(\n {\n write: () => {\n const el = this.timesRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-datetime-picker__option--active',\n );\n el?.scrollIntoView({ block: 'nearest' });\n },\n },\n { injector: this.injector },\n );\n }\n\n // --- Field ----------------------------------------------------------------\n\n protected onInput(event: Event): void {\n this.inputText.set((event.target as HTMLInputElement).value);\n }\n\n protected onInputKeydown(event: Event): void {\n const e = event as KeyboardEvent;\n if (this.isDisabled()) return;\n switch (e.key) {\n case 'Enter':\n e.preventDefault();\n this.commitInput();\n break;\n case 'ArrowDown':\n e.preventDefault();\n this.openPanel();\n break;\n case 'Escape':\n if (this.open()) {\n e.preventDefault();\n this.close();\n }\n break;\n }\n }\n\n protected clear(): void {\n this.pendingDay.set(null);\n this.setValue(null);\n this.inputRef()?.nativeElement.focus();\n }\n\n private commitInput(): void {\n const text = this.inputText().trim();\n if (!text) {\n this.setValue(null);\n return;\n }\n const parsed = this.parse(text);\n if (parsed) {\n this.setValue(this.clamp(parsed));\n } else {\n // Invalid entry — revert to the current model's display. The signal may\n // already hold that string (the model did not change), so the `[value]`\n // binding would not re-apply it: write the DOM value directly as well.\n const v = this.value();\n const text = v ? formatDate(v, this.effectiveFormat(), this.i18n.dateNames) : '';\n this.inputText.set(text);\n const el = this.inputRef()?.nativeElement;\n if (el) el.value = text;\n }\n }\n\n private setValue(date: Date | null): void {\n if (date) this.pendingDay.set(null);\n this.value.set(date);\n this.onChange(date);\n }\n\n protected onFocusOut(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n // Ignore focus moving into the field or the (top-layer) panel.\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.commitInput();\n this.close();\n this.onTouched();\n }\n\n /**\n * Escape pressed inside the (teleported) panel — close and return focus to\n * the input. `preventDefault` + `stopPropagation` keep any outer Escape\n * handling (e.g. a containing dialog) from also firing.\n */\n protected onPanelEscape(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n this.inputRef()?.nativeElement.focus();\n }\n\n /**\n * Focus left the teleported panel. The host `(focusout)` never sees this —\n * the panel lives under `document.body` — so Tab-out is handled here: close\n * unless focus moved back into the field or stayed inside the panel.\n */\n protected onPanelFocusout(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n if (!related) return;\n if (this.host.nativeElement.contains(related)) return;\n if (this.panelRef()?.nativeElement.contains(related)) return;\n this.commitInput();\n this.close();\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: Date | null): void {\n this.pendingDay.set(null);\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs,\n * comparing whole instants at minute precision.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!(v instanceof Date) || Number.isNaN(v.getTime())) return null;\n const t = toMinute(v);\n const min = this.min();\n if (min && t < toMinute(min)) return { mkMinDate: { min, actual: v } };\n const max = this.max();\n if (max && t > toMinute(max)) return { mkMaxDate: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-datetime-picker__field\">\n <input\n #textInput\n type=\"text\"\n class=\"mk-datetime-picker__input\"\n [id]=\"inputId\"\n [value]=\"inputText()\"\n [placeholder]=\"placeholder()\"\n [disabled]=\"isDisabled()\"\n autocomplete=\"off\"\n role=\"combobox\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [attr.aria-describedby]=\"describedBy()\"\n (input)=\"onInput($event)\"\n (keydown)=\"onInputKeydown($event)\"\n />\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-datetime-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear()\"\n >\n <span class=\"mk-datetime-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"mk-datetime-picker__toggle\"\n [attr.aria-label]=\"i18n.openDateTimePicker\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg\n class=\"mk-datetime-picker__icon\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <path d=\"M3 9h18M8 2v4M16 2v4\" />\n <path d=\"M21 12V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2h6\" />\n <circle cx=\"17.5\" cy=\"17.5\" r=\"4.5\" />\n <path d=\"M17.5 15.5v2l1.5 1\" />\n </svg>\n </button>\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-datetime-picker__panel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n [id]=\"panelId\"\n role=\"dialog\"\n [attr.aria-label]=\"i18n.chooseDateTime\"\n (keydown.escape)=\"onPanelEscape($event)\"\n (focusout)=\"onPanelFocusout($event)\"\n >\n <mk-calendar\n [value]=\"calendarValue()\"\n (valueChange)=\"onCalendarPick($event)\"\n [min]=\"calendarMin()\"\n [max]=\"calendarMax()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [size]=\"effectiveSize()\"\n [disabledDate]=\"disabledDate()\"\n />\n\n <ul\n #times\n class=\"mk-datetime-picker__times\"\n [id]=\"listId\"\n role=\"listbox\"\n tabindex=\"0\"\n [attr.aria-label]=\"i18n.chooseTime\"\n [attr.aria-activedescendant]=\"\n activeIndex() >= 0 && options()[activeIndex()] ? options()[activeIndex()].id : null\n \"\n (keydown)=\"onListKeydown($event)\"\n >\n @for (opt of options(); track opt.minutes; let i = $index) {\n <li\n class=\"mk-datetime-picker__option\"\n [id]=\"opt.id\"\n role=\"option\"\n [attr.aria-selected]=\"i === selectedIndex()\"\n [class.mk-datetime-picker__option--active]=\"i === activeIndex()\"\n [class.mk-datetime-picker__option--selected]=\"i === selectedIndex()\"\n (mousedown)=\"$event.preventDefault()\"\n (mousemove)=\"activeIndex.set(i)\"\n (click)=\"selectTime(i)\"\n >\n {{ opt.label }}\n </li>\n } @empty {\n <li class=\"mk-datetime-picker__empty\" role=\"presentation\">\n {{ i18n.noOptions }}\n </li>\n }\n </ul>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport { MkCalendar } from '../calendar/calendar';\nimport { formatDate, isAfter, isBefore, startOfDay } from '../datetime/date-utils';\n\n/** A selected date range. Either endpoint may be `null` while incomplete. */\nexport interface MkDateRange {\n start: Date | null;\n end: Date | null;\n}\n\n/**\n * DateRangePicker — select a start + end date from a single calendar popover.\n * The first click sets the start, the second sets the end (endpoints are\n * swapped if picked in reverse), and the hovered range is previewed live.\n * Implements `ControlValueAccessor` and a two-way `value` model of\n * {@link MkDateRange}.\n *\n * ```html\n * <mk-date-range-picker [(value)]=\"range\" [min]=\"minDate\" clearable />\n * ```\n */\n@Component({\n selector: 'mk-date-range-picker',\n templateUrl: './date-range-picker.html',\n styleUrl: './date-range-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkCalendar, MkAnchoredPanel],\n host: {\n class: 'mk-date-range-picker',\n '[class.mk-date-range-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-date-range-picker--md]': \"effectiveSize() === 'md'\",\n '[class.mk-date-range-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-date-range-picker--open]': 'open()',\n '[class.mk-date-range-picker--invalid]': 'isInvalid()',\n '[class.mk-date-range-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkDateRangePicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkDateRangePicker),\n multi: true,\n },\n ],\n})\nexport class MkDateRangePicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n /** The calendar panel — lives in the top layer once opened. */\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** Two-way selected range. */\n readonly value = model<MkDateRange>({ start: null, end: null });\n /** Earliest selectable date (inclusive). */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable date (inclusive). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Predicate marking individual days as disabled. */\n readonly disabledDate = input<((d: Date) => boolean) | null>(null);\n /** Placeholder shown when no range is selected. */\n readonly placeholder = input(this.i18n.selectRange);\n /** Pattern used to render each endpoint. */\n readonly displayFormat = input<string>('MMM d, yyyy');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a range is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** First column of the calendar week (0 = Sunday). */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n /** In-progress start endpoint (drives calendar highlighting). */\n protected readonly selStart = signal<Date | null>(null);\n /** In-progress end endpoint. */\n protected readonly selEnd = signal<Date | null>(null);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: MkDateRange) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-date-range');\n readonly panelId = mkUniqueId('mk-date-range-panel');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly showClear = computed(() => {\n const v = this.value();\n return this.clearable() && !!(v.start || v.end) && !this.isDisabled();\n });\n\n /** Display label, e.g. `Jul 1, 2026 – Jul 9, 2026`. */\n protected readonly displayLabel = computed(() => {\n const { start, end } = this.value();\n const fmt = this.displayFormat();\n if (!start && !end) return '';\n const names = this.i18n.dateNames;\n const s = start ? formatDate(start, fmt, names) : '…';\n const e = end ? formatDate(end, fmt, names) : '…';\n return `${s} – ${e}`;\n });\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n const v = this.value();\n this.selStart.set(v.start);\n this.selEnd.set(v.end);\n this.open.set(true);\n afterNextRender(\n {\n write: () => {\n const el = this.panelRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-calendar__day[tabindex=\"0\"]',\n );\n el?.focus();\n },\n },\n { injector: this.injector },\n );\n }\n\n protected close(): void {\n if (this.open()) this.open.set(false);\n }\n\n protected onPick(date: Date): void {\n const start = this.selStart();\n const end = this.selEnd();\n const day = startOfDay(date);\n\n if (!start || (start && end)) {\n // Begin a fresh range.\n this.selStart.set(day);\n this.selEnd.set(null);\n return;\n }\n\n // Complete the range, swapping if picked in reverse.\n if (isBefore(day, start)) {\n this.selStart.set(day);\n this.selEnd.set(start);\n } else {\n this.selEnd.set(day);\n }\n this.commit();\n this.close();\n this.triggerRef()?.nativeElement.focus();\n }\n\n protected clear(): void {\n this.selStart.set(null);\n this.selEnd.set(null);\n this.setValue({ start: null, end: null });\n this.triggerRef()?.nativeElement.focus();\n }\n\n private commit(): void {\n this.setValue({ start: this.selStart(), end: this.selEnd() });\n }\n\n private setValue(range: MkDateRange): void {\n this.value.set(range);\n this.onChange(range);\n }\n\n protected onFocusOut(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n /**\n * Escape pressed inside the (teleported) calendar panel — close and return\n * focus to the trigger. `preventDefault` + `stopPropagation` keep any outer\n * Escape handling (e.g. a containing dialog) from also firing.\n */\n protected onPanelEscape(event: Event): void {\n event.preventDefault();\n event.stopPropagation();\n this.close();\n this.triggerRef()?.nativeElement.focus();\n }\n\n /**\n * Focus left the teleported panel. The host `(focusout)` never sees this —\n * the panel lives under `document.body` — so Tab-out of the calendar is\n * handled here: close unless focus moved back into the field or the panel.\n */\n protected onPanelFocusout(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n // Focus fell to a non-focusable spot (body) — keep open; an outside\n // pointerdown is dismissed by the anchored panel itself.\n if (!related) return;\n if (this.host.nativeElement.contains(related)) return;\n if (this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: MkDateRange | null): void {\n this.value.set(value ?? { start: null, end: null });\n }\n registerOnChange(fn: (value: MkDateRange) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n this.disabledDate();\n });\n\n /**\n * Reports `mkDateRangeIncomplete` for a half-picked range, `mkMinDate` /\n * `mkMaxDate` for ends outside `[min]`/`[max]`, and `mkDateFilter` for an\n * end rejected by `[disabledDate]`. A fully empty range passes; compose\n * with `Validators.required` to reject it.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n const start = v?.start instanceof Date ? v.start : null;\n const end = v?.end instanceof Date ? v.end : null;\n if (!start && !end) return null;\n if (!start || !end) return { mkDateRangeIncomplete: true };\n\n const min = this.min();\n if (min && isBefore(startOfDay(start), startOfDay(min))) {\n return { mkMinDate: { min, actual: start } };\n }\n const max = this.max();\n if (max && isAfter(startOfDay(end), startOfDay(max))) {\n return { mkMaxDate: { max, actual: end } };\n }\n const filter = this.disabledDate();\n if (filter?.(start) || filter?.(end)) return { mkDateFilter: true };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-date-range-picker__field\">\n <button\n #trigger\n type=\"button\"\n class=\"mk-date-range-picker__trigger\"\n [id]=\"triggerId\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n @if (displayLabel()) {\n <span class=\"mk-date-range-picker__value\">{{ displayLabel() }}</span>\n } @else {\n <span class=\"mk-date-range-picker__value mk-date-range-picker__value--placeholder\">{{\n placeholder()\n }}</span>\n }\n </button>\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-date-range-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear()\"\n >\n <span class=\"mk-date-range-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n\n <button\n type=\"button\"\n class=\"mk-date-range-picker__toggle\"\n [attr.aria-label]=\"i18n.openCalendar\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n <svg\n class=\"mk-date-range-picker__icon\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"17\" rx=\"2\" />\n <path d=\"M3 9h18M8 2v4M16 2v4\" />\n </svg>\n </button>\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-date-range-picker__panel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n [id]=\"panelId\"\n role=\"dialog\"\n [attr.aria-label]=\"i18n.chooseDateRange\"\n (keydown.escape)=\"onPanelEscape($event)\"\n (focusout)=\"onPanelFocusout($event)\"\n >\n <mk-calendar\n [rangeMode]=\"true\"\n [rangeStart]=\"selStart()\"\n [rangeEnd]=\"selEnd()\"\n (dateSelected)=\"onPick($event)\"\n [min]=\"min()\"\n [max]=\"max()\"\n [disabledDate]=\"disabledDate()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [size]=\"effectiveSize()\"\n />\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n effect,\n forwardRef,\n inject,\n input,\n model,\n signal,\n viewChild,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport {\n endOfMonth,\n formatDate,\n isAfter,\n isBefore,\n startOfMonth,\n} from '../datetime/date-utils';\n\n/** Selection granularity for {@link MkMonthPicker}. */\nexport type MkMonthPickerMode = 'month' | 'year';\n\ninterface Cell {\n label: string;\n /** Year (both modes) and month index (month mode only). */\n year: number;\n month: number;\n disabled: boolean;\n selected: boolean;\n}\n\n/**\n * MonthPicker — a compact field + popover for picking a **month** (`MMM yyyy`)\n * or a **year**. The panel shows a 12-month grid (with year nav) or a 12-year\n * grid (with decade nav). Value is a `Date` at the first day of the selection.\n * Implements `ControlValueAccessor` + a two-way `value` model; the panel renders\n * in the top layer so it is never clipped.\n *\n * ```html\n * <mk-month-picker [(value)]=\"month\" />\n * <mk-month-picker mode=\"year\" [(value)]=\"year\" />\n * ```\n */\n@Component({\n selector: 'mk-month-picker',\n templateUrl: './month-picker.html',\n styleUrl: './month-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkAnchoredPanel],\n host: {\n class: 'mk-month-picker',\n '[class.mk-month-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-month-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-month-picker--open]': 'open()',\n '[class.mk-month-picker--invalid]': 'isInvalid()',\n '[class.mk-month-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkMonthPicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkMonthPicker),\n multi: true,\n },\n ],\n})\nexport class MkMonthPicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n private readonly cellRefs =\n viewChildren<ElementRef<HTMLButtonElement>>('cell');\n\n /** Two-way selected date (first of the month / year). */\n readonly value = model<Date | null>(null);\n /** Pick a month or a whole year. */\n readonly mode = input<MkMonthPickerMode>('month');\n /** Earliest selectable date. */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable date. */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Placeholder shown when empty. */\n readonly placeholder = input<string>('');\n /** Display pattern (defaults to `MMM yyyy` / `yyyy`). */\n readonly displayFormat = input<string>('');\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a value is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n /** The year currently shown in the panel (base for the month/decade grid). */\n protected readonly viewYear = signal(new Date().getFullYear());\n protected readonly activeIndex = signal(0);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-month-picker');\n readonly panelId = mkUniqueId('mk-month-picker-panel');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n protected readonly resolvedPlaceholder = computed(\n () =>\n this.placeholder() ||\n (this.mode() === 'year' ? this.i18n.selectYear : this.i18n.selectMonth),\n );\n private readonly pattern = computed(\n () => this.displayFormat() || (this.mode() === 'year' ? 'yyyy' : 'MMM yyyy'),\n );\n protected readonly displayLabel = computed(() => {\n const v = this.value();\n return v ? formatDate(v, this.pattern(), this.i18n.dateNames) : '';\n });\n\n /** The decade start when in year mode. */\n private readonly decadeStart = computed(\n () => Math.floor(this.viewYear() / 12) * 12,\n );\n\n /** Header label (year, or decade range). */\n protected readonly headerLabel = computed(() => {\n if (this.mode() === 'year') {\n const s = this.decadeStart();\n return `${s} – ${s + 11}`;\n }\n return `${this.viewYear()}`;\n });\n\n /** Abbreviated month labels for the grid, from the active locale. */\n private readonly months = this.i18n.dateNames.monthsShort;\n\n /** The 12 grid cells (months or years). */\n protected readonly cells = computed<Cell[]>(() => {\n const value = this.value();\n if (this.mode() === 'year') {\n const start = this.decadeStart();\n return Array.from({ length: 12 }, (_, i) => {\n const year = start + i;\n const date = new Date(year, 0, 1);\n return {\n label: `${year}`,\n year,\n month: 0,\n disabled: this.outOfRange(date, new Date(year, 11, 31)),\n selected: value?.getFullYear() === year,\n };\n });\n }\n const year = this.viewYear();\n return this.months.map((label, m) => {\n const date = new Date(year, m, 1);\n return {\n label,\n year,\n month: m,\n disabled: this.outOfRange(date, endOfMonth(date)),\n selected: value?.getFullYear() === year && value?.getMonth() === m,\n };\n });\n });\n\n constructor() {\n // Keep the panel's view year in sync with the selected value.\n effect(() => {\n const v = this.value();\n if (v) this.viewYear.set(v.getFullYear());\n });\n }\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n const v = this.value();\n if (v) this.viewYear.set(v.getFullYear());\n // Focus the selected (or first enabled) cell once the panel is in the DOM.\n const cells = this.cells();\n const sel = cells.findIndex((c) => c.selected);\n this.activeIndex.set(sel >= 0 ? sel : cells.findIndex((c) => !c.disabled));\n this.open.set(true);\n afterNextRender(() => this.focusActive(), { injector: this.injector });\n }\n\n protected close(restoreFocus = false): void {\n if (!this.open()) return;\n this.open.set(false);\n if (restoreFocus) this.triggerRef()?.nativeElement.focus();\n }\n\n protected shiftView(delta: number): void {\n const step = this.mode() === 'year' ? 12 : 1;\n this.viewYear.set(this.viewYear() + delta * step);\n }\n\n protected selectCell(cell: Cell): void {\n if (cell.disabled) return;\n const date = new Date(cell.year, this.mode() === 'year' ? 0 : cell.month, 1);\n this.value.set(date);\n this.onChange(date);\n this.close(true);\n }\n\n protected clear(event: Event): void {\n event.stopPropagation();\n this.value.set(null);\n this.onChange(null);\n this.triggerRef()?.nativeElement.focus();\n }\n\n protected onGridKeydown(event: KeyboardEvent): void {\n const cols = 3;\n const total = this.cells().length;\n let next = this.activeIndex();\n switch (event.key) {\n case 'ArrowRight': next += 1; break;\n case 'ArrowLeft': next -= 1; break;\n case 'ArrowDown': next += cols; break;\n case 'ArrowUp': next -= cols; break;\n case 'Home': next = 0; break;\n case 'End': next = total - 1; break;\n case 'Escape':\n event.preventDefault();\n this.close(true);\n return;\n default:\n return;\n }\n event.preventDefault();\n this.activeIndex.set(Math.max(0, Math.min(total - 1, next)));\n this.focusActive();\n }\n\n private focusActive(): void {\n this.cellRefs()[this.activeIndex()]?.nativeElement.focus();\n }\n\n protected onFocusOut(event: FocusEvent): void {\n const related = event.relatedTarget as Node | null;\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n private outOfRange(start: Date, end: Date): boolean {\n const min = this.min();\n const max = this.max();\n if (min && isBefore(end, min)) return true;\n if (max && isAfter(start, max)) return true;\n return false;\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: Date | null): void {\n this.value.set(value ?? null);\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs,\n * compared at month granularity.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!(v instanceof Date) || Number.isNaN(v.getTime())) return null;\n const month = startOfMonth(v);\n const min = this.min();\n if (min && isBefore(month, startOfMonth(min))) return { mkMinDate: { min, actual: v } };\n const max = this.max();\n if (max && isAfter(month, startOfMonth(max))) return { mkMaxDate: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-month-picker__field\">\n <button\n #trigger\n type=\"button\"\n class=\"mk-month-picker__trigger\"\n [id]=\"triggerId\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n @if (displayLabel()) {\n <span class=\"mk-month-picker__value\">{{ displayLabel() }}</span>\n } @else {\n <span class=\"mk-month-picker__value mk-month-picker__value--placeholder\">{{\n resolvedPlaceholder()\n }}</span>\n }\n <span class=\"mk-month-picker__icon\" aria-hidden=\"true\"></span>\n </button>\n\n @if (clearable() && value() && !isDisabled()) {\n <button\n type=\"button\"\n class=\"mk-month-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear($event)\"\n >\n <span class=\"mk-month-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-month-picker__panel\"\n role=\"dialog\"\n [id]=\"panelId\"\n [attr.aria-label]=\"mode() === 'year' ? i18n.chooseYear : i18n.chooseMonth\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n >\n <div class=\"mk-month-picker__header\">\n <button\n type=\"button\"\n class=\"mk-month-picker__nav\"\n [attr.aria-label]=\"mode() === 'year' ? i18n.previousYears : i18n.previousYear\"\n (click)=\"shiftView(-1)\"\n >\n ‹\n </button>\n <span class=\"mk-month-picker__header-label\" aria-live=\"polite\">{{ headerLabel() }}</span>\n <button\n type=\"button\"\n class=\"mk-month-picker__nav\"\n [attr.aria-label]=\"mode() === 'year' ? i18n.nextYears : i18n.nextYear\"\n (click)=\"shiftView(1)\"\n >\n ›\n </button>\n </div>\n\n <div class=\"mk-month-picker__grid\" role=\"grid\" (keydown)=\"onGridKeydown($event)\">\n @for (cell of cells(); track cell.label; let i = $index) {\n <button\n #cell\n type=\"button\"\n class=\"mk-month-picker__cell\"\n [class.mk-month-picker__cell--selected]=\"cell.selected\"\n [attr.tabindex]=\"i === activeIndex() ? 0 : -1\"\n [attr.aria-selected]=\"cell.selected\"\n [disabled]=\"cell.disabled\"\n (click)=\"selectCell(cell)\"\n >\n {{ cell.label }}\n </button>\n }\n </div>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n Injector,\n afterNextRender,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChild,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { MkAnchoredPanel } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport { MkCalendar } from '../calendar/calendar';\nimport {\n endOfWeek,\n formatDate,\n getISOWeek,\n isAfter,\n isBefore,\n startOfDay,\n startOfWeek,\n} from '../datetime/date-utils';\n\n/** A selected calendar week (its first and last day, at midnight). */\nexport interface MkWeek {\n start: Date;\n end: Date;\n}\n\n/**\n * WeekPicker — pick a whole calendar week from a popover calendar. Hovering a\n * day previews its entire week; clicking selects it. The value is an\n * {@link MkWeek} (`{ start, end }`, aligned to `firstDayOfWeek`). Implements\n * `ControlValueAccessor` and a two-way `value` model; the panel renders in the\n * top layer so it is never clipped.\n *\n * ```html\n * <mk-week-picker [(value)]=\"week\" [firstDayOfWeek]=\"1\" clearable />\n * ```\n */\n@Component({\n selector: 'mk-week-picker',\n templateUrl: './week-picker.html',\n styleUrl: './week-picker.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MkCalendar, MkAnchoredPanel],\n host: {\n class: 'mk-week-picker',\n '[class.mk-week-picker--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-week-picker--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-week-picker--open]': 'open()',\n '[class.mk-week-picker--invalid]': 'isInvalid()',\n '[class.mk-week-picker--disabled]': 'isDisabled()',\n '(focusout)': 'onFocusOut($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkWeekPicker),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkWeekPicker),\n multi: true,\n },\n ],\n})\nexport class MkWeekPicker implements ControlValueAccessor, Validator {\n protected readonly i18n = inject(MK_I18N);\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n private readonly host = inject<ElementRef<HTMLElement>>(ElementRef);\n private readonly injector = inject(Injector);\n private readonly triggerRef =\n viewChild<ElementRef<HTMLButtonElement>>('trigger');\n private readonly panelRef = viewChild<ElementRef<HTMLElement>>('panel');\n\n /** Two-way selected week. */\n readonly value = model<MkWeek | null>(null);\n /** Earliest selectable date (inclusive). */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Latest selectable date (inclusive). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** First column of the calendar week (0 = Sunday). Also anchors the week. */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Placeholder shown when empty. */\n readonly placeholder = input(this.i18n.selectWeek);\n /** Pattern used to render each endpoint of the week range. */\n readonly displayFormat = input<string>('MMM d');\n /** Prefix the label with the ISO week number, e.g. `W28 · …`. */\n readonly showWeekNumber = input(false, { transform: booleanAttribute });\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Show a clear button when a week is selected. */\n readonly clearable = input(false, { transform: booleanAttribute });\n /** Force invalid styling + `aria-invalid`. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored when nested in an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n\n protected readonly open = signal(false);\n /** The week currently previewed under the pointer (drives highlighting). */\n private readonly hoverWeek = signal<MkWeek | null>(null);\n private readonly cvaDisabled = signal(false);\n private onChange: (value: MkWeek | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n readonly triggerId = this.field?.controlId ?? mkUniqueId('mk-week-picker');\n readonly panelId = mkUniqueId('mk-week-picker-panel');\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n protected readonly showClear = computed(\n () => this.clearable() && !!this.value() && !this.isDisabled(),\n );\n\n /** The week to highlight: the hovered one while previewing, else the value. */\n protected readonly highlightWeek = computed(\n () => this.hoverWeek() ?? this.value(),\n );\n\n /** Display label, e.g. `W28 · Jul 6 – Jul 12, 2026`. */\n protected readonly displayLabel = computed(() => {\n const week = this.value();\n if (!week) return '';\n const fmt = this.displayFormat();\n const names = this.i18n.dateNames;\n const range = `${formatDate(week.start, fmt, names)} – ${formatDate(\n week.end,\n `${fmt}, yyyy`,\n names,\n )}`;\n return this.showWeekNumber() ? `W${getISOWeek(week.start)} · ${range}` : range;\n });\n\n protected toggle(): void {\n if (this.isDisabled()) return;\n this.open() ? this.close() : this.openPanel();\n }\n\n protected openPanel(): void {\n if (this.isDisabled() || this.open()) return;\n this.open.set(true);\n afterNextRender(\n {\n write: () => {\n const el = this.panelRef()?.nativeElement.querySelector<HTMLElement>(\n '.mk-calendar__day[tabindex=\"0\"]',\n );\n el?.focus();\n },\n },\n { injector: this.injector },\n );\n }\n\n protected close(): void {\n if (this.open()) {\n this.open.set(false);\n this.hoverWeek.set(null);\n }\n }\n\n /** A day inside the calendar was activated — select its whole week. */\n protected onPick(date: Date): void {\n const week = this.weekOf(date);\n this.value.set(week);\n this.onChange(week);\n this.close();\n this.triggerRef()?.nativeElement.focus();\n }\n\n /** Preview the hovered day's week. */\n protected onHover(date: Date | null): void {\n this.hoverWeek.set(date ? this.weekOf(date) : null);\n }\n\n protected clear(): void {\n this.value.set(null);\n this.onChange(null);\n this.triggerRef()?.nativeElement.focus();\n }\n\n private weekOf(date: Date): MkWeek {\n const fdow = this.firstDayOfWeek();\n return { start: startOfWeek(date, fdow), end: endOfWeek(date, fdow) };\n }\n\n /** Reference date the calendar should open on (the selected week's start). */\n protected readonly calendarValue = computed(() => this.value()?.start ?? null);\n\n protected onFocusOut(event: Event): void {\n const related = (event as FocusEvent).relatedTarget as Node | null;\n if (related && this.host.nativeElement.contains(related)) return;\n if (related && this.panelRef()?.nativeElement.contains(related)) return;\n this.close();\n this.onTouched();\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: MkWeek | null): void {\n // Re-anchor any incoming date to a full week for consistent highlighting.\n if (value?.start) this.value.set(this.weekOf(value.start));\n else this.value.set(null);\n }\n registerOnChange(fn: (value: MkWeek | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n /** Expose the raw highlight endpoints to the template. */\n protected highlightStart = computed(() => this.highlightWeek()?.start ?? null);\n protected highlightEnd = computed(() => this.highlightWeek()?.end ?? null);\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` when the selected week starts before\n * `[min]` or ends after `[max]`.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n const start = v?.start;\n const end = v?.end;\n if (!(start instanceof Date) || !(end instanceof Date)) return null;\n const min = this.min();\n if (min && isBefore(startOfDay(start), startOfDay(min))) {\n return { mkMinDate: { min, actual: start } };\n }\n const max = this.max();\n if (max && isAfter(startOfDay(end), startOfDay(max))) {\n return { mkMaxDate: { max, actual: end } };\n }\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","<div #field class=\"mk-week-picker__field\">\n <button\n #trigger\n type=\"button\"\n class=\"mk-week-picker__trigger\"\n [id]=\"triggerId\"\n aria-haspopup=\"dialog\"\n [attr.aria-expanded]=\"open()\"\n [attr.aria-controls]=\"panelId\"\n [attr.aria-labelledby]=\"labelledBy()\"\n [attr.aria-describedby]=\"describedBy()\"\n [attr.aria-invalid]=\"isInvalid() || null\"\n [attr.aria-required]=\"isRequired() || null\"\n [disabled]=\"isDisabled()\"\n (click)=\"toggle()\"\n >\n @if (displayLabel()) {\n <span class=\"mk-week-picker__value\">{{ displayLabel() }}</span>\n } @else {\n <span class=\"mk-week-picker__value mk-week-picker__value--placeholder\">{{\n placeholder()\n }}</span>\n }\n <svg\n class=\"mk-week-picker__icon\"\n viewBox=\"0 0 24 24\"\n width=\"18\"\n height=\"18\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n aria-hidden=\"true\"\n >\n <rect x=\"3\" y=\"4\" width=\"18\" height=\"17\" rx=\"2\" />\n <path d=\"M3 9h18M8 2v4M16 2v4\" />\n </svg>\n </button>\n\n @if (showClear()) {\n <button\n type=\"button\"\n class=\"mk-week-picker__clear\"\n [attr.aria-label]=\"i18n.clear\"\n (click)=\"clear()\"\n >\n <span class=\"mk-week-picker__clear-icon\" aria-hidden=\"true\"></span>\n </button>\n }\n</div>\n\n@if (open()) {\n <div\n #panel\n class=\"mk-week-picker__panel\"\n mkAnchoredPanel\n [mkAnchoredPanelFor]=\"field\"\n (dismiss)=\"close()\"\n [id]=\"panelId\"\n role=\"dialog\"\n [attr.aria-label]=\"i18n.chooseWeek\"\n >\n <mk-calendar\n [value]=\"calendarValue()\"\n [rangeMode]=\"true\"\n [rangeStart]=\"highlightStart()\"\n [rangeEnd]=\"highlightEnd()\"\n (dateSelected)=\"onPick($event)\"\n (dateHovered)=\"onHover($event)\"\n [min]=\"min()\"\n [max]=\"max()\"\n [firstDayOfWeek]=\"firstDayOfWeek()\"\n [size]=\"effectiveSize()\"\n />\n </div>\n}\n","import { isSameDay } from '../datetime/date-utils';\nimport type { MkCalendarEvent } from './event-calendar';\n\n/** A timed event positioned inside a day column of the time grid. */\nexport interface MkTimedPlacement {\n event: MkCalendarEvent;\n /** Offset from the top of the grid, percent of the visible hour range. */\n top: number;\n /** Height, percent of the visible hour range (never below ~15 min). */\n height: number;\n /** Column inside the overlap cluster (0-based). */\n lane: number;\n /** Total columns in the overlap cluster — width is `100 / lanes`%. */\n lanes: number;\n}\n\nfunction minutes(d: Date): number {\n return d.getHours() * 60 + d.getMinutes();\n}\n\n/**\n * Position a day's timed events on an hour grid, packing overlaps side by\n * side instead of stacking them: within a cluster of transitively-overlapping\n * events each takes the lowest free lane, and every member of the cluster is\n * widened to the same lane count so columns line up (the layout every\n * scheduler UI uses).\n *\n * Pure — no Angular, no DOM — so the packing has direct unit tests.\n */\nexport function layoutTimedEvents(\n events: readonly MkCalendarEvent[],\n day: Date,\n startHour: number,\n endHour: number,\n): MkTimedPlacement[] {\n const rangeMin = (endHour - startHour) * 60;\n if (rangeMin <= 0) return [];\n\n const timed = events\n .filter((e) => e.start && isSameDay(e.start, day))\n .sort(\n (a, b) =>\n a.start!.getTime() - b.start!.getTime() ||\n (b.end?.getTime() ?? 0) - (a.end?.getTime() ?? 0),\n );\n\n interface Working extends MkTimedPlacement {\n startMin: number;\n endMin: number;\n }\n\n const placed: Working[] = [];\n let cluster: Working[] = [];\n let clusterEnd = -1;\n\n const closeCluster = () => {\n const lanes = Math.max(1, ...cluster.map((p) => p.lane + 1));\n for (const p of cluster) p.lanes = lanes;\n cluster = [];\n clusterEnd = -1;\n };\n\n for (const event of timed) {\n const startMin = minutes(event.start!);\n // A missing end reads as 30 minutes — long enough to click.\n const endMin = event.end && isSameDay(event.end, day)\n ? Math.max(minutes(event.end), startMin + 15)\n : startMin + 30;\n\n if (cluster.length && startMin >= clusterEnd) closeCluster();\n\n // Lowest lane whose latest occupant has finished.\n const laneEnds: number[] = [];\n for (const p of cluster) {\n laneEnds[p.lane] = Math.max(laneEnds[p.lane] ?? 0, p.endMin);\n }\n let lane = 0;\n while ((laneEnds[lane] ?? 0) > startMin) lane++;\n\n const clampedStart = Math.max(startMin, startHour * 60);\n const clampedEnd = Math.min(endMin, endHour * 60);\n if (clampedEnd <= startHour * 60 || clampedStart >= endHour * 60) continue;\n\n const item: Working = {\n event,\n startMin,\n endMin,\n lane,\n lanes: 1,\n top: ((clampedStart - startHour * 60) / rangeMin) * 100,\n height: Math.max(((clampedEnd - clampedStart) / rangeMin) * 100, 2.5),\n };\n cluster.push(item);\n placed.push(item);\n clusterEnd = Math.max(clusterEnd, endMin);\n }\n if (cluster.length) closeCluster();\n\n return placed.map(({ startMin: _s, endMin: _e, ...p }) => p);\n}\n\n/** Events on `day` with no start time — rendered in the all-day strip. */\nexport function allDayEvents(\n events: readonly MkCalendarEvent[],\n day: Date,\n): MkCalendarEvent[] {\n return events.filter((e) => !e.start && isSameDay(e.date, day));\n}\n","import { DOCUMENT } from '@angular/common';\nimport {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n OnDestroy,\n booleanAttribute,\n computed,\n inject,\n input,\n model,\n numberAttribute,\n output,\n signal,\n} from '@angular/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { MK_I18N, MkLiveAnnouncer } from '@mk-kit/ui/core';\nimport {\n addDays,\n addMonths,\n buildMonthMatrix,\n formatDate,\n getWeekdayFullName,\n isSameDay,\n isSameMonth,\n startOfDay,\n startOfMonth,\n startOfWeek,\n} from '../datetime/date-utils';\nimport { MkTimedPlacement, layoutTimedEvents } from './event-calendar-layout';\n\n/** The calendar's presentation: month grid, or a timed week/day grid. */\nexport type MkCalendarView = 'month' | 'week' | 'day';\n\n/** A single event plotted onto the {@link MkEventCalendar}. */\nexport interface MkCalendarEvent {\n /**\n * The day the event falls on. Month view places by this alone; in week/day\n * view an event with no `start` renders in the all-day strip.\n */\n date: Date;\n /** Start instant — positions the event on the week/day time grid. */\n start?: Date;\n /** End instant; defaults to 30 minutes after `start`. */\n end?: Date;\n /** Short label shown inside the event pill. */\n title: string;\n /** Optional pill background colour; falls back to `--mk-primary`. */\n color?: string;\n /** Optional caller-supplied identifier, echoed back on `eventClick`. */\n id?: unknown;\n}\n\n/**\n * Payload of `eventMove` / `eventResize`: the untouched source event plus the\n * would-be new time range. The calendar itself never mutates `events` — the\n * consumer owns the data and applies (or rejects) the change.\n */\nexport interface MkCalendarEventEdit {\n /** The event that was dragged — the exact object from the `events` input. */\n event: MkCalendarEvent;\n /** New start instant (snapped to `snapMinutes`). */\n start: Date;\n /** New end instant (snapped; never closer than `snapMinutes` to `start`). */\n end: Date;\n}\n\n/** Weekday column header (short label + full name for the `abbr[title]`). */\ninterface MkWeekdayHeader {\n short: string;\n full: string;\n}\n\n/** Pixels the pointer must travel before a press turns into an edit drag. */\nconst DRAG_THRESHOLD = 5;\n/**\n * Pixels a *touch* pointer may wander during the long-press delay before the\n * press is treated as a scroll and the pending drag is abandoned.\n */\nconst TOUCH_SLOP = 10;\n/** Long-press delay (ms) before a touch pointer arms an edit drag. */\nconst TOUCH_DELAY_MS = 300;\n/** Safety window (ms) for swallowing the synthetic click after a real drag. */\nconst CLICK_SWALLOW_MS = 400;\n\n/** Minutes since local midnight. */\nfunction minutesOfDay(d: Date): number {\n return d.getHours() * 60 + d.getMinutes();\n}\n\n/** `minutes` since midnight as a zero-padded `HH:mm` label. */\nfunction minutesLabel(minutes: number): string {\n const h = Math.floor(minutes / 60) % 24;\n const m = Math.round(minutes % 60);\n return `${String(h).padStart(2, '0')}:${String(m).padStart(2, '0')}`;\n}\n\nfunction clampNumber(value: number, lo: number, hi: number): number {\n return Math.min(Math.max(value, lo), Math.max(lo, hi));\n}\n\n/**\n * `[startMin, endMin]` of a timed event, mirroring the layout's defaults: a\n * missing end reads as 30 minutes, an end on the same day never less than 15.\n */\nfunction eventMinutes(event: MkCalendarEvent): [number, number] {\n const start = event.start ? minutesOfDay(event.start) : 0;\n const end =\n event.end && event.start && isSameDay(event.end, event.start)\n ? Math.max(minutesOfDay(event.end), start + 15)\n : start + 30;\n return [start, end];\n}\n\n/**\n * One in-flight edit gesture (pointer drag or keyboard move mode). Geometry is\n * snapshotted once when the edit lifts — every subsequent move works off the\n * cached rects, so a drag never forces layout.\n */\ninterface EditSession {\n kind: 'move' | 'resize';\n event: MkCalendarEvent;\n /** The pill element the gesture started on. */\n el: HTMLElement;\n /** Pointer id (`null` for the keyboard session). */\n pointerId: number | null;\n /** True once the pointer crossed {@link DRAG_THRESHOLD} (a real drag). */\n started: boolean;\n /** Gate for moves: mouse/pen arm on pointerdown, touch after the long press. */\n armed: boolean;\n startX: number;\n startY: number;\n touchTimer: number | null;\n savedTouchAction: string | null;\n /** Per-column bounds snapshotted at lift. */\n colRects: DOMRect[];\n pxPerMin: number;\n origDay: number;\n origStartMin: number;\n origEndMin: number;\n /** Current (snapped) target — mutated by moves / arrow steps. */\n day: number;\n startMin: number;\n endMin: number;\n}\n\n/** Template-facing state of the in-flight edit, driving the pill + outline. */\ninterface EditPreviewState {\n event: MkCalendarEvent;\n /** Target column index — the drop outline renders in this column. */\n day: number;\n /** Compositor-friendly lift transform for the dragged pill. */\n transform: string;\n /** Height override (%) while the duration differs, else `null`. */\n heightPct: number | null;\n /** Would-be range shown on the pill, e.g. `09:30 – 10:45`. */\n label: string;\n /** Drop-outline top, percent of the visible hour range. */\n top: number;\n /** Drop-outline height, percent of the visible hour range. */\n outlineHeight: number;\n}\n\n/** A rendered day cell: its date, classification, and the events on it. */\ninterface MkDayCell {\n date: Date;\n outside: boolean;\n today: boolean;\n /** Up to `maxPerDay` events shown as pills. */\n visible: readonly MkCalendarEvent[];\n /** Count beyond `maxPerDay` (0 when nothing is hidden). */\n overflow: number;\n /**\n * Precomputed screen-reader label (see {@link MkEventCalendar#dayLabel}) —\n * formatting it once here keeps `formatDate` out of the per-CD template path\n * for all 42 cells.\n */\n label: string;\n}\n\n/**\n * Event calendar — a month-grid scheduler view. Renders a 6×7 grid of day\n * cells built from {@link buildMonthMatrix}; each cell lists the events whose\n * `date` falls on that day as coloured pills, capped at `maxPerDay` with a\n * \"+N more\" line for the remainder.\n *\n * Shares the month-grid rendering, header navigation, and weekday header of\n * `mk-calendar` but is display-only (no date selection). Exposes the viewed\n * month as a two-way `viewDate` model plus `dayClick` / `eventClick` outputs.\n *\n * With `editable`, the week/day time grids additionally support drag-to-move\n * and drag-to-resize (pointer *and* keyboard — WCAG 2.5.7): times snap to\n * `snapMinutes` and the would-be range is emitted via `eventMove` /\n * `eventResize` — the calendar never mutates `events` itself.\n *\n * ```html\n * <mk-event-calendar [events]=\"events\" [(viewDate)]=\"month\"\n * (eventClick)=\"open($event)\" />\n * ```\n */\n@Component({\n selector: 'mk-event-calendar',\n templateUrl: './event-calendar.html',\n styleUrl: './event-calendar.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n host: {\n class: 'mk-event-calendar',\n },\n})\nexport class MkEventCalendar implements OnDestroy {\n protected readonly i18n = inject(MK_I18N);\n private readonly doc = inject(DOCUMENT);\n private readonly hostEl = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n private readonly announcer = inject(MkLiveAnnouncer);\n\n /** Events to plot onto the grid. */\n readonly events = input<readonly MkCalendarEvent[]>([]);\n /** Two-way month being viewed (any day within it). Defaults to today. */\n readonly viewDate = model<Date>(new Date());\n /** First column of the week: 0 = Sunday … 6 = Saturday. */\n readonly firstDayOfWeek = input(0, { transform: numberAttribute });\n /** Max event pills per day before collapsing the rest into \"+N more\". */\n readonly maxPerDay = input(3, { transform: numberAttribute });\n /** Presentation: the classic month grid, or a timed `week`/`day` grid. */\n readonly view = model<MkCalendarView>('month');\n /** First hour shown on the week/day time grid. */\n readonly dayStartHour = input(8, { transform: numberAttribute });\n /** Hour the time grid ends at (exclusive). */\n readonly dayEndHour = input(22, { transform: numberAttribute });\n /**\n * Week/day views: allow rescheduling events by dragging a pill (move) or its\n * bottom edge (resize end time), by pointer or keyboard. Off by default —\n * without it the grid renders exactly as before (no handles, no ARIA\n * additions, no drag behavior).\n */\n readonly editable = input(false, { transform: booleanAttribute });\n /** Snap grid (minutes) for drag/keyboard edits; also the minimum duration. */\n readonly snapMinutes = input(15, { transform: numberAttribute });\n\n /** Emitted when a day cell is activated (click / Enter). */\n readonly dayClick = output<Date>();\n /**\n * Emitted when an event pill is clicked (does not also fire `dayClick`).\n * Mouse-only convenience: the pills are presentational (`aria-hidden`), so\n * keyboard / screen-reader users reach events via the day button — its label\n * announces the day's events and activating it fires `dayClick`.\n */\n readonly eventClick = output<MkCalendarEvent>();\n /** Emitted when the viewed range changes via the prev/next buttons. */\n readonly monthChange = output<Date>();\n /** Week/day view: an empty hour slot was clicked — the slot's start instant. */\n readonly slotClick = output<Date>();\n /**\n * Editable week/day grid: an event pill was dragged (or keyboard-moved) to a\n * new start time and/or day. Carries the would-be `start`/`end` — the\n * calendar does **not** mutate `events`; the consumer owns the data and\n * applies the change, typically:\n *\n * ```ts\n * onMove = ({ event, start, end }: MkCalendarEventEdit) =>\n * (this.events = this.events.map((e) =>\n * e === event ? { ...e, date: start, start, end } : e,\n * ));\n * ```\n */\n readonly eventMove = output<MkCalendarEventEdit>();\n /**\n * Editable week/day grid: the pill's bottom edge was dragged (or\n * Shift+Arrow-resized) — only `end` differs, never below `snapMinutes` of\n * duration. Same consumer-owns-the-data contract as `eventMove`.\n */\n readonly eventResize = output<MkCalendarEventEdit>();\n\n /** id of the visible month/year label — wired as the grid's label. */\n readonly labelId = mkUniqueId('mk-event-calendar-label');\n\n /** First day of the visible month. */\n protected readonly viewMonth = computed(() => startOfMonth(this.viewDate()));\n /** Header label — month, day, or week range, matching the active view. */\n protected readonly monthLabel = computed(() => {\n const d = this.viewDate();\n const names = this.i18n.dateNames;\n switch (this.view()) {\n case 'day':\n return formatDate(d, 'MMMM d, yyyy', names);\n case 'week': {\n const from = startOfWeek(d, this.firstDayOfWeek());\n const to = addDays(from, 6);\n return `${formatDate(from, 'MMM d', names)} – ${formatDate(to, 'MMM d, yyyy', names)}`;\n }\n default:\n return formatDate(d, 'MMMM yyyy', names);\n }\n });\n\n /** Days of the active time grid: one for `day`, seven for `week`. */\n protected readonly gridDays = computed<Date[]>(() => {\n const d = startOfDay(this.viewDate());\n if (this.view() === 'day') return [d];\n const from = startOfWeek(d, this.firstDayOfWeek());\n return Array.from({ length: 7 }, (_, i) => addDays(from, i));\n });\n\n /** Hour rows of the time grid. */\n protected readonly hours = computed<number[]>(() => {\n const from = this.dayStartHour();\n const to = this.dayEndHour();\n return Array.from({ length: Math.max(to - from, 0) }, (_, i) => from + i);\n });\n\n /**\n * Timed events bucketed by their start's calendar day — a single pass over\n * the events, shared by every column of the week/day grid instead of\n * re-filtering (and re-sorting) the whole array once per day.\n */\n private readonly timedByDay = computed(() => {\n const map = new Map<number, MkCalendarEvent[]>();\n for (const event of this.events()) {\n if (!event.start) continue;\n const key = startOfDay(event.start).getTime();\n const bucket = map.get(key);\n if (bucket) bucket.push(event);\n else map.set(key, [event]);\n }\n return map;\n });\n\n /** Untimed events (all-day strip) bucketed by `date`'s calendar day. */\n private readonly allDayByDay = computed(() => {\n const map = new Map<number, MkCalendarEvent[]>();\n for (const event of this.events()) {\n if (event.start) continue;\n const key = startOfDay(event.date).getTime();\n const bucket = map.get(key);\n if (bucket) bucket.push(event);\n else map.set(key, [event]);\n }\n return map;\n });\n\n /**\n * Per-day positioned events + all-day strip for the time grid. The column\n * head (`Mon 21`) is precomputed here so the template never calls\n * `formatDate` during change detection.\n */\n protected readonly timedColumns = computed(() => {\n const timedByDay = this.timedByDay();\n const allDayByDay = this.allDayByDay();\n const startHour = this.dayStartHour();\n const endHour = this.dayEndHour();\n const names = this.i18n.dateNames;\n const today = new Date();\n // gridDays() are `startOfDay` instants, so `getTime()` matches the keys.\n return this.gridDays().map((day) => ({\n day,\n today: isSameDay(day, today),\n head: formatDate(day, 'ddd d', names),\n placements: layoutTimedEvents(\n timedByDay.get(day.getTime()) ?? [],\n day,\n startHour,\n endHour,\n ),\n allDay: allDayByDay.get(day.getTime()) ?? [],\n }));\n });\n\n protected hourLabel(hour: number): string {\n return `${String(hour).padStart(2, '0')}:00`;\n }\n\n protected placementTitle(p: MkTimedPlacement): string {\n const from = p.event.start ? minutesLabel(minutesOfDay(p.event.start)) : '';\n return from ? `${from} ${p.event.title}` : p.event.title;\n }\n\n protected onSlotClick(day: Date, hour: number): void {\n const at = new Date(day);\n at.setHours(hour, 0, 0, 0);\n this.slotClick.emit(at);\n }\n\n // ===================================================================\n // Editable time grid — drag-to-move / drag-to-resize (pointer)\n // ===================================================================\n\n /** Template-facing state of the in-flight edit (`null` when idle). */\n protected readonly editPreview = signal<EditPreviewState | null>(null);\n\n /** The active pointer gesture, if any (only one at a time). */\n private pointerSession: EditSession | null = null;\n /** The active keyboard \"move mode\" session, if any. */\n private kbSession: EditSession | null = null;\n\n /** Pending rAF id for the coalesced pointer-move pass. */\n private editRaf: number | null = null;\n private pendingX = 0;\n private pendingY = 0;\n /** Set after a real drag so the trailing synthetic click never fires `eventClick`. */\n private swallowNextClick = false;\n\n private readonly pointerMoveHandler = (e: PointerEvent) => this.onEditPointerMove(e);\n private readonly pointerUpHandler = (e: PointerEvent) => this.onEditPointerUp(e);\n private readonly pointerCancelHandler = () => this.abortPointerEdit();\n /** Escape aborts an in-flight pointer drag (document-level while dragging). */\n private readonly escHandler = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && this.pointerSession?.started) {\n e.stopPropagation();\n this.abortPointerEdit();\n }\n };\n /**\n * `touch-action: pan-y` keeps native scrolling alive while the long-press is\n * pending, so once armed the drag must eat `touchmove` itself\n * (`passive: false` — same pattern as `MkDrag`).\n */\n private readonly touchMoveEater = (e: TouchEvent) => {\n if (this.pointerSession?.armed && e.cancelable) e.preventDefault();\n };\n /** Android fires `contextmenu` on long-press — keep it off the gesture. */\n private readonly contextMenuHandler = (e: Event) => e.preventDefault();\n\n protected onBlockPointerDown(event: Event, p: MkTimedPlacement, colIndex: number): void {\n const e = event as PointerEvent;\n if (!this.editable() || this.pointerSession || this.kbSession) return;\n if (e.button !== undefined && e.button !== 0) return;\n const el = e.currentTarget as HTMLElement;\n const kind = (e.target as HTMLElement | null)?.closest?.(\n '.mk-event-calendar__resize-handle',\n )\n ? 'resize'\n : 'move';\n const [startMin, endMin] = eventMinutes(p.event);\n this.pointerSession = {\n kind,\n event: p.event,\n el,\n pointerId: e.pointerId,\n started: false,\n armed: false,\n startX: e.clientX,\n startY: e.clientY,\n touchTimer: null,\n savedTouchAction: null,\n colRects: [],\n pxPerMin: 1,\n origDay: colIndex,\n origStartMin: startMin,\n origEndMin: endMin,\n day: colIndex,\n startMin,\n endMin,\n };\n try {\n el.setPointerCapture(e.pointerId);\n } catch {\n // Pointer already lifted (fast tap) — nothing left to capture.\n }\n el.addEventListener('pointermove', this.pointerMoveHandler);\n el.addEventListener('pointerup', this.pointerUpHandler);\n el.addEventListener('pointercancel', this.pointerCancelHandler);\n if (e.pointerType === 'touch') {\n // Touch long-press arming, as in MkDrag: until the timer fires this\n // press may just be the start of a scroll, so nothing is prevented yet.\n el.addEventListener('touchmove', this.touchMoveEater, { passive: false });\n el.addEventListener('contextmenu', this.contextMenuHandler);\n this.pointerSession.touchTimer =\n this.doc.defaultView?.setTimeout(() => this.armTouch(), TOUCH_DELAY_MS) ??\n null;\n } else {\n // Mouse / pen: armed immediately, the 5px threshold does the rest.\n this.pointerSession.armed = true;\n }\n }\n\n /** The long-press delay elapsed with the finger still down — arm the drag. */\n private armTouch(): void {\n const s = this.pointerSession;\n if (!s) return;\n s.touchTimer = null;\n s.armed = true;\n s.savedTouchAction = s.el.style.touchAction;\n s.el.style.touchAction = 'none';\n }\n\n private onEditPointerMove(e: PointerEvent): void {\n const s = this.pointerSession;\n if (!s || e.pointerId !== s.pointerId) return;\n if (!s.armed) {\n // Long-press still pending: real movement means the user is scrolling.\n if (Math.hypot(e.clientX - s.startX, e.clientY - s.startY) > TOUCH_SLOP) {\n this.teardownPointer(false);\n }\n return;\n }\n if (!s.started) {\n if (Math.hypot(e.clientX - s.startX, e.clientY - s.startY) < DRAG_THRESHOLD) {\n return;\n }\n this.beginEdit(s);\n }\n e.preventDefault();\n // Only record the coordinates — the math + signal write is rAF-coalesced\n // (one pass per frame, same pattern as the table's column resize).\n this.pendingX = e.clientX;\n this.pendingY = e.clientY;\n if (this.editRaf !== null) return;\n const raf = this.doc.defaultView?.requestAnimationFrame(() => {\n this.editRaf = null;\n this.applyPendingEdit();\n });\n if (raf === undefined) this.applyPendingEdit(); // no window — degrade to sync\n else this.editRaf = raf;\n }\n\n /**\n * The drag crossed the threshold — snapshot geometry once (column rects and\n * the px↔minute scale); every subsequent move works off this cache, so a\n * drag never forces layout.\n */\n private beginEdit(s: EditSession): void {\n s.started = true;\n const cols = this.hostEl.querySelectorAll<HTMLElement>('.mk-event-calendar__col');\n s.colRects = Array.from(cols, (c) => c.getBoundingClientRect());\n const rangeMin = Math.max((this.dayEndHour() - this.dayStartHour()) * 60, 1);\n s.pxPerMin = (s.colRects[s.origDay]?.height || rangeMin) / rangeMin;\n this.doc.addEventListener('keydown', this.escHandler, true);\n this.updatePreview(s);\n }\n\n /** Per-frame move pass: snap, clamp, and publish the preview signal. */\n private applyPendingEdit(): void {\n const s = this.pointerSession;\n if (!s || !s.started) return;\n const snap = Math.max(1, this.snapMinutes());\n const gridStart = this.dayStartHour() * 60;\n const gridEnd = this.dayEndHour() * 60;\n const deltaMin = (this.pendingY - s.startY) / s.pxPerMin;\n const snapped = Math.round(deltaMin / snap) * snap;\n if (s.kind === 'move') {\n const duration = s.origEndMin - s.origStartMin;\n s.startMin = clampNumber(\n s.origStartMin + snapped,\n gridStart,\n Math.max(gridStart, gridEnd - duration),\n );\n s.endMin = s.startMin + duration;\n s.day = this.columnAt(s, this.pendingX);\n } else {\n s.endMin = clampNumber(s.origEndMin + snapped, s.startMin + snap, gridEnd);\n }\n this.updatePreview(s);\n }\n\n /** Column index under `x`, from the rects snapshotted at lift. */\n private columnAt(s: EditSession, x: number): number {\n const rects = s.colRects;\n if (!rects.length || !rects[s.origDay]?.width) return s.day;\n for (let i = 0; i < rects.length; i++) {\n if (x >= rects[i].left && x < rects[i].right) return i;\n }\n return x < rects[0].left ? 0 : rects.length - 1;\n }\n\n private onEditPointerUp(e: PointerEvent): void {\n const s = this.pointerSession;\n if (!s || e.pointerId !== s.pointerId) return;\n // Flush (don't drop) the last coalesced move so the drop lands exactly\n // where the pointer ended, not on the last painted frame.\n if (this.editRaf !== null) {\n this.doc.defaultView?.cancelAnimationFrame(this.editRaf);\n this.editRaf = null;\n this.applyPendingEdit();\n }\n const started = s.started;\n this.teardownPointer(started);\n if (!started) return; // was a click, never a drag — eventClick may follow\n this.editPreview.set(null);\n this.commitEdit(s, 'pointer');\n }\n\n /** Escape / pointercancel: the pill snaps back, nothing is emitted. */\n private abortPointerEdit(): void {\n const s = this.pointerSession;\n if (!s) return;\n const started = s.started;\n this.teardownPointer(started);\n this.editPreview.set(null);\n if (started) this.announceCancelled('polite');\n }\n\n /** Undo everything `onBlockPointerDown`/`beginEdit` set up. */\n private teardownPointer(swallowClick: boolean): void {\n const s = this.pointerSession;\n if (!s) return;\n this.pointerSession = null;\n if (this.editRaf !== null) {\n this.doc.defaultView?.cancelAnimationFrame(this.editRaf);\n this.editRaf = null;\n }\n const el = s.el;\n if (s.pointerId !== null) {\n try {\n el.releasePointerCapture(s.pointerId);\n } catch {\n // Capture may already be gone.\n }\n }\n el.removeEventListener('pointermove', this.pointerMoveHandler);\n el.removeEventListener('pointerup', this.pointerUpHandler);\n el.removeEventListener('pointercancel', this.pointerCancelHandler);\n el.removeEventListener('touchmove', this.touchMoveEater);\n el.removeEventListener('contextmenu', this.contextMenuHandler);\n if (s.touchTimer !== null) this.doc.defaultView?.clearTimeout(s.touchTimer);\n if (s.savedTouchAction !== null) el.style.touchAction = s.savedTouchAction;\n this.doc.removeEventListener('keydown', this.escHandler, true);\n if (swallowClick) {\n // The browser fires a synthetic click right after pointerup, which would\n // re-fire `eventClick` from a drag (the carousel's click-swallower\n // pattern, kept as a flag because the Angular listener on the same\n // element registered first). The timeout covers gestures with no click.\n this.swallowNextClick = true;\n this.doc.defaultView?.setTimeout(\n () => (this.swallowNextClick = false),\n CLICK_SWALLOW_MS,\n );\n }\n }\n\n // ===================================================================\n // Editable time grid — keyboard move mode (WCAG 2.5.7)\n // ===================================================================\n\n protected onBlockKeydown(event: Event, p: MkTimedPlacement, colIndex: number): void {\n const e = event as KeyboardEvent;\n if (!this.editable()) return;\n const s = this.kbSession;\n if (!s || s.event !== p.event) {\n // Enter/Space arms \"move mode\" (and, via preventDefault, keeps the\n // button's synthetic click — and thus `eventClick` — from firing).\n if ((e.key === 'Enter' || e.key === ' ') && !this.pointerSession) {\n e.preventDefault();\n this.armKeyboard(e.currentTarget as HTMLElement, p, colIndex);\n }\n return;\n }\n const snap = Math.max(1, this.snapMinutes());\n const gridStart = this.dayStartHour() * 60;\n const gridEnd = this.dayEndHour() * 60;\n switch (e.key) {\n case 'Enter':\n case ' ':\n e.preventDefault();\n this.commitKeyboard();\n break;\n case 'Escape':\n e.preventDefault();\n this.cancelKeyboard();\n break;\n case 'ArrowUp':\n case 'ArrowDown': {\n e.preventDefault();\n const dir = e.key === 'ArrowUp' ? -1 : 1;\n if (e.shiftKey) {\n // Shift+Up/Down resizes the end, never below the snap duration.\n s.endMin = clampNumber(s.endMin + dir * snap, s.startMin + snap, gridEnd);\n } else {\n const duration = s.endMin - s.startMin;\n s.startMin = clampNumber(\n s.startMin + dir * snap,\n gridStart,\n Math.max(gridStart, gridEnd - duration),\n );\n s.endMin = s.startMin + duration;\n }\n this.updatePreview(s);\n this.announceStep(s);\n break;\n }\n case 'ArrowLeft':\n case 'ArrowRight': {\n e.preventDefault();\n const dir = e.key === 'ArrowLeft' ? -1 : 1;\n s.day = clampNumber(s.day + dir, 0, this.gridDays().length - 1);\n this.updatePreview(s);\n this.announceStep(s);\n break;\n }\n default:\n break;\n }\n }\n\n /** Losing focus mid-move cancels the keyboard edit (no stuck state). */\n protected onBlockBlur(): void {\n if (this.kbSession) this.cancelKeyboard();\n }\n\n private armKeyboard(el: HTMLElement, p: MkTimedPlacement, colIndex: number): void {\n const [startMin, endMin] = eventMinutes(p.event);\n const cols = this.hostEl.querySelectorAll<HTMLElement>('.mk-event-calendar__col');\n const colRects = Array.from(cols, (c) => c.getBoundingClientRect());\n const rangeMin = Math.max((this.dayEndHour() - this.dayStartHour()) * 60, 1);\n const s: EditSession = {\n kind: 'move',\n event: p.event,\n el,\n pointerId: null,\n started: true,\n armed: true,\n startX: 0,\n startY: 0,\n touchTimer: null,\n savedTouchAction: null,\n colRects,\n pxPerMin: (colRects[colIndex]?.height || rangeMin) / rangeMin,\n origDay: colIndex,\n origStartMin: startMin,\n origEndMin: endMin,\n day: colIndex,\n startMin,\n endMin,\n };\n this.kbSession = s;\n this.updatePreview(s);\n this.announcer.announce(\n this.i18n.eventCalendarGrabbed(\n p.event.title,\n minutesLabel(startMin),\n minutesLabel(endMin),\n ),\n 'assertive',\n );\n }\n\n private commitKeyboard(): void {\n const s = this.kbSession;\n if (!s) return;\n this.kbSession = null;\n this.editPreview.set(null);\n this.commitEdit(s, 'keyboard');\n }\n\n private cancelKeyboard(): void {\n this.kbSession = null;\n this.editPreview.set(null);\n this.announceCancelled('assertive');\n }\n\n // ===================================================================\n // Editable time grid — shared commit / preview / template helpers\n // ===================================================================\n\n /**\n * Emit the edited range (if anything actually changed): `eventResize` when\n * only the end moved, `eventMove` otherwise. The `events` input is never\n * touched — applying the change is the consumer's job.\n */\n private commitEdit(s: EditSession, source: 'pointer' | 'keyboard'): void {\n const dayChanged = s.day !== s.origDay;\n const startChanged = s.startMin !== s.origStartMin;\n const endChanged = s.endMin !== s.origEndMin;\n if (!dayChanged && !startChanged && !endChanged) return;\n const day = this.gridDays()[s.day] ?? this.gridDays()[s.origDay];\n const start = new Date(day);\n start.setHours(0, s.startMin, 0, 0);\n const end = new Date(day);\n end.setHours(0, s.endMin, 0, 0);\n const detail: MkCalendarEventEdit = { event: s.event, start, end };\n const resize = !dayChanged && !startChanged;\n if (resize) this.eventResize.emit(detail);\n else this.eventMove.emit(detail);\n this.announcer.announce(\n resize\n ? this.i18n.eventCalendarResized(s.event.title, minutesLabel(s.endMin))\n : this.i18n.eventCalendarMoved(\n s.event.title,\n formatDate(day, 'MMMM d, yyyy', this.i18n.dateNames),\n minutesLabel(s.startMin),\n minutesLabel(s.endMin),\n ),\n source === 'keyboard' ? 'assertive' : 'polite',\n );\n }\n\n /** Publish the session's current target as template-facing preview state. */\n private updatePreview(s: EditSession): void {\n const gridStart = this.dayStartHour() * 60;\n const gridEnd = this.dayEndHour() * 60;\n const rangeMin = Math.max(gridEnd - gridStart, 1);\n const clampedStart = Math.max(s.startMin, gridStart);\n const clampedEnd = Math.min(s.endMin, gridEnd);\n const dx = (s.colRects[s.day]?.left ?? 0) - (s.colRects[s.origDay]?.left ?? 0);\n const dy = (s.startMin - s.origStartMin) * s.pxPerMin;\n const durationChanged =\n s.endMin - s.startMin !== s.origEndMin - s.origStartMin;\n this.editPreview.set({\n event: s.event,\n day: s.day,\n transform: `translate(${dx}px, ${dy}px)`,\n heightPct: durationChanged\n ? Math.max(((clampedEnd - clampedStart) / rangeMin) * 100, 2.5)\n : null,\n label: `${minutesLabel(s.startMin)} – ${minutesLabel(s.endMin)}`,\n top: ((clampedStart - gridStart) / rangeMin) * 100,\n outlineHeight: Math.max(((clampedEnd - clampedStart) / rangeMin) * 100, 1),\n });\n }\n\n private announceCancelled(politeness: 'polite' | 'assertive'): void {\n this.announcer.announce(this.i18n.eventCalendarEditCancelled, politeness);\n }\n\n /** Position update after each keyboard step. */\n private announceStep(s: EditSession): void {\n const day = this.gridDays()[s.day];\n this.announcer.announce(\n this.i18n.eventCalendarPosition(\n s.event.title,\n formatDate(day, 'MMMM d, yyyy', this.i18n.dateNames),\n minutesLabel(s.startMin),\n minutesLabel(s.endMin),\n ),\n 'assertive',\n );\n }\n\n /** Is this placement the pill currently being edited? */\n protected isEditing(p: MkTimedPlacement): boolean {\n return this.editPreview()?.event === p.event;\n }\n\n /** Lift transform for the dragged pill (`null` when idle). */\n protected blockTransform(p: MkTimedPlacement): string | null {\n const d = this.editPreview();\n return d && d.event === p.event ? d.transform : null;\n }\n\n /** Height (%) — the resize preview overrides the layout's height. */\n protected blockHeight(p: MkTimedPlacement): number {\n const d = this.editPreview();\n return d && d.event === p.event && d.heightPct !== null ? d.heightPct : p.height;\n }\n\n /** Would-be time range shown on the pill while it is being edited. */\n protected dragLabelFor(p: MkTimedPlacement): string | null {\n const d = this.editPreview();\n return d && d.event === p.event ? d.label : null;\n }\n\n /** Drop-outline geometry when the edit currently targets column `i`. */\n protected dropOutlineFor(i: number): EditPreviewState | null {\n const d = this.editPreview();\n return d && d.day === i ? d : null;\n }\n\n /**\n * Accessible name for an editable pill — the title plus its time range\n * (composed with, not replacing, the visible title text and tooltip).\n */\n protected blockAriaLabel(p: MkTimedPlacement): string {\n const [startMin, endMin] = eventMinutes(p.event);\n return `${p.event.title}, ${minutesLabel(startMin)} – ${minutesLabel(endMin)}`;\n }\n\n /** `aria-roledescription` for editable pills. */\n protected readonly movableRoledescription = this.i18n.eventCalendarMovableEvent;\n\n ngOnDestroy(): void {\n if (this.pointerSession) this.teardownPointer(false);\n this.kbSession = null;\n }\n\n /** Raw 6×7 grid of dates for the visible month. */\n private readonly weeks = computed(() =>\n buildMonthMatrix(this.viewDate(), this.firstDayOfWeek()),\n );\n\n /** Weekday column headers ordered from `firstDayOfWeek`. */\n protected readonly weekdays = computed<MkWeekdayHeader[]>(() =>\n this.weeks()[0].map((d) => ({\n short: formatDate(d, 'ddd', this.i18n.dateNames),\n full: getWeekdayFullName(d, this.i18n.dateNames),\n })),\n );\n\n /** Events grouped by local calendar day, keyed by `startOfDay` timestamp. */\n private readonly eventsByDay = computed(() => {\n const map = new Map<number, MkCalendarEvent[]>();\n for (const event of this.events()) {\n const key = startOfDay(event.date).getTime();\n const bucket = map.get(key);\n if (bucket) bucket.push(event);\n else map.set(key, [event]);\n }\n return map;\n });\n\n /** 6×7 grid of day cells with their (capped) events resolved. */\n protected readonly weekCells = computed<MkDayCell[][]>(() => {\n const month = this.viewMonth();\n const today = new Date();\n const max = this.maxPerDay();\n const byDay = this.eventsByDay();\n return this.weeks().map((week) =>\n week.map((date) => {\n const dayEvents = byDay.get(startOfDay(date).getTime()) ?? [];\n const cell = {\n date,\n outside: !isSameMonth(date, month),\n today: isSameDay(date, today),\n visible: dayEvents.slice(0, max),\n overflow: Math.max(0, dayEvents.length - max),\n };\n // Label formatted once per rebuild, not on every CD pass (42 cells).\n return { ...cell, label: this.dayLabel(cell) };\n }),\n );\n });\n\n /**\n * Screen-reader label for a day cell. The button's `aria-label` replaces its\n * visual content, so the label also announces the day's events — count plus\n * up to three titles — e.g. `July 9, 2026, 2 events: Standup, Demo`.\n * Precomputed into {@link MkDayCell#label} by `weekCells`.\n */\n protected dayLabel(cell: Omit<MkDayCell, 'label'>): string {\n const formatted = formatDate(cell.date, 'MMMM d, yyyy', this.i18n.dateNames);\n const count = cell.visible.length + cell.overflow;\n if (count === 0) return formatted;\n const titles = cell.visible\n .slice(0, 3)\n .map((e) => e.title)\n .join(', ');\n return `${formatted}, ${this.i18n.dayEvents(count, titles)}`;\n }\n\n protected prevMonth(): void {\n this.shiftMonth(-1);\n }\n\n protected nextMonth(): void {\n this.shiftMonth(1);\n }\n\n private shiftMonth(delta: number): void {\n const view = this.view();\n const next =\n view === 'month'\n ? addMonths(this.viewDate(), delta)\n : addDays(this.viewDate(), delta * (view === 'week' ? 7 : 1));\n this.viewDate.set(next);\n this.monthChange.emit(next);\n }\n\n protected onDayClick(d: Date): void {\n this.dayClick.emit(d);\n }\n\n protected onEventClick(event: Event, calendarEvent: MkCalendarEvent): void {\n event.stopPropagation();\n // A real drag just ended — the browser's trailing synthetic click must not\n // read as an event activation.\n if (this.swallowNextClick) {\n this.swallowNextClick = false;\n event.preventDefault();\n return;\n }\n this.eventClick.emit(calendarEvent);\n }\n}\n","<div class=\"mk-event-calendar__header\">\n <button\n type=\"button\"\n class=\"mk-event-calendar__nav\"\n [attr.aria-label]=\"i18n.previousMonth\"\n (click)=\"prevMonth()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n d=\"M15 5l-7 7 7 7\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n\n <span class=\"mk-event-calendar__label\" [id]=\"labelId\" aria-live=\"polite\">{{\n monthLabel()\n }}</span>\n\n <button\n type=\"button\"\n class=\"mk-event-calendar__nav\"\n [attr.aria-label]=\"i18n.nextMonth\"\n (click)=\"nextMonth()\"\n >\n <svg viewBox=\"0 0 24 24\" width=\"18\" height=\"18\" aria-hidden=\"true\">\n <path\n d=\"M9 5l7 7-7 7\"\n fill=\"none\"\n stroke=\"currentColor\"\n stroke-width=\"2\"\n stroke-linecap=\"round\"\n stroke-linejoin=\"round\"\n />\n </svg>\n </button>\n</div>\n\n@if (view() === 'month') {\n<!--\n The days are a plain list of buttons (role=\"group\"), not an ARIA grid — there\n is no roving-tabindex arrow navigation here, so grid semantics would be wrong.\n-->\n<div class=\"mk-event-calendar__grid\" role=\"group\" [attr.aria-labelledby]=\"labelId\">\n <div class=\"mk-event-calendar__weekdays\" aria-hidden=\"true\">\n @for (wd of weekdays(); track $index) {\n <span class=\"mk-event-calendar__weekday\">\n <abbr [title]=\"wd.full\">{{ wd.short }}</abbr>\n </span>\n }\n </div>\n\n @for (week of weekCells(); track $index) {\n <div class=\"mk-event-calendar__week\">\n @for (cell of week; track cell.date.getTime()) {\n <button\n type=\"button\"\n class=\"mk-event-calendar__cell\"\n [class.mk-event-calendar__cell--outside]=\"cell.outside\"\n [class.mk-event-calendar__cell--today]=\"cell.today\"\n [attr.aria-label]=\"cell.label\"\n [attr.aria-current]=\"cell.today ? 'date' : null\"\n (click)=\"onDayClick(cell.date)\"\n >\n <span class=\"mk-event-calendar__day-num\">{{\n cell.date.getDate()\n }}</span>\n\n <!--\n Presentational for assistive tech: the day button's aria-label\n already announces the events, and nested interactive content inside\n a button is invalid. The pill (click) is a mouse-only shortcut to\n `eventClick`; keyboard users activate the day (`dayClick`) instead.\n -->\n <span class=\"mk-event-calendar__events\" aria-hidden=\"true\">\n @for (event of cell.visible; track $index) {\n <span\n class=\"mk-event-calendar__pill\"\n [style.background-color]=\"event.color || 'var(--mk-primary)'\"\n [title]=\"event.title\"\n (click)=\"onEventClick($event, event)\"\n >\n {{ event.title }}\n </span>\n }\n @if (cell.overflow > 0) {\n <span class=\"mk-event-calendar__more\">{{\n i18n.moreEvents(cell.overflow)\n }}</span>\n }\n </span>\n </button>\n }\n </div>\n }\n</div>\n} @else {\n <div\n class=\"mk-event-calendar__timegrid\"\n role=\"group\"\n [attr.aria-labelledby]=\"labelId\"\n >\n @if (view() === 'week') {\n <div class=\"mk-event-calendar__timegrid-head\" aria-hidden=\"true\">\n <span class=\"mk-event-calendar__gutter-spacer\"></span>\n @for (col of timedColumns(); track col.day.getTime()) {\n <span\n class=\"mk-event-calendar__col-head\"\n [class.mk-event-calendar__col-head--today]=\"col.today\"\n >\n {{ col.head }}\n </span>\n }\n </div>\n }\n\n <div class=\"mk-event-calendar__timegrid-body\">\n <div class=\"mk-event-calendar__gutter\" aria-hidden=\"true\">\n @for (h of hours(); track h) {\n <span class=\"mk-event-calendar__hour-label\">{{ hourLabel(h) }}</span>\n }\n </div>\n\n @for (col of timedColumns(); track col.day.getTime(); let ci = $index) {\n <div\n class=\"mk-event-calendar__col\"\n [class.mk-event-calendar__col--today]=\"col.today\"\n >\n @for (h of hours(); track h) {\n <button\n type=\"button\"\n class=\"mk-event-calendar__slot\"\n [attr.aria-label]=\"col.head + ' ' + hourLabel(h)\"\n (click)=\"onSlotClick(col.day, h)\"\n ></button>\n }\n\n @for (p of col.placements; track $index) {\n <button\n type=\"button\"\n class=\"mk-event-calendar__block\"\n [class.mk-event-calendar__block--editable]=\"editable()\"\n [class.mk-event-calendar__block--dragging]=\"isEditing(p)\"\n [style.top.%]=\"p.top\"\n [style.height.%]=\"blockHeight(p)\"\n [style.left.%]=\"(100 / p.lanes) * p.lane\"\n [style.width.%]=\"100 / p.lanes\"\n [style.transform]=\"blockTransform(p)\"\n [style.background-color]=\"p.event.color || 'var(--mk-primary)'\"\n [title]=\"placementTitle(p)\"\n [attr.aria-label]=\"editable() ? blockAriaLabel(p) : null\"\n [attr.aria-roledescription]=\"editable() ? movableRoledescription : null\"\n (click)=\"onEventClick($event, p.event)\"\n (pointerdown)=\"onBlockPointerDown($event, p, ci)\"\n (keydown)=\"onBlockKeydown($event, p, ci)\"\n (blur)=\"onBlockBlur()\"\n >\n @if (dragLabelFor(p); as lbl) {\n <span class=\"mk-event-calendar__drag-time\" aria-hidden=\"true\">{{\n lbl\n }}</span>\n }\n {{ p.event.title }}\n @if (editable()) {\n <span\n class=\"mk-event-calendar__resize-handle\"\n aria-hidden=\"true\"\n ></span>\n }\n </button>\n }\n\n @if (dropOutlineFor(ci); as outline) {\n <div\n class=\"mk-event-calendar__drop-outline\"\n aria-hidden=\"true\"\n [style.top.%]=\"outline.top\"\n [style.height.%]=\"outline.outlineHeight\"\n ></div>\n }\n\n @if (col.allDay.length) {\n <span class=\"mk-event-calendar__all-day\" aria-hidden=\"true\">\n @for (event of col.allDay; track $index) {\n <span\n class=\"mk-event-calendar__pill\"\n [style.background-color]=\"event.color || 'var(--mk-primary)'\"\n [title]=\"event.title\"\n (click)=\"onEventClick($event, event)\"\n >\n {{ event.title }}\n </span>\n }\n </span>\n }\n </div>\n }\n </div>\n </div>\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n ElementRef,\n booleanAttribute,\n computed,\n forwardRef,\n inject,\n input,\n model,\n numberAttribute,\n signal,\n viewChildren,\n} from '@angular/core';\nimport {\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n type AbstractControl,\n type ValidationErrors,\n type Validator,\n} from '@angular/forms';\nimport type { MkSize } from '@mk-kit/ui/core';\nimport { mkUniqueId } from '@mk-kit/ui/core';\nimport { mkValidatorChange } from '@mk-kit/ui/core';\nimport { MK_I18N } from '@mk-kit/ui/core';\nimport { mkInjectFieldTouched } from '@mk-kit/ui/core/signal-forms';\nimport { MkFormField } from '@mk-kit/ui/forms';\nimport { clampDate, isAfter, isBefore, isSameDay, startOfDay } from '../datetime/date-utils';\n\n/** Which segment a part represents. */\ntype MkDateSegment = 'day' | 'month' | 'year';\n\n/** Segment display order. */\nexport type MkMiniDateOrder = 'dmy' | 'mdy' | 'ymd';\n\n/** A rendered segment descriptor (view-model for one spinbutton). */\ninterface MkDatePart {\n key: MkDateSegment;\n /** Text shown in the segment, or the placeholder when empty. */\n display: string;\n /** Whether the segment currently holds a value. */\n filled: boolean;\n valueNow: number | null;\n valueMin: number;\n valueMax: number;\n valueText: string;\n label: string;\n}\n\n/** Number of days in month `m` (1–12) of `year`. */\nfunction daysInMonth(m: number, year: number): number {\n return new Date(year, m, 0).getDate();\n}\n\n/**\n * MiniDate — a compact, popover-free inline date editor with segmented\n * day / month / year spin fields (like a native `<input type=\"date\">` but\n * themed and signal-driven). Each segment is an ARIA `spinbutton`: Arrow\n * Up/Down step the value (day wraps within the month), Home/End jump to the\n * segment's minimum/maximum, Arrow Left/Right move between segments, and\n * typing digits fills the focused segment and auto-advances (OTP-style). Implements `ControlValueAccessor` and a two-way\n * `value` model over a real `Date | null`.\n *\n * A non-null `Date` is emitted only when all three segments are set and valid;\n * the day is clamped to the month's length (e.g. Feb 31 → 28/29) and the\n * result is clamped to `[min, max]`.\n *\n * ```html\n * <mk-mini-date [(value)]=\"date\" order=\"dmy\" [min]=\"minDate\" />\n * ```\n */\n@Component({\n selector: 'mk-mini-date',\n templateUrl: './mini-date.html',\n styleUrl: './mini-date.scss',\n changeDetection: ChangeDetectionStrategy.OnPush,\n exportAs: 'mkMiniDate',\n host: {\n class: 'mk-mini-date',\n role: 'group',\n '[attr.aria-labelledby]': 'labelledBy()',\n '[attr.aria-describedby]': 'describedBy()',\n '[attr.aria-invalid]': 'isInvalid() || null',\n '[attr.aria-required]': 'isRequired() || null',\n '[class.mk-mini-date--sm]': \"effectiveSize() === 'sm'\",\n '[class.mk-mini-date--lg]': \"effectiveSize() === 'lg'\",\n '[class.mk-mini-date--invalid]': 'isInvalid()',\n '[class.mk-mini-date--disabled]': 'isDisabled()',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: forwardRef(() => MkMiniDate),\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: forwardRef(() => MkMiniDate),\n multi: true,\n },\n ],\n})\nexport class MkMiniDate implements ControlValueAccessor, Validator {\n private readonly field = inject(MkFormField, { optional: true });\n /** Signal Forms: gates `invalid` until the bound field is touched or dirty. */\n private readonly fieldTouched = mkInjectFieldTouched();\n protected readonly i18n = inject(MK_I18N);\n private readonly segEls =\n viewChildren<ElementRef<HTMLElement>>('seg');\n\n /** Minimum selectable date (inclusive). */\n readonly min = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `min()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Maximum selectable date (inclusive). */\n readonly max = input<Date | null, Date | null | undefined>(null, {\n // Signal Forms binds the schema's `max()` limit here, `undefined` when unset.\n transform: (v) => v ?? null,\n });\n /** Two-way value — a real `Date`, or `null` while incomplete. */\n readonly value = model<Date | null>(null);\n /** Disable the control. */\n readonly disabled = input(false, { transform: booleanAttribute });\n /** Force invalid styling when standalone. */\n readonly invalid = input(false, { transform: booleanAttribute });\n /** Control size. Ignored inside an `mk-form-field`. */\n readonly size = input<MkSize>('md');\n /** Segment order. */\n readonly order = input<MkMiniDateOrder>('dmy');\n /** Lowest selectable year (for the year spinbutton range). */\n readonly yearMin = input(1900, { transform: numberAttribute });\n /** Highest selectable year (for the year spinbutton range). */\n readonly yearMax = input(2100, { transform: numberAttribute });\n\n readonly segId = mkUniqueId('mk-mini-date');\n\n // --- Segment state --------------------------------------------------------\n private readonly daySeg = signal<number | null>(null);\n private readonly monthSeg = signal<number | null>(null);\n private readonly yearSeg = signal<number | null>(null);\n /** Per-segment digit buffer used for OTP-style typing/auto-advance. */\n private buffer = '';\n private bufferKey: MkDateSegment | null = null;\n\n private readonly cvaDisabled = signal(false);\n private onChange: (value: Date | null) => void = () => {};\n private onTouched: () => void = () => {};\n\n protected readonly effectiveSize = computed<MkSize>(() =>\n this.field ? this.field.size() : this.size(),\n );\n protected readonly isDisabled = computed(\n () => this.disabled() || this.cvaDisabled(),\n );\n protected readonly isInvalid = computed(\n () => (this.invalid() && this.fieldTouched()) || (this.field?.hasError() ?? false),\n );\n protected readonly isRequired = computed(() => this.field?.isRequired() ?? false);\n protected readonly labelledBy = computed(() => this.field?.labelId ?? null);\n protected readonly describedBy = computed(\n () => this.field?.describedBy() ?? null,\n );\n\n /** Days available in the current month/year (defaults to a leap year). */\n private readonly monthLength = computed(() =>\n daysInMonth(this.monthSeg() ?? 1, this.yearSeg() ?? 2000),\n );\n\n /** Ordered, rendered segment descriptors. */\n protected readonly parts = computed<MkDatePart[]>(() => {\n const names = this.i18n.dateNames;\n const byKey: Record<MkDateSegment, MkDatePart> = {\n day: {\n key: 'day',\n display: this.pad(this.daySeg(), 2, 'dd'),\n filled: this.daySeg() != null,\n valueNow: this.daySeg(),\n valueMin: 1,\n valueMax: this.monthLength(),\n valueText:\n this.daySeg() != null ? String(this.daySeg()) : this.i18n.empty,\n label: this.i18n.daySegment,\n },\n month: {\n key: 'month',\n display:\n this.monthSeg() != null\n ? names.monthsShort[this.monthSeg()! - 1]\n : 'mmm',\n filled: this.monthSeg() != null,\n valueNow: this.monthSeg(),\n valueMin: 1,\n valueMax: 12,\n valueText:\n this.monthSeg() != null\n ? names.months[this.monthSeg()! - 1]\n : this.i18n.empty,\n label: this.i18n.monthSegment,\n },\n year: {\n key: 'year',\n display: this.pad(this.yearSeg(), 4, 'yyyy'),\n filled: this.yearSeg() != null,\n valueNow: this.yearSeg(),\n valueMin: this.yearMin(),\n valueMax: this.yearMax(),\n valueText:\n this.yearSeg() != null ? String(this.yearSeg()) : this.i18n.empty,\n label: this.i18n.yearSegment,\n },\n };\n return this.order()\n .split('')\n .map((c) =>\n c === 'd' ? byKey.day : c === 'm' ? byKey.month : byKey.year,\n );\n });\n\n // --- Interaction ----------------------------------------------------------\n protected onSegKeydown(key: MkDateSegment, index: number, e: KeyboardEvent): void {\n if (this.isDisabled()) return;\n switch (e.key) {\n case 'ArrowUp':\n e.preventDefault();\n this.step(key, 1);\n break;\n case 'ArrowDown':\n e.preventDefault();\n this.step(key, -1);\n break;\n case 'ArrowLeft':\n e.preventDefault();\n this.focusSeg(index - 1);\n break;\n case 'ArrowRight':\n e.preventDefault();\n this.focusSeg(index + 1);\n break;\n case 'Home':\n e.preventDefault();\n this.setSegment(key, this.segMin(key));\n this.resetBuffer();\n break;\n case 'End':\n e.preventDefault();\n this.setSegment(key, this.segMax(key));\n this.resetBuffer();\n break;\n case 'Backspace':\n case 'Delete':\n e.preventDefault();\n this.setSegment(key, null);\n this.resetBuffer();\n if (e.key === 'Backspace') this.focusSeg(index - 1);\n break;\n default:\n if (/^[0-9]$/.test(e.key)) {\n e.preventDefault();\n this.typeDigit(key, index, e.key);\n }\n }\n }\n\n protected onSegFocus(key: MkDateSegment): void {\n // A fresh focus starts a new typing buffer for that segment.\n if (this.bufferKey !== key) this.resetBuffer();\n }\n\n protected onBlur(): void {\n this.onTouched();\n }\n\n /** A segment's minimum value (Home key). */\n private segMin(key: MkDateSegment): number {\n return key === 'year' ? this.yearMin() : 1;\n }\n\n /** A segment's maximum value (End key). */\n private segMax(key: MkDateSegment): number {\n if (key === 'day') return this.monthLength();\n if (key === 'month') return 12;\n return this.yearMax();\n }\n\n /** Step a segment by `delta`; the day wraps within the current month. */\n protected step(key: MkDateSegment, delta: number): void {\n if (key === 'day') {\n const len = this.monthLength();\n const cur = this.daySeg() ?? (delta > 0 ? 0 : len + 1);\n const next = ((cur - 1 + delta) % len + len) % len + 1;\n this.setSegment('day', next);\n } else if (key === 'month') {\n const cur = this.monthSeg() ?? (delta > 0 ? 0 : 13);\n const next = ((cur - 1 + delta) % 12 + 12) % 12 + 1;\n this.setSegment('month', next);\n } else {\n const base = this.yearSeg() ?? new Date().getFullYear() - delta;\n const next = Math.min(this.yearMax(), Math.max(this.yearMin(), base + delta));\n this.setSegment('year', next);\n }\n this.resetBuffer();\n }\n\n /** OTP-style digit entry with auto-advance to the next segment when full. */\n private typeDigit(key: MkDateSegment, index: number, digit: string): void {\n if (this.bufferKey !== key) this.buffer = '';\n this.bufferKey = key;\n const maxDigits = key === 'year' ? 4 : 2;\n const max =\n key === 'day'\n ? this.monthLength()\n : key === 'month'\n ? 12\n : this.yearMax();\n\n let buf = this.buffer + digit;\n let num = Number(buf);\n // If the running value overflows the max, restart the buffer with this digit.\n if (num > max || buf.length > maxDigits) {\n buf = digit;\n num = Number(buf);\n }\n this.buffer = buf;\n this.setSegment(key, num === 0 ? null : num);\n\n // Advance when the segment is saturated (full width, or another digit\n // could only overflow the max).\n const full = buf.length >= maxDigits || num * 10 > max;\n if (full) {\n this.resetBuffer();\n this.focusSeg(index + 1);\n }\n }\n\n /** Set a segment, then rebuild + emit the composite date. */\n protected setSegment(key: MkDateSegment, value: number | null): void {\n if (key === 'day') this.daySeg.set(value);\n else if (key === 'month') this.monthSeg.set(value);\n else this.yearSeg.set(value);\n this.recompute();\n }\n\n /**\n * Rebuild the `Date` from the three segments and emit it. Emits `null` unless\n * all three are set; clamps the day to the month length and the whole date to\n * `[min, max]`, writing any clamp back into the segments.\n */\n private recompute(): void {\n const d = this.daySeg();\n const m = this.monthSeg();\n const y = this.yearSeg();\n if (d == null || m == null || y == null) {\n this.emit(null);\n return;\n }\n const len = daysInMonth(m, y);\n const clampedDay = Math.min(d, len);\n if (clampedDay !== d) this.daySeg.set(clampedDay);\n\n const raw = new Date(y, m - 1, clampedDay);\n const bounded = clampDate(startOfDay(raw), this.min(), this.max());\n if (!isSameDay(bounded, raw)) this.split(bounded);\n this.emit(startOfDay(bounded));\n }\n\n private emit(v: Date | null): void {\n this.value.set(v);\n this.onChange(v);\n }\n\n /** Populate the three segments from a `Date`. */\n private split(date: Date): void {\n this.daySeg.set(date.getDate());\n this.monthSeg.set(date.getMonth() + 1);\n this.yearSeg.set(date.getFullYear());\n }\n\n private resetBuffer(): void {\n this.buffer = '';\n this.bufferKey = null;\n }\n\n private focusSeg(index: number): void {\n const els = this.segEls();\n const el = els[Math.max(0, Math.min(els.length - 1, index))];\n el?.nativeElement.focus();\n this.resetBuffer();\n }\n\n private pad(v: number | null, width: number, placeholder: string): string {\n return v == null ? placeholder : String(v).padStart(width, '0');\n }\n\n // --- ControlValueAccessor -------------------------------------------------\n writeValue(value: Date | null): void {\n if (value instanceof Date && !Number.isNaN(value.getTime())) {\n this.split(value);\n } else {\n this.daySeg.set(null);\n this.monthSeg.set(null);\n this.yearSeg.set(null);\n }\n this.value.set(value ?? null);\n this.resetBuffer();\n }\n registerOnChange(fn: (value: Date | null) => void): void {\n this.onChange = fn;\n }\n registerOnTouched(fn: () => void): void {\n this.onTouched = fn;\n }\n setDisabledState(isDisabled: boolean): void {\n this.cvaDisabled.set(isDisabled);\n }\n\n // --- Validator ------------------------------------------------------------\n private readonly validatorChange = mkValidatorChange(() => {\n this.min();\n this.max();\n });\n\n /**\n * Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs.\n */\n validate(control: AbstractControl): ValidationErrors | null {\n const v = control.value;\n if (!(v instanceof Date) || Number.isNaN(v.getTime())) return null;\n const day = startOfDay(v);\n const min = this.min();\n if (min && isBefore(day, startOfDay(min))) return { mkMinDate: { min, actual: v } };\n const max = this.max();\n if (max && isAfter(day, startOfDay(max))) return { mkMaxDate: { max, actual: v } };\n return null;\n }\n\n registerOnValidatorChange(fn: () => void): void {\n this.validatorChange.register(fn);\n }\n}\n","@for (part of parts(); track part.key; let last = $last) {\n <span\n #seg\n class=\"mk-mini-date__seg\"\n [class.mk-mini-date__seg--empty]=\"!part.filled\"\n [id]=\"segId + '-' + part.key\"\n role=\"spinbutton\"\n [attr.tabindex]=\"isDisabled() ? -1 : 0\"\n [attr.aria-label]=\"part.label\"\n [attr.aria-valuenow]=\"part.valueNow\"\n [attr.aria-valuemin]=\"part.valueMin\"\n [attr.aria-valuemax]=\"part.valueMax\"\n [attr.aria-valuetext]=\"part.valueText\"\n [attr.aria-disabled]=\"isDisabled() || null\"\n (keydown)=\"onSegKeydown(part.key, $index, $event)\"\n (focus)=\"onSegFocus(part.key)\"\n (blur)=\"onBlur()\"\n >{{ part.display }}</span>\n @if (!last) {\n <span class=\"mk-mini-date__sep\" aria-hidden=\"true\">/</span>\n }\n}\n","/**\n * DATE & TIME components group barrel for @mk-kit/ui.\n * Re-exports every public component, the shared date helpers, and the\n * `MkDateRange` type.\n */\nexport * from './datetime/date-utils';\nexport * from './calendar';\nexport * from './date-picker';\nexport * from './time-picker';\nexport * from './datetime-picker';\nexport * from './date-range-picker';\nexport * from './month-picker';\nexport * from './week-picker';\nexport * from './event-calendar';\nexport * from './mini-date';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["pad2","minutesOfDay"],"mappings":"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"}
|