@mk-kit/ui 0.34.0

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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +115 -0
  3. package/block-editor/README.md +254 -0
  4. package/fesm2022/mk-kit-ui-block-editor.mjs +2158 -0
  5. package/fesm2022/mk-kit-ui-block-editor.mjs.map +1 -0
  6. package/fesm2022/mk-kit-ui-button.mjs +81 -0
  7. package/fesm2022/mk-kit-ui-button.mjs.map +1 -0
  8. package/fesm2022/mk-kit-ui-checkbox.mjs +136 -0
  9. package/fesm2022/mk-kit-ui-checkbox.mjs.map +1 -0
  10. package/fesm2022/mk-kit-ui-chip.mjs +122 -0
  11. package/fesm2022/mk-kit-ui-chip.mjs.map +1 -0
  12. package/fesm2022/mk-kit-ui-context-menu.mjs +144 -0
  13. package/fesm2022/mk-kit-ui-context-menu.mjs.map +1 -0
  14. package/fesm2022/mk-kit-ui-core.mjs +1576 -0
  15. package/fesm2022/mk-kit-ui-core.mjs.map +1 -0
  16. package/fesm2022/mk-kit-ui-data.mjs +6055 -0
  17. package/fesm2022/mk-kit-ui-data.mjs.map +1 -0
  18. package/fesm2022/mk-kit-ui-datetime.mjs +3409 -0
  19. package/fesm2022/mk-kit-ui-datetime.mjs.map +1 -0
  20. package/fesm2022/mk-kit-ui-directives.mjs +1779 -0
  21. package/fesm2022/mk-kit-ui-directives.mjs.map +1 -0
  22. package/fesm2022/mk-kit-ui-dnd.mjs +1073 -0
  23. package/fesm2022/mk-kit-ui-dnd.mjs.map +1 -0
  24. package/fesm2022/mk-kit-ui-feedback.mjs +2426 -0
  25. package/fesm2022/mk-kit-ui-feedback.mjs.map +1 -0
  26. package/fesm2022/mk-kit-ui-forms.mjs +9208 -0
  27. package/fesm2022/mk-kit-ui-forms.mjs.map +1 -0
  28. package/fesm2022/mk-kit-ui-icon.mjs +470 -0
  29. package/fesm2022/mk-kit-ui-icon.mjs.map +1 -0
  30. package/fesm2022/mk-kit-ui-media.mjs +896 -0
  31. package/fesm2022/mk-kit-ui-media.mjs.map +1 -0
  32. package/fesm2022/mk-kit-ui-navigation.mjs +2542 -0
  33. package/fesm2022/mk-kit-ui-navigation.mjs.map +1 -0
  34. package/fesm2022/mk-kit-ui-rich-text.mjs +565 -0
  35. package/fesm2022/mk-kit-ui-rich-text.mjs.map +1 -0
  36. package/fesm2022/mk-kit-ui-table.mjs +1378 -0
  37. package/fesm2022/mk-kit-ui-table.mjs.map +1 -0
  38. package/fesm2022/mk-kit-ui.mjs +32 -0
  39. package/fesm2022/mk-kit-ui.mjs.map +1 -0
  40. package/package.json +130 -0
  41. package/schematics/collection.json +10 -0
  42. package/schematics/ng-add/index.js +113 -0
  43. package/schematics/ng-add/schema.json +22 -0
  44. package/schematics/package.json +3 -0
  45. package/styles/mk-kit.css +750 -0
  46. package/types/mk-kit-ui-block-editor.d.ts +292 -0
  47. package/types/mk-kit-ui-button.d.ts +40 -0
  48. package/types/mk-kit-ui-checkbox.d.ts +62 -0
  49. package/types/mk-kit-ui-chip.d.ts +59 -0
  50. package/types/mk-kit-ui-context-menu.d.ts +57 -0
  51. package/types/mk-kit-ui-core.d.ts +1105 -0
  52. package/types/mk-kit-ui-data.d.ts +2580 -0
  53. package/types/mk-kit-ui-datetime.d.ts +1171 -0
  54. package/types/mk-kit-ui-directives.d.ts +807 -0
  55. package/types/mk-kit-ui-dnd.d.ts +423 -0
  56. package/types/mk-kit-ui-feedback.d.ts +1270 -0
  57. package/types/mk-kit-ui-forms.d.ts +3586 -0
  58. package/types/mk-kit-ui-icon.d.ts +108 -0
  59. package/types/mk-kit-ui-media.d.ts +549 -0
  60. package/types/mk-kit-ui-navigation.d.ts +1169 -0
  61. package/types/mk-kit-ui-rich-text.d.ts +187 -0
  62. package/types/mk-kit-ui-table.d.ts +739 -0
  63. package/types/mk-kit-ui.d.ts +17 -0
