@mk-kit/ui 0.34.1 → 0.36.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.
- package/README.md +8 -7
- package/THIRD_PARTY_NOTICES.md +28 -0
- package/fesm2022/mk-kit-ui-core.mjs +164 -6
- package/fesm2022/mk-kit-ui-core.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-datetime.mjs +566 -21
- package/fesm2022/mk-kit-ui-datetime.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-feedback.mjs +4 -4
- package/fesm2022/mk-kit-ui-feedback.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-forms.mjs +7 -7
- package/fesm2022/mk-kit-ui-forms.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-icon.mjs +444 -117
- package/fesm2022/mk-kit-ui-icon.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-layout.mjs +401 -0
- package/fesm2022/mk-kit-ui-layout.mjs.map +1 -0
- package/fesm2022/mk-kit-ui-navigation.mjs +288 -19
- package/fesm2022/mk-kit-ui-navigation.mjs.map +1 -1
- package/fesm2022/mk-kit-ui-table.mjs +271 -19
- package/fesm2022/mk-kit-ui-table.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/styles/mk-kit.css +16 -0
- package/types/mk-kit-ui-core.d.ts +85 -5
- package/types/mk-kit-ui-datetime.d.ts +163 -6
- package/types/mk-kit-ui-icon.d.ts +6 -2
- package/types/mk-kit-ui-layout.d.ts +236 -0
- package/types/mk-kit-ui-navigation.d.ts +172 -40
- package/types/mk-kit-ui-table.d.ts +133 -5
- package/types/mk-kit-ui.d.ts +1 -0
package/fesm2022/mk-kit-ui.mjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mk-kit-ui.mjs","sources":["../../../projects/mk-kit/src/public-api.ts","../../../projects/mk-kit/src/mk-kit-ui.ts"],"sourcesContent":["/*\n * Public API Surface of @mk-kit/ui.\n *\n * The library ships Material-style secondary entry points — import from the\n * group entries (`@mk-kit/ui/forms`, `@mk-kit/ui/table`, …) so a code-split\n * app only carries the groups each chunk uses. This root entry re-exports\n * everything for convenience; importing it eagerly pulls all groups into the\n * importing chunk.\n */\nexport * from '@mk-kit/ui/core';\nexport * from '@mk-kit/ui/icon';\nexport * from '@mk-kit/ui/chip';\nexport * from '@mk-kit/ui/checkbox';\nexport * from '@mk-kit/ui/button';\nexport * from '@mk-kit/ui/directives';\nexport * from '@mk-kit/ui/dnd';\nexport * from '@mk-kit/ui/navigation';\nexport * from '@mk-kit/ui/forms';\nexport * from '@mk-kit/ui/datetime';\nexport * from '@mk-kit/ui/table';\nexport * from '@mk-kit/ui/data';\nexport * from '@mk-kit/ui/feedback';\nexport * from '@mk-kit/ui/rich-text';\nexport * from '@mk-kit/ui/block-editor';\nexport * from '@mk-kit/ui/context-menu';\nexport * from '@mk-kit/ui/media';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"mk-kit-ui.mjs","sources":["../../../projects/mk-kit/src/public-api.ts","../../../projects/mk-kit/src/mk-kit-ui.ts"],"sourcesContent":["/*\n * Public API Surface of @mk-kit/ui.\n *\n * The library ships Material-style secondary entry points — import from the\n * group entries (`@mk-kit/ui/forms`, `@mk-kit/ui/table`, …) so a code-split\n * app only carries the groups each chunk uses. This root entry re-exports\n * everything for convenience; importing it eagerly pulls all groups into the\n * importing chunk.\n */\nexport * from '@mk-kit/ui/core';\nexport * from '@mk-kit/ui/icon';\nexport * from '@mk-kit/ui/chip';\nexport * from '@mk-kit/ui/checkbox';\nexport * from '@mk-kit/ui/button';\nexport * from '@mk-kit/ui/directives';\nexport * from '@mk-kit/ui/dnd';\nexport * from '@mk-kit/ui/navigation';\nexport * from '@mk-kit/ui/forms';\nexport * from '@mk-kit/ui/datetime';\nexport * from '@mk-kit/ui/table';\nexport * from '@mk-kit/ui/data';\nexport * from '@mk-kit/ui/feedback';\nexport * from '@mk-kit/ui/rich-text';\nexport * from '@mk-kit/ui/block-editor';\nexport * from '@mk-kit/ui/context-menu';\nexport * from '@mk-kit/ui/layout';\nexport * from '@mk-kit/ui/media';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;AAQG;;ACRH;;AAEG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mk-kit/ui",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.36.0",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -107,6 +107,10 @@
|
|
|
107
107
|
"types": "./types/mk-kit-ui-icon.d.ts",
|
|
108
108
|
"default": "./fesm2022/mk-kit-ui-icon.mjs"
|
|
109
109
|
},
|
|
110
|
+
"./layout": {
|
|
111
|
+
"types": "./types/mk-kit-ui-layout.d.ts",
|
|
112
|
+
"default": "./fesm2022/mk-kit-ui-layout.mjs"
|
|
113
|
+
},
|
|
110
114
|
"./media": {
|
|
111
115
|
"types": "./types/mk-kit-ui-media.d.ts",
|
|
112
116
|
"default": "./fesm2022/mk-kit-ui-media.mjs"
|
package/styles/mk-kit.css
CHANGED
|
@@ -381,6 +381,22 @@ body.mk-app {
|
|
|
381
381
|
border: 0;
|
|
382
382
|
}
|
|
383
383
|
|
|
384
|
+
/* Print helpers: `.mk-print-hidden` drops page chrome (toolbars, filters)
|
|
385
|
+
from paper; `.mk-print-only` shows something (a title, a date) only there.
|
|
386
|
+
Components ship their own `@media print` rules — mk-table prints as one
|
|
387
|
+
unbroken sheet with repeating headers and no controls. */
|
|
388
|
+
.mk-print-only {
|
|
389
|
+
display: none;
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
@media print {
|
|
393
|
+
.mk-print-hidden {
|
|
394
|
+
display: none !important;
|
|
395
|
+
}
|
|
396
|
+
.mk-print-only {
|
|
397
|
+
display: revert;
|
|
398
|
+
}
|
|
399
|
+
}
|
|
384
400
|
/* mk-drag-handle — the grip a pointer drag must start on. MkDragHandle is a
|
|
385
401
|
* DIRECTIVE (so it composes onto any element, including other components'
|
|
386
402
|
* hosts like mk-icon), and directives cannot carry styles — hence the global
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as _angular_core from '@angular/core';
|
|
2
|
-
import { InjectionToken, ComponentRef, Injector,
|
|
2
|
+
import { InjectionToken, OnDestroy, Signal, ComponentRef, Injector, Type, AfterViewInit, ElementRef, Provider } from '@angular/core';
|
|
3
3
|
import { Observable } from 'rxjs';
|
|
4
4
|
import { ValidationErrors } from '@angular/forms';
|
|
5
5
|
|
|
@@ -15,7 +15,7 @@ type MkThemePreference = 'light' | 'dark' | 'system';
|
|
|
15
15
|
/** Concrete resolved theme (never `system`). */
|
|
16
16
|
type MkResolvedTheme = 'light' | 'dark';
|
|
17
17
|
/** Common placement values for overlays (menus, tooltips, popovers). */
|
|
18
|
-
type MkPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'right';
|
|
18
|
+
type MkPlacement = 'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end';
|
|
19
19
|
|
|
20
20
|
/**
|
|
21
21
|
* Global control-density mode.
|
|
@@ -84,6 +84,67 @@ declare class MkThemeService {
|
|
|
84
84
|
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MkThemeService>;
|
|
85
85
|
}
|
|
86
86
|
|
|
87
|
+
/** Named viewport ranges, mobile-first: each starts at its min-width. */
|
|
88
|
+
type MkBreakpoint = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';
|
|
89
|
+
/** Min-widths (px) at which each named breakpoint begins; `xs` is everything below `sm`. */
|
|
90
|
+
type MkBreakpoints = Record<Exclude<MkBreakpoint, 'xs'>, number>;
|
|
91
|
+
/** The default scale (same numbers as Tailwind, so mental models transfer). */
|
|
92
|
+
declare const MK_DEFAULT_BREAKPOINTS: MkBreakpoints;
|
|
93
|
+
/** Override the breakpoint scale app-wide: `{ provide: MK_BREAKPOINTS, useValue: { …, lg: 1100 } }`. */
|
|
94
|
+
declare const MK_BREAKPOINTS: InjectionToken<MkBreakpoints>;
|
|
95
|
+
/**
|
|
96
|
+
* A value that may differ per breakpoint: either the plain value or a
|
|
97
|
+
* mobile-first map, `{ xs: 1, md: 2, xl: 4 }`, where each key applies from
|
|
98
|
+
* that breakpoint up until the next key given.
|
|
99
|
+
*/
|
|
100
|
+
type MkResponsive<T> = T | Partial<Record<MkBreakpoint, T>>;
|
|
101
|
+
/** True when `value` is a per-breakpoint map rather than a plain value. */
|
|
102
|
+
declare function mkIsResponsive<T>(value: MkResponsive<T>): value is Partial<Record<MkBreakpoint, T>>;
|
|
103
|
+
/**
|
|
104
|
+
* Reactive viewport breakpoints, one `matchMedia` listener per step.
|
|
105
|
+
*
|
|
106
|
+
* ```ts
|
|
107
|
+
* private readonly bp = inject(MkBreakpointService);
|
|
108
|
+
* readonly compact = this.bp.down('md'); // Signal<boolean>
|
|
109
|
+
* readonly columns = computed(() => this.bp.resolve({ xs: 1, md: 2, xl: 4 }));
|
|
110
|
+
* ```
|
|
111
|
+
*
|
|
112
|
+
* On the server (no `window`) everything reports `xs`.
|
|
113
|
+
*/
|
|
114
|
+
declare class MkBreakpointService implements OnDestroy {
|
|
115
|
+
/** The breakpoint scale in effect (see {@link MK_BREAKPOINTS}). */
|
|
116
|
+
readonly breakpoints: MkBreakpoints;
|
|
117
|
+
private readonly document;
|
|
118
|
+
private readonly isBrowser;
|
|
119
|
+
/** `matches` per step, in scale order (`sm` first). */
|
|
120
|
+
private readonly steps;
|
|
121
|
+
private readonly cleanup;
|
|
122
|
+
private readonly queries;
|
|
123
|
+
private readonly ups;
|
|
124
|
+
private readonly downs;
|
|
125
|
+
/** The widest breakpoint the viewport currently satisfies. */
|
|
126
|
+
readonly current: Signal<MkBreakpoint>;
|
|
127
|
+
constructor();
|
|
128
|
+
/** True while the viewport is at least `bp` wide (`up('md')` = md, lg, xl, 2xl). */
|
|
129
|
+
up(bp: MkBreakpoint): Signal<boolean>;
|
|
130
|
+
/** True while the viewport is narrower than `bp` (`down('md')` = xs, sm). */
|
|
131
|
+
down(bp: MkBreakpoint): Signal<boolean>;
|
|
132
|
+
/** True while the viewport is at least `from` and narrower than `to`. */
|
|
133
|
+
between(from: MkBreakpoint, to: MkBreakpoint): Signal<boolean>;
|
|
134
|
+
/** Any media query as a signal, e.g. `observe('(orientation: portrait)')`. */
|
|
135
|
+
observe(query: string): Signal<boolean>;
|
|
136
|
+
/**
|
|
137
|
+
* Pick the entry of a responsive value for the current viewport —
|
|
138
|
+
* mobile-first, so `{ xs: 1, md: 2 }` gives 1 on `sm` and 2 on `xl`.
|
|
139
|
+
* A plain value is returned as is. Read inside a `computed` to track it.
|
|
140
|
+
*/
|
|
141
|
+
resolve<T>(value: MkResponsive<T>): T | undefined;
|
|
142
|
+
ngOnDestroy(): void;
|
|
143
|
+
private watch;
|
|
144
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MkBreakpointService, never>;
|
|
145
|
+
static ɵprov: _angular_core.ɵɵInjectableDeclaration<MkBreakpointService>;
|
|
146
|
+
}
|
|
147
|
+
|
|
87
148
|
type MkAriaLivePoliteness = 'polite' | 'assertive';
|
|
88
149
|
/**
|
|
89
150
|
* Announces messages to assistive technology via a visually-hidden
|
|
@@ -339,6 +400,12 @@ declare class MkAnchoredPanel implements AfterViewInit, OnDestroy {
|
|
|
339
400
|
readonly flip: _angular_core.InputSignal<boolean>;
|
|
340
401
|
/** Clamp the panel inside the viewport. */
|
|
341
402
|
readonly clamp: _angular_core.InputSignal<boolean>;
|
|
403
|
+
/**
|
|
404
|
+
* Predicate consulted before an outside pointerdown dismisses the panel.
|
|
405
|
+
* Return `true` for targets that must keep it open — e.g. a nested panel
|
|
406
|
+
* (a submenu) that lives in the top layer outside this element.
|
|
407
|
+
*/
|
|
408
|
+
readonly keepOpenWhen: _angular_core.InputSignal<((target: Node) => boolean) | null>;
|
|
342
409
|
/** Emitted on an outside pointerdown or when the window loses focus. */
|
|
343
410
|
readonly dismiss: _angular_core.OutputEmitterRef<void>;
|
|
344
411
|
private popover;
|
|
@@ -371,7 +438,7 @@ declare class MkAnchoredPanel implements AfterViewInit, OnDestroy {
|
|
|
371
438
|
private resolveAnchorRect;
|
|
372
439
|
ngOnDestroy(): void;
|
|
373
440
|
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MkAnchoredPanel, never>;
|
|
374
|
-
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MkAnchoredPanel, "[mkAnchoredPanel]", ["mkAnchoredPanel"], { "anchor": { "alias": "mkAnchoredPanelFor"; "required": false; "isSignal": true; }; "anchorRect": { "alias": "anchorRect"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "matchWidth": { "alias": "matchWidth"; "required": false; "isSignal": true; }; "flip": { "alias": "flip"; "required": false; "isSignal": true; }; "clamp": { "alias": "clamp"; "required": false; "isSignal": true; }; }, { "dismiss": "dismiss"; }, never, never, true, never>;
|
|
441
|
+
static ɵdir: _angular_core.ɵɵDirectiveDeclaration<MkAnchoredPanel, "[mkAnchoredPanel]", ["mkAnchoredPanel"], { "anchor": { "alias": "mkAnchoredPanelFor"; "required": false; "isSignal": true; }; "anchorRect": { "alias": "anchorRect"; "required": false; "isSignal": true; }; "placement": { "alias": "placement"; "required": false; "isSignal": true; }; "gap": { "alias": "gap"; "required": false; "isSignal": true; }; "matchWidth": { "alias": "matchWidth"; "required": false; "isSignal": true; }; "flip": { "alias": "flip"; "required": false; "isSignal": true; }; "clamp": { "alias": "clamp"; "required": false; "isSignal": true; }; "keepOpenWhen": { "alias": "keepOpenWhen"; "required": false; "isSignal": true; }; }, { "dismiss": "dismiss"; }, never, never, true, never>;
|
|
375
442
|
}
|
|
376
443
|
|
|
377
444
|
/** Direction passed to the sort announcer. */
|
|
@@ -740,6 +807,16 @@ interface MkI18nStrings {
|
|
|
740
807
|
chooseWeek: string;
|
|
741
808
|
openCalendar: string;
|
|
742
809
|
openTimeList: string;
|
|
810
|
+
/** Accessible name of the chevron segment of `mk-split-button`. */
|
|
811
|
+
moreActions: string;
|
|
812
|
+
/** Placeholder of `mk-datetime-picker`. */
|
|
813
|
+
selectDateTime: string;
|
|
814
|
+
/** Dialog label of the `mk-datetime-picker` panel. */
|
|
815
|
+
chooseDateTime: string;
|
|
816
|
+
/** Listbox label of the time list inside `mk-datetime-picker`. */
|
|
817
|
+
chooseTime: string;
|
|
818
|
+
/** Toggle-button label of `mk-datetime-picker`. */
|
|
819
|
+
openDateTimePicker: string;
|
|
743
820
|
/** Mini-date segment names. */
|
|
744
821
|
daySegment: string;
|
|
745
822
|
monthSegment: string;
|
|
@@ -764,6 +841,9 @@ interface MkI18nStrings {
|
|
|
764
841
|
/** Row expander toggle labels. */
|
|
765
842
|
expandRow: string;
|
|
766
843
|
collapseRow: string;
|
|
844
|
+
/** Tree-row toggle labels (`childrenKey`). */
|
|
845
|
+
expandTreeRow: string;
|
|
846
|
+
collapseTreeRow: string;
|
|
767
847
|
/** aria-label of a group header's toggle when the group is collapsed. */
|
|
768
848
|
expandGroup: string;
|
|
769
849
|
/** aria-label of a group header's toggle when the group is expanded. */
|
|
@@ -1101,5 +1181,5 @@ type MkErrorMessages = Readonly<Record<string, string | ((err: any) => string)>>
|
|
|
1101
1181
|
*/
|
|
1102
1182
|
declare function mkFirstErrorMessage(errors: ValidationErrors | null | undefined, strings: MkValidationStrings, overrides?: MkErrorMessages): string | null;
|
|
1103
1183
|
|
|
1104
|
-
export { MK_DEFAULT_DATE_NAMES, MK_DEFAULT_I18N, MK_DEFAULT_VALIDATION, MK_I18N, MK_OVERLAY_DATA, MkAnchoredPanel, MkFieldContext, MkFocusTrap, MkLiveAnnouncer, MkOverlayRef, MkOverlayService, MkThemeService, mkComputeAnchoredPosition, mkFirstErrorMessage, mkGetFocusable, mkHighlight, mkHighlightJson, mkUniqueId, mkValidatorChange, provideMkI18n };
|
|
1105
|
-
export type { MkAnchoredPosition, MkAnchoredPositionOptions, MkAriaLivePoliteness, MkBlockEditorStrings, MkCodeLanguage, MkDateNames, MkDensity, MkErrorMessages, MkI18nStrings, MkOverlayConfig, MkPlacement, MkResolvedTheme, MkSize$1 as MkSize, MkSortAnnounceDirection, MkThemePreference, MkTone, MkValidationStrings, MkValidatorChangeRef, MkVariant };
|
|
1184
|
+
export { MK_BREAKPOINTS, MK_DEFAULT_BREAKPOINTS, MK_DEFAULT_DATE_NAMES, MK_DEFAULT_I18N, MK_DEFAULT_VALIDATION, MK_I18N, MK_OVERLAY_DATA, MkAnchoredPanel, MkBreakpointService, MkFieldContext, MkFocusTrap, MkLiveAnnouncer, MkOverlayRef, MkOverlayService, MkThemeService, mkComputeAnchoredPosition, mkFirstErrorMessage, mkGetFocusable, mkHighlight, mkHighlightJson, mkIsResponsive, mkUniqueId, mkValidatorChange, provideMkI18n };
|
|
1185
|
+
export type { MkAnchoredPosition, MkAnchoredPositionOptions, MkAriaLivePoliteness, MkBlockEditorStrings, MkBreakpoint, MkBreakpoints, MkCodeLanguage, MkDateNames, MkDensity, MkErrorMessages, MkI18nStrings, MkOverlayConfig, MkPlacement, MkResolvedTheme, MkResponsive, MkSize$1 as MkSize, MkSortAnnounceDirection, MkThemePreference, MkTone, MkValidationStrings, MkValidatorChangeRef, MkVariant };
|
|
@@ -53,9 +53,11 @@ declare function parseISODate(value: string | null | undefined): Date | null;
|
|
|
53
53
|
/**
|
|
54
54
|
* Format `date` using a small pattern set. Supported tokens:
|
|
55
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
|
-
*
|
|
58
|
-
*
|
|
56
|
+
* `MM` (2-digit month), `dd` (2-digit day), `d` (day), `ddd` (short weekday),
|
|
57
|
+
* `HH` / `H` (24-hour, padded / bare), `hh` / `h` (12-hour, padded / bare),
|
|
58
|
+
* `mm` (2-digit minutes) and `a` (`AM` / `PM`). Longer tokens are matched
|
|
59
|
+
* first so `MMMM` wins over `MM`. Month/weekday names come from `names` when
|
|
60
|
+
* given, else English.
|
|
59
61
|
*/
|
|
60
62
|
declare function formatDate(date: Date, pattern: string, names?: MkDateNames): string;
|
|
61
63
|
/**
|
|
@@ -313,7 +315,7 @@ declare class MkDatePicker implements ControlValueAccessor, Validator {
|
|
|
313
315
|
}
|
|
314
316
|
|
|
315
317
|
/** A selectable time option. */
|
|
316
|
-
interface MkTimeOption {
|
|
318
|
+
interface MkTimeOption$1 {
|
|
317
319
|
/** Canonical `HH:mm` (24h) value. */
|
|
318
320
|
value: string;
|
|
319
321
|
/** Display label (respects `hour12`). */
|
|
@@ -401,7 +403,7 @@ declare class MkTimePicker implements ControlValueAccessor, Validator {
|
|
|
401
403
|
protected readonly describedBy: _angular_core.Signal<string | null>;
|
|
402
404
|
protected readonly showClear: _angular_core.Signal<boolean>;
|
|
403
405
|
/** Generated, min/max-filtered list of selectable times. */
|
|
404
|
-
protected readonly options: _angular_core.Signal<MkTimeOption[]>;
|
|
406
|
+
protected readonly options: _angular_core.Signal<MkTimeOption$1[]>;
|
|
405
407
|
protected readonly selectedIndex: _angular_core.Signal<number>;
|
|
406
408
|
constructor();
|
|
407
409
|
protected optionId(index: number): string;
|
|
@@ -454,6 +456,161 @@ declare class MkTimePicker implements ControlValueAccessor, Validator {
|
|
|
454
456
|
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
457
|
}
|
|
456
458
|
|
|
459
|
+
/** A selectable time-of-day option in the panel's list. */
|
|
460
|
+
interface MkTimeOption {
|
|
461
|
+
/** Minutes since midnight. */
|
|
462
|
+
minutes: number;
|
|
463
|
+
/** Display label (respects `hour12`). */
|
|
464
|
+
label: string;
|
|
465
|
+
/** Stable id for `aria-activedescendant`. */
|
|
466
|
+
id: string;
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* DateTimePicker — one field for a date **and** a time of day. The panel pairs
|
|
470
|
+
* an `mk-calendar` with a time list generated from `step`; the value is a
|
|
471
|
+
* single `Date` carrying both parts in local time (seconds and milliseconds
|
|
472
|
+
* zeroed). Implements `ControlValueAccessor` and a two-way `value` model, so it
|
|
473
|
+
* works with `[(ngModel)]`, reactive forms and `[(value)]`.
|
|
474
|
+
*
|
|
475
|
+
* Interaction: picking a day keeps the panel open and — when a value already
|
|
476
|
+
* exists — moves that value to the new day, preserving its time; picking a
|
|
477
|
+
* time commits and closes. With no value yet, the day is held until a time is
|
|
478
|
+
* chosen (so a half-picked datetime is never emitted). Typing also works:
|
|
479
|
+
* `2026-08-26 14:30`, `2026-08-26T09:05`, `Aug 26, 2026 2:30 pm` and a bare
|
|
480
|
+
* ISO date (→ midnight) are parsed on Enter/blur.
|
|
481
|
+
*
|
|
482
|
+
* `min` / `max` bound the whole instant at minute precision: the calendar
|
|
483
|
+
* greys out days outside the range and the time list hides times outside it
|
|
484
|
+
* on the boundary days. Validation reports `mkMinDate` / `mkMaxDate`.
|
|
485
|
+
*
|
|
486
|
+
* When nested in an `mk-form-field` it adopts the field's id and aria wiring.
|
|
487
|
+
*
|
|
488
|
+
* ```html
|
|
489
|
+
* <mk-datetime-picker [(value)]="startsAt" [step]="15" [min]="now" clearable />
|
|
490
|
+
* <mk-datetime-picker [(value)]="startsAt" hour12 />
|
|
491
|
+
* ```
|
|
492
|
+
*/
|
|
493
|
+
declare class MkDateTimePicker implements ControlValueAccessor, Validator {
|
|
494
|
+
protected readonly i18n: _mk_kit_ui_core.MkI18nStrings;
|
|
495
|
+
private readonly field;
|
|
496
|
+
private readonly host;
|
|
497
|
+
private readonly injector;
|
|
498
|
+
private readonly inputRef;
|
|
499
|
+
/** The panel — lives in the top layer once opened. */
|
|
500
|
+
private readonly panelRef;
|
|
501
|
+
private readonly timesRef;
|
|
502
|
+
/** Two-way selected date-time (local; seconds and ms are zero). */
|
|
503
|
+
readonly value: _angular_core.ModelSignal<Date | null>;
|
|
504
|
+
/** Earliest selectable instant (inclusive, minute precision). */
|
|
505
|
+
readonly min: _angular_core.InputSignal<Date | null>;
|
|
506
|
+
/** Latest selectable instant (inclusive, minute precision). */
|
|
507
|
+
readonly max: _angular_core.InputSignal<Date | null>;
|
|
508
|
+
/** Predicate marking individual days as disabled (threaded to the calendar). */
|
|
509
|
+
readonly disabledDate: _angular_core.InputSignal<((d: Date) => boolean) | null>;
|
|
510
|
+
/** Placeholder shown when empty. */
|
|
511
|
+
readonly placeholder: _angular_core.InputSignal<string>;
|
|
512
|
+
/**
|
|
513
|
+
* Pattern used to render the value in the field. Defaults to
|
|
514
|
+
* `'MMM d, yyyy HH:mm'`, or `'MMM d, yyyy h:mm a'` when `hour12` is set.
|
|
515
|
+
*/
|
|
516
|
+
readonly displayFormat: _angular_core.InputSignal<string | null>;
|
|
517
|
+
/** Interval between generated time options, in minutes. */
|
|
518
|
+
readonly step: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
519
|
+
/** Display 12-hour times with AM/PM (the model is a `Date` either way). */
|
|
520
|
+
readonly hour12: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
521
|
+
/** Disable the control. */
|
|
522
|
+
readonly disabled: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
523
|
+
/** Show a clear button when a value is selected. */
|
|
524
|
+
readonly clearable: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
525
|
+
/** Force invalid styling + `aria-invalid`. */
|
|
526
|
+
readonly invalid: _angular_core.InputSignalWithTransform<boolean, unknown>;
|
|
527
|
+
/** First column of the calendar week (0 = Sunday). */
|
|
528
|
+
readonly firstDayOfWeek: _angular_core.InputSignalWithTransform<number, unknown>;
|
|
529
|
+
/** Control size. Ignored when nested in an `mk-form-field`. */
|
|
530
|
+
readonly size: _angular_core.InputSignal<MkSize>;
|
|
531
|
+
protected readonly open: _angular_core.WritableSignal<boolean>;
|
|
532
|
+
/** Editable text mirror of the field. */
|
|
533
|
+
protected readonly inputText: _angular_core.WritableSignal<string>;
|
|
534
|
+
/** Keyboard-active option in the time list (index into `options`). */
|
|
535
|
+
protected readonly activeIndex: _angular_core.WritableSignal<number>;
|
|
536
|
+
/** Day picked in the calendar while there is no value yet. */
|
|
537
|
+
private readonly pendingDay;
|
|
538
|
+
private readonly cvaDisabled;
|
|
539
|
+
private onChange;
|
|
540
|
+
private onTouched;
|
|
541
|
+
readonly inputId: string;
|
|
542
|
+
readonly panelId: string;
|
|
543
|
+
readonly listId: string;
|
|
544
|
+
protected readonly effectiveSize: _angular_core.Signal<MkSize>;
|
|
545
|
+
protected readonly isDisabled: _angular_core.Signal<boolean>;
|
|
546
|
+
protected readonly isInvalid: _angular_core.Signal<boolean>;
|
|
547
|
+
protected readonly isRequired: _angular_core.Signal<boolean>;
|
|
548
|
+
protected readonly describedBy: _angular_core.Signal<string | null>;
|
|
549
|
+
protected readonly showClear: _angular_core.Signal<boolean>;
|
|
550
|
+
protected readonly effectiveFormat: _angular_core.Signal<string>;
|
|
551
|
+
/** The day the calendar shows as selected: the value's day, else the pending one. */
|
|
552
|
+
protected readonly calendarValue: _angular_core.Signal<Date | null>;
|
|
553
|
+
/** Day-granular bounds for the calendar (inclusive). */
|
|
554
|
+
protected readonly calendarMin: _angular_core.Signal<Date | null>;
|
|
555
|
+
protected readonly calendarMax: _angular_core.Signal<Date | null>;
|
|
556
|
+
/**
|
|
557
|
+
* Generated time options. On the `min` / `max` boundary day the list only
|
|
558
|
+
* offers times inside the bound; on other days every step is listed.
|
|
559
|
+
*/
|
|
560
|
+
protected readonly options: _angular_core.Signal<MkTimeOption[]>;
|
|
561
|
+
protected readonly selectedIndex: _angular_core.Signal<number>;
|
|
562
|
+
constructor();
|
|
563
|
+
private displayTime;
|
|
564
|
+
/**
|
|
565
|
+
* Accepts `YYYY-MM-DD[ T]HH:mm[ am|pm]`, a bare ISO date (→ midnight), any
|
|
566
|
+
* `Date.parse`-able date followed by a time, or a full `Date.parse`-able
|
|
567
|
+
* string. Seconds are dropped.
|
|
568
|
+
*/
|
|
569
|
+
private parse;
|
|
570
|
+
private clamp;
|
|
571
|
+
protected toggle(): void;
|
|
572
|
+
protected openPanel(): void;
|
|
573
|
+
protected close(): void;
|
|
574
|
+
/** Index of the first option at or after `d`'s time of day (for the initial highlight). */
|
|
575
|
+
private nearestIndex;
|
|
576
|
+
protected onCalendarPick(day: Date | null): void;
|
|
577
|
+
protected selectTime(index: number): void;
|
|
578
|
+
protected onListKeydown(event: Event): void;
|
|
579
|
+
private moveActive;
|
|
580
|
+
private scrollActiveIntoView;
|
|
581
|
+
protected onInput(event: Event): void;
|
|
582
|
+
protected onInputKeydown(event: Event): void;
|
|
583
|
+
protected clear(): void;
|
|
584
|
+
private commitInput;
|
|
585
|
+
private setValue;
|
|
586
|
+
protected onFocusOut(event: Event): void;
|
|
587
|
+
/**
|
|
588
|
+
* Escape pressed inside the (teleported) panel — close and return focus to
|
|
589
|
+
* the input. `preventDefault` + `stopPropagation` keep any outer Escape
|
|
590
|
+
* handling (e.g. a containing dialog) from also firing.
|
|
591
|
+
*/
|
|
592
|
+
protected onPanelEscape(event: Event): void;
|
|
593
|
+
/**
|
|
594
|
+
* Focus left the teleported panel. The host `(focusout)` never sees this —
|
|
595
|
+
* the panel lives under `document.body` — so Tab-out is handled here: close
|
|
596
|
+
* unless focus moved back into the field or stayed inside the panel.
|
|
597
|
+
*/
|
|
598
|
+
protected onPanelFocusout(event: FocusEvent): void;
|
|
599
|
+
writeValue(value: Date | null): void;
|
|
600
|
+
registerOnChange(fn: (value: Date | null) => void): void;
|
|
601
|
+
registerOnTouched(fn: () => void): void;
|
|
602
|
+
setDisabledState(isDisabled: boolean): void;
|
|
603
|
+
private readonly validatorChange;
|
|
604
|
+
/**
|
|
605
|
+
* Reports `mkMinDate` / `mkMaxDate` against the `[min]` and `[max]` inputs,
|
|
606
|
+
* comparing whole instants at minute precision.
|
|
607
|
+
*/
|
|
608
|
+
validate(control: AbstractControl): ValidationErrors | null;
|
|
609
|
+
registerOnValidatorChange(fn: () => void): void;
|
|
610
|
+
static ɵfac: _angular_core.ɵɵFactoryDeclaration<MkDateTimePicker, never>;
|
|
611
|
+
static ɵcmp: _angular_core.ɵɵComponentDeclaration<MkDateTimePicker, "mk-datetime-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; }; "step": { "alias": "step"; "required": false; "isSignal": true; }; "hour12": { "alias": "hour12"; "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>;
|
|
612
|
+
}
|
|
613
|
+
|
|
457
614
|
/** A selected date range. Either endpoint may be `null` while incomplete. */
|
|
458
615
|
interface MkDateRange {
|
|
459
616
|
start: Date | null;
|
|
@@ -1167,5 +1324,5 @@ declare class MkMiniDate implements ControlValueAccessor, Validator {
|
|
|
1167
1324
|
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
1325
|
}
|
|
1169
1326
|
|
|
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 };
|
|
1327
|
+
export { MkCalendar, MkDatePicker, MkDateRangePicker, MkDateTimePicker, 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
1328
|
export type { MkCalendarEvent, MkCalendarEventEdit, MkCalendarView, MkDateRange, MkMiniDateOrder, MkMonthPickerMode, MkWeek, MkWeekday };
|
|
@@ -37,7 +37,8 @@ declare class MkIcon {
|
|
|
37
37
|
|
|
38
38
|
/**
|
|
39
39
|
* IconRegistry — the name → SVG store behind `<mk-icon name="…">`. The built-in
|
|
40
|
-
* {@link MK_DEFAULT_ICONS}
|
|
40
|
+
* sets — the hand-made {@link MK_DEFAULT_ICONS} and the Lucide-derived
|
|
41
|
+
* {@link MK_EXTENDED_ICONS} — are registered on construction; add your own SVGs
|
|
41
42
|
* (from a sprite, a design export, anything) with {@link register} /
|
|
42
43
|
* {@link registerIcons}.
|
|
43
44
|
*
|
|
@@ -105,4 +106,7 @@ declare const MK_MATERIAL_ICON_ALIASES: Readonly<Record<string, string>>;
|
|
|
105
106
|
*/
|
|
106
107
|
declare function provideMkMaterialIcons(): EnvironmentProviders;
|
|
107
108
|
|
|
108
|
-
|
|
109
|
+
/** Name → SVG markup map of the Lucide-derived icons registered by default. */
|
|
110
|
+
declare const MK_EXTENDED_ICONS: Readonly<Record<string, string>>;
|
|
111
|
+
|
|
112
|
+
export { MK_DEFAULT_ICONS, MK_EXTENDED_ICONS, MK_MATERIAL_ICON_ALIASES, MkIcon, MkIconRegistry, provideMkMaterialIcons };
|