@wavemaker/app-ng-runtime 11.12.1-rc.6244 → 11.13.0-rc.6255

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/build-task/bundles/index.umd.js +26 -24
  2. package/build-task/esm2022/containers/repeat-template.build.mjs +4 -2
  3. package/build-task/esm2022/data/form/form.build.mjs +4 -2
  4. package/build-task/esm2022/data/table/table-row/table-row.build.mjs +5 -3
  5. package/build-task/esm2022/page/page-content/page-content.build.mjs +6 -7
  6. package/build-task/esm2022/page/page.build.mjs +6 -7
  7. package/build-task/esm2022/partial/partial.build.mjs +6 -7
  8. package/build-task/esm2022/prefab/prefab-container/prefab-container.build.mjs +6 -7
  9. package/build-task/fesm2022/index.mjs +26 -24
  10. package/build-task/fesm2022/index.mjs.map +1 -1
  11. package/components/data/live-table/bundles/index.umd.js +4 -2
  12. package/components/data/live-table/esm2022/live-table.component.mjs +5 -3
  13. package/components/data/live-table/fesm2022/index.mjs +4 -2
  14. package/components/data/live-table/fesm2022/index.mjs.map +1 -1
  15. package/components/data/pagination/bundles/index.umd.js +4 -4
  16. package/components/data/pagination/esm2022/pagination.component.mjs +5 -5
  17. package/components/data/pagination/fesm2022/index.mjs +4 -4
  18. package/components/data/pagination/fesm2022/index.mjs.map +1 -1
  19. package/components/dialogs/design-dialog/bundles/index.umd.js +6 -12
  20. package/components/dialogs/design-dialog/esm2022/dialog.component.mjs +7 -13
  21. package/components/dialogs/design-dialog/fesm2022/index.mjs +6 -12
  22. package/components/dialogs/design-dialog/fesm2022/index.mjs.map +1 -1
  23. package/components/dialogs/iframe-dialog/bundles/index.umd.js +9 -16
  24. package/components/dialogs/iframe-dialog/esm2022/iframe-dialog.component.mjs +8 -15
  25. package/components/dialogs/iframe-dialog/fesm2022/index.mjs +7 -14
  26. package/components/dialogs/iframe-dialog/fesm2022/index.mjs.map +1 -1
  27. package/components/input/epoch/base-date-time.component.d.ts +6 -0
  28. package/components/input/epoch/bundles/index.umd.js +54 -31
  29. package/components/input/epoch/esm2022/base-date-time.component.mjs +16 -5
  30. package/components/input/epoch/esm2022/date-time/date-time.component.mjs +22 -15
  31. package/components/input/epoch/esm2022/time/time.component.mjs +19 -14
  32. package/components/input/epoch/fesm2022/index.mjs +54 -31
  33. package/components/input/epoch/fesm2022/index.mjs.map +1 -1
  34. package/components/input/slider/bundles/index.umd.js +9 -9
  35. package/components/input/slider/esm2022/slider.component.mjs +10 -10
  36. package/components/input/slider/fesm2022/index.mjs +9 -9
  37. package/components/input/slider/fesm2022/index.mjs.map +1 -1
  38. package/core/bundles/index.umd.js +3 -0
  39. package/core/esm2022/utils/wm-project-properties.mjs +4 -1
  40. package/core/fesm2022/index.mjs +3 -0
  41. package/core/fesm2022/index.mjs.map +1 -1
  42. package/npm-shrinkwrap.json +2 -2
  43. package/package-lock.json +2 -2
  44. package/package.json +1 -1
  45. package/runtime/base/bundles/index.umd.js +1 -1
  46. package/runtime/base/esm2022/services/i18n.service.mjs +2 -2
  47. package/runtime/base/fesm2022/index.mjs +1 -1
  48. package/runtime/base/fesm2022/index.mjs.map +1 -1
  49. package/security/bundles/index.umd.js +2 -2
  50. package/security/esm2022/security.service.mjs +3 -3
  51. package/security/fesm2022/index.mjs +2 -2
  52. package/security/fesm2022/index.mjs.map +1 -1
  53. package/transpiler/bundles/index.umd.js +0 -13
  54. package/transpiler/esm2022/build.mjs +1 -14
  55. package/transpiler/fesm2022/index.mjs +0 -13
  56. package/transpiler/fesm2022/index.mjs.map +1 -1
  57. package/variables/bundles/index.umd.js +1 -1
  58. package/variables/esm2022/service/metadata-service/metadata.service.mjs +2 -2
  59. package/variables/fesm2022/index.mjs +1 -1
  60. package/variables/fesm2022/index.mjs.map +1 -1
  61. package/scripts/hammerjs/hammer.min.js +0 -7