@@ -0,0 +1,1171 @@
1
+ import * as _mk_kit_ui_core from '@mk-kit/ui/core';
2
+ import { MkDateNames, MkSize } from '@mk-kit/ui/core';
3
+ import * as _angular_core from '@angular/core';
4
+ import { OnDestroy } from '@angular/core';
5
+ import { ControlValueAccessor, Validator, AbstractControl, ValidationErrors } from '@angular/forms';
6
+
7
+ /**
8
+ * Dependency-free date helpers shared by the mk-kit DATE & TIME components.
9
+ * All functions are pure and operate on native `Date`. Name-producing helpers
10
+ * default to English but accept an optional {@link MkDateNames} table (from
11
+ * `MK_I18N`) for localisation. Dates are treated in the local time zone.
12
+ */
13
+
14
+ /** Day-of-week index 0 (Sunday) … 6 (Saturday). */
15
+ type MkWeekday = 0 | 1 | 2 | 3 | 4 | 5 | 6;
16
+ /** True when both dates fall on the same calendar day (local time). */
17
+ declare function isSameDay(a: Date, b: Date): boolean;
18
+ /** True when both dates fall in the same calendar month of the same year. */
19
+ declare function isSameMonth(a: Date, b: Date): boolean;
20
+ /** Midnight (00:00:00.000) on the first day of `date`'s month. */
21
+ declare function startOfMonth(date: Date): Date;
22
+ /** Midnight on the last day of `date`'s month. */
23
+ declare function endOfMonth(date: Date): Date;
24
+ /** A new date `count` months after `date` (negative to subtract). Clamps the
25
+ * day of month so e.g. Jan 31 + 1 month = Feb 28/29, not Mar 3. */
26
+ declare function addMonths(date: Date, count: number): Date;
27
+ /** A new date `count` days after `date` (negative to subtract). */
28
+ declare function addDays(date: Date, count: number): Date;
29
+ /** Midnight (00:00:00.000) on `date`'s calendar day. */
30
+ declare function startOfDay(date: Date): Date;
31
+ /**
32
+ * The first day of the week containing `date`, at midnight. `firstDayOfWeek`
33
+ * is the week's starting weekday (0 = Sunday … 6 = Saturday).
34
+ */
35
+ declare function startOfWeek(date: Date, firstDayOfWeek?: number): Date;
36
+ /** The last day of the week containing `date`, at midnight. */
37
+ declare function endOfWeek(date: Date, firstDayOfWeek?: number): Date;
38
+ /**
39
+ * ISO-8601 week number (1–53) of `date`. Weeks start on Monday and week 1 is
40
+ * the week containing the first Thursday of the year.
41
+ */
42
+ declare function getISOWeek(date: Date): number;
43
+ /** True when `a` is strictly before `b` (full timestamp comparison). */
44
+ declare function isBefore(a: Date, b: Date): boolean;
45
+ /** True when `a` is strictly after `b` (full timestamp comparison). */
46
+ declare function isAfter(a: Date, b: Date): boolean;
47
+ /** Clamp `date` into the inclusive `[min, max]` range (either bound optional). */
48
+ declare function clampDate(date: Date, min?: Date | null, max?: Date | null): Date;
49
+ /** Format `date` as an ISO calendar date `YYYY-MM-DD` (local time). */
50
+ declare function formatISODate(date: Date): string;
51
+ /** Parse a `YYYY-MM-DD` string into a local-time `Date`, or `null` if invalid. */
52
+ declare function parseISODate(value: string | null | undefined): Date | null;
53
+ /**
54
+ * Format `date` using a small pattern set. Supported tokens:
55
+ * `yyyy` (4-digit year), `MMMM` (full month), `MMM` (short month),
56
+ * `MM` (2-digit month), `dd` (2-digit day), `d` (day), `ddd` (short weekday).
57
+ * Longer tokens are matched first so `MMMM` wins over `MM`.
58
+ * Month/weekday names come from `names` when given, else English.
59
+ */
60
+ declare function formatDate(date: Date, pattern: string, names?: MkDateNames): string;
61
+ /**
62
+ * Build a fixed 6×7 matrix of `Date` cells for `viewDate`'s month, including
63
+ * the leading days from the previous month and trailing days from the next so
64
+ * every row is full. `firstDayOfWeek` is 0 (Sunday) … 6 (Saturday).
65
+ */
66
+ declare function buildMonthMatrix(viewDate: Date, firstDayOfWeek?: number): Date[][];
67
+ /** Full month names, index 0 = January (from `names`, else English). */
68
+ declare function getMonthNames(names?: MkDateNames): readonly string[];
69
+ /**
70
+ * Weekday header labels ordered to start at `firstDayOfWeek`.
71
+ * `format` selects `'short'` (e.g. `Mon`) or `'narrow'` (e.g. `M`).
72
+ * Labels come from `names` when given, else English.
73
+ */
74
+ declare function getWeekdayNames(firstDayOfWeek?: number, format?: 'short' | 'narrow', names?: MkDateNames): string[];
75
+ /** Full weekday name for `date` (for screen-reader labels). */
76
+ declare function getWeekdayFullName(date: Date, names?: MkDateNames): string;
77
+
78
+ /** Weekday header descriptor (short label + full name for `abbr[title]`). */
79
+ interface MkWeekdayHeader$1 {
80
+ short: string;
81
+ full: string;
82
+ }
83
+ /**
84
+ * Calendar — an accessible month-grid date picker following the WAI-ARIA
85
+ * grid / date-picker pattern. It is the reusable core behind
86
+ * `mk-date-picker` and `mk-date-range-picker`.
87
+ *
88
+ * Keyboard (when a day has focus): Arrow keys move by day/week (crossing month
89
+ * boundaries updates the view), Home/End jump to the start/end of the week,
90
+ * PageUp/PageDown change month, Shift+PageUp/PageDown change year, and
91
+ * Enter/Space selects the focused day. A roving tabindex keeps a single tab
92
+ * stop. Month changes are announced via {@link MkLiveAnnouncer}.
93
+ *
94
+ * Exposes a two-way `value` model and implements `ControlValueAccessor`, so it
95
+ * also works directly with `ngModel` / `formControl` (single-date mode).
96
+ * Additive range inputs (`rangeMode`,
97
+ * `rangeStart`, `rangeEnd`) let it highlight an in-progress selection without
98
+ * affecting single-date use; range hosts listen to `dateSelected`.
99
+ *
100
+ * ```html
101
+ * <mk-calendar [(value)]="date" [min]="minDate" [firstDayOfWeek]="1" />
102
+ * ```
103
+ */
104
+ declare class MkCalendar implements ControlValueAccessor, Validator {
105
+ private readonly host;
106
+ protected readonly i18n: _mk_kit_ui_core.MkI18nStrings;
107
+ private readonly injector;
108
+ private readonly announcer;
109
+ /** Two-way selected date (single-date mode). */
110
+ readonly value: _angular_core.ModelSignal<Date | null>;
111
+ /** Earliest selectable date (inclusive, day granularity). */
112
+ readonly min: _angular_core.InputSignal<Date | null>;
113
+ /** Latest selectable date (inclusive, day granularity). */
114
+ readonly max: _angular_core.InputSignal<Date | null>;
115
+ /** First column of the week: 0 = Sunday … 6 = Saturday. */
116
+ readonly firstDayOfWeek: _angular_core.InputSignalWithTransform<number, unknown>;
117
+ /** Disable the whole calendar. */
118
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
119
+ /** Force the invalid visual + `aria-invalid` when used standalone. */
120
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
121
+ /** Predicate marking individual days as disabled. */
122
+ readonly disabledDate: _angular_core.InputSignal<((d: Date) => boolean) | null>;
123
+ /** Control size. */
124
+ readonly size: _angular_core.InputSignal<MkSize>;
125
+ /**
126
+ * Stretch to fill the container instead of sizing to content.
127
+ *
128
+ * Off by default, because the common host is a date-picker popover that must
129
+ * stay a compact widget. Turn it on when the calendar is laid out as part of
130
+ * a page — a sidebar or a column — where sizing to content leaves the space
131
+ * beside it empty. Cells share the width evenly and `--_cell-size` becomes
132
+ * their minimum rather than their fixed size.
133
+ */
134
+ readonly fullWidth: _angular_core.InputSignalWithTransform<boolean, unknown>;
135
+ /** Enable range highlighting. Hosts drive selection via `dateSelected`. */
136
+ readonly rangeMode: _angular_core.InputSignalWithTransform<boolean, unknown>;
137
+ /** Range start endpoint to highlight (range mode). */
138
+ readonly rangeStart: _angular_core.InputSignal<Date | null>;
139
+ /** Range end endpoint to highlight (range mode). */
140
+ readonly rangeEnd: _angular_core.InputSignal<Date | null>;
141
+ /** Emitted whenever a (non-disabled) day is activated. */
142
+ readonly dateSelected: _angular_core.OutputEmitterRef<Date>;
143
+ /**
144
+ * Emitted (in range mode) as the pointer hovers days — the hovered day, or
145
+ * `null` on leave. Lets hosts preview a selection (e.g. a whole-week
146
+ * highlight in `mk-week-picker`).
147
+ */
148
+ readonly dateHovered: _angular_core.OutputEmitterRef<Date | null>;
149
+ /** id of the visible month/year label — wire as the grid's label. */
150
+ readonly labelId: string;
151
+ /** Disabled state driven by forms (`setDisabledState`). */
152
+ protected readonly cvaDisabled: _angular_core.WritableSignal<boolean>;
153
+ /** The day that currently owns the roving tabindex; also drives the view. */
154
+ protected readonly focusedDate: _angular_core.WritableSignal<Date>;
155
+ /** Hovered day used to preview a range before the end is picked. */
156
+ protected readonly hoveredDate: _angular_core.WritableSignal<Date | null>;
157
+ /** Disabled by the `disabled` input or by the bound form control. */
158
+ protected readonly isControlDisabled: _angular_core.Signal<boolean>;
159
+ protected readonly isInvalid: _angular_core.Signal<boolean>;
160
+ /** First day of the visible month. */
161
+ protected readonly viewMonth: _angular_core.Signal<Date>;
162
+ /** Human label for the visible month, e.g. `July 2026`. */
163
+ protected readonly monthLabel: _angular_core.Signal<string>;
164
+ /** 6×7 grid of dates for the visible month. */
165
+ protected readonly weeks: _angular_core.Signal<Date[][]>;
166
+ /** Weekday column headers ordered from `firstDayOfWeek`. */
167
+ protected readonly weekdays: _angular_core.Signal<MkWeekdayHeader$1[]>;
168
+ private announcedMonth;
169
+ constructor();
170
+ private onChange;
171
+ private onTouched;
172
+ writeValue(value: Date | null): void;
173
+ registerOnChange(fn: (value: Date | null) => void): void;
174
+ registerOnTouched(fn: () => void): void;
175
+ setDisabledState(isDisabled: boolean): void;
176
+ /** Marks the control touched when focus leaves the calendar entirely. */
177
+ protected onFocusout(event: FocusEvent): void;
178
+ private initialFocus;
179
+ protected isOutside(d: Date): boolean;
180
+ protected isDisabled(d: Date): boolean;
181
+ protected isToday(d: Date): boolean;
182
+ protected isSelected(d: Date): boolean;
183
+ protected isFocused(d: Date): boolean;
184
+ /** Effective range end while previewing (falls back to the hovered day). */
185
+ private previewEnd;
186
+ protected isRangeStart(d: Date): boolean;
187
+ protected isRangeEnd(d: Date): boolean;
188
+ protected isInRange(d: Date): boolean;
189
+ /**
190
+ * `aria-selected` state of a day's gridcell. Single-date mode mirrors
191
+ * `isSelected`; range mode exposes the committed endpoints and the days
192
+ * between them (hover previews stay visual-only so the accessibility tree
193
+ * doesn't churn while the pointer moves).
194
+ */
195
+ protected isAriaSelected(d: Date): boolean;
196
+ protected dayLabel(d: Date): string;
197
+ protected select(d: Date): void;
198
+ protected onHover(d: Date): void;
199
+ protected clearHover(): void;
200
+ protected prevMonth(): void;
201
+ protected nextMonth(): void;
202
+ protected prevYear(): void;
203
+ protected nextYear(): void;
204
+ protected onGridKeydown(event: Event): void;
205
+ private weekdayOffset;
206
+ private moveFocus;
207
+ private focusActiveCell;
208
+ private readonly validatorChange;
209
+ /**
210
+ * Reports `mkMinDate` / `mkMaxDate` for a date outside `[min]`/`[max]`, and
211
+ * `mkDateFilter` for one rejected by `[disabledDate]`.
212
+ */
213
+ validate(control: AbstractControl): ValidationErrors | null;
214
+ registerOnValidatorChange(fn: () => void): void;
215
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MkCalendar, never>;
216
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MkCalendar, "mk-calendar", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "disabledDate": { "alias": "disabledDate"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "fullWidth": { "alias": "fullWidth"; "required": false; "isSignal": true; }; "rangeMode": { "alias": "rangeMode"; "required": false; "isSignal": true; }; "rangeStart": { "alias": "rangeStart"; "required": false; "isSignal": true; }; "rangeEnd": { "alias": "rangeEnd"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; "dateSelected": "dateSelected"; "dateHovered": "dateHovered"; }, never, never, true, never>;
217
+ }
218
+
219
+ /**
220
+ * DatePicker — a text field paired with a calendar popover. Type a date (parsed
221
+ * on blur/Enter) or pick one from the `mk-calendar`. Implements
222
+ * `ControlValueAccessor` and a two-way `value` model, so it works with
223
+ * `[(ngModel)]`, reactive forms and `[(value)]`.
224
+ *
225
+ * The calendar opens below the field, closes on Escape / outside click / after
226
+ * a selection, and wires `aria-expanded` / `aria-haspopup` / `aria-invalid`.
227
+ * When nested in an `mk-form-field` it adopts the field's id and aria wiring.
228
+ *
229
+ * ```html
230
+ * <mk-date-picker [(value)]="date" [min]="minDate" clearable />
231
+ * ```
232
+ */
233
+ declare class MkDatePicker implements ControlValueAccessor, Validator {
234
+ protected readonly i18n: _mk_kit_ui_core.MkI18nStrings;
235
+ private readonly field;
236
+ private readonly host;
237
+ private readonly injector;
238
+ private readonly inputRef;
239
+ /** The calendar panel — lives in the top layer once opened. */
240
+ private readonly panelRef;
241
+ /** Two-way selected date. */
242
+ readonly value: _angular_core.ModelSignal<Date | null>;
243
+ /** Earliest selectable date (inclusive). */
244
+ readonly min: _angular_core.InputSignal<Date | null>;
245
+ /** Latest selectable date (inclusive). */
246
+ readonly max: _angular_core.InputSignal<Date | null>;
247
+ /** Predicate marking individual days as disabled (threaded to the calendar). */
248
+ readonly disabledDate: _angular_core.InputSignal<((d: Date) => boolean) | null>;
249
+ /** Placeholder shown when empty. */
250
+ readonly placeholder: _angular_core.InputSignal<string>;
251
+ /** Pattern used to render the selected date in the field. */
252
+ readonly displayFormat: _angular_core.InputSignal<string>;
253
+ /** Disable the control. */
254
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
255
+ /** Show a clear button when a date is selected. */
256
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
257
+ /** Force invalid styling + `aria-invalid`. */
258
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
259
+ /** First column of the calendar week (0 = Sunday). */
260
+ readonly firstDayOfWeek: _angular_core.InputSignalWithTransform<number, unknown>;
261
+ /** Control size. Ignored when nested in an `mk-form-field`. */
262
+ readonly size: _angular_core.InputSignal<MkSize>;
263
+ protected readonly open: _angular_core.WritableSignal<boolean>;
264
+ /** Editable text mirror of the field. */
265
+ protected readonly inputText: _angular_core.WritableSignal<string>;
266
+ private readonly cvaDisabled;
267
+ private onChange;
268
+ private onTouched;
269
+ readonly inputId: string;
270
+ readonly panelId: string;
271
+ protected readonly effectiveSize: _angular_core.Signal<MkSize>;
272
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
273
+ protected readonly isInvalid: _angular_core.Signal<boolean>;
274
+ protected readonly isRequired: _angular_core.Signal<boolean>;
275
+ protected readonly describedBy: _angular_core.Signal<string | null>;
276
+ protected readonly showClear: _angular_core.Signal<boolean>;
277
+ constructor();
278
+ protected toggle(): void;
279
+ protected openPanel(): void;
280
+ protected close(): void;
281
+ protected onCalendarPick(date: Date | null): void;
282
+ protected onInput(event: Event): void;
283
+ protected onInputKeydown(event: Event): void;
284
+ protected clear(): void;
285
+ private commitInput;
286
+ private parse;
287
+ private setValue;
288
+ protected onFocusOut(event: Event): void;
289
+ /**
290
+ * Escape pressed inside the (teleported) calendar panel — close and return
291
+ * focus to the input. `preventDefault` + `stopPropagation` keep any outer
292
+ * Escape handling (e.g. a containing dialog) from also firing.
293
+ */
294
+ protected onPanelEscape(event: Event): void;
295
+ /**
296
+ * Focus left the teleported panel. The host `(focusout)` never sees this —
297
+ * the panel lives under `document.body` — so Tab-out of the calendar is
298
+ * handled here: close unless focus moved back into the field or the panel.
299
+ */
300
+ protected onPanelFocusout(event: FocusEvent): void;
301
+ writeValue(value: Date | null): void;
302
+ registerOnChange(fn: (value: Date | null) => void): void;
303
+ registerOnTouched(fn: () => void): void;
304
+ setDisabledState(isDisabled: boolean): void;
305
+ private readonly validatorChange;
306
+ /**
307
+ * Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs.
308
+ */
309
+ validate(control: AbstractControl): ValidationErrors | null;
310
+ registerOnValidatorChange(fn: () => void): void;
311
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MkDatePicker, never>;
312
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MkDatePicker, "mk-date-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "disabledDate": { "alias": "disabledDate"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
313
+ }
314
+
315
+ /** A selectable time option. */
316
+ interface MkTimeOption {
317
+ /** Canonical `HH:mm` (24h) value. */
318
+ value: string;
319
+ /** Display label (respects `hour12`). */
320
+ label: string;
321
+ }
322
+ /**
323
+ * TimePicker — a 24-hour-canonical time field with an editable input plus a
324
+ * scrollable list of times generated from `step`. The time itself is always
325
+ * 24h canonical regardless of the `hour12` display. Implements
326
+ * `ControlValueAccessor` and a two-way `value` model.
327
+ *
328
+ * The form value is either a `HH:mm` string (`"14:30"`, default) or a `Date`
329
+ * carrying the time in its **local** hours/minutes (`valueFormat="date"`, for
330
+ * hosts whose model is a datetime — e.g. migrating off Material's
331
+ * `mat-timepicker`); both modes read back either shape and `null` when empty.
332
+ * Only the *emitted* value depends on `valueFormat` — internally the time is
333
+ * always normalised to `HH:mm`, which is also what `min` / `max` compare.
334
+ *
335
+ * In `date` mode seconds and milliseconds are zeroed, and the **date part** is
336
+ * taken from the current model value when that is already a `Date` (so editing
337
+ * the time repeatedly never drifts the day); otherwise today's local date is
338
+ * used. Assign a `Date` first if the day matters.
339
+ *
340
+ * Type a time (`14:30`, `2:30 pm`) or pick from the ARIA listbox
341
+ * (Up/Down/Home/End/Enter/Esc; the active option scrolls into view). When
342
+ * nested in an `mk-form-field` it adopts the field's id and aria wiring.
343
+ *
344
+ * ```html
345
+ * <mk-time-picker [(value)]="time" [step]="15" hour12 clearable />
346
+ * <mk-time-picker valueFormat="date" [(value)]="pickupAt" [step]="15" />
347
+ * ```
348
+ */
349
+ declare class MkTimePicker implements ControlValueAccessor, Validator {
350
+ protected readonly i18n: _mk_kit_ui_core.MkI18nStrings;
351
+ private readonly field;
352
+ private readonly host;
353
+ private readonly injector;
354
+ private readonly inputRef;
355
+ /** The listbox panel — lives in the top layer once opened. */
356
+ private readonly listRef;
357
+ /**
358
+ * Two-way selected time: a canonical `HH:mm` (24h) string, a `Date` when
359
+ * `valueFormat="date"`, or `null`. Either shape may be assigned in either
360
+ * mode; it is normalised to the configured format.
361
+ */
362
+ readonly value: _angular_core.ModelSignal<string | Date | null>;
363
+ /** Shape of the form value: a `HH:mm` string or a `Date`. */
364
+ readonly valueFormat: _angular_core.InputSignal<"string" | "date">;
365
+ /** Earliest selectable time `HH:mm` (inclusive). */
366
+ readonly min: _angular_core.InputSignal<string | null>;
367
+ /** Latest selectable time `HH:mm` (inclusive). */
368
+ readonly max: _angular_core.InputSignal<string | null>;
369
+ /** Interval between generated options, in minutes. */
370
+ readonly step: _angular_core.InputSignalWithTransform<number, unknown>;
371
+ /** Display 12-hour time with AM/PM (the model stays 24h). */
372
+ readonly hour12: _angular_core.InputSignalWithTransform<boolean, unknown>;
373
+ /** Disable the control. */
374
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
375
+ /** Placeholder shown when empty. */
376
+ readonly placeholder: _angular_core.InputSignal<string>;
377
+ /** Show a clear button when a time is selected. */
378
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
379
+ /** Force invalid styling + `aria-invalid`. */
380
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
381
+ /** Control size. Ignored when nested in an `mk-form-field`. */
382
+ readonly size: _angular_core.InputSignal<MkSize>;
383
+ protected readonly open: _angular_core.WritableSignal<boolean>;
384
+ protected readonly activeIndex: _angular_core.WritableSignal<number>;
385
+ protected readonly inputText: _angular_core.WritableSignal<string>;
386
+ /** The canonical `HH:mm` time behind whatever shape `value` carries. */
387
+ private readonly time;
388
+ private readonly cvaDisabled;
389
+ private onChange;
390
+ private onTouched;
391
+ /** The last value this component itself wrote into the `value` model. */
392
+ private lastDerived;
393
+ /** The day `date`-mode values land on — see {@link toDate}. */
394
+ private datePart;
395
+ readonly inputId: string;
396
+ readonly listId: string;
397
+ protected readonly effectiveSize: _angular_core.Signal<MkSize>;
398
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
399
+ protected readonly isInvalid: _angular_core.Signal<boolean>;
400
+ protected readonly isRequired: _angular_core.Signal<boolean>;
401
+ protected readonly describedBy: _angular_core.Signal<string | null>;
402
+ protected readonly showClear: _angular_core.Signal<boolean>;
403
+ /** Generated, min/max-filtered list of selectable times. */
404
+ protected readonly options: _angular_core.Signal<MkTimeOption[]>;
405
+ protected readonly selectedIndex: _angular_core.Signal<number>;
406
+ constructor();
407
+ protected optionId(index: number): string;
408
+ private display;
409
+ private parse;
410
+ protected toggle(): void;
411
+ protected openList(): void;
412
+ protected close(): void;
413
+ protected selectOption(index: number): void;
414
+ protected clear(): void;
415
+ protected onInput(event: Event): void;
416
+ protected onInputKeydown(event: Event): void;
417
+ private moveActive;
418
+ private commitInput;
419
+ private withinBounds;
420
+ private setValue;
421
+ /** Compute the outward value and push it to the model (+ form when `emit`). */
422
+ private deriveValue;
423
+ private sameValue;
424
+ /**
425
+ * Interpret an externally-assigned value (`writeValue` or `[value]`): it
426
+ * seeds the canonical time and, when it is a `Date`, the day that `date`-mode
427
+ * values land on.
428
+ */
429
+ private applyExternal;
430
+ /** Normalise any accepted shape to canonical `HH:mm`, or `null`. */
431
+ private toHhmm;
432
+ /**
433
+ * Put `hh:mm` on a `Date`. The date part comes from the current value when
434
+ * that is already a `Date` (so repeated edits never drift the day),
435
+ * otherwise from today — always via the local accessors, never the UTC ones.
436
+ */
437
+ private toDate;
438
+ private scrollActiveIntoView;
439
+ protected onFocusOut(event: Event): void;
440
+ writeValue(value: string | Date | null): void;
441
+ registerOnChange(fn: (value: string | Date | null) => void): void;
442
+ registerOnTouched(fn: () => void): void;
443
+ setDisabledState(isDisabled: boolean): void;
444
+ private readonly validatorChange;
445
+ /**
446
+ * Reports `mkMinTime` / `mkMaxTime` against the `[min]` and `[max]` inputs.
447
+ * The control value is normalised to `HH:mm` first (so a `Date` model
448
+ * validates too); both sides are then zero-padded `HH:mm`, so a
449
+ * lexicographic compare is a chronological one.
450
+ */
451
+ validate(control: AbstractControl): ValidationErrors | null;
452
+ registerOnValidatorChange(fn: () => void): void;
453
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MkTimePicker, never>;
454
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MkTimePicker, "mk-time-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "valueFormat": { "alias": "valueFormat"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "hour12": { "alias": "hour12"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
455
+ }
456
+
457
+ /** A selected date range. Either endpoint may be `null` while incomplete. */
458
+ interface MkDateRange {
459
+ start: Date | null;
460
+ end: Date | null;
461
+ }
462
+ /**
463
+ * DateRangePicker — select a start + end date from a single calendar popover.
464
+ * The first click sets the start, the second sets the end (endpoints are
465
+ * swapped if picked in reverse), and the hovered range is previewed live.
466
+ * Implements `ControlValueAccessor` and a two-way `value` model of
467
+ * {@link MkDateRange}.
468
+ *
469
+ * ```html
470
+ * <mk-date-range-picker [(value)]="range" [min]="minDate" clearable />
471
+ * ```
472
+ */
473
+ declare class MkDateRangePicker implements ControlValueAccessor, Validator {
474
+ protected readonly i18n: _mk_kit_ui_core.MkI18nStrings;
475
+ private readonly field;
476
+ private readonly host;
477
+ private readonly injector;
478
+ private readonly triggerRef;
479
+ /** The calendar panel — lives in the top layer once opened. */
480
+ private readonly panelRef;
481
+ /** Two-way selected range. */
482
+ readonly value: _angular_core.ModelSignal<MkDateRange>;
483
+ /** Earliest selectable date (inclusive). */
484
+ readonly min: _angular_core.InputSignal<Date | null>;
485
+ /** Latest selectable date (inclusive). */
486
+ readonly max: _angular_core.InputSignal<Date | null>;
487
+ /** Predicate marking individual days as disabled. */
488
+ readonly disabledDate: _angular_core.InputSignal<((d: Date) => boolean) | null>;
489
+ /** Placeholder shown when no range is selected. */
490
+ readonly placeholder: _angular_core.InputSignal<string>;
491
+ /** Pattern used to render each endpoint. */
492
+ readonly displayFormat: _angular_core.InputSignal<string>;
493
+ /** Disable the control. */
494
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
495
+ /** Show a clear button when a range is selected. */
496
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
497
+ /** Force invalid styling + `aria-invalid`. */
498
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
499
+ /** First column of the calendar week (0 = Sunday). */
500
+ readonly firstDayOfWeek: _angular_core.InputSignalWithTransform<number, unknown>;
501
+ /** Control size. Ignored when nested in an `mk-form-field`. */
502
+ readonly size: _angular_core.InputSignal<MkSize>;
503
+ protected readonly open: _angular_core.WritableSignal<boolean>;
504
+ /** In-progress start endpoint (drives calendar highlighting). */
505
+ protected readonly selStart: _angular_core.WritableSignal<Date | null>;
506
+ /** In-progress end endpoint. */
507
+ protected readonly selEnd: _angular_core.WritableSignal<Date | null>;
508
+ private readonly cvaDisabled;
509
+ private onChange;
510
+ private onTouched;
511
+ readonly triggerId: string;
512
+ readonly panelId: string;
513
+ protected readonly effectiveSize: _angular_core.Signal<MkSize>;
514
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
515
+ protected readonly isInvalid: _angular_core.Signal<boolean>;
516
+ protected readonly isRequired: _angular_core.Signal<boolean>;
517
+ protected readonly labelledBy: _angular_core.Signal<string | null>;
518
+ protected readonly describedBy: _angular_core.Signal<string | null>;
519
+ protected readonly showClear: _angular_core.Signal<boolean>;
520
+ /** Display label, e.g. `Jul 1, 2026 – Jul 9, 2026`. */
521
+ protected readonly displayLabel: _angular_core.Signal<string>;
522
+ protected toggle(): void;
523
+ protected openPanel(): void;
524
+ protected close(): void;
525
+ protected onPick(date: Date): void;
526
+ protected clear(): void;
527
+ private commit;
528
+ private setValue;
529
+ protected onFocusOut(event: Event): void;
530
+ /**
531
+ * Escape pressed inside the (teleported) calendar panel — close and return
532
+ * focus to the trigger. `preventDefault` + `stopPropagation` keep any outer
533
+ * Escape handling (e.g. a containing dialog) from also firing.
534
+ */
535
+ protected onPanelEscape(event: Event): void;
536
+ /**
537
+ * Focus left the teleported panel. The host `(focusout)` never sees this —
538
+ * the panel lives under `document.body` — so Tab-out of the calendar is
539
+ * handled here: close unless focus moved back into the field or the panel.
540
+ */
541
+ protected onPanelFocusout(event: FocusEvent): void;
542
+ writeValue(value: MkDateRange | null): void;
543
+ registerOnChange(fn: (value: MkDateRange) => void): void;
544
+ registerOnTouched(fn: () => void): void;
545
+ setDisabledState(isDisabled: boolean): void;
546
+ private readonly validatorChange;
547
+ /**
548
+ * Reports `mkDateRangeIncomplete` for a half-picked range, `mkMinDate` /
549
+ * `mkMaxDate` for ends outside `[min]`/`[max]`, and `mkDateFilter` for an
550
+ * end rejected by `[disabledDate]`. A fully empty range passes; compose
551
+ * with `Validators.required` to reject it.
552
+ */
553
+ validate(control: AbstractControl): ValidationErrors | null;
554
+ registerOnValidatorChange(fn: () => void): void;
555
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MkDateRangePicker, never>;
556
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MkDateRangePicker, "mk-date-range-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "disabledDate": { "alias": "disabledDate"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
557
+ }
558
+
559
+ /** Selection granularity for {@link MkMonthPicker}. */
560
+ type MkMonthPickerMode = 'month' | 'year';
561
+ interface Cell {
562
+ label: string;
563
+ /** Year (both modes) and month index (month mode only). */
564
+ year: number;
565
+ month: number;
566
+ disabled: boolean;
567
+ selected: boolean;
568
+ }
569
+ /**
570
+ * MonthPicker — a compact field + popover for picking a **month** (`MMM yyyy`)
571
+ * or a **year**. The panel shows a 12-month grid (with year nav) or a 12-year
572
+ * grid (with decade nav). Value is a `Date` at the first day of the selection.
573
+ * Implements `ControlValueAccessor` + a two-way `value` model; the panel renders
574
+ * in the top layer so it is never clipped.
575
+ *
576
+ * ```html
577
+ * <mk-month-picker [(value)]="month" />
578
+ * <mk-month-picker mode="year" [(value)]="year" />
579
+ * ```
580
+ */
581
+ declare class MkMonthPicker implements ControlValueAccessor, Validator {
582
+ protected readonly i18n: _mk_kit_ui_core.MkI18nStrings;
583
+ private readonly field;
584
+ private readonly host;
585
+ private readonly injector;
586
+ private readonly triggerRef;
587
+ private readonly panelRef;
588
+ private readonly cellRefs;
589
+ /** Two-way selected date (first of the month / year). */
590
+ readonly value: _angular_core.ModelSignal<Date | null>;
591
+ /** Pick a month or a whole year. */
592
+ readonly mode: _angular_core.InputSignal<MkMonthPickerMode>;
593
+ /** Earliest selectable date. */
594
+ readonly min: _angular_core.InputSignal<Date | null>;
595
+ /** Latest selectable date. */
596
+ readonly max: _angular_core.InputSignal<Date | null>;
597
+ /** Placeholder shown when empty. */
598
+ readonly placeholder: _angular_core.InputSignal<string>;
599
+ /** Display pattern (defaults to `MMM yyyy` / `yyyy`). */
600
+ readonly displayFormat: _angular_core.InputSignal<string>;
601
+ /** Disable the control. */
602
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
603
+ /** Show a clear button when a value is selected. */
604
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
605
+ /** Force invalid styling. */
606
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
607
+ /** Control size. Ignored when nested in an `mk-form-field`. */
608
+ readonly size: _angular_core.InputSignal<MkSize>;
609
+ protected readonly open: _angular_core.WritableSignal<boolean>;
610
+ /** The year currently shown in the panel (base for the month/decade grid). */
611
+ protected readonly viewYear: _angular_core.WritableSignal<number>;
612
+ protected readonly activeIndex: _angular_core.WritableSignal<number>;
613
+ private readonly cvaDisabled;
614
+ private onChange;
615
+ private onTouched;
616
+ readonly triggerId: string;
617
+ readonly panelId: string;
618
+ protected readonly effectiveSize: _angular_core.Signal<MkSize>;
619
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
620
+ protected readonly isInvalid: _angular_core.Signal<boolean>;
621
+ protected readonly isRequired: _angular_core.Signal<boolean>;
622
+ protected readonly labelledBy: _angular_core.Signal<string | null>;
623
+ protected readonly describedBy: _angular_core.Signal<string | null>;
624
+ protected readonly resolvedPlaceholder: _angular_core.Signal<string>;
625
+ private readonly pattern;
626
+ protected readonly displayLabel: _angular_core.Signal<string>;
627
+ /** The decade start when in year mode. */
628
+ private readonly decadeStart;
629
+ /** Header label (year, or decade range). */
630
+ protected readonly headerLabel: _angular_core.Signal<string>;
631
+ /** Abbreviated month labels for the grid, from the active locale. */
632
+ private readonly months;
633
+ /** The 12 grid cells (months or years). */
634
+ protected readonly cells: _angular_core.Signal<Cell[]>;
635
+ constructor();
636
+ protected toggle(): void;
637
+ protected openPanel(): void;
638
+ protected close(restoreFocus?: boolean): void;
639
+ protected shiftView(delta: number): void;
640
+ protected selectCell(cell: Cell): void;
641
+ protected clear(event: Event): void;
642
+ protected onGridKeydown(event: KeyboardEvent): void;
643
+ private focusActive;
644
+ protected onFocusOut(event: FocusEvent): void;
645
+ private outOfRange;
646
+ writeValue(value: Date | null): void;
647
+ registerOnChange(fn: (value: Date | null) => void): void;
648
+ registerOnTouched(fn: () => void): void;
649
+ setDisabledState(isDisabled: boolean): void;
650
+ private readonly validatorChange;
651
+ /**
652
+ * Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs,
653
+ * compared at month granularity.
654
+ */
655
+ validate(control: AbstractControl): ValidationErrors | null;
656
+ registerOnValidatorChange(fn: () => void): void;
657
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MkMonthPicker, never>;
658
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MkMonthPicker, "mk-month-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "mode": { "alias": "mode"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
659
+ }
660
+
661
+ /** A selected calendar week (its first and last day, at midnight). */
662
+ interface MkWeek {
663
+ start: Date;
664
+ end: Date;
665
+ }
666
+ /**
667
+ * WeekPicker — pick a whole calendar week from a popover calendar. Hovering a
668
+ * day previews its entire week; clicking selects it. The value is an
669
+ * {@link MkWeek} (`{ start, end }`, aligned to `firstDayOfWeek`). Implements
670
+ * `ControlValueAccessor` and a two-way `value` model; the panel renders in the
671
+ * top layer so it is never clipped.
672
+ *
673
+ * ```html
674
+ * <mk-week-picker [(value)]="week" [firstDayOfWeek]="1" clearable />
675
+ * ```
676
+ */
677
+ declare class MkWeekPicker implements ControlValueAccessor, Validator {
678
+ protected readonly i18n: _mk_kit_ui_core.MkI18nStrings;
679
+ private readonly field;
680
+ private readonly host;
681
+ private readonly injector;
682
+ private readonly triggerRef;
683
+ private readonly panelRef;
684
+ /** Two-way selected week. */
685
+ readonly value: _angular_core.ModelSignal<MkWeek | null>;
686
+ /** Earliest selectable date (inclusive). */
687
+ readonly min: _angular_core.InputSignal<Date | null>;
688
+ /** Latest selectable date (inclusive). */
689
+ readonly max: _angular_core.InputSignal<Date | null>;
690
+ /** First column of the calendar week (0 = Sunday). Also anchors the week. */
691
+ readonly firstDayOfWeek: _angular_core.InputSignalWithTransform<number, unknown>;
692
+ /** Placeholder shown when empty. */
693
+ readonly placeholder: _angular_core.InputSignal<string>;
694
+ /** Pattern used to render each endpoint of the week range. */
695
+ readonly displayFormat: _angular_core.InputSignal<string>;
696
+ /** Prefix the label with the ISO week number, e.g. `W28 · …`. */
697
+ readonly showWeekNumber: _angular_core.InputSignalWithTransform<boolean, unknown>;
698
+ /** Disable the control. */
699
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
700
+ /** Show a clear button when a week is selected. */
701
+ readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
702
+ /** Force invalid styling + `aria-invalid`. */
703
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
704
+ /** Control size. Ignored when nested in an `mk-form-field`. */
705
+ readonly size: _angular_core.InputSignal<MkSize>;
706
+ protected readonly open: _angular_core.WritableSignal<boolean>;
707
+ /** The week currently previewed under the pointer (drives highlighting). */
708
+ private readonly hoverWeek;
709
+ private readonly cvaDisabled;
710
+ private onChange;
711
+ private onTouched;
712
+ readonly triggerId: string;
713
+ readonly panelId: string;
714
+ protected readonly effectiveSize: _angular_core.Signal<MkSize>;
715
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
716
+ protected readonly isInvalid: _angular_core.Signal<boolean>;
717
+ protected readonly isRequired: _angular_core.Signal<boolean>;
718
+ protected readonly labelledBy: _angular_core.Signal<string | null>;
719
+ protected readonly describedBy: _angular_core.Signal<string | null>;
720
+ protected readonly showClear: _angular_core.Signal<boolean>;
721
+ /** The week to highlight: the hovered one while previewing, else the value. */
722
+ protected readonly highlightWeek: _angular_core.Signal<MkWeek | null>;
723
+ /** Display label, e.g. `W28 · Jul 6 – Jul 12, 2026`. */
724
+ protected readonly displayLabel: _angular_core.Signal<string>;
725
+ protected toggle(): void;
726
+ protected openPanel(): void;
727
+ protected close(): void;
728
+ /** A day inside the calendar was activated — select its whole week. */
729
+ protected onPick(date: Date): void;
730
+ /** Preview the hovered day's week. */
731
+ protected onHover(date: Date | null): void;
732
+ protected clear(): void;
733
+ private weekOf;
734
+ /** Reference date the calendar should open on (the selected week's start). */
735
+ protected readonly calendarValue: _angular_core.Signal<Date | null>;
736
+ protected onFocusOut(event: Event): void;
737
+ writeValue(value: MkWeek | null): void;
738
+ registerOnChange(fn: (value: MkWeek | null) => void): void;
739
+ registerOnTouched(fn: () => void): void;
740
+ setDisabledState(isDisabled: boolean): void;
741
+ /** Expose the raw highlight endpoints to the template. */
742
+ protected highlightStart: _angular_core.Signal<Date | null>;
743
+ protected highlightEnd: _angular_core.Signal<Date | null>;
744
+ private readonly validatorChange;
745
+ /**
746
+ * Reports `mkMinDate` / `mkMaxDate` when the selected week starts before
747
+ * `[min]` or ends after `[max]`.
748
+ */
749
+ validate(control: AbstractControl): ValidationErrors | null;
750
+ registerOnValidatorChange(fn: () => void): void;
751
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MkWeekPicker, never>;
752
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MkWeekPicker, "mk-week-picker", never, { "value": { "alias": "value"; "required": false; "isSignal": true; }; "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "placeholder": { "alias": "placeholder"; "required": false; "isSignal": true; }; "displayFormat": { "alias": "displayFormat"; "required": false; "isSignal": true; }; "showWeekNumber": { "alias": "showWeekNumber"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "clearable": { "alias": "clearable"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
753
+ }
754
+
755
+ /** A timed event positioned inside a day column of the time grid. */
756
+ interface MkTimedPlacement {
757
+ event: MkCalendarEvent;
758
+ /** Offset from the top of the grid, percent of the visible hour range. */
759
+ top: number;
760
+ /** Height, percent of the visible hour range (never below ~15 min). */
761
+ height: number;
762
+ /** Column inside the overlap cluster (0-based). */
763
+ lane: number;
764
+ /** Total columns in the overlap cluster — width is `100 / lanes`%. */
765
+ lanes: number;
766
+ }
767
+
768
+ /** The calendar's presentation: month grid, or a timed week/day grid. */
769
+ type MkCalendarView = 'month' | 'week' | 'day';
770
+ /** A single event plotted onto the {@link MkEventCalendar}. */
771
+ interface MkCalendarEvent {
772
+ /**
773
+ * The day the event falls on. Month view places by this alone; in week/day
774
+ * view an event with no `start` renders in the all-day strip.
775
+ */
776
+ date: Date;
777
+ /** Start instant — positions the event on the week/day time grid. */
778
+ start?: Date;
779
+ /** End instant; defaults to 30 minutes after `start`. */
780
+ end?: Date;
781
+ /** Short label shown inside the event pill. */
782
+ title: string;
783
+ /** Optional pill background colour; falls back to `--mk-primary`. */
784
+ color?: string;
785
+ /** Optional caller-supplied identifier, echoed back on `eventClick`. */
786
+ id?: unknown;
787
+ }
788
+ /**
789
+ * Payload of `eventMove` / `eventResize`: the untouched source event plus the
790
+ * would-be new time range. The calendar itself never mutates `events` — the
791
+ * consumer owns the data and applies (or rejects) the change.
792
+ */
793
+ interface MkCalendarEventEdit {
794
+ /** The event that was dragged — the exact object from the `events` input. */
795
+ event: MkCalendarEvent;
796
+ /** New start instant (snapped to `snapMinutes`). */
797
+ start: Date;
798
+ /** New end instant (snapped; never closer than `snapMinutes` to `start`). */
799
+ end: Date;
800
+ }
801
+ /** Weekday column header (short label + full name for the `abbr[title]`). */
802
+ interface MkWeekdayHeader {
803
+ short: string;
804
+ full: string;
805
+ }
806
+ /** Template-facing state of the in-flight edit, driving the pill + outline. */
807
+ interface EditPreviewState {
808
+ event: MkCalendarEvent;
809
+ /** Target column index — the drop outline renders in this column. */
810
+ day: number;
811
+ /** Compositor-friendly lift transform for the dragged pill. */
812
+ transform: string;
813
+ /** Height override (%) while the duration differs, else `null`. */
814
+ heightPct: number | null;
815
+ /** Would-be range shown on the pill, e.g. `09:30 – 10:45`. */
816
+ label: string;
817
+ /** Drop-outline top, percent of the visible hour range. */
818
+ top: number;
819
+ /** Drop-outline height, percent of the visible hour range. */
820
+ outlineHeight: number;
821
+ }
822
+ /** A rendered day cell: its date, classification, and the events on it. */
823
+ interface MkDayCell {
824
+ date: Date;
825
+ outside: boolean;
826
+ today: boolean;
827
+ /** Up to `maxPerDay` events shown as pills. */
828
+ visible: readonly MkCalendarEvent[];
829
+ /** Count beyond `maxPerDay` (0 when nothing is hidden). */
830
+ overflow: number;
831
+ /**
832
+ * Precomputed screen-reader label (see {@link MkEventCalendar#dayLabel}) —
833
+ * formatting it once here keeps `formatDate` out of the per-CD template path
834
+ * for all 42 cells.
835
+ */
836
+ label: string;
837
+ }
838
+ /**
839
+ * Event calendar — a month-grid scheduler view. Renders a 6×7 grid of day
840
+ * cells built from {@link buildMonthMatrix}; each cell lists the events whose
841
+ * `date` falls on that day as coloured pills, capped at `maxPerDay` with a
842
+ * "+N more" line for the remainder.
843
+ *
844
+ * Shares the month-grid rendering, header navigation, and weekday header of
845
+ * `mk-calendar` but is display-only (no date selection). Exposes the viewed
846
+ * month as a two-way `viewDate` model plus `dayClick` / `eventClick` outputs.
847
+ *
848
+ * With `editable`, the week/day time grids additionally support drag-to-move
849
+ * and drag-to-resize (pointer *and* keyboard — WCAG 2.5.7): times snap to
850
+ * `snapMinutes` and the would-be range is emitted via `eventMove` /
851
+ * `eventResize` — the calendar never mutates `events` itself.
852
+ *
853
+ * ```html
854
+ * <mk-event-calendar [events]="events" [(viewDate)]="month"
855
+ * (eventClick)="open($event)" />
856
+ * ```
857
+ */
858
+ declare class MkEventCalendar implements OnDestroy {
859
+ protected readonly i18n: _mk_kit_ui_core.MkI18nStrings;
860
+ private readonly doc;
861
+ private readonly hostEl;
862
+ private readonly announcer;
863
+ /** Events to plot onto the grid. */
864
+ readonly events: _angular_core.InputSignal<readonly MkCalendarEvent[]>;
865
+ /** Two-way month being viewed (any day within it). Defaults to today. */
866
+ readonly viewDate: _angular_core.ModelSignal<Date>;
867
+ /** First column of the week: 0 = Sunday … 6 = Saturday. */
868
+ readonly firstDayOfWeek: _angular_core.InputSignalWithTransform<number, unknown>;
869
+ /** Max event pills per day before collapsing the rest into "+N more". */
870
+ readonly maxPerDay: _angular_core.InputSignalWithTransform<number, unknown>;
871
+ /** Presentation: the classic month grid, or a timed `week`/`day` grid. */
872
+ readonly view: _angular_core.ModelSignal<MkCalendarView>;
873
+ /** First hour shown on the week/day time grid. */
874
+ readonly dayStartHour: _angular_core.InputSignalWithTransform<number, unknown>;
875
+ /** Hour the time grid ends at (exclusive). */
876
+ readonly dayEndHour: _angular_core.InputSignalWithTransform<number, unknown>;
877
+ /**
878
+ * Week/day views: allow rescheduling events by dragging a pill (move) or its
879
+ * bottom edge (resize end time), by pointer or keyboard. Off by default —
880
+ * without it the grid renders exactly as before (no handles, no ARIA
881
+ * additions, no drag behavior).
882
+ */
883
+ readonly editable: _angular_core.InputSignalWithTransform<boolean, unknown>;
884
+ /** Snap grid (minutes) for drag/keyboard edits; also the minimum duration. */
885
+ readonly snapMinutes: _angular_core.InputSignalWithTransform<number, unknown>;
886
+ /** Emitted when a day cell is activated (click / Enter). */
887
+ readonly dayClick: _angular_core.OutputEmitterRef<Date>;
888
+ /**
889
+ * Emitted when an event pill is clicked (does not also fire `dayClick`).
890
+ * Mouse-only convenience: the pills are presentational (`aria-hidden`), so
891
+ * keyboard / screen-reader users reach events via the day button — its label
892
+ * announces the day's events and activating it fires `dayClick`.
893
+ */
894
+ readonly eventClick: _angular_core.OutputEmitterRef<MkCalendarEvent>;
895
+ /** Emitted when the viewed range changes via the prev/next buttons. */
896
+ readonly monthChange: _angular_core.OutputEmitterRef<Date>;
897
+ /** Week/day view: an empty hour slot was clicked — the slot's start instant. */
898
+ readonly slotClick: _angular_core.OutputEmitterRef<Date>;
899
+ /**
900
+ * Editable week/day grid: an event pill was dragged (or keyboard-moved) to a
901
+ * new start time and/or day. Carries the would-be `start`/`end` — the
902
+ * calendar does **not** mutate `events`; the consumer owns the data and
903
+ * applies the change, typically:
904
+ *
905
+ * ```ts
906
+ * onMove = ({ event, start, end }: MkCalendarEventEdit) =>
907
+ * (this.events = this.events.map((e) =>
908
+ * e === event ? { ...e, date: start, start, end } : e,
909
+ * ));
910
+ * ```
911
+ */
912
+ readonly eventMove: _angular_core.OutputEmitterRef<MkCalendarEventEdit>;
913
+ /**
914
+ * Editable week/day grid: the pill's bottom edge was dragged (or
915
+ * Shift+Arrow-resized) — only `end` differs, never below `snapMinutes` of
916
+ * duration. Same consumer-owns-the-data contract as `eventMove`.
917
+ */
918
+ readonly eventResize: _angular_core.OutputEmitterRef<MkCalendarEventEdit>;
919
+ /** id of the visible month/year label — wired as the grid's label. */
920
+ readonly labelId: string;
921
+ /** First day of the visible month. */
922
+ protected readonly viewMonth: _angular_core.Signal<Date>;
923
+ /** Header label — month, day, or week range, matching the active view. */
924
+ protected readonly monthLabel: _angular_core.Signal<string>;
925
+ /** Days of the active time grid: one for `day`, seven for `week`. */
926
+ protected readonly gridDays: _angular_core.Signal<Date[]>;
927
+ /** Hour rows of the time grid. */
928
+ protected readonly hours: _angular_core.Signal<number[]>;
929
+ /**
930
+ * Timed events bucketed by their start's calendar day — a single pass over
931
+ * the events, shared by every column of the week/day grid instead of
932
+ * re-filtering (and re-sorting) the whole array once per day.
933
+ */
934
+ private readonly timedByDay;
935
+ /** Untimed events (all-day strip) bucketed by `date`'s calendar day. */
936
+ private readonly allDayByDay;
937
+ /**
938
+ * Per-day positioned events + all-day strip for the time grid. The column
939
+ * head (`Mon 21`) is precomputed here so the template never calls
940
+ * `formatDate` during change detection.
941
+ */
942
+ protected readonly timedColumns: _angular_core.Signal<{
943
+ day: Date;
944
+ today: boolean;
945
+ head: string;
946
+ placements: MkTimedPlacement[];
947
+ allDay: MkCalendarEvent[];
948
+ }[]>;
949
+ protected hourLabel(hour: number): string;
950
+ protected placementTitle(p: MkTimedPlacement): string;
951
+ protected onSlotClick(day: Date, hour: number): void;
952
+ /** Template-facing state of the in-flight edit (`null` when idle). */
953
+ protected readonly editPreview: _angular_core.WritableSignal<EditPreviewState | null>;
954
+ /** The active pointer gesture, if any (only one at a time). */
955
+ private pointerSession;
956
+ /** The active keyboard "move mode" session, if any. */
957
+ private kbSession;
958
+ /** Pending rAF id for the coalesced pointer-move pass. */
959
+ private editRaf;
960
+ private pendingX;
961
+ private pendingY;
962
+ /** Set after a real drag so the trailing synthetic click never fires `eventClick`. */
963
+ private swallowNextClick;
964
+ private readonly pointerMoveHandler;
965
+ private readonly pointerUpHandler;
966
+ private readonly pointerCancelHandler;
967
+ /** Escape aborts an in-flight pointer drag (document-level while dragging). */
968
+ private readonly escHandler;
969
+ /**
970
+ * `touch-action: pan-y` keeps native scrolling alive while the long-press is
971
+ * pending, so once armed the drag must eat `touchmove` itself
972
+ * (`passive: false` — same pattern as `MkDrag`).
973
+ */
974
+ private readonly touchMoveEater;
975
+ /** Android fires `contextmenu` on long-press — keep it off the gesture. */
976
+ private readonly contextMenuHandler;
977
+ protected onBlockPointerDown(event: Event, p: MkTimedPlacement, colIndex: number): void;
978
+ /** The long-press delay elapsed with the finger still down — arm the drag. */
979
+ private armTouch;
980
+ private onEditPointerMove;
981
+ /**
982
+ * The drag crossed the threshold — snapshot geometry once (column rects and
983
+ * the px↔minute scale); every subsequent move works off this cache, so a
984
+ * drag never forces layout.
985
+ */
986
+ private beginEdit;
987
+ /** Per-frame move pass: snap, clamp, and publish the preview signal. */
988
+ private applyPendingEdit;
989
+ /** Column index under `x`, from the rects snapshotted at lift. */
990
+ private columnAt;
991
+ private onEditPointerUp;
992
+ /** Escape / pointercancel: the pill snaps back, nothing is emitted. */
993
+ private abortPointerEdit;
994
+ /** Undo everything `onBlockPointerDown`/`beginEdit` set up. */
995
+ private teardownPointer;
996
+ protected onBlockKeydown(event: Event, p: MkTimedPlacement, colIndex: number): void;
997
+ /** Losing focus mid-move cancels the keyboard edit (no stuck state). */
998
+ protected onBlockBlur(): void;
999
+ private armKeyboard;
1000
+ private commitKeyboard;
1001
+ private cancelKeyboard;
1002
+ /**
1003
+ * Emit the edited range (if anything actually changed): `eventResize` when
1004
+ * only the end moved, `eventMove` otherwise. The `events` input is never
1005
+ * touched — applying the change is the consumer's job.
1006
+ */
1007
+ private commitEdit;
1008
+ /** Publish the session's current target as template-facing preview state. */
1009
+ private updatePreview;
1010
+ private announceCancelled;
1011
+ /** Position update after each keyboard step. */
1012
+ private announceStep;
1013
+ /** Is this placement the pill currently being edited? */
1014
+ protected isEditing(p: MkTimedPlacement): boolean;
1015
+ /** Lift transform for the dragged pill (`null` when idle). */
1016
+ protected blockTransform(p: MkTimedPlacement): string | null;
1017
+ /** Height (%) — the resize preview overrides the layout's height. */
1018
+ protected blockHeight(p: MkTimedPlacement): number;
1019
+ /** Would-be time range shown on the pill while it is being edited. */
1020
+ protected dragLabelFor(p: MkTimedPlacement): string | null;
1021
+ /** Drop-outline geometry when the edit currently targets column `i`. */
1022
+ protected dropOutlineFor(i: number): EditPreviewState | null;
1023
+ /**
1024
+ * Accessible name for an editable pill — the title plus its time range
1025
+ * (composed with, not replacing, the visible title text and tooltip).
1026
+ */
1027
+ protected blockAriaLabel(p: MkTimedPlacement): string;
1028
+ /** `aria-roledescription` for editable pills. */
1029
+ protected readonly movableRoledescription: string;
1030
+ ngOnDestroy(): void;
1031
+ /** Raw 6×7 grid of dates for the visible month. */
1032
+ private readonly weeks;
1033
+ /** Weekday column headers ordered from `firstDayOfWeek`. */
1034
+ protected readonly weekdays: _angular_core.Signal<MkWeekdayHeader[]>;
1035
+ /** Events grouped by local calendar day, keyed by `startOfDay` timestamp. */
1036
+ private readonly eventsByDay;
1037
+ /** 6×7 grid of day cells with their (capped) events resolved. */
1038
+ protected readonly weekCells: _angular_core.Signal<MkDayCell[][]>;
1039
+ /**
1040
+ * Screen-reader label for a day cell. The button's `aria-label` replaces its
1041
+ * visual content, so the label also announces the day's events — count plus
1042
+ * up to three titles — e.g. `July 9, 2026, 2 events: Standup, Demo`.
1043
+ * Precomputed into {@link MkDayCell#label} by `weekCells`.
1044
+ */
1045
+ protected dayLabel(cell: Omit<MkDayCell, 'label'>): string;
1046
+ protected prevMonth(): void;
1047
+ protected nextMonth(): void;
1048
+ private shiftMonth;
1049
+ protected onDayClick(d: Date): void;
1050
+ protected onEventClick(event: Event, calendarEvent: MkCalendarEvent): void;
1051
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MkEventCalendar, never>;
1052
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MkEventCalendar, "mk-event-calendar", never, { "events": { "alias": "events"; "required": false; "isSignal": true; }; "viewDate": { "alias": "viewDate"; "required": false; "isSignal": true; }; "firstDayOfWeek": { "alias": "firstDayOfWeek"; "required": false; "isSignal": true; }; "maxPerDay": { "alias": "maxPerDay"; "required": false; "isSignal": true; }; "view": { "alias": "view"; "required": false; "isSignal": true; }; "dayStartHour": { "alias": "dayStartHour"; "required": false; "isSignal": true; }; "dayEndHour": { "alias": "dayEndHour"; "required": false; "isSignal": true; }; "editable": { "alias": "editable"; "required": false; "isSignal": true; }; "snapMinutes": { "alias": "snapMinutes"; "required": false; "isSignal": true; }; }, { "viewDate": "viewDateChange"; "view": "viewChange"; "dayClick": "dayClick"; "eventClick": "eventClick"; "monthChange": "monthChange"; "slotClick": "slotClick"; "eventMove": "eventMove"; "eventResize": "eventResize"; }, never, never, true, never>;
1053
+ }
1054
+
1055
+ /** Which segment a part represents. */
1056
+ type MkDateSegment = 'day' | 'month' | 'year';
1057
+ /** Segment display order. */
1058
+ type MkMiniDateOrder = 'dmy' | 'mdy' | 'ymd';
1059
+ /** A rendered segment descriptor (view-model for one spinbutton). */
1060
+ interface MkDatePart {
1061
+ key: MkDateSegment;
1062
+ /** Text shown in the segment, or the placeholder when empty. */
1063
+ display: string;
1064
+ /** Whether the segment currently holds a value. */
1065
+ filled: boolean;
1066
+ valueNow: number | null;
1067
+ valueMin: number;
1068
+ valueMax: number;
1069
+ valueText: string;
1070
+ label: string;
1071
+ }
1072
+ /**
1073
+ * MiniDate — a compact, popover-free inline date editor with segmented
1074
+ * day / month / year spin fields (like a native `<input type="date">` but
1075
+ * themed and signal-driven). Each segment is an ARIA `spinbutton`: Arrow
1076
+ * Up/Down step the value (day wraps within the month), Home/End jump to the
1077
+ * segment's minimum/maximum, Arrow Left/Right move between segments, and
1078
+ * typing digits fills the focused segment and auto-advances (OTP-style). Implements `ControlValueAccessor` and a two-way
1079
+ * `value` model over a real `Date | null`.
1080
+ *
1081
+ * A non-null `Date` is emitted only when all three segments are set and valid;
1082
+ * the day is clamped to the month's length (e.g. Feb 31 → 28/29) and the
1083
+ * result is clamped to `[min, max]`.
1084
+ *
1085
+ * ```html
1086
+ * <mk-mini-date [(value)]="date" order="dmy" [min]="minDate" />
1087
+ * ```
1088
+ */
1089
+ declare class MkMiniDate implements ControlValueAccessor, Validator {
1090
+ private readonly field;
1091
+ protected readonly i18n: _mk_kit_ui_core.MkI18nStrings;
1092
+ private readonly segEls;
1093
+ /** Minimum selectable date (inclusive). */
1094
+ readonly min: _angular_core.InputSignal<Date | null>;
1095
+ /** Maximum selectable date (inclusive). */
1096
+ readonly max: _angular_core.InputSignal<Date | null>;
1097
+ /** Two-way value — a real `Date`, or `null` while incomplete. */
1098
+ readonly value: _angular_core.ModelSignal<Date | null>;
1099
+ /** Disable the control. */
1100
+ readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
1101
+ /** Force invalid styling when standalone. */
1102
+ readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
1103
+ /** Control size. Ignored inside an `mk-form-field`. */
1104
+ readonly size: _angular_core.InputSignal<MkSize>;
1105
+ /** Segment order. */
1106
+ readonly order: _angular_core.InputSignal<MkMiniDateOrder>;
1107
+ /** Lowest selectable year (for the year spinbutton range). */
1108
+ readonly yearMin: _angular_core.InputSignalWithTransform<number, unknown>;
1109
+ /** Highest selectable year (for the year spinbutton range). */
1110
+ readonly yearMax: _angular_core.InputSignalWithTransform<number, unknown>;
1111
+ readonly segId: string;
1112
+ private readonly daySeg;
1113
+ private readonly monthSeg;
1114
+ private readonly yearSeg;
1115
+ /** Per-segment digit buffer used for OTP-style typing/auto-advance. */
1116
+ private buffer;
1117
+ private bufferKey;
1118
+ private readonly cvaDisabled;
1119
+ private onChange;
1120
+ private onTouched;
1121
+ protected readonly effectiveSize: _angular_core.Signal<MkSize>;
1122
+ protected readonly isDisabled: _angular_core.Signal<boolean>;
1123
+ protected readonly isInvalid: _angular_core.Signal<boolean>;
1124
+ protected readonly isRequired: _angular_core.Signal<boolean>;
1125
+ protected readonly labelledBy: _angular_core.Signal<string | null>;
1126
+ protected readonly describedBy: _angular_core.Signal<string | null>;
1127
+ /** Days available in the current month/year (defaults to a leap year). */
1128
+ private readonly monthLength;
1129
+ /** Ordered, rendered segment descriptors. */
1130
+ protected readonly parts: _angular_core.Signal<MkDatePart[]>;
1131
+ protected onSegKeydown(key: MkDateSegment, index: number, e: KeyboardEvent): void;
1132
+ protected onSegFocus(key: MkDateSegment): void;
1133
+ protected onBlur(): void;
1134
+ /** A segment's minimum value (Home key). */
1135
+ private segMin;
1136
+ /** A segment's maximum value (End key). */
1137
+ private segMax;
1138
+ /** Step a segment by `delta`; the day wraps within the current month. */
1139
+ protected step(key: MkDateSegment, delta: number): void;
1140
+ /** OTP-style digit entry with auto-advance to the next segment when full. */
1141
+ private typeDigit;
1142
+ /** Set a segment, then rebuild + emit the composite date. */
1143
+ protected setSegment(key: MkDateSegment, value: number | null): void;
1144
+ /**
1145
+ * Rebuild the `Date` from the three segments and emit it. Emits `null` unless
1146
+ * all three are set; clamps the day to the month length and the whole date to
1147
+ * `[min, max]`, writing any clamp back into the segments.
1148
+ */
1149
+ private recompute;
1150
+ private emit;
1151
+ /** Populate the three segments from a `Date`. */
1152
+ private split;
1153
+ private resetBuffer;
1154
+ private focusSeg;
1155
+ private pad;
1156
+ writeValue(value: Date | null): void;
1157
+ registerOnChange(fn: (value: Date | null) => void): void;
1158
+ registerOnTouched(fn: () => void): void;
1159
+ setDisabledState(isDisabled: boolean): void;
1160
+ private readonly validatorChange;
1161
+ /**
1162
+ * Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs.
1163
+ */
1164
+ validate(control: AbstractControl): ValidationErrors | null;
1165
+ registerOnValidatorChange(fn: () => void): void;
1166
+ static ɵfac: _angular_core.ɵɵFactoryDeclaration<MkMiniDate, never>;
1167
+ static ɵcmp: _angular_core.ɵɵComponentDeclaration<MkMiniDate, "mk-mini-date", ["mkMiniDate"], { "min": { "alias": "min"; "required": false; "isSignal": true; }; "max": { "alias": "max"; "required": false; "isSignal": true; }; "value": { "alias": "value"; "required": false; "isSignal": true; }; "disabled": { "alias": "disabled"; "required": false; "isSignal": true; }; "invalid": { "alias": "invalid"; "required": false; "isSignal": true; }; "size": { "alias": "size"; "required": false; "isSignal": true; }; "order": { "alias": "order"; "required": false; "isSignal": true; }; "yearMin": { "alias": "yearMin"; "required": false; "isSignal": true; }; "yearMax": { "alias": "yearMax"; "required": false; "isSignal": true; }; }, { "value": "valueChange"; }, never, never, true, never>;
1168
+ }
1169
+
1170
+ export { MkCalendar, MkDatePicker, MkDateRangePicker, MkEventCalendar, MkMiniDate, MkMonthPicker, MkTimePicker, MkWeekPicker, addDays, addMonths, buildMonthMatrix, clampDate, endOfMonth, endOfWeek, formatDate, formatISODate, getISOWeek, getMonthNames, getWeekdayFullName, getWeekdayNames, isAfter, isBefore, isSameDay, isSameMonth, parseISODate, startOfDay, startOfMonth, startOfWeek };
1171
+ export type { MkCalendarEvent, MkCalendarEventEdit, MkCalendarView, MkDateRange, MkMiniDateOrder, MkMonthPickerMode, MkWeek, MkWeekday };