@solcre-org/core-ui 2.20.27 → 2.20.29
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.
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import { HostBinding, Directive, input, Component, inject, output, computed, signal, effect, HostListener, ViewChild, ViewEncapsulation, Pipe, Injectable,
|
|
2
|
+
import { HostBinding, Directive, input, Component, inject, output, computed, signal, effect, ElementRef, HostListener, ViewChild, ViewEncapsulation, Pipe, Injectable, untracked, ViewContainerRef, TemplateRef, InjectionToken, ContentChild, ChangeDetectionStrategy, viewChild, ChangeDetectorRef, afterNextRender, makeEnvironmentProviders, importProvidersFrom } from '@angular/core';
|
|
3
3
|
import * as i2 from '@angular/common';
|
|
4
4
|
import { CommonModule, DatePipe } from '@angular/common';
|
|
5
5
|
import * as i3 from '@ngx-translate/core';
|
|
6
6
|
import { TranslateModule, TranslateService, TranslateLoader } from '@ngx-translate/core';
|
|
7
7
|
import * as i3$1 from '@angular/forms';
|
|
8
8
|
import { FormControl, Validators, FormsModule, ReactiveFormsModule, FormBuilder } from '@angular/forms';
|
|
9
|
-
import * as i5 from '@ng-select/ng-select';
|
|
10
|
-
import { NgSelectModule } from '@ng-select/ng-select';
|
|
11
9
|
import { AuthService, ApiService } from '@solcre-org/core';
|
|
12
10
|
import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
|
|
13
11
|
import { distinctUntilChanged, debounceTime, tap as tap$1, map as map$1, filter, catchError as catchError$1 } from 'rxjs/operators';
|
|
14
12
|
import { map, BehaviorSubject, Subject, throttleTime, takeUntil, debounceTime as debounceTime$1, distinctUntilChanged as distinctUntilChanged$1, tap, switchMap, of, catchError, finalize, throwError, Observable, forkJoin, zip, timeout, Subscription, from } from 'rxjs';
|
|
13
|
+
import * as i5 from '@ng-select/ng-select';
|
|
14
|
+
import { NgSelectModule } from '@ng-select/ng-select';
|
|
15
15
|
import * as i4 from '@angular/router';
|
|
16
16
|
import { RouterModule, Router, NavigationEnd, NavigationStart } from '@angular/router';
|
|
17
17
|
import { DomSanitizer } from '@angular/platform-browser';
|
|
@@ -1062,6 +1062,7 @@ var TimeInterval;
|
|
|
1062
1062
|
})(TimeInterval || (TimeInterval = {}));
|
|
1063
1063
|
|
|
1064
1064
|
class DatetimeFieldComponent {
|
|
1065
|
+
el = inject(ElementRef);
|
|
1065
1066
|
field = input.required();
|
|
1066
1067
|
value = input(null);
|
|
1067
1068
|
mode = input.required();
|
|
@@ -1076,9 +1077,22 @@ class DatetimeFieldComponent {
|
|
|
1076
1077
|
selectedDate = signal(null);
|
|
1077
1078
|
selectedHour = signal(null);
|
|
1078
1079
|
selectedMinute = signal(null);
|
|
1080
|
+
inputDateValue = signal('');
|
|
1081
|
+
isDateInputFocused = signal(false);
|
|
1082
|
+
isHourOpen = signal(false);
|
|
1083
|
+
isMinuteOpen = signal(false);
|
|
1084
|
+
highlightedHourIndex = signal(-1);
|
|
1085
|
+
highlightedMinuteIndex = signal(-1);
|
|
1079
1086
|
hasHourValue = signal(false);
|
|
1080
1087
|
hasMinuteValue = signal(false);
|
|
1081
1088
|
hours = Array.from({ length: 24 }, (_, i) => i);
|
|
1089
|
+
onDocumentClick(event) {
|
|
1090
|
+
if (!this.el.nativeElement.contains(event.target)) {
|
|
1091
|
+
this.isHourOpen.set(false);
|
|
1092
|
+
this.isMinuteOpen.set(false);
|
|
1093
|
+
this.onBlur();
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1082
1096
|
isHourPlaceholderVisible = computed(() => {
|
|
1083
1097
|
const hasVal = this.hasHourValue();
|
|
1084
1098
|
return !hasVal;
|
|
@@ -1148,6 +1162,9 @@ class DatetimeFieldComponent {
|
|
|
1148
1162
|
return true;
|
|
1149
1163
|
return this.evaluateReadonly();
|
|
1150
1164
|
});
|
|
1165
|
+
isTimeDisabled = computed(() => {
|
|
1166
|
+
return this.isDisabled() || !this.selectedDate();
|
|
1167
|
+
});
|
|
1151
1168
|
hasError = computed(() => {
|
|
1152
1169
|
return this.errors().length > 0;
|
|
1153
1170
|
});
|
|
@@ -1166,14 +1183,19 @@ class DatetimeFieldComponent {
|
|
|
1166
1183
|
constructor() {
|
|
1167
1184
|
effect(() => {
|
|
1168
1185
|
const newValue = this.value();
|
|
1186
|
+
if (this.isDateInputFocused())
|
|
1187
|
+
return;
|
|
1169
1188
|
if (newValue && !isNaN(newValue.getTime())) {
|
|
1170
1189
|
const newDate = new Date(newValue);
|
|
1171
1190
|
this.selectedDate.set(newDate);
|
|
1172
1191
|
this.selectedHour.set(newDate.getHours());
|
|
1173
1192
|
this.selectedMinute.set(this.roundToNearestInterval(newDate).getMinutes());
|
|
1193
|
+
this.inputDateValue.set(this.buildDateString(newDate));
|
|
1194
|
+
}
|
|
1195
|
+
else {
|
|
1196
|
+
this.inputDateValue.set('');
|
|
1174
1197
|
}
|
|
1175
1198
|
});
|
|
1176
|
-
// Update hasValue signals when selected values change
|
|
1177
1199
|
effect(() => {
|
|
1178
1200
|
const hour = this.selectedHour();
|
|
1179
1201
|
this.hasHourValue.set(hour !== null && hour !== undefined);
|
|
@@ -1205,6 +1227,7 @@ class DatetimeFieldComponent {
|
|
|
1205
1227
|
this.selectedHour.set(dateValue.getHours());
|
|
1206
1228
|
const roundedMinute = this.roundToNearestInterval(dateValue).getMinutes();
|
|
1207
1229
|
this.selectedMinute.set(roundedMinute);
|
|
1230
|
+
this.inputDateValue.set(this.buildDateString(dateValue));
|
|
1208
1231
|
}
|
|
1209
1232
|
this.valueChange.emit(newValue);
|
|
1210
1233
|
}, 0);
|
|
@@ -1221,6 +1244,8 @@ class DatetimeFieldComponent {
|
|
|
1221
1244
|
}
|
|
1222
1245
|
}
|
|
1223
1246
|
initializeValues() {
|
|
1247
|
+
if (this.isDateInputFocused())
|
|
1248
|
+
return;
|
|
1224
1249
|
const date = this.value();
|
|
1225
1250
|
if (date && !isNaN(date.getTime())) {
|
|
1226
1251
|
const newDate = new Date(date);
|
|
@@ -1228,33 +1253,35 @@ class DatetimeFieldComponent {
|
|
|
1228
1253
|
this.selectedHour.set(newDate.getHours());
|
|
1229
1254
|
const roundedMinute = this.roundToNearestInterval(newDate).getMinutes();
|
|
1230
1255
|
this.selectedMinute.set(roundedMinute);
|
|
1256
|
+
this.inputDateValue.set(this.buildDateString(newDate));
|
|
1231
1257
|
}
|
|
1232
1258
|
else {
|
|
1233
1259
|
this.selectedDate.set(null);
|
|
1234
1260
|
this.selectedHour.set(null);
|
|
1235
1261
|
this.selectedMinute.set(null);
|
|
1262
|
+
this.inputDateValue.set('');
|
|
1236
1263
|
}
|
|
1237
1264
|
}
|
|
1238
1265
|
onDateChange(event) {
|
|
1239
1266
|
const input = event.target;
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
|
|
1267
|
+
if (!input.value) {
|
|
1268
|
+
return;
|
|
1269
|
+
}
|
|
1270
|
+
const newDate = new Date(input.value + 'T00:00:00');
|
|
1271
|
+
if (!isNaN(newDate.getTime())) {
|
|
1243
1272
|
const currentHour = this.selectedHour() ?? 0;
|
|
1244
1273
|
const currentMinute = this.selectedMinute() ?? 0;
|
|
1245
|
-
this.selectedHour.set(currentHour);
|
|
1246
|
-
this.selectedMinute.set(currentMinute);
|
|
1247
1274
|
newDate.setHours(currentHour);
|
|
1248
1275
|
newDate.setMinutes(currentMinute);
|
|
1249
1276
|
newDate.setSeconds(0);
|
|
1250
1277
|
newDate.setMilliseconds(0);
|
|
1251
1278
|
this.selectedDate.set(newDate);
|
|
1279
|
+
this.inputDateValue.set(input.value);
|
|
1252
1280
|
this.emitValue();
|
|
1253
1281
|
}
|
|
1254
1282
|
else {
|
|
1255
|
-
//If date is cleared, clear everything? Or just date?
|
|
1256
|
-
//Usually if date input is cleared, value is null.
|
|
1257
1283
|
this.selectedDate.set(null);
|
|
1284
|
+
this.inputDateValue.set('');
|
|
1258
1285
|
this.emitValue();
|
|
1259
1286
|
}
|
|
1260
1287
|
}
|
|
@@ -1266,21 +1293,59 @@ class DatetimeFieldComponent {
|
|
|
1266
1293
|
this.selectedMinute.set(value);
|
|
1267
1294
|
this.emitValue();
|
|
1268
1295
|
}
|
|
1296
|
+
toggleHourDropdown(event) {
|
|
1297
|
+
if (this.isTimeDisabled())
|
|
1298
|
+
return;
|
|
1299
|
+
event.stopPropagation();
|
|
1300
|
+
const opening = !this.isHourOpen();
|
|
1301
|
+
this.isHourOpen.set(opening);
|
|
1302
|
+
this.isMinuteOpen.set(false);
|
|
1303
|
+
if (opening) {
|
|
1304
|
+
const idx = this.hoursOptions().findIndex(o => o.value === this.selectedHour());
|
|
1305
|
+
this.highlightedHourIndex.set(idx >= 0 ? idx : -1);
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
toggleMinuteDropdown(event) {
|
|
1309
|
+
if (this.isTimeDisabled())
|
|
1310
|
+
return;
|
|
1311
|
+
event.stopPropagation();
|
|
1312
|
+
const opening = !this.isMinuteOpen();
|
|
1313
|
+
this.isMinuteOpen.set(opening);
|
|
1314
|
+
this.isHourOpen.set(false);
|
|
1315
|
+
if (opening) {
|
|
1316
|
+
const idx = this.minutesOptions().findIndex(o => o.value === this.selectedMinute());
|
|
1317
|
+
this.highlightedMinuteIndex.set(idx >= 0 ? idx : -1);
|
|
1318
|
+
}
|
|
1319
|
+
}
|
|
1320
|
+
selectHourOption(value, event) {
|
|
1321
|
+
event.stopPropagation();
|
|
1322
|
+
this.onHourChange(value);
|
|
1323
|
+
this.isHourOpen.set(false);
|
|
1324
|
+
}
|
|
1325
|
+
selectMinuteOption(value, event) {
|
|
1326
|
+
event.stopPropagation();
|
|
1327
|
+
this.onMinuteChange(value);
|
|
1328
|
+
this.isMinuteOpen.set(false);
|
|
1329
|
+
}
|
|
1269
1330
|
emitValue() {
|
|
1270
1331
|
const date = this.selectedDate();
|
|
1271
|
-
// If no date selected, value is null regardless of time
|
|
1272
1332
|
if (!date || isNaN(date.getTime())) {
|
|
1273
1333
|
this.valueChange.emit(null);
|
|
1274
1334
|
return;
|
|
1275
1335
|
}
|
|
1276
1336
|
const newDate = new Date(date.getTime());
|
|
1277
|
-
// Use 0 if time not selected yet but date is present
|
|
1278
1337
|
newDate.setHours(this.selectedHour() ?? 0);
|
|
1279
1338
|
newDate.setMinutes(this.selectedMinute() ?? 0);
|
|
1280
1339
|
newDate.setSeconds(0);
|
|
1281
1340
|
newDate.setMilliseconds(0);
|
|
1282
1341
|
this.valueChange.emit(newDate);
|
|
1283
1342
|
}
|
|
1343
|
+
buildDateString(date) {
|
|
1344
|
+
const year = date.getFullYear().toString().padStart(4, '0');
|
|
1345
|
+
const month = (date.getMonth() + 1).toString().padStart(2, '0');
|
|
1346
|
+
const day = date.getDate().toString().padStart(2, '0');
|
|
1347
|
+
return `${year}-${month}-${day}`;
|
|
1348
|
+
}
|
|
1284
1349
|
roundToNearestInterval(date) {
|
|
1285
1350
|
const interval = this.field()?.timeInterval;
|
|
1286
1351
|
if (!interval)
|
|
@@ -1313,6 +1378,14 @@ class DatetimeFieldComponent {
|
|
|
1313
1378
|
onBlur() {
|
|
1314
1379
|
this.onBlurEvent.emit(this.field().key);
|
|
1315
1380
|
}
|
|
1381
|
+
onDateInputBlur() {
|
|
1382
|
+
this.isDateInputFocused.set(false);
|
|
1383
|
+
setTimeout(() => {
|
|
1384
|
+
if (!this.el.nativeElement.contains(document.activeElement)) {
|
|
1385
|
+
this.onBlur();
|
|
1386
|
+
}
|
|
1387
|
+
}, 200);
|
|
1388
|
+
}
|
|
1316
1389
|
onEnter(event) {
|
|
1317
1390
|
this.onEnterEvent.emit(this.field().key);
|
|
1318
1391
|
const target = event.target;
|
|
@@ -1331,12 +1404,15 @@ class DatetimeFieldComponent {
|
|
|
1331
1404
|
}
|
|
1332
1405
|
}
|
|
1333
1406
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DatetimeFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1334
|
-
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: DatetimeFieldComponent, isStandalone: true, selector: "core-datetime-field", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, rowData: { classPropertyName: "rowData", publicName: "rowData", isSignal: true, isRequired: false, transformFunction: null }, formValue: { classPropertyName: "formValue", publicName: "formValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", onBlurEvent: "onBlurEvent", onEnterEvent: "onEnterEvent" }, usesOnChanges: true, hostDirectives: [{ directive: CoreHostDirective }], ngImport: i0, template: "<div class=\"c-entry-item\" [class.c-entry-item--inline]=\"field().inline\">\n <label class=\"c-entry-text\" *ngIf=\"field().label\" [for]=\"field().key.toString()\">\n {{ field().label | translate }}\n @if (hasRequiredValidators()) {\n <span class=\"c-required\">*</span>\n }\n </label>\n <div class=\"c-entry-datetime\">\n <span class=\"c-entry-input\" [class.is-invalid]=\"hasError()\">\n <input\n type=\"date\"\n [id]=\"field().key.toString()\"\n [name]=\"field().key.toString()\"\n [value]=\"
|
|
1407
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.0.6", type: DatetimeFieldComponent, isStandalone: true, selector: "core-datetime-field", inputs: { field: { classPropertyName: "field", publicName: "field", isSignal: true, isRequired: true, transformFunction: null }, value: { classPropertyName: "value", publicName: "value", isSignal: true, isRequired: false, transformFunction: null }, mode: { classPropertyName: "mode", publicName: "mode", isSignal: true, isRequired: true, transformFunction: null }, errors: { classPropertyName: "errors", publicName: "errors", isSignal: true, isRequired: false, transformFunction: null }, rowData: { classPropertyName: "rowData", publicName: "rowData", isSignal: true, isRequired: false, transformFunction: null }, formValue: { classPropertyName: "formValue", publicName: "formValue", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { valueChange: "valueChange", onBlurEvent: "onBlurEvent", onEnterEvent: "onEnterEvent" }, host: { listeners: { "document:click": "onDocumentClick($event)" } }, usesOnChanges: true, hostDirectives: [{ directive: CoreHostDirective }], ngImport: i0, template: "<div class=\"c-entry-item\" [class.c-entry-item--inline]=\"field().inline\">\n <label class=\"c-entry-text\" *ngIf=\"field().label\" [for]=\"field().key.toString()\">\n {{ field().label | translate }}\n @if (hasRequiredValidators()) {\n <span class=\"c-required\">*</span>\n }\n </label>\n <div class=\"c-entry-datetime\">\n <span class=\"c-entry-input\" [class.is-invalid]=\"hasError()\">\n <input\n type=\"date\"\n [id]=\"field().key.toString()\"\n [name]=\"field().key.toString()\"\n [value]=\"inputDateValue()\"\n [disabled]=\"isDisabled()\"\n (focus)=\"isDateInputFocused.set(true)\"\n (change)=\"onDateChange($event)\"\n (blur)=\"onDateInputBlur()\"\n (keydown.enter)=\"onEnter($any($event))\"\n />\n <button class=\"c-entry-input__addon icon-calendar-thin\" \n tabindex=\"-1\"\n type=\"button\"\n (click)=\"onCalendarClick($event)\"></button>\n </span>\n <span class=\"c-entry-input c-entry-input--native-select\"\n [class.is-placeholder]=\"isHourPlaceholderVisible()\"\n [class.is-open]=\"isHourOpen()\"\n [class.has-value]=\"!isHourPlaceholderVisible()\"\n [class.is-disabled]=\"isTimeDisabled()\"\n >\n <div class=\"c-native-select__control\" (click)=\"toggleHourDropdown($event)\">\n @if (selectedHour() !== null && selectedHour() !== undefined) {\n <span class=\"c-native-select__single-value\">{{ selectedHour()!.toString().padStart(2, '0') }}</span>\n } @else {\n <span class=\"c-native-select__placeholder\">HH</span>\n }\n </div>\n <span\n class=\"c-entry-input__addon icon-select-arrow\"\n [class.is-flipped]=\"isHourOpen()\"\n (click)=\"toggleHourDropdown($event)\"\n ></span>\n @if (isHourOpen()) {\n <div class=\"c-native-select__dropdown\">\n <div class=\"c-native-select__options\">\n @for (option of hoursOptions(); track option.value; let i = $index) {\n <div\n class=\"c-native-select__option\"\n [class.is-selected]=\"selectedHour() === option.value\"\n [class.is-highlighted]=\"highlightedHourIndex() === i\"\n (click)=\"selectHourOption(option.value, $event)\"\n (mouseenter)=\"highlightedHourIndex.set(i)\"\n >\n {{ option.label }}\n </div>\n }\n </div>\n </div>\n }\n </span>\n <span class=\"c-entry-datetime__separator\">:</span>\n <span class=\"c-entry-input c-entry-input--native-select\"\n [class.is-placeholder]=\"isMinutePlaceholderVisible()\"\n [class.is-open]=\"isMinuteOpen()\"\n [class.has-value]=\"!isMinutePlaceholderVisible()\"\n [class.is-disabled]=\"isTimeDisabled()\"\n >\n <div class=\"c-native-select__control\" (click)=\"toggleMinuteDropdown($event)\">\n @if (selectedMinute() !== null && selectedMinute() !== undefined) {\n <span class=\"c-native-select__single-value\">{{ selectedMinute()!.toString().padStart(2, '0') }}</span>\n } @else {\n <span class=\"c-native-select__placeholder\">MM</span>\n }\n </div>\n <span\n class=\"c-entry-input__addon icon-select-arrow\"\n [class.is-flipped]=\"isMinuteOpen()\"\n (click)=\"toggleMinuteDropdown($event)\"\n ></span>\n @if (isMinuteOpen()) {\n <div class=\"c-native-select__dropdown\">\n <div class=\"c-native-select__options\">\n @for (option of minutesOptions(); track option.value; let i = $index) {\n <div\n class=\"c-native-select__option\"\n [class.is-selected]=\"selectedMinute() === option.value\"\n [class.is-highlighted]=\"highlightedMinuteIndex() === i\"\n (click)=\"selectMinuteOption(option.value, $event)\"\n (mouseenter)=\"highlightedMinuteIndex.set(i)\"\n >\n {{ option.label }}\n </div>\n }\n </div>\n </div>\n }\n </span>\n </div>\n <core-field-errors [errors]=\"errors()\" />\n</div>\n\n\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i3.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "component", type: FieldErrorsComponent, selector: "core-field-errors", inputs: ["errors"] }] });
|
|
1335
1408
|
}
|
|
1336
1409
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImport: i0, type: DatetimeFieldComponent, decorators: [{
|
|
1337
1410
|
type: Component,
|
|
1338
|
-
args: [{ selector: 'core-datetime-field', standalone: true, imports: [CommonModule, FormsModule, TranslateModule, ReactiveFormsModule,
|
|
1339
|
-
}], ctorParameters: () => []
|
|
1411
|
+
args: [{ selector: 'core-datetime-field', standalone: true, imports: [CommonModule, FormsModule, TranslateModule, ReactiveFormsModule, FieldErrorsComponent], hostDirectives: [CoreHostDirective], template: "<div class=\"c-entry-item\" [class.c-entry-item--inline]=\"field().inline\">\n <label class=\"c-entry-text\" *ngIf=\"field().label\" [for]=\"field().key.toString()\">\n {{ field().label | translate }}\n @if (hasRequiredValidators()) {\n <span class=\"c-required\">*</span>\n }\n </label>\n <div class=\"c-entry-datetime\">\n <span class=\"c-entry-input\" [class.is-invalid]=\"hasError()\">\n <input\n type=\"date\"\n [id]=\"field().key.toString()\"\n [name]=\"field().key.toString()\"\n [value]=\"inputDateValue()\"\n [disabled]=\"isDisabled()\"\n (focus)=\"isDateInputFocused.set(true)\"\n (change)=\"onDateChange($event)\"\n (blur)=\"onDateInputBlur()\"\n (keydown.enter)=\"onEnter($any($event))\"\n />\n <button class=\"c-entry-input__addon icon-calendar-thin\" \n tabindex=\"-1\"\n type=\"button\"\n (click)=\"onCalendarClick($event)\"></button>\n </span>\n <span class=\"c-entry-input c-entry-input--native-select\"\n [class.is-placeholder]=\"isHourPlaceholderVisible()\"\n [class.is-open]=\"isHourOpen()\"\n [class.has-value]=\"!isHourPlaceholderVisible()\"\n [class.is-disabled]=\"isTimeDisabled()\"\n >\n <div class=\"c-native-select__control\" (click)=\"toggleHourDropdown($event)\">\n @if (selectedHour() !== null && selectedHour() !== undefined) {\n <span class=\"c-native-select__single-value\">{{ selectedHour()!.toString().padStart(2, '0') }}</span>\n } @else {\n <span class=\"c-native-select__placeholder\">HH</span>\n }\n </div>\n <span\n class=\"c-entry-input__addon icon-select-arrow\"\n [class.is-flipped]=\"isHourOpen()\"\n (click)=\"toggleHourDropdown($event)\"\n ></span>\n @if (isHourOpen()) {\n <div class=\"c-native-select__dropdown\">\n <div class=\"c-native-select__options\">\n @for (option of hoursOptions(); track option.value; let i = $index) {\n <div\n class=\"c-native-select__option\"\n [class.is-selected]=\"selectedHour() === option.value\"\n [class.is-highlighted]=\"highlightedHourIndex() === i\"\n (click)=\"selectHourOption(option.value, $event)\"\n (mouseenter)=\"highlightedHourIndex.set(i)\"\n >\n {{ option.label }}\n </div>\n }\n </div>\n </div>\n }\n </span>\n <span class=\"c-entry-datetime__separator\">:</span>\n <span class=\"c-entry-input c-entry-input--native-select\"\n [class.is-placeholder]=\"isMinutePlaceholderVisible()\"\n [class.is-open]=\"isMinuteOpen()\"\n [class.has-value]=\"!isMinutePlaceholderVisible()\"\n [class.is-disabled]=\"isTimeDisabled()\"\n >\n <div class=\"c-native-select__control\" (click)=\"toggleMinuteDropdown($event)\">\n @if (selectedMinute() !== null && selectedMinute() !== undefined) {\n <span class=\"c-native-select__single-value\">{{ selectedMinute()!.toString().padStart(2, '0') }}</span>\n } @else {\n <span class=\"c-native-select__placeholder\">MM</span>\n }\n </div>\n <span\n class=\"c-entry-input__addon icon-select-arrow\"\n [class.is-flipped]=\"isMinuteOpen()\"\n (click)=\"toggleMinuteDropdown($event)\"\n ></span>\n @if (isMinuteOpen()) {\n <div class=\"c-native-select__dropdown\">\n <div class=\"c-native-select__options\">\n @for (option of minutesOptions(); track option.value; let i = $index) {\n <div\n class=\"c-native-select__option\"\n [class.is-selected]=\"selectedMinute() === option.value\"\n [class.is-highlighted]=\"highlightedMinuteIndex() === i\"\n (click)=\"selectMinuteOption(option.value, $event)\"\n (mouseenter)=\"highlightedMinuteIndex.set(i)\"\n >\n {{ option.label }}\n </div>\n }\n </div>\n </div>\n }\n </span>\n </div>\n <core-field-errors [errors]=\"errors()\" />\n</div>\n\n\n" }]
|
|
1412
|
+
}], ctorParameters: () => [], propDecorators: { onDocumentClick: [{
|
|
1413
|
+
type: HostListener,
|
|
1414
|
+
args: ['document:click', ['$event']]
|
|
1415
|
+
}] } });
|
|
1340
1416
|
|
|
1341
1417
|
var DocumentPayloadMode;
|
|
1342
1418
|
(function (DocumentPayloadMode) {
|
|
@@ -17674,12 +17750,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.6", ngImpor
|
|
|
17674
17750
|
// Este archivo es generado automáticamente por scripts/update-version.js
|
|
17675
17751
|
// No edites manualmente este archivo
|
|
17676
17752
|
const VERSION = {
|
|
17677
|
-
full: '2.20.
|
|
17753
|
+
full: '2.20.29',
|
|
17678
17754
|
major: 2,
|
|
17679
17755
|
minor: 20,
|
|
17680
|
-
patch:
|
|
17681
|
-
timestamp: '2026-02-
|
|
17682
|
-
buildDate: '
|
|
17756
|
+
patch: 29,
|
|
17757
|
+
timestamp: '2026-02-27T15:55:43.722Z',
|
|
17758
|
+
buildDate: '27/2/2026'
|
|
17683
17759
|
};
|
|
17684
17760
|
|
|
17685
17761
|
class MainNavComponent {
|