@@ -676,11 +676,20 @@ const DATAENTRYMODE_DROPDOWN_OPTIONS = {
676
676
  // Providing meridians to the timepicker baesd on selected locale
677
677
  function getTimepickerConfig(i18nService) {
678
678
  return Object.assign(new TimepickerConfig(), {
679
- meridians: getLocaleDayPeriods(i18nService.getSelectedLocale(), FormStyle.Format, TranslationWidth.Abbreviated)
679
+ meridians: [i18nService.getLocalizedMessage("LABEL_AM") || "AM", i18nService.getLocalizedMessage("LABEL_PM") || "PM"]
680
680
  });
681
681
  }
682
682
  class BaseDateTimeComponent extends BaseFormCustomComponent {
683
683
  get timeZone() { return this.inj.get(AbstractI18nService).getTimezone(this); }
684
+ /**
685
+ * Safely replace internal meridians with localized display meridians only for string values
686
+ */
687
+ safeReplaceMeridians(value) {
688
+ if (typeof value === 'string') {
689
+ return value.replace(this.meridians[0], this.am).replace(this.meridians[1], this.pm);
690
+ }
691
+ return value;
692
+ }
684
693
  constructor(inj, WIDGET_CONFIG, explicitContext) {
685
694
  super(inj, WIDGET_CONFIG, explicitContext);
686
695
  this.isReadOnly = false;
@@ -699,6 +708,8 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
699
708
  this._dateOptions.clearPosition = 'right';
700
709
  this.meridians = getLocaleDayPeriods(this.selectedLocale, FormStyle.Format, TranslationWidth.Abbreviated);
701
710
  this.loadNativeDateInput = isMobile() && !this.showcustompicker;
711
+ this.am = this.i18nService.getLocalizedMessage("LABEL_AM") || "AM";
712
+ this.pm = this.i18nService.getLocalizedMessage("LABEL_PM") || "PM";
702
713
  this.cancelLocaleChangeSubscription = this.getAppInstance().subscribe("locale-changed", (locale) => {
703
714
  this.datePipe.datePipe.locale = locale.angular;
704
715
  this._dateOptions.todayButtonLabel = this.i18nService.getLocalizedMessage('LABEL_TODAY_DATE');
@@ -783,7 +794,7 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
783
794
  // format the date value only when inputVal is obtained from $event.target.value, as the format doesnt match.
784
795
  inputVal = getFormattedDate(this.datePipe, inputVal, pattern, timeZone);
785
796
  }
786
- if (inputVal !== formattedDate) {
797
+ if (inputVal?.replace(this.am, this.meridians[0])?.replace(this.pm, this.meridians[1]) !== formattedDate) {
787
798
  this.invalidDateTimeFormat = true;
788
799
  this.validateType = 'incorrectformat';
789
800
  this.invokeOnChange(this.datavalue, undefined, false);
@@ -1306,7 +1317,7 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
1306
1317
  * This function checks whether the given time is valid or not
1307
1318
  */
1308
1319
  timeFormatValidation() {
1309
- const enteredDate = $(this.nativeElement).find('input').val();
1320
+ const enteredDate = $(this.nativeElement).find('input').val()?.replace(this.am, this.meridians[0])?.replace(this.pm, this.meridians[1]);
1310
1321
  const newVal = getNativeDateObject(enteredDate, { meridians: this.meridians, pattern: this.datepattern });
1311
1322
  if (!this.formatValidation(newVal, enteredDate)) {
1312
1323
  return;
@@ -1682,7 +1693,7 @@ class BaseDateTimeComponent extends BaseFormCustomComponent {
1682
1693
  const value = this.datavalue;
1683
1694
  this.datavalue = undefined;
1684
1695
  setTimeout(() => {
1685
- $(this.nativeElement).find('.display-input').val(formattedDisplay);
1696
+ $(this.nativeElement).find('.display-input').val(this.safeReplaceMeridians(formattedDisplay));
1686
1697
  this.minDateMaxDateValidationOnInput(formattedDisplay);
1687
1698
  this.invokeOnChange(value, {}, false);
1688
1699
  });
@@ -2283,19 +2294,23 @@ function DatetimeComponent_div_10_Conditional_2_Template(rf, ctx) { if (rf & 1)
2283
2294
  const _r4 = i0.ɵɵgetCurrentView();
2284
2295
  i0.ɵɵelementStart(0, "div", 13)(1, "button", 14);
2285
2296
  i0.ɵɵlistener("click", function DatetimeComponent_div_10_Conditional_2_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setPeriod("AM")); });
2286
- i0.ɵɵtext(2, "AM");
2297
+ i0.ɵɵtext(2);
2287
2298
  i0.ɵɵelementEnd();
2288
2299
  i0.ɵɵelement(3, "br");
2289
2300
  i0.ɵɵelementStart(4, "button", 15);
2290
2301
  i0.ɵɵlistener("click", function DatetimeComponent_div_10_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r4); const ctx_r2 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r2.setPeriod("PM")); });
2291
- i0.ɵɵtext(5, "PM");
2302
+ i0.ɵɵtext(5);
2292
2303
  i0.ɵɵelementEnd()();
2293
2304
  } if (rf & 2) {
2294
2305
  const ctx_r2 = i0.ɵɵnextContext(2);
2295
2306
  i0.ɵɵadvance();
2296
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c3$1, ctx_r2.getPeriod() === "AM"));
2297
- i0.ɵɵadvance(3);
2298
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c3$1, ctx_r2.getPeriod() === "PM"));
2307
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c3$1, ctx_r2.getPeriod() === "AM"));
2308
+ i0.ɵɵadvance();
2309
+ i0.ɵɵtextInterpolate(ctx_r2.appLocale.LABEL_AM || "AM");
2310
+ i0.ɵɵadvance(2);
2311
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(6, _c3$1, ctx_r2.getPeriod() === "PM"));
2312
+ i0.ɵɵadvance();
2313
+ i0.ɵɵtextInterpolate(ctx_r2.appLocale.LABEL_PM || "PM");
2299
2314
  } }
2300
2315
  function DatetimeComponent_div_10_Template(rf, ctx) { if (rf & 1) {
2301
2316
  const _r2 = i0.ɵɵgetCurrentView();
@@ -2305,7 +2320,7 @@ function DatetimeComponent_div_10_Template(rf, ctx) { if (rf & 1) {
2305
2320
  i0.ɵɵtwoWayListener("ngModelChange", function DatetimeComponent_div_10_Template_timepicker_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r2.bsTimeValue, $event) || (ctx_r2.bsTimeValue = $event); return i0.ɵɵresetView($event); });
2306
2321
  i0.ɵɵlistener("isValid", function DatetimeComponent_div_10_Template_timepicker_isValid_1_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.isValid($event)); })("ngModelChange", function DatetimeComponent_div_10_Template_timepicker_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r2); const ctx_r2 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r2.onModelUpdate($event, "time")); });
