@angular/material 19.0.2 → 19.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/expansion/index.d.ts +9 -8
- package/fesm2022/core.mjs +1 -1
- package/fesm2022/core.mjs.map +1 -1
- package/fesm2022/expansion.mjs +89 -82
- package/fesm2022/expansion.mjs.map +1 -1
- package/fesm2022/menu.mjs +41 -56
- package/fesm2022/menu.mjs.map +1 -1
- package/fesm2022/paginator.mjs +31 -22
- package/fesm2022/paginator.mjs.map +1 -1
- package/fesm2022/select.mjs +15 -4
- package/fesm2022/select.mjs.map +1 -1
- package/fesm2022/timepicker.mjs +42 -27
- package/fesm2022/timepicker.mjs.map +1 -1
- package/menu/index.d.ts +6 -0
- package/package.json +2 -2
- package/paginator/index.d.ts +8 -0
- package/schematics/ng-add/index.js +1 -1
- package/schematics/ng-add/index.mjs +1 -1
- package/schematics/ng-generate/theme-color/index_bundled.js +2 -2
- package/schematics/ng-update/index_bundled.js +31 -31
- package/select/index.d.ts +15 -2
- package/timepicker/index.d.ts +3 -0
package/fesm2022/timepicker.mjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { InjectionToken, inject, ViewContainerRef, Injector, signal, viewChild, viewChildren, input, output, booleanAttribute, effect, ElementRef, afterNextRender, untracked, Component, ChangeDetectionStrategy, ViewEncapsulation,
|
|
2
|
+
import { InjectionToken, inject, ViewContainerRef, Injector, signal, viewChild, viewChildren, input, output, booleanAttribute, computed, effect, ElementRef, afterNextRender, untracked, Component, ChangeDetectionStrategy, ViewEncapsulation, model, Directive, HostAttributeToken, NgModule } from '@angular/core';
|
|
3
3
|
import { trigger, state, style, transition, group, animate } from '@angular/animations';
|
|
4
4
|
import { DateAdapter, MAT_DATE_FORMATS, MatOption, MAT_OPTION_PARENT_COMPONENT } from '@angular/material/core';
|
|
5
5
|
import { Directionality } from '@angular/cdk/bidi';
|
|
@@ -107,7 +107,7 @@ class MatTimepicker {
|
|
|
107
107
|
_dateFormats = inject(MAT_DATE_FORMATS, { optional: true });
|
|
108
108
|
_isOpen = signal(false);
|
|
109
109
|
_activeDescendant = signal(null);
|
|
110
|
-
_input;
|
|
110
|
+
_input = signal(null);
|
|
111
111
|
_overlayRef = null;
|
|
112
112
|
_portal = null;
|
|
113
113
|
_optionsCacheKey = null;
|
|
@@ -155,6 +155,8 @@ class MatTimepicker {
|
|
|
155
155
|
ariaLabelledby = input(null, {
|
|
156
156
|
alias: 'aria-labelledby',
|
|
157
157
|
});
|
|
158
|
+
/** Whether the timepicker is currently disabled. */
|
|
159
|
+
disabled = computed(() => !!this._input()?.disabled());
|
|
158
160
|
constructor() {
|
|
159
161
|
if (typeof ngDevMode === 'undefined' || ngDevMode) {
|
|
160
162
|
validateAdapter(this._dateAdapter, this._dateFormats);
|
|
@@ -178,26 +180,27 @@ class MatTimepicker {
|
|
|
178
180
|
}
|
|
179
181
|
/** Opens the timepicker. */
|
|
180
182
|
open() {
|
|
181
|
-
|
|
183
|
+
const input = this._input();
|
|
184
|
+
if (!input) {
|
|
182
185
|
return;
|
|
183
186
|
}
|
|
184
187
|
// Focus should already be on the input, but this call is in case the timepicker is opened
|
|
185
188
|
// programmatically. We need to call this even if the timepicker is already open, because
|
|
186
189
|
// the user might be clicking the toggle.
|
|
187
|
-
|
|
190
|
+
input.focus();
|
|
188
191
|
if (this._isOpen()) {
|
|
189
192
|
return;
|
|
190
193
|
}
|
|
191
194
|
this._isOpen.set(true);
|
|
192
195
|
this._generateOptions();
|
|
193
196
|
const overlayRef = this._getOverlayRef();
|
|
194
|
-
overlayRef.updateSize({ width:
|
|
197
|
+
overlayRef.updateSize({ width: input.getOverlayOrigin().nativeElement.offsetWidth });
|
|
195
198
|
this._portal ??= new TemplatePortal(this._panelTemplate(), this._viewContainerRef);
|
|
196
199
|
overlayRef.attach(this._portal);
|
|
197
200
|
this._onOpenRender?.destroy();
|
|
198
201
|
this._onOpenRender = afterNextRender(() => {
|
|
199
202
|
const options = this._options();
|
|
200
|
-
this._syncSelectedState(
|
|
203
|
+
this._syncSelectedState(input.value(), options, options[0]);
|
|
201
204
|
this._onOpenRender = null;
|
|
202
205
|
}, { injector: this._injector });
|
|
203
206
|
this.opened.emit();
|
|
@@ -212,10 +215,11 @@ class MatTimepicker {
|
|
|
212
215
|
}
|
|
213
216
|
/** Registers an input with the timepicker. */
|
|
214
217
|
registerInput(input) {
|
|
215
|
-
|
|
218
|
+
const currentInput = this._input();
|
|
219
|
+
if (currentInput && input !== currentInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {
|
|
216
220
|
throw new Error('MatTimepicker can only be registered with one input at a time');
|
|
217
221
|
}
|
|
218
|
-
this._input
|
|
222
|
+
this._input.set(input);
|
|
219
223
|
}
|
|
220
224
|
ngOnDestroy() {
|
|
221
225
|
this._keyManager.destroy();
|
|
@@ -227,14 +231,14 @@ class MatTimepicker {
|
|
|
227
231
|
_selectValue(value) {
|
|
228
232
|
this.close();
|
|
229
233
|
this.selected.emit({ value, source: this });
|
|
230
|
-
this._input
|
|
234
|
+
this._input()?.focus();
|
|
231
235
|
}
|
|
232
236
|
/** Gets the value of the `aria-labelledby` attribute. */
|
|
233
237
|
_getAriaLabelledby() {
|
|
234
238
|
if (this.ariaLabel()) {
|
|
235
239
|
return null;
|
|
236
240
|
}
|
|
237
|
-
return this.ariaLabelledby() || this._input?._getLabelId() || null;
|
|
241
|
+
return this.ariaLabelledby() || this._input()?._getLabelId() || null;
|
|
238
242
|
}
|
|
239
243
|
/** Creates an overlay reference for the timepicker panel. */
|
|
240
244
|
_getOverlayRef() {
|
|
@@ -243,7 +247,7 @@ class MatTimepicker {
|
|
|
243
247
|
}
|
|
244
248
|
const positionStrategy = this._overlay
|
|
245
249
|
.position()
|
|
246
|
-
.flexibleConnectedTo(this._input.getOverlayOrigin())
|
|
250
|
+
.flexibleConnectedTo(this._input().getOverlayOrigin())
|
|
247
251
|
.withFlexibleDimensions(false)
|
|
248
252
|
.withPush(false)
|
|
249
253
|
.withTransformOriginOn('.mat-timepicker-panel')
|
|
@@ -273,8 +277,8 @@ class MatTimepicker {
|
|
|
273
277
|
});
|
|
274
278
|
this._overlayRef.outsidePointerEvents().subscribe(event => {
|
|
275
279
|
const target = _getEventTarget(event);
|
|
276
|
-
const origin = this._input
|
|
277
|
-
if (target && target !== origin && !origin.contains(target)) {
|
|
280
|
+
const origin = this._input()?.getOverlayOrigin().nativeElement;
|
|
281
|
+
if (target && origin && target !== origin && !origin.contains(target)) {
|
|
278
282
|
this.close();
|
|
279
283
|
}
|
|
280
284
|
});
|
|
@@ -289,10 +293,11 @@ class MatTimepicker {
|
|
|
289
293
|
this._timeOptions = options;
|
|
290
294
|
}
|
|
291
295
|
else {
|
|
296
|
+
const input = this._input();
|
|
292
297
|
const adapter = this._dateAdapter;
|
|
293
298
|
const timeFormat = this._dateFormats.display.timeInput;
|
|
294
|
-
const min =
|
|
295
|
-
const max =
|
|
299
|
+
const min = input?.min() || adapter.setTime(adapter.today(), 0, 0, 0);
|
|
300
|
+
const max = input?.max() || adapter.setTime(adapter.today(), 23, 59, 0);
|
|
296
301
|
const cacheKey = interval + '/' + adapter.format(min, timeFormat) + '/' + adapter.format(max, timeFormat);
|
|
297
302
|
// Don't re-generate the options if the inputs haven't changed.
|
|
298
303
|
if (cacheKey !== this._optionsCacheKey) {
|
|
@@ -375,10 +380,10 @@ class MatTimepicker {
|
|
|
375
380
|
*/
|
|
376
381
|
_handleInputStateChanges() {
|
|
377
382
|
effect(() => {
|
|
378
|
-
const
|
|
383
|
+
const input = this._input();
|
|
379
384
|
const options = this._options();
|
|
380
|
-
if (this._isOpen()) {
|
|
381
|
-
this._syncSelectedState(value, options, null);
|
|
385
|
+
if (this._isOpen() && input) {
|
|
386
|
+
this._syncSelectedState(input.value(), options, null);
|
|
382
387
|
}
|
|
383
388
|
});
|
|
384
389
|
}
|
|
@@ -388,7 +393,7 @@ class MatTimepicker {
|
|
|
388
393
|
provide: MAT_OPTION_PARENT_COMPONENT,
|
|
389
394
|
useExisting: MatTimepicker,
|
|
390
395
|
},
|
|
391
|
-
], viewQueries: [{ propertyName: "_panelTemplate", first: true, predicate: ["panelTemplate"], descendants: true, isSignal: true }, { propertyName: "_options", predicate: MatOption, descendants: true, isSignal: true }], exportAs: ["matTimepicker"], ngImport: i0, template: "<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n class=\"mat-timepicker-panel\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"_getAriaLabelledby()\"\n [id]=\"panelId\"\n @panel>\n @for (option of _timeOptions; track option.value) {\n <mat-option\n [value]=\"option.value\"\n (onSelectionChange)=\"_selectValue(option.value)\">{{option.label}}</mat-option>\n }\n </div>\n</ng-template>\n", styles: ["mat-timepicker{display:none}.mat-timepicker-panel{width:100%;max-height:256px;transform-origin:center top;overflow:auto;padding:8px 0;box-sizing:border-box;border-bottom-left-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));box-shadow:var(--mat-timepicker-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));background-color:var(--mat-timepicker-container-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){.mat-timepicker-panel{outline:solid 1px}}.mat-timepicker-above .mat-timepicker-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small))}.mat-timepicker-input
|
|
396
|
+
], viewQueries: [{ propertyName: "_panelTemplate", first: true, predicate: ["panelTemplate"], descendants: true, isSignal: true }, { propertyName: "_options", predicate: MatOption, descendants: true, isSignal: true }], exportAs: ["matTimepicker"], ngImport: i0, template: "<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n class=\"mat-timepicker-panel\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"_getAriaLabelledby()\"\n [id]=\"panelId\"\n @panel>\n @for (option of _timeOptions; track option.value) {\n <mat-option\n [value]=\"option.value\"\n (onSelectionChange)=\"_selectValue(option.value)\">{{option.label}}</mat-option>\n }\n </div>\n</ng-template>\n", styles: ["mat-timepicker{display:none}.mat-timepicker-panel{width:100%;max-height:256px;transform-origin:center top;overflow:auto;padding:8px 0;box-sizing:border-box;border-bottom-left-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));box-shadow:var(--mat-timepicker-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));background-color:var(--mat-timepicker-container-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){.mat-timepicker-panel{outline:solid 1px}}.mat-timepicker-above .mat-timepicker-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small))}.mat-timepicker-input[readonly]{cursor:pointer}@media(forced-colors: active){.mat-timepicker-toggle-default-icon{color:CanvasText}}"], dependencies: [{ kind: "component", type: MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }], animations: [
|
|
392
397
|
trigger('panel', [
|
|
393
398
|
state('void', style({ opacity: 0, transform: 'scaleY(0.8)' })),
|
|
394
399
|
transition(':enter', [
|
|
@@ -419,7 +424,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImpor
|
|
|
419
424
|
]),
|
|
420
425
|
transition(':leave', [animate('0.075s linear', style({ opacity: 0 }))]),
|
|
421
426
|
]),
|
|
422
|
-
], template: "<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n class=\"mat-timepicker-panel\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"_getAriaLabelledby()\"\n [id]=\"panelId\"\n @panel>\n @for (option of _timeOptions; track option.value) {\n <mat-option\n [value]=\"option.value\"\n (onSelectionChange)=\"_selectValue(option.value)\">{{option.label}}</mat-option>\n }\n </div>\n</ng-template>\n", styles: ["mat-timepicker{display:none}.mat-timepicker-panel{width:100%;max-height:256px;transform-origin:center top;overflow:auto;padding:8px 0;box-sizing:border-box;border-bottom-left-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));box-shadow:var(--mat-timepicker-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));background-color:var(--mat-timepicker-container-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){.mat-timepicker-panel{outline:solid 1px}}.mat-timepicker-above .mat-timepicker-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small))}.mat-timepicker-input
|
|
427
|
+
], template: "<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n class=\"mat-timepicker-panel\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"_getAriaLabelledby()\"\n [id]=\"panelId\"\n @panel>\n @for (option of _timeOptions; track option.value) {\n <mat-option\n [value]=\"option.value\"\n (onSelectionChange)=\"_selectValue(option.value)\">{{option.label}}</mat-option>\n }\n </div>\n</ng-template>\n", styles: ["mat-timepicker{display:none}.mat-timepicker-panel{width:100%;max-height:256px;transform-origin:center top;overflow:auto;padding:8px 0;box-sizing:border-box;border-bottom-left-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));border-bottom-right-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));box-shadow:var(--mat-timepicker-container-elevation-shadow, 0px 3px 1px -2px rgba(0, 0, 0, 0.2), 0px 2px 2px 0px rgba(0, 0, 0, 0.14), 0px 1px 5px 0px rgba(0, 0, 0, 0.12));background-color:var(--mat-timepicker-container-background-color, var(--mat-sys-surface-container))}@media(forced-colors: active){.mat-timepicker-panel{outline:solid 1px}}.mat-timepicker-above .mat-timepicker-panel{border-bottom-left-radius:0;border-bottom-right-radius:0;border-top-left-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small));border-top-right-radius:var(--mat-timepicker-container-shape, var(--mat-sys-corner-extra-small))}.mat-timepicker-input[readonly]{cursor:pointer}@media(forced-colors: active){.mat-timepicker-toggle-default-icon{color:CanvasText}}"] }]
|
|
423
428
|
}], ctorParameters: () => [] });
|
|
424
429
|
/**
|
|
425
430
|
* Scrolls an option into view.
|
|
@@ -516,7 +521,11 @@ class MatTimepickerInput {
|
|
|
516
521
|
* @docs-private
|
|
517
522
|
*/
|
|
518
523
|
writeValue(value) {
|
|
519
|
-
|
|
524
|
+
// Note that we need to deserialize here, rather than depend on the value change effect,
|
|
525
|
+
// because `getValidDateOrNull` will clobber the value if it's parseable, but not created by
|
|
526
|
+
// the current adapter (see #30140).
|
|
527
|
+
const deserialized = this._dateAdapter.deserialize(value);
|
|
528
|
+
this.value.set(this._dateAdapter.getValidDateOrNull(deserialized));
|
|
520
529
|
}
|
|
521
530
|
/**
|
|
522
531
|
* Implemented as a part of `ControlValueAccessor`.
|
|
@@ -572,7 +581,9 @@ class MatTimepickerInput {
|
|
|
572
581
|
}
|
|
573
582
|
/** Handles clicks on the input or the containing form field. */
|
|
574
583
|
_handleClick = () => {
|
|
575
|
-
this.
|
|
584
|
+
if (!this.disabled()) {
|
|
585
|
+
this.timepicker().open();
|
|
586
|
+
}
|
|
576
587
|
};
|
|
577
588
|
/** Handles the `input` event. */
|
|
578
589
|
_handleInput(value) {
|
|
@@ -601,7 +612,7 @@ class MatTimepickerInput {
|
|
|
601
612
|
/** Handles the `keydown` event. */
|
|
602
613
|
_handleKeydown(event) {
|
|
603
614
|
// All keyboard events while open are handled through the timepicker.
|
|
604
|
-
if (this.timepicker().isOpen()) {
|
|
615
|
+
if (this.timepicker().isOpen() || this.disabled()) {
|
|
605
616
|
return;
|
|
606
617
|
}
|
|
607
618
|
if (event.keyCode === ESCAPE && !hasModifierKey(event) && this.value() !== null) {
|
|
@@ -609,7 +620,7 @@ class MatTimepickerInput {
|
|
|
609
620
|
this.value.set(null);
|
|
610
621
|
this._formatValue(null);
|
|
611
622
|
}
|
|
612
|
-
else if (
|
|
623
|
+
else if (event.keyCode === DOWN_ARROW || event.keyCode === UP_ARROW) {
|
|
613
624
|
event.preventDefault();
|
|
614
625
|
this.timepicker().open();
|
|
615
626
|
}
|
|
@@ -789,6 +800,10 @@ class MatTimepickerToggle {
|
|
|
789
800
|
const parsed = Number(value);
|
|
790
801
|
return isNaN(parsed) ? null : parsed;
|
|
791
802
|
})();
|
|
803
|
+
_isDisabled = computed(() => {
|
|
804
|
+
const timepicker = this.timepicker();
|
|
805
|
+
return this.disabled() || timepicker.disabled();
|
|
806
|
+
});
|
|
792
807
|
/** Timepicker instance that the button will toggle. */
|
|
793
808
|
timepicker = input.required({
|
|
794
809
|
alias: 'for',
|
|
@@ -808,13 +823,13 @@ class MatTimepickerToggle {
|
|
|
808
823
|
disableRipple = input(this._defaultConfig?.disableRipple ?? false, { transform: booleanAttribute });
|
|
809
824
|
/** Opens the connected timepicker. */
|
|
810
825
|
_open(event) {
|
|
811
|
-
if (this.timepicker() && !this.
|
|
826
|
+
if (this.timepicker() && !this._isDisabled()) {
|
|
812
827
|
this.timepicker().open();
|
|
813
828
|
event.stopPropagation();
|
|
814
829
|
}
|
|
815
830
|
}
|
|
816
831
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: MatTimepickerToggle, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
817
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.0", type: MatTimepickerToggle, isStandalone: true, selector: "mat-timepicker-toggle", inputs: { timepicker: { classPropertyName: "timepicker", publicName: "for", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, disableRipple: { classPropertyName: "disableRipple", publicName: "disableRipple", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "_open($event)" }, properties: { "attr.tabindex": "null" }, classAttribute: "mat-timepicker-toggle" }, exportAs: ["matTimepickerToggle"], ngImport: i0, template: "<button\n mat-icon-button\n type=\"button\"\n aria-haspopup=\"listbox\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-expanded]=\"timepicker().isOpen()\"\n [attr.tabindex]=\"
|
|
832
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "19.0.0", type: MatTimepickerToggle, isStandalone: true, selector: "mat-timepicker-toggle", inputs: { timepicker: { classPropertyName: "timepicker", publicName: "for", isSignal: true, isRequired: true, transformFunction: null }, ariaLabel: { classPropertyName: "ariaLabel", publicName: "aria-label", isSignal: true, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: true, isRequired: false, transformFunction: null }, tabIndex: { classPropertyName: "tabIndex", publicName: "tabIndex", isSignal: true, isRequired: false, transformFunction: null }, disableRipple: { classPropertyName: "disableRipple", publicName: "disableRipple", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "click": "_open($event)" }, properties: { "attr.tabindex": "null" }, classAttribute: "mat-timepicker-toggle" }, exportAs: ["matTimepickerToggle"], ngImport: i0, template: "<button\n mat-icon-button\n type=\"button\"\n aria-haspopup=\"listbox\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-expanded]=\"timepicker().isOpen()\"\n [attr.tabindex]=\"_isDisabled() ? -1 : tabIndex()\"\n [disabled]=\"_isDisabled()\"\n [disableRipple]=\"disableRipple()\">\n\n <ng-content select=\"[matTimepickerToggleIcon]\">\n <svg\n class=\"mat-timepicker-toggle-default-icon\"\n height=\"24px\"\n width=\"24px\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z\"/>\n </svg>\n </ng-content>\n</button>\n", dependencies: [{ kind: "component", type: MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush, encapsulation: i0.ViewEncapsulation.None });
|
|
818
833
|
}
|
|
819
834
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImport: i0, type: MatTimepickerToggle, decorators: [{
|
|
820
835
|
type: Component,
|
|
@@ -825,7 +840,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0", ngImpor
|
|
|
825
840
|
// `stopPropagation` on it without affecting the user's `click` handlers. We need to stop
|
|
826
841
|
// it so that the input doesn't get focused automatically by the form field (See #21836).
|
|
827
842
|
'(click)': '_open($event)',
|
|
828
|
-
}, exportAs: 'matTimepickerToggle', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatIconButton], template: "<button\n mat-icon-button\n type=\"button\"\n aria-haspopup=\"listbox\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-expanded]=\"timepicker().isOpen()\"\n [attr.tabindex]=\"
|
|
843
|
+
}, exportAs: 'matTimepickerToggle', encapsulation: ViewEncapsulation.None, changeDetection: ChangeDetectionStrategy.OnPush, imports: [MatIconButton], template: "<button\n mat-icon-button\n type=\"button\"\n aria-haspopup=\"listbox\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-expanded]=\"timepicker().isOpen()\"\n [attr.tabindex]=\"_isDisabled() ? -1 : tabIndex()\"\n [disabled]=\"_isDisabled()\"\n [disableRipple]=\"disableRipple()\">\n\n <ng-content select=\"[matTimepickerToggleIcon]\">\n <svg\n class=\"mat-timepicker-toggle-default-icon\"\n height=\"24px\"\n width=\"24px\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z\"/>\n </svg>\n </ng-content>\n</button>\n" }]
|
|
829
844
|
}] });
|
|
830
845
|
|
|
831
846
|
class MatTimepickerModule {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"timepicker.mjs","sources":["../../../../../../src/material/timepicker/util.ts","../../../../../../src/material/timepicker/timepicker.ts","../../../../../../src/material/timepicker/timepicker.html","../../../../../../src/material/timepicker/timepicker-input.ts","../../../../../../src/material/timepicker/timepicker-toggle.ts","../../../../../../src/material/timepicker/timepicker-toggle.html","../../../../../../src/material/timepicker/timepicker-module.ts","../../../../../../src/material/timepicker/timepicker_public_index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\nimport {DateAdapter, MatDateFormats} from '@angular/material/core';\n\n/** Pattern that interval strings have to match. */\nconst INTERVAL_PATTERN = /^(\\d*\\.?\\d+)\\s*(h|hour|hours|m|min|minute|minutes|s|second|seconds)?$/i;\n\n/**\n * Object that can be used to configure the default options for the timepicker component.\n */\nexport interface MatTimepickerConfig {\n /** Default interval for all time pickers. */\n interval?: string | number;\n\n /** Whether ripples inside the timepicker should be disabled by default. */\n disableRipple?: boolean;\n}\n\n/**\n * Injection token that can be used to configure the default options for the timepicker component.\n */\nexport const MAT_TIMEPICKER_CONFIG = new InjectionToken<MatTimepickerConfig>(\n 'MAT_TIMEPICKER_CONFIG',\n);\n\n/**\n * Time selection option that can be displayed within a `mat-timepicker`.\n */\nexport interface MatTimepickerOption<D = unknown> {\n /** Date value of the option. */\n value: D;\n\n /** Label to show to the user. */\n label: string;\n}\n\n/** Parses an interval value into seconds. */\nexport function parseInterval(value: number | string | null): number | null {\n let result: number;\n\n if (value === null) {\n return null;\n } else if (typeof value === 'number') {\n result = value;\n } else {\n if (value.trim().length === 0) {\n return null;\n }\n\n const parsed = value.match(INTERVAL_PATTERN);\n const amount = parsed ? parseFloat(parsed[1]) : null;\n const unit = parsed?.[2]?.toLowerCase() || null;\n\n if (!parsed || amount === null || isNaN(amount)) {\n return null;\n }\n\n if (unit === 'h' || unit === 'hour' || unit === 'hours') {\n result = amount * 3600;\n } else if (unit === 'm' || unit === 'min' || unit === 'minute' || unit === 'minutes') {\n result = amount * 60;\n } else {\n result = amount;\n }\n }\n\n return result;\n}\n\n/**\n * Generates the options to show in a timepicker.\n * @param adapter Date adapter to be used to generate the options.\n * @param formats Formatting config to use when displaying the options.\n * @param min Time from which to start generating the options.\n * @param max Time at which to stop generating the options.\n * @param interval Amount of seconds between each option.\n */\nexport function generateOptions<D>(\n adapter: DateAdapter<D>,\n formats: MatDateFormats,\n min: D,\n max: D,\n interval: number,\n): MatTimepickerOption<D>[] {\n const options: MatTimepickerOption<D>[] = [];\n let current = adapter.compareTime(min, max) < 1 ? min : max;\n\n while (\n adapter.sameDate(current, min) &&\n adapter.compareTime(current, max) < 1 &&\n adapter.isValid(current)\n ) {\n options.push({value: current, label: adapter.format(current, formats.display.timeOptionLabel)});\n current = adapter.addSeconds(current, interval);\n }\n\n return options;\n}\n\n/** Checks whether a date adapter is set up correctly for use with the timepicker. */\nexport function validateAdapter(\n adapter: DateAdapter<unknown> | null,\n formats: MatDateFormats | null,\n) {\n function missingAdapterError(provider: string) {\n return Error(\n `MatTimepicker: No provider found for ${provider}. You must add one of the following ` +\n `to your app config: provideNativeDateAdapter, provideDateFnsAdapter, ` +\n `provideLuxonDateAdapter, provideMomentDateAdapter, or provide a custom implementation.`,\n );\n }\n\n if (!adapter) {\n throw missingAdapterError('DateAdapter');\n }\n\n if (!formats) {\n throw missingAdapterError('MAT_DATE_FORMATS');\n }\n\n if (\n formats.display.timeInput === undefined ||\n formats.display.timeOptionLabel === undefined ||\n formats.parse.timeInput === undefined\n ) {\n throw new Error(\n 'MatTimepicker: Incomplete `MAT_DATE_FORMATS` has been provided. ' +\n '`MAT_DATE_FORMATS` must provide `display.timeInput`, `display.timeOptionLabel` ' +\n 'and `parse.timeInput` formats in order to be compatible with MatTimepicker.',\n );\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n afterNextRender,\n AfterRenderRef,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n InputSignal,\n InputSignalWithTransform,\n OnDestroy,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n viewChildren,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {animate, group, state, style, transition, trigger} from '@angular/animations';\nimport {\n DateAdapter,\n MAT_DATE_FORMATS,\n MAT_OPTION_PARENT_COMPONENT,\n MatOption,\n MatOptionParentComponent,\n} from '@angular/material/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {Overlay, OverlayRef} from '@angular/cdk/overlay';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {_getEventTarget} from '@angular/cdk/platform';\nimport {ENTER, ESCAPE, hasModifierKey, TAB} from '@angular/cdk/keycodes';\nimport {_IdGenerator, ActiveDescendantKeyManager} from '@angular/cdk/a11y';\nimport type {MatTimepickerInput} from './timepicker-input';\nimport {\n generateOptions,\n MAT_TIMEPICKER_CONFIG,\n MatTimepickerOption,\n parseInterval,\n validateAdapter,\n} from './util';\nimport {Subscription} from 'rxjs';\n\n/** Event emitted when a value is selected in the timepicker. */\nexport interface MatTimepickerSelected<D> {\n value: D;\n source: MatTimepicker<D>;\n}\n\n/**\n * Renders out a listbox that can be used to select a time of day.\n * Intended to be used together with `MatTimepickerInput`.\n */\n@Component({\n selector: 'mat-timepicker',\n exportAs: 'matTimepicker',\n templateUrl: 'timepicker.html',\n styleUrl: 'timepicker.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [MatOption],\n providers: [\n {\n provide: MAT_OPTION_PARENT_COMPONENT,\n useExisting: MatTimepicker,\n },\n ],\n animations: [\n trigger('panel', [\n state('void', style({opacity: 0, transform: 'scaleY(0.8)'})),\n transition(':enter', [\n group([\n animate('0.03s linear', style({opacity: 1})),\n animate('0.12s cubic-bezier(0, 0, 0.2, 1)', style({transform: 'scaleY(1)'})),\n ]),\n ]),\n transition(':leave', [animate('0.075s linear', style({opacity: 0}))]),\n ]),\n ],\n})\nexport class MatTimepicker<D> implements OnDestroy, MatOptionParentComponent {\n private _overlay = inject(Overlay);\n private _dir = inject(Directionality, {optional: true});\n private _viewContainerRef = inject(ViewContainerRef);\n private _injector = inject(Injector);\n private _defaultConfig = inject(MAT_TIMEPICKER_CONFIG, {optional: true});\n private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\n private _dateFormats = inject(MAT_DATE_FORMATS, {optional: true})!;\n\n private _isOpen = signal(false);\n private _activeDescendant = signal<string | null>(null);\n\n private _input: MatTimepickerInput<D>;\n private _overlayRef: OverlayRef | null = null;\n private _portal: TemplatePortal<unknown> | null = null;\n private _optionsCacheKey: string | null = null;\n private _localeChanges: Subscription;\n private _onOpenRender: AfterRenderRef | null = null;\n\n protected _panelTemplate = viewChild.required<TemplateRef<unknown>>('panelTemplate');\n protected _timeOptions: readonly MatTimepickerOption<D>[] = [];\n protected _options = viewChildren(MatOption);\n\n private _keyManager = new ActiveDescendantKeyManager(this._options, this._injector)\n .withHomeAndEnd(true)\n .withPageUpDown(true)\n .withVerticalOrientation(true);\n\n /**\n * Interval between each option in the timepicker. The value can either be an amount of\n * seconds (e.g. 90) or a number with a unit (e.g. 45m). Supported units are `s` for seconds,\n * `m` for minutes or `h` for hours.\n */\n readonly interval: InputSignalWithTransform<number | null, number | string | null> = input(\n parseInterval(this._defaultConfig?.interval || null),\n {transform: parseInterval},\n );\n\n /**\n * Array of pre-defined options that the user can select from, as an alternative to using the\n * `interval` input. An error will be thrown if both `options` and `interval` are specified.\n */\n readonly options: InputSignal<readonly MatTimepickerOption<D>[] | null> = input<\n readonly MatTimepickerOption<D>[] | null\n >(null);\n\n /** Whether the timepicker is open. */\n readonly isOpen: Signal<boolean> = this._isOpen.asReadonly();\n\n /** Emits when the user selects a time. */\n readonly selected: OutputEmitterRef<MatTimepickerSelected<D>> = output();\n\n /** Emits when the timepicker is opened. */\n readonly opened: OutputEmitterRef<void> = output();\n\n /** Emits when the timepicker is closed. */\n readonly closed: OutputEmitterRef<void> = output();\n\n /** ID of the active descendant option. */\n readonly activeDescendant: Signal<string | null> = this._activeDescendant.asReadonly();\n\n /** Unique ID of the timepicker's panel */\n readonly panelId: string = inject(_IdGenerator).getId('mat-timepicker-panel-');\n\n /** Whether ripples within the timepicker should be disabled. */\n readonly disableRipple: InputSignalWithTransform<boolean, unknown> = input(\n this._defaultConfig?.disableRipple ?? false,\n {\n transform: booleanAttribute,\n },\n );\n\n /** ARIA label for the timepicker panel. */\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null, {\n alias: 'aria-label',\n });\n\n /** ID of the label element for the timepicker panel. */\n readonly ariaLabelledby: InputSignal<string | null> = input<string | null>(null, {\n alias: 'aria-labelledby',\n });\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n validateAdapter(this._dateAdapter, this._dateFormats);\n\n effect(() => {\n const options = this.options();\n const interval = this.interval();\n\n if (options !== null && interval !== null) {\n throw new Error(\n 'Cannot specify both the `options` and `interval` inputs at the same time',\n );\n } else if (options?.length === 0) {\n throw new Error('Value of `options` input cannot be an empty array');\n }\n });\n }\n\n // Since the panel ID is static, we can set it once without having to maintain a host binding.\n const element = inject<ElementRef<HTMLElement>>(ElementRef);\n element.nativeElement.setAttribute('mat-timepicker-panel-id', this.panelId);\n this._handleLocaleChanges();\n this._handleInputStateChanges();\n this._keyManager.change.subscribe(() =>\n this._activeDescendant.set(this._keyManager.activeItem?.id || null),\n );\n }\n\n /** Opens the timepicker. */\n open(): void {\n if (!this._input) {\n return;\n }\n\n // Focus should already be on the input, but this call is in case the timepicker is opened\n // programmatically. We need to call this even if the timepicker is already open, because\n // the user might be clicking the toggle.\n this._input.focus();\n\n if (this._isOpen()) {\n return;\n }\n\n this._isOpen.set(true);\n this._generateOptions();\n const overlayRef = this._getOverlayRef();\n overlayRef.updateSize({width: this._input.getOverlayOrigin().nativeElement.offsetWidth});\n this._portal ??= new TemplatePortal(this._panelTemplate(), this._viewContainerRef);\n overlayRef.attach(this._portal);\n this._onOpenRender?.destroy();\n this._onOpenRender = afterNextRender(\n () => {\n const options = this._options();\n this._syncSelectedState(this._input.value(), options, options[0]);\n this._onOpenRender = null;\n },\n {injector: this._injector},\n );\n\n this.opened.emit();\n }\n\n /** Closes the timepicker. */\n close(): void {\n if (this._isOpen()) {\n this._isOpen.set(false);\n this._overlayRef?.detach();\n this.closed.emit();\n }\n }\n\n /** Registers an input with the timepicker. */\n registerInput(input: MatTimepickerInput<D>): void {\n if (this._input && input !== this._input && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new Error('MatTimepicker can only be registered with one input at a time');\n }\n\n this._input = input;\n }\n\n ngOnDestroy(): void {\n this._keyManager.destroy();\n this._localeChanges.unsubscribe();\n this._onOpenRender?.destroy();\n this._overlayRef?.dispose();\n }\n\n /** Selects a specific time value. */\n protected _selectValue(value: D) {\n this.close();\n this.selected.emit({value, source: this});\n this._input.focus();\n }\n\n /** Gets the value of the `aria-labelledby` attribute. */\n protected _getAriaLabelledby(): string | null {\n if (this.ariaLabel()) {\n return null;\n }\n return this.ariaLabelledby() || this._input?._getLabelId() || null;\n }\n\n /** Creates an overlay reference for the timepicker panel. */\n private _getOverlayRef(): OverlayRef {\n if (this._overlayRef) {\n return this._overlayRef;\n }\n\n const positionStrategy = this._overlay\n .position()\n .flexibleConnectedTo(this._input.getOverlayOrigin())\n .withFlexibleDimensions(false)\n .withPush(false)\n .withTransformOriginOn('.mat-timepicker-panel')\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n panelClass: 'mat-timepicker-above',\n },\n ]);\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\n direction: this._dir || 'ltr',\n hasBackdrop: false,\n });\n\n this._overlayRef.keydownEvents().subscribe(event => {\n this._handleKeydown(event);\n });\n\n this._overlayRef.outsidePointerEvents().subscribe(event => {\n const target = _getEventTarget(event) as HTMLElement;\n const origin = this._input.getOverlayOrigin().nativeElement;\n\n if (target && target !== origin && !origin.contains(target)) {\n this.close();\n }\n });\n\n return this._overlayRef;\n }\n\n /** Generates the list of options from which the user can select.. */\n private _generateOptions(): void {\n // Default the interval to 30 minutes.\n const interval = this.interval() ?? 30 * 60;\n const options = this.options();\n\n if (options !== null) {\n this._timeOptions = options;\n } else {\n const adapter = this._dateAdapter;\n const timeFormat = this._dateFormats.display.timeInput;\n const min = this._input.min() || adapter.setTime(adapter.today(), 0, 0, 0);\n const max = this._input.max() || adapter.setTime(adapter.today(), 23, 59, 0);\n const cacheKey =\n interval + '/' + adapter.format(min, timeFormat) + '/' + adapter.format(max, timeFormat);\n\n // Don't re-generate the options if the inputs haven't changed.\n if (cacheKey !== this._optionsCacheKey) {\n this._optionsCacheKey = cacheKey;\n this._timeOptions = generateOptions(adapter, this._dateFormats, min, max, interval);\n }\n }\n }\n\n /**\n * Synchronizes the internal state of the component based on a specific selected date.\n * @param value Currently selected date.\n * @param options Options rendered out in the timepicker.\n * @param fallback Option to set as active if no option is selected.\n */\n private _syncSelectedState(\n value: D | null,\n options: readonly MatOption[],\n fallback: MatOption | null,\n ): void {\n let hasSelected = false;\n\n for (const option of options) {\n if (value && this._dateAdapter.sameTime(option.value, value)) {\n option.select(false);\n scrollOptionIntoView(option, 'center');\n untracked(() => this._keyManager.setActiveItem(option));\n hasSelected = true;\n } else {\n option.deselect(false);\n }\n }\n\n // If no option was selected, we need to reset the key manager since\n // it might be holding onto an option that no longer exists.\n if (!hasSelected) {\n if (fallback) {\n untracked(() => this._keyManager.setActiveItem(fallback));\n scrollOptionIntoView(fallback, 'center');\n } else {\n untracked(() => this._keyManager.setActiveItem(-1));\n }\n }\n }\n\n /** Handles keyboard events while the overlay is open. */\n private _handleKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n if (keyCode === TAB) {\n this.close();\n } else if (keyCode === ESCAPE && !hasModifierKey(event)) {\n event.preventDefault();\n this.close();\n } else if (keyCode === ENTER) {\n event.preventDefault();\n\n if (this._keyManager.activeItem) {\n this._selectValue(this._keyManager.activeItem.value);\n } else {\n this.close();\n }\n } else {\n const previousActive = this._keyManager.activeItem;\n this._keyManager.onKeydown(event);\n const currentActive = this._keyManager.activeItem;\n\n if (currentActive && currentActive !== previousActive) {\n scrollOptionIntoView(currentActive, 'nearest');\n }\n }\n }\n\n /** Sets up the logic that updates the timepicker when the locale changes. */\n private _handleLocaleChanges(): void {\n // Re-generate the options list if the locale changes.\n this._localeChanges = this._dateAdapter.localeChanges.subscribe(() => {\n this._optionsCacheKey = null;\n\n if (this.isOpen()) {\n this._generateOptions();\n }\n });\n }\n\n /**\n * Sets up the logic that updates the timepicker when the state of the connected input changes.\n */\n private _handleInputStateChanges(): void {\n effect(() => {\n const value = this._input?.value();\n const options = this._options();\n\n if (this._isOpen()) {\n this._syncSelectedState(value, options, null);\n }\n });\n }\n}\n\n/**\n * Scrolls an option into view.\n * @param option Option to be scrolled into view.\n * @param position Position to which to align the option relative to the scrollable container.\n */\nfunction scrollOptionIntoView(option: MatOption, position: ScrollLogicalPosition) {\n option._getHostElement().scrollIntoView({block: position, inline: position});\n}\n","<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n class=\"mat-timepicker-panel\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"_getAriaLabelledby()\"\n [id]=\"panelId\"\n @panel>\n @for (option of _timeOptions; track option.value) {\n <mat-option\n [value]=\"option.value\"\n (onSelectionChange)=\"_selectValue(option.value)\">{{option.label}}</mat-option>\n }\n </div>\n</ng-template>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n model,\n ModelSignal,\n OnDestroy,\n OutputRefSubscription,\n Signal,\n signal,\n} from '@angular/core';\nimport {DateAdapter, MAT_DATE_FORMATS} from '@angular/material/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {MAT_FORM_FIELD} from '@angular/material/form-field';\nimport {MatTimepicker} from './timepicker';\nimport {MAT_INPUT_VALUE_ACCESSOR} from '@angular/material/input';\nimport {Subscription} from 'rxjs';\nimport {DOWN_ARROW, ESCAPE, hasModifierKey, UP_ARROW} from '@angular/cdk/keycodes';\nimport {validateAdapter} from './util';\nimport {DOCUMENT} from '@angular/common';\n\n/**\n * Input that can be used to enter time and connect to a `mat-timepicker`.\n */\n@Directive({\n selector: 'input[matTimepicker]',\n exportAs: 'matTimepickerInput',\n host: {\n 'class': 'mat-timepicker-input',\n 'role': 'combobox',\n 'type': 'text',\n 'aria-haspopup': 'listbox',\n '[attr.aria-activedescendant]': '_ariaActiveDescendant()',\n '[attr.aria-expanded]': '_ariaExpanded()',\n '[attr.aria-controls]': '_ariaControls()',\n '[attr.mat-timepicker-id]': 'timepicker()?.panelId',\n '[disabled]': 'disabled()',\n '(blur)': '_handleBlur()',\n '(input)': '_handleInput($event.target.value)',\n '(keydown)': '_handleKeydown($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: MatTimepickerInput,\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: MatTimepickerInput,\n multi: true,\n },\n {\n provide: MAT_INPUT_VALUE_ACCESSOR,\n useExisting: MatTimepickerInput,\n },\n ],\n})\nexport class MatTimepickerInput<D> implements ControlValueAccessor, Validator, OnDestroy {\n private _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private _document = inject(DOCUMENT);\n private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\n private _dateFormats = inject(MAT_DATE_FORMATS, {optional: true})!;\n private _formField = inject(MAT_FORM_FIELD, {optional: true});\n\n private _onChange: ((value: any) => void) | undefined;\n private _onTouched: (() => void) | undefined;\n private _validatorOnChange: (() => void) | undefined;\n private _accessorDisabled = signal(false);\n private _localeSubscription: Subscription;\n private _timepickerSubscription: OutputRefSubscription | undefined;\n private _validator: ValidatorFn;\n private _lastValueValid = true;\n private _lastValidDate: D | null = null;\n\n /** Value of the `aria-activedescendant` attribute. */\n protected readonly _ariaActiveDescendant = computed(() => {\n const timepicker = this.timepicker();\n const isOpen = timepicker.isOpen();\n const activeDescendant = timepicker.activeDescendant();\n return isOpen && activeDescendant ? activeDescendant : null;\n });\n\n /** Value of the `aria-expanded` attribute. */\n protected readonly _ariaExpanded = computed(() => this.timepicker().isOpen() + '');\n\n /** Value of the `aria-controls` attribute. */\n protected readonly _ariaControls = computed(() => {\n const timepicker = this.timepicker();\n return timepicker.isOpen() ? timepicker.panelId : null;\n });\n\n /** Current value of the input. */\n readonly value: ModelSignal<D | null> = model<D | null>(null);\n\n /** Timepicker that the input is associated with. */\n readonly timepicker: InputSignal<MatTimepicker<D>> = input.required<MatTimepicker<D>>({\n alias: 'matTimepicker',\n });\n\n /**\n * Minimum time that can be selected or typed in. Can be either\n * a date object (only time will be used) or a valid time string.\n */\n readonly min: InputSignalWithTransform<D | null, unknown> = input(null, {\n alias: 'matTimepickerMin',\n transform: (value: unknown) => this._transformDateInput<D>(value),\n });\n\n /**\n * Maximum time that can be selected or typed in. Can be either\n * a date object (only time will be used) or a valid time string.\n */\n readonly max: InputSignalWithTransform<D | null, unknown> = input(null, {\n alias: 'matTimepickerMax',\n transform: (value: unknown) => this._transformDateInput<D>(value),\n });\n\n /** Whether the input is disabled. */\n readonly disabled: Signal<boolean> = computed(\n () => this.disabledInput() || this._accessorDisabled(),\n );\n\n /**\n * Whether the input should be disabled through the template.\n * @docs-private\n */\n readonly disabledInput: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n alias: 'disabled',\n });\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n validateAdapter(this._dateAdapter, this._dateFormats);\n }\n\n this._validator = this._getValidator();\n this._respondToValueChanges();\n this._respondToMinMaxChanges();\n this._registerTimepicker();\n this._localeSubscription = this._dateAdapter.localeChanges.subscribe(() => {\n if (!this._hasFocus()) {\n this._formatValue(this.value());\n }\n });\n\n // Bind the click listener manually to the overlay origin, because we want the entire\n // form field to be clickable, if the timepicker is used in `mat-form-field`.\n this.getOverlayOrigin().nativeElement.addEventListener('click', this._handleClick);\n }\n\n /**\n * Implemented as a part of `ControlValueAccessor`.\n * @docs-private\n */\n writeValue(value: any): void {\n this.value.set(this._dateAdapter.getValidDateOrNull(value));\n }\n\n /**\n * Implemented as a part of `ControlValueAccessor`.\n * @docs-private\n */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Implemented as a part of `ControlValueAccessor`.\n * @docs-private\n */\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n /**\n * Implemented as a part of `ControlValueAccessor`.\n * @docs-private\n */\n setDisabledState(isDisabled: boolean): void {\n this._accessorDisabled.set(isDisabled);\n }\n\n /**\n * Implemented as a part of `Validator`.\n * @docs-private\n */\n validate(control: AbstractControl): ValidationErrors | null {\n return this._validator(control);\n }\n\n /**\n * Implemented as a part of `Validator`.\n * @docs-private\n */\n registerOnValidatorChange(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n /** Gets the element to which the timepicker popup should be attached. */\n getOverlayOrigin(): ElementRef<HTMLElement> {\n return this._formField?.getConnectedOverlayOrigin() || this._elementRef;\n }\n\n /** Focuses the input. */\n focus(): void {\n this._elementRef.nativeElement.focus();\n }\n\n ngOnDestroy(): void {\n this.getOverlayOrigin().nativeElement.removeEventListener('click', this._handleClick);\n this._timepickerSubscription?.unsubscribe();\n this._localeSubscription.unsubscribe();\n }\n\n /** Gets the ID of the input's label. */\n _getLabelId(): string | null {\n return this._formField?.getLabelId() || null;\n }\n\n /** Handles clicks on the input or the containing form field. */\n private _handleClick = (): void => {\n this.timepicker().open();\n };\n\n /** Handles the `input` event. */\n protected _handleInput(value: string) {\n const currentValue = this.value();\n const date = this._dateAdapter.parseTime(value, this._dateFormats.parse.timeInput);\n const hasChanged = !this._dateAdapter.sameTime(date, currentValue);\n\n if (!date || hasChanged || !!(value && !currentValue)) {\n // We need to fire the CVA change event for all nulls, otherwise the validators won't run.\n this._assignUserSelection(date, true);\n } else {\n // Call the validator even if the value hasn't changed since\n // some fields change depending on what the user has entered.\n this._validatorOnChange?.();\n }\n }\n\n /** Handles the `blur` event. */\n protected _handleBlur() {\n const value = this.value();\n\n // Only reformat on blur so the value doesn't change while the user is interacting.\n if (value && this._isValid(value)) {\n this._formatValue(value);\n }\n\n this._onTouched?.();\n }\n\n /** Handles the `keydown` event. */\n protected _handleKeydown(event: KeyboardEvent) {\n // All keyboard events while open are handled through the timepicker.\n if (this.timepicker().isOpen()) {\n return;\n }\n\n if (event.keyCode === ESCAPE && !hasModifierKey(event) && this.value() !== null) {\n event.preventDefault();\n this.value.set(null);\n this._formatValue(null);\n } else if ((event.keyCode === DOWN_ARROW || event.keyCode === UP_ARROW) && !this.disabled()) {\n event.preventDefault();\n this.timepicker().open();\n }\n }\n\n /** Sets up the code that watches for changes in the value and adjusts the input. */\n private _respondToValueChanges(): void {\n effect(() => {\n const value = this._dateAdapter.deserialize(this.value());\n const wasValid = this._lastValueValid;\n this._lastValueValid = this._isValid(value);\n\n // Reformat the value if it changes while the user isn't interacting.\n if (!this._hasFocus()) {\n this._formatValue(value);\n }\n\n if (value && this._lastValueValid) {\n this._lastValidDate = value;\n }\n\n // Trigger the validator if the state changed.\n if (wasValid !== this._lastValueValid) {\n this._validatorOnChange?.();\n }\n });\n }\n\n /** Sets up the logic that registers the input with the timepicker. */\n private _registerTimepicker(): void {\n effect(() => {\n const timepicker = this.timepicker();\n timepicker.registerInput(this);\n timepicker.closed.subscribe(() => this._onTouched?.());\n timepicker.selected.subscribe(({value}) => {\n if (!this._dateAdapter.sameTime(value, this.value())) {\n this._assignUserSelection(value, true);\n this._formatValue(value);\n }\n });\n });\n }\n\n /** Sets up the logic that adjusts the input if the min/max changes. */\n private _respondToMinMaxChanges(): void {\n effect(() => {\n // Read the min/max so the effect knows when to fire.\n this.min();\n this.max();\n this._validatorOnChange?.();\n });\n }\n\n /**\n * Assigns a value set by the user to the input's model.\n * @param selection Time selected by the user that should be assigned.\n * @param propagateToAccessor Whether the value should be propagated to the ControlValueAccessor.\n */\n private _assignUserSelection(selection: D | null, propagateToAccessor: boolean) {\n if (selection == null || !this._isValid(selection)) {\n this.value.set(selection);\n } else {\n // If a datepicker and timepicker are writing to the same object and the user enters an\n // invalid time into the timepicker, we may end up clearing their selection from the\n // datepicker. If the user enters a valid time afterwards, the datepicker's selection will\n // have been lost. This logic restores the previously-valid date and sets its time to\n // the newly-selected time.\n const adapter = this._dateAdapter;\n const target = adapter.getValidDateOrNull(this._lastValidDate || this.value());\n const hours = adapter.getHours(selection);\n const minutes = adapter.getMinutes(selection);\n const seconds = adapter.getSeconds(selection);\n this.value.set(target ? adapter.setTime(target, hours, minutes, seconds) : selection);\n }\n\n if (propagateToAccessor) {\n this._onChange?.(this.value());\n }\n }\n\n /** Formats the current value and assigns it to the input. */\n private _formatValue(value: D | null): void {\n value = this._dateAdapter.getValidDateOrNull(value);\n this._elementRef.nativeElement.value =\n value == null ? '' : this._dateAdapter.format(value, this._dateFormats.display.timeInput);\n }\n\n /** Checks whether a value is valid. */\n private _isValid(value: D | null): boolean {\n return !value || this._dateAdapter.isValid(value);\n }\n\n /** Transforms an arbitrary value into a value that can be assigned to a date-based input. */\n private _transformDateInput<D>(value: unknown): D | null {\n const date =\n typeof value === 'string'\n ? this._dateAdapter.parseTime(value, this._dateFormats.parse.timeInput)\n : this._dateAdapter.deserialize(value);\n return date && this._dateAdapter.isValid(date) ? (date as D) : null;\n }\n\n /** Whether the input is currently focused. */\n private _hasFocus(): boolean {\n return this._document.activeElement === this._elementRef.nativeElement;\n }\n\n /** Gets a function that can be used to validate the input. */\n private _getValidator(): ValidatorFn {\n return Validators.compose([\n () =>\n this._lastValueValid\n ? null\n : {'matTimepickerParse': {'text': this._elementRef.nativeElement.value}},\n control => {\n const controlValue = this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(control.value),\n );\n const min = this.min();\n return !min || !controlValue || this._dateAdapter.compareTime(min, controlValue) <= 0\n ? null\n : {'matTimepickerMin': {'min': min, 'actual': controlValue}};\n },\n control => {\n const controlValue = this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(control.value),\n );\n const max = this.max();\n return !max || !controlValue || this._dateAdapter.compareTime(max, controlValue) >= 0\n ? null\n : {'matTimepickerMax': {'max': max, 'actual': controlValue}};\n },\n ])!;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n HostAttributeToken,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n ViewEncapsulation,\n} from '@angular/core';\nimport {MatIconButton} from '@angular/material/button';\nimport {MAT_TIMEPICKER_CONFIG} from './util';\nimport type {MatTimepicker} from './timepicker';\n\n/** Button that can be used to open a `mat-timepicker`. */\n@Component({\n selector: 'mat-timepicker-toggle',\n templateUrl: 'timepicker-toggle.html',\n host: {\n 'class': 'mat-timepicker-toggle',\n '[attr.tabindex]': 'null',\n // Bind the `click` on the host, rather than the inner `button`, so that we can call\n // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\n // it so that the input doesn't get focused automatically by the form field (See #21836).\n '(click)': '_open($event)',\n },\n exportAs: 'matTimepickerToggle',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconButton],\n})\nexport class MatTimepickerToggle<D> {\n private _defaultConfig = inject(MAT_TIMEPICKER_CONFIG, {optional: true});\n private _defaultTabIndex = (() => {\n const value = inject(new HostAttributeToken('tabindex'), {optional: true});\n const parsed = Number(value);\n return isNaN(parsed) ? null : parsed;\n })();\n\n /** Timepicker instance that the button will toggle. */\n readonly timepicker: InputSignal<MatTimepicker<D>> = input.required<MatTimepicker<D>>({\n alias: 'for',\n });\n\n /** Screen-reader label for the button. */\n readonly ariaLabel = input<string | undefined>(undefined, {\n alias: 'aria-label',\n });\n\n /** Whether the toggle button is disabled. */\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n alias: 'disabled',\n });\n\n /** Tabindex for the toggle. */\n readonly tabIndex: InputSignal<number | null> = input(this._defaultTabIndex);\n\n /** Whether ripples on the toggle should be disabled. */\n readonly disableRipple: InputSignalWithTransform<boolean, unknown> = input(\n this._defaultConfig?.disableRipple ?? false,\n {transform: booleanAttribute},\n );\n\n /** Opens the connected timepicker. */\n protected _open(event: Event): void {\n if (this.timepicker() && !this.disabled()) {\n this.timepicker().open();\n event.stopPropagation();\n }\n }\n}\n","<button\n mat-icon-button\n type=\"button\"\n aria-haspopup=\"listbox\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-expanded]=\"timepicker().isOpen()\"\n [attr.tabindex]=\"disabled() ? -1 : tabIndex()\"\n [disabled]=\"disabled()\"\n [disableRipple]=\"disableRipple()\">\n\n <ng-content select=\"[matTimepickerToggleIcon]\">\n <svg\n class=\"mat-timepicker-toggle-default-icon\"\n height=\"24px\"\n width=\"24px\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z\"/>\n </svg>\n </ng-content>\n</button>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {MatTimepicker} from './timepicker';\nimport {MatTimepickerInput} from './timepicker-input';\nimport {MatTimepickerToggle} from './timepicker-toggle';\n\n@NgModule({\n imports: [MatTimepicker, MatTimepickerInput, MatTimepickerToggle],\n exports: [CdkScrollableModule, MatTimepicker, MatTimepickerInput, MatTimepickerToggle],\n})\nexport class MatTimepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"timepicker.mjs","sources":["../../../../../../src/material/timepicker/util.ts","../../../../../../src/material/timepicker/timepicker.ts","../../../../../../src/material/timepicker/timepicker.html","../../../../../../src/material/timepicker/timepicker-input.ts","../../../../../../src/material/timepicker/timepicker-toggle.ts","../../../../../../src/material/timepicker/timepicker-toggle.html","../../../../../../src/material/timepicker/timepicker-module.ts","../../../../../../src/material/timepicker/timepicker_public_index.ts"],"sourcesContent":["/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {InjectionToken} from '@angular/core';\nimport {DateAdapter, MatDateFormats} from '@angular/material/core';\n\n/** Pattern that interval strings have to match. */\nconst INTERVAL_PATTERN = /^(\\d*\\.?\\d+)\\s*(h|hour|hours|m|min|minute|minutes|s|second|seconds)?$/i;\n\n/**\n * Object that can be used to configure the default options for the timepicker component.\n */\nexport interface MatTimepickerConfig {\n /** Default interval for all time pickers. */\n interval?: string | number;\n\n /** Whether ripples inside the timepicker should be disabled by default. */\n disableRipple?: boolean;\n}\n\n/**\n * Injection token that can be used to configure the default options for the timepicker component.\n */\nexport const MAT_TIMEPICKER_CONFIG = new InjectionToken<MatTimepickerConfig>(\n 'MAT_TIMEPICKER_CONFIG',\n);\n\n/**\n * Time selection option that can be displayed within a `mat-timepicker`.\n */\nexport interface MatTimepickerOption<D = unknown> {\n /** Date value of the option. */\n value: D;\n\n /** Label to show to the user. */\n label: string;\n}\n\n/** Parses an interval value into seconds. */\nexport function parseInterval(value: number | string | null): number | null {\n let result: number;\n\n if (value === null) {\n return null;\n } else if (typeof value === 'number') {\n result = value;\n } else {\n if (value.trim().length === 0) {\n return null;\n }\n\n const parsed = value.match(INTERVAL_PATTERN);\n const amount = parsed ? parseFloat(parsed[1]) : null;\n const unit = parsed?.[2]?.toLowerCase() || null;\n\n if (!parsed || amount === null || isNaN(amount)) {\n return null;\n }\n\n if (unit === 'h' || unit === 'hour' || unit === 'hours') {\n result = amount * 3600;\n } else if (unit === 'm' || unit === 'min' || unit === 'minute' || unit === 'minutes') {\n result = amount * 60;\n } else {\n result = amount;\n }\n }\n\n return result;\n}\n\n/**\n * Generates the options to show in a timepicker.\n * @param adapter Date adapter to be used to generate the options.\n * @param formats Formatting config to use when displaying the options.\n * @param min Time from which to start generating the options.\n * @param max Time at which to stop generating the options.\n * @param interval Amount of seconds between each option.\n */\nexport function generateOptions<D>(\n adapter: DateAdapter<D>,\n formats: MatDateFormats,\n min: D,\n max: D,\n interval: number,\n): MatTimepickerOption<D>[] {\n const options: MatTimepickerOption<D>[] = [];\n let current = adapter.compareTime(min, max) < 1 ? min : max;\n\n while (\n adapter.sameDate(current, min) &&\n adapter.compareTime(current, max) < 1 &&\n adapter.isValid(current)\n ) {\n options.push({value: current, label: adapter.format(current, formats.display.timeOptionLabel)});\n current = adapter.addSeconds(current, interval);\n }\n\n return options;\n}\n\n/** Checks whether a date adapter is set up correctly for use with the timepicker. */\nexport function validateAdapter(\n adapter: DateAdapter<unknown> | null,\n formats: MatDateFormats | null,\n) {\n function missingAdapterError(provider: string) {\n return Error(\n `MatTimepicker: No provider found for ${provider}. You must add one of the following ` +\n `to your app config: provideNativeDateAdapter, provideDateFnsAdapter, ` +\n `provideLuxonDateAdapter, provideMomentDateAdapter, or provide a custom implementation.`,\n );\n }\n\n if (!adapter) {\n throw missingAdapterError('DateAdapter');\n }\n\n if (!formats) {\n throw missingAdapterError('MAT_DATE_FORMATS');\n }\n\n if (\n formats.display.timeInput === undefined ||\n formats.display.timeOptionLabel === undefined ||\n formats.parse.timeInput === undefined\n ) {\n throw new Error(\n 'MatTimepicker: Incomplete `MAT_DATE_FORMATS` has been provided. ' +\n '`MAT_DATE_FORMATS` must provide `display.timeInput`, `display.timeOptionLabel` ' +\n 'and `parse.timeInput` formats in order to be compatible with MatTimepicker.',\n );\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n afterNextRender,\n AfterRenderRef,\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n effect,\n ElementRef,\n inject,\n Injector,\n input,\n InputSignal,\n InputSignalWithTransform,\n OnDestroy,\n output,\n OutputEmitterRef,\n Signal,\n signal,\n TemplateRef,\n untracked,\n viewChild,\n viewChildren,\n ViewContainerRef,\n ViewEncapsulation,\n} from '@angular/core';\nimport {animate, group, state, style, transition, trigger} from '@angular/animations';\nimport {\n DateAdapter,\n MAT_DATE_FORMATS,\n MAT_OPTION_PARENT_COMPONENT,\n MatOption,\n MatOptionParentComponent,\n} from '@angular/material/core';\nimport {Directionality} from '@angular/cdk/bidi';\nimport {Overlay, OverlayRef} from '@angular/cdk/overlay';\nimport {TemplatePortal} from '@angular/cdk/portal';\nimport {_getEventTarget} from '@angular/cdk/platform';\nimport {ENTER, ESCAPE, hasModifierKey, TAB} from '@angular/cdk/keycodes';\nimport {_IdGenerator, ActiveDescendantKeyManager} from '@angular/cdk/a11y';\nimport type {MatTimepickerInput} from './timepicker-input';\nimport {\n generateOptions,\n MAT_TIMEPICKER_CONFIG,\n MatTimepickerOption,\n parseInterval,\n validateAdapter,\n} from './util';\nimport {Subscription} from 'rxjs';\n\n/** Event emitted when a value is selected in the timepicker. */\nexport interface MatTimepickerSelected<D> {\n value: D;\n source: MatTimepicker<D>;\n}\n\n/**\n * Renders out a listbox that can be used to select a time of day.\n * Intended to be used together with `MatTimepickerInput`.\n */\n@Component({\n selector: 'mat-timepicker',\n exportAs: 'matTimepicker',\n templateUrl: 'timepicker.html',\n styleUrl: 'timepicker.css',\n changeDetection: ChangeDetectionStrategy.OnPush,\n encapsulation: ViewEncapsulation.None,\n imports: [MatOption],\n providers: [\n {\n provide: MAT_OPTION_PARENT_COMPONENT,\n useExisting: MatTimepicker,\n },\n ],\n animations: [\n trigger('panel', [\n state('void', style({opacity: 0, transform: 'scaleY(0.8)'})),\n transition(':enter', [\n group([\n animate('0.03s linear', style({opacity: 1})),\n animate('0.12s cubic-bezier(0, 0, 0.2, 1)', style({transform: 'scaleY(1)'})),\n ]),\n ]),\n transition(':leave', [animate('0.075s linear', style({opacity: 0}))]),\n ]),\n ],\n})\nexport class MatTimepicker<D> implements OnDestroy, MatOptionParentComponent {\n private _overlay = inject(Overlay);\n private _dir = inject(Directionality, {optional: true});\n private _viewContainerRef = inject(ViewContainerRef);\n private _injector = inject(Injector);\n private _defaultConfig = inject(MAT_TIMEPICKER_CONFIG, {optional: true});\n private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\n private _dateFormats = inject(MAT_DATE_FORMATS, {optional: true})!;\n\n private _isOpen = signal(false);\n private _activeDescendant = signal<string | null>(null);\n\n private _input = signal<MatTimepickerInput<D> | null>(null);\n private _overlayRef: OverlayRef | null = null;\n private _portal: TemplatePortal<unknown> | null = null;\n private _optionsCacheKey: string | null = null;\n private _localeChanges: Subscription;\n private _onOpenRender: AfterRenderRef | null = null;\n\n protected _panelTemplate = viewChild.required<TemplateRef<unknown>>('panelTemplate');\n protected _timeOptions: readonly MatTimepickerOption<D>[] = [];\n protected _options = viewChildren(MatOption);\n\n private _keyManager = new ActiveDescendantKeyManager(this._options, this._injector)\n .withHomeAndEnd(true)\n .withPageUpDown(true)\n .withVerticalOrientation(true);\n\n /**\n * Interval between each option in the timepicker. The value can either be an amount of\n * seconds (e.g. 90) or a number with a unit (e.g. 45m). Supported units are `s` for seconds,\n * `m` for minutes or `h` for hours.\n */\n readonly interval: InputSignalWithTransform<number | null, number | string | null> = input(\n parseInterval(this._defaultConfig?.interval || null),\n {transform: parseInterval},\n );\n\n /**\n * Array of pre-defined options that the user can select from, as an alternative to using the\n * `interval` input. An error will be thrown if both `options` and `interval` are specified.\n */\n readonly options: InputSignal<readonly MatTimepickerOption<D>[] | null> = input<\n readonly MatTimepickerOption<D>[] | null\n >(null);\n\n /** Whether the timepicker is open. */\n readonly isOpen: Signal<boolean> = this._isOpen.asReadonly();\n\n /** Emits when the user selects a time. */\n readonly selected: OutputEmitterRef<MatTimepickerSelected<D>> = output();\n\n /** Emits when the timepicker is opened. */\n readonly opened: OutputEmitterRef<void> = output();\n\n /** Emits when the timepicker is closed. */\n readonly closed: OutputEmitterRef<void> = output();\n\n /** ID of the active descendant option. */\n readonly activeDescendant: Signal<string | null> = this._activeDescendant.asReadonly();\n\n /** Unique ID of the timepicker's panel */\n readonly panelId: string = inject(_IdGenerator).getId('mat-timepicker-panel-');\n\n /** Whether ripples within the timepicker should be disabled. */\n readonly disableRipple: InputSignalWithTransform<boolean, unknown> = input(\n this._defaultConfig?.disableRipple ?? false,\n {\n transform: booleanAttribute,\n },\n );\n\n /** ARIA label for the timepicker panel. */\n readonly ariaLabel: InputSignal<string | null> = input<string | null>(null, {\n alias: 'aria-label',\n });\n\n /** ID of the label element for the timepicker panel. */\n readonly ariaLabelledby: InputSignal<string | null> = input<string | null>(null, {\n alias: 'aria-labelledby',\n });\n\n /** Whether the timepicker is currently disabled. */\n readonly disabled: Signal<boolean> = computed(() => !!this._input()?.disabled());\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n validateAdapter(this._dateAdapter, this._dateFormats);\n\n effect(() => {\n const options = this.options();\n const interval = this.interval();\n\n if (options !== null && interval !== null) {\n throw new Error(\n 'Cannot specify both the `options` and `interval` inputs at the same time',\n );\n } else if (options?.length === 0) {\n throw new Error('Value of `options` input cannot be an empty array');\n }\n });\n }\n\n // Since the panel ID is static, we can set it once without having to maintain a host binding.\n const element = inject<ElementRef<HTMLElement>>(ElementRef);\n element.nativeElement.setAttribute('mat-timepicker-panel-id', this.panelId);\n this._handleLocaleChanges();\n this._handleInputStateChanges();\n this._keyManager.change.subscribe(() =>\n this._activeDescendant.set(this._keyManager.activeItem?.id || null),\n );\n }\n\n /** Opens the timepicker. */\n open(): void {\n const input = this._input();\n\n if (!input) {\n return;\n }\n\n // Focus should already be on the input, but this call is in case the timepicker is opened\n // programmatically. We need to call this even if the timepicker is already open, because\n // the user might be clicking the toggle.\n input.focus();\n\n if (this._isOpen()) {\n return;\n }\n\n this._isOpen.set(true);\n this._generateOptions();\n const overlayRef = this._getOverlayRef();\n overlayRef.updateSize({width: input.getOverlayOrigin().nativeElement.offsetWidth});\n this._portal ??= new TemplatePortal(this._panelTemplate(), this._viewContainerRef);\n overlayRef.attach(this._portal);\n this._onOpenRender?.destroy();\n this._onOpenRender = afterNextRender(\n () => {\n const options = this._options();\n this._syncSelectedState(input.value(), options, options[0]);\n this._onOpenRender = null;\n },\n {injector: this._injector},\n );\n\n this.opened.emit();\n }\n\n /** Closes the timepicker. */\n close(): void {\n if (this._isOpen()) {\n this._isOpen.set(false);\n this._overlayRef?.detach();\n this.closed.emit();\n }\n }\n\n /** Registers an input with the timepicker. */\n registerInput(input: MatTimepickerInput<D>): void {\n const currentInput = this._input();\n\n if (currentInput && input !== currentInput && (typeof ngDevMode === 'undefined' || ngDevMode)) {\n throw new Error('MatTimepicker can only be registered with one input at a time');\n }\n\n this._input.set(input);\n }\n\n ngOnDestroy(): void {\n this._keyManager.destroy();\n this._localeChanges.unsubscribe();\n this._onOpenRender?.destroy();\n this._overlayRef?.dispose();\n }\n\n /** Selects a specific time value. */\n protected _selectValue(value: D) {\n this.close();\n this.selected.emit({value, source: this});\n this._input()?.focus();\n }\n\n /** Gets the value of the `aria-labelledby` attribute. */\n protected _getAriaLabelledby(): string | null {\n if (this.ariaLabel()) {\n return null;\n }\n return this.ariaLabelledby() || this._input()?._getLabelId() || null;\n }\n\n /** Creates an overlay reference for the timepicker panel. */\n private _getOverlayRef(): OverlayRef {\n if (this._overlayRef) {\n return this._overlayRef;\n }\n\n const positionStrategy = this._overlay\n .position()\n .flexibleConnectedTo(this._input()!.getOverlayOrigin())\n .withFlexibleDimensions(false)\n .withPush(false)\n .withTransformOriginOn('.mat-timepicker-panel')\n .withPositions([\n {\n originX: 'start',\n originY: 'bottom',\n overlayX: 'start',\n overlayY: 'top',\n },\n {\n originX: 'start',\n originY: 'top',\n overlayX: 'start',\n overlayY: 'bottom',\n panelClass: 'mat-timepicker-above',\n },\n ]);\n\n this._overlayRef = this._overlay.create({\n positionStrategy,\n scrollStrategy: this._overlay.scrollStrategies.reposition(),\n direction: this._dir || 'ltr',\n hasBackdrop: false,\n });\n\n this._overlayRef.keydownEvents().subscribe(event => {\n this._handleKeydown(event);\n });\n\n this._overlayRef.outsidePointerEvents().subscribe(event => {\n const target = _getEventTarget(event) as HTMLElement;\n const origin = this._input()?.getOverlayOrigin().nativeElement;\n\n if (target && origin && target !== origin && !origin.contains(target)) {\n this.close();\n }\n });\n\n return this._overlayRef;\n }\n\n /** Generates the list of options from which the user can select.. */\n private _generateOptions(): void {\n // Default the interval to 30 minutes.\n const interval = this.interval() ?? 30 * 60;\n const options = this.options();\n\n if (options !== null) {\n this._timeOptions = options;\n } else {\n const input = this._input();\n const adapter = this._dateAdapter;\n const timeFormat = this._dateFormats.display.timeInput;\n const min = input?.min() || adapter.setTime(adapter.today(), 0, 0, 0);\n const max = input?.max() || adapter.setTime(adapter.today(), 23, 59, 0);\n const cacheKey =\n interval + '/' + adapter.format(min, timeFormat) + '/' + adapter.format(max, timeFormat);\n\n // Don't re-generate the options if the inputs haven't changed.\n if (cacheKey !== this._optionsCacheKey) {\n this._optionsCacheKey = cacheKey;\n this._timeOptions = generateOptions(adapter, this._dateFormats, min, max, interval);\n }\n }\n }\n\n /**\n * Synchronizes the internal state of the component based on a specific selected date.\n * @param value Currently selected date.\n * @param options Options rendered out in the timepicker.\n * @param fallback Option to set as active if no option is selected.\n */\n private _syncSelectedState(\n value: D | null,\n options: readonly MatOption[],\n fallback: MatOption | null,\n ): void {\n let hasSelected = false;\n\n for (const option of options) {\n if (value && this._dateAdapter.sameTime(option.value, value)) {\n option.select(false);\n scrollOptionIntoView(option, 'center');\n untracked(() => this._keyManager.setActiveItem(option));\n hasSelected = true;\n } else {\n option.deselect(false);\n }\n }\n\n // If no option was selected, we need to reset the key manager since\n // it might be holding onto an option that no longer exists.\n if (!hasSelected) {\n if (fallback) {\n untracked(() => this._keyManager.setActiveItem(fallback));\n scrollOptionIntoView(fallback, 'center');\n } else {\n untracked(() => this._keyManager.setActiveItem(-1));\n }\n }\n }\n\n /** Handles keyboard events while the overlay is open. */\n private _handleKeydown(event: KeyboardEvent): void {\n const keyCode = event.keyCode;\n\n if (keyCode === TAB) {\n this.close();\n } else if (keyCode === ESCAPE && !hasModifierKey(event)) {\n event.preventDefault();\n this.close();\n } else if (keyCode === ENTER) {\n event.preventDefault();\n\n if (this._keyManager.activeItem) {\n this._selectValue(this._keyManager.activeItem.value);\n } else {\n this.close();\n }\n } else {\n const previousActive = this._keyManager.activeItem;\n this._keyManager.onKeydown(event);\n const currentActive = this._keyManager.activeItem;\n\n if (currentActive && currentActive !== previousActive) {\n scrollOptionIntoView(currentActive, 'nearest');\n }\n }\n }\n\n /** Sets up the logic that updates the timepicker when the locale changes. */\n private _handleLocaleChanges(): void {\n // Re-generate the options list if the locale changes.\n this._localeChanges = this._dateAdapter.localeChanges.subscribe(() => {\n this._optionsCacheKey = null;\n\n if (this.isOpen()) {\n this._generateOptions();\n }\n });\n }\n\n /**\n * Sets up the logic that updates the timepicker when the state of the connected input changes.\n */\n private _handleInputStateChanges(): void {\n effect(() => {\n const input = this._input();\n const options = this._options();\n\n if (this._isOpen() && input) {\n this._syncSelectedState(input.value(), options, null);\n }\n });\n }\n}\n\n/**\n * Scrolls an option into view.\n * @param option Option to be scrolled into view.\n * @param position Position to which to align the option relative to the scrollable container.\n */\nfunction scrollOptionIntoView(option: MatOption, position: ScrollLogicalPosition) {\n option._getHostElement().scrollIntoView({block: position, inline: position});\n}\n","<ng-template #panelTemplate>\n <div\n role=\"listbox\"\n class=\"mat-timepicker-panel\"\n [attr.aria-label]=\"ariaLabel() || null\"\n [attr.aria-labelledby]=\"_getAriaLabelledby()\"\n [id]=\"panelId\"\n @panel>\n @for (option of _timeOptions; track option.value) {\n <mat-option\n [value]=\"option.value\"\n (onSelectionChange)=\"_selectValue(option.value)\">{{option.label}}</mat-option>\n }\n </div>\n</ng-template>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n booleanAttribute,\n computed,\n Directive,\n effect,\n ElementRef,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n model,\n ModelSignal,\n OnDestroy,\n OutputRefSubscription,\n Signal,\n signal,\n} from '@angular/core';\nimport {DateAdapter, MAT_DATE_FORMATS} from '@angular/material/core';\nimport {\n AbstractControl,\n ControlValueAccessor,\n NG_VALIDATORS,\n NG_VALUE_ACCESSOR,\n ValidationErrors,\n Validator,\n ValidatorFn,\n Validators,\n} from '@angular/forms';\nimport {MAT_FORM_FIELD} from '@angular/material/form-field';\nimport {MatTimepicker} from './timepicker';\nimport {MAT_INPUT_VALUE_ACCESSOR} from '@angular/material/input';\nimport {Subscription} from 'rxjs';\nimport {DOWN_ARROW, ESCAPE, hasModifierKey, UP_ARROW} from '@angular/cdk/keycodes';\nimport {validateAdapter} from './util';\nimport {DOCUMENT} from '@angular/common';\n\n/**\n * Input that can be used to enter time and connect to a `mat-timepicker`.\n */\n@Directive({\n selector: 'input[matTimepicker]',\n exportAs: 'matTimepickerInput',\n host: {\n 'class': 'mat-timepicker-input',\n 'role': 'combobox',\n 'type': 'text',\n 'aria-haspopup': 'listbox',\n '[attr.aria-activedescendant]': '_ariaActiveDescendant()',\n '[attr.aria-expanded]': '_ariaExpanded()',\n '[attr.aria-controls]': '_ariaControls()',\n '[attr.mat-timepicker-id]': 'timepicker()?.panelId',\n '[disabled]': 'disabled()',\n '(blur)': '_handleBlur()',\n '(input)': '_handleInput($event.target.value)',\n '(keydown)': '_handleKeydown($event)',\n },\n providers: [\n {\n provide: NG_VALUE_ACCESSOR,\n useExisting: MatTimepickerInput,\n multi: true,\n },\n {\n provide: NG_VALIDATORS,\n useExisting: MatTimepickerInput,\n multi: true,\n },\n {\n provide: MAT_INPUT_VALUE_ACCESSOR,\n useExisting: MatTimepickerInput,\n },\n ],\n})\nexport class MatTimepickerInput<D> implements ControlValueAccessor, Validator, OnDestroy {\n private _elementRef = inject<ElementRef<HTMLInputElement>>(ElementRef);\n private _document = inject(DOCUMENT);\n private _dateAdapter = inject<DateAdapter<D>>(DateAdapter, {optional: true})!;\n private _dateFormats = inject(MAT_DATE_FORMATS, {optional: true})!;\n private _formField = inject(MAT_FORM_FIELD, {optional: true});\n\n private _onChange: ((value: any) => void) | undefined;\n private _onTouched: (() => void) | undefined;\n private _validatorOnChange: (() => void) | undefined;\n private _accessorDisabled = signal(false);\n private _localeSubscription: Subscription;\n private _timepickerSubscription: OutputRefSubscription | undefined;\n private _validator: ValidatorFn;\n private _lastValueValid = true;\n private _lastValidDate: D | null = null;\n\n /** Value of the `aria-activedescendant` attribute. */\n protected readonly _ariaActiveDescendant = computed(() => {\n const timepicker = this.timepicker();\n const isOpen = timepicker.isOpen();\n const activeDescendant = timepicker.activeDescendant();\n return isOpen && activeDescendant ? activeDescendant : null;\n });\n\n /** Value of the `aria-expanded` attribute. */\n protected readonly _ariaExpanded = computed(() => this.timepicker().isOpen() + '');\n\n /** Value of the `aria-controls` attribute. */\n protected readonly _ariaControls = computed(() => {\n const timepicker = this.timepicker();\n return timepicker.isOpen() ? timepicker.panelId : null;\n });\n\n /** Current value of the input. */\n readonly value: ModelSignal<D | null> = model<D | null>(null);\n\n /** Timepicker that the input is associated with. */\n readonly timepicker: InputSignal<MatTimepicker<D>> = input.required<MatTimepicker<D>>({\n alias: 'matTimepicker',\n });\n\n /**\n * Minimum time that can be selected or typed in. Can be either\n * a date object (only time will be used) or a valid time string.\n */\n readonly min: InputSignalWithTransform<D | null, unknown> = input(null, {\n alias: 'matTimepickerMin',\n transform: (value: unknown) => this._transformDateInput<D>(value),\n });\n\n /**\n * Maximum time that can be selected or typed in. Can be either\n * a date object (only time will be used) or a valid time string.\n */\n readonly max: InputSignalWithTransform<D | null, unknown> = input(null, {\n alias: 'matTimepickerMax',\n transform: (value: unknown) => this._transformDateInput<D>(value),\n });\n\n /** Whether the input is disabled. */\n readonly disabled: Signal<boolean> = computed(\n () => this.disabledInput() || this._accessorDisabled(),\n );\n\n /**\n * Whether the input should be disabled through the template.\n * @docs-private\n */\n readonly disabledInput: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n alias: 'disabled',\n });\n\n constructor() {\n if (typeof ngDevMode === 'undefined' || ngDevMode) {\n validateAdapter(this._dateAdapter, this._dateFormats);\n }\n\n this._validator = this._getValidator();\n this._respondToValueChanges();\n this._respondToMinMaxChanges();\n this._registerTimepicker();\n this._localeSubscription = this._dateAdapter.localeChanges.subscribe(() => {\n if (!this._hasFocus()) {\n this._formatValue(this.value());\n }\n });\n\n // Bind the click listener manually to the overlay origin, because we want the entire\n // form field to be clickable, if the timepicker is used in `mat-form-field`.\n this.getOverlayOrigin().nativeElement.addEventListener('click', this._handleClick);\n }\n\n /**\n * Implemented as a part of `ControlValueAccessor`.\n * @docs-private\n */\n writeValue(value: any): void {\n // Note that we need to deserialize here, rather than depend on the value change effect,\n // because `getValidDateOrNull` will clobber the value if it's parseable, but not created by\n // the current adapter (see #30140).\n const deserialized = this._dateAdapter.deserialize(value);\n this.value.set(this._dateAdapter.getValidDateOrNull(deserialized));\n }\n\n /**\n * Implemented as a part of `ControlValueAccessor`.\n * @docs-private\n */\n registerOnChange(fn: (value: any) => void): void {\n this._onChange = fn;\n }\n\n /**\n * Implemented as a part of `ControlValueAccessor`.\n * @docs-private\n */\n registerOnTouched(fn: () => void): void {\n this._onTouched = fn;\n }\n\n /**\n * Implemented as a part of `ControlValueAccessor`.\n * @docs-private\n */\n setDisabledState(isDisabled: boolean): void {\n this._accessorDisabled.set(isDisabled);\n }\n\n /**\n * Implemented as a part of `Validator`.\n * @docs-private\n */\n validate(control: AbstractControl): ValidationErrors | null {\n return this._validator(control);\n }\n\n /**\n * Implemented as a part of `Validator`.\n * @docs-private\n */\n registerOnValidatorChange(fn: () => void): void {\n this._validatorOnChange = fn;\n }\n\n /** Gets the element to which the timepicker popup should be attached. */\n getOverlayOrigin(): ElementRef<HTMLElement> {\n return this._formField?.getConnectedOverlayOrigin() || this._elementRef;\n }\n\n /** Focuses the input. */\n focus(): void {\n this._elementRef.nativeElement.focus();\n }\n\n ngOnDestroy(): void {\n this.getOverlayOrigin().nativeElement.removeEventListener('click', this._handleClick);\n this._timepickerSubscription?.unsubscribe();\n this._localeSubscription.unsubscribe();\n }\n\n /** Gets the ID of the input's label. */\n _getLabelId(): string | null {\n return this._formField?.getLabelId() || null;\n }\n\n /** Handles clicks on the input or the containing form field. */\n private _handleClick = (): void => {\n if (!this.disabled()) {\n this.timepicker().open();\n }\n };\n\n /** Handles the `input` event. */\n protected _handleInput(value: string) {\n const currentValue = this.value();\n const date = this._dateAdapter.parseTime(value, this._dateFormats.parse.timeInput);\n const hasChanged = !this._dateAdapter.sameTime(date, currentValue);\n\n if (!date || hasChanged || !!(value && !currentValue)) {\n // We need to fire the CVA change event for all nulls, otherwise the validators won't run.\n this._assignUserSelection(date, true);\n } else {\n // Call the validator even if the value hasn't changed since\n // some fields change depending on what the user has entered.\n this._validatorOnChange?.();\n }\n }\n\n /** Handles the `blur` event. */\n protected _handleBlur() {\n const value = this.value();\n\n // Only reformat on blur so the value doesn't change while the user is interacting.\n if (value && this._isValid(value)) {\n this._formatValue(value);\n }\n\n this._onTouched?.();\n }\n\n /** Handles the `keydown` event. */\n protected _handleKeydown(event: KeyboardEvent) {\n // All keyboard events while open are handled through the timepicker.\n if (this.timepicker().isOpen() || this.disabled()) {\n return;\n }\n\n if (event.keyCode === ESCAPE && !hasModifierKey(event) && this.value() !== null) {\n event.preventDefault();\n this.value.set(null);\n this._formatValue(null);\n } else if (event.keyCode === DOWN_ARROW || event.keyCode === UP_ARROW) {\n event.preventDefault();\n this.timepicker().open();\n }\n }\n\n /** Sets up the code that watches for changes in the value and adjusts the input. */\n private _respondToValueChanges(): void {\n effect(() => {\n const value = this._dateAdapter.deserialize(this.value());\n const wasValid = this._lastValueValid;\n this._lastValueValid = this._isValid(value);\n\n // Reformat the value if it changes while the user isn't interacting.\n if (!this._hasFocus()) {\n this._formatValue(value);\n }\n\n if (value && this._lastValueValid) {\n this._lastValidDate = value;\n }\n\n // Trigger the validator if the state changed.\n if (wasValid !== this._lastValueValid) {\n this._validatorOnChange?.();\n }\n });\n }\n\n /** Sets up the logic that registers the input with the timepicker. */\n private _registerTimepicker(): void {\n effect(() => {\n const timepicker = this.timepicker();\n timepicker.registerInput(this);\n timepicker.closed.subscribe(() => this._onTouched?.());\n timepicker.selected.subscribe(({value}) => {\n if (!this._dateAdapter.sameTime(value, this.value())) {\n this._assignUserSelection(value, true);\n this._formatValue(value);\n }\n });\n });\n }\n\n /** Sets up the logic that adjusts the input if the min/max changes. */\n private _respondToMinMaxChanges(): void {\n effect(() => {\n // Read the min/max so the effect knows when to fire.\n this.min();\n this.max();\n this._validatorOnChange?.();\n });\n }\n\n /**\n * Assigns a value set by the user to the input's model.\n * @param selection Time selected by the user that should be assigned.\n * @param propagateToAccessor Whether the value should be propagated to the ControlValueAccessor.\n */\n private _assignUserSelection(selection: D | null, propagateToAccessor: boolean) {\n if (selection == null || !this._isValid(selection)) {\n this.value.set(selection);\n } else {\n // If a datepicker and timepicker are writing to the same object and the user enters an\n // invalid time into the timepicker, we may end up clearing their selection from the\n // datepicker. If the user enters a valid time afterwards, the datepicker's selection will\n // have been lost. This logic restores the previously-valid date and sets its time to\n // the newly-selected time.\n const adapter = this._dateAdapter;\n const target = adapter.getValidDateOrNull(this._lastValidDate || this.value());\n const hours = adapter.getHours(selection);\n const minutes = adapter.getMinutes(selection);\n const seconds = adapter.getSeconds(selection);\n this.value.set(target ? adapter.setTime(target, hours, minutes, seconds) : selection);\n }\n\n if (propagateToAccessor) {\n this._onChange?.(this.value());\n }\n }\n\n /** Formats the current value and assigns it to the input. */\n private _formatValue(value: D | null): void {\n value = this._dateAdapter.getValidDateOrNull(value);\n this._elementRef.nativeElement.value =\n value == null ? '' : this._dateAdapter.format(value, this._dateFormats.display.timeInput);\n }\n\n /** Checks whether a value is valid. */\n private _isValid(value: D | null): boolean {\n return !value || this._dateAdapter.isValid(value);\n }\n\n /** Transforms an arbitrary value into a value that can be assigned to a date-based input. */\n private _transformDateInput<D>(value: unknown): D | null {\n const date =\n typeof value === 'string'\n ? this._dateAdapter.parseTime(value, this._dateFormats.parse.timeInput)\n : this._dateAdapter.deserialize(value);\n return date && this._dateAdapter.isValid(date) ? (date as D) : null;\n }\n\n /** Whether the input is currently focused. */\n private _hasFocus(): boolean {\n return this._document.activeElement === this._elementRef.nativeElement;\n }\n\n /** Gets a function that can be used to validate the input. */\n private _getValidator(): ValidatorFn {\n return Validators.compose([\n () =>\n this._lastValueValid\n ? null\n : {'matTimepickerParse': {'text': this._elementRef.nativeElement.value}},\n control => {\n const controlValue = this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(control.value),\n );\n const min = this.min();\n return !min || !controlValue || this._dateAdapter.compareTime(min, controlValue) <= 0\n ? null\n : {'matTimepickerMin': {'min': min, 'actual': controlValue}};\n },\n control => {\n const controlValue = this._dateAdapter.getValidDateOrNull(\n this._dateAdapter.deserialize(control.value),\n );\n const max = this.max();\n return !max || !controlValue || this._dateAdapter.compareTime(max, controlValue) >= 0\n ? null\n : {'matTimepickerMax': {'max': max, 'actual': controlValue}};\n },\n ])!;\n }\n}\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {\n booleanAttribute,\n ChangeDetectionStrategy,\n Component,\n computed,\n HostAttributeToken,\n inject,\n input,\n InputSignal,\n InputSignalWithTransform,\n ViewEncapsulation,\n} from '@angular/core';\nimport {MatIconButton} from '@angular/material/button';\nimport {MAT_TIMEPICKER_CONFIG} from './util';\nimport type {MatTimepicker} from './timepicker';\n\n/** Button that can be used to open a `mat-timepicker`. */\n@Component({\n selector: 'mat-timepicker-toggle',\n templateUrl: 'timepicker-toggle.html',\n host: {\n 'class': 'mat-timepicker-toggle',\n '[attr.tabindex]': 'null',\n // Bind the `click` on the host, rather than the inner `button`, so that we can call\n // `stopPropagation` on it without affecting the user's `click` handlers. We need to stop\n // it so that the input doesn't get focused automatically by the form field (See #21836).\n '(click)': '_open($event)',\n },\n exportAs: 'matTimepickerToggle',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n imports: [MatIconButton],\n})\nexport class MatTimepickerToggle<D> {\n private _defaultConfig = inject(MAT_TIMEPICKER_CONFIG, {optional: true});\n private _defaultTabIndex = (() => {\n const value = inject(new HostAttributeToken('tabindex'), {optional: true});\n const parsed = Number(value);\n return isNaN(parsed) ? null : parsed;\n })();\n\n protected _isDisabled = computed(() => {\n const timepicker = this.timepicker();\n return this.disabled() || timepicker.disabled();\n });\n\n /** Timepicker instance that the button will toggle. */\n readonly timepicker: InputSignal<MatTimepicker<D>> = input.required<MatTimepicker<D>>({\n alias: 'for',\n });\n\n /** Screen-reader label for the button. */\n readonly ariaLabel = input<string | undefined>(undefined, {\n alias: 'aria-label',\n });\n\n /** Whether the toggle button is disabled. */\n readonly disabled: InputSignalWithTransform<boolean, unknown> = input(false, {\n transform: booleanAttribute,\n alias: 'disabled',\n });\n\n /** Tabindex for the toggle. */\n readonly tabIndex: InputSignal<number | null> = input(this._defaultTabIndex);\n\n /** Whether ripples on the toggle should be disabled. */\n readonly disableRipple: InputSignalWithTransform<boolean, unknown> = input(\n this._defaultConfig?.disableRipple ?? false,\n {transform: booleanAttribute},\n );\n\n /** Opens the connected timepicker. */\n protected _open(event: Event): void {\n if (this.timepicker() && !this._isDisabled()) {\n this.timepicker().open();\n event.stopPropagation();\n }\n }\n}\n","<button\n mat-icon-button\n type=\"button\"\n aria-haspopup=\"listbox\"\n [attr.aria-label]=\"ariaLabel()\"\n [attr.aria-expanded]=\"timepicker().isOpen()\"\n [attr.tabindex]=\"_isDisabled() ? -1 : tabIndex()\"\n [disabled]=\"_isDisabled()\"\n [disableRipple]=\"disableRipple()\">\n\n <ng-content select=\"[matTimepickerToggleIcon]\">\n <svg\n class=\"mat-timepicker-toggle-default-icon\"\n height=\"24px\"\n width=\"24px\"\n viewBox=\"0 -960 960 960\"\n fill=\"currentColor\"\n focusable=\"false\"\n aria-hidden=\"true\">\n <path d=\"m612-292 56-56-148-148v-184h-80v216l172 172ZM480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 83-31.5 156T763-197q-54 54-127 85.5T480-80Zm0-400Zm0 320q133 0 226.5-93.5T800-480q0-133-93.5-226.5T480-800q-133 0-226.5 93.5T160-480q0 133 93.5 226.5T480-160Z\"/>\n </svg>\n </ng-content>\n</button>\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n\nimport {NgModule} from '@angular/core';\nimport {CdkScrollableModule} from '@angular/cdk/scrolling';\nimport {MatTimepicker} from './timepicker';\nimport {MatTimepickerInput} from './timepicker-input';\nimport {MatTimepickerToggle} from './timepicker-toggle';\n\n@NgModule({\n imports: [MatTimepicker, MatTimepickerInput, MatTimepickerToggle],\n exports: [CdkScrollableModule, MatTimepicker, MatTimepickerInput, MatTimepickerToggle],\n})\nexport class MatTimepickerModule {}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAWA;AACA,MAAM,gBAAgB,GAAG,wEAAwE,CAAC;AAalG;;AAEG;MACU,qBAAqB,GAAG,IAAI,cAAc,CACrD,uBAAuB,EACvB;AAaF;AACM,SAAU,aAAa,CAAC,KAA6B,EAAA;AACzD,IAAA,IAAI,MAAc,CAAC;AAEnB,IAAA,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,QAAA,OAAO,IAAI,CAAC;KACb;AAAM,SAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;QACpC,MAAM,GAAG,KAAK,CAAC;KAChB;SAAM;QACL,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE;AAC7B,YAAA,OAAO,IAAI,CAAC;SACb;QAED,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AAC7C,QAAA,MAAM,MAAM,GAAG,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACrD,QAAA,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC;AAEhD,QAAA,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,EAAE;AAC/C,YAAA,OAAO,IAAI,CAAC;SACb;AAED,QAAA,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,OAAO,EAAE;AACvD,YAAA,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;SACxB;AAAM,aAAA,IAAI,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,SAAS,EAAE;AACpF,YAAA,MAAM,GAAG,MAAM,GAAG,EAAE,CAAC;SACtB;aAAM;YACL,MAAM,GAAG,MAAM,CAAC;SACjB;KACF;AAED,IAAA,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;;;;;AAOG;AACG,SAAU,eAAe,CAC7B,OAAuB,EACvB,OAAuB,EACvB,GAAM,EACN,GAAM,EACN,QAAgB,EAAA;IAEhB,MAAM,OAAO,GAA6B,EAAE,CAAC;IAC7C,IAAI,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC;AAE5D,IAAA,OACE,OAAO,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC;QAC9B,OAAO,CAAC,WAAW,CAAC,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC;AACrC,QAAA,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EACxB;QACA,OAAO,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,EAAC,CAAC,CAAC;QAChG,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;KACjD;AAED,IAAA,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;AACgB,SAAA,eAAe,CAC7B,OAAoC,EACpC,OAA8B,EAAA;IAE9B,SAAS,mBAAmB,CAAC,QAAgB,EAAA;AAC3C,QAAA,OAAO,KAAK,CACV,CAAwC,qCAAA,EAAA,QAAQ,CAAsC,oCAAA,CAAA;YACpF,CAAuE,qEAAA,CAAA;AACvE,YAAA,CAAA,sFAAA,CAAwF,CAC3F,CAAC;KACH;IAED,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,mBAAmB,CAAC,aAAa,CAAC,CAAC;KAC1C;IAED,IAAI,CAAC,OAAO,EAAE;AACZ,QAAA,MAAM,mBAAmB,CAAC,kBAAkB,CAAC,CAAC;KAC/C;AAED,IAAA,IACE,OAAO,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS;AACvC,QAAA,OAAO,CAAC,OAAO,CAAC,eAAe,KAAK,SAAS;AAC7C,QAAA,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,EACrC;QACA,MAAM,IAAI,KAAK,CACb,kEAAkE;YAChE,iFAAiF;AACjF,YAAA,6EAA6E,CAChF,CAAC;KACH;AACH;;AC1EA;;;AAGG;MA4BU,aAAa,CAAA;AAChB,IAAA,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3B,IAAI,GAAG,MAAM,CAAC,cAAc,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AAChD,IAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC,CAAC;AAC7C,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,cAAc,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;IACjE,YAAY,GAAG,MAAM,CAAiB,WAAW,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAE,CAAC;IACtE,YAAY,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAE,CAAC;AAE3D,IAAA,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACxB,IAAA,iBAAiB,GAAG,MAAM,CAAgB,IAAI,CAAC,CAAC;AAEhD,IAAA,MAAM,GAAG,MAAM,CAA+B,IAAI,CAAC,CAAC;IACpD,WAAW,GAAsB,IAAI,CAAC;IACtC,OAAO,GAAmC,IAAI,CAAC;IAC/C,gBAAgB,GAAkB,IAAI,CAAC;AACvC,IAAA,cAAc,CAAe;IAC7B,aAAa,GAA0B,IAAI,CAAC;AAE1C,IAAA,cAAc,GAAG,SAAS,CAAC,QAAQ,CAAuB,eAAe,CAAC,CAAC;IAC3E,YAAY,GAAsC,EAAE,CAAC;AACrD,IAAA,QAAQ,GAAG,YAAY,CAAC,SAAS,CAAC,CAAC;IAErC,WAAW,GAAG,IAAI,0BAA0B,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;SAChF,cAAc,CAAC,IAAI,CAAC;SACpB,cAAc,CAAC,IAAI,CAAC;SACpB,uBAAuB,CAAC,IAAI,CAAC,CAAC;AAEjC;;;;AAIG;IACM,QAAQ,GAAoE,KAAK,CACxF,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,QAAQ,IAAI,IAAI,CAAC,EACpD,EAAC,SAAS,EAAE,aAAa,EAAC,CAC3B,CAAC;AAEF;;;AAGG;AACM,IAAA,OAAO,GAA0D,KAAK,CAE7E,IAAI,CAAC,CAAC;;AAGC,IAAA,MAAM,GAAoB,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;;IAGpD,QAAQ,GAA+C,MAAM,EAAE,CAAC;;IAGhE,MAAM,GAA2B,MAAM,EAAE,CAAC;;IAG1C,MAAM,GAA2B,MAAM,EAAE,CAAC;;AAG1C,IAAA,gBAAgB,GAA0B,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,CAAC;;IAG9E,OAAO,GAAW,MAAM,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;;IAGtE,aAAa,GAA+C,KAAK,CACxE,IAAI,CAAC,cAAc,EAAE,aAAa,IAAI,KAAK,EAC3C;AACE,QAAA,SAAS,EAAE,gBAAgB;AAC5B,KAAA,CACF,CAAC;;AAGO,IAAA,SAAS,GAA+B,KAAK,CAAgB,IAAI,EAAE;AAC1E,QAAA,KAAK,EAAE,YAAY;AACpB,KAAA,CAAC,CAAC;;AAGM,IAAA,cAAc,GAA+B,KAAK,CAAgB,IAAI,EAAE;AAC/E,QAAA,KAAK,EAAE,iBAAiB;AACzB,KAAA,CAAC,CAAC;;AAGM,IAAA,QAAQ,GAAoB,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC;AAEjF,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;YACjD,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YAEtD,MAAM,CAAC,MAAK;AACV,gBAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAC/B,gBAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAEjC,IAAI,OAAO,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,EAAE;AACzC,oBAAA,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;iBACH;AAAM,qBAAA,IAAI,OAAO,EAAE,MAAM,KAAK,CAAC,EAAE;AAChC,oBAAA,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;iBACtE;AACH,aAAC,CAAC,CAAC;SACJ;;AAGD,QAAA,MAAM,OAAO,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC;QAC5D,OAAO,CAAC,aAAa,CAAC,YAAY,CAAC,yBAAyB,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC5E,IAAI,CAAC,oBAAoB,EAAE,CAAC;QAC5B,IAAI,CAAC,wBAAwB,EAAE,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,MAChC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,IAAI,IAAI,CAAC,CACpE,CAAC;KACH;;IAGD,IAAI,GAAA;AACF,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QAE5B,IAAI,CAAC,KAAK,EAAE;YACV,OAAO;SACR;;;;QAKD,KAAK,CAAC,KAAK,EAAE,CAAC;AAEd,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;YAClB,OAAO;SACR;AAED,QAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,gBAAgB,EAAE,CAAC;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;AACzC,QAAA,UAAU,CAAC,UAAU,CAAC,EAAC,KAAK,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,WAAW,EAAC,CAAC,CAAC;AACnF,QAAA,IAAI,CAAC,OAAO,KAAK,IAAI,cAAc,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;AACnF,QAAA,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AAChC,QAAA,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,aAAa,GAAG,eAAe,CAClC,MAAK;AACH,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAChC,YAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5D,YAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;SAC3B,EACD,EAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,EAAC,CAC3B,CAAC;AAEF,QAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;KACpB;;IAGD,KAAK,GAAA;AACH,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE,EAAE;AAClB,YAAA,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxB,YAAA,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC;AAC3B,YAAA,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;SACpB;KACF;;AAGD,IAAA,aAAa,CAAC,KAA4B,EAAA;AACxC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAEnC,QAAA,IAAI,YAAY,IAAI,KAAK,KAAK,YAAY,KAAK,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,EAAE;AAC7F,YAAA,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;SAClF;AAED,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACxB;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC;AAClC,QAAA,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,CAAC;AAC9B,QAAA,IAAI,CAAC,WAAW,EAAE,OAAO,EAAE,CAAC;KAC7B;;AAGS,IAAA,YAAY,CAAC,KAAQ,EAAA;QAC7B,IAAI,CAAC,KAAK,EAAE,CAAC;AACb,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAC,CAAC,CAAC;AAC1C,QAAA,IAAI,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC;KACxB;;IAGS,kBAAkB,GAAA;AAC1B,QAAA,IAAI,IAAI,CAAC,SAAS,EAAE,EAAE;AACpB,YAAA,OAAO,IAAI,CAAC;SACb;AACD,QAAA,OAAO,IAAI,CAAC,cAAc,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC;KACtE;;IAGO,cAAc,GAAA;AACpB,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YACpB,OAAO,IAAI,CAAC,WAAW,CAAC;SACzB;AAED,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,QAAQ;AACnC,aAAA,QAAQ,EAAE;aACV,mBAAmB,CAAC,IAAI,CAAC,MAAM,EAAG,CAAC,gBAAgB,EAAE,CAAC;aACtD,sBAAsB,CAAC,KAAK,CAAC;aAC7B,QAAQ,CAAC,KAAK,CAAC;aACf,qBAAqB,CAAC,uBAAuB,CAAC;AAC9C,aAAA,aAAa,CAAC;AACb,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,QAAQ;AACjB,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,KAAK;AAChB,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,OAAO;AAChB,gBAAA,OAAO,EAAE,KAAK;AACd,gBAAA,QAAQ,EAAE,OAAO;AACjB,gBAAA,QAAQ,EAAE,QAAQ;AAClB,gBAAA,UAAU,EAAE,sBAAsB;AACnC,aAAA;AACF,SAAA,CAAC,CAAC;QAEL,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACtC,gBAAgB;YAChB,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE;AAC3D,YAAA,SAAS,EAAE,IAAI,CAAC,IAAI,IAAI,KAAK;AAC7B,YAAA,WAAW,EAAE,KAAK;AACnB,SAAA,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC,SAAS,CAAC,KAAK,IAAG;AACjD,YAAA,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAC,CAAC,CAAC;QAEH,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,CAAC,SAAS,CAAC,KAAK,IAAG;AACxD,YAAA,MAAM,MAAM,GAAG,eAAe,CAAC,KAAK,CAAgB,CAAC;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,gBAAgB,EAAE,CAAC,aAAa,CAAC;AAE/D,YAAA,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,KAAK,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;gBACrE,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;AACH,SAAC,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC,WAAW,CAAC;KACzB;;IAGO,gBAAgB,GAAA;;QAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;AAC5C,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;AAE/B,QAAA,IAAI,OAAO,KAAK,IAAI,EAAE;AACpB,YAAA,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC;SAC7B;aAAM;AACL,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC5B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;YAClC,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC;YACvD,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,EAAE,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YACxE,MAAM,QAAQ,GACZ,QAAQ,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,GAAG,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;;AAG3F,YAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,gBAAgB,EAAE;AACtC,gBAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ,CAAC;AACjC,gBAAA,IAAI,CAAC,YAAY,GAAG,eAAe,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;aACrF;SACF;KACF;AAED;;;;;AAKG;AACK,IAAA,kBAAkB,CACxB,KAAe,EACf,OAA6B,EAC7B,QAA0B,EAAA;QAE1B,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,QAAA,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;AAC5B,YAAA,IAAI,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE;AAC5D,gBAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrB,gBAAA,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACvC,gBAAA,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;gBACxD,WAAW,GAAG,IAAI,CAAC;aACpB;iBAAM;AACL,gBAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACxB;SACF;;;QAID,IAAI,CAAC,WAAW,EAAE;YAChB,IAAI,QAAQ,EAAE;AACZ,gBAAA,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1D,gBAAA,oBAAoB,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAC1C;iBAAM;AACL,gBAAA,SAAS,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aACrD;SACF;KACF;;AAGO,IAAA,cAAc,CAAC,KAAoB,EAAA;AACzC,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;AAE9B,QAAA,IAAI,OAAO,KAAK,GAAG,EAAE;YACnB,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;aAAM,IAAI,OAAO,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE;YACvD,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,CAAC,KAAK,EAAE,CAAC;SACd;AAAM,aAAA,IAAI,OAAO,KAAK,KAAK,EAAE;YAC5B,KAAK,CAAC,cAAc,EAAE,CAAC;AAEvB,YAAA,IAAI,IAAI,CAAC,WAAW,CAAC,UAAU,EAAE;gBAC/B,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;aACtD;iBAAM;gBACL,IAAI,CAAC,KAAK,EAAE,CAAC;aACd;SACF;aAAM;AACL,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AACnD,YAAA,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAClC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC;AAElD,YAAA,IAAI,aAAa,IAAI,aAAa,KAAK,cAAc,EAAE;AACrD,gBAAA,oBAAoB,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;aAChD;SACF;KACF;;IAGO,oBAAoB,GAAA;;AAE1B,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;AACnE,YAAA,IAAI,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAE7B,YAAA,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;gBACjB,IAAI,CAAC,gBAAgB,EAAE,CAAC;aACzB;AACH,SAAC,CAAC,CAAC;KACJ;AAED;;AAEG;IACK,wBAAwB,GAAA;QAC9B,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;AAC5B,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;AAEhC,YAAA,IAAI,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,EAAE;AAC3B,gBAAA,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;aACvD;AACH,SAAC,CAAC,CAAC;KACJ;uGAnWU,aAAa,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAb,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,aAAa,EAnBb,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,OAAA,EAAA,EAAA,iBAAA,EAAA,SAAA,EAAA,UAAA,EAAA,SAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,EAAA,iBAAA,EAAA,gBAAA,EAAA,UAAA,EAAA,iBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,QAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,2BAA2B;AACpC,gBAAA,WAAW,EAAE,aAAa;AAC3B,aAAA;AACF,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,gBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,eAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,UAAA,EAAA,SAAA,EAmCiC,SAAS,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECpH7C,kdAeA,EAAA,MAAA,EAAA,CAAA,omCAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,ED4DY,SAAS,EAOP,QAAA,EAAA,YAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,IAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,UAAA,EAAA;YACV,OAAO,CAAC,OAAO,EAAE;AACf,gBAAA,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAC,CAAC,CAAC;gBAC5D,UAAU,CAAC,QAAQ,EAAE;AACnB,oBAAA,KAAK,CAAC;wBACJ,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC;wBAC5C,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,WAAW,EAAC,CAAC,CAAC;qBAC7E,CAAC;iBACH,CAAC;AACF,gBAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;aACtE,CAAC;AACH,SAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEU,aAAa,EAAA,UAAA,EAAA,CAAA;kBA3BzB,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAChB,QAAA,EAAA,eAAe,EAGR,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,aAAA,EAChC,iBAAiB,CAAC,IAAI,EAAA,OAAA,EAC5B,CAAC,SAAS,CAAC,EACT,SAAA,EAAA;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,2BAA2B;AACpC,4BAAA,WAAW,EAAe,aAAA;AAC3B,yBAAA;qBACF,EACW,UAAA,EAAA;wBACV,OAAO,CAAC,OAAO,EAAE;AACf,4BAAA,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAE,SAAS,EAAE,aAAa,EAAC,CAAC,CAAC;4BAC5D,UAAU,CAAC,QAAQ,EAAE;AACnB,gCAAA,KAAK,CAAC;oCACJ,OAAO,CAAC,cAAc,EAAE,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC;oCAC5C,OAAO,CAAC,kCAAkC,EAAE,KAAK,CAAC,EAAC,SAAS,EAAE,WAAW,EAAC,CAAC,CAAC;iCAC7E,CAAC;6BACH,CAAC;AACF,4BAAA,UAAU,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,eAAe,EAAE,KAAK,CAAC,EAAC,OAAO,EAAE,CAAC,EAAC,CAAC,CAAC,CAAC,CAAC;yBACtE,CAAC;AACH,qBAAA,EAAA,QAAA,EAAA,kdAAA,EAAA,MAAA,EAAA,CAAA,omCAAA,CAAA,EAAA,CAAA;;AAwWH;;;;AAIG;AACH,SAAS,oBAAoB,CAAC,MAAiB,EAAE,QAA+B,EAAA;AAC9E,IAAA,MAAM,CAAC,eAAe,EAAE,CAAC,cAAc,CAAC,EAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAC,CAAC,CAAC;AAC/E;;AEhaA;;AAEG;MAmCU,kBAAkB,CAAA;AACrB,IAAA,WAAW,GAAG,MAAM,CAA+B,UAAU,CAAC,CAAC;AAC/D,IAAA,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC7B,YAAY,GAAG,MAAM,CAAiB,WAAW,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAE,CAAC;IACtE,YAAY,GAAG,MAAM,CAAC,gBAAgB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAE,CAAC;IAC3D,UAAU,GAAG,MAAM,CAAC,cAAc,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AAEtD,IAAA,SAAS,CAAqC;AAC9C,IAAA,UAAU,CAA2B;AACrC,IAAA,kBAAkB,CAA2B;AAC7C,IAAA,iBAAiB,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAClC,IAAA,mBAAmB,CAAe;AAClC,IAAA,uBAAuB,CAAoC;AAC3D,IAAA,UAAU,CAAc;IACxB,eAAe,GAAG,IAAI,CAAC;IACvB,cAAc,GAAa,IAAI,CAAC;;AAGrB,IAAA,qBAAqB,GAAG,QAAQ,CAAC,MAAK;AACvD,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACrC,QAAA,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;AACnC,QAAA,MAAM,gBAAgB,GAAG,UAAU,CAAC,gBAAgB,EAAE,CAAC;QACvD,OAAO,MAAM,IAAI,gBAAgB,GAAG,gBAAgB,GAAG,IAAI,CAAC;AAC9D,KAAC,CAAC,CAAC;;AAGgB,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;;AAGhE,IAAA,aAAa,GAAG,QAAQ,CAAC,MAAK;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACrC,QAAA,OAAO,UAAU,CAAC,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;AACzD,KAAC,CAAC,CAAC;;AAGM,IAAA,KAAK,GAA0B,KAAK,CAAW,IAAI,CAAC,CAAC;;AAGrD,IAAA,UAAU,GAAkC,KAAK,CAAC,QAAQ,CAAmB;AACpF,QAAA,KAAK,EAAE,eAAe;AACvB,KAAA,CAAC,CAAC;AAEH;;;AAGG;AACM,IAAA,GAAG,GAAgD,KAAK,CAAC,IAAI,EAAE;AACtE,QAAA,KAAK,EAAE,kBAAkB;QACzB,SAAS,EAAE,CAAC,KAAc,KAAK,IAAI,CAAC,mBAAmB,CAAI,KAAK,CAAC;AAClE,KAAA,CAAC,CAAC;AAEH;;;AAGG;AACM,IAAA,GAAG,GAAgD,KAAK,CAAC,IAAI,EAAE;AACtE,QAAA,KAAK,EAAE,kBAAkB;QACzB,SAAS,EAAE,CAAC,KAAc,KAAK,IAAI,CAAC,mBAAmB,CAAI,KAAK,CAAC;AAClE,KAAA,CAAC,CAAC;;AAGM,IAAA,QAAQ,GAAoB,QAAQ,CAC3C,MAAM,IAAI,CAAC,aAAa,EAAE,IAAI,IAAI,CAAC,iBAAiB,EAAE,CACvD,CAAC;AAEF;;;AAGG;AACM,IAAA,aAAa,GAA+C,KAAK,CAAC,KAAK,EAAE;AAChF,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,KAAK,EAAE,UAAU;AAClB,KAAA,CAAC,CAAC;AAEH,IAAA,WAAA,GAAA;AACE,QAAA,IAAI,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,EAAE;YACjD,eAAe,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;SACvD;AAED,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC9B,IAAI,CAAC,uBAAuB,EAAE,CAAC;QAC/B,IAAI,CAAC,mBAAmB,EAAE,CAAC;AAC3B,QAAA,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,MAAK;AACxE,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;gBACrB,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;aACjC;AACH,SAAC,CAAC,CAAC;;;AAIH,QAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;KACpF;AAED;;;AAGG;AACH,IAAA,UAAU,CAAC,KAAU,EAAA;;;;QAInB,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC1D,QAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC,CAAC;KACpE;AAED;;;AAGG;AACH,IAAA,gBAAgB,CAAC,EAAwB,EAAA;AACvC,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC;KACrB;AAED;;;AAGG;AACH,IAAA,iBAAiB,CAAC,EAAc,EAAA;AAC9B,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;KACtB;AAED;;;AAGG;AACH,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;KACxC;AAED;;;AAGG;AACH,IAAA,QAAQ,CAAC,OAAwB,EAAA;AAC/B,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;KACjC;AAED;;;AAGG;AACH,IAAA,yBAAyB,CAAC,EAAc,EAAA;AACtC,QAAA,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAC;KAC9B;;IAGD,gBAAgB,GAAA;QACd,OAAO,IAAI,CAAC,UAAU,EAAE,yBAAyB,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC;KACzE;;IAGD,KAAK,GAAA;AACH,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;KACxC;IAED,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,gBAAgB,EAAE,CAAC,aAAa,CAAC,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;AACtF,QAAA,IAAI,CAAC,uBAAuB,EAAE,WAAW,EAAE,CAAC;AAC5C,QAAA,IAAI,CAAC,mBAAmB,CAAC,WAAW,EAAE,CAAC;KACxC;;IAGD,WAAW,GAAA;QACT,OAAO,IAAI,CAAC,UAAU,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC;KAC9C;;IAGO,YAAY,GAAG,MAAW;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC;SAC1B;AACH,KAAC,CAAC;;AAGQ,IAAA,YAAY,CAAC,KAAa,EAAA;AAClC,QAAA,MAAM,YAAY,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;AAClC,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AACnF,QAAA,MAAM,UAAU,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;AAEnE,QAAA,IAAI,CAAC,IAAI,IAAI,UAAU,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC,YAAY,CAAC,EAAE;;AAErD,YAAA,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;SACvC;aAAM;;;AAGL,YAAA,IAAI,CAAC,kBAAkB,IAAI,CAAC;SAC7B;KACF;;IAGS,WAAW,GAAA;AACnB,QAAA,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;;QAG3B,IAAI,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SAC1B;AAED,QAAA,IAAI,CAAC,UAAU,IAAI,CAAC;KACrB;;AAGS,IAAA,cAAc,CAAC,KAAoB,EAAA;;AAE3C,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,EAAE,IAAI,IAAI,CAAC,QAAQ,EAAE,EAAE;YACjD,OAAO;SACR;AAED,QAAA,IAAI,KAAK,CAAC,OAAO,KAAK,MAAM,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;YAC/E,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACrB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;SACzB;AAAM,aAAA,IAAI,KAAK,CAAC,OAAO,KAAK,UAAU,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE;YACrE,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC;SAC1B;KACF;;IAGO,sBAAsB,GAAA;QAC5B,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;AAC1D,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC;YACtC,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;;AAG5C,YAAA,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE;AACrB,gBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;aAC1B;AAED,YAAA,IAAI,KAAK,IAAI,IAAI,CAAC,eAAe,EAAE;AACjC,gBAAA,IAAI,CAAC,cAAc,GAAG,KAAK,CAAC;aAC7B;;AAGD,YAAA,IAAI,QAAQ,KAAK,IAAI,CAAC,eAAe,EAAE;AACrC,gBAAA,IAAI,CAAC,kBAAkB,IAAI,CAAC;aAC7B;AACH,SAAC,CAAC,CAAC;KACJ;;IAGO,mBAAmB,GAAA;QACzB,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AACrC,YAAA,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AAC/B,YAAA,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;YACvD,UAAU,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAC,KAAK,EAAC,KAAI;AACxC,gBAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,EAAE;AACpD,oBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvC,oBAAA,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;iBAC1B;AACH,aAAC,CAAC,CAAC;AACL,SAAC,CAAC,CAAC;KACJ;;IAGO,uBAAuB,GAAA;QAC7B,MAAM,CAAC,MAAK;;YAEV,IAAI,CAAC,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,EAAE,CAAC;AACX,YAAA,IAAI,CAAC,kBAAkB,IAAI,CAAC;AAC9B,SAAC,CAAC,CAAC;KACJ;AAED;;;;AAIG;IACK,oBAAoB,CAAC,SAAmB,EAAE,mBAA4B,EAAA;AAC5E,QAAA,IAAI,SAAS,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAClD,YAAA,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;SAC3B;aAAM;;;;;;AAML,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,YAAY,CAAC;AAClC,YAAA,MAAM,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAC/E,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC;SACvF;QAED,IAAI,mBAAmB,EAAE;YACvB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;SAChC;KACF;;AAGO,IAAA,YAAY,CAAC,KAAe,EAAA;QAClC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK;YAClC,KAAK,IAAI,IAAI,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;KAC7F;;AAGO,IAAA,QAAQ,CAAC,KAAe,EAAA;QAC9B,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACnD;;AAGO,IAAA,mBAAmB,CAAI,KAAc,EAAA;AAC3C,QAAA,MAAM,IAAI,GACR,OAAO,KAAK,KAAK,QAAQ;AACvB,cAAE,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC;cACrE,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAC3C,QAAA,OAAO,IAAI,IAAI,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,GAAI,IAAU,GAAG,IAAI,CAAC;KACrE;;IAGO,SAAS,GAAA;QACf,OAAO,IAAI,CAAC,SAAS,CAAC,aAAa,KAAK,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC;KACxE;;IAGO,aAAa,GAAA;QACnB,OAAO,UAAU,CAAC,OAAO,CAAC;AACxB,YAAA,MACE,IAAI,CAAC,eAAe;AAClB,kBAAE,IAAI;AACN,kBAAE,EAAC,oBAAoB,EAAE,EAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,aAAa,CAAC,KAAK,EAAC,EAAC;AAC5E,YAAA,OAAO,IAAG;AACR,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CACvD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAC7C,CAAC;AACF,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,gBAAA,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC;AACnF,sBAAE,IAAI;AACN,sBAAE,EAAC,kBAAkB,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAC,EAAC,CAAC;aAChE;AACD,YAAA,OAAO,IAAG;AACR,gBAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CACvD,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAC7C,CAAC;AACF,gBAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;AACvB,gBAAA,OAAO,CAAC,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,CAAC;AACnF,sBAAE,IAAI;AACN,sBAAE,EAAC,kBAAkB,EAAE,EAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,EAAE,YAAY,EAAC,EAAC,CAAC;aAChE;AACF,SAAA,CAAE,CAAC;KACL;uGA1VU,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;AAAlB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,kBAAkB,EAjBlB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,OAAA,EAAA,EAAA,KAAA,EAAA,aAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,MAAA,EAAA,eAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,EAAA,MAAA,EAAA,eAAA,EAAA,OAAA,EAAA,mCAAA,EAAA,SAAA,EAAA,wBAAA,EAAA,EAAA,UAAA,EAAA,EAAA,4BAAA,EAAA,yBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,oBAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,uBAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,cAAA,EAAA,sBAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA;AACE,gBAAA,OAAO,EAAE,iBAAiB;AAC1B,gBAAA,WAAW,EAAE,kBAAkB;AAC/B,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,aAAa;AACtB,gBAAA,WAAW,EAAE,kBAAkB;AAC/B,gBAAA,KAAK,EAAE,IAAI;AACZ,aAAA;AACD,YAAA;AACE,gBAAA,OAAO,EAAE,wBAAwB;AACjC,gBAAA,WAAW,EAAE,kBAAkB;AAChC,aAAA;AACF,SAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA;;2FAEU,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAlC9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,sBAAsB;AAChC,oBAAA,QAAQ,EAAE,oBAAoB;AAC9B,oBAAA,IAAI,EAAE;AACJ,wBAAA,OAAO,EAAE,sBAAsB;AAC/B,wBAAA,MAAM,EAAE,UAAU;AAClB,wBAAA,MAAM,EAAE,MAAM;AACd,wBAAA,eAAe,EAAE,SAAS;AAC1B,wBAAA,8BAA8B,EAAE,yBAAyB;AACzD,wBAAA,sBAAsB,EAAE,iBAAiB;AACzC,wBAAA,sBAAsB,EAAE,iBAAiB;AACzC,wBAAA,0BAA0B,EAAE,uBAAuB;AACnD,wBAAA,YAAY,EAAE,YAAY;AAC1B,wBAAA,QAAQ,EAAE,eAAe;AACzB,wBAAA,SAAS,EAAE,mCAAmC;AAC9C,wBAAA,WAAW,EAAE,wBAAwB;AACtC,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA;AACE,4BAAA,OAAO,EAAE,iBAAiB;AAC1B,4BAAA,WAAW,EAAoB,kBAAA;AAC/B,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,aAAa;AACtB,4BAAA,WAAW,EAAoB,kBAAA;AAC/B,4BAAA,KAAK,EAAE,IAAI;AACZ,yBAAA;AACD,wBAAA;AACE,4BAAA,OAAO,EAAE,wBAAwB;AACjC,4BAAA,WAAW,EAAoB,kBAAA;AAChC,yBAAA;AACF,qBAAA;AACF,iBAAA,CAAA;;;ACxDD;MAiBa,mBAAmB,CAAA;IACtB,cAAc,GAAG,MAAM,CAAC,qBAAqB,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;IACjE,gBAAgB,GAAG,CAAC,MAAK;AAC/B,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,kBAAkB,CAAC,UAAU,CAAC,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC,CAAC;AAC3E,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,MAAM,CAAC;KACtC,GAAG,CAAC;AAEK,IAAA,WAAW,GAAG,QAAQ,CAAC,MAAK;AACpC,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;AAClD,KAAC,CAAC,CAAC;;AAGM,IAAA,UAAU,GAAkC,KAAK,CAAC,QAAQ,CAAmB;AACpF,QAAA,KAAK,EAAE,KAAK;AACb,KAAA,CAAC,CAAC;;AAGM,IAAA,SAAS,GAAG,KAAK,CAAqB,SAAS,EAAE;AACxD,QAAA,KAAK,EAAE,YAAY;AACpB,KAAA,CAAC,CAAC;;AAGM,IAAA,QAAQ,GAA+C,KAAK,CAAC,KAAK,EAAE;AAC3E,QAAA,SAAS,EAAE,gBAAgB;AAC3B,QAAA,KAAK,EAAE,UAAU;AAClB,KAAA,CAAC,CAAC;;AAGM,IAAA,QAAQ,GAA+B,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;;AAGpE,IAAA,aAAa,GAA+C,KAAK,CACxE,IAAI,CAAC,cAAc,EAAE,aAAa,IAAI,KAAK,EAC3C,EAAC,SAAS,EAAE,gBAAgB,EAAC,CAC9B,CAAC;;AAGQ,IAAA,KAAK,CAAC,KAAY,EAAA;QAC1B,IAAI,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE;AAC5C,YAAA,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC;YACzB,KAAK,CAAC,eAAe,EAAE,CAAC;SACzB;KACF;uGA5CU,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA;2FAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,YAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,YAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,UAAA,EAAA,EAAA,eAAA,EAAA,MAAA,EAAA,EAAA,cAAA,EAAA,uBAAA,EAAA,EAAA,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,ECzChC,u9BAuBA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EDgBY,aAAa,EAAA,QAAA,EAAA,yBAAA,EAAA,QAAA,EAAA,CAAA,WAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,aAAA,EAAA,EAAA,CAAA,iBAAA,CAAA,IAAA,EAAA,CAAA,CAAA;;2FAEZ,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAhB/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,uBAAuB,EAE3B,IAAA,EAAA;AACJ,wBAAA,OAAO,EAAE,uBAAuB;AAChC,wBAAA,iBAAiB,EAAE,MAAM;;;;AAIzB,wBAAA,SAAS,EAAE,eAAe;AAC3B,qBAAA,EAAA,QAAA,EACS,qBAAqB,EAAA,aAAA,EAChB,iBAAiB,CAAC,IAAI,EAAA,eAAA,EACpB,uBAAuB,CAAC,MAAM,EAAA,OAAA,EACtC,CAAC,aAAa,CAAC,EAAA,QAAA,EAAA,u9BAAA,EAAA,CAAA;;;MErBb,mBAAmB,CAAA;uGAAnB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,QAAA,EAAA,CAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAHpB,OAAA,EAAA,CAAA,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,CACtD,EAAA,OAAA,EAAA,CAAA,mBAAmB,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,CAAA,EAAA,CAAA,CAAA;AAE1E,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,mBAAmB,EAHpB,OAAA,EAAA,CAAA,aAAa,EAAsB,mBAAmB,EACtD,mBAAmB,CAAA,EAAA,CAAA,CAAA;;2FAElB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAJ/B,QAAQ;AAAC,YAAA,IAAA,EAAA,CAAA;AACR,oBAAA,OAAO,EAAE,CAAC,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,CAAC;oBACjE,OAAO,EAAE,CAAC,mBAAmB,EAAE,aAAa,EAAE,kBAAkB,EAAE,mBAAmB,CAAC;AACvF,iBAAA,CAAA;;;ACjBD;;AAEG;;;;"}
|
package/menu/index.d.ts
CHANGED
|
@@ -514,6 +514,12 @@ export declare class MatMenuTrigger implements AfterContentInit, OnDestroy {
|
|
|
514
514
|
private _handleHover;
|
|
515
515
|
/** Gets the portal that should be attached to the overlay. */
|
|
516
516
|
private _getPortal;
|
|
517
|
+
/**
|
|
518
|
+
* Determines whether the trigger owns a specific menu panel, at the current point in time.
|
|
519
|
+
* This allows us to distinguish the case where the same panel is passed into multiple triggers
|
|
520
|
+
* and multiple are open at a time.
|
|
521
|
+
*/
|
|
522
|
+
private _ownsMenu;
|
|
517
523
|
static ɵfac: i0.ɵɵFactoryDeclaration<MatMenuTrigger, never>;
|
|
518
524
|
static ɵdir: i0.ɵɵDirectiveDeclaration<MatMenuTrigger, "[mat-menu-trigger-for], [matMenuTriggerFor]", ["matMenuTrigger"], { "_deprecatedMatMenuTriggerFor": { "alias": "mat-menu-trigger-for"; "required": false; }; "menu": { "alias": "matMenuTriggerFor"; "required": false; }; "menuData": { "alias": "matMenuTriggerData"; "required": false; }; "restoreFocus": { "alias": "matMenuTriggerRestoreFocus"; "required": false; }; }, { "menuOpened": "menuOpened"; "onMenuOpen": "onMenuOpen"; "menuClosed": "menuClosed"; "onMenuClose": "onMenuClose"; }, never, never, true, never>;
|
|
519
525
|
}
|