@yuuvis/material 2.1.14 → 2.1.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/fesm2022/yuuvis-material.mjs +541 -7
- package/fesm2022/yuuvis-material.mjs.map +1 -1
- package/lib/assets/i18n/de.json +14 -0
- package/lib/assets/i18n/en.json +14 -0
- package/lib/components/datepicker/datepicker-toggle.component.d.ts +21 -0
- package/lib/components/datepicker/datepicker.component.d.ts +85 -0
- package/lib/components/datepicker/index.d.ts +2 -0
- package/lib/components/index.d.ts +1 -2
- package/lib/services/index.d.ts +2 -0
- package/lib/services/ymt-date-adapter.service.d.ts +19 -0
- package/lib/services/ymt-datepicker-intl.service.d.ts +11 -0
- package/package.json +3 -2
- package/scss/themes/yuuvis-standard/theme.scss +8 -0
|
@@ -1,17 +1,24 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { Inject, Injectable, inject, makeEnvironmentProviders, input, booleanAttribute, ElementRef, EnvironmentInjector, ApplicationRef, effect, createComponent, Directive } from '@angular/core';
|
|
3
|
-
import { MatIconRegistry } from '@angular/material/icon';
|
|
4
|
-
import { MAT_FORM_FIELD_DEFAULT_OPTIONS } from '@angular/material/form-field';
|
|
2
|
+
import { Inject, Injectable, inject, makeEnvironmentProviders, input, booleanAttribute, ElementRef, EnvironmentInjector, ApplicationRef, effect, createComponent, Directive, signal, DestroyRef, viewChild, untracked, Input, HostBinding, HostListener, ChangeDetectionStrategy, Component } from '@angular/core';
|
|
3
|
+
import { MatIconRegistry, MatIcon } from '@angular/material/icon';
|
|
4
|
+
import { MAT_FORM_FIELD_DEFAULT_OPTIONS, MatFormField, MatFormFieldControl } from '@angular/material/form-field';
|
|
5
5
|
import { MAT_TOOLTIP_DEFAULT_OPTIONS } from '@angular/material/tooltip';
|
|
6
6
|
import * as i1 from '@angular/common/http';
|
|
7
7
|
import * as i2 from '@angular/platform-browser';
|
|
8
|
-
import { DOCUMENT } from '@angular/common';
|
|
8
|
+
import { DOCUMENT, CommonModule } from '@angular/common';
|
|
9
9
|
import { coerceBooleanProperty } from '@angular/cdk/coercion';
|
|
10
10
|
import { MatPaginatorIntl } from '@angular/material/paginator';
|
|
11
11
|
import { TranslateService } from '@ngx-translate/core';
|
|
12
12
|
import { MAT_TABS_CONFIG } from '@angular/material/tabs';
|
|
13
|
-
import { MAT_RIPPLE_GLOBAL_OPTIONS } from '@angular/material/core';
|
|
13
|
+
import { MAT_NATIVE_DATE_FORMATS, DateAdapter, MAT_DATE_FORMATS, NativeDateAdapter, MAT_DATE_LOCALE, MAT_RIPPLE_GLOBAL_OPTIONS, NativeDateModule } from '@angular/material/core';
|
|
14
|
+
import { MatDatepickerIntl, MatDatepicker, MatDatepickerInput, MatDateRangeInput, MatDateRangePicker, MatEndDate, MatStartDate } from '@angular/material/datepicker';
|
|
15
|
+
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
14
16
|
import { MatIconButton, MatButton } from '@angular/material/button';
|
|
17
|
+
import { MatInput } from '@angular/material/input';
|
|
18
|
+
import * as i1$1 from '@angular/forms';
|
|
19
|
+
import { NgControl, FormsModule, ReactiveFormsModule } from '@angular/forms';
|
|
20
|
+
import { Subject } from 'rxjs';
|
|
21
|
+
import { MatTimepicker, MatTimepickerInput } from '@angular/material/timepicker';
|
|
15
22
|
|
|
16
23
|
class YmtMatIconRegistryService extends MatIconRegistry {
|
|
17
24
|
#ymtFontSetClassNames = ['material-symbols-sharp'];
|
|
@@ -85,8 +92,142 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImpo
|
|
|
85
92
|
type: Injectable
|
|
86
93
|
}] });
|
|
87
94
|
|
|
95
|
+
class YmtDatepickerIntlService extends MatDatepickerIntl {
|
|
96
|
+
#translate = inject(TranslateService);
|
|
97
|
+
constructor() {
|
|
98
|
+
super();
|
|
99
|
+
this.translateLabels();
|
|
100
|
+
this.#translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {
|
|
101
|
+
this.translateLabels();
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
translateLabels() {
|
|
105
|
+
this.openCalendarLabel = this.#translate.instant('ymt.datepicker.openCalendarLabel');
|
|
106
|
+
this.closeCalendarLabel = this.#translate.instant('ymt.datepicker.closeCalendarLabel');
|
|
107
|
+
this.calendarLabel = this.#translate.instant('ymt.datepicker.calendarLabel');
|
|
108
|
+
this.comparisonDateLabel = this.#translate.instant('ymt.datepicker.comparisonDateLabel');
|
|
109
|
+
this.prevMonthLabel = this.#translate.instant('ymt.datepicker.prevMonthLabel');
|
|
110
|
+
this.nextMonthLabel = this.#translate.instant('ymt.datepicker.nextMonthLabel');
|
|
111
|
+
this.prevYearLabel = this.#translate.instant('ymt.datepicker.prevYearLabel');
|
|
112
|
+
this.nextYearLabel = this.#translate.instant('ymt.datepicker.nextYearLabel');
|
|
113
|
+
this.prevMultiYearLabel = this.#translate.instant('ymt.datepicker.prevMultiYearLabel');
|
|
114
|
+
this.nextMultiYearLabel = this.#translate.instant('ymt.datepicker.nextMultiYearLabel');
|
|
115
|
+
this.switchToMonthViewLabel = this.#translate.instant('ymt.datepicker.switchToMonthViewLabel');
|
|
116
|
+
this.switchToMultiYearViewLabel = this.#translate.instant('ymt.datepicker.switchToMultiYearViewLabel');
|
|
117
|
+
this.startDateLabel = this.#translate.instant('ymt.datepicker.startDateLabel');
|
|
118
|
+
this.endDateLabel = this.#translate.instant('ymt.datepicker.endDateLabel');
|
|
119
|
+
this.changes.next();
|
|
120
|
+
}
|
|
121
|
+
formatYearRange(start, end) {
|
|
122
|
+
return super.formatYearRange(start, end);
|
|
123
|
+
}
|
|
124
|
+
formatYearRangeLabel(start, end) {
|
|
125
|
+
return super.formatYearRangeLabel(start, end);
|
|
126
|
+
}
|
|
127
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtDatepickerIntlService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
128
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtDatepickerIntlService, providedIn: 'root' });
|
|
129
|
+
}
|
|
130
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtDatepickerIntlService, decorators: [{
|
|
131
|
+
type: Injectable,
|
|
132
|
+
args: [{ providedIn: 'root' }]
|
|
133
|
+
}], ctorParameters: () => [] });
|
|
134
|
+
|
|
135
|
+
const YMT_DATE_FROMATS = {
|
|
136
|
+
...MAT_NATIVE_DATE_FORMATS,
|
|
137
|
+
parse: {
|
|
138
|
+
dateInput: null,
|
|
139
|
+
timeInput: null,
|
|
140
|
+
},
|
|
141
|
+
};
|
|
142
|
+
function provideYmtDateAdapter(formats = YMT_DATE_FROMATS) {
|
|
143
|
+
return [
|
|
144
|
+
{ provide: DateAdapter, useClass: YmtDateAdapterService },
|
|
145
|
+
{ provide: MAT_DATE_FORMATS, useValue: formats },
|
|
146
|
+
];
|
|
147
|
+
}
|
|
148
|
+
class YmtDateAdapterService extends NativeDateAdapter {
|
|
149
|
+
// localeFormat: string;
|
|
150
|
+
#translateService = inject(TranslateService);
|
|
151
|
+
locale;
|
|
152
|
+
constructor() {
|
|
153
|
+
super();
|
|
154
|
+
this.locale = this.#translateService.currentLang;
|
|
155
|
+
// this.localeFormat = Intl.getCanonicalLocales(this.locale);
|
|
156
|
+
this.localeChanges.pipe(takeUntilDestroyed()).subscribe(() => {
|
|
157
|
+
console.log('DateAdapter.locale: ', this.locale);
|
|
158
|
+
console.log('DateAdapter.Int.DateTimeFormat.resolvedOptions: ', Intl.DateTimeFormat(this.locale).resolvedOptions());
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
parse(value, parseFormat = '') {
|
|
162
|
+
// categories: { separators: ['.','/','-'], order: ['mdy','dmy','ymd'] }
|
|
163
|
+
let date = null;
|
|
164
|
+
console.log('Ok parse...');
|
|
165
|
+
if (typeof value === 'string') {
|
|
166
|
+
switch (this.locale) {
|
|
167
|
+
case 'en':
|
|
168
|
+
date = this.parseDateString(value, { separator: '/', order: 'mdy' });
|
|
169
|
+
break;
|
|
170
|
+
case 'de':
|
|
171
|
+
date = this.parseDateString(value, { separator: '.', order: 'dmy' });
|
|
172
|
+
break;
|
|
173
|
+
case 'fi':
|
|
174
|
+
date = this.parseDateString(value, { separator: '.', order: 'dmy' });
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return super.parse(date, parseFormat);
|
|
179
|
+
}
|
|
180
|
+
parseDateString(value, config) {
|
|
181
|
+
const { separator, order } = config;
|
|
182
|
+
const dateStrArr = value.split(separator); // DD.MM.YYYY => { separator: '.', order: 'dmy' }
|
|
183
|
+
const day = Number(dateStrArr[order.indexOf('d')]);
|
|
184
|
+
const month = Number(dateStrArr[order.indexOf('m')]) - 1;
|
|
185
|
+
const year = Number(dateStrArr[order.indexOf('y')]);
|
|
186
|
+
const date = new Date(year, month, day);
|
|
187
|
+
const debugObject = {
|
|
188
|
+
config: { separator, order },
|
|
189
|
+
dateStrArr,
|
|
190
|
+
day,
|
|
191
|
+
month,
|
|
192
|
+
year,
|
|
193
|
+
date,
|
|
194
|
+
};
|
|
195
|
+
console.log('parseDateString(): ', debugObject);
|
|
196
|
+
return date;
|
|
197
|
+
}
|
|
198
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtDateAdapterService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
199
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtDateAdapterService });
|
|
200
|
+
}
|
|
201
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: YmtDateAdapterService, decorators: [{
|
|
202
|
+
type: Injectable
|
|
203
|
+
}], ctorParameters: () => [] });
|
|
204
|
+
|
|
88
205
|
const provideYmtMaterial = () => {
|
|
89
206
|
const providers = [
|
|
207
|
+
/**
|
|
208
|
+
* Material Date Locale Default
|
|
209
|
+
*/
|
|
210
|
+
{ provide: MAT_DATE_LOCALE, useFactory: (translate) => translate.defaultLang, deps: [TranslateService] },
|
|
211
|
+
{ provide: MAT_DATE_FORMATS, useValue: YMT_DATE_FROMATS },
|
|
212
|
+
/**
|
|
213
|
+
* Material Datepicker Internationalization Service Override
|
|
214
|
+
*/
|
|
215
|
+
/*{
|
|
216
|
+
provide: MatDatepickerIntl,
|
|
217
|
+
useClass: YmtDatepickerIntlService,
|
|
218
|
+
deps: [TranslateService],
|
|
219
|
+
},*/
|
|
220
|
+
/*{
|
|
221
|
+
provide: MatDatepickerIntl,
|
|
222
|
+
deps: [[new Optional(), new SkipSelf(), MatDatepickerIntl]],
|
|
223
|
+
useFactory: (parentIntl: MatDatepickerIntl)=> {
|
|
224
|
+
return parentIntl || new YmtDatepickerIntlService();
|
|
225
|
+
},
|
|
226
|
+
},*/
|
|
227
|
+
/**
|
|
228
|
+
* Material Date Adapter
|
|
229
|
+
*/
|
|
230
|
+
// provideYmtDateAdapter(),
|
|
90
231
|
/**
|
|
91
232
|
* Material Icon Registry Service Override
|
|
92
233
|
*/
|
|
@@ -305,11 +446,404 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImpo
|
|
|
305
446
|
}]
|
|
306
447
|
}], ctorParameters: () => [] });
|
|
307
448
|
|
|
308
|
-
var
|
|
449
|
+
var EnumDatepickerMode;
|
|
450
|
+
(function (EnumDatepickerMode) {
|
|
451
|
+
EnumDatepickerMode["DATE"] = "DATE";
|
|
452
|
+
// MULTI_DATE = 'MULTI_DATE', // not implemented yet!
|
|
453
|
+
EnumDatepickerMode["DATE_RANGE"] = "DATE_RANGE";
|
|
454
|
+
EnumDatepickerMode["TIME"] = "TIME";
|
|
455
|
+
})(EnumDatepickerMode || (EnumDatepickerMode = {}));
|
|
456
|
+
class DatepickerComponent {
|
|
457
|
+
// Todo: Refactoring: Write BaseMatFormFieldControlComponent class for further custom controls in @yuuvis/material
|
|
458
|
+
// Done: Internationalization
|
|
459
|
+
// Done: Implement Datepicker features and options:
|
|
460
|
+
// // [X] max
|
|
461
|
+
// // [X] min
|
|
462
|
+
// Done: MatFormFieldControl implementation:
|
|
463
|
+
// // [x]handling errorState: https://material.angular.dev/components/input/overview#changing-when-error-messages-are-shown
|
|
464
|
+
// // [x]handling focus
|
|
465
|
+
// // [x]handling setDescribedByIds(ids: string[]): void
|
|
466
|
+
// // [x] set aria-labeledby
|
|
467
|
+
// // [x] set disabled
|
|
468
|
+
// Todo: Refactoring: Better solution for handling value changes from input-element to model (kill ngModelOptions on inputs)
|
|
469
|
+
// Todo: Better solution for DATE_RANGE-mode: content projection for input[matStartDate/matEndDate]
|
|
470
|
+
// Done: Check aria-describedby logic of MatFormField to implement the correct setting
|
|
471
|
+
// Done: Trigger"stateChanges" in effect function
|
|
472
|
+
// Done: set errorState when input value is invalid
|
|
473
|
+
// Done: Check how to destroy the component and complete stateChanges Observable
|
|
474
|
+
// Done: Check how to get the ngControl instance of this component (optionally set)
|
|
475
|
+
#translate = inject(TranslateService);
|
|
476
|
+
#dateAdapter = inject(DateAdapter);
|
|
477
|
+
#locale = signal(inject(MAT_DATE_LOCALE));
|
|
478
|
+
#injectNgControl = (ngC = inject(NgControl, { self: true, optional: true })) => ngC ? (ngC.valueAccessor = this) && ngC : null;
|
|
479
|
+
#destroyRef = inject(DestroyRef);
|
|
480
|
+
#formField = inject(MatFormField, { optional: true });
|
|
481
|
+
// implemented as part of MatFormFieldControl interface
|
|
482
|
+
ngControl = this.#injectNgControl();
|
|
483
|
+
stateChanges = new Subject();
|
|
484
|
+
onFocusIn() {
|
|
485
|
+
this.focused = true;
|
|
486
|
+
}
|
|
487
|
+
onFocusout() {
|
|
488
|
+
this.focused = false;
|
|
489
|
+
this.propagateTouched();
|
|
490
|
+
}
|
|
491
|
+
#value = signal(null);
|
|
492
|
+
set value(v) {
|
|
493
|
+
let _value = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));
|
|
494
|
+
const _previousValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(this.ngControl?.value));
|
|
495
|
+
if (_value && _previousValue) {
|
|
496
|
+
if (this.mode === EnumDatepickerMode.TIME) {
|
|
497
|
+
_value = new Date(_previousValue.setHours(_value.getHours(), _value.getMinutes()));
|
|
498
|
+
}
|
|
499
|
+
else if (this.mode === EnumDatepickerMode.DATE) {
|
|
500
|
+
_value = new Date(_value.setHours(_previousValue.getHours(), _previousValue.getMinutes()));
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
_value = v;
|
|
505
|
+
}
|
|
506
|
+
this.#value.set(_value);
|
|
507
|
+
this.#empty.set(!_value);
|
|
508
|
+
this.propagateChange(this.value);
|
|
509
|
+
}
|
|
510
|
+
get value() { return this.#value(); }
|
|
511
|
+
#disabled = signal(false);
|
|
512
|
+
set disabled(v) {
|
|
513
|
+
this.#disabled.set(coerceBooleanProperty(v));
|
|
514
|
+
this.timepickerInput()?.setDisabledState(this.#disabled());
|
|
515
|
+
}
|
|
516
|
+
get disabled() { return this.#disabled(); }
|
|
517
|
+
#id = signal('');
|
|
518
|
+
set id(v) { this.#id.set(v); }
|
|
519
|
+
get id() { return this.#id(); }
|
|
520
|
+
#placeholder = signal('');
|
|
521
|
+
set placeholder(v) { this.#placeholder.set(v); }
|
|
522
|
+
get placeholder() { return this.#placeholder(); }
|
|
523
|
+
#required = signal(false);
|
|
524
|
+
set required(v) { this.#required.set(coerceBooleanProperty(v)); }
|
|
525
|
+
get required() { return this.#required(); }
|
|
526
|
+
#userAriaDescribedBy = signal('');
|
|
527
|
+
set userAriaDescribedBy(v) { this.#userAriaDescribedBy.set(v); }
|
|
528
|
+
get userAriaDescribedBy() { return this.#userAriaDescribedBy(); }
|
|
529
|
+
#empty = signal(false);
|
|
530
|
+
set empty(v) { this.#empty.set(v); }
|
|
531
|
+
get empty() { return this.#empty(); }
|
|
532
|
+
#errorState = signal(false);
|
|
533
|
+
set errorState(v) { this.#errorState.set(v); }
|
|
534
|
+
get errorState() { return this.#errorState(); }
|
|
535
|
+
#focused = signal(false);
|
|
536
|
+
set focused(v) { this.#focused.set(v); }
|
|
537
|
+
get focused() { return this.#focused(); }
|
|
538
|
+
// implemented as part of MatFormFieldControl interface
|
|
539
|
+
get shouldLabelFloat() { return this.focused || !this.empty; }
|
|
540
|
+
autofilled;
|
|
541
|
+
controlType = 'datepicker';
|
|
542
|
+
disableAutomaticLabeling = false;
|
|
543
|
+
datepickerMode = EnumDatepickerMode;
|
|
544
|
+
datepicker = viewChild('datepicker', { read: (MatDatepicker) });
|
|
545
|
+
rangepicker = viewChild('rangepicker');
|
|
546
|
+
timepicker = viewChild('timepicker', { read: (MatTimepicker) });
|
|
547
|
+
datepickerInput = viewChild('datepickerInput');
|
|
548
|
+
timepickerInput = viewChild('timepickerInput');
|
|
549
|
+
#mode = signal(EnumDatepickerMode.DATE);
|
|
550
|
+
set mode(v) { this.#mode.set(v); }
|
|
551
|
+
get mode() { return this.#mode(); }
|
|
552
|
+
#min = signal(null);
|
|
553
|
+
set min(v) {
|
|
554
|
+
const validValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));
|
|
555
|
+
if (!this.#dateAdapter.sameDate(validValue, this.#min())) {
|
|
556
|
+
this.#min.set(validValue);
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
get min() { return this.#min(); }
|
|
560
|
+
#max = signal(null);
|
|
561
|
+
set max(v) {
|
|
562
|
+
const validValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));
|
|
563
|
+
if (!this.#dateAdapter.sameDate(validValue, this.#max())) {
|
|
564
|
+
this.#max.set(validValue);
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
get max() { return this.#max(); }
|
|
568
|
+
#rangePlaceholder = signal({ startDate: 'Start Date', endDate: 'End Date' });
|
|
569
|
+
set rangePlaceholder(v) { this.#rangePlaceholder.set(v); }
|
|
570
|
+
get rangePlaceholder() { return this.#rangePlaceholder(); }
|
|
571
|
+
rangeValue = { start: '', end: '' };
|
|
572
|
+
startDateFormControlName = input('');
|
|
573
|
+
endDateFormControlName = input('');
|
|
574
|
+
formGroup = input();
|
|
575
|
+
constructor() {
|
|
576
|
+
// triggers state changes for the MatFormFieldControl
|
|
577
|
+
effect(() => {
|
|
578
|
+
this.#value();
|
|
579
|
+
this.#placeholder();
|
|
580
|
+
this.#rangePlaceholder(); // Todo: Check if it needs to trigger "stateChanges"!
|
|
581
|
+
this.#disabled();
|
|
582
|
+
this.#id();
|
|
583
|
+
this.#focused();
|
|
584
|
+
this.#empty();
|
|
585
|
+
this.#required();
|
|
586
|
+
this.#errorState();
|
|
587
|
+
this.#locale();
|
|
588
|
+
this.#mode();
|
|
589
|
+
this.#min();
|
|
590
|
+
this.#max();
|
|
591
|
+
untracked(() => this.stateChanges.next());
|
|
592
|
+
});
|
|
593
|
+
// handle language change
|
|
594
|
+
this.#translate.onLangChange.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((event) => {
|
|
595
|
+
this.#locale.set(event.lang);
|
|
596
|
+
this.#dateAdapter.setLocale(this.#locale());
|
|
597
|
+
});
|
|
598
|
+
effect(() => {
|
|
599
|
+
this.#value();
|
|
600
|
+
untracked(() => console.log('DatepickerComponent.value: ', this.value));
|
|
601
|
+
});
|
|
602
|
+
}
|
|
603
|
+
// implemented as part of ControlValueAccessor interface
|
|
604
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
605
|
+
propagateChange = () => { };
|
|
606
|
+
// implemented as part of ControlValueAccessor interface
|
|
607
|
+
// eslint-disable-next-line @typescript-eslint/no-empty-function
|
|
608
|
+
propagateTouched = () => { };
|
|
609
|
+
// implemented as part of ControlValueAccessor interface
|
|
610
|
+
registerOnChange(fn) {
|
|
611
|
+
this.propagateChange = fn;
|
|
612
|
+
}
|
|
613
|
+
// implemented as part of ControlValueAccessor interface
|
|
614
|
+
registerOnTouched(fn) {
|
|
615
|
+
this.propagateTouched = fn;
|
|
616
|
+
}
|
|
617
|
+
// implemented as part of ControlValueAccessor interface
|
|
618
|
+
writeValue(date) {
|
|
619
|
+
this.value = date;
|
|
620
|
+
}
|
|
621
|
+
// implemented as part of ControlValueAccessor interface
|
|
622
|
+
setDisabledState(isDisabled) {
|
|
623
|
+
this.disabled = isDisabled;
|
|
624
|
+
}
|
|
625
|
+
// implemented as part of MatFormFieldControl interface
|
|
626
|
+
onContainerClick(event) {
|
|
627
|
+
const focusableInput = this.datepickerInput();
|
|
628
|
+
if (focusableInput && !this.focused && !this.disabled) {
|
|
629
|
+
// sets focus to MatFormFieldControls
|
|
630
|
+
focusableInput.onContainerClick(event);
|
|
631
|
+
this.focused = true;
|
|
632
|
+
}
|
|
633
|
+
}
|
|
634
|
+
// implemented as part of MatFormFieldControl interface
|
|
635
|
+
setDescribedByIds(ids) {
|
|
636
|
+
this.datepickerInput()?.setDescribedByIds(ids);
|
|
637
|
+
}
|
|
638
|
+
ngAfterViewInit() {
|
|
639
|
+
const _datepickerInput = this.datepickerInput();
|
|
640
|
+
const _formField = this.#formField;
|
|
641
|
+
if (_datepickerInput) {
|
|
642
|
+
// set MatFormFieldControl.id for auto labeling within a MatFormField
|
|
643
|
+
this.id = _datepickerInput.id || this.id;
|
|
644
|
+
// track datepicker input state changes as they are MatFormFieldControl inputs
|
|
645
|
+
_datepickerInput.stateChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {
|
|
646
|
+
// set errorState
|
|
647
|
+
this.errorState = _datepickerInput.errorState;
|
|
648
|
+
// set disabled state
|
|
649
|
+
this.disabled = _datepickerInput.disabled;
|
|
650
|
+
});
|
|
651
|
+
}
|
|
652
|
+
// set the input's aria-describedby attribute to the parent MatFormField._hintLabelIds (="label-1 label-2 ...")
|
|
653
|
+
if (_formField) {
|
|
654
|
+
this.setDescribedByIds([..._formField._hintLabelId.split(' ')]);
|
|
655
|
+
}
|
|
656
|
+
// set errorState for Range-Mode
|
|
657
|
+
this.formGroup()?.statusChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((v) => { this.errorState = (v === 'INVALID'); });
|
|
658
|
+
this.ngControl?.valueChanges?.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((value) => {
|
|
659
|
+
// get the previous value of the associated formFieldControl
|
|
660
|
+
if (!this.value && value)
|
|
661
|
+
this.value = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(value));
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
ngOnDestroy() {
|
|
665
|
+
this.stateChanges.complete();
|
|
666
|
+
}
|
|
667
|
+
/* Custom Datepicker Functions */
|
|
668
|
+
open() {
|
|
669
|
+
this.datepicker()?.open();
|
|
670
|
+
this.rangepicker()?.open();
|
|
671
|
+
this.timepicker()?.open();
|
|
672
|
+
}
|
|
673
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: DatepickerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
674
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "19.2.12", type: DatepickerComponent, isStandalone: true, selector: "ymt-datepicker", inputs: { value: { classPropertyName: "value", publicName: "value", isSignal: false, isRequired: false, transformFunction: null }, disabled: { classPropertyName: "disabled", publicName: "disabled", isSignal: false, isRequired: false, transformFunction: null }, id: { classPropertyName: "id", publicName: "id", isSignal: false, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: false, isRequired: false, transformFunction: null }, required: { classPropertyName: "required", publicName: "required", isSignal: false, isRequired: false, transformFunction: null }, userAriaDescribedBy: { classPropertyName: "userAriaDescribedBy", publicName: "userAriaDescribedBy", isSignal: false, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: false, isRequired: false, transformFunction: null }, min: { classPropertyName: "min", publicName: "min", isSignal: false, isRequired: false, transformFunction: null }, max: { classPropertyName: "max", publicName: "max", isSignal: false, isRequired: false, transformFunction: null }, rangePlaceholder: { classPropertyName: "rangePlaceholder", publicName: "rangePlaceholder", isSignal: false, isRequired: false, transformFunction: null }, startDateFormControlName: { classPropertyName: "startDateFormControlName", publicName: "startDateFormControlName", isSignal: true, isRequired: false, transformFunction: null }, endDateFormControlName: { classPropertyName: "endDateFormControlName", publicName: "endDateFormControlName", isSignal: true, isRequired: false, transformFunction: null }, formGroup: { classPropertyName: "formGroup", publicName: "formGroup", isSignal: true, isRequired: false, transformFunction: null } }, host: { listeners: { "focusin": "onFocusIn()", "focusout": "onFocusout()" }, properties: { "class.floating": "this.shouldLabelFloat" } }, providers: [
|
|
675
|
+
{ provide: MatFormFieldControl, useExisting: DatepickerComponent },
|
|
676
|
+
/*{
|
|
677
|
+
provide: MAT_DATE_FORMATS,
|
|
678
|
+
useValue: {
|
|
679
|
+
...MAT_NATIVE_DATE_FORMATS,
|
|
680
|
+
display: {
|
|
681
|
+
...MAT_NATIVE_DATE_FORMATS.display,
|
|
682
|
+
dateInput: {
|
|
683
|
+
...MAT_NATIVE_DATE_FORMATS.display.dateInput,
|
|
684
|
+
day: 'numeric' as Intl.DateTimeFormatOptions['day'] // has effect
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
} as MatDateFormats,
|
|
688
|
+
},*/
|
|
689
|
+
{ provide: MatDatepickerIntl, useClass: YmtDatepickerIntlService },
|
|
690
|
+
provideYmtDateAdapter()
|
|
691
|
+
], viewQueries: [{ propertyName: "datepicker", first: true, predicate: ["datepicker"], descendants: true, read: MatDatepicker, isSignal: true }, { propertyName: "rangepicker", first: true, predicate: ["rangepicker"], descendants: true, isSignal: true }, { propertyName: "timepicker", first: true, predicate: ["timepicker"], descendants: true, read: MatTimepicker, isSignal: true }, { propertyName: "datepickerInput", first: true, predicate: ["datepickerInput"], descendants: true, isSignal: true }, { propertyName: "timepickerInput", first: true, predicate: ["timepickerInput"], descendants: true, isSignal: true }], ngImport: i0, template: "@switch (mode) {\n @case (datepickerMode.DATE) {\n <input\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled\"\n matInput\n [matDatepicker]=\"datepicker\"\n [min]=\"min\"\n [max]=\"max\"\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n #datepickerInput=\"matInput\"\n />\n <mat-datepicker #datepicker></mat-datepicker>\n }\n @case (datepickerMode.DATE_RANGE) {\n @let formGroup = this.formGroup();\n @let startDate = this.startDateFormControlName();\n @let endDate = this.endDateFormControlName();\n @if (formGroup && startDate && endDate) {\n <mat-date-range-input\n [rangePicker]=\"rangepicker\"\n [min]=\"min\"\n [max]=\"max\"\n [formGroup]=\"formGroup\"\n #datepickerInput=\"matDateRangeInput\"\n >\n <input matStartDate [placeholder]=\"rangePlaceholder.startDate\" [formControlName]=\"startDate\"/>\n <input matEndDate [placeholder]=\"rangePlaceholder.endDate\" [formControlName]=\"endDate\"/>\n </mat-date-range-input>\n <mat-date-range-picker #rangepicker></mat-date-range-picker>\n } @else {\n <mat-date-range-input\n [rangePicker]=\"rangepicker\"\n [min]=\"min\"\n [max]=\"max\"\n #datepickerInput=\"matDateRangeInput\"\n >\n <input matStartDate [placeholder]=\"rangePlaceholder.startDate\" (dateChange)=\"rangeValue.start = $event.value\"/>\n <input matEndDate [placeholder]=\"rangePlaceholder.endDate\" (dateChange)=\"rangeValue.end = $event.value\"/>\n </mat-date-range-input>\n <mat-date-range-picker #rangepicker></mat-date-range-picker>\n }\n }\n @case (datepickerMode.TIME) {\n <input\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled\"\n matInput\n [matTimepicker]=\"timepicker\"\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n #datepickerInput=\"matInput\"\n #timepickerInput=\"matTimepickerInput\"\n >\n <mat-timepicker #timepicker/>\n }\n @default {\n <input\n type=\"datetime-locale\"\n [placeholder]=\"placeholder\"\n matInput\n [(ngModel)]=\"value\"\n #datepickerInput=\"matInput\"\n />\n }\n}\n\n", styles: [":host{display:flex}:host input{width:100%;border:0;outline:0;background:transparent}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly", "disabledInteractive"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: MatDatepicker, selector: "mat-datepicker", exportAs: ["matDatepicker"] }, { kind: "directive", type: MatDatepickerInput, selector: "input[matDatepicker]", inputs: ["matDatepicker", "min", "max", "matDatepickerFilter"], exportAs: ["matDatepickerInput"] }, { kind: "component", type: MatTimepicker, selector: "mat-timepicker", inputs: ["interval", "options", "disableRipple", "aria-label", "aria-labelledby"], outputs: ["selected", "opened", "closed"], exportAs: ["matTimepicker"] }, { kind: "directive", type: MatTimepickerInput, selector: "input[matTimepicker]", inputs: ["value", "matTimepicker", "matTimepickerMin", "matTimepickerMax", "disabled"], outputs: ["valueChange"], exportAs: ["matTimepickerInput"] }, { kind: "component", type: MatDateRangeInput, selector: "mat-date-range-input", inputs: ["rangePicker", "required", "dateFilter", "min", "max", "disabled", "separator", "comparisonStart", "comparisonEnd"], exportAs: ["matDateRangeInput"] }, { kind: "component", type: MatDateRangePicker, selector: "mat-date-range-picker", exportAs: ["matDateRangePicker"] }, { kind: "directive", type: MatEndDate, selector: "input[matEndDate]", outputs: ["dateChange", "dateInput"] }, { kind: "directive", type: MatStartDate, selector: "input[matStartDate]", outputs: ["dateChange", "dateInput"] }, { kind: "ngmodule", type: NativeDateModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
692
|
+
}
|
|
693
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: DatepickerComponent, decorators: [{
|
|
694
|
+
type: Component,
|
|
695
|
+
args: [{ selector: 'ymt-datepicker', standalone: true, imports: [CommonModule, MatInput, FormsModule, ReactiveFormsModule, MatDatepicker, MatDatepickerInput, MatTimepicker, MatTimepickerInput, MatDateRangeInput, MatDateRangePicker, MatEndDate, MatStartDate, NativeDateModule], providers: [
|
|
696
|
+
{ provide: MatFormFieldControl, useExisting: DatepickerComponent },
|
|
697
|
+
/*{
|
|
698
|
+
provide: MAT_DATE_FORMATS,
|
|
699
|
+
useValue: {
|
|
700
|
+
...MAT_NATIVE_DATE_FORMATS,
|
|
701
|
+
display: {
|
|
702
|
+
...MAT_NATIVE_DATE_FORMATS.display,
|
|
703
|
+
dateInput: {
|
|
704
|
+
...MAT_NATIVE_DATE_FORMATS.display.dateInput,
|
|
705
|
+
day: 'numeric' as Intl.DateTimeFormatOptions['day'] // has effect
|
|
706
|
+
}
|
|
707
|
+
}
|
|
708
|
+
} as MatDateFormats,
|
|
709
|
+
},*/
|
|
710
|
+
{ provide: MatDatepickerIntl, useClass: YmtDatepickerIntlService },
|
|
711
|
+
provideYmtDateAdapter()
|
|
712
|
+
], changeDetection: ChangeDetectionStrategy.OnPush, template: "@switch (mode) {\n @case (datepickerMode.DATE) {\n <input\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled\"\n matInput\n [matDatepicker]=\"datepicker\"\n [min]=\"min\"\n [max]=\"max\"\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n #datepickerInput=\"matInput\"\n />\n <mat-datepicker #datepicker></mat-datepicker>\n }\n @case (datepickerMode.DATE_RANGE) {\n @let formGroup = this.formGroup();\n @let startDate = this.startDateFormControlName();\n @let endDate = this.endDateFormControlName();\n @if (formGroup && startDate && endDate) {\n <mat-date-range-input\n [rangePicker]=\"rangepicker\"\n [min]=\"min\"\n [max]=\"max\"\n [formGroup]=\"formGroup\"\n #datepickerInput=\"matDateRangeInput\"\n >\n <input matStartDate [placeholder]=\"rangePlaceholder.startDate\" [formControlName]=\"startDate\"/>\n <input matEndDate [placeholder]=\"rangePlaceholder.endDate\" [formControlName]=\"endDate\"/>\n </mat-date-range-input>\n <mat-date-range-picker #rangepicker></mat-date-range-picker>\n } @else {\n <mat-date-range-input\n [rangePicker]=\"rangepicker\"\n [min]=\"min\"\n [max]=\"max\"\n #datepickerInput=\"matDateRangeInput\"\n >\n <input matStartDate [placeholder]=\"rangePlaceholder.startDate\" (dateChange)=\"rangeValue.start = $event.value\"/>\n <input matEndDate [placeholder]=\"rangePlaceholder.endDate\" (dateChange)=\"rangeValue.end = $event.value\"/>\n </mat-date-range-input>\n <mat-date-range-picker #rangepicker></mat-date-range-picker>\n }\n }\n @case (datepickerMode.TIME) {\n <input\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled\"\n matInput\n [matTimepicker]=\"timepicker\"\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n #datepickerInput=\"matInput\"\n #timepickerInput=\"matTimepickerInput\"\n >\n <mat-timepicker #timepicker/>\n }\n @default {\n <input\n type=\"datetime-locale\"\n [placeholder]=\"placeholder\"\n matInput\n [(ngModel)]=\"value\"\n #datepickerInput=\"matInput\"\n />\n }\n}\n\n", styles: [":host{display:flex}:host input{width:100%;border:0;outline:0;background:transparent}\n"] }]
|
|
713
|
+
}], ctorParameters: () => [], propDecorators: { onFocusIn: [{
|
|
714
|
+
type: HostListener,
|
|
715
|
+
args: ['focusin']
|
|
716
|
+
}], onFocusout: [{
|
|
717
|
+
type: HostListener,
|
|
718
|
+
args: ['focusout']
|
|
719
|
+
}], value: [{
|
|
720
|
+
type: Input
|
|
721
|
+
}], disabled: [{
|
|
722
|
+
type: Input
|
|
723
|
+
}], id: [{
|
|
724
|
+
type: Input
|
|
725
|
+
}], placeholder: [{
|
|
726
|
+
type: Input
|
|
727
|
+
}], required: [{
|
|
728
|
+
type: Input
|
|
729
|
+
}], userAriaDescribedBy: [{
|
|
730
|
+
type: Input
|
|
731
|
+
}], shouldLabelFloat: [{
|
|
732
|
+
type: HostBinding,
|
|
733
|
+
args: ['class.floating']
|
|
734
|
+
}], mode: [{
|
|
735
|
+
type: Input
|
|
736
|
+
}], min: [{
|
|
737
|
+
type: Input
|
|
738
|
+
}], max: [{
|
|
739
|
+
type: Input
|
|
740
|
+
}], rangePlaceholder: [{
|
|
741
|
+
type: Input
|
|
742
|
+
}] } });
|
|
743
|
+
|
|
744
|
+
class DatepickerToggleComponent {
|
|
745
|
+
#intl = inject(MatDatepickerIntl);
|
|
746
|
+
#destroyRef = inject(DestroyRef);
|
|
747
|
+
#datepicker = signal(null);
|
|
748
|
+
set datepicker(v) { this.#datepicker.set(v); }
|
|
749
|
+
get datepicker() { return this.#datepicker(); }
|
|
750
|
+
#disabled = signal(false);
|
|
751
|
+
set disabled(v) { this.#disabled.set(coerceBooleanProperty(v)); }
|
|
752
|
+
get disabled() { return this.#disabled(); }
|
|
753
|
+
#ariaLabel = signal(this.#intl.openCalendarLabel);
|
|
754
|
+
set ariaLabel(v) { this.#ariaLabel.set(v); }
|
|
755
|
+
get ariaLabel() { return this.#ariaLabel(); }
|
|
756
|
+
stateChanges = new Subject();
|
|
757
|
+
constructor() {
|
|
758
|
+
effect(() => {
|
|
759
|
+
this.#datepicker();
|
|
760
|
+
this.#disabled();
|
|
761
|
+
this.#ariaLabel();
|
|
762
|
+
this.stateChanges.next();
|
|
763
|
+
});
|
|
764
|
+
}
|
|
765
|
+
_open(event) {
|
|
766
|
+
if (this.datepicker && !this.disabled) {
|
|
767
|
+
this.datepicker.open();
|
|
768
|
+
event.stopPropagation();
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
ngOnInit() {
|
|
772
|
+
const datepicker = this.datepicker;
|
|
773
|
+
if (datepicker) {
|
|
774
|
+
datepicker.stateChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {
|
|
775
|
+
this.ariaLabel = this.#intl.openCalendarLabel;
|
|
776
|
+
if (this.disabled !== datepicker.disabled) {
|
|
777
|
+
this.disabled = datepicker.disabled;
|
|
778
|
+
}
|
|
779
|
+
});
|
|
780
|
+
}
|
|
781
|
+
else {
|
|
782
|
+
throw new Error(`DatepickerComponent is missing on DatepickerToggleComponent's "for"-attribute!`);
|
|
783
|
+
}
|
|
784
|
+
}
|
|
785
|
+
ngOnDestroy() {
|
|
786
|
+
this.stateChanges.complete();
|
|
787
|
+
}
|
|
788
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: DatepickerToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
789
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.12", type: DatepickerToggleComponent, isStandalone: true, selector: "ymt-datepicker-toggle", inputs: { datepicker: ["for", "datepicker"], disabled: "disabled", ariaLabel: "ariaLabel" }, host: { listeners: { "click": "_open($event)" } }, providers: [
|
|
790
|
+
{ provide: MatDatepickerIntl, useClass: YmtDatepickerIntlService }
|
|
791
|
+
], exportAs: ["matDatepickerToggle"], ngImport: i0, template: `
|
|
792
|
+
<button
|
|
793
|
+
type="button"
|
|
794
|
+
ymtIconButton
|
|
795
|
+
[attr.aria-label]="ariaLabel"
|
|
796
|
+
[aria-disabled]="disabled"
|
|
797
|
+
[disabled]="disabled"
|
|
798
|
+
>
|
|
799
|
+
<ng-content select="mat-icon"></ng-content>
|
|
800
|
+
</button>
|
|
801
|
+
`, isInline: true, dependencies: [{ kind: "directive", type: YmtIconButtonDirective, selector: "button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]", inputs: ["disabled", "disableRipple", "aria-disabled", "disabledInteractive", "icon-button-size"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
802
|
+
}
|
|
803
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.12", ngImport: i0, type: DatepickerToggleComponent, decorators: [{
|
|
804
|
+
type: Component,
|
|
805
|
+
args: [{
|
|
806
|
+
selector: 'ymt-datepicker-toggle',
|
|
807
|
+
template: `
|
|
808
|
+
<button
|
|
809
|
+
type="button"
|
|
810
|
+
ymtIconButton
|
|
811
|
+
[attr.aria-label]="ariaLabel"
|
|
812
|
+
[aria-disabled]="disabled"
|
|
813
|
+
[disabled]="disabled"
|
|
814
|
+
>
|
|
815
|
+
<ng-content select="mat-icon"></ng-content>
|
|
816
|
+
</button>
|
|
817
|
+
`,
|
|
818
|
+
standalone: true,
|
|
819
|
+
imports: [
|
|
820
|
+
YmtIconButtonDirective,
|
|
821
|
+
MatIcon
|
|
822
|
+
],
|
|
823
|
+
providers: [
|
|
824
|
+
{ provide: MatDatepickerIntl, useClass: YmtDatepickerIntlService }
|
|
825
|
+
],
|
|
826
|
+
host: {
|
|
827
|
+
// Bind the `click` on the host, rather than the inner `button`, so that we can call
|
|
828
|
+
// `stopPropagation` on it without affecting the user's `click` handlers. We need to stop
|
|
829
|
+
// it so that the input doesn't get focused automatically by the form field (See #21836).
|
|
830
|
+
'(click)': '_open($event)'
|
|
831
|
+
},
|
|
832
|
+
exportAs: 'matDatepickerToggle',
|
|
833
|
+
changeDetection: ChangeDetectionStrategy.OnPush
|
|
834
|
+
}]
|
|
835
|
+
}], ctorParameters: () => [], propDecorators: { datepicker: [{
|
|
836
|
+
type: Input,
|
|
837
|
+
args: [{ alias: 'for', required: true }]
|
|
838
|
+
}], disabled: [{
|
|
839
|
+
type: Input
|
|
840
|
+
}], ariaLabel: [{
|
|
841
|
+
type: Input
|
|
842
|
+
}] } });
|
|
309
843
|
|
|
310
844
|
/**
|
|
311
845
|
* Generated bundle index. Do not edit.
|
|
312
846
|
*/
|
|
313
847
|
|
|
314
|
-
export { YMT_BUTTON_SIZE, YMT_ICON_BUTTON_SIZE, YmtButtonDirective, YmtIconButtonDirective, YmtMatIconRegistryService, provideYmtMaterial };
|
|
848
|
+
export { DatepickerComponent, DatepickerToggleComponent, YMT_BUTTON_SIZE, YMT_DATE_FROMATS, YMT_ICON_BUTTON_SIZE, YmtButtonDirective, YmtDateAdapterService, YmtDatepickerIntlService, YmtIconButtonDirective, YmtMatIconRegistryService, provideYmtDateAdapter, provideYmtMaterial };
|
|
315
849
|
//# sourceMappingURL=yuuvis-material.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yuuvis-material.mjs","sources":["../../../../../libs/yuuvis/material/src/lib/services/ymt-mat-icon-registry.service.ts","../../../../../libs/yuuvis/material/src/lib/services/ymt-mat-paginator-intl.service.ts","../../../../../libs/yuuvis/material/src/lib/providers/material.providers.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/ymt-icon-button.model.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/ymt-icon-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/directives/button/ymt-button.model.ts","../../../../../libs/yuuvis/material/src/lib/directives/button/ymt-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/components/index.ts","../../../../../libs/yuuvis/material/src/yuuvis-material.ts"],"sourcesContent":["import { ErrorHandler, Inject, Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { HttpClient } from '@angular/common/http';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DOCUMENT } from '@angular/common';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class YmtMatIconRegistryService extends MatIconRegistry {\n #ymtFontSetClassNames = ['material-symbols-sharp'];\n\n constructor(_httpClient: HttpClient, _sanitizer: DomSanitizer, @Inject(DOCUMENT) document: any, _errorHandler: ErrorHandler) {\n super(_httpClient, _sanitizer, document, _errorHandler);\n this.setDefaultFontSetClass();\n }\n\n override setDefaultFontSetClass(...classnames: string[]) {\n const merged = [...new Set([...classnames, ...this.#ymtFontSetClassNames])];\n super.setDefaultFontSetClass(...merged);\n return this;\n }\n\n static isFontIcon(input: string | null) {\n if (typeof input === 'string') {\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, 'image/svg+xml');\n return coerceBooleanProperty(doc.querySelector('parsererror'));\n }\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { TranslateService } from '@ngx-translate/core';\n\n/* Draft */\n@Injectable()\nexport class YmtMatPaginatorIntlService extends MatPaginatorIntl {\n #translate = inject(TranslateService);\n rangeLabelSeparator: string = this.#translate.instant('ymt.paginator.rangeLabelSeparator');\n \n override getRangeLabel = (\n page: number,\n pageSize: number,\n length: number\n ) => {\n if (length === 0 || pageSize === 0) {\n return `0 ${this.rangeLabelSeparator} ${length}`;\n }\n \n length = Math.max(length, 0);\n const startIndex = page * pageSize;\n // If the start index exceeds the list length, do not try and fix the end index to the end.\n const endIndex = startIndex < length ?\n Math.min(startIndex + pageSize, length) :\n startIndex + pageSize;\n return `${startIndex + 1} - ${endIndex} ${this.rangeLabelSeparator} ${length}`;\n };\n \n //=== Proposal =========================================================\n \n injectTranslateService(translate: TranslateService) {\n this.#translate = translate;\n \n this.#translate.onLangChange.subscribe(() => {\n this.translateLabels();\n });\n \n this.translateLabels();\n }\n \n translateLabels() {\n this.itemsPerPageLabel = this.#translate.instant('ymt.paginator.itemsPerPageLabel');\n this.nextPageLabel = this.#translate.instant('ymt.paginator.nextPageLabel');\n this.previousPageLabel = this.#translate.instant('ymt.paginator.previousPageLabel');\n this.firstPageLabel = this.#translate.instant('ymt.paginator.firstPageLabel');\n this.lastPageLabel = this.#translate.instant('ymt.paginator.lastPageLabel');\n this.rangeLabelSeparator = this.#translate.instant('ymt.paginator.rangeLabelSeparator');\n this.changes.next();\n }\n \n //=== Proposal END =====================================================\n}\n","import { EnvironmentProviders, makeEnvironmentProviders, Provider } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS, MatFormFieldDefaultOptions } from '@angular/material/form-field';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipDefaultOptions } from '@angular/material/tooltip';\nimport { YmtMatIconRegistryService } from '../services/ymt-mat-icon-registry.service';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { YmtMatPaginatorIntlService } from '../services/ymt-mat-paginator-intl.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MAT_TAB_GROUP, MAT_TABS_CONFIG, MatTabsConfig } from '@angular/material/tabs';\nimport { MAT_RIPPLE_GLOBAL_OPTIONS, RippleGlobalOptions } from '@angular/material/core';\n\nexport const provideYmtMaterial = (): EnvironmentProviders => {\n const providers: Provider[] = [\n /**\n * Material Icon Registry Service Override\n */\n { provide: MatIconRegistry, useClass: YmtMatIconRegistryService },\n\n /**\n * Material Ripple Config\n */\n { provide: MAT_RIPPLE_GLOBAL_OPTIONS, useValue: { disabled: true } as RippleGlobalOptions },\n\n /**\n * Material Paginator Internationalization Service Override\n */\n {\n provide: MatPaginatorIntl,\n useFactory: (translate: TranslateService) => {\n const service = new YmtMatPaginatorIntlService();\n service.injectTranslateService(translate);\n return service;\n },\n deps: [TranslateService]\n },\n /**\n * Material Tooltip Config\n */\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: {\n showDelay: 500,\n positionAtOrigin: true,\n disableTooltipInteractivity: true,\n } as MatTooltipDefaultOptions\n },\n /**\n * Material Form Field Config\n */\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n appearance: 'outline',\n floatLabel: 'always',\n subscriptSizing: 'dynamic',\n } as MatFormFieldDefaultOptions\n },\n /**\n * Material Tab Config\n */\n {\n provide: MAT_TABS_CONFIG,\n useValue: {\n animationDuration: '0',\n stretchTabs: false,\n alignTabs: 'start',\n } as MatTabsConfig\n }\n ];\n return makeEnvironmentProviders(providers);\n};\n","export enum YMT_ICON_BUTTON_SIZE {\n small = 'small',\n medium = 'medium'\n}\n","import {\n ApplicationRef,\n booleanAttribute,\n ComponentRef,\n createComponent,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n OnInit\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { YMT_ICON_BUTTON_SIZE } from './ymt-icon-button.model';\n\n@Directive({\n selector: 'button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]',\n standalone: true,\n host: {\n 'mat-icon-button': ''\n }\n})\nexport class YmtIconButtonDirective implements OnInit {\n disabled = input(false, { transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { transform: booleanAttribute, alias: 'aria-disabled' });\n disabledInteractive = input(false, { transform: booleanAttribute });\n size = input<'small' | 'medium' | YMT_ICON_BUTTON_SIZE>(YMT_ICON_BUTTON_SIZE.medium, { alias: 'icon-button-size' });\n\n #elRef = inject(ElementRef);\n #host = this.#elRef.nativeElement;\n #injector = inject(EnvironmentInjector);\n #appRef = inject(ApplicationRef);\n #MatIconButtonComponentRef: ComponentRef<MatIconButton> | null = null;\n #materialIconButtonInputs = [\n { name: 'disabled', signal: this.disabled },\n { name: 'disableRipple', signal: this.disableRipple },\n { name: 'aria-disabled', signal: this.ariaDisabled },\n { name: 'disabledInteractive', signal: this.disabledInteractive }\n ];\n\n constructor() {\n effect(() => this.#applySizeClass());\n effect(() => this.#setMaterialInputs());\n }\n\n ngOnInit(): void {\n this.#MatIconButtonComponentRef = this.#createComponent();\n }\n\n #applySizeClass() {\n this.size() === YMT_ICON_BUTTON_SIZE.small ? this.#host.classList.add(`ymt-icon-button--size-s`) : this.#host.classList.remove(`ymt-icon-button--size-s`);\n this.size() === YMT_ICON_BUTTON_SIZE.medium ? this.#host.classList.add(`ymt-icon-button--size-m`) : this.#host.classList.remove(`ymt-icon-button--size-m`);\n }\n\n #setMaterialInputs() {\n this.#materialIconButtonInputs.forEach(({ name, signal }) => this.#MatIconButtonComponentRef?.setInput(name, signal()));\n }\n\n #createComponent() {\n const matIcon = this.#host.querySelector('mat-icon'); //todo support also upcoming yuv-icon\n const environmentInjector = this.#injector;\n const hostElement = this.#host;\n const componentRef = createComponent(MatIconButton, { hostElement, projectableNodes: [[matIcon]], environmentInjector });\n this.#appRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n}\n","export enum YMT_BUTTON_SIZE {\n small = 'small',\n medium = 'medium'\n}\n","import {\n ApplicationRef,\n createComponent,\n Directive,\n ElementRef,\n EnvironmentInjector,\n input,\n OnInit,\n AfterViewInit,\n inject,\n effect,\n ComponentRef,\n booleanAttribute\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { YMT_BUTTON_SIZE } from './ymt-button.model';\n\ntype ButtonType = keyof typeof MatButtonAttributeEnum;\nenum MatButtonAttributeEnum {\n primary = 'mat-flat-button',\n secondary = 'mat-stroked-button',\n tertiary = 'mat-button'\n}\n\n@Directive({\n selector: 'button[ymtButton], a[ymtButton]',\n standalone: true\n})\nexport class YmtButtonDirective implements OnInit, AfterViewInit {\n ymtButton = input<ButtonType>('primary');\n disabled = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { alias: 'aria-disabled', transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n disabledInteractive = input(false, { transform: booleanAttribute });\n size = input<'small' | 'medium' | YMT_BUTTON_SIZE>(YMT_BUTTON_SIZE.medium, { alias: 'button-size' });\n // Todo: Add input \"isBusy\" as \"busy inactive state\": not clickable and with mat-spinner in button\n\n #environmentInjector = inject(EnvironmentInjector);\n #applicationRef = inject(ApplicationRef);\n #hostElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n #matButtonComponentRef: ComponentRef<MatButton> | null = null;\n\n #iconPrefix: Element[] = [];\n #noneIconNodes: Node[] = [];\n #iconSuffix: Element[] = [];\n\n #matButtonAttribute = MatButtonAttributeEnum;\n\n constructor() {\n effect(() => {\n const disabled = this.disabled();\n const ariaDisabled = this.ariaDisabled();\n const disableRipple = this.disableRipple();\n const disabledInteractive = this.disabledInteractive();\n this.#updateInputs(disabled, ariaDisabled, disableRipple, disabledInteractive);\n });\n\n effect(() => {\n this.#applySizeClass();\n });\n }\n\n ngOnInit() {\n this.#iconPrefix = this.#getIconPrefixElements();\n this.#noneIconNodes = this.#getNoneIconNodes();\n this.#iconSuffix = this.#getIconSuffixElements();\n this.#matButtonComponentRef = this.#createMatButtonComponent();\n }\n\n ngAfterViewInit() {\n this.#updateInputs();\n }\n\n #updateInputs(\n disabled: boolean = this.disabled(),\n ariaDisabled: boolean = this.ariaDisabled(),\n disableRipple: boolean = this.disableRipple(),\n disabledInteractive: boolean = this.disabledInteractive()\n ) {\n this.#matButtonComponentRef?.setInput('disabled', disabled);\n this.#matButtonComponentRef?.setInput('aria-disabled', ariaDisabled);\n this.#matButtonComponentRef?.setInput('disableRipple', disableRipple);\n this.#matButtonComponentRef?.setInput('disabledInteractive', disabledInteractive);\n }\n\n #createMatButtonComponent(\n hostElement: HTMLElement = this.#hostElement,\n environmentInjector: EnvironmentInjector = this.#environmentInjector,\n iconPrefix: Element[] = this.#iconPrefix,\n noneIconNodes: Node[] = this.#noneIconNodes,\n iconSuffix: Element[] = this.#iconSuffix\n ) {\n this.#setInitialAttributesToHost();\n const componentRef = createComponent(MatButton, {\n environmentInjector,\n hostElement,\n projectableNodes: [[...iconPrefix], [...noneIconNodes], [...iconSuffix]]\n });\n this.#applicationRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n\n #setInitialAttributesToHost() {\n this.#hostElement.setAttribute(this.#matButtonAttribute[this.ymtButton()], '');\n }\n\n #getIconPrefixElements() {\n return Array.from(this.#hostElement.querySelectorAll('mat-icon:not([iconPositionEnd])'));\n }\n\n #getIconSuffixElements() {\n return Array.from(this.#hostElement.querySelectorAll('mat-icon[iconPositionEnd]'));\n }\n\n #getNoneIconNodes() {\n const iter = document.createNodeIterator(this.#hostElement, NodeFilter.SHOW_ALL, (node) => {\n return node.nodeName.toLowerCase() !== 'mat-icon' && node.parentElement === this.#hostElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n });\n let currentNode: Node | null;\n const filteredNodes: Node[] = [];\n while ((currentNode = iter.nextNode())) {\n filteredNodes.push(currentNode);\n }\n return filteredNodes;\n }\n\n #applySizeClass() {\n this.size() === YMT_BUTTON_SIZE.small ? this.#hostElement.classList.add(`ymt-button--size-s`) : this.#hostElement.classList.remove(`ymt-button--size-s`);\n this.size() === YMT_BUTTON_SIZE.medium ? this.#hostElement.classList.add(`ymt-button--size-m`) : this.#hostElement.classList.remove(`ymt-button--size-m`);\n }\n}\n","export default {};\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"yuuvis-material.mjs","sources":["../../../../../libs/yuuvis/material/src/lib/services/ymt-mat-icon-registry.service.ts","../../../../../libs/yuuvis/material/src/lib/services/ymt-mat-paginator-intl.service.ts","../../../../../libs/yuuvis/material/src/lib/services/ymt-datepicker-intl.service.ts","../../../../../libs/yuuvis/material/src/lib/services/ymt-date-adapter.service.ts","../../../../../libs/yuuvis/material/src/lib/providers/material.providers.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/ymt-icon-button.model.ts","../../../../../libs/yuuvis/material/src/lib/directives/icon-button/ymt-icon-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/directives/button/ymt-button.model.ts","../../../../../libs/yuuvis/material/src/lib/directives/button/ymt-button.directive.ts","../../../../../libs/yuuvis/material/src/lib/components/datepicker/datepicker.component.ts","../../../../../libs/yuuvis/material/src/lib/components/datepicker/datepicker.component.html","../../../../../libs/yuuvis/material/src/lib/components/datepicker/datepicker-toggle.component.ts","../../../../../libs/yuuvis/material/src/yuuvis-material.ts"],"sourcesContent":["import { ErrorHandler, Inject, Injectable } from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { HttpClient } from '@angular/common/http';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { DOCUMENT } from '@angular/common';\nimport { coerceBooleanProperty } from '@angular/cdk/coercion';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class YmtMatIconRegistryService extends MatIconRegistry {\n #ymtFontSetClassNames = ['material-symbols-sharp'];\n\n constructor(_httpClient: HttpClient, _sanitizer: DomSanitizer, @Inject(DOCUMENT) document: any, _errorHandler: ErrorHandler) {\n super(_httpClient, _sanitizer, document, _errorHandler);\n this.setDefaultFontSetClass();\n }\n\n override setDefaultFontSetClass(...classnames: string[]) {\n const merged = [...new Set([...classnames, ...this.#ymtFontSetClassNames])];\n super.setDefaultFontSetClass(...merged);\n return this;\n }\n\n static isFontIcon(input: string | null) {\n if (typeof input === 'string') {\n const parser = new DOMParser();\n const doc = parser.parseFromString(input, 'image/svg+xml');\n return coerceBooleanProperty(doc.querySelector('parsererror'));\n }\n return false;\n }\n}\n","import { inject, Injectable } from '@angular/core';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { TranslateService } from '@ngx-translate/core';\n\n/* Draft */\n@Injectable()\nexport class YmtMatPaginatorIntlService extends MatPaginatorIntl {\n #translate = inject(TranslateService);\n rangeLabelSeparator: string = this.#translate.instant('ymt.paginator.rangeLabelSeparator');\n \n override getRangeLabel = (\n page: number,\n pageSize: number,\n length: number\n ) => {\n if (length === 0 || pageSize === 0) {\n return `0 ${this.rangeLabelSeparator} ${length}`;\n }\n \n length = Math.max(length, 0);\n const startIndex = page * pageSize;\n // If the start index exceeds the list length, do not try and fix the end index to the end.\n const endIndex = startIndex < length ?\n Math.min(startIndex + pageSize, length) :\n startIndex + pageSize;\n return `${startIndex + 1} - ${endIndex} ${this.rangeLabelSeparator} ${length}`;\n };\n \n //=== Proposal =========================================================\n \n injectTranslateService(translate: TranslateService) {\n this.#translate = translate;\n \n this.#translate.onLangChange.subscribe(() => {\n this.translateLabels();\n });\n \n this.translateLabels();\n }\n \n translateLabels() {\n this.itemsPerPageLabel = this.#translate.instant('ymt.paginator.itemsPerPageLabel');\n this.nextPageLabel = this.#translate.instant('ymt.paginator.nextPageLabel');\n this.previousPageLabel = this.#translate.instant('ymt.paginator.previousPageLabel');\n this.firstPageLabel = this.#translate.instant('ymt.paginator.firstPageLabel');\n this.lastPageLabel = this.#translate.instant('ymt.paginator.lastPageLabel');\n this.rangeLabelSeparator = this.#translate.instant('ymt.paginator.rangeLabelSeparator');\n this.changes.next();\n }\n \n //=== Proposal END =====================================================\n}\n","import { MatDatepickerIntl } from '@angular/material/datepicker';\nimport { TranslateService } from '@ngx-translate/core';\nimport { inject, Injectable } from '@angular/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Injectable({ providedIn: 'root' })\nexport class YmtDatepickerIntlService extends MatDatepickerIntl {\n #translate = inject(TranslateService);\n \n constructor() {\n super();\n \n this.translateLabels();\n this.#translate.onLangChange.pipe(takeUntilDestroyed()).subscribe(() => {\n this.translateLabels();\n });\n }\n \n translateLabels() {\n this.openCalendarLabel = this.#translate.instant('ymt.datepicker.openCalendarLabel');\n this.closeCalendarLabel = this.#translate.instant('ymt.datepicker.closeCalendarLabel');\n this.calendarLabel = this.#translate.instant('ymt.datepicker.calendarLabel');\n this.comparisonDateLabel = this.#translate.instant('ymt.datepicker.comparisonDateLabel');\n this.prevMonthLabel = this.#translate.instant('ymt.datepicker.prevMonthLabel');\n this.nextMonthLabel = this.#translate.instant('ymt.datepicker.nextMonthLabel');\n this.prevYearLabel = this.#translate.instant('ymt.datepicker.prevYearLabel');\n this.nextYearLabel = this.#translate.instant('ymt.datepicker.nextYearLabel');\n this.prevMultiYearLabel = this.#translate.instant('ymt.datepicker.prevMultiYearLabel');\n this.nextMultiYearLabel = this.#translate.instant('ymt.datepicker.nextMultiYearLabel');\n this.switchToMonthViewLabel = this.#translate.instant('ymt.datepicker.switchToMonthViewLabel');\n this.switchToMultiYearViewLabel = this.#translate.instant('ymt.datepicker.switchToMultiYearViewLabel');\n this.startDateLabel = this.#translate.instant('ymt.datepicker.startDateLabel');\n this.endDateLabel = this.#translate.instant('ymt.datepicker.endDateLabel');\n this.changes.next();\n }\n \n override formatYearRange(start: string, end: string): string {\n return super.formatYearRange(start, end);\n }\n \n override formatYearRangeLabel(start: string, end: string): string {\n return super.formatYearRangeLabel(start, end);\n }\n}\n","import { inject, Injectable, Provider } from '@angular/core';\nimport {\n DateAdapter,\n MAT_DATE_FORMATS,\n MAT_NATIVE_DATE_FORMATS,\n MatDateFormats,\n NativeDateAdapter\n} from '@angular/material/core';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport { TranslateService } from '@ngx-translate/core';\n\nexport const YMT_DATE_FROMATS: MatDateFormats = {\n ...MAT_NATIVE_DATE_FORMATS,\n parse: {\n dateInput: null,\n timeInput: null,\n },\n};\n\nexport function provideYmtDateAdapter(\n formats: MatDateFormats = YMT_DATE_FROMATS,\n): Provider[] {\n return [\n { provide: DateAdapter, useClass: YmtDateAdapterService },\n { provide: MAT_DATE_FORMATS, useValue: formats },\n ];\n}\n\ninterface IParseFormats {\n separator: '.' | '/' | '-' | string;\n order: 'mdy' | 'dmy' | 'ymd';\n}\n\n@Injectable()\nexport class YmtDateAdapterService extends NativeDateAdapter {\n \n // localeFormat: string;\n #translateService = inject(TranslateService);\n override locale: string;\n \n constructor() {\n super();\n \n this.locale = this.#translateService.currentLang;\n // this.localeFormat = Intl.getCanonicalLocales(this.locale);\n this.localeChanges.pipe(takeUntilDestroyed()).subscribe(() => {\n console.log('DateAdapter.locale: ', this.locale);\n console.log('DateAdapter.Int.DateTimeFormat.resolvedOptions: ', Intl.DateTimeFormat(this.locale).resolvedOptions());\n });\n }\n \n override parse(value: any, parseFormat: any = ''): Date | null {\n // categories: { separators: ['.','/','-'], order: ['mdy','dmy','ymd'] }\n let date: Date | null = null;\n console.log('Ok parse...');\n if (typeof value === 'string') {\n switch (this.locale) {\n case 'en':\n date = this.parseDateString(value, { separator: '/', order: 'mdy' });\n break;\n case 'de':\n date = this.parseDateString(value, { separator: '.', order: 'dmy' });\n break;\n case 'fi':\n date = this.parseDateString(value, { separator: '.', order: 'dmy' });\n break;\n }\n }\n return super.parse(date, parseFormat);\n }\n \n parseDateString(value: string, config: IParseFormats): Date {\n const { separator, order } = config;\n const dateStrArr = value.split(separator); // DD.MM.YYYY => { separator: '.', order: 'dmy' }\n const day = Number(dateStrArr[order.indexOf('d')]);\n const month = Number(dateStrArr[order.indexOf('m')]) - 1;\n const year = Number(dateStrArr[order.indexOf('y')]);\n const date = new Date(year, month, day);\n const debugObject = {\n config: { separator, order },\n dateStrArr,\n day,\n month,\n year,\n date,\n };\n console.log('parseDateString(): ', debugObject);\n return date;\n }\n}\n","import {\n EnvironmentProviders,\n makeEnvironmentProviders,\n Optional,\n Provider,\n SkipSelf\n} from '@angular/core';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS, MatFormFieldDefaultOptions } from '@angular/material/form-field';\nimport { MAT_TOOLTIP_DEFAULT_OPTIONS, MatTooltipDefaultOptions } from '@angular/material/tooltip';\nimport { YmtMatIconRegistryService } from '../services/ymt-mat-icon-registry.service';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\nimport { YmtMatPaginatorIntlService } from '../services/ymt-mat-paginator-intl.service';\nimport { TranslateService } from '@ngx-translate/core';\nimport { MAT_TABS_CONFIG, MatTabsConfig } from '@angular/material/tabs';\nimport {\n MAT_DATE_FORMATS,\n MAT_DATE_LOCALE, MAT_NATIVE_DATE_FORMATS,\n MAT_RIPPLE_GLOBAL_OPTIONS,\n provideNativeDateAdapter,\n RippleGlobalOptions\n} from '@angular/material/core';\nimport { MatDatepickerIntl } from '@angular/material/datepicker';\nimport { YmtDatepickerIntlService } from '../services/ymt-datepicker-intl.service';\nimport { provideYmtDateAdapter, YMT_DATE_FROMATS } from '../services';\n\nexport const provideYmtMaterial = (): EnvironmentProviders => {\n const providers: Provider[] = [\n /**\n * Material Date Locale Default\n */\n { provide: MAT_DATE_LOCALE, useFactory: (translate: TranslateService) => translate.defaultLang , deps: [TranslateService] },\n { provide: MAT_DATE_FORMATS, useValue: YMT_DATE_FROMATS },\n \n /**\n * Material Datepicker Internationalization Service Override\n */\n /*{\n provide: MatDatepickerIntl,\n useClass: YmtDatepickerIntlService,\n deps: [TranslateService],\n },*/\n /*{\n provide: MatDatepickerIntl,\n deps: [[new Optional(), new SkipSelf(), MatDatepickerIntl]],\n useFactory: (parentIntl: MatDatepickerIntl)=> {\n return parentIntl || new YmtDatepickerIntlService();\n },\n },*/\n \n /**\n * Material Date Adapter\n */\n // provideYmtDateAdapter(),\n\n /**\n * Material Icon Registry Service Override\n */\n { provide: MatIconRegistry, useClass: YmtMatIconRegistryService },\n\n /**\n * Material Ripple Config\n */\n { provide: MAT_RIPPLE_GLOBAL_OPTIONS, useValue: { disabled: true } as RippleGlobalOptions },\n\n /**\n * Material Paginator Internationalization Service Override\n */\n {\n provide: MatPaginatorIntl,\n useFactory: (translate: TranslateService) => {\n const service = new YmtMatPaginatorIntlService();\n service.injectTranslateService(translate);\n return service;\n },\n deps: [TranslateService]\n },\n \n /**\n * Material Tooltip Config\n */\n {\n provide: MAT_TOOLTIP_DEFAULT_OPTIONS,\n useValue: {\n showDelay: 500,\n positionAtOrigin: true,\n disableTooltipInteractivity: true,\n } as MatTooltipDefaultOptions\n },\n \n /**\n * Material Form Field Config\n */\n {\n provide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n useValue: {\n appearance: 'outline',\n floatLabel: 'always',\n subscriptSizing: 'dynamic',\n } as MatFormFieldDefaultOptions\n },\n \n /**\n * Material Tab Config\n */\n {\n provide: MAT_TABS_CONFIG,\n useValue: {\n animationDuration: '0',\n stretchTabs: false,\n alignTabs: 'start',\n } as MatTabsConfig\n }\n ];\n return makeEnvironmentProviders(providers);\n};\n","export enum YMT_ICON_BUTTON_SIZE {\n small = 'small',\n medium = 'medium'\n}\n","import {\n ApplicationRef,\n booleanAttribute,\n ComponentRef,\n createComponent,\n Directive,\n effect,\n ElementRef,\n EnvironmentInjector,\n inject,\n input,\n OnInit\n} from '@angular/core';\nimport { MatIconButton } from '@angular/material/button';\nimport { YMT_ICON_BUTTON_SIZE } from './ymt-icon-button.model';\n\n@Directive({\n selector: 'button[ymtIconButton],button[ymt-icon-button],a[ymtIconButton],a[ymt-icon-button]',\n standalone: true,\n host: {\n 'mat-icon-button': ''\n }\n})\nexport class YmtIconButtonDirective implements OnInit {\n disabled = input(false, { transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { transform: booleanAttribute, alias: 'aria-disabled' });\n disabledInteractive = input(false, { transform: booleanAttribute });\n size = input<'small' | 'medium' | YMT_ICON_BUTTON_SIZE>(YMT_ICON_BUTTON_SIZE.medium, { alias: 'icon-button-size' });\n\n #elRef = inject(ElementRef);\n #host = this.#elRef.nativeElement;\n #injector = inject(EnvironmentInjector);\n #appRef = inject(ApplicationRef);\n #MatIconButtonComponentRef: ComponentRef<MatIconButton> | null = null;\n #materialIconButtonInputs = [\n { name: 'disabled', signal: this.disabled },\n { name: 'disableRipple', signal: this.disableRipple },\n { name: 'aria-disabled', signal: this.ariaDisabled },\n { name: 'disabledInteractive', signal: this.disabledInteractive }\n ];\n\n constructor() {\n effect(() => this.#applySizeClass());\n effect(() => this.#setMaterialInputs());\n }\n\n ngOnInit(): void {\n this.#MatIconButtonComponentRef = this.#createComponent();\n }\n\n #applySizeClass() {\n this.size() === YMT_ICON_BUTTON_SIZE.small ? this.#host.classList.add(`ymt-icon-button--size-s`) : this.#host.classList.remove(`ymt-icon-button--size-s`);\n this.size() === YMT_ICON_BUTTON_SIZE.medium ? this.#host.classList.add(`ymt-icon-button--size-m`) : this.#host.classList.remove(`ymt-icon-button--size-m`);\n }\n\n #setMaterialInputs() {\n this.#materialIconButtonInputs.forEach(({ name, signal }) => this.#MatIconButtonComponentRef?.setInput(name, signal()));\n }\n\n #createComponent() {\n const matIcon = this.#host.querySelector('mat-icon'); //todo support also upcoming yuv-icon\n const environmentInjector = this.#injector;\n const hostElement = this.#host;\n const componentRef = createComponent(MatIconButton, { hostElement, projectableNodes: [[matIcon]], environmentInjector });\n this.#appRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n}\n","export enum YMT_BUTTON_SIZE {\n small = 'small',\n medium = 'medium'\n}\n","import {\n ApplicationRef,\n createComponent,\n Directive,\n ElementRef,\n EnvironmentInjector,\n input,\n OnInit,\n AfterViewInit,\n inject,\n effect,\n ComponentRef,\n booleanAttribute\n} from '@angular/core';\nimport { MatButton } from '@angular/material/button';\nimport { YMT_BUTTON_SIZE } from './ymt-button.model';\n\ntype ButtonType = keyof typeof MatButtonAttributeEnum;\nenum MatButtonAttributeEnum {\n primary = 'mat-flat-button',\n secondary = 'mat-stroked-button',\n tertiary = 'mat-button'\n}\n\n@Directive({\n selector: 'button[ymtButton], a[ymtButton]',\n standalone: true\n})\nexport class YmtButtonDirective implements OnInit, AfterViewInit {\n ymtButton = input<ButtonType>('primary');\n disabled = input(false, { transform: booleanAttribute });\n ariaDisabled = input(false, { alias: 'aria-disabled', transform: booleanAttribute });\n disableRipple = input(false, { transform: booleanAttribute });\n disabledInteractive = input(false, { transform: booleanAttribute });\n size = input<'small' | 'medium' | YMT_BUTTON_SIZE>(YMT_BUTTON_SIZE.medium, { alias: 'button-size' });\n // Todo: Add input \"isBusy\" as \"busy inactive state\": not clickable and with mat-spinner in button\n\n #environmentInjector = inject(EnvironmentInjector);\n #applicationRef = inject(ApplicationRef);\n #hostElement = inject<ElementRef<HTMLElement>>(ElementRef).nativeElement;\n\n #matButtonComponentRef: ComponentRef<MatButton> | null = null;\n\n #iconPrefix: Element[] = [];\n #noneIconNodes: Node[] = [];\n #iconSuffix: Element[] = [];\n\n #matButtonAttribute = MatButtonAttributeEnum;\n\n constructor() {\n effect(() => {\n const disabled = this.disabled();\n const ariaDisabled = this.ariaDisabled();\n const disableRipple = this.disableRipple();\n const disabledInteractive = this.disabledInteractive();\n this.#updateInputs(disabled, ariaDisabled, disableRipple, disabledInteractive);\n });\n\n effect(() => {\n this.#applySizeClass();\n });\n }\n\n ngOnInit() {\n this.#iconPrefix = this.#getIconPrefixElements();\n this.#noneIconNodes = this.#getNoneIconNodes();\n this.#iconSuffix = this.#getIconSuffixElements();\n this.#matButtonComponentRef = this.#createMatButtonComponent();\n }\n\n ngAfterViewInit() {\n this.#updateInputs();\n }\n\n #updateInputs(\n disabled: boolean = this.disabled(),\n ariaDisabled: boolean = this.ariaDisabled(),\n disableRipple: boolean = this.disableRipple(),\n disabledInteractive: boolean = this.disabledInteractive()\n ) {\n this.#matButtonComponentRef?.setInput('disabled', disabled);\n this.#matButtonComponentRef?.setInput('aria-disabled', ariaDisabled);\n this.#matButtonComponentRef?.setInput('disableRipple', disableRipple);\n this.#matButtonComponentRef?.setInput('disabledInteractive', disabledInteractive);\n }\n\n #createMatButtonComponent(\n hostElement: HTMLElement = this.#hostElement,\n environmentInjector: EnvironmentInjector = this.#environmentInjector,\n iconPrefix: Element[] = this.#iconPrefix,\n noneIconNodes: Node[] = this.#noneIconNodes,\n iconSuffix: Element[] = this.#iconSuffix\n ) {\n this.#setInitialAttributesToHost();\n const componentRef = createComponent(MatButton, {\n environmentInjector,\n hostElement,\n projectableNodes: [[...iconPrefix], [...noneIconNodes], [...iconSuffix]]\n });\n this.#applicationRef.attachView(componentRef.hostView);\n componentRef.changeDetectorRef.detectChanges();\n return componentRef;\n }\n\n #setInitialAttributesToHost() {\n this.#hostElement.setAttribute(this.#matButtonAttribute[this.ymtButton()], '');\n }\n\n #getIconPrefixElements() {\n return Array.from(this.#hostElement.querySelectorAll('mat-icon:not([iconPositionEnd])'));\n }\n\n #getIconSuffixElements() {\n return Array.from(this.#hostElement.querySelectorAll('mat-icon[iconPositionEnd]'));\n }\n\n #getNoneIconNodes() {\n const iter = document.createNodeIterator(this.#hostElement, NodeFilter.SHOW_ALL, (node) => {\n return node.nodeName.toLowerCase() !== 'mat-icon' && node.parentElement === this.#hostElement ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT;\n });\n let currentNode: Node | null;\n const filteredNodes: Node[] = [];\n while ((currentNode = iter.nextNode())) {\n filteredNodes.push(currentNode);\n }\n return filteredNodes;\n }\n\n #applySizeClass() {\n this.size() === YMT_BUTTON_SIZE.small ? this.#hostElement.classList.add(`ymt-button--size-s`) : this.#hostElement.classList.remove(`ymt-button--size-s`);\n this.size() === YMT_BUTTON_SIZE.medium ? this.#hostElement.classList.add(`ymt-button--size-m`) : this.#hostElement.classList.remove(`ymt-button--size-m`);\n }\n}\n","import {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n HostBinding,\n HostListener,\n inject,\n Input,\n input,\n OnDestroy, Renderer2,\n signal,\n untracked,\n viewChild\n} from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { MatInput } from '@angular/material/input';\nimport {\n AbstractControlDirective,\n ControlValueAccessor, FormControlStatus, FormGroup, FormsModule,\n NgControl,\n ReactiveFormsModule\n} from '@angular/forms';\nimport { MatFormField, MatFormFieldControl } from '@angular/material/form-field';\nimport { TranslateService } from '@ngx-translate/core';\nimport { debounceTime, Subject } from 'rxjs';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport {\n MatDatepicker,\n MatDatepickerInput,\n MatDatepickerIntl,\n MatDateRangeInput,\n MatDateRangePicker,\n MatEndDate,\n MatStartDate\n} from '@angular/material/datepicker';\nimport { MatTimepicker, MatTimepickerInput } from '@angular/material/timepicker';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\nimport {\n DateAdapter,\n MAT_DATE_FORMATS,\n MAT_DATE_LOCALE,\n MAT_NATIVE_DATE_FORMATS,\n MatDateFormats,\n NativeDateModule\n} from '@angular/material/core';\nimport { YmtDatepickerIntlService } from '../../services/ymt-datepicker-intl.service';\nimport { provideYmtDateAdapter, YMT_DATE_FROMATS } from '../../services';\n\ntype DatepickerValue = DatetimeValue;\ntype DatetimeValue = Date | string | null;\ntype MultiDateValue = Set<Date> | null; // not implemented yet!\ntype DateRangeValue = IRangeValue<DatetimeValue> | null; // not implemented yet!\nexport type DatepickerMode = keyof typeof EnumDatepickerMode;\nenum EnumDatepickerMode {\n DATE = 'DATE',\n // MULTI_DATE = 'MULTI_DATE', // not implemented yet!\n DATE_RANGE = 'DATE_RANGE',\n TIME = 'TIME',\n}\ninterface IRangeValue<T = unknown> {\n start: T;\n end: T;\n}\nexport interface DateRangePlaceholder { startDate: string; endDate: string; }\n\n@Component({\n selector: 'ymt-datepicker',\n templateUrl: './datepicker.component.html',\n styleUrl: './datepicker.component.scss',\n standalone: true,\n imports: [CommonModule, MatInput, FormsModule, ReactiveFormsModule, MatDatepicker, MatDatepickerInput, MatTimepicker, MatTimepickerInput, MatDateRangeInput, MatDateRangePicker, MatEndDate, MatStartDate, NativeDateModule],\n providers: [\n { provide: MatFormFieldControl, useExisting: DatepickerComponent },\n /*{\n provide: MAT_DATE_FORMATS,\n useValue: {\n ...MAT_NATIVE_DATE_FORMATS,\n display: {\n ...MAT_NATIVE_DATE_FORMATS.display,\n dateInput: {\n ...MAT_NATIVE_DATE_FORMATS.display.dateInput,\n day: 'numeric' as Intl.DateTimeFormatOptions['day'] // has effect\n }\n }\n } as MatDateFormats,\n },*/\n { provide: MatDatepickerIntl, useClass: YmtDatepickerIntlService },\n provideYmtDateAdapter()\n ],\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatepickerComponent implements MatFormFieldControl<DatepickerValue>, ControlValueAccessor, AfterViewInit, OnDestroy {\n // Todo: Refactoring: Write BaseMatFormFieldControlComponent class for further custom controls in @yuuvis/material\n // Done: Internationalization\n // Done: Implement Datepicker features and options:\n // // [X] max\n // // [X] min\n // Done: MatFormFieldControl implementation:\n // // [x]handling errorState: https://material.angular.dev/components/input/overview#changing-when-error-messages-are-shown\n // // [x]handling focus\n // // [x]handling setDescribedByIds(ids: string[]): void\n // // [x] set aria-labeledby\n // // [x] set disabled\n // Todo: Refactoring: Better solution for handling value changes from input-element to model (kill ngModelOptions on inputs)\n // Todo: Better solution for DATE_RANGE-mode: content projection for input[matStartDate/matEndDate]\n // Done: Check aria-describedby logic of MatFormField to implement the correct setting\n // Done: Trigger\"stateChanges\" in effect function\n // Done: set errorState when input value is invalid\n // Done: Check how to destroy the component and complete stateChanges Observable\n // Done: Check how to get the ngControl instance of this component (optionally set)\n \n #translate = inject(TranslateService);\n #dateAdapter = inject(DateAdapter);\n #locale = signal(inject<unknown>(MAT_DATE_LOCALE));\n #injectNgControl = (ngC = inject(NgControl, { self: true, optional: true })) => ngC ? (ngC.valueAccessor = this) && ngC : null;\n #destroyRef = inject(DestroyRef);\n #formField = inject(MatFormField, {optional: true});\n \n // implemented as part of MatFormFieldControl interface\n ngControl: NgControl | AbstractControlDirective | null = this.#injectNgControl();\n stateChanges = new Subject<void>();\n \n @HostListener('focusin') onFocusIn() {\n this.focused = true;\n }\n @HostListener('focusout') onFocusout() {\n this.focused = false;\n this.propagateTouched();\n }\n \n #value = signal<DatepickerValue>(null);\n @Input()\n set value(v: DatepickerValue) {\n let _value = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));\n const _previousValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(this.ngControl?.value));\n if (_value && _previousValue) {\n if (this.mode === EnumDatepickerMode.TIME) {\n _value = new Date(_previousValue.setHours(_value.getHours(), _value.getMinutes()));\n } else if (this.mode === EnumDatepickerMode.DATE) {\n _value = new Date(_value.setHours(_previousValue.getHours(), _previousValue.getMinutes()));\n }\n } else {\n _value = v;\n }\n this.#value.set(_value);\n this.#empty.set(!_value);\n this.propagateChange(this.value);\n }\n get value(): DatepickerValue { return this.#value(); }\n \n #disabled = signal<boolean>(false);\n @Input()\n set disabled(v: BooleanInput) {\n this.#disabled.set(coerceBooleanProperty(v));\n this.timepickerInput()?.setDisabledState(this.#disabled());\n }\n get disabled(): boolean { return this.#disabled(); }\n \n #id = signal<string>('');\n @Input()\n set id(v: string) { this.#id.set(v); }\n get id(): string { return this.#id(); }\n \n #placeholder = signal<string>('');\n @Input()\n set placeholder(v: string) { this.#placeholder.set(v); }\n get placeholder(): string { return this.#placeholder(); }\n \n #required = signal<boolean>(false);\n @Input()\n set required(v: BooleanInput) { this.#required.set(coerceBooleanProperty(v)); }\n get required(): boolean { return this.#required(); }\n \n #userAriaDescribedBy = signal<string>('');\n @Input()\n set userAriaDescribedBy(v: string) { this.#userAriaDescribedBy.set(v); }\n get userAriaDescribedBy(): string { return this.#userAriaDescribedBy(); }\n \n #empty = signal<boolean>(false);\n set empty(v: boolean) { this.#empty.set(v); }\n get empty() { return this.#empty(); }\n \n #errorState = signal<boolean>(false);\n set errorState(v: boolean) { this.#errorState.set(v); }\n get errorState() { return this.#errorState(); }\n \n #focused = signal<boolean>(false);\n set focused(v: boolean) { this.#focused.set(v); }\n get focused() { return this.#focused(); }\n \n // implemented as part of MatFormFieldControl interface\n @HostBinding('class.floating')\n get shouldLabelFloat(): boolean { return this.focused || !this.empty; }\n readonly autofilled?: boolean;\n readonly controlType: string = 'datepicker';\n readonly disableAutomaticLabeling: boolean = false;\n \n protected readonly datepickerMode = EnumDatepickerMode;\n protected readonly datepicker = viewChild('datepicker', { read: MatDatepicker<never> });\n protected readonly rangepicker = viewChild<MatDateRangePicker<never>>('rangepicker');\n protected readonly timepicker = viewChild('timepicker', { read: MatTimepicker<never> });\n protected readonly datepickerInput = viewChild<MatFormFieldControl<never>>('datepickerInput');\n protected readonly timepickerInput = viewChild<MatTimepickerInput<never>>('timepickerInput');\n \n #mode = signal<DatepickerMode>(EnumDatepickerMode.DATE);\n @Input()\n set mode(v: DatepickerMode) { this.#mode.set(v); }\n get mode(): DatepickerMode { return this.#mode(); }\n \n #min = signal<DatepickerValue>(null);\n @Input()\n set min(v: DatepickerValue) {\n const validValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));\n \n if (!this.#dateAdapter.sameDate(validValue, this.#min())) {\n this.#min.set(validValue);\n }\n }\n get min() { return this.#min(); }\n \n #max = signal<DatepickerValue>(null);\n @Input()\n set max(v: DatepickerValue) {\n const validValue = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(v));\n \n if (!this.#dateAdapter.sameDate(validValue, this.#max())) {\n this.#max.set(validValue);\n }\n }\n get max() { return this.#max(); }\n \n #rangePlaceholder = signal<DateRangePlaceholder>({startDate: 'Start Date', endDate: 'End Date'});\n @Input()\n set rangePlaceholder(v: DateRangePlaceholder) { this.#rangePlaceholder.set(v); }\n get rangePlaceholder(): DateRangePlaceholder { return this.#rangePlaceholder(); }\n \n rangeValue = { start: '', end: '' };\n \n startDateFormControlName = input<string>('');\n endDateFormControlName = input<string>('');\n formGroup = input<FormGroup>();\n \n constructor() {\n // triggers state changes for the MatFormFieldControl\n effect(() => {\n this.#value();\n this.#placeholder();\n this.#rangePlaceholder(); // Todo: Check if it needs to trigger \"stateChanges\"!\n this.#disabled();\n this.#id();\n this.#focused();\n this.#empty();\n this.#required();\n this.#errorState();\n this.#locale();\n this.#mode();\n this.#min();\n this.#max();\n untracked(() => this.stateChanges.next());\n });\n \n // handle language change\n this.#translate.onLangChange.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((event) => {\n this.#locale.set(event.lang);\n this.#dateAdapter.setLocale(this.#locale());\n });\n effect(() => {\n this.#value();\n untracked(() => console.log('DatepickerComponent.value: ', this.value));\n });\n }\n \n // implemented as part of ControlValueAccessor interface\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateChange: ((_: any) => void) = () => {};\n // implemented as part of ControlValueAccessor interface\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n propagateTouched: (() => void) = () => {};\n \n // implemented as part of ControlValueAccessor interface\n registerOnChange(fn: any): void {\n this.propagateChange = fn;\n }\n \n // implemented as part of ControlValueAccessor interface\n registerOnTouched(fn: any): void {\n this.propagateTouched = fn;\n }\n \n // implemented as part of ControlValueAccessor interface\n writeValue(date: DatepickerValue): void {\n this.value = date;\n }\n \n // implemented as part of ControlValueAccessor interface\n setDisabledState(isDisabled: boolean): void {\n this.disabled = isDisabled;\n }\n \n // implemented as part of MatFormFieldControl interface\n onContainerClick(event: MouseEvent): void {\n const focusableInput = this.datepickerInput();\n if (focusableInput && !this.focused && !this.disabled) {\n // sets focus to MatFormFieldControls\n focusableInput.onContainerClick(event);\n this.focused = true;\n }\n }\n \n // implemented as part of MatFormFieldControl interface\n setDescribedByIds(ids: string[]): void {\n this.datepickerInput()?.setDescribedByIds(ids);\n }\n \n ngAfterViewInit(): void {\n const _datepickerInput = this.datepickerInput();\n const _formField = this.#formField;\n \n if (_datepickerInput) {\n // set MatFormFieldControl.id for auto labeling within a MatFormField\n this.id = _datepickerInput.id || this.id;\n // track datepicker input state changes as they are MatFormFieldControl inputs\n _datepickerInput.stateChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n // set errorState\n this.errorState = _datepickerInput.errorState;\n // set disabled state\n this.disabled = _datepickerInput.disabled;\n });\n }\n \n // set the input's aria-describedby attribute to the parent MatFormField._hintLabelIds (=\"label-1 label-2 ...\")\n if (_formField) {\n this.setDescribedByIds([..._formField._hintLabelId.split(' ')]);\n }\n \n // set errorState for Range-Mode\n this.formGroup()?.statusChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((v: FormControlStatus) => {this.errorState = (v === 'INVALID');});\n \n this.ngControl?.valueChanges?.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe((value) => {\n // get the previous value of the associated formFieldControl\n if (!this.value && value) this.value = this.#dateAdapter.getValidDateOrNull(this.#dateAdapter.deserialize(value));\n });\n }\n \n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n \n /* Custom Datepicker Functions */\n \n open(): void {\n this.datepicker()?.open();\n this.rangepicker()?.open();\n this.timepicker()?.open();\n }\n}\n","@switch (mode) {\n @case (datepickerMode.DATE) {\n <input\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled\"\n matInput\n [matDatepicker]=\"datepicker\"\n [min]=\"min\"\n [max]=\"max\"\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n #datepickerInput=\"matInput\"\n />\n <mat-datepicker #datepicker></mat-datepicker>\n }\n @case (datepickerMode.DATE_RANGE) {\n @let formGroup = this.formGroup();\n @let startDate = this.startDateFormControlName();\n @let endDate = this.endDateFormControlName();\n @if (formGroup && startDate && endDate) {\n <mat-date-range-input\n [rangePicker]=\"rangepicker\"\n [min]=\"min\"\n [max]=\"max\"\n [formGroup]=\"formGroup\"\n #datepickerInput=\"matDateRangeInput\"\n >\n <input matStartDate [placeholder]=\"rangePlaceholder.startDate\" [formControlName]=\"startDate\"/>\n <input matEndDate [placeholder]=\"rangePlaceholder.endDate\" [formControlName]=\"endDate\"/>\n </mat-date-range-input>\n <mat-date-range-picker #rangepicker></mat-date-range-picker>\n } @else {\n <mat-date-range-input\n [rangePicker]=\"rangepicker\"\n [min]=\"min\"\n [max]=\"max\"\n #datepickerInput=\"matDateRangeInput\"\n >\n <input matStartDate [placeholder]=\"rangePlaceholder.startDate\" (dateChange)=\"rangeValue.start = $event.value\"/>\n <input matEndDate [placeholder]=\"rangePlaceholder.endDate\" (dateChange)=\"rangeValue.end = $event.value\"/>\n </mat-date-range-input>\n <mat-date-range-picker #rangepicker></mat-date-range-picker>\n }\n }\n @case (datepickerMode.TIME) {\n <input\n [placeholder]=\"placeholder\"\n [attr.disabled]=\"disabled\"\n matInput\n [matTimepicker]=\"timepicker\"\n [(ngModel)]=\"value\"\n [ngModelOptions]=\"{updateOn: 'blur'}\"\n #datepickerInput=\"matInput\"\n #timepickerInput=\"matTimepickerInput\"\n >\n <mat-timepicker #timepicker/>\n }\n @default {\n <input\n type=\"datetime-locale\"\n [placeholder]=\"placeholder\"\n matInput\n [(ngModel)]=\"value\"\n #datepickerInput=\"matInput\"\n />\n }\n}\n\n","import {\n ChangeDetectionStrategy,\n Component,\n DestroyRef,\n effect,\n inject,\n Input,\n OnDestroy,\n OnInit,\n signal\n} from '@angular/core';\nimport { MatDatepickerIntl } from '@angular/material/datepicker';\nimport { DatepickerComponent } from '../datepicker';\nimport { YmtDatepickerIntlService } from '../../services';\nimport { YmtIconButtonDirective } from '../../directives';\nimport { MatIcon } from '@angular/material/icon';\nimport { BooleanInput, coerceBooleanProperty } from '@angular/cdk/coercion';\nimport { Subject } from 'rxjs';\nimport { takeUntilDestroyed } from '@angular/core/rxjs-interop';\n\n@Component({\n selector: 'ymt-datepicker-toggle',\n template: `\n <button\n type=\"button\"\n ymtIconButton\n [attr.aria-label]=\"ariaLabel\"\n [aria-disabled]=\"disabled\"\n [disabled]=\"disabled\"\n >\n <ng-content select=\"mat-icon\"></ng-content>\n </button>\n `,\n standalone: true,\n imports: [\n YmtIconButtonDirective,\n MatIcon\n ],\n providers: [\n { provide: MatDatepickerIntl, useClass: YmtDatepickerIntlService}\n ],\n host: {\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: 'matDatepickerToggle',\n changeDetection: ChangeDetectionStrategy.OnPush\n})\nexport class DatepickerToggleComponent implements OnInit, OnDestroy {\n #intl = inject(MatDatepickerIntl);\n #destroyRef = inject(DestroyRef);\n \n #datepicker = signal<DatepickerComponent | null>(null);\n @Input({ alias: 'for', required: true })\n set datepicker(v: DatepickerComponent | null) { this.#datepicker.set(v); }\n get datepicker() { return this.#datepicker(); }\n \n #disabled = signal<boolean>(false);\n @Input()\n set disabled(v: BooleanInput) { this.#disabled.set(coerceBooleanProperty(v)); }\n get disabled(): boolean { return this.#disabled(); }\n \n #ariaLabel = signal(this.#intl.openCalendarLabel);\n @Input()\n set ariaLabel(v: string) { this.#ariaLabel.set(v); }\n get ariaLabel() { return this.#ariaLabel(); }\n \n stateChanges = new Subject<void>();\n \n constructor() {\n effect(() => {\n this.#datepicker();\n this.#disabled();\n this.#ariaLabel();\n this.stateChanges.next();\n });\n }\n \n _open(event: Event): void {\n if (this.datepicker && !this.disabled) {\n this.datepicker.open();\n event.stopPropagation();\n }\n }\n \n ngOnInit(): void {\n const datepicker = this.datepicker;\n if (datepicker) {\n datepicker.stateChanges.pipe(takeUntilDestroyed(this.#destroyRef)).subscribe(() => {\n this.ariaLabel = this.#intl.openCalendarLabel;\n if (this.disabled !== datepicker.disabled) {\n this.disabled = datepicker.disabled;\n }\n });\n } else {\n throw new Error(`DatepickerComponent is missing on DatepickerToggleComponent's \"for\"-attribute!`);\n }\n }\n \n ngOnDestroy(): void {\n this.stateChanges.complete();\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAUM,MAAO,yBAA0B,SAAQ,eAAe,CAAA;AAC5D,IAAA,qBAAqB,GAAG,CAAC,wBAAwB,CAAC;AAElD,IAAA,WAAA,CAAY,WAAuB,EAAE,UAAwB,EAAoB,QAAa,EAAE,aAA2B,EAAA;QACzH,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAE,aAAa,CAAC;QACvD,IAAI,CAAC,sBAAsB,EAAE;;IAGtB,sBAAsB,CAAC,GAAG,UAAoB,EAAA;AACrD,QAAA,MAAM,MAAM,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC;AAC3E,QAAA,KAAK,CAAC,sBAAsB,CAAC,GAAG,MAAM,CAAC;AACvC,QAAA,OAAO,IAAI;;IAGb,OAAO,UAAU,CAAC,KAAoB,EAAA;AACpC,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE;YAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,eAAe,CAAC;YAC1D,OAAO,qBAAqB,CAAC,GAAG,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;;AAEhE,QAAA,OAAO,KAAK;;AApBH,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,kBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,wEAGmC,QAAQ,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,YAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAHpE,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,yBAAyB,cAFxB,MAAM,EAAA,CAAA;;4FAEP,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBAHrC,UAAU;AAAC,YAAA,IAAA,EAAA,CAAA;AACV,oBAAA,UAAU,EAAE;AACb,iBAAA;;0BAIiE,MAAM;2BAAC,QAAQ;;;ACTjF;AAEM,MAAO,0BAA2B,SAAQ,gBAAgB,CAAA;AAC9D,IAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;IACrC,mBAAmB,GAAW,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,mCAAmC,CAAC;IAEjF,aAAa,GAAG,CACvB,IAAY,EACZ,QAAgB,EAChB,MAAc,KACZ;QACF,IAAI,MAAM,KAAK,CAAC,IAAI,QAAQ,KAAK,CAAC,EAAE;AAClC,YAAA,OAAO,KAAK,IAAI,CAAC,mBAAmB,CAAI,CAAA,EAAA,MAAM,EAAE;;QAGlD,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;AAC5B,QAAA,MAAM,UAAU,GAAG,IAAI,GAAG,QAAQ;;AAElC,QAAA,MAAM,QAAQ,GAAG,UAAU,GAAG,MAAM;YAClC,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,QAAQ,EAAE,MAAM,CAAC;YACvC,UAAU,GAAG,QAAQ;AACvB,QAAA,OAAO,CAAG,EAAA,UAAU,GAAG,CAAC,CAAM,GAAA,EAAA,QAAQ,CAAI,CAAA,EAAA,IAAI,CAAC,mBAAmB,CAAI,CAAA,EAAA,MAAM,EAAE;AAChF,KAAC;;AAID,IAAA,sBAAsB,CAAC,SAA2B,EAAA;AAChD,QAAA,IAAI,CAAC,UAAU,GAAG,SAAS;QAE3B,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,SAAS,CAAC,MAAK;YAC1C,IAAI,CAAC,eAAe,EAAE;AACxB,SAAC,CAAC;QAEF,IAAI,CAAC,eAAe,EAAE;;IAGxB,eAAe,GAAA;QACb,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,iCAAiC,CAAC;QACnF,IAAI,CAAC,aAAa,GAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,6BAA6B,CAAC;QAC/E,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,iCAAiC,CAAC;QACnF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,CAAC;QAC7E,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,6BAA6B,CAAC;QAC3E,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,mCAAmC,CAAC;AACvF,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;;wGAzCV,0BAA0B,EAAA,IAAA,EAAA,IAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAA1B,0BAA0B,EAAA,CAAA;;4FAA1B,0BAA0B,EAAA,UAAA,EAAA,CAAA;kBADtC;;;ACCK,MAAO,wBAAyB,SAAQ,iBAAiB,CAAA;AAC7D,IAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;AAErC,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAEP,IAAI,CAAC,eAAe,EAAE;AACtB,QAAA,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;YACrE,IAAI,CAAC,eAAe,EAAE;AACxB,SAAC,CAAC;;IAGJ,eAAe,GAAA;QACb,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,kCAAkC,CAAC;QACpF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,mCAAmC,CAAC;QACtF,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,CAAC;QAC5E,IAAI,CAAC,mBAAmB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,oCAAoC,CAAC;QACxF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,+BAA+B,CAAC;QAC9E,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,+BAA+B,CAAC;QAC9E,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,CAAC;QAC5E,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,8BAA8B,CAAC;QAC5E,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,mCAAmC,CAAC;QACtF,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,mCAAmC,CAAC;QACtF,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,uCAAuC,CAAC;QAC9F,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,2CAA2C,CAAC;QACtG,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,+BAA+B,CAAC;QAC9E,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,6BAA6B,CAAC;AAC1E,QAAA,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;;IAGZ,eAAe,CAAC,KAAa,EAAE,GAAW,EAAA;QACjD,OAAO,KAAK,CAAC,eAAe,CAAC,KAAK,EAAE,GAAG,CAAC;;IAGjC,oBAAoB,CAAC,KAAa,EAAE,GAAW,EAAA;QACtD,OAAO,KAAK,CAAC,oBAAoB,CAAC,KAAK,EAAE,GAAG,CAAC;;wGAnCpC,wBAAwB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;AAAxB,IAAA,OAAA,KAAA,GAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,EAAA,EAAA,IAAA,EAAA,wBAAwB,cADX,MAAM,EAAA,CAAA;;4FACnB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBADpC,UAAU;mBAAC,EAAE,UAAU,EAAE,MAAM,EAAE;;;ACMrB,MAAA,gBAAgB,GAAmB;AAC9C,IAAA,GAAG,uBAAuB;AAC1B,IAAA,KAAK,EAAE;AACL,QAAA,SAAS,EAAE,IAAI;AACf,QAAA,SAAS,EAAE,IAAI;AAChB,KAAA;;AAGa,SAAA,qBAAqB,CACnC,OAAA,GAA0B,gBAAgB,EAAA;IAE1C,OAAO;AACL,QAAA,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,qBAAqB,EAAE;AACzD,QAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,OAAO,EAAE;KACjD;AACH;AAQM,MAAO,qBAAsB,SAAQ,iBAAiB,CAAA;;AAG1D,IAAA,iBAAiB,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACnC,IAAA,MAAM;AAEf,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;QAEP,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,iBAAiB,CAAC,WAAW;;AAEhD,QAAA,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC,CAAC,SAAS,CAAC,MAAK;YAC3D,OAAO,CAAC,GAAG,CAAC,sBAAsB,EAAE,IAAI,CAAC,MAAM,CAAC;AAChD,YAAA,OAAO,CAAC,GAAG,CAAC,kDAAkD,EAAE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,CAAC;AACrH,SAAC,CAAC;;AAGK,IAAA,KAAK,CAAC,KAAU,EAAE,WAAA,GAAmB,EAAE,EAAA;;QAE9C,IAAI,IAAI,GAAgB,IAAI;AAC5B,QAAA,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAC1B,QAAA,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;AAC7B,YAAA,QAAQ,IAAI,CAAC,MAAM;AACjB,gBAAA,KAAK,IAAI;AACP,oBAAA,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;oBACpE;AACF,gBAAA,KAAK,IAAI;AACP,oBAAA,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;oBACpE;AACF,gBAAA,KAAK,IAAI;AACP,oBAAA,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;oBACpE;;;QAGN,OAAO,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,WAAW,CAAC;;IAGvC,eAAe,CAAC,KAAa,EAAE,MAAqB,EAAA;AAClD,QAAA,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,GAAG,MAAM;QACnC,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC1C,QAAA,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;AAClD,QAAA,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;AACxD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;QACnD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;AACvC,QAAA,MAAM,WAAW,GAAG;AAClB,YAAA,MAAM,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE;YAC5B,UAAU;YACV,GAAG;YACH,KAAK;YACL,IAAI;YACJ,IAAI;SACL;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,qBAAqB,EAAE,WAAW,CAAC;AAC/C,QAAA,OAAO,IAAI;;wGArDF,qBAAqB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA;4GAArB,qBAAqB,EAAA,CAAA;;4FAArB,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBADjC;;;ACPM,MAAM,kBAAkB,GAAG,MAA2B;AAC3D,IAAA,MAAM,SAAS,GAAe;AAC5B;;AAEG;QACH,EAAE,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,CAAC,SAA2B,KAAK,SAAS,CAAC,WAAW,EAAG,IAAI,EAAE,CAAC,gBAAgB,CAAC,EAAE;AAC3H,QAAA,EAAE,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB,EAAE;AAEzD;;AAEG;AACH;;;;AAII;AACJ;;;;;;AAMI;AAEJ;;AAEG;;AAGH;;AAEG;AACH,QAAA,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,yBAAyB,EAAE;AAEjE;;AAEG;QACH,EAAE,OAAO,EAAE,yBAAyB,EAAE,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAyB,EAAE;AAE3F;;AAEG;AACH,QAAA;AACE,YAAA,OAAO,EAAE,gBAAgB;AACzB,YAAA,UAAU,EAAE,CAAC,SAA2B,KAAI;AAC1C,gBAAA,MAAM,OAAO,GAAG,IAAI,0BAA0B,EAAE;AAChD,gBAAA,OAAO,CAAC,sBAAsB,CAAC,SAAS,CAAC;AACzC,gBAAA,OAAO,OAAO;aACf;YACD,IAAI,EAAE,CAAC,gBAAgB;AACxB,SAAA;AAED;;AAEG;AACH,QAAA;AACE,YAAA,OAAO,EAAE,2BAA2B;AACpC,YAAA,QAAQ,EAAE;AACR,gBAAA,SAAS,EAAE,GAAG;AACd,gBAAA,gBAAgB,EAAE,IAAI;AACtB,gBAAA,2BAA2B,EAAE,IAAI;AACN;AAC9B,SAAA;AAED;;AAEG;AACH,QAAA;AACE,YAAA,OAAO,EAAE,8BAA8B;AACvC,YAAA,QAAQ,EAAE;AACR,gBAAA,UAAU,EAAE,SAAS;AACrB,gBAAA,UAAU,EAAE,QAAQ;AACpB,gBAAA,eAAe,EAAE,SAAS;AACG;AAChC,SAAA;AAED;;AAEG;AACH,QAAA;AACE,YAAA,OAAO,EAAE,eAAe;AACxB,YAAA,QAAQ,EAAE;AACR,gBAAA,iBAAiB,EAAE,GAAG;AACtB,gBAAA,WAAW,EAAE,KAAK;AAClB,gBAAA,SAAS,EAAE,OAAO;AACF;AACnB;KACF;AACD,IAAA,OAAO,wBAAwB,CAAC,SAAS,CAAC;AAC5C;;ICnHY;AAAZ,CAAA,UAAY,oBAAoB,EAAA;AAC9B,IAAA,oBAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,oBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAHW,oBAAoB,KAApB,oBAAoB,GAG/B,EAAA,CAAA,CAAA;;MCoBY,sBAAsB,CAAA;IACjC,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IACxD,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AAC7D,IAAA,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;IACpF,mBAAmB,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACnE,IAAA,IAAI,GAAG,KAAK,CAA4C,oBAAoB,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC;AAEnH,IAAA,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC;AAC3B,IAAA,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa;AACjC,IAAA,SAAS,GAAG,MAAM,CAAC,mBAAmB,CAAC;AACvC,IAAA,OAAO,GAAG,MAAM,CAAC,cAAc,CAAC;IAChC,0BAA0B,GAAuC,IAAI;AACrE,IAAA,yBAAyB,GAAG;QAC1B,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE;QAC3C,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,aAAa,EAAE;QACrD,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE;QACpD,EAAE,IAAI,EAAE,qBAAqB,EAAE,MAAM,EAAE,IAAI,CAAC,mBAAmB;KAChE;AAED,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;QACpC,MAAM,CAAC,MAAM,IAAI,CAAC,kBAAkB,EAAE,CAAC;;IAGzC,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,gBAAgB,EAAE;;IAG3D,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,EAAE,KAAK,oBAAoB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAyB,uBAAA,CAAA,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA,uBAAA,CAAyB,CAAC;AACzJ,QAAA,IAAI,CAAC,IAAI,EAAE,KAAK,oBAAoB,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAyB,uBAAA,CAAA,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA,uBAAA,CAAyB,CAAC;;IAG5J,kBAAkB,GAAA;QAChB,IAAI,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC,0BAA0B,EAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;;IAGzH,gBAAgB,GAAA;AACd,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACrD,QAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,SAAS;AAC1C,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK;QAC9B,MAAM,YAAY,GAAG,eAAe,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,gBAAgB,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,mBAAmB,EAAE,CAAC;QACxH,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;AAC9C,QAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;AAC9C,QAAA,OAAO,YAAY;;wGA5CV,sBAAsB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAtB,sBAAsB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,mFAAA,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,aAAA,EAAA,EAAA,iBAAA,EAAA,eAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,iBAAA,EAAA,EAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAtB,sBAAsB,EAAA,UAAA,EAAA,CAAA;kBAPlC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,mFAAmF;AAC7F,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,IAAI,EAAE;AACJ,wBAAA,iBAAiB,EAAE;AACpB;AACF,iBAAA;;;ICtBW;AAAZ,CAAA,UAAY,eAAe,EAAA;AACzB,IAAA,eAAA,CAAA,OAAA,CAAA,GAAA,OAAe;AACf,IAAA,eAAA,CAAA,QAAA,CAAA,GAAA,QAAiB;AACnB,CAAC,EAHW,eAAe,KAAf,eAAe,GAG1B,EAAA,CAAA,CAAA;;ACeD,IAAK,sBAIJ;AAJD,CAAA,UAAK,sBAAsB,EAAA;AACzB,IAAA,sBAAA,CAAA,SAAA,CAAA,GAAA,iBAA2B;AAC3B,IAAA,sBAAA,CAAA,WAAA,CAAA,GAAA,oBAAgC;AAChC,IAAA,sBAAA,CAAA,UAAA,CAAA,GAAA,YAAuB;AACzB,CAAC,EAJI,sBAAsB,KAAtB,sBAAsB,GAI1B,EAAA,CAAA,CAAA;MAMY,kBAAkB,CAAA;AAC7B,IAAA,SAAS,GAAG,KAAK,CAAa,SAAS,CAAC;IACxC,QAAQ,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACxD,IAAA,YAAY,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,eAAe,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IACpF,aAAa,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC7D,mBAAmB,GAAG,KAAK,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,gBAAgB,EAAE,CAAC;AACnE,IAAA,IAAI,GAAG,KAAK,CAAuC,eAAe,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;;AAGpG,IAAA,oBAAoB,GAAG,MAAM,CAAC,mBAAmB,CAAC;AAClD,IAAA,eAAe,GAAG,MAAM,CAAC,cAAc,CAAC;AACxC,IAAA,YAAY,GAAG,MAAM,CAA0B,UAAU,CAAC,CAAC,aAAa;IAExE,sBAAsB,GAAmC,IAAI;IAE7D,WAAW,GAAc,EAAE;IAC3B,cAAc,GAAW,EAAE;IAC3B,WAAW,GAAc,EAAE;IAE3B,mBAAmB,GAAG,sBAAsB;AAE5C,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;AACV,YAAA,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE;AAChC,YAAA,MAAM,YAAY,GAAG,IAAI,CAAC,YAAY,EAAE;AACxC,YAAA,MAAM,aAAa,GAAG,IAAI,CAAC,aAAa,EAAE;AAC1C,YAAA,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,EAAE;YACtD,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,CAAC;AAChF,SAAC,CAAC;QAEF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,eAAe,EAAE;AACxB,SAAC,CAAC;;IAGJ,QAAQ,GAAA;AACN,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAChD,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,iBAAiB,EAAE;AAC9C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,sBAAsB,EAAE;AAChD,QAAA,IAAI,CAAC,sBAAsB,GAAG,IAAI,CAAC,yBAAyB,EAAE;;IAGhE,eAAe,GAAA;QACb,IAAI,CAAC,aAAa,EAAE;;IAGtB,aAAa,CACX,WAAoB,IAAI,CAAC,QAAQ,EAAE,EACnC,YAAwB,GAAA,IAAI,CAAC,YAAY,EAAE,EAC3C,aAAA,GAAyB,IAAI,CAAC,aAAa,EAAE,EAC7C,mBAA+B,GAAA,IAAI,CAAC,mBAAmB,EAAE,EAAA;QAEzD,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC;QAC3D,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,eAAe,EAAE,YAAY,CAAC;QACpE,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC;QACrE,IAAI,CAAC,sBAAsB,EAAE,QAAQ,CAAC,qBAAqB,EAAE,mBAAmB,CAAC;;IAGnF,yBAAyB,CACvB,WAA2B,GAAA,IAAI,CAAC,YAAY,EAC5C,mBAA2C,GAAA,IAAI,CAAC,oBAAoB,EACpE,UAAA,GAAwB,IAAI,CAAC,WAAW,EACxC,aAAA,GAAwB,IAAI,CAAC,cAAc,EAC3C,UAAA,GAAwB,IAAI,CAAC,WAAW,EAAA;QAExC,IAAI,CAAC,2BAA2B,EAAE;AAClC,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,SAAS,EAAE;YAC9C,mBAAmB;YACnB,WAAW;AACX,YAAA,gBAAgB,EAAE,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC;AACxE,SAAA,CAAC;QACF,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC;AACtD,QAAA,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE;AAC9C,QAAA,OAAO,YAAY;;IAGrB,2BAA2B,GAAA;AACzB,QAAA,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,EAAE,EAAE,CAAC;;IAGhF,sBAAsB,GAAA;AACpB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,iCAAiC,CAAC,CAAC;;IAG1F,sBAAsB,GAAA;AACpB,QAAA,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,2BAA2B,CAAC,CAAC;;IAGpF,iBAAiB,GAAA;AACf,QAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,IAAI,KAAI;AACxF,YAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,KAAK,UAAU,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,aAAa,GAAG,UAAU,CAAC,aAAa;AACrJ,SAAC,CAAC;AACF,QAAA,IAAI,WAAwB;QAC5B,MAAM,aAAa,GAAW,EAAE;QAChC,QAAQ,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG;AACtC,YAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC;;AAEjC,QAAA,OAAO,aAAa;;IAGtB,eAAe,GAAA;AACb,QAAA,IAAI,CAAC,IAAI,EAAE,KAAK,eAAe,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAoB,kBAAA,CAAA,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA,kBAAA,CAAoB,CAAC;AACxJ,QAAA,IAAI,CAAC,IAAI,EAAE,KAAK,eAAe,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,GAAG,CAAC,CAAoB,kBAAA,CAAA,CAAC,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA,kBAAA,CAAoB,CAAC;;wGAtGhJ,kBAAkB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;4FAAlB,kBAAkB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,iCAAA,EAAA,MAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,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,YAAA,EAAA,EAAA,iBAAA,EAAA,cAAA,EAAA,UAAA,EAAA,eAAA,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,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA;;4FAAlB,kBAAkB,EAAA,UAAA,EAAA,CAAA;kBAJ9B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,iCAAiC;AAC3C,oBAAA,UAAU,EAAE;AACb,iBAAA;;;AC4BD,IAAK,kBAKJ;AALD,CAAA,UAAK,kBAAkB,EAAA;AACrB,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;;AAEb,IAAA,kBAAA,CAAA,YAAA,CAAA,GAAA,YAAyB;AACzB,IAAA,kBAAA,CAAA,MAAA,CAAA,GAAA,MAAa;AACf,CAAC,EALI,kBAAkB,KAAlB,kBAAkB,GAKtB,EAAA,CAAA,CAAA;MAiCY,mBAAmB,CAAA;;;;;;;;;;;;;;;;;;;AAoB9B,IAAA,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACrC,IAAA,YAAY,GAAG,MAAM,CAAC,WAAW,CAAC;IAClC,OAAO,GAAG,MAAM,CAAC,MAAM,CAAU,eAAe,CAAC,CAAC;AAClD,IAAA,gBAAgB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,KAAK,GAAG,GAAG,IAAI;AAC9H,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;IAChC,UAAU,GAAG,MAAM,CAAC,YAAY,EAAE,EAAC,QAAQ,EAAE,IAAI,EAAC,CAAC;;AAGnD,IAAA,SAAS,GAAgD,IAAI,CAAC,gBAAgB,EAAE;AAChF,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;IAET,SAAS,GAAA;AAChC,QAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;IAEK,UAAU,GAAA;AAClC,QAAA,IAAI,CAAC,OAAO,GAAG,KAAK;QACpB,IAAI,CAAC,gBAAgB,EAAE;;AAGzB,IAAA,MAAM,GAAG,MAAM,CAAkB,IAAI,CAAC;IACtC,IACI,KAAK,CAAC,CAAkB,EAAA;AAC1B,QAAA,IAAI,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QACnF,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACjH,QAAA,IAAI,MAAM,IAAI,cAAc,EAAE;YAC5B,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,IAAI,EAAE;AACzC,gBAAA,MAAM,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;;iBAC7E,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,CAAC,IAAI,EAAE;AAChD,gBAAA,MAAM,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,EAAE,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC;;;aAEvF;YACL,MAAM,GAAG,CAAC;;AAEZ,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;QACvB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC;AACxB,QAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAC;;IAElC,IAAI,KAAK,KAAsB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AAEpD,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,CAAC;IAClC,IACI,QAAQ,CAAC,CAAe,EAAA;QAC1B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;QAC5C,IAAI,CAAC,eAAe,EAAE,EAAE,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;;IAE5D,IAAI,QAAQ,KAAc,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;AAElD,IAAA,GAAG,GAAG,MAAM,CAAS,EAAE,CAAC;AACxB,IAAA,IACI,EAAE,CAAC,CAAS,EAAA,EAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,EAAE,KAAa,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC;AAErC,IAAA,YAAY,GAAG,MAAM,CAAS,EAAE,CAAC;AACjC,IAAA,IACI,WAAW,CAAC,CAAS,EAAA,EAAI,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtD,IAAI,WAAW,KAAa,OAAO,IAAI,CAAC,YAAY,EAAE,CAAC;AAEvD,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,CAAC;AAClC,IAAA,IACI,QAAQ,CAAC,CAAe,EAAI,EAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,IAAI,QAAQ,KAAc,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;AAElD,IAAA,oBAAoB,GAAG,MAAM,CAAS,EAAE,CAAC;AACzC,IAAA,IACI,mBAAmB,CAAC,CAAS,EAAA,EAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtE,IAAI,mBAAmB,KAAa,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;AAEvE,IAAA,MAAM,GAAG,MAAM,CAAU,KAAK,CAAC;AAC/B,IAAA,IAAI,KAAK,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC3C,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;AAEnC,IAAA,WAAW,GAAG,MAAM,CAAU,KAAK,CAAC;AACpC,IAAA,IAAI,UAAU,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACrD,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAE7C,IAAA,QAAQ,GAAG,MAAM,CAAU,KAAK,CAAC;AACjC,IAAA,IAAI,OAAO,CAAC,CAAU,EAAA,EAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;;AAGvC,IAAA,IACI,gBAAgB,GAAA,EAAc,OAAO,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC;AAC5D,IAAA,UAAU;IACV,WAAW,GAAW,YAAY;IAClC,wBAAwB,GAAY,KAAK;IAE/B,cAAc,GAAG,kBAAkB;AACnC,IAAA,UAAU,GAAG,SAAS,CAAC,YAAY,EAAE,EAAE,IAAI,GAAE,aAAoB,CAAA,EAAE,CAAC;AACpE,IAAA,WAAW,GAAG,SAAS,CAA4B,aAAa,CAAC;AACjE,IAAA,UAAU,GAAG,SAAS,CAAC,YAAY,EAAE,EAAE,IAAI,GAAE,aAAoB,CAAA,EAAE,CAAC;AACpE,IAAA,eAAe,GAAG,SAAS,CAA6B,iBAAiB,CAAC;AAC1E,IAAA,eAAe,GAAG,SAAS,CAA4B,iBAAiB,CAAC;AAE5F,IAAA,KAAK,GAAG,MAAM,CAAiB,kBAAkB,CAAC,IAAI,CAAC;AACvD,IAAA,IACI,IAAI,CAAC,CAAiB,EAAA,EAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAChD,IAAI,IAAI,KAAqB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;AAEjD,IAAA,IAAI,GAAG,MAAM,CAAkB,IAAI,CAAC;IACpC,IACI,GAAG,CAAC,CAAkB,EAAA;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAEzF,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;AACxD,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;;;IAG7B,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AAE/B,IAAA,IAAI,GAAG,MAAM,CAAkB,IAAI,CAAC;IACpC,IACI,GAAG,CAAC,CAAkB,EAAA;AACxB,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAEzF,QAAA,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE;AACxD,YAAA,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC;;;IAG7B,IAAI,GAAG,KAAK,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC;AAE/B,IAAA,iBAAiB,GAAG,MAAM,CAAuB,EAAC,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAC,CAAC;AAChG,IAAA,IACI,gBAAgB,CAAC,CAAuB,EAAA,EAAI,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9E,IAAI,gBAAgB,KAA2B,OAAO,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAE/E,UAAU,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE;AAEnC,IAAA,wBAAwB,GAAG,KAAK,CAAS,EAAE,CAAC;AAC5C,IAAA,sBAAsB,GAAG,KAAK,CAAS,EAAE,CAAC;IAC1C,SAAS,GAAG,KAAK,EAAa;AAE9B,IAAA,WAAA,GAAA;;QAEE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,YAAY,EAAE;AACnB,YAAA,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,GAAG,EAAE;YACV,IAAI,CAAC,QAAQ,EAAE;YACf,IAAI,CAAC,MAAM,EAAE;YACb,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,OAAO,EAAE;YACd,IAAI,CAAC,KAAK,EAAE;YACZ,IAAI,CAAC,IAAI,EAAE;YACX,IAAI,CAAC,IAAI,EAAE;YACX,SAAS,CAAC,MAAM,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC;AAC3C,SAAC,CAAC;;QAGF,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;YAC1F,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;YAC5B,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;AAC7C,SAAC,CAAC;QACF,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,MAAM,EAAE;AACb,YAAA,SAAS,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,6BAA6B,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AACzE,SAAC,CAAC;;;;AAKJ,IAAA,eAAe,GAAuB,MAAK,GAAG;;;AAG9C,IAAA,gBAAgB,GAAiB,MAAK,GAAG;;AAGzC,IAAA,gBAAgB,CAAC,EAAO,EAAA;AACtB,QAAA,IAAI,CAAC,eAAe,GAAG,EAAE;;;AAI3B,IAAA,iBAAiB,CAAC,EAAO,EAAA;AACvB,QAAA,IAAI,CAAC,gBAAgB,GAAG,EAAE;;;AAI5B,IAAA,UAAU,CAAC,IAAqB,EAAA;AAC9B,QAAA,IAAI,CAAC,KAAK,GAAG,IAAI;;;AAInB,IAAA,gBAAgB,CAAC,UAAmB,EAAA;AAClC,QAAA,IAAI,CAAC,QAAQ,GAAG,UAAU;;;AAI5B,IAAA,gBAAgB,CAAC,KAAiB,EAAA;AAChC,QAAA,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE;AAC7C,QAAA,IAAI,cAAc,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;;AAErD,YAAA,cAAc,CAAC,gBAAgB,CAAC,KAAK,CAAC;AACtC,YAAA,IAAI,CAAC,OAAO,GAAG,IAAI;;;;AAKvB,IAAA,iBAAiB,CAAC,GAAa,EAAA;QAC7B,IAAI,CAAC,eAAe,EAAE,EAAE,iBAAiB,CAAC,GAAG,CAAC;;IAGhD,eAAe,GAAA;AACb,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,EAAE;AAC/C,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;QAElC,IAAI,gBAAgB,EAAE;;YAEpB,IAAI,CAAC,EAAE,GAAG,gBAAgB,CAAC,EAAE,IAAI,IAAI,CAAC,EAAE;;AAExC,YAAA,gBAAgB,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;;AAEtF,gBAAA,IAAI,CAAC,UAAU,GAAG,gBAAgB,CAAC,UAAU;;AAE7C,gBAAA,IAAI,CAAC,QAAQ,GAAG,gBAAgB,CAAC,QAAQ;AAC3C,aAAC,CAAC;;;QAIJ,IAAI,UAAU,EAAE;AACd,YAAA,IAAI,CAAC,iBAAiB,CAAC,CAAC,GAAG,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;;;AAIjE,QAAA,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAoB,KAAI,EAAE,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,EAAC,CAAC;QAEtJ,IAAI,CAAC,SAAS,EAAE,YAAY,EAAE,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,KAAK,KAAI;;AAE3F,YAAA,IAAI,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK;AAAE,gBAAA,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnH,SAAC,CAAC;;IAGJ,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;;;IAK9B,IAAI,GAAA;AACF,QAAA,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE;AACzB,QAAA,IAAI,CAAC,WAAW,EAAE,EAAE,IAAI,EAAE;AAC1B,QAAA,IAAI,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE;;wGAtQhB,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAnB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,mBAAmB,EApBnB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,EAAA,iBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,OAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,EAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,WAAA,EAAA,EAAA,iBAAA,EAAA,aAAA,EAAA,UAAA,EAAA,aAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,QAAA,EAAA,EAAA,iBAAA,EAAA,UAAA,EAAA,UAAA,EAAA,UAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,mBAAA,EAAA,EAAA,iBAAA,EAAA,qBAAA,EAAA,UAAA,EAAA,qBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,IAAA,EAAA,EAAA,iBAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,GAAA,EAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,gBAAA,EAAA,EAAA,iBAAA,EAAA,kBAAA,EAAA,UAAA,EAAA,kBAAA,EAAA,QAAA,EAAA,KAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,wBAAA,EAAA,EAAA,iBAAA,EAAA,0BAAA,EAAA,UAAA,EAAA,0BAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,sBAAA,EAAA,EAAA,iBAAA,EAAA,wBAAA,EAAA,UAAA,EAAA,wBAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,iBAAA,EAAA,WAAA,EAAA,UAAA,EAAA,WAAA,EAAA,QAAA,EAAA,IAAA,EAAA,UAAA,EAAA,KAAA,EAAA,iBAAA,EAAA,IAAA,EAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,SAAA,EAAA,aAAA,EAAA,UAAA,EAAA,cAAA,EAAA,EAAA,UAAA,EAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,EAAE,mBAAmB,EAAE;AAClE;;;;;;;;;;;;AAYI;AACJ,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,wBAAwB,EAAE;AAClE,YAAA,qBAAqB;AACtB,SAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EA8G+D,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,aAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,aAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,YAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,YAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAEb,aAAa,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,iBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,iBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,QAAA,EAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EC1M/E,uvEAoEA,EAAA,MAAA,EAAA,CAAA,wFAAA,CAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EDIY,YAAY,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAE,QAAQ,EAAA,QAAA,EAAA,yHAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,IAAA,EAAA,aAAA,EAAA,MAAA,EAAA,UAAA,EAAA,MAAA,EAAA,mBAAA,EAAA,kBAAA,EAAA,OAAA,EAAA,UAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,UAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,WAAW,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,8MAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,2CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,oBAAA,EAAA,QAAA,EAAA,0FAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,OAAA,EAAA,QAAA,EAAA,qDAAA,EAAA,MAAA,EAAA,CAAA,MAAA,EAAA,UAAA,EAAA,SAAA,EAAA,gBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,SAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,UAAA,EAAA,IAAA,EAAE,mBAAmB,EAAE,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,kBAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,CAAA,WAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,CAAA,EAAA,QAAA,EAAA,CAAA,QAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAAA,IAAA,CAAA,eAAA,EAAA,QAAA,EAAA,mBAAA,EAAA,MAAA,EAAA,CAAA,iBAAA,EAAA,UAAA,EAAA,SAAA,CAAA,EAAA,OAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EAAE,QAAA,EAAA,gBAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAAE,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,eAAA,EAAA,KAAA,EAAA,KAAA,EAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,aAAa,EAAE,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,SAAA,EAAA,eAAA,EAAA,YAAA,EAAA,iBAAA,CAAA,EAAA,OAAA,EAAA,CAAA,UAAA,EAAA,QAAA,EAAA,QAAA,CAAA,EAAA,QAAA,EAAA,CAAA,eAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAAE,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,eAAA,EAAA,kBAAA,EAAA,kBAAA,EAAA,UAAA,CAAA,EAAA,OAAA,EAAA,CAAA,aAAA,CAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,iBAAiB,EAAE,QAAA,EAAA,sBAAA,EAAA,MAAA,EAAA,CAAA,aAAA,EAAA,UAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,UAAA,EAAA,WAAA,EAAA,iBAAA,EAAA,eAAA,CAAA,EAAA,QAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,kBAAkB,EAAE,QAAA,EAAA,uBAAA,EAAA,QAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,UAAU,EAAE,QAAA,EAAA,mBAAA,EAAA,OAAA,EAAA,CAAA,YAAA,EAAA,WAAA,CAAA,EAAA,EAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,YAAY,qGAAE,gBAAgB,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAqBhN,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBA1B/B,SAAS;AACE,YAAA,IAAA,EAAA,CAAA,EAAA,QAAA,EAAA,gBAAgB,EAGd,UAAA,EAAA,IAAI,EACP,OAAA,EAAA,CAAC,YAAY,EAAE,QAAQ,EAAE,WAAW,EAAE,mBAAmB,EAAE,aAAa,EAAE,kBAAkB,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,CAAC,EACjN,SAAA,EAAA;AACT,wBAAA,EAAE,OAAO,EAAE,mBAAmB,EAAE,WAAW,qBAAqB,EAAE;AAClE;;;;;;;;;;;;AAYI;AACJ,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,wBAAwB,EAAE;AAClE,wBAAA,qBAAqB;qBACtB,EACgB,eAAA,EAAA,uBAAuB,CAAC,MAAM,EAAA,QAAA,EAAA,uvEAAA,EAAA,MAAA,EAAA,CAAA,wFAAA,CAAA,EAAA;wDAiCtB,SAAS,EAAA,CAAA;sBAAjC,YAAY;uBAAC,SAAS;gBAGG,UAAU,EAAA,CAAA;sBAAnC,YAAY;uBAAC,UAAU;gBAOpB,KAAK,EAAA,CAAA;sBADR;gBAqBG,QAAQ,EAAA,CAAA;sBADX;gBASG,EAAE,EAAA,CAAA;sBADL;gBAMG,WAAW,EAAA,CAAA;sBADd;gBAMG,QAAQ,EAAA,CAAA;sBADX;gBAMG,mBAAmB,EAAA,CAAA;sBADtB;gBAkBG,gBAAgB,EAAA,CAAA;sBADnB,WAAW;uBAAC,gBAAgB;gBAezB,IAAI,EAAA,CAAA;sBADP;gBAMG,GAAG,EAAA,CAAA;sBADN;gBAYG,GAAG,EAAA,CAAA;sBADN;gBAYG,gBAAgB,EAAA,CAAA;sBADnB;;;MExLU,yBAAyB,CAAA;AACpC,IAAA,KAAK,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACjC,IAAA,WAAW,GAAG,MAAM,CAAC,UAAU,CAAC;AAEhC,IAAA,WAAW,GAAG,MAAM,CAA6B,IAAI,CAAC;AACtD,IAAA,IACI,UAAU,CAAC,CAA6B,EAAA,EAAI,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,UAAU,KAAK,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AAE7C,IAAA,SAAS,GAAG,MAAM,CAAU,KAAK,CAAC;AAClC,IAAA,IACI,QAAQ,CAAC,CAAe,EAAI,EAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7E,IAAI,QAAQ,KAAc,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;IAElD,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC;AACjD,IAAA,IACI,SAAS,CAAC,CAAS,EAAA,EAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAClD,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC;AAE3C,IAAA,YAAY,GAAG,IAAI,OAAO,EAAQ;AAElC,IAAA,WAAA,GAAA;QACE,MAAM,CAAC,MAAK;YACV,IAAI,CAAC,WAAW,EAAE;YAClB,IAAI,CAAC,SAAS,EAAE;YAChB,IAAI,CAAC,UAAU,EAAE;AACjB,YAAA,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE;AAC1B,SAAC,CAAC;;AAGJ,IAAA,KAAK,CAAC,KAAY,EAAA;QAChB,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AACrC,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YACtB,KAAK,CAAC,eAAe,EAAE;;;IAI3B,QAAQ,GAAA;AACN,QAAA,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU;QAClC,IAAI,UAAU,EAAE;AACd,YAAA,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;gBAChF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,iBAAiB;gBAC7C,IAAI,IAAI,CAAC,QAAQ,KAAK,UAAU,CAAC,QAAQ,EAAE;AACzC,oBAAA,IAAI,CAAC,QAAQ,GAAG,UAAU,CAAC,QAAQ;;AAEvC,aAAC,CAAC;;aACG;AACL,YAAA,MAAM,IAAI,KAAK,CAAC,CAAA,8EAAA,CAAgF,CAAC;;;IAIrG,WAAW,GAAA;AACT,QAAA,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;;wGApDnB,yBAAyB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA;AAAzB,IAAA,OAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,IAAA,EAAA,yBAAyB,EAZzB,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,uBAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,CAAA,KAAA,EAAA,YAAA,CAAA,EAAA,QAAA,EAAA,UAAA,EAAA,SAAA,EAAA,WAAA,EAAA,EAAA,IAAA,EAAA,EAAA,SAAA,EAAA,EAAA,OAAA,EAAA,eAAA,EAAA,EAAA,EAAA,SAAA,EAAA;AACT,YAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,wBAAwB;SACjE,EAlBS,QAAA,EAAA,CAAA,qBAAA,CAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA;;;;;;;;;;AAUT,EAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAGC,sBAAsB,EAAA,QAAA,EAAA,mFAAA,EAAA,MAAA,EAAA,CAAA,UAAA,EAAA,eAAA,EAAA,eAAA,EAAA,qBAAA,EAAA,kBAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA;;4FAeb,yBAAyB,EAAA,UAAA,EAAA,CAAA;kBA9BrC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACT,oBAAA,QAAQ,EAAE,uBAAuB;AACjC,oBAAA,QAAQ,EAAE;;;;;;;;;;AAUT,EAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE;wBACP,sBAAsB;wBACtB;AACD,qBAAA;AACD,oBAAA,SAAS,EAAE;AACT,wBAAA,EAAE,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAE,wBAAwB;AACjE,qBAAA;AACD,oBAAA,IAAI,EAAE;;;;AAIJ,wBAAA,SAAS,EAAE;AACZ,qBAAA;AACD,oBAAA,QAAQ,EAAE,qBAAqB;oBAC/B,eAAe,EAAE,uBAAuB,CAAC;AAC1C,iBAAA;wDAOK,UAAU,EAAA,CAAA;sBADb,KAAK;AAAC,gBAAA,IAAA,EAAA,CAAA,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAMnC,QAAQ,EAAA,CAAA;sBADX;gBAMG,SAAS,EAAA,CAAA;sBADZ;;;ACjEH;;AAEG;;;;"}
|
package/lib/assets/i18n/de.json
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
{
|
|
2
|
+
"ymt.datepicker.calendarLabel": "Kalender",
|
|
3
|
+
"ymt.datepicker.closeCalendarLabel": "Kalender schließen",
|
|
4
|
+
"ymt.datepicker.comparisonDateLabel": "Vergleichszeitraum",
|
|
5
|
+
"ymt.datepicker.endDateLabel": "End Datum",
|
|
6
|
+
"ymt.datepicker.nextMonthLabel": "Nächster Monat",
|
|
7
|
+
"ymt.datepicker.nextMultiYearLabel": "Nächste 24 Jahre",
|
|
8
|
+
"ymt.datepicker.nextYearLabel": "Nächstes Jahr",
|
|
9
|
+
"ymt.datepicker.openCalendarLabel": "Kalender öffnen",
|
|
10
|
+
"ymt.datepicker.prevMonthLabel": "Vorheriger Monat",
|
|
11
|
+
"ymt.datepicker.prevMultiYearLabel": "Vorherige 24 Jahre",
|
|
12
|
+
"ymt.datepicker.prevYearLabel": "Vorheriges Jahr",
|
|
13
|
+
"ymt.datepicker.startDateLabel": "Start Datum",
|
|
14
|
+
"ymt.datepicker.switchToMonthViewLabel": "Datum wählen",
|
|
15
|
+
"ymt.datepicker.switchToMultiYearViewLabel": "Monat und Jahr wählen",
|
|
2
16
|
"ymt.paginator.firstPageLabel": "Erste Seite",
|
|
3
17
|
"ymt.paginator.itemsPerPageLabel": "Treffer pro Seite",
|
|
4
18
|
"ymt.paginator.lastPageLabel": "Letzte Seite",
|
package/lib/assets/i18n/en.json
CHANGED
|
@@ -1,4 +1,18 @@
|
|
|
1
1
|
{
|
|
2
|
+
"ymt.datepicker.calendarLabel": "Calendar",
|
|
3
|
+
"ymt.datepicker.closeCalendarLabel": "Close calendar",
|
|
4
|
+
"ymt.datepicker.comparisonDateLabel": "Comparison range",
|
|
5
|
+
"ymt.datepicker.endDateLabel": "End date",
|
|
6
|
+
"ymt.datepicker.nextMonthLabel": "Next month",
|
|
7
|
+
"ymt.datepicker.nextMultiYearLabel": "Next 24 years",
|
|
8
|
+
"ymt.datepicker.nextYearLabel": "Next year",
|
|
9
|
+
"ymt.datepicker.openCalendarLabel": "Open calendar",
|
|
10
|
+
"ymt.datepicker.prevMonthLabel": "Previous month",
|
|
11
|
+
"ymt.datepicker.prevMultiYearLabel": "Previous 24 years",
|
|
12
|
+
"ymt.datepicker.prevYearLabel": "Previous year",
|
|
13
|
+
"ymt.datepicker.startDateLabel": "Start date",
|
|
14
|
+
"ymt.datepicker.switchToMonthViewLabel": "Choose date",
|
|
15
|
+
"ymt.datepicker.switchToMultiYearViewLabel": "Choose month and year",
|
|
2
16
|
"ymt.paginator.firstPageLabel": "First page",
|
|
3
17
|
"ymt.paginator.itemsPerPageLabel": "Hits per page",
|
|
4
18
|
"ymt.paginator.lastPageLabel": "Last page",
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { OnDestroy, OnInit } from '@angular/core';
|
|
2
|
+
import { DatepickerComponent } from '../datepicker';
|
|
3
|
+
import { BooleanInput } from '@angular/cdk/coercion';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
export declare class DatepickerToggleComponent implements OnInit, OnDestroy {
|
|
7
|
+
#private;
|
|
8
|
+
set datepicker(v: DatepickerComponent | null);
|
|
9
|
+
get datepicker(): DatepickerComponent | null;
|
|
10
|
+
set disabled(v: BooleanInput);
|
|
11
|
+
get disabled(): boolean;
|
|
12
|
+
set ariaLabel(v: string);
|
|
13
|
+
get ariaLabel(): string;
|
|
14
|
+
stateChanges: Subject<void>;
|
|
15
|
+
constructor();
|
|
16
|
+
_open(event: Event): void;
|
|
17
|
+
ngOnInit(): void;
|
|
18
|
+
ngOnDestroy(): void;
|
|
19
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerToggleComponent, never>;
|
|
20
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatepickerToggleComponent, "ymt-datepicker-toggle", ["matDatepickerToggle"], { "datepicker": { "alias": "for"; "required": true; }; "disabled": { "alias": "disabled"; "required": false; }; "ariaLabel": { "alias": "ariaLabel"; "required": false; }; }, {}, never, ["mat-icon"], true, never>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { AfterViewInit, OnDestroy } from '@angular/core';
|
|
2
|
+
import { AbstractControlDirective, ControlValueAccessor, FormGroup, NgControl } from '@angular/forms';
|
|
3
|
+
import { MatFormFieldControl } from '@angular/material/form-field';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { BooleanInput } from '@angular/cdk/coercion';
|
|
6
|
+
import { MatDatepicker, MatDateRangePicker } from '@angular/material/datepicker';
|
|
7
|
+
import { MatTimepicker, MatTimepickerInput } from '@angular/material/timepicker';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
type DatepickerValue = DatetimeValue;
|
|
10
|
+
type DatetimeValue = Date | string | null;
|
|
11
|
+
export type DatepickerMode = keyof typeof EnumDatepickerMode;
|
|
12
|
+
declare enum EnumDatepickerMode {
|
|
13
|
+
DATE = "DATE",
|
|
14
|
+
DATE_RANGE = "DATE_RANGE",
|
|
15
|
+
TIME = "TIME"
|
|
16
|
+
}
|
|
17
|
+
export interface DateRangePlaceholder {
|
|
18
|
+
startDate: string;
|
|
19
|
+
endDate: string;
|
|
20
|
+
}
|
|
21
|
+
export declare class DatepickerComponent implements MatFormFieldControl<DatepickerValue>, ControlValueAccessor, AfterViewInit, OnDestroy {
|
|
22
|
+
#private;
|
|
23
|
+
ngControl: NgControl | AbstractControlDirective | null;
|
|
24
|
+
stateChanges: Subject<void>;
|
|
25
|
+
onFocusIn(): void;
|
|
26
|
+
onFocusout(): void;
|
|
27
|
+
set value(v: DatepickerValue);
|
|
28
|
+
get value(): DatepickerValue;
|
|
29
|
+
set disabled(v: BooleanInput);
|
|
30
|
+
get disabled(): boolean;
|
|
31
|
+
set id(v: string);
|
|
32
|
+
get id(): string;
|
|
33
|
+
set placeholder(v: string);
|
|
34
|
+
get placeholder(): string;
|
|
35
|
+
set required(v: BooleanInput);
|
|
36
|
+
get required(): boolean;
|
|
37
|
+
set userAriaDescribedBy(v: string);
|
|
38
|
+
get userAriaDescribedBy(): string;
|
|
39
|
+
set empty(v: boolean);
|
|
40
|
+
get empty(): boolean;
|
|
41
|
+
set errorState(v: boolean);
|
|
42
|
+
get errorState(): boolean;
|
|
43
|
+
set focused(v: boolean);
|
|
44
|
+
get focused(): boolean;
|
|
45
|
+
get shouldLabelFloat(): boolean;
|
|
46
|
+
readonly autofilled?: boolean;
|
|
47
|
+
readonly controlType: string;
|
|
48
|
+
readonly disableAutomaticLabeling: boolean;
|
|
49
|
+
protected readonly datepickerMode: typeof EnumDatepickerMode;
|
|
50
|
+
protected readonly datepicker: import("@angular/core").Signal<MatDatepicker<never> | undefined>;
|
|
51
|
+
protected readonly rangepicker: import("@angular/core").Signal<MatDateRangePicker<never> | undefined>;
|
|
52
|
+
protected readonly timepicker: import("@angular/core").Signal<MatTimepicker<never> | undefined>;
|
|
53
|
+
protected readonly datepickerInput: import("@angular/core").Signal<MatFormFieldControl<never> | undefined>;
|
|
54
|
+
protected readonly timepickerInput: import("@angular/core").Signal<MatTimepickerInput<never> | undefined>;
|
|
55
|
+
set mode(v: DatepickerMode);
|
|
56
|
+
get mode(): DatepickerMode;
|
|
57
|
+
set min(v: DatepickerValue);
|
|
58
|
+
get min(): DatepickerValue;
|
|
59
|
+
set max(v: DatepickerValue);
|
|
60
|
+
get max(): DatepickerValue;
|
|
61
|
+
set rangePlaceholder(v: DateRangePlaceholder);
|
|
62
|
+
get rangePlaceholder(): DateRangePlaceholder;
|
|
63
|
+
rangeValue: {
|
|
64
|
+
start: string;
|
|
65
|
+
end: string;
|
|
66
|
+
};
|
|
67
|
+
startDateFormControlName: import("@angular/core").InputSignal<string>;
|
|
68
|
+
endDateFormControlName: import("@angular/core").InputSignal<string>;
|
|
69
|
+
formGroup: import("@angular/core").InputSignal<FormGroup<any> | undefined>;
|
|
70
|
+
constructor();
|
|
71
|
+
propagateChange: ((_: any) => void);
|
|
72
|
+
propagateTouched: (() => void);
|
|
73
|
+
registerOnChange(fn: any): void;
|
|
74
|
+
registerOnTouched(fn: any): void;
|
|
75
|
+
writeValue(date: DatepickerValue): void;
|
|
76
|
+
setDisabledState(isDisabled: boolean): void;
|
|
77
|
+
onContainerClick(event: MouseEvent): void;
|
|
78
|
+
setDescribedByIds(ids: string[]): void;
|
|
79
|
+
ngAfterViewInit(): void;
|
|
80
|
+
ngOnDestroy(): void;
|
|
81
|
+
open(): void;
|
|
82
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<DatepickerComponent, never>;
|
|
83
|
+
static ɵcmp: i0.ɵɵComponentDeclaration<DatepickerComponent, "ymt-datepicker", never, { "value": { "alias": "value"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; "id": { "alias": "id"; "required": false; }; "placeholder": { "alias": "placeholder"; "required": false; }; "required": { "alias": "required"; "required": false; }; "userAriaDescribedBy": { "alias": "userAriaDescribedBy"; "required": false; }; "mode": { "alias": "mode"; "required": false; }; "min": { "alias": "min"; "required": false; }; "max": { "alias": "max"; "required": false; }; "rangePlaceholder": { "alias": "rangePlaceholder"; "required": false; }; "startDateFormControlName": { "alias": "startDateFormControlName"; "required": false; "isSignal": true; }; "endDateFormControlName": { "alias": "endDateFormControlName"; "required": false; "isSignal": true; }; "formGroup": { "alias": "formGroup"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
84
|
+
}
|
|
85
|
+
export {};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export default _default;
|
|
1
|
+
export * from './datepicker';
|
package/lib/services/index.d.ts
CHANGED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Provider } from '@angular/core';
|
|
2
|
+
import { MatDateFormats, NativeDateAdapter } from '@angular/material/core';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
export declare const YMT_DATE_FROMATS: MatDateFormats;
|
|
5
|
+
export declare function provideYmtDateAdapter(formats?: MatDateFormats): Provider[];
|
|
6
|
+
interface IParseFormats {
|
|
7
|
+
separator: '.' | '/' | '-' | string;
|
|
8
|
+
order: 'mdy' | 'dmy' | 'ymd';
|
|
9
|
+
}
|
|
10
|
+
export declare class YmtDateAdapterService extends NativeDateAdapter {
|
|
11
|
+
#private;
|
|
12
|
+
locale: string;
|
|
13
|
+
constructor();
|
|
14
|
+
parse(value: any, parseFormat?: any): Date | null;
|
|
15
|
+
parseDateString(value: string, config: IParseFormats): Date;
|
|
16
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<YmtDateAdapterService, never>;
|
|
17
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<YmtDateAdapterService>;
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { MatDatepickerIntl } from '@angular/material/datepicker';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export declare class YmtDatepickerIntlService extends MatDatepickerIntl {
|
|
4
|
+
#private;
|
|
5
|
+
constructor();
|
|
6
|
+
translateLabels(): void;
|
|
7
|
+
formatYearRange(start: string, end: string): string;
|
|
8
|
+
formatYearRangeLabel(start: string, end: string): string;
|
|
9
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<YmtDatepickerIntlService, never>;
|
|
10
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<YmtDatepickerIntlService>;
|
|
11
|
+
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yuuvis/material",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.16",
|
|
4
4
|
"peerDependencies": {
|
|
5
5
|
"@angular/common": "^19.2.1",
|
|
6
6
|
"@angular/core": "^19.2.1",
|
|
7
7
|
"@angular/material": "^19.2.15",
|
|
8
|
-
"modern-normalize": "^3.0.1"
|
|
8
|
+
"modern-normalize": "^3.0.1",
|
|
9
|
+
"@ngx-translate/core": "^15.0.0"
|
|
9
10
|
},
|
|
10
11
|
"sideEffects": false,
|
|
11
12
|
"exports": {
|