2307
2322
  i0.ɵɵelementEnd();
2308
- i0.ɵɵtemplate(2, DatetimeComponent_div_10_Conditional_2_Template, 6, 6, "div", 13);
2323
+ i0.ɵɵtemplate(2, DatetimeComponent_div_10_Conditional_2_Template, 6, 8, "div", 13);
2309
2324
  i0.ɵɵelementEnd();
2310
2325
  } if (rf & 2) {
2311
2326
  const ctx_r2 = i0.ɵɵnextContext();
@@ -2348,7 +2363,8 @@ class DatetimeComponent extends BaseDateTimeComponent {
2348
2363
  * @returns {any|string}
2349
2364
  */
2350
2365
  get displayValue() {
2351
- return getFormattedDate(this.datePipe, this.proxyModel, this.dateInputFormat, this.timeZone, this.key, this.isCurrentDate, this) || '';
2366
+ const display = getFormattedDate(this.datePipe, this.proxyModel, this.dateInputFormat, this.timeZone, this.key, this.isCurrentDate, this) || '';
2367
+ return this.safeReplaceMeridians(display);
2352
2368
  }
2353
2369
  get nativeDisplayValue() {
2354
2370
  return getFormattedDate(this.datePipe, this.proxyModel, 'yyyy-MM-ddTHH:mm:ss', this.timeZone, this.key, this.isCurrentDate, this) || '';
@@ -2514,7 +2530,8 @@ class DatetimeComponent extends BaseDateTimeComponent {
2514
2530
  onModelUpdate(newVal, type) {
2515
2531
  if (type === 'date') {
2516
2532
  this.invalidDateTimeFormat = false;
2517
- if (getFormattedDate(this.datePipe, newVal, this.dateInputFormat, this.timeZone, this.key, this.isCurrentDate, this) === this.displayValue) {
2533
+ const formatted = getFormattedDate(this.datePipe, newVal, this.dateInputFormat, this.timeZone, this.key, this.isCurrentDate, this);
2534
+ if (this.safeReplaceMeridians(formatted) === this.displayValue) {
2518
2535
  $(this.nativeElement).find('.display-input').val(this.displayValue);
2519
2536
  }
2520
2537
  }
@@ -2550,7 +2567,7 @@ class DatetimeComponent extends BaseDateTimeComponent {
2550
2567
  }
2551
2568
  if (this.datavalue === this.getPrevDataValue()) {
2552
2569
  const time = getFormattedDate(this.datePipe, this.datavalue, this.datepattern, this.timeZone, null, null, this) || '';
2553
- $(this.nativeElement).find('.display-input').val(time);
2570
+ $(this.nativeElement).find('.display-input').val(time?.replace(this.meridians[0], this.am)?.replace(this.meridians[1], this.pm));
2554
2571
  }
2555
2572
  }
2556
2573
  else {
@@ -2562,7 +2579,7 @@ class DatetimeComponent extends BaseDateTimeComponent {
2562
2579
  const timePickerFields = $('.bs-timepicker-field');
2563
2580
  if (this.timeZone && this.key === 'datetimestamp' && timePickerFields.length) {
2564
2581
  const formattedDate = getFormattedDate(this.datePipe, newVal, this.getTimePattern(), this.timeZone, this.key, null, this);
2565
- this.updateTimepickerFields(formattedDate, timePickerFields);
2582
+ this.updateTimepickerFields(this.safeReplaceMeridians(formattedDate), timePickerFields);
2566
2583
  }
2567
2584
  }
2568
2585
  // deduces the timepattern from datepattern set in the studio
@@ -2666,7 +2683,7 @@ class DatetimeComponent extends BaseDateTimeComponent {
2666
2683
  return;
2667
2684
  }
2668
2685
  let newVal = $event.target.value.trim();
2669
- newVal = newVal ? getNativeDateObject(newVal, { pattern: this.loadNativeDateInput ? this.outputformat : this.datepattern, meridians: this.meridians, isNativePicker: this.loadNativeDateInput }) : undefined;
2686
+ newVal = newVal ? getNativeDateObject(newVal?.replace(this.am, this.meridians[0])?.replace(this.pm, this.meridians[1]), { pattern: this.loadNativeDateInput ? this.outputformat : this.datepattern, meridians: this.meridians, isNativePicker: this.loadNativeDateInput }) : undefined;
2670
2687
  // datetime pattern validation
2671
2688
  // if invalid pattern is entered, device is showing an error.
2672
2689
  if (!this.formatValidation(newVal, $event.target.value, isNativePicker)) {
@@ -2691,6 +2708,7 @@ class DatetimeComponent extends BaseDateTimeComponent {
2691
2708
  newVal = newVal ? getNativeDateObject(newVal, { pattern: this.loadNativeDateInput ? this.outputformat : this.datepattern, meridians: this.meridians }) : undefined;
2692
2709
  event.preventDefault();
2693
2710
  const formattedDate = getFormattedDate(this.datePipe, newVal, this.dateInputFormat, this.timeZone, this.key, this.isCurrentDate, this);
2711
+ const formattedDateWithMeridians = this.safeReplaceMeridians(formattedDate);
2694
2712
  const inputVal = event.target.value.trim();
2695
2713
  if (inputVal && this.datepattern === 'timestamp') {
2696
2714
  if (!isNaN$1(inputVal) && parseInt$1(inputVal) !== formattedDate) {
@@ -2698,7 +2716,7 @@ class DatetimeComponent extends BaseDateTimeComponent {
2698
2716
  this.invokeOnChange(this.datavalue, event, false);
2699
2717
  }
2700
2718
  }
2701
- else if (inputVal && inputVal !== formattedDate) {
2719
+ else if (inputVal && inputVal !== formattedDateWithMeridians) {
2702
2720
  this.invalidDateTimeFormat = true;
2703
2721
  this.invokeOnChange(this.datavalue, event, false);
2704
2722
  }
@@ -2721,7 +2739,7 @@ class DatetimeComponent extends BaseDateTimeComponent {
2721
2739
  }
2722
2740
  isValid(event) {
2723
2741
  if (!event) {
2724
- const enteredDate = $(this.nativeElement).find('input').val();
2742
+ const enteredDate = $(this.nativeElement).find('input').val()?.replace(this.am, this.meridians[0])?.replace(this.pm, this.meridians[1]);
2725
2743
  const newVal = getNativeDateObject(enteredDate, { pattern: this.loadNativeDateInput ? this.outputformat : this.datepattern, meridians: this.meridians, isNativePicker: this.loadNativeDateInput });
2726
2744
  if (!this.formatValidation(newVal, enteredDate)) {
2727
2745
  return;
@@ -2797,7 +2815,7 @@ class DatetimeComponent extends BaseDateTimeComponent {
2797
2815
  provideAs(DatetimeComponent, NG_VALIDATORS, true),
2798
2816
  provideAsWidgetRef(DatetimeComponent),
2799
2817
  { provide: TimepickerConfig, deps: [AbstractI18nService], useFactory: getTimepickerConfig }
2800
- ], template: "<div dropdown\n [isOpen]=\"isTimeOpen\"\n autoClose=\"false\"\n [container]=\"'body'\"\n (onShown)=\"onTimepickerOpen()\"\n style=\"display: inherit;\">\n <input class=\"form-control app-textbox display-input\"\n [attr.aria-label]=\"arialabel\"\n focus-target\n [name]=\"name\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n type=\"text\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n (change)=\"onDateChange($event)\"\n [autofocus]=\"autofocus\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event)\">\n\n <span class=\"input-group-btn\">\n <button type=\"button\"\n class=\"btn btn-default btn-date\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : 'Choose date by pressing enter'\"\n aria-haspopup=\"true\"\n [attr.aria-expanded]=\"isDateOpen\"\n (click)=\"toggleDpDropdown($event, false)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-calendar\"></i>\n </button>\n <button type=\"button\"\n class=\"btn btn-default btn-time\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n aria-label=\"Select time\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleTimePicker(!isTimeOpen, $event)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-time\"></i>\n </button>\n </span>\n <div style=\"width: 0;display: inline-block;\">\n <input class=\"model-holder\"\n aria-label=\"datepicker dropdownmenu\"\n aria-controls=\"date\"\n focus-target\n [tabindex]=\"-1\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [container]=\"containerTarget || '.wm-app'\"\n [bsConfig]=\"_dateOptions\"\n [isOpen]=\"isDateOpen\"\n placement=\"bottom right\"\n (onShown)=\"onDatePickerOpen()\"\n (onHidden)=\"hideDatepickerDropdown()\"\n [daysDisabled]=\"excludedDaysToDisable\"\n [datesDisabled]=\"excludedDatesToDisable\"\n #datepicker=bsDatepicker\n bsDatepicker\n [isDisabled]=\"disabled || readonly || isCurrentDate\"\n [bsValue]=\"bsDateValue\"\n (bsValueChange)=\"onModelUpdate($event, 'date')\">\n </div>\n <div *dropdownMenu\n class=\"dropdown-menu\"\n aria-label=\"timepicker dropdown\"\n aria-controls=\"time\"\n (click)=\"preventTpClose($event)\">\n <timepicker class=\"model-holder\"\n [showMeridian]=\"ismeridian\"\n [readonlyInput]=\"disabled || readonly || isCurrentDate\"\n [(ngModel)]=\"bsTimeValue\"\n [ngModelOptions]=\"{standalone: true}\"\n [min]=\"minTime\"\n [max]=\"maxTime\"\n [hourStep]=\"hourstep\"\n [minuteStep]=\"minutestep\"\n [secondsStep]=\"secondsstep\"\n [mousewheel]=\"true\"\n [arrowkeys]=\"true\"\n (isValid)=\"isValid($event)\"\n [showSeconds]=\"showseconds\"\n (ngModelChange)=\"onModelUpdate($event, 'time')\"\n [ngClass]=\"{ 'showbuttons': showampmbuttons }\"></timepicker>\n @if (ismeridian && showampmbuttons) {\n <div class=\"ampm-toggle text-center\">\n <button class=\"meridian-btn mb-1\" [ngClass]=\"{ 'active btn-secondary': getPeriod() === 'AM' }\" (click)=\"setPeriod('AM')\">AM</button><br>\n <button class=\"meridian-btn\" [ngClass]=\"{ 'active btn-secondary': getPeriod() === 'PM' }\" (click)=\"setPeriod('PM')\">PM</button>\n </div>\n }\n </div>\n </div>\n@if (loadNativeDateInput) {\n <wm-datetimepicker\n dateTimePicker\n [config]=\"_dateOptions\"\n [placement]=\"modal\"\n [excludedDaysToDisable]=\"excludedDaysToDisable\"\n [excludedDatesToDisable]=\"excludedDatesToDisable\"\n [displayFormat]=\"dateInputFormat\"\n [value]=\"bsDateValue\"\n (change)=\"onModelUpdate($event, 'date')\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n [tabindex]=\"tabindex || 0\"\n (click)=\"!(disabled || readonly) && showDatePickerModal(bsDateValue)\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : arialabel || 'Choose Date'\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event)\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n role=\"button\">\n </div>\n}\n" }]
2818
+ ], template: "<div dropdown\n [isOpen]=\"isTimeOpen\"\n autoClose=\"false\"\n [container]=\"'body'\"\n (onShown)=\"onTimepickerOpen()\"\n style=\"display: inherit;\">\n <input class=\"form-control app-textbox display-input\"\n [attr.aria-label]=\"arialabel\"\n focus-target\n [name]=\"name\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n type=\"text\"\n [value]=\"displayValue\"\n (click)=\"toggleDpDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n (change)=\"onDateChange($event)\"\n [autofocus]=\"autofocus\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event)\">\n\n <span class=\"input-group-btn\">\n <button type=\"button\"\n class=\"btn btn-default btn-date\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : 'Choose date by pressing enter'\"\n aria-haspopup=\"true\"\n [attr.aria-expanded]=\"isDateOpen\"\n (click)=\"toggleDpDropdown($event, false)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-calendar\"></i>\n </button>\n <button type=\"button\"\n class=\"btn btn-default btn-time\"\n [tabindex]=\"loadNativeDateInput ? '-1' : tabindex\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [disabled]=\"disabled || readonly || isCurrentDate\"\n aria-label=\"Select time\"\n aria-haspopup=\"true\"\n aria-expanded=\"false\"\n (click)=\"toggleTimePicker(!isTimeOpen, $event)\">\n <i aria-hidden=\"true\"\n class=\"app-icon wm-sl-l sl-time\"></i>\n </button>\n </span>\n <div style=\"width: 0;display: inline-block;\">\n <input class=\"model-holder\"\n aria-label=\"datepicker dropdownmenu\"\n aria-controls=\"date\"\n focus-target\n [tabindex]=\"-1\"\n [attr.aria-hidden]=\"!!loadNativeDateInput\"\n [container]=\"containerTarget || '.wm-app'\"\n [bsConfig]=\"_dateOptions\"\n [isOpen]=\"isDateOpen\"\n placement=\"bottom right\"\n (onShown)=\"onDatePickerOpen()\"\n (onHidden)=\"hideDatepickerDropdown()\"\n [daysDisabled]=\"excludedDaysToDisable\"\n [datesDisabled]=\"excludedDatesToDisable\"\n #datepicker=bsDatepicker\n bsDatepicker\n [isDisabled]=\"disabled || readonly || isCurrentDate\"\n [bsValue]=\"bsDateValue\"\n (bsValueChange)=\"onModelUpdate($event, 'date')\">\n </div>\n <div *dropdownMenu\n class=\"dropdown-menu\"\n aria-label=\"timepicker dropdown\"\n aria-controls=\"time\"\n (click)=\"preventTpClose($event)\">\n <timepicker class=\"model-holder\"\n [showMeridian]=\"ismeridian\"\n [readonlyInput]=\"disabled || readonly || isCurrentDate\"\n [(ngModel)]=\"bsTimeValue\"\n [ngModelOptions]=\"{standalone: true}\"\n [min]=\"minTime\"\n [max]=\"maxTime\"\n [hourStep]=\"hourstep\"\n [minuteStep]=\"minutestep\"\n [secondsStep]=\"secondsstep\"\n [mousewheel]=\"true\"\n [arrowkeys]=\"true\"\n (isValid)=\"isValid($event)\"\n [showSeconds]=\"showseconds\"\n (ngModelChange)=\"onModelUpdate($event, 'time')\"\n [ngClass]=\"{ 'showbuttons': showampmbuttons }\"></timepicker>\n @if (ismeridian && showampmbuttons) {\n <div class=\"ampm-toggle text-center\">\n <button class=\"meridian-btn mb-1\" [ngClass]=\"{ 'active btn-secondary': getPeriod() === 'AM' }\" (click)=\"setPeriod('AM')\">{{appLocale.LABEL_AM ||\"AM\"}}</button><br>\n <button class=\"meridian-btn\" [ngClass]=\"{ 'active btn-secondary': getPeriod() === 'PM' }\" (click)=\"setPeriod('PM')\">{{appLocale.LABEL_PM ||\"PM\"}}</button>\n </div>\n }\n </div>\n </div>\n@if (loadNativeDateInput) {\n <wm-datetimepicker\n dateTimePicker\n [config]=\"_dateOptions\"\n [placement]=\"modal\"\n [excludedDaysToDisable]=\"excludedDaysToDisable\"\n [excludedDatesToDisable]=\"excludedDatesToDisable\"\n [displayFormat]=\"dateInputFormat\"\n [value]=\"bsDateValue\"\n (change)=\"onModelUpdate($event, 'date')\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n [tabindex]=\"tabindex || 0\"\n (click)=\"!(disabled || readonly) && showDatePickerModal(bsDateValue)\"\n [attr.aria-label]=\"displayValue ? 'Change Date ' + displayValue : arialabel || 'Choose Date'\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event)\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n role=\"button\">\n </div>\n}\n" }]
2801
2819
  }], () => [{ type: i0.Injector }, { type: i0.NgZone }, { type: i0.ChangeDetectorRef }, { type: i1$1.AppDefaults }, { type: i1$1.App }, { type: undefined, decorators: [{
2802
2820
  type: Inject,
2803
2821
  args: ['EXPLICIT_CONTEXT']
@@ -2850,19 +2868,23 @@ function TimeComponent_div_5_Conditional_2_Template(rf, ctx) { if (rf & 1) {
2850
2868
  const _r3 = i0.ɵɵgetCurrentView();
2851
2869
  i0.ɵɵelementStart(0, "div", 8)(1, "button", 9);
2852
2870
  i0.ɵɵlistener("click", function TimeComponent_div_5_Conditional_2_Template_button_click_1_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setPeriod("AM")); });
2853
- i0.ɵɵtext(2, "AM");
2871
+ i0.ɵɵtext(2);
2854
2872
  i0.ɵɵelementEnd();
2855
2873
  i0.ɵɵelement(3, "br");
2856
2874
  i0.ɵɵelementStart(4, "button", 10);
2857
2875
  i0.ɵɵlistener("click", function TimeComponent_div_5_Conditional_2_Template_button_click_4_listener() { i0.ɵɵrestoreView(_r3); const ctx_r1 = i0.ɵɵnextContext(2); return i0.ɵɵresetView(ctx_r1.setPeriod("PM")); });
2858
- i0.ɵɵtext(5, "PM");
2876
+ i0.ɵɵtext(5);
2859
2877
  i0.ɵɵelementEnd()();
2860
2878
  } if (rf & 2) {
2861
2879
  const ctx_r1 = i0.ɵɵnextContext(2);
2862
2880
  i0.ɵɵadvance();
2863
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(2, _c3, ctx_r1.getPeriod() === "AM"));
2864
- i0.ɵɵadvance(3);
2865
- i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c3, ctx_r1.getPeriod() === "PM"));
2881
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(4, _c3, ctx_r1.getPeriod() === "AM"));
2882
+ i0.ɵɵadvance();
2883
+ i0.ɵɵtextInterpolate(ctx_r1.appLocale.LABEL_AM || "AM");
2884
+ i0.ɵɵadvance(2);
2885
+ i0.ɵɵproperty("ngClass", i0.ɵɵpureFunction1(6, _c3, ctx_r1.getPeriod() === "PM"));
2886
+ i0.ɵɵadvance();
2887
+ i0.ɵɵtextInterpolate(ctx_r1.appLocale.LABEL_PM || "PM");
2866
2888
  } }
2867
2889
  function TimeComponent_div_5_Template(rf, ctx) { if (rf & 1) {
2868
2890
  const _r1 = i0.ɵɵgetCurrentView();
@@ -2872,7 +2894,7 @@ function TimeComponent_div_5_Template(rf, ctx) { if (rf & 1) {
2872
2894
  i0.ɵɵtwoWayListener("ngModelChange", function TimeComponent_div_5_Template_timepicker_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); i0.ɵɵtwoWayBindingSet(ctx_r1.bsTimeValue, $event) || (ctx_r1.bsTimeValue = $event); return i0.ɵɵresetView($event); });
2873
2895
  i0.ɵɵlistener("isValid", function TimeComponent_div_5_Template_timepicker_isValid_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.isValid($event)); })("ngModelChange", function TimeComponent_div_5_Template_timepicker_ngModelChange_1_listener($event) { i0.ɵɵrestoreView(_r1); const ctx_r1 = i0.ɵɵnextContext(); return i0.ɵɵresetView(ctx_r1.onTimeChange($event)); });
2874
2896
  i0.ɵɵelementEnd();
2875
- i0.ɵɵtemplate(2, TimeComponent_div_5_Conditional_2_Template, 6, 6, "div", 8);
2897
+ i0.ɵɵtemplate(2, TimeComponent_div_5_Conditional_2_Template, 6, 8, "div", 8);
2876
2898
  i0.ɵɵelementEnd();
2877
2899
  } if (rf & 2) {
2878
2900
  const ctx_r1 = i0.ɵɵnextContext();
@@ -2939,7 +2961,8 @@ class TimeComponent extends BaseDateTimeComponent {
2939
2961
  $appDigest();
2940
2962
  }
2941
2963
  get displayValue() {
2942
- return getFormattedDate(this.datePipe, this.bsTimeValue, this.timepattern, this.timeZone, null, null, this) || '';
2964
+ const display = getFormattedDate(this.datePipe, this.bsTimeValue, this.timepattern, this.timeZone, null, null, this) || '';
2965
+ return this.safeReplaceMeridians(display);
2943
2966
  }
2944
2967
  get nativeDisplayValue() {
2945
2968
  return getFormattedDate(this.datePipe, this.bsTimeValue, 'HH:mm:ss', this.timeZone, null, null, this) || '';
@@ -3065,7 +3088,7 @@ class TimeComponent extends BaseDateTimeComponent {
3065
3088
  * This is an internal method triggered when the time input changes
3066
3089
  */
3067
3090
  onDisplayTimeChange($event) {
3068
- const newVal = getNativeDateObject($event.target.value, { meridians: this.meridians, pattern: this.loadNativeDateInput ? this.outputformat : undefined, isNativePicker: this.loadNativeDateInput });
3091
+ const newVal = getNativeDateObject($event.target.value?.replace(this.am, this.meridians[0])?.replace(this.pm, this.meridians[1]), { meridians: this.meridians, pattern: this.loadNativeDateInput ? this.outputformat : undefined, isNativePicker: this.loadNativeDateInput });
3069
3092
  // time pattern validation
3070
3093
  // if invalid pattern is entered, device is showing an error.
3071
3094
  if (!this.formatValidation(newVal, $event.target.value)) {
@@ -3102,13 +3125,13 @@ class TimeComponent extends BaseDateTimeComponent {
3102
3125
  maxTimeMeridian = moment(new Date(this.bsTimePicker.max)).format('A');
3103
3126
  timeValue = this.bsTimePicker.hours + ':' + (this.bsTimePicker.minutes || 0) + ':' + (this.bsTimePicker.seconds || 0) + (this.bsTimePicker.showMeridian ? (' ' + minTimeMeridian) : '');
3104
3127
  timeInputValue = getNativeDateObject(timeValue, { pattern: this.loadNativeDateInput ? this.outputformat : undefined, isNativePicker: this.loadNativeDateInput });
3105
- this.bsTimePicker.meridian = minTimeMeridian;
3128
+ this.bsTimePicker.meridian = minTimeMeridian?.replace(this.meridians[0], this.am)?.replace(this.meridians[1], this.pm);
3106
3129
  this.timeNotInRange = this.bsTimePicker.min > timeInputValue || this.bsTimePicker.max < timeInputValue;
3107
3130
  if (this.timeNotInRange || this.invalidDateTimeFormat) {
3108
3131
  this.bsTimeValue = this.getPrevDataValue();
3109
3132
  setTimeout(() => {
3110
3133
  const timeStr = getFormattedDate(this.datePipe, timeValue, this.timepattern, this.timeZone, null, null, this) || '';
3111
- $(this.nativeElement).find('.display-input').val(timeStr);
3134
+ $(this.nativeElement).find('.display-input').val(this.safeReplaceMeridians(timeStr));
3112
3135
  });
3113
3136
  }
3114
3137
  this.setValidateType(this.bsTimePicker.min, this.bsTimePicker.max, timeInputValue);
@@ -3119,7 +3142,7 @@ class TimeComponent extends BaseDateTimeComponent {
3119
3142
  // Update UI display if value hasn't changed
3120
3143
  if (!this.timeNotInRange && this.datavalue === this.getPrevDataValue()) {
3121
3144
  const displayTime = getFormattedDate(this.datePipe, this.datavalue, this.timepattern, this.timeZone, null, null, this) || '';
3122
- $(this.nativeElement).find('.display-input').val(displayTime);
3145
+ $(this.nativeElement).find('.display-input').val(this.safeReplaceMeridians(displayTime));
3123
3146
  }
3124
3147
  this.invokeOnTouched();
3125
3148
  this.invokeOnChange(this.datavalue, {}, true);
@@ -3175,7 +3198,7 @@ class TimeComponent extends BaseDateTimeComponent {
3175
3198
  }
3176
3199
  isValid(event) {
3177
3200
  if (!event) {
3178
- const enteredDate = $(this.nativeElement).find('input').val();
3201
+ const enteredDate = $(this.nativeElement).find('input').val()?.replace(this.am, this.meridians[0])?.replace(this.pm, this.meridians[1]);
3179
3202
  const newVal = getNativeDateObject(enteredDate, { meridians: this.meridians, pattern: this.loadNativeDateInput ? this.outputformat : undefined, isNativePicker: this.loadNativeDateInput });
3180
3203
  if (!this.formatValidation(newVal, enteredDate)) {
3181
3204
  return;
@@ -3240,7 +3263,7 @@ class TimeComponent extends BaseDateTimeComponent {
3240
3263
  provideAs(TimeComponent, NG_VALIDATORS, true),
3241
3264
  provideAsWidgetRef(TimeComponent),
3242
3265
  { provide: TimepickerConfig, deps: [AbstractI18nService], useFactory: getTimepickerConfig }
3243
- ], template: "<div dropdown [isOpen]=\"status.isopen\" (onShown)=\"onShown()\" (onHidden)=\"hideTimepickerDropdown()\" [container]=\"'body'\" style=\"display: inherit\">\n <input [attr.aria-label]=\"arialabel\" class=\"form-control app-textbox display-input\"\n focus-target\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n type=\"text\"\n role=\"timer\"\n [value]=\"displayValue\"\n [disabled]=\"disabled || readonly || isCurrentTime\"\n [autofocus]=\"autofocus\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-atomic]=\"isCurrentTime ? 'true' : 'false'\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n (click)=\"toggleDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n (change)=\"onDisplayTimeChange($event)\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event)\">\n <span class=\"input-group-btn dropdown-toggle\">\n <button type=\"button\" class=\"btn btn-default btn-date\" [tabindex]=\"tabindex\" [disabled]=\"disabled || readonly || isCurrentTime\" aria-label=\"Select time\" aria-haspopup=\"true\" aria-expanded=\"false\" (click)=\"toggleDropdown($event, false)\"><i aria-hidden=\"true\" class=\"app-icon wm-sl-l sl-time\"></i></button>\n </span>\n <div *dropdownMenu class=\"dropdown-menu\" (click)=\"preventTpClose($event)\">\n <timepicker class=\"model-holder\"\n [showMeridian]=\"ismeridian\"\n [readonlyInput]=\"isDisabled\"\n [(ngModel)]=\"bsTimeValue\"\n [ngModelOptions]=\"{standalone: true}\"\n [disabled]=\"disabled || readonly || isCurrentTime\"\n [min]=\"minTime\"\n [max]=\"maxTime\"\n [hourStep]=\"hourstep\"\n [minuteStep]=\"minutestep\"\n [secondsStep]=\"secondsstep\"\n [mousewheel]=\"true\"\n [arrowkeys]=\"true\"\n (isValid)=\"isValid($event)\"\n [showSeconds]=\"showseconds\" (ngModelChange)=\"onTimeChange($event)\"\n [ngClass]=\"{ 'showbuttons': showampmbuttons }\"></timepicker>\n @if (ismeridian && showampmbuttons) {\n <div class=\"ampm-toggle text-center\">\n <button class=\"meridian-btn mb-1\" [ngClass]=\"{ 'active btn-secondary': getPeriod() === 'AM' }\" (click)=\"setPeriod('AM')\">AM</button><br>\n <button class=\"meridian-btn\" [ngClass]=\"{ 'active btn-secondary': getPeriod() === 'PM' }\" (click)=\"setPeriod('PM')\">PM</button>\n </div>\n }\n </div>\n</div>\n@if (loadNativeDateInput) {\n <wm-datetimepicker\n dateTimePicker\n mode=\"TIME\"\n [minTime]=\"minTime\"\n [maxTime]=\"maxTime\"\n [placement]=\"modal\"\n [displayFormat]=\"timepattern\"\n [value]=\"bsTimeValue\"\n (change)=\"onTimeChange($event)\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n tabindex=\"1000000\"\n (click)=\"!(disabled || readonly) && showDatePickerModal(bsTimeValue)\"\n [attr.aria-label]=\"displayValue ? 'Change time ' + displayValue : arialabel || 'Select time'\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event); assignModel()\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n role=\"button\">\n </div>\n}\n" }]
3266
+ ], template: "<div dropdown [isOpen]=\"status.isopen\" (onShown)=\"onShown()\" (onHidden)=\"hideTimepickerDropdown()\" [container]=\"'body'\" style=\"display: inherit\">\n <input [attr.aria-label]=\"arialabel\" class=\"form-control app-textbox display-input\"\n focus-target\n [tabindex]=\"tabindex\"\n [name]=\"name\"\n type=\"text\"\n role=\"timer\"\n [value]=\"displayValue\"\n [disabled]=\"disabled || readonly || isCurrentTime\"\n [autofocus]=\"autofocus\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [attr.aria-atomic]=\"isCurrentTime ? 'true' : 'false'\"\n [required]=\"required\"\n [readOnly]=\"isReadOnly\"\n (click)=\"toggleDropdown($event, true)\"\n (focus)=\"onDateTimeInputFocus(); invokeOnFocus($event);\"\n (blur)=\"onInputBlur($event)\"\n (change)=\"onDisplayTimeChange($event)\"\n (keydown)=\"this._triggeredByUser = true; onDisplayKeydown($event)\">\n <span class=\"input-group-btn dropdown-toggle\">\n <button type=\"button\" class=\"btn btn-default btn-date\" [tabindex]=\"tabindex\" [disabled]=\"disabled || readonly || isCurrentTime\" aria-label=\"Select time\" aria-haspopup=\"true\" aria-expanded=\"false\" (click)=\"toggleDropdown($event, false)\"><i aria-hidden=\"true\" class=\"app-icon wm-sl-l sl-time\"></i></button>\n </span>\n <div *dropdownMenu class=\"dropdown-menu\" (click)=\"preventTpClose($event)\">\n <timepicker class=\"model-holder\"\n [showMeridian]=\"ismeridian\"\n [readonlyInput]=\"isDisabled\"\n [(ngModel)]=\"bsTimeValue\"\n [ngModelOptions]=\"{standalone: true}\"\n [disabled]=\"disabled || readonly || isCurrentTime\"\n [min]=\"minTime\"\n [max]=\"maxTime\"\n [hourStep]=\"hourstep\"\n [minuteStep]=\"minutestep\"\n [secondsStep]=\"secondsstep\"\n [mousewheel]=\"true\"\n [arrowkeys]=\"true\"\n (isValid)=\"isValid($event)\"\n [showSeconds]=\"showseconds\" (ngModelChange)=\"onTimeChange($event)\"\n [ngClass]=\"{ 'showbuttons': showampmbuttons }\"></timepicker>\n @if (ismeridian && showampmbuttons) {\n <div class=\"ampm-toggle text-center\">\n <button class=\"meridian-btn mb-1\" [ngClass]=\"{ 'active btn-secondary': getPeriod() === 'AM' }\" (click)=\"setPeriod('AM')\">{{appLocale.LABEL_AM ||\"AM\"}}</button><br>\n <button class=\"meridian-btn\" [ngClass]=\"{ 'active btn-secondary': getPeriod() === 'PM' }\" (click)=\"setPeriod('PM')\">{{appLocale.LABEL_PM ||\"PM\"}}</button>\n </div>\n }\n </div>\n</div>\n@if (loadNativeDateInput) {\n <wm-datetimepicker\n dateTimePicker\n mode=\"TIME\"\n [minTime]=\"minTime\"\n [maxTime]=\"maxTime\"\n [placement]=\"modal\"\n [displayFormat]=\"timepattern\"\n [value]=\"bsTimeValue\"\n (change)=\"onTimeChange($event)\">\n </wm-datetimepicker>\n <div class=\"mobile-input mobile-datepicker-container\"\n tabindex=\"1000000\"\n (click)=\"!(disabled || readonly) && showDatePickerModal(bsTimeValue)\"\n [attr.aria-label]=\"displayValue ? 'Change time ' + displayValue : arialabel || 'Select time'\"\n (focus)=\"onDateTimeInputFocus(true); invokeOnFocus($event); assignModel()\"\n (blur)=\"onDateTimeInputBlur(); invokeOnTouched($event)\"\n role=\"button\">\n </div>\n}\n" }]
3244
3267
  }], () => [{ type: i0.Injector }, { type: i0.NgZone }, { type: i1$1.AppDefaults }, { type: i1$1.App }, { type: undefined, decorators: [{
3245
3268
  type: Inject,
3246
3269
  args: ['EXPLICIT_CONTEXT']