@tiba-spark/client-shared-lib 26.3.0-628 → 26.3.0-628.a11y.13

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 (89) hide show
  1. package/esm2022/libraries/components/cloud-confirm-dialog/cloud-confirm-dialog.component.mjs +3 -3
  2. package/esm2022/libraries/components/common-pages/error-page/error-page.component.mjs +35 -7
  3. package/esm2022/libraries/components/field-label/field-label.component.mjs +39 -6
  4. package/esm2022/libraries/components/field-validations/field-validations.component.mjs +8 -5
  5. package/esm2022/libraries/components/guest-open-ticket-dialog/guest-open-ticket-dialog.component.mjs +2 -2
  6. package/esm2022/libraries/components/intercom/intercom.component.mjs +2 -2
  7. package/esm2022/libraries/components/logo/logo.component.mjs +3 -3
  8. package/esm2022/libraries/components/message-bar/float-message-bar.service.mjs +30 -6
  9. package/esm2022/libraries/components/modal-buttons-wrapper/modal-buttons-wrapper.component.mjs +9 -4
  10. package/esm2022/libraries/components/notification/alert-notification/alert-notification.component.mjs +3 -3
  11. package/esm2022/libraries/components/notification/command-notification/command-notification.component.mjs +3 -3
  12. package/esm2022/libraries/components/notification/notification-type-label/notification-type-label.component.mjs +2 -2
  13. package/esm2022/libraries/components/notification/notification.service.mjs +6 -3
  14. package/esm2022/libraries/components/overlay-loading-container/empty-results/empty-results.component.mjs +3 -3
  15. package/esm2022/libraries/components/overlay-loading-container/error-results/error-results.component.mjs +2 -2
  16. package/esm2022/libraries/components/restart-link/restart-link.component.mjs +2 -2
  17. package/esm2022/libraries/constants/global-constants.mjs +2 -1
  18. package/esm2022/libraries/directives/clear-all-button.directive.mjs +49 -0
  19. package/esm2022/libraries/directives/disabled.directive.mjs +121 -0
  20. package/esm2022/libraries/directives/icon-button.directive.mjs +36 -0
  21. package/esm2022/libraries/directives/index.mjs +4 -1
  22. package/esm2022/libraries/directives/shared-directives.module.mjs +16 -1
  23. package/esm2022/libraries/enums/localization.enum.mjs +45 -5
  24. package/esm2022/libraries/enums/message-bar-duration.enum.mjs +4 -2
  25. package/esm2022/libraries/interfaces/table-column.interface.mjs +1 -1
  26. package/esm2022/libraries/modules/layout/layout.state.mjs +2 -2
  27. package/esm2022/libraries/services/can-deactivate.service.mjs +4 -3
  28. package/esm2022/libraries/services/modal.service.mjs +94 -1
  29. package/esm2022/libraries/utils/error.util.mjs +12 -1
  30. package/fesm2022/tiba-spark-client-shared-lib.mjs +543 -93
  31. package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
  32. package/libraries/components/common-pages/error-page/error-page.component.d.ts +11 -2
  33. package/libraries/components/common-pages/error-page/error-page.component.d.ts.map +1 -1
  34. package/libraries/components/field-label/field-label.component.d.ts +8 -3
  35. package/libraries/components/field-label/field-label.component.d.ts.map +1 -1
  36. package/libraries/components/field-validations/field-validations.component.d.ts +2 -4
  37. package/libraries/components/field-validations/field-validations.component.d.ts.map +1 -1
  38. package/libraries/components/message-bar/float-message-bar.service.d.ts +2 -0
  39. package/libraries/components/message-bar/float-message-bar.service.d.ts.map +1 -1
  40. package/libraries/components/modal-buttons-wrapper/modal-buttons-wrapper.component.d.ts.map +1 -1
  41. package/libraries/components/notification/alert-notification/alert-notification.component.d.ts.map +1 -1
  42. package/libraries/components/notification/command-notification/command-notification.component.d.ts.map +1 -1
  43. package/libraries/components/notification/notification.service.d.ts.map +1 -1
  44. package/libraries/constants/global-constants.d.ts +1 -0
  45. package/libraries/constants/global-constants.d.ts.map +1 -1
  46. package/libraries/directives/clear-all-button.directive.d.ts +19 -0
  47. package/libraries/directives/clear-all-button.directive.d.ts.map +1 -0
  48. package/libraries/directives/disabled.directive.d.ts +30 -0
  49. package/libraries/directives/disabled.directive.d.ts.map +1 -0
  50. package/libraries/directives/icon-button.directive.d.ts +14 -0
  51. package/libraries/directives/icon-button.directive.d.ts.map +1 -0
  52. package/libraries/directives/index.d.ts +3 -0
  53. package/libraries/directives/index.d.ts.map +1 -1
  54. package/libraries/directives/shared-directives.module.d.ts +7 -4
  55. package/libraries/directives/shared-directives.module.d.ts.map +1 -1
  56. package/libraries/enums/localization.enum.d.ts +44 -4
  57. package/libraries/enums/localization.enum.d.ts.map +1 -1
  58. package/libraries/enums/message-bar-duration.enum.d.ts +3 -1
  59. package/libraries/enums/message-bar-duration.enum.d.ts.map +1 -1
  60. package/libraries/interfaces/table-column.interface.d.ts +1 -0
  61. package/libraries/interfaces/table-column.interface.d.ts.map +1 -1
  62. package/libraries/services/can-deactivate.service.d.ts.map +1 -1
  63. package/libraries/services/modal.service.d.ts +8 -0
  64. package/libraries/services/modal.service.d.ts.map +1 -1
  65. package/libraries/utils/error.util.d.ts +6 -0
  66. package/libraries/utils/error.util.d.ts.map +1 -1
  67. package/package.json +1 -1
  68. package/src/libraries/theme/_calendar.scss +2 -1
  69. package/src/libraries/theme/_card.scss +6 -5
  70. package/src/libraries/theme/_forms.scss +1 -1
  71. package/src/libraries/theme/_mixins.scss +0 -1
  72. package/src/libraries/theme/_modals.scss +25 -3
  73. package/src/libraries/theme/_ngx.scss +0 -1
  74. package/src/libraries/theme/_tables.scss +3 -2
  75. package/src/libraries/theme/_tabs.scss +6 -4
  76. package/src/libraries/theme/_utils.scss +196 -4
  77. package/src/libraries/theme/_variables.scss +42 -10
  78. package/src/libraries/theme/components/_carousel.scss +10 -4
  79. package/src/libraries/theme/components/_tb-search.scss +10 -4
  80. package/src/libraries/theme/mat-components/_mat-checkbox.scss +1 -1
  81. package/src/libraries/theme/mat-components/_mat-date-picker.scss +4 -0
  82. package/src/libraries/theme/mat-components/_mat-input.scss +5 -0
  83. package/src/libraries/theme/mat-components/_mat-menu.scss +42 -16
  84. package/src/libraries/theme/mat-components/_mat-radio-group.scss +5 -0
  85. package/src/libraries/theme/mat-components/_mat-select.scss +35 -9
  86. package/src/libraries/theme/mat-components/_mat-selection-list.scss +2 -3
  87. package/src/libraries/theme/mat-components/_mat-slide-toggle.scss +1 -1
  88. package/src/libraries/theme/mat-components/_mat-step.scss +41 -2
  89. package/src/libraries/theme/theme.scss +119 -0
@@ -1,7 +1,7 @@
1
1
  import * as i2 from '@angular/common';
2
2
  import { DatePipe, CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { Directive, Injectable, HostListener, HostBinding, Input, Optional, InjectionToken, Inject, NgModule, forwardRef, Pipe, Component, ChangeDetectionStrategy, EventEmitter, Output, createComponent, signal, computed, inject, Injector, effect, input, ChangeDetectorRef, ViewChild } from '@angular/core';
4
+ import { Directive, inject, ElementRef, input, effect, Injectable, HostListener, HostBinding, Input, Optional, InjectionToken, Inject, NgModule, forwardRef, Pipe, Component, ChangeDetectionStrategy, EventEmitter, Output, createComponent, signal, computed, Injector, ViewChild, ChangeDetectorRef } from '@angular/core';
5
5
  import DOMPurify from 'dompurify';
6
6
  import { Subject, merge, takeUntil, throwError, of, Observable, delay, debounceTime, switchMap, map, from, noop, BehaviorSubject, Subscription, combineLatest, filter as filter$1, take, distinctUntilChanged as distinctUntilChanged$1, tap as tap$1, first as first$1, catchError as catchError$1, EMPTY, fromEvent, timer, distinctUntilKeyChanged, firstValueFrom, finalize as finalize$1, defer, ReplaySubject } from 'rxjs';
7
7
  import * as i1 from '@angular/forms';
@@ -64,6 +64,53 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
64
64
  }]
65
65
  }], ctorParameters: () => [{ type: i0.ElementRef }] });
66
66
 
67
+ const ENABLED_CLASS = 'active-button';
68
+ /**
69
+ * Every "Clear All" filter button (`.tb-clear-all-filters-button`) is a keyboard button.
70
+ * Pages enable it with the `active-button` class; without it the button is disabled for
71
+ * the mouse (theme `pointer-events: none`), so it also leaves the Tab order and ignores keys.
72
+ */
73
+ class ClearAllButtonDirective {
74
+ constructor() {
75
+ this.el = inject(ElementRef).nativeElement;
76
+ this.observer = new MutationObserver(() => this.sync());
77
+ }
78
+ ngOnInit() {
79
+ this.observer.observe(this.el, { attributes: true, attributeFilter: ['class'] });
80
+ this.sync();
81
+ }
82
+ ngOnDestroy() {
83
+ this.observer.disconnect();
84
+ }
85
+ activate(event) {
86
+ event.preventDefault();
87
+ if (this.enabled && !event.repeat) {
88
+ this.el.click();
89
+ }
90
+ }
91
+ get enabled() {
92
+ return this.el.classList.contains(ENABLED_CLASS);
93
+ }
94
+ sync() {
95
+ this.el.tabIndex = this.enabled ? 0 : -1;
96
+ this.el.setAttribute('aria-disabled', String(!this.enabled));
97
+ }
98
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ClearAllButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
99
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.14", type: ClearAllButtonDirective, isStandalone: true, selector: ".tb-clear-all-filters-button", host: { attributes: { "role": "button" }, listeners: { "keydown.enter": "activate($event)", "keydown.space": "activate($event)" } }, ngImport: i0 }); }
100
+ }
101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ClearAllButtonDirective, decorators: [{
102
+ type: Directive,
103
+ args: [{
104
+ selector: '.tb-clear-all-filters-button',
105
+ standalone: true,
106
+ host: {
107
+ role: 'button',
108
+ '(keydown.enter)': 'activate($event)',
109
+ '(keydown.space)': 'activate($event)',
110
+ },
111
+ }]
112
+ }] });
113
+
67
114
  class ContainerRefDirective {
68
115
  constructor(viewContainerRef) {
69
116
  this.viewContainerRef = viewContainerRef;
@@ -79,6 +126,125 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
79
126
  }]
80
127
  }], ctorParameters: () => [{ type: i0.ViewContainerRef }] });
81
128
 
129
+ const BLOCKED_KEYS = ['Enter', ' '];
130
+ const FOCUSABLE$1 = 'a[href], button, input, select, textarea, [tabindex]';
131
+ /**
132
+ * Disables an element for mouse, keyboard and assistive technology.
133
+ * Drop-in for `[class.tb-action-disabled]`: `[tbDisabled]="isDisabled"`.
134
+ */
135
+ class DisabledDirective {
136
+ constructor() {
137
+ this.tbDisabled = input(false);
138
+ this.tbDisabledClass = input('tb-action-disabled');
139
+ /** Id of the element that explains why it is disabled; the host then stays focusable. */
140
+ this.tbDisabledDescribedBy = input(null);
141
+ this.el = inject(ElementRef).nativeElement;
142
+ this.appliedClass = null;
143
+ this.appliedReasonId = null;
144
+ this.appliedNativeDisabled = false;
145
+ /** Focusable children taken out of the Tab order with the host, and their original attributes. */
146
+ this.skippedChildren = new Map();
147
+ // Projected content (e.g. a button inside tb-tooltip) can render after the host is disabled.
148
+ this.childObserver = new MutationObserver(() => this.skipChildren());
149
+ this.block = (event) => {
150
+ if (!this.tbDisabled()) {
151
+ return;
152
+ }
153
+ if (event instanceof KeyboardEvent && !BLOCKED_KEYS.includes(event.key)) {
154
+ return;
155
+ }
156
+ event.preventDefault();
157
+ event.stopImmediatePropagation();
158
+ };
159
+ effect(() => this.apply(this.tbDisabled(), this.tbDisabledClass(), this.tbDisabledDescribedBy()));
160
+ // Capture phase, so projected children cannot be activated either.
161
+ this.el.addEventListener('click', this.block, true);
162
+ this.el.addEventListener('keydown', this.block, true);
163
+ }
164
+ apply(disabled, cssClass, reasonId) {
165
+ if (this.appliedClass) {
166
+ this.el.classList.remove(this.appliedClass);
167
+ }
168
+ this.appliedClass = disabled ? cssClass : null;
169
+ if (this.appliedClass) {
170
+ this.el.classList.add(this.appliedClass);
171
+ }
172
+ const isButton = this.el instanceof HTMLButtonElement;
173
+ const nativeDisabled = disabled && isButton && !reasonId;
174
+ if (nativeDisabled || this.appliedNativeDisabled) {
175
+ this.el.disabled = nativeDisabled;
176
+ this.appliedNativeDisabled = nativeDisabled;
177
+ }
178
+ this.setAttribute('aria-disabled', disabled && !nativeDisabled ? 'true' : null);
179
+ this.setReason(disabled ? reasonId : null);
180
+ this.setSkipInTabOrder(disabled && !isButton && !reasonId);
181
+ }
182
+ setReason(reasonId) {
183
+ const ids = (this.el.getAttribute('aria-describedby') ?? '')
184
+ .split(' ')
185
+ .filter(id => id && id !== this.appliedReasonId);
186
+ if (reasonId) {
187
+ ids.push(reasonId);
188
+ }
189
+ this.appliedReasonId = reasonId;
190
+ this.setAttribute('aria-describedby', ids.length ? ids.join(' ') : null);
191
+ }
192
+ setSkipInTabOrder(skip) {
193
+ if (skip) {
194
+ this.skipChildren();
195
+ this.childObserver.observe(this.el, { childList: true, subtree: true, attributes: true, attributeFilter: ['tabindex'] });
196
+ }
197
+ else {
198
+ this.childObserver.disconnect();
199
+ this.skippedChildren.forEach((saved, child) => {
200
+ this.setAttributeOn(child, 'tabindex', saved.tabIndex);
201
+ this.setAttributeOn(child, 'aria-disabled', saved.ariaDisabled);
202
+ });
203
+ this.skippedChildren.clear();
204
+ }
205
+ if (skip && this.savedTabIndex === undefined) {
206
+ this.savedTabIndex = this.el.getAttribute('tabindex');
207
+ this.el.setAttribute('tabindex', '-1');
208
+ }
209
+ else if (!skip && this.savedTabIndex !== undefined) {
210
+ this.setAttribute('tabindex', this.savedTabIndex);
211
+ this.savedTabIndex = undefined;
212
+ }
213
+ }
214
+ skipChildren() {
215
+ for (const child of Array.from(this.el.querySelectorAll(FOCUSABLE$1))) {
216
+ if (child.tabIndex >= 0 && !this.skippedChildren.has(child)) {
217
+ this.skippedChildren.set(child, {
218
+ tabIndex: child.getAttribute('tabindex'),
219
+ ariaDisabled: child.getAttribute('aria-disabled'),
220
+ });
221
+ child.setAttribute('tabindex', '-1');
222
+ child.setAttribute('aria-disabled', 'true');
223
+ }
224
+ }
225
+ }
226
+ setAttribute(name, value) {
227
+ this.setAttributeOn(this.el, name, value);
228
+ }
229
+ setAttributeOn(element, name, value) {
230
+ if (value === null) {
231
+ element.removeAttribute(name);
232
+ }
233
+ else {
234
+ element.setAttribute(name, value);
235
+ }
236
+ }
237
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DisabledDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
238
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: DisabledDirective, isStandalone: true, selector: "[tbDisabled]", inputs: { tbDisabled: { classPropertyName: "tbDisabled", publicName: "tbDisabled", isSignal: true, isRequired: false, transformFunction: null }, tbDisabledClass: { classPropertyName: "tbDisabledClass", publicName: "tbDisabledClass", isSignal: true, isRequired: false, transformFunction: null }, tbDisabledDescribedBy: { classPropertyName: "tbDisabledDescribedBy", publicName: "tbDisabledDescribedBy", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0 }); }
239
+ }
240
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: DisabledDirective, decorators: [{
241
+ type: Directive,
242
+ args: [{
243
+ selector: '[tbDisabled]',
244
+ standalone: true,
245
+ }]
246
+ }], ctorParameters: () => [] });
247
+
82
248
  const ALLOWED_TAGS = [
83
249
  'a',
84
250
  'b',
@@ -340,6 +506,40 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
340
506
  args: ['window:resize', ['$event']]
341
507
  }] } });
342
508
 
509
+ /**
510
+ * Makes a mouse-only clickable element (usually `tb-icon`) a keyboard button:
511
+ * `<tb-icon (click)="edit()" [tbIconButton]="L.edit | translate">`.
512
+ * Enter and Space call the element's existing click handler.
513
+ */
514
+ class IconButtonDirective {
515
+ constructor() {
516
+ this.tbIconButton = input.required();
517
+ this.el = inject(ElementRef).nativeElement;
518
+ }
519
+ activate(event) {
520
+ event.preventDefault();
521
+ if (!event.repeat && this.el.getAttribute('aria-disabled') !== 'true') {
522
+ this.el.click();
523
+ }
524
+ }
525
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IconButtonDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
526
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: IconButtonDirective, isStandalone: true, selector: "[tbIconButton]", inputs: { tbIconButton: { classPropertyName: "tbIconButton", publicName: "tbIconButton", isSignal: true, isRequired: true, transformFunction: null } }, host: { attributes: { "role": "button", "tabindex": "0" }, listeners: { "keydown.enter": "activate($event)", "keydown.space": "activate($event)" }, properties: { "attr.aria-label": "tbIconButton()" } }, ngImport: i0 }); }
527
+ }
528
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IconButtonDirective, decorators: [{
529
+ type: Directive,
530
+ args: [{
531
+ selector: '[tbIconButton]',
532
+ standalone: true,
533
+ host: {
534
+ role: 'button',
535
+ tabindex: '0',
536
+ '[attr.aria-label]': 'tbIconButton()',
537
+ '(keydown.enter)': 'activate($event)',
538
+ '(keydown.space)': 'activate($event)',
539
+ },
540
+ }]
541
+ }] });
542
+
343
543
  class IsEllipsisDirective {
344
544
  constructor(elementRef, cdr) {
345
545
  this.elementRef = elementRef;
@@ -72194,6 +72394,7 @@ const COLORS = {
72194
72394
  CHART_DEBIT: '#8DA0FE',
72195
72395
  CHART_COMPACT: '#7B61FF',
72196
72396
  CHART_MID_FULL_SIZE: '#B48CFF',
72397
+ CHART_SLICE_GAP: '#FFFFFF',
72197
72398
  };
72198
72399
  const HOUR_FORMAT_12 = 12;
72199
72400
  const HOUR_FORMAT_24 = 24;
@@ -72804,6 +73005,8 @@ var Localization;
72804
73005
  Localization["start_time"] = "start_time";
72805
73006
  Localization["end_time"] = "end_time";
72806
73007
  Localization["pause"] = "pause";
73008
+ Localization["pause_animation"] = "pause_animation";
73009
+ Localization["play_animation"] = "play_animation";
72807
73010
  Localization["resume"] = "resume";
72808
73011
  Localization["ignored"] = "ignored";
72809
73012
  Localization["none"] = "none";
@@ -73280,9 +73483,7 @@ var Localization;
73280
73483
  Localization["no_results_device_table"] = "no_results_device_table";
73281
73484
  Localization["no_results_smart_park_list"] = "no_results_smart_park_list";
73282
73485
  Localization["no_results_devices_list"] = "no_results_devices_list";
73283
- Localization["no_results_guest_history"] = "no_results_guest_history";
73284
73486
  Localization["no_results_monthly_history"] = "no_results_monthly_history";
73285
- Localization["no_results_transient_history"] = "no_results_transient_history";
73286
73487
  Localization["no_results_transient_io"] = "no_results_transient_io";
73287
73488
  Localization["no_results_park_activity"] = "no_results_park_activity";
73288
73489
  Localization["no_results_lpr_black_list"] = "no_results_lpr_black_list";
@@ -73467,6 +73668,8 @@ var Localization;
73467
73668
  Localization["parking_lot_address"] = "parking_lot_address";
73468
73669
  Localization["allowed_usage"] = "allowed_usage";
73469
73670
  Localization["send"] = "send";
73671
+ Localization["check_details_before_continuing"] = "check_details_before_continuing";
73672
+ Localization["confirm_and_send"] = "confirm_and_send";
73470
73673
  Localization["coupon_qr_code_preview"] = "coupon_qr_code_preview";
73471
73674
  Localization["upload_image_failed"] = "upload_image_failed";
73472
73675
  Localization["unsupported_image_format"] = "unsupported_image_format";
@@ -74603,8 +74806,8 @@ var Localization;
74603
74806
  Localization["form_validation_units_balance_maximum"] = "form_validation_units_balance_maximum";
74604
74807
  Localization["form_validation_units_balance_minimum"] = "form_validation_units_balance_minimum";
74605
74808
  Localization["user_saved_and_status_changed_msg"] = "user_saved_and_status_changed_msg";
74606
- Localization["on"] = "On";
74607
- Localization["off"] = "Off";
74809
+ Localization["on"] = "on";
74810
+ Localization["off"] = "off";
74608
74811
  Localization["update_and_continue"] = "update_and_continue";
74609
74812
  Localization["delete_and_continue"] = "delete_and_continue";
74610
74813
  Localization["permission_levels"] = "permission_levels";
@@ -75818,6 +76021,44 @@ var Localization;
75818
76021
  Localization["search_room_number"] = "search_room_number";
75819
76022
  Localization["tech_tools_module"] = "tech_tools_module";
75820
76023
  Localization["device_configurator"] = "device_configurator";
76024
+ Localization["reason_unsupported_version"] = "reason_unsupported_version";
76025
+ Localization["reason_no_permission"] = "reason_no_permission";
76026
+ Localization["collapse_side_menu"] = "collapse_side_menu";
76027
+ Localization["expand_side_menu"] = "expand_side_menu";
76028
+ Localization["breadcrumb"] = "breadcrumb";
76029
+ Localization["expand_row"] = "expand_row";
76030
+ Localization["table_rows"] = "table_rows";
76031
+ Localization["increase"] = "increase";
76032
+ Localization["decrease"] = "decrease";
76033
+ Localization["move_row"] = "move_row";
76034
+ Localization["moved_to_position"] = "moved_to_position";
76035
+ Localization["date_part_day"] = "date_part_day";
76036
+ Localization["date_part_hour"] = "date_part_hour";
76037
+ Localization["date_part_minute"] = "date_part_minute";
76038
+ Localization["show_password"] = "show_password";
76039
+ Localization["hide_password"] = "hide_password";
76040
+ Localization["clear"] = "clear";
76041
+ Localization["enlarge_image"] = "enlarge_image";
76042
+ Localization["shrink_image"] = "shrink_image";
76043
+ Localization["past_day"] = "past_day";
76044
+ Localization["warning"] = "warning";
76045
+ Localization["devices_found_count"] = "devices_found_count";
76046
+ Localization["clear_field"] = "clear_field";
76047
+ Localization["open_field_calendar"] = "open_field_calendar";
76048
+ Localization["date_format"] = "date_format";
76049
+ Localization["form_validation_invalid_date_example"] = "form_validation_invalid_date_example";
76050
+ Localization["form_validation_date_from_to"] = "form_validation_date_from_to";
76051
+ Localization["form_validation_date_from"] = "form_validation_date_from";
76052
+ Localization["form_validation_date_to"] = "form_validation_date_to";
76053
+ Localization["whatsapp_phone_format"] = "whatsapp_phone_format";
76054
+ Localization["choose_time"] = "choose_time";
76055
+ Localization["date_part_placeholder_year"] = "date_part_placeholder_year";
76056
+ Localization["date_part_placeholder_month"] = "date_part_placeholder_month";
76057
+ Localization["date_part_placeholder_day"] = "date_part_placeholder_day";
76058
+ Localization["date_part_placeholder_hour"] = "date_part_placeholder_hour";
76059
+ Localization["date_part_placeholder_minute"] = "date_part_placeholder_minute";
76060
+ Localization["clear_search"] = "clear_search";
76061
+ Localization["selected_label"] = "selected_label";
75821
76062
  Localization["lost_ticket_active_rate_description"] = "lost_ticket_active_rate_description";
75822
76063
  Localization["lost_ticket_lane_firmware_unknown"] = "lost_ticket_lane_firmware_unknown";
75823
76064
  })(Localization || (Localization = {}));
@@ -117097,11 +117338,17 @@ class SharedDirectivesModule {
117097
117338
  TBNumberDirective,
117098
117339
  UnsafeHtmlValidatorDirective,
117099
117340
  VarDirective], imports: [CommonModule,
117341
+ ClearAllButtonDirective,
117100
117342
  ContainerRefDirective,
117343
+ DisabledDirective,
117344
+ IconButtonDirective,
117101
117345
  MatHintErrorDirective,
117102
117346
  SanitizedInnerHtmlDirective], exports: [AutofocusDirective,
117347
+ ClearAllButtonDirective,
117103
117348
  ContainerRefDirective,
117349
+ DisabledDirective,
117104
117350
  EllipsisMultilineDirective,
117351
+ IconButtonDirective,
117105
117352
  IsEllipsisDirective,
117106
117353
  NativeElementInjectorDirective,
117107
117354
  OffScreenDirective,
@@ -117129,14 +117376,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
117129
117376
  ],
117130
117377
  imports: [
117131
117378
  CommonModule,
117379
+ ClearAllButtonDirective,
117132
117380
  ContainerRefDirective,
117381
+ DisabledDirective,
117382
+ IconButtonDirective,
117133
117383
  MatHintErrorDirective,
117134
117384
  SanitizedInnerHtmlDirective,
117135
117385
  ],
117136
117386
  exports: [
117137
117387
  AutofocusDirective,
117388
+ ClearAllButtonDirective,
117138
117389
  ContainerRefDirective,
117390
+ DisabledDirective,
117139
117391
  EllipsisMultilineDirective,
117392
+ IconButtonDirective,
117140
117393
  IsEllipsisDirective,
117141
117394
  NativeElementInjectorDirective,
117142
117395
  OffScreenDirective,
@@ -117712,6 +117965,57 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
117712
117965
  args: [{ name: 'wrapFn', standalone: true }]
117713
117966
  }] });
117714
117967
 
117968
+ const DATE_TIME_ERROR_INVALID_DATE = 'invalidDate';
117969
+ const DATE_TIME_ERROR_INVALID_DATE_RANGE = 'invalidDateRange';
117970
+ const DATE_TIME_ERROR_REQUIRED = 'required';
117971
+ /** Message key for an out-of-range date: names the allowed dates when the error carries them. */
117972
+ function dateRangeKey(range) {
117973
+ if (range === true) {
117974
+ return Localization.form_validation_invalid_date_range;
117975
+ }
117976
+ if (range.min && range.max) {
117977
+ return Localization.form_validation_date_from_to;
117978
+ }
117979
+ return range.min ? Localization.form_validation_date_from : Localization.form_validation_date_to;
117980
+ }
117981
+ const DATE_TIME_ERRORS = [
117982
+ DATE_TIME_ERROR_INVALID_DATE,
117983
+ DATE_TIME_ERROR_INVALID_DATE_RANGE,
117984
+ DATE_TIME_ERROR_REQUIRED,
117985
+ ];
117986
+ function setErrorMessage(formName, controlName, errors) {
117987
+ if (errors) {
117988
+ const control = formName.get(controlName);
117989
+ if (control) {
117990
+ control.setErrors(errors);
117991
+ control.markAsTouched();
117992
+ }
117993
+ }
117994
+ }
117995
+ function setDateTimeErrorMessage(formName, controlName, errors) {
117996
+ const control = formName.get(controlName);
117997
+ if (control) {
117998
+ const currentErrors = control.errors ?? {};
117999
+ if (errors) {
118000
+ // Strip any stale DateTime keys before merging so incoming errors are authoritative
118001
+ const nonDateTimeErrors = { ...currentErrors };
118002
+ DATE_TIME_ERRORS.forEach((key) => delete nonDateTimeErrors[key]);
118003
+ control.setErrors({ ...nonDateTimeErrors, ...errors });
118004
+ control.markAsTouched();
118005
+ }
118006
+ else {
118007
+ // Create a copy to prevent direct mutation of Angular's internal errors object
118008
+ const cleanedErrors = { ...currentErrors };
118009
+ // No DateTime error → remove only DateTime-related errors
118010
+ DATE_TIME_ERRORS.forEach((key) => {
118011
+ delete cleanedErrors[key];
118012
+ });
118013
+ // If no errors left, clear errors completely
118014
+ control.setErrors(Object.keys(cleanedErrors).length > 0 ? cleanedErrors : null);
118015
+ }
118016
+ }
118017
+ }
118018
+
117715
118019
  var DataQaAttribute;
117716
118020
  (function (DataQaAttribute) {
117717
118021
  DataQaAttribute["select_http_status_multiple"] = "select-http-status-multiple";
@@ -118137,7 +118441,7 @@ let LayoutState = class LayoutState {
118137
118441
  constructor(mediaMatcher, store) {
118138
118442
  this.store = store;
118139
118443
  this.mobileQuerySubject = new Subject();
118140
- this.mobileQuery = mediaMatcher.matchMedia('(max-width: 600px)');
118444
+ this.mobileQuery = mediaMatcher.matchMedia('(max-width: 640px)');
118141
118445
  this.mobileQuery.onchange = (event) => this.mobileQuerySubject.next(event.matches);
118142
118446
  this.mobileQuerySubject
118143
118447
  .pipe(distinctUntilChanged())
@@ -118202,16 +118506,18 @@ class FieldValidationsComponent extends BaseComponent {
118202
118506
  constructor(controlContainer) {
118203
118507
  super();
118204
118508
  this.controlContainer = controlContainer;
118205
- this.ObjectKeys = Object.keys;
118509
+ this.dateRangeKey = dateRangeKey;
118206
118510
  }
118511
+ // Only the first error shows, so a field failing several rules still says what to fix (not just "Invalid").
118207
118512
  getErrors(errors) {
118208
118513
  if (errors) {
118209
118514
  delete errors.mask; // remove default NgxMaskDirective validation
118210
118515
  }
118211
- return errors;
118516
+ const first = errors && Object.keys(errors)[0];
118517
+ return first ? { [first]: errors[first] } : null;
118212
118518
  }
118213
118519
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldValidationsComponent, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); }
118214
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldValidationsComponent, isStandalone: true, selector: "[tb-field-validations]", inputs: { controlName: "controlName", label: "label", errors: "errors", touched: "touched" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"touched || controlContainer.control.get(controlName)?.touched\">\n <ng-container *tbVar=\"getErrors | wrapFn: controlContainer.control.get(controlName)?.errors ?? errors as errors\">\n <div *ngIf=\"ObjectKeys(errors || {}).length > 1; then hasMultiErrors else hasOneError\"></div>\n <ng-template #hasMultiErrors>\n {{ L.invalid | translate: { controlName: label | translate} }}\n </ng-template>\n <ng-template #hasOneError>\n <div *ngIf=\"errors?.required\">\n {{ L.form_validation_required_message | translate }}</div>\n <div *ngIf=\"errors?.invalidDate\">\n {{ L.form_validation_invalid_date_message | translate }}</div>\n <div *ngIf=\"errors?.invalidDateRange\">\n {{ L.form_validation_invalid_date_range | translate }}</div>\n <div *ngIf=\"errors?.invalidTerms\">\n {{ L.form_validation_terms_policy | translate }}</div>\n <div *ngIf=\"errors?.min min\">\n {{ L.form_validation_min_message | translate: { controlName: label | translate, value: errors?.min.min || 0 } }}\n </div>\n <div *ngIf=\"errors?.max\">\n {{ L.form_validation_max_message | translate: { controlName: label | translate, value: errors?.max.max || 0 } }}\n </div>\n <div *ngIf=\"errors?.minlength\">\n {{ L.form_validation_min_length_message | translate: { controlName: label | translate, value: errors?.minlength.requiredLength || 0 } }}\n </div>\n <div *ngIf=\"errors?.maxlength\">\n {{ L.form_validation_max_length_message | translate: { controlName: label | translate, value: errors?.maxlength.requiredLength || 0 } }}\n </div>\n <div *ngIf=\"errors?.invalidNumberLength\">\n {{ L.form_validation_invalid_length_message | translate: { controlName: label | translate, value: errors?.invalidNumberLength.requiredLength\n || 0 } }}\n </div>\n <div *ngIf=\"errors?.integerNumber\">\n {{ L.form_validation_invalid_integer_number_message | translate: { controlName: label | translate, value: errors?.integerNumber.value || 0 }\n }}\n </div>\n <div *ngIf=\"errors?.integerPositiveNumber\">\n {{ L.form_validation_invalid_integer_positive_number_message | translate: { controlName: label | translate, value:\n errors?.integerPositiveNumber.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.decimalNumber\">\n {{ L.form_validation_invalid_decimal_number_message | translate: { controlName: label | translate, value: errors?.decimalNumber.value || 0 }\n }}\n </div>\n <div *ngIf=\"errors?.decimalPositiveNumber\">\n {{ L.form_validation_invalid_decimal_positive_number_message | translate: { controlName: label | translate, value:\n errors?.decimalPositiveNumber.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.positiveNumbers\">\n {{ L.form_validation_invalid_positive_number_message | translate: { controlName: label | translate, value: errors?.positiveNumbers.value || 0\n } }}\n </div>\n <div *ngIf=\"errors?.positiveNumbersGreaterThanZero\">\n {{ L.form_validation_invalid_positive_number_greater_than_zero | translate: { controlName: label | translate, value:\n errors?.positiveNumbersGreaterThanZero.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.mobileNumbers\">\n {{ L.form_validation_invalid_mobile_number_message | translate: { controlName: label | translate, value: errors?.mobileNumbers.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.email\">\n {{ L.form_validation_email_pattern | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.pattern\">\n {{ L.form_validation_password_pattern | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordPolicyRequirements\">\n {{ L.form_validation_password_policy | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordNotMatch\">\n {{ L.form_validation_password_not_match | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordMatch\">\n {{ L.form_validation_password_match | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noWhitespaceWithinSentence\">\n {{ L.form_validation_no_white_space_within_sentence | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noDotWithinSentence\">\n {{ L.form_validation_no_dot_space_within_sentence | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.guidIsValid\">\n {{ L.form_validation_invalid_uuid | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noDefaultAccessProfile\">\n {{ L.no_access_default_profile | translate: { controlName: label | translate,\n companyName: errors?.noDefaultAccessProfile?.companyName } }}\n </div>\n <div *ngIf=\"errors?.noEmoji\">\n {{ L.form_validation_invalid_no_emoji_message | translate: { controlName: label | translate, value: errors?.noEmoji.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.form_validation_unsafe_html\">\n {{ L.form_validation_unsafe_html | translate }}\n </div>\n <div *ngIf=\"errors?.ipv4Format\">\n {{ L.form_validation_invalid_ipv4_message | translate: { controlName: label | translate, value: errors?.ipv4Format.value } }}\n </div>\n <div *ngIf=\"errors?.ipv4NotZero\">\n {{ L.form_validation_ipv4_not_zero | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.duplicateIP\">\n {{ L.form_validation_duplicate_ip | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.alphanumericRegex\">\n {{ L.form_validation_alphanumeric_message | translate: { controlName: label | translate, value: errors?.alphanumericRegex.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.validatePositiveInteger\">\n {{ L.form_validation_invalid_positive_integer_number_message | translate: { controlName: label | translate, value:\n errors?.validatePositiveInteger.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.roleNameAlreadyExists\">\n {{ L.role_name_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.rateNumberAlreadyExists\">\n {{ L.rate_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.accessProfileNumberTaken\">\n {{ L.access_profile_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.cashierNumberTaken\">\n {{ L.cashier_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.signCodeInUse\">\n {{ L.sign_code_already_in_use | translate }}\n </div>\n <div *ngIf=\"errors?.signCodeInvalidFormat\">\n {{ L.sign_code_invalid_format | translate }}\n </div>\n <div *ngIf=\"errors?.rateNumberIsZero\">\n {{ L.rate_number_is_zero | translate }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_time\">\n {{ L.form_validation_invalid_time | translate: { controlName: label ,from: '00:00',to:'00:00' } }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_time_format\">\n {{ L.form_validation_invalid_time_format | translate: { controlName: label } }}\n </div>\n <div *ngIf=\"errors?.positiveIntegerNumbersGreaterThanZeroRegex\">\n {{ L.form_validation_invalid_positive_integer_number_wo_zero_message | translate: { controlName: label | translate, value:\n errors?.positiveIntegerNumbersGreaterThanZeroRegex.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.form_validation_units_balance_maximum\">\n {{ L.form_validation_units_balance_maximum | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.form_validation_units_balance_minimum\">\n {{ L.form_validation_units_balance_minimum | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_percentage\">\n {{ L.form_validation_invalid_percentage_message | translate }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_decimal_percentage\">\n {{ L.form_validation_invalid_percentage_decimal_message | translate }}\n </div>\n <div *ngIf=\"errors?.revert_at_must_be_less_than_occupancy\">\n {{ L.revert_at_must_be_less_than_occupancy_message | translate }}\n </div>\n <div *ngIf=\"errors?.revert_at_must_be_more_than_occupancy\">\n {{ L.revert_at_must_be_more_than_occupancy_message | translate }}\n </div>\n <div *ngIf=\"errors?.car_plate_sequential_required\">\n {{ L.car_plate_sequential_required | translate }}\n </div>\n <div *ngIf=\"errors?.card_sequential_required\">\n {{ L.card_sequential_required | translate }}\n </div>\n </ng-template>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: WrapFnPipe, name: "wrapFn" }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: SharedDirectivesModule }, { kind: "directive", type: VarDirective, selector: "[tbVar]", inputs: ["tbVar"] }] }); }
118520
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldValidationsComponent, isStandalone: true, selector: "[tb-field-validations]", inputs: { controlName: "controlName", label: "label", errors: "errors", touched: "touched" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"touched || controlContainer.control.get(controlName)?.touched\">\n <ng-container *tbVar=\"getErrors | wrapFn: controlContainer.control.get(controlName)?.errors ?? errors as errors\">\n <ng-container>\n <div *ngIf=\"errors?.required\">\n {{ L.form_validation_required_message | translate }}</div>\n <div *ngIf=\"errors?.invalidDate\">\n {{ errors.invalidDate.example ? (L.form_validation_invalid_date_example | translate: { example: errors.invalidDate.example })\n : (L.form_validation_invalid_date_message | translate) }}</div>\n <div *ngIf=\"errors?.invalidDateRange as range\">\n {{ dateRangeKey(range) | translate: range }}</div>\n <div *ngIf=\"errors?.invalidTerms\">\n {{ L.form_validation_terms_policy | translate }}</div>\n <div *ngIf=\"errors?.min min\">\n {{ L.form_validation_min_message | translate: { controlName: label | translate, value: errors?.min.min || 0 } }}\n </div>\n <div *ngIf=\"errors?.max\">\n {{ L.form_validation_max_message | translate: { controlName: label | translate, value: errors?.max.max || 0 } }}\n </div>\n <div *ngIf=\"errors?.minlength\">\n {{ L.form_validation_min_length_message | translate: { controlName: label | translate, value: errors?.minlength.requiredLength || 0 } }}\n </div>\n <div *ngIf=\"errors?.maxlength\">\n {{ L.form_validation_max_length_message | translate: { controlName: label | translate, value: errors?.maxlength.requiredLength || 0 } }}\n </div>\n <div *ngIf=\"errors?.invalidNumberLength\">\n {{ L.form_validation_invalid_length_message | translate: { controlName: label | translate, value: errors?.invalidNumberLength.requiredLength\n || 0 } }}\n </div>\n <div *ngIf=\"errors?.integerNumber\">\n {{ L.form_validation_invalid_integer_number_message | translate: { controlName: label | translate, value: errors?.integerNumber.value || 0 }\n }}\n </div>\n <div *ngIf=\"errors?.integerPositiveNumber\">\n {{ L.form_validation_invalid_integer_positive_number_message | translate: { controlName: label | translate, value:\n errors?.integerPositiveNumber.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.decimalNumber\">\n {{ L.form_validation_invalid_decimal_number_message | translate: { controlName: label | translate, value: errors?.decimalNumber.value || 0 }\n }}\n </div>\n <div *ngIf=\"errors?.decimalPositiveNumber\">\n {{ L.form_validation_invalid_decimal_positive_number_message | translate: { controlName: label | translate, value:\n errors?.decimalPositiveNumber.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.positiveNumbers\">\n {{ L.form_validation_invalid_positive_number_message | translate: { controlName: label | translate, value: errors?.positiveNumbers.value || 0\n } }}\n </div>\n <div *ngIf=\"errors?.positiveNumbersGreaterThanZero\">\n {{ L.form_validation_invalid_positive_number_greater_than_zero | translate: { controlName: label | translate, value:\n errors?.positiveNumbersGreaterThanZero.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.mobileNumbers\">\n {{ L.form_validation_invalid_mobile_number_message | translate: { controlName: label | translate, value: errors?.mobileNumbers.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.email\">\n {{ L.form_validation_email_pattern | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.pattern\">\n {{ L.form_validation_password_pattern | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordPolicyRequirements\">\n {{ L.form_validation_password_policy | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordNotMatch\">\n {{ L.form_validation_password_not_match | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordMatch\">\n {{ L.form_validation_password_match | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noWhitespaceWithinSentence\">\n {{ L.form_validation_no_white_space_within_sentence | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noDotWithinSentence\">\n {{ L.form_validation_no_dot_space_within_sentence | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.guidIsValid\">\n {{ L.form_validation_invalid_uuid | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noDefaultAccessProfile\">\n {{ L.no_access_default_profile | translate: { controlName: label | translate,\n companyName: errors?.noDefaultAccessProfile?.companyName } }}\n </div>\n <div *ngIf=\"errors?.noEmoji\">\n {{ L.form_validation_invalid_no_emoji_message | translate: { controlName: label | translate, value: errors?.noEmoji.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.form_validation_unsafe_html\">\n {{ L.form_validation_unsafe_html | translate }}\n </div>\n <div *ngIf=\"errors?.ipv4Format\">\n {{ L.form_validation_invalid_ipv4_message | translate: { controlName: label | translate, value: errors?.ipv4Format.value } }}\n </div>\n <div *ngIf=\"errors?.ipv4NotZero\">\n {{ L.form_validation_ipv4_not_zero | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.duplicateIP\">\n {{ L.form_validation_duplicate_ip | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.alphanumericRegex\">\n {{ L.form_validation_alphanumeric_message | translate: { controlName: label | translate, value: errors?.alphanumericRegex.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.validatePositiveInteger\">\n {{ L.form_validation_invalid_positive_integer_number_message | translate: { controlName: label | translate, value:\n errors?.validatePositiveInteger.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.roleNameAlreadyExists\">\n {{ L.role_name_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.rateNumberAlreadyExists\">\n {{ L.rate_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.accessProfileNumberTaken\">\n {{ L.access_profile_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.cashierNumberTaken\">\n {{ L.cashier_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.signCodeInUse\">\n {{ L.sign_code_already_in_use | translate }}\n </div>\n <div *ngIf=\"errors?.signCodeInvalidFormat\">\n {{ L.sign_code_invalid_format | translate }}\n </div>\n <div *ngIf=\"errors?.rateNumberIsZero\">\n {{ L.rate_number_is_zero | translate }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_time\">\n {{ L.form_validation_invalid_time | translate: { controlName: label ,from: '00:00',to:'00:00' } }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_time_format\">\n {{ L.form_validation_invalid_time_format | translate: { controlName: label } }}\n </div>\n <div *ngIf=\"errors?.positiveIntegerNumbersGreaterThanZeroRegex\">\n {{ L.form_validation_invalid_positive_integer_number_wo_zero_message | translate: { controlName: label | translate, value:\n errors?.positiveIntegerNumbersGreaterThanZeroRegex.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.form_validation_units_balance_maximum\">\n {{ L.form_validation_units_balance_maximum | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.form_validation_units_balance_minimum\">\n {{ L.form_validation_units_balance_minimum | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_percentage\">\n {{ L.form_validation_invalid_percentage_message | translate }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_decimal_percentage\">\n {{ L.form_validation_invalid_percentage_decimal_message | translate }}\n </div>\n <div *ngIf=\"errors?.revert_at_must_be_less_than_occupancy\">\n {{ L.revert_at_must_be_less_than_occupancy_message | translate }}\n </div>\n <div *ngIf=\"errors?.revert_at_must_be_more_than_occupancy\">\n {{ L.revert_at_must_be_more_than_occupancy_message | translate }}\n </div>\n <div *ngIf=\"errors?.car_plate_sequential_required\">\n {{ L.car_plate_sequential_required | translate }}\n </div>\n <div *ngIf=\"errors?.card_sequential_required\">\n {{ L.card_sequential_required | translate }}\n </div>\n </ng-container>\n </ng-container>\n</ng-container>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: WrapFnPipe, name: "wrapFn" }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: SharedDirectivesModule }, { kind: "directive", type: VarDirective, selector: "[tbVar]", inputs: ["tbVar"] }] }); }
118215
118521
  }
118216
118522
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldValidationsComponent, decorators: [{
118217
118523
  type: Component,
@@ -118220,7 +118526,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
118220
118526
  WrapFnPipe,
118221
118527
  LocalizationModule,
118222
118528
  SharedDirectivesModule,
118223
- ], template: "<ng-container *ngIf=\"touched || controlContainer.control.get(controlName)?.touched\">\n <ng-container *tbVar=\"getErrors | wrapFn: controlContainer.control.get(controlName)?.errors ?? errors as errors\">\n <div *ngIf=\"ObjectKeys(errors || {}).length > 1; then hasMultiErrors else hasOneError\"></div>\n <ng-template #hasMultiErrors>\n {{ L.invalid | translate: { controlName: label | translate} }}\n </ng-template>\n <ng-template #hasOneError>\n <div *ngIf=\"errors?.required\">\n {{ L.form_validation_required_message | translate }}</div>\n <div *ngIf=\"errors?.invalidDate\">\n {{ L.form_validation_invalid_date_message | translate }}</div>\n <div *ngIf=\"errors?.invalidDateRange\">\n {{ L.form_validation_invalid_date_range | translate }}</div>\n <div *ngIf=\"errors?.invalidTerms\">\n {{ L.form_validation_terms_policy | translate }}</div>\n <div *ngIf=\"errors?.min min\">\n {{ L.form_validation_min_message | translate: { controlName: label | translate, value: errors?.min.min || 0 } }}\n </div>\n <div *ngIf=\"errors?.max\">\n {{ L.form_validation_max_message | translate: { controlName: label | translate, value: errors?.max.max || 0 } }}\n </div>\n <div *ngIf=\"errors?.minlength\">\n {{ L.form_validation_min_length_message | translate: { controlName: label | translate, value: errors?.minlength.requiredLength || 0 } }}\n </div>\n <div *ngIf=\"errors?.maxlength\">\n {{ L.form_validation_max_length_message | translate: { controlName: label | translate, value: errors?.maxlength.requiredLength || 0 } }}\n </div>\n <div *ngIf=\"errors?.invalidNumberLength\">\n {{ L.form_validation_invalid_length_message | translate: { controlName: label | translate, value: errors?.invalidNumberLength.requiredLength\n || 0 } }}\n </div>\n <div *ngIf=\"errors?.integerNumber\">\n {{ L.form_validation_invalid_integer_number_message | translate: { controlName: label | translate, value: errors?.integerNumber.value || 0 }\n }}\n </div>\n <div *ngIf=\"errors?.integerPositiveNumber\">\n {{ L.form_validation_invalid_integer_positive_number_message | translate: { controlName: label | translate, value:\n errors?.integerPositiveNumber.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.decimalNumber\">\n {{ L.form_validation_invalid_decimal_number_message | translate: { controlName: label | translate, value: errors?.decimalNumber.value || 0 }\n }}\n </div>\n <div *ngIf=\"errors?.decimalPositiveNumber\">\n {{ L.form_validation_invalid_decimal_positive_number_message | translate: { controlName: label | translate, value:\n errors?.decimalPositiveNumber.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.positiveNumbers\">\n {{ L.form_validation_invalid_positive_number_message | translate: { controlName: label | translate, value: errors?.positiveNumbers.value || 0\n } }}\n </div>\n <div *ngIf=\"errors?.positiveNumbersGreaterThanZero\">\n {{ L.form_validation_invalid_positive_number_greater_than_zero | translate: { controlName: label | translate, value:\n errors?.positiveNumbersGreaterThanZero.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.mobileNumbers\">\n {{ L.form_validation_invalid_mobile_number_message | translate: { controlName: label | translate, value: errors?.mobileNumbers.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.email\">\n {{ L.form_validation_email_pattern | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.pattern\">\n {{ L.form_validation_password_pattern | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordPolicyRequirements\">\n {{ L.form_validation_password_policy | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordNotMatch\">\n {{ L.form_validation_password_not_match | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordMatch\">\n {{ L.form_validation_password_match | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noWhitespaceWithinSentence\">\n {{ L.form_validation_no_white_space_within_sentence | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noDotWithinSentence\">\n {{ L.form_validation_no_dot_space_within_sentence | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.guidIsValid\">\n {{ L.form_validation_invalid_uuid | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noDefaultAccessProfile\">\n {{ L.no_access_default_profile | translate: { controlName: label | translate,\n companyName: errors?.noDefaultAccessProfile?.companyName } }}\n </div>\n <div *ngIf=\"errors?.noEmoji\">\n {{ L.form_validation_invalid_no_emoji_message | translate: { controlName: label | translate, value: errors?.noEmoji.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.form_validation_unsafe_html\">\n {{ L.form_validation_unsafe_html | translate }}\n </div>\n <div *ngIf=\"errors?.ipv4Format\">\n {{ L.form_validation_invalid_ipv4_message | translate: { controlName: label | translate, value: errors?.ipv4Format.value } }}\n </div>\n <div *ngIf=\"errors?.ipv4NotZero\">\n {{ L.form_validation_ipv4_not_zero | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.duplicateIP\">\n {{ L.form_validation_duplicate_ip | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.alphanumericRegex\">\n {{ L.form_validation_alphanumeric_message | translate: { controlName: label | translate, value: errors?.alphanumericRegex.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.validatePositiveInteger\">\n {{ L.form_validation_invalid_positive_integer_number_message | translate: { controlName: label | translate, value:\n errors?.validatePositiveInteger.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.roleNameAlreadyExists\">\n {{ L.role_name_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.rateNumberAlreadyExists\">\n {{ L.rate_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.accessProfileNumberTaken\">\n {{ L.access_profile_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.cashierNumberTaken\">\n {{ L.cashier_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.signCodeInUse\">\n {{ L.sign_code_already_in_use | translate }}\n </div>\n <div *ngIf=\"errors?.signCodeInvalidFormat\">\n {{ L.sign_code_invalid_format | translate }}\n </div>\n <div *ngIf=\"errors?.rateNumberIsZero\">\n {{ L.rate_number_is_zero | translate }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_time\">\n {{ L.form_validation_invalid_time | translate: { controlName: label ,from: '00:00',to:'00:00' } }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_time_format\">\n {{ L.form_validation_invalid_time_format | translate: { controlName: label } }}\n </div>\n <div *ngIf=\"errors?.positiveIntegerNumbersGreaterThanZeroRegex\">\n {{ L.form_validation_invalid_positive_integer_number_wo_zero_message | translate: { controlName: label | translate, value:\n errors?.positiveIntegerNumbersGreaterThanZeroRegex.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.form_validation_units_balance_maximum\">\n {{ L.form_validation_units_balance_maximum | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.form_validation_units_balance_minimum\">\n {{ L.form_validation_units_balance_minimum | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_percentage\">\n {{ L.form_validation_invalid_percentage_message | translate }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_decimal_percentage\">\n {{ L.form_validation_invalid_percentage_decimal_message | translate }}\n </div>\n <div *ngIf=\"errors?.revert_at_must_be_less_than_occupancy\">\n {{ L.revert_at_must_be_less_than_occupancy_message | translate }}\n </div>\n <div *ngIf=\"errors?.revert_at_must_be_more_than_occupancy\">\n {{ L.revert_at_must_be_more_than_occupancy_message | translate }}\n </div>\n <div *ngIf=\"errors?.car_plate_sequential_required\">\n {{ L.car_plate_sequential_required | translate }}\n </div>\n <div *ngIf=\"errors?.card_sequential_required\">\n {{ L.card_sequential_required | translate }}\n </div>\n </ng-template>\n </ng-container>\n</ng-container>\n" }]
118529
+ ], template: "<ng-container *ngIf=\"touched || controlContainer.control.get(controlName)?.touched\">\n <ng-container *tbVar=\"getErrors | wrapFn: controlContainer.control.get(controlName)?.errors ?? errors as errors\">\n <ng-container>\n <div *ngIf=\"errors?.required\">\n {{ L.form_validation_required_message | translate }}</div>\n <div *ngIf=\"errors?.invalidDate\">\n {{ errors.invalidDate.example ? (L.form_validation_invalid_date_example | translate: { example: errors.invalidDate.example })\n : (L.form_validation_invalid_date_message | translate) }}</div>\n <div *ngIf=\"errors?.invalidDateRange as range\">\n {{ dateRangeKey(range) | translate: range }}</div>\n <div *ngIf=\"errors?.invalidTerms\">\n {{ L.form_validation_terms_policy | translate }}</div>\n <div *ngIf=\"errors?.min min\">\n {{ L.form_validation_min_message | translate: { controlName: label | translate, value: errors?.min.min || 0 } }}\n </div>\n <div *ngIf=\"errors?.max\">\n {{ L.form_validation_max_message | translate: { controlName: label | translate, value: errors?.max.max || 0 } }}\n </div>\n <div *ngIf=\"errors?.minlength\">\n {{ L.form_validation_min_length_message | translate: { controlName: label | translate, value: errors?.minlength.requiredLength || 0 } }}\n </div>\n <div *ngIf=\"errors?.maxlength\">\n {{ L.form_validation_max_length_message | translate: { controlName: label | translate, value: errors?.maxlength.requiredLength || 0 } }}\n </div>\n <div *ngIf=\"errors?.invalidNumberLength\">\n {{ L.form_validation_invalid_length_message | translate: { controlName: label | translate, value: errors?.invalidNumberLength.requiredLength\n || 0 } }}\n </div>\n <div *ngIf=\"errors?.integerNumber\">\n {{ L.form_validation_invalid_integer_number_message | translate: { controlName: label | translate, value: errors?.integerNumber.value || 0 }\n }}\n </div>\n <div *ngIf=\"errors?.integerPositiveNumber\">\n {{ L.form_validation_invalid_integer_positive_number_message | translate: { controlName: label | translate, value:\n errors?.integerPositiveNumber.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.decimalNumber\">\n {{ L.form_validation_invalid_decimal_number_message | translate: { controlName: label | translate, value: errors?.decimalNumber.value || 0 }\n }}\n </div>\n <div *ngIf=\"errors?.decimalPositiveNumber\">\n {{ L.form_validation_invalid_decimal_positive_number_message | translate: { controlName: label | translate, value:\n errors?.decimalPositiveNumber.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.positiveNumbers\">\n {{ L.form_validation_invalid_positive_number_message | translate: { controlName: label | translate, value: errors?.positiveNumbers.value || 0\n } }}\n </div>\n <div *ngIf=\"errors?.positiveNumbersGreaterThanZero\">\n {{ L.form_validation_invalid_positive_number_greater_than_zero | translate: { controlName: label | translate, value:\n errors?.positiveNumbersGreaterThanZero.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.mobileNumbers\">\n {{ L.form_validation_invalid_mobile_number_message | translate: { controlName: label | translate, value: errors?.mobileNumbers.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.email\">\n {{ L.form_validation_email_pattern | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.pattern\">\n {{ L.form_validation_password_pattern | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordPolicyRequirements\">\n {{ L.form_validation_password_policy | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordNotMatch\">\n {{ L.form_validation_password_not_match | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.passwordMatch\">\n {{ L.form_validation_password_match | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noWhitespaceWithinSentence\">\n {{ L.form_validation_no_white_space_within_sentence | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noDotWithinSentence\">\n {{ L.form_validation_no_dot_space_within_sentence | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.guidIsValid\">\n {{ L.form_validation_invalid_uuid | translate: { controlName: label | translate} }}\n </div>\n <div *ngIf=\"errors?.noDefaultAccessProfile\">\n {{ L.no_access_default_profile | translate: { controlName: label | translate,\n companyName: errors?.noDefaultAccessProfile?.companyName } }}\n </div>\n <div *ngIf=\"errors?.noEmoji\">\n {{ L.form_validation_invalid_no_emoji_message | translate: { controlName: label | translate, value: errors?.noEmoji.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.form_validation_unsafe_html\">\n {{ L.form_validation_unsafe_html | translate }}\n </div>\n <div *ngIf=\"errors?.ipv4Format\">\n {{ L.form_validation_invalid_ipv4_message | translate: { controlName: label | translate, value: errors?.ipv4Format.value } }}\n </div>\n <div *ngIf=\"errors?.ipv4NotZero\">\n {{ L.form_validation_ipv4_not_zero | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.duplicateIP\">\n {{ L.form_validation_duplicate_ip | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.alphanumericRegex\">\n {{ L.form_validation_alphanumeric_message | translate: { controlName: label | translate, value: errors?.alphanumericRegex.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.validatePositiveInteger\">\n {{ L.form_validation_invalid_positive_integer_number_message | translate: { controlName: label | translate, value:\n errors?.validatePositiveInteger.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.roleNameAlreadyExists\">\n {{ L.role_name_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.rateNumberAlreadyExists\">\n {{ L.rate_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.accessProfileNumberTaken\">\n {{ L.access_profile_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.cashierNumberTaken\">\n {{ L.cashier_number_already_exists | translate }}\n </div>\n <div *ngIf=\"errors?.signCodeInUse\">\n {{ L.sign_code_already_in_use | translate }}\n </div>\n <div *ngIf=\"errors?.signCodeInvalidFormat\">\n {{ L.sign_code_invalid_format | translate }}\n </div>\n <div *ngIf=\"errors?.rateNumberIsZero\">\n {{ L.rate_number_is_zero | translate }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_time\">\n {{ L.form_validation_invalid_time | translate: { controlName: label ,from: '00:00',to:'00:00' } }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_time_format\">\n {{ L.form_validation_invalid_time_format | translate: { controlName: label } }}\n </div>\n <div *ngIf=\"errors?.positiveIntegerNumbersGreaterThanZeroRegex\">\n {{ L.form_validation_invalid_positive_integer_number_wo_zero_message | translate: { controlName: label | translate, value:\n errors?.positiveIntegerNumbersGreaterThanZeroRegex.value || 0 } }}\n </div>\n <div *ngIf=\"errors?.form_validation_units_balance_maximum\">\n {{ L.form_validation_units_balance_maximum | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.form_validation_units_balance_minimum\">\n {{ L.form_validation_units_balance_minimum | translate: { controlName: label | translate } }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_percentage\">\n {{ L.form_validation_invalid_percentage_message | translate }}\n </div>\n <div *ngIf=\"errors?.form_validation_invalid_decimal_percentage\">\n {{ L.form_validation_invalid_percentage_decimal_message | translate }}\n </div>\n <div *ngIf=\"errors?.revert_at_must_be_less_than_occupancy\">\n {{ L.revert_at_must_be_less_than_occupancy_message | translate }}\n </div>\n <div *ngIf=\"errors?.revert_at_must_be_more_than_occupancy\">\n {{ L.revert_at_must_be_more_than_occupancy_message | translate }}\n </div>\n <div *ngIf=\"errors?.car_plate_sequential_required\">\n {{ L.car_plate_sequential_required | translate }}\n </div>\n <div *ngIf=\"errors?.card_sequential_required\">\n {{ L.card_sequential_required | translate }}\n </div>\n </ng-container>\n </ng-container>\n</ng-container>\n" }]
118224
118530
  }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { controlName: [{
118225
118531
  type: Input
118226
118532
  }], label: [{
@@ -118402,12 +118708,22 @@ const extractErrorsChanges = (control) => {
118402
118708
  return setErrorsChanges$;
118403
118709
  };
118404
118710
 
118711
+ let nextLabelId = 0;
118712
+ /** How far up from the label to look for its field. */
118713
+ const FIELD_SEARCH_DEPTH = 4;
118714
+ const FIELD_SELECTOR = 'input:not([type=hidden]):not([type=checkbox]):not([type=radio]), textarea';
118405
118715
  class FieldLabelComponent {
118406
- constructor(controlContainer) {
118716
+ constructor(controlContainer, elementRef) {
118407
118717
  this.controlContainer = controlContainer;
118718
+ this.elementRef = elementRef;
118719
+ this.labelId = `tb-field-label-${nextLabelId++}`;
118408
118720
  this.isRequired$ = new BehaviorSubject(false);
118409
118721
  this.isInvalid$ = new BehaviorSubject(false);
118410
118722
  }
118723
+ ngAfterViewInit() {
118724
+ // ponytail: links once; a field rendered later (behind *ngIf) stays unlinked.
118725
+ setTimeout(() => this.linkField());
118726
+ }
118411
118727
  ngOnInit() {
118412
118728
  this.control = this.controlContainer.control?.get(this.controlName);
118413
118729
  if (!this.control) {
@@ -118426,6 +118742,29 @@ class FieldLabelComponent {
118426
118742
  });
118427
118743
  });
118428
118744
  }
118745
+ /** Names the first text field after this label (before the next label) with the label text. */
118746
+ linkField() {
118747
+ if (!this.control) {
118748
+ return;
118749
+ }
118750
+ const host = this.elementRef.nativeElement;
118751
+ const follows = (a, b) => !!(a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING);
118752
+ let scope = host.parentElement;
118753
+ for (let depth = 0; scope && depth < FIELD_SEARCH_DEPTH; depth++, scope = scope.parentElement) {
118754
+ const nextLabel = Array.from(scope.querySelectorAll('[tb-field-label]')).find(label => follows(host, label));
118755
+ const field = Array.from(scope.querySelectorAll(FIELD_SELECTOR))
118756
+ .find(candidate => follows(host, candidate) && (!nextLabel || follows(candidate, nextLabel)));
118757
+ if (field) {
118758
+ if (!field.hasAttribute('aria-labelledby') && !field.hasAttribute('aria-label') && !field.labels?.length) {
118759
+ field.setAttribute('aria-labelledby', this.labelId);
118760
+ }
118761
+ return;
118762
+ }
118763
+ if (nextLabel) {
118764
+ return;
118765
+ }
118766
+ }
118767
+ }
118429
118768
  get isControlRequired() {
118430
118769
  return this.control.hasValidator(Validators.required);
118431
118770
  }
@@ -118438,11 +118777,11 @@ class FieldLabelComponent {
118438
118777
  this.touchedChangesSubscription?.unsubscribe();
118439
118778
  });
118440
118779
  }
118441
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldLabelComponent, deps: [{ token: i1.ControlContainer }], target: i0.ɵɵFactoryTarget.Component }); }
118780
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldLabelComponent, deps: [{ token: i1.ControlContainer }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
118442
118781
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: FieldLabelComponent, isStandalone: true, selector: "[tb-field-label]", inputs: { controlName: "controlName", label: "label", ngLabelClass: "ngLabelClass" }, ngImport: i0, template: `
118443
118782
  <div class="tb-field-label" *ngIf="control">
118444
118783
  <span class="required-asterisk" *ngIf="isRequired$ | async" [class.required]="isInvalid$ | async">*</span>
118445
- <span [ngClass]="ngLabelClass">{{ label | translate }}</span>
118784
+ <span [id]="labelId" [ngClass]="ngLabelClass">{{ label | translate }}</span>
118446
118785
  <ng-content select="[tooltip]"></ng-content>
118447
118786
  </div>
118448
118787
  `, isInline: true, dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -118454,7 +118793,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
118454
118793
  template: `
118455
118794
  <div class="tb-field-label" *ngIf="control">
118456
118795
  <span class="required-asterisk" *ngIf="isRequired$ | async" [class.required]="isInvalid$ | async">*</span>
118457
- <span [ngClass]="ngLabelClass">{{ label | translate }}</span>
118796
+ <span [id]="labelId" [ngClass]="ngLabelClass">{{ label | translate }}</span>
118458
118797
  <ng-content select="[tooltip]"></ng-content>
118459
118798
  </div>
118460
118799
  `,
@@ -118465,7 +118804,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
118465
118804
  LocalizationModule
118466
118805
  ]
118467
118806
  }]
118468
- }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { controlName: [{
118807
+ }], ctorParameters: () => [{ type: i1.ControlContainer }, { type: i0.ElementRef }], propDecorators: { controlName: [{
118469
118808
  type: Input
118470
118809
  }], label: [{
118471
118810
  type: Input
@@ -121269,10 +121608,12 @@ var LprTransactionsOptionsText;
121269
121608
  LprTransactionsOptionsText["NotRecognized"] = "not_recognized";
121270
121609
  })(LprTransactionsOptionsText || (LprTransactionsOptionsText = {}));
121271
121610
 
121611
+ /** Shortest time a message stays up, so it can be read. */
121612
+ const MIN_MESSAGE_DURATION = ONE_SECOND_IN_MILLISECONDS * 5;
121272
121613
  var DurationMessageBar;
121273
121614
  (function (DurationMessageBar) {
121274
121615
  DurationMessageBar[DurationMessageBar["displayContinuously"] = 0] = "displayContinuously";
121275
- DurationMessageBar[DurationMessageBar["defaultDisplayOneMessage"] = 3000] = "defaultDisplayOneMessage";
121616
+ DurationMessageBar[DurationMessageBar["defaultDisplayOneMessage"] = 5000] = "defaultDisplayOneMessage";
121276
121617
  DurationMessageBar[DurationMessageBar["defaultDisplayMultiMessages"] = 5000] = "defaultDisplayMultiMessages";
121277
121618
  DurationMessageBar[DurationMessageBar["defaultDisplayLongMessage"] = 8000] = "defaultDisplayLongMessage";
121278
121619
  })(DurationMessageBar || (DurationMessageBar = {}));
@@ -123234,27 +123575,51 @@ class FloatMessageBarService {
123234
123575
  openFromMessageBarComponent(messageBarDetails, options) {
123235
123576
  const messagesInfo = buildMessageInfos(this.translateService, messageBarDetails, options);
123236
123577
  const duration = options?.duration === DurationMessageBar.displayContinuously ? undefined : (options?.duration || DurationMessageBar.defaultDisplayMultiMessages); // On duration "0", the snack bar will be display continuously
123237
- this._snackBar.openFromComponent(MessageBarComponent, {
123578
+ const ref = this._snackBar.openFromComponent(MessageBarComponent, {
123238
123579
  data: messagesInfo,
123239
123580
  horizontalPosition: 'center',
123240
123581
  verticalPosition: 'top',
123241
- duration,
123242
123582
  panelClass: 'message-bar'
123243
123583
  });
123584
+ this.dismissWhenIdle(ref, duration);
123244
123585
  }
123245
123586
  openMessageBarContainerComponent(message) {
123246
123587
  const duration = message.duration === DurationMessageBar.displayContinuously ? undefined : (message.duration || DurationMessageBar.defaultDisplayOneMessage); // On duration "0", the snack bar will be display continuously
123247
- this._snackBar.openFromComponent(MessageBarContainerComponent, {
123588
+ const ref = this._snackBar.openFromComponent(MessageBarContainerComponent, {
123248
123589
  data: message,
123249
123590
  horizontalPosition: 'center',
123250
123591
  verticalPosition: 'top',
123251
- duration,
123252
123592
  panelClass: 'message-bar'
123253
123593
  });
123594
+ this.dismissWhenIdle(ref, duration);
123254
123595
  }
123255
123596
  clearSnackbar() {
123256
123597
  this._snackBar.dismiss();
123257
123598
  }
123599
+ /** Closes after `duration` (at least 5 s), restarting the wait while hovered or focused. */
123600
+ dismissWhenIdle(ref, duration) {
123601
+ if (!duration) {
123602
+ return;
123603
+ }
123604
+ ref.afterOpened().subscribe(() => {
123605
+ const element = document.querySelector('mat-snack-bar-container.message-bar');
123606
+ let timer;
123607
+ const stop = () => clearTimeout(timer);
123608
+ const start = () => {
123609
+ stop();
123610
+ if (!element?.matches(':hover') && !element?.contains(document.activeElement)) {
123611
+ timer = setTimeout(() => ref.dismiss(), Math.max(duration, MIN_MESSAGE_DURATION));
123612
+ }
123613
+ };
123614
+ element?.addEventListener('mouseenter', stop);
123615
+ element?.addEventListener('focusin', stop);
123616
+ element?.addEventListener('mouseleave', start);
123617
+ // focusout fires before focus lands on the next element.
123618
+ element?.addEventListener('focusout', () => setTimeout(start));
123619
+ ref.afterDismissed().subscribe(stop);
123620
+ start();
123621
+ });
123622
+ }
123258
123623
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FloatMessageBarService, deps: [{ token: i1$5.MatSnackBar }, { token: i1$4.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
123259
123624
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FloatMessageBarService, providedIn: 'root' }); }
123260
123625
  }
@@ -124898,8 +125263,10 @@ class BaseNotificationService {
124898
125263
  show(config, notificationComponent) {
124899
125264
  this.options.toastComponent = notificationComponent;
124900
125265
  this.options.toastClass = config.class;
124901
- this.options.timeOut = config.duration;
124902
- this.options.extendedTimeOut = config.duration;
125266
+ // 0 or no duration keeps the notification open.
125267
+ const duration = config.duration ? Math.max(config.duration, MIN_MESSAGE_DURATION) : config.duration;
125268
+ this.options.timeOut = duration;
125269
+ this.options.extendedTimeOut = duration;
124903
125270
  this.options.autoDismiss = !!config.maxOpened;
124904
125271
  this.options.maxOpened = config.maxOpened;
124905
125272
  this.options.easeTime = 0;
@@ -124980,14 +125347,14 @@ class NotificationTypeLabelComponent extends BaseComponent {
124980
125347
  this.notificationTypeClass = notificationTypeClasses.join(" ");
124981
125348
  }
124982
125349
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NotificationTypeLabelComponent, deps: [{ token: i1$4.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
124983
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: NotificationTypeLabelComponent, isStandalone: true, selector: "tb-notification-type-label", inputs: { notificationSeverity: "notificationSeverity", notificationSeverityInvert: "notificationSeverityInvert", notificationSeverityText: "notificationSeverityText" }, usesInheritance: true, ngImport: i0, template: "<div [ngClass]=\"notificationTypeClass\">\n <span>{{ notificationSeverityText }}</span>\n</div>", styles: [".notification-type-label{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;align-items:center;width:fit-content;padding:0 5px;font-size:13px;line-height:20px;border-radius:4px}.notification-type-label.critical{background-color:#ff0e4d;color:#fff}.notification-type-label.critical.invert{background-color:#fff;color:#ff0e4d}.notification-type-label.high{background-color:#e3554c;color:#fff}.notification-type-label.medium{background-color:#ffd362;color:#2c3e50}.notification-type-label.low{background-color:#c1e0fa;color:#2c3e50}.notification-type-label.information{background-color:#0985eb;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: LocalizationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
125350
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: NotificationTypeLabelComponent, isStandalone: true, selector: "tb-notification-type-label", inputs: { notificationSeverity: "notificationSeverity", notificationSeverityInvert: "notificationSeverityInvert", notificationSeverityText: "notificationSeverityText" }, usesInheritance: true, ngImport: i0, template: "<div [ngClass]=\"notificationTypeClass\">\n <span>{{ notificationSeverityText }}</span>\n</div>", styles: [".notification-type-label{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;align-items:center;width:fit-content;padding:0 5px;font-size:13px;line-height:20px;border-radius:4px}.notification-type-label.critical{background-color:#ec003e;color:#fff}.notification-type-label.critical.invert{background-color:#fff;color:#ec003e}.notification-type-label.high{background-color:#dd3329;color:#fff}.notification-type-label.medium{background-color:#ffd362;color:#2c3e50}.notification-type-label.low{background-color:#c1e0fa;color:#2c3e50}.notification-type-label.information{background-color:#0670c7;color:#fff}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "ngmodule", type: LocalizationModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
124984
125351
  }
124985
125352
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NotificationTypeLabelComponent, decorators: [{
124986
125353
  type: Component,
124987
125354
  args: [{ selector: 'tb-notification-type-label', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
124988
125355
  CommonModule,
124989
125356
  LocalizationModule,
124990
- ], template: "<div [ngClass]=\"notificationTypeClass\">\n <span>{{ notificationSeverityText }}</span>\n</div>", styles: [".notification-type-label{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;align-items:center;width:fit-content;padding:0 5px;font-size:13px;line-height:20px;border-radius:4px}.notification-type-label.critical{background-color:#ff0e4d;color:#fff}.notification-type-label.critical.invert{background-color:#fff;color:#ff0e4d}.notification-type-label.high{background-color:#e3554c;color:#fff}.notification-type-label.medium{background-color:#ffd362;color:#2c3e50}.notification-type-label.low{background-color:#c1e0fa;color:#2c3e50}.notification-type-label.information{background-color:#0985eb;color:#fff}\n"] }]
125357
+ ], template: "<div [ngClass]=\"notificationTypeClass\">\n <span>{{ notificationSeverityText }}</span>\n</div>", styles: [".notification-type-label{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;align-items:center;width:fit-content;padding:0 5px;font-size:13px;line-height:20px;border-radius:4px}.notification-type-label.critical{background-color:#ec003e;color:#fff}.notification-type-label.critical.invert{background-color:#fff;color:#ec003e}.notification-type-label.high{background-color:#dd3329;color:#fff}.notification-type-label.medium{background-color:#ffd362;color:#2c3e50}.notification-type-label.low{background-color:#c1e0fa;color:#2c3e50}.notification-type-label.information{background-color:#0670c7;color:#fff}\n"] }]
124991
125358
  }], ctorParameters: () => [{ type: i1$4.TranslateService }], propDecorators: { notificationSeverity: [{
124992
125359
  type: Input
124993
125360
  }], notificationSeverityInvert: [{
@@ -125009,11 +125376,11 @@ class AlertNotificationComponent extends Toast {
125009
125376
  $event.stopPropagation();
125010
125377
  }
125011
125378
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertNotificationComponent, deps: [{ token: i1$8.ToastrService }, { token: i1$8.ToastPackage }], target: i0.ɵɵFactoryTarget.Component }); }
125012
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AlertNotificationComponent, isStandalone: true, selector: "tb-alert-notification", inputs: { data: "data", activeToast: "activeToast" }, usesInheritance: true, ngImport: i0, template: "<div class=\"tb-alert-notification-container tb-flex tb-full-height\">\n <div class=\"tb-status alert-notification-prefix\" [ngClass]=\"'tb-status-' + NotificationSeverity[data.severity] | lowercase\">\n </div>\n <div class=\"tb-messages alert-notification-content\">\n <div *ngFor=\"let message of data?.messages\" [ngClass]=\"message.class\">\n <span>{{ message.value | translate }}</span>\n </div>\n </div>\n <div class=\"alert-notification-suffix\">\n <div class=\"alert-notification-dismiss\">\n <tb-icon *ngIf=\"options.closeButton\" [settings]=\"IconsHelper.cancel\" class=\"tb-button tb-icon-30\" (click)=\"closeNotification($event)\">\n </tb-icon>\n </div>\n <tb-notification-type-label class=\"tb-mr-5\" [notificationSeverity]=\"data.severity\">\n </tb-notification-type-label>\n </div>\n</div>\n<div *ngIf=\"options.progressBar\">\n <div class=\"notification-progress\" [style.width]=\"width + '%'\"></div>\n</div>\n<div class=\"tb-alert-notification-container-shadow\" [matTooltip]=\"data.titleTooltip\"\n [matTooltipDisabled]=\"!data.titleTooltip\" [matTooltipPosition]=\"'above'\"></div>", styles: [":host{position:relative;min-height:75px;width:395px;padding:0;background-color:#fff;border-left:6px solid #dee2e6;border-radius:4px;margin-bottom:10px;overflow:hidden;pointer-events:initial;box-shadow:0 3px 15px #0000004d;cursor:pointer;transition:all .2s ease;display:flex}:host .tb-alert-notification-container{flex:1}:host .tb-alert-notification-container div{z-index:1;pointer-events:none}:host .tb-alert-notification-container .alert-notification-suffix{display:flex;flex-direction:column;align-items:flex-end;margin-right:5px}:host .tb-alert-notification-container .alert-notification-dismiss{pointer-events:all;display:flex;height:30px;width:30px;margin:5px;color:#2c3e50;border-radius:4px}:host .tb-alert-notification-container .alert-notification-dismiss:hover{background-color:#ecedf0}:host .tb-alert-notification-container .alert-notification-dismiss .tb-icon{border-radius:4px;cursor:pointer}:host .tb-alert-notification-container-shadow{position:absolute;width:100%;height:100%}:host .tb-alert-notification-container-shadow:hover{background:#ecedf0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.LowerCasePipe, name: "lowercase" }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: NotificationTypeLabelComponent, selector: "tb-notification-type-label", inputs: ["notificationSeverity", "notificationSeverityInvert", "notificationSeverityText"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }], animations: [notificationAnimation()] }); }
125379
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: AlertNotificationComponent, isStandalone: true, selector: "tb-alert-notification", inputs: { data: "data", activeToast: "activeToast" }, host: { listeners: { "focusin": "stickAround()", "focusout": "delayedHideToast()" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"tb-alert-notification-container tb-flex tb-full-height\">\n <div class=\"tb-status alert-notification-prefix\" [ngClass]=\"'tb-status-' + NotificationSeverity[data.severity] | lowercase\">\n </div>\n <div class=\"tb-messages alert-notification-content\">\n <div *ngFor=\"let message of data?.messages\" [ngClass]=\"message.class\">\n <span>{{ message.value | translate }}</span>\n </div>\n </div>\n <div class=\"alert-notification-suffix\">\n <div class=\"alert-notification-dismiss\">\n <tb-icon *ngIf=\"options.closeButton\" [settings]=\"IconsHelper.cancel\" class=\"tb-button tb-icon-30\" (click)=\"closeNotification($event)\">\n </tb-icon>\n </div>\n <tb-notification-type-label class=\"tb-mr-5\" [notificationSeverity]=\"data.severity\">\n </tb-notification-type-label>\n </div>\n</div>\n<div *ngIf=\"options.progressBar\">\n <div class=\"notification-progress\" [style.width]=\"width + '%'\"></div>\n</div>\n<div class=\"tb-alert-notification-container-shadow\" [matTooltip]=\"data.titleTooltip\"\n [matTooltipDisabled]=\"!data.titleTooltip\" [matTooltipPosition]=\"'above'\"></div>", styles: [":host{position:relative;min-height:75px;width:395px;padding:0;background-color:#fff;border-left:6px solid #dee2e6;border-radius:4px;margin-bottom:10px;overflow:hidden;pointer-events:initial;box-shadow:0 3px 15px #0000004d;cursor:pointer;transition:all .2s ease;display:flex}:host .tb-alert-notification-container{flex:1}:host .tb-alert-notification-container div{z-index:1;pointer-events:none}:host .tb-alert-notification-container .alert-notification-suffix{display:flex;flex-direction:column;align-items:flex-end;margin-right:5px}:host .tb-alert-notification-container .alert-notification-dismiss{pointer-events:all;display:flex;height:30px;width:30px;margin:5px;color:#2c3e50;border-radius:4px}:host .tb-alert-notification-container .alert-notification-dismiss:hover{background-color:#ecedf0}:host .tb-alert-notification-container .alert-notification-dismiss .tb-icon{border-radius:4px;cursor:pointer}:host .tb-alert-notification-container-shadow{position:absolute;width:100%;height:100%}:host .tb-alert-notification-container-shadow:hover{background:#ecedf0}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.LowerCasePipe, name: "lowercase" }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: NotificationTypeLabelComponent, selector: "tb-notification-type-label", inputs: ["notificationSeverity", "notificationSeverityInvert", "notificationSeverityText"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }], animations: [notificationAnimation()] }); }
125013
125380
  }
125014
125381
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertNotificationComponent, decorators: [{
125015
125382
  type: Component,
125016
- args: [{ selector: 'tb-alert-notification', animations: [notificationAnimation()], standalone: true, imports: [
125383
+ args: [{ selector: 'tb-alert-notification', animations: [notificationAnimation()], host: { '(focusin)': 'stickAround()', '(focusout)': 'delayedHideToast()' }, standalone: true, imports: [
125017
125384
  CommonModule,
125018
125385
  LocalizationModule,
125019
125386
  MatTooltipModule,
@@ -126969,11 +127336,11 @@ class CommandNotificationComponent extends Toast {
126969
127336
  this.CommandNotificationType = CommandNotificationType;
126970
127337
  }
126971
127338
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CommandNotificationComponent, deps: [{ token: i1$8.ToastrService }, { token: i1$8.ToastPackage }], target: i0.ɵɵFactoryTarget.Component }); }
126972
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CommandNotificationComponent, isStandalone: true, selector: "tb-command-notification", inputs: { data: "data" }, usesInheritance: true, ngImport: i0, template: "<div class=\"tb-flex tb-full-height\">\n <div [ngClass]=\"'tb-status-' + CommandNotificationType[data.type] | lowercase\" class=\"tb-status\"></div>\n <div class=\"tb-messages\">\n <div *ngFor=\"let message of data?.messages\" [ngClass]=\"message.class\">\n <span>{{ message.value }}</span>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;min-height:75px;padding:0;background-color:#fff;border-left:6px solid #dee2e6;border-radius:4px;position:relative;-ms-flex-align:center;align-items:center;margin:10px;max-width:33vw;min-width:344px;transform-origin:center;box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i2.LowerCasePipe, name: "lowercase" }], animations: [notificationAnimation()] }); }
127339
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CommandNotificationComponent, isStandalone: true, selector: "tb-command-notification", inputs: { data: "data" }, host: { listeners: { "focusin": "stickAround()", "focusout": "delayedHideToast()" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"tb-flex tb-full-height\">\n <div [ngClass]=\"'tb-status-' + CommandNotificationType[data.type] | lowercase\" class=\"tb-status\"></div>\n <div class=\"tb-messages\">\n <div *ngFor=\"let message of data?.messages\" [ngClass]=\"message.class\">\n <span>{{ message.value }}</span>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;min-height:75px;padding:0;background-color:#fff;border-left:6px solid #dee2e6;border-radius:4px;position:relative;-ms-flex-align:center;align-items:center;margin:10px;max-width:33vw;min-width:344px;transform-origin:center;box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i2.LowerCasePipe, name: "lowercase" }], animations: [notificationAnimation()] }); }
126973
127340
  }
126974
127341
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CommandNotificationComponent, decorators: [{
126975
127342
  type: Component,
126976
- args: [{ selector: 'tb-command-notification', animations: [notificationAnimation()], standalone: true, imports: [
127343
+ args: [{ selector: 'tb-command-notification', animations: [notificationAnimation()], host: { '(focusin)': 'stickAround()', '(focusout)': 'delayedHideToast()' }, standalone: true, imports: [
126977
127344
  CommonModule,
126978
127345
  ], template: "<div class=\"tb-flex tb-full-height\">\n <div [ngClass]=\"'tb-status-' + CommandNotificationType[data.type] | lowercase\" class=\"tb-status\"></div>\n <div class=\"tb-messages\">\n <div *ngFor=\"let message of data?.messages\" [ngClass]=\"message.class\">\n <span>{{ message.value }}</span>\n </div>\n </div>\n</div>\n", styles: [":host{display:flex;min-height:75px;padding:0;background-color:#fff;border-left:6px solid #dee2e6;border-radius:4px;position:relative;-ms-flex-align:center;align-items:center;margin:10px;max-width:33vw;min-width:344px;transform-origin:center;box-shadow:0 3px 5px -1px #0003,0 6px 10px #00000024,0 1px 18px #0000001f}\n"] }]
126979
127346
  }], ctorParameters: () => [{ type: i1$8.ToastrService }, { type: i1$8.ToastPackage }], propDecorators: { data: [{
@@ -129079,11 +129446,11 @@ class RestartLinkComponent {
129079
129446
  window.location.reload();
129080
129447
  }
129081
129448
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RestartLinkComponent, deps: [{ token: i1$4.TranslateService }, { token: i1$2.Store }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
129082
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RestartLinkComponent, selector: "tb-restart-link", inputs: { label: "label", messageText: "messageText" }, ngImport: i0, template: "<div class=\"restart-link-container\">\n <div class=\"text-content\">\n <span>\n {{ messageText }}\n </span>\n <span class=\"tb-text-link\" (click)=\"onClick()\">\n {{ label }}\n </span>\n </div>\n <tb-icon [settings]=\"IconSettings.refresh\" [setCursorPointer]=\"false\" class=\"tb-icon-30 tb-mt-2 icon-fixed\"></tb-icon>\n</div>\n", styles: [":host{display:inline-block;padding-left:4px;min-width:270px}:host[dir=rtl] .restart-link-container{flex-direction:row-reverse}:host[dir=rtl] .text-content{direction:rtl;text-align:right}:host[dir=ltr] .text-content{direction:ltr;text-align:left}.restart-link-container,.restart-link-container .text-content{display:flex;align-items:center;gap:.5em}.restart-link-container .tb-text-link{color:#0985eb;cursor:pointer;display:flex;align-items:center;text-decoration:none}.restart-link-container .tb-text-link:hover{opacity:.9}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }] }); }
129449
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: RestartLinkComponent, selector: "tb-restart-link", inputs: { label: "label", messageText: "messageText" }, ngImport: i0, template: "<div class=\"restart-link-container\">\n <div class=\"text-content\">\n <span>\n {{ messageText }}\n </span>\n <span class=\"tb-text-link\" (click)=\"onClick()\">\n {{ label }}\n </span>\n </div>\n <tb-icon [settings]=\"IconSettings.refresh\" [setCursorPointer]=\"false\" class=\"tb-icon-30 tb-mt-2 icon-fixed\"></tb-icon>\n</div>\n", styles: [":host{display:inline-block;padding-left:4px;min-width:270px}:host[dir=rtl] .restart-link-container{flex-direction:row-reverse}:host[dir=rtl] .text-content{direction:rtl;text-align:right}:host[dir=ltr] .text-content{direction:ltr;text-align:left}.restart-link-container,.restart-link-container .text-content{display:flex;align-items:center;gap:.5em}.restart-link-container .tb-text-link{color:#0670c7;cursor:pointer;display:flex;align-items:center;text-decoration:none}.restart-link-container .tb-text-link:hover{opacity:.9}\n"], dependencies: [{ kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }] }); }
129083
129450
  }
129084
129451
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RestartLinkComponent, decorators: [{
129085
129452
  type: Component,
129086
- args: [{ selector: 'tb-restart-link', template: "<div class=\"restart-link-container\">\n <div class=\"text-content\">\n <span>\n {{ messageText }}\n </span>\n <span class=\"tb-text-link\" (click)=\"onClick()\">\n {{ label }}\n </span>\n </div>\n <tb-icon [settings]=\"IconSettings.refresh\" [setCursorPointer]=\"false\" class=\"tb-icon-30 tb-mt-2 icon-fixed\"></tb-icon>\n</div>\n", styles: [":host{display:inline-block;padding-left:4px;min-width:270px}:host[dir=rtl] .restart-link-container{flex-direction:row-reverse}:host[dir=rtl] .text-content{direction:rtl;text-align:right}:host[dir=ltr] .text-content{direction:ltr;text-align:left}.restart-link-container,.restart-link-container .text-content{display:flex;align-items:center;gap:.5em}.restart-link-container .tb-text-link{color:#0985eb;cursor:pointer;display:flex;align-items:center;text-decoration:none}.restart-link-container .tb-text-link:hover{opacity:.9}\n"] }]
129453
+ args: [{ selector: 'tb-restart-link', template: "<div class=\"restart-link-container\">\n <div class=\"text-content\">\n <span>\n {{ messageText }}\n </span>\n <span class=\"tb-text-link\" (click)=\"onClick()\">\n {{ label }}\n </span>\n </div>\n <tb-icon [settings]=\"IconSettings.refresh\" [setCursorPointer]=\"false\" class=\"tb-icon-30 tb-mt-2 icon-fixed\"></tb-icon>\n</div>\n", styles: [":host{display:inline-block;padding-left:4px;min-width:270px}:host[dir=rtl] .restart-link-container{flex-direction:row-reverse}:host[dir=rtl] .text-content{direction:rtl;text-align:right}:host[dir=ltr] .text-content{direction:ltr;text-align:left}.restart-link-container,.restart-link-container .text-content{display:flex;align-items:center;gap:.5em}.restart-link-container .tb-text-link{color:#0670c7;cursor:pointer;display:flex;align-items:center;text-decoration:none}.restart-link-container .tb-text-link:hover{opacity:.9}\n"] }]
129087
129454
  }], ctorParameters: () => [{ type: i1$4.TranslateService }, { type: i1$2.Store }, { type: i0.ElementRef }], propDecorators: { label: [{
129088
129455
  type: Input
129089
129456
  }], messageText: [{
@@ -129325,47 +129692,6 @@ function isBoolean(value) {
129325
129692
  }
129326
129693
  }
129327
129694
 
129328
- const DATE_TIME_ERROR_INVALID_DATE = 'invalidDate';
129329
- const DATE_TIME_ERROR_INVALID_DATE_RANGE = 'invalidDateRange';
129330
- const DATE_TIME_ERROR_REQUIRED = 'required';
129331
- const DATE_TIME_ERRORS = [
129332
- DATE_TIME_ERROR_INVALID_DATE,
129333
- DATE_TIME_ERROR_INVALID_DATE_RANGE,
129334
- DATE_TIME_ERROR_REQUIRED,
129335
- ];
129336
- function setErrorMessage(formName, controlName, errors) {
129337
- if (errors) {
129338
- const control = formName.get(controlName);
129339
- if (control) {
129340
- control.setErrors(errors);
129341
- control.markAsTouched();
129342
- }
129343
- }
129344
- }
129345
- function setDateTimeErrorMessage(formName, controlName, errors) {
129346
- const control = formName.get(controlName);
129347
- if (control) {
129348
- const currentErrors = control.errors ?? {};
129349
- if (errors) {
129350
- // Strip any stale DateTime keys before merging so incoming errors are authoritative
129351
- const nonDateTimeErrors = { ...currentErrors };
129352
- DATE_TIME_ERRORS.forEach((key) => delete nonDateTimeErrors[key]);
129353
- control.setErrors({ ...nonDateTimeErrors, ...errors });
129354
- control.markAsTouched();
129355
- }
129356
- else {
129357
- // Create a copy to prevent direct mutation of Angular's internal errors object
129358
- const cleanedErrors = { ...currentErrors };
129359
- // No DateTime error → remove only DateTime-related errors
129360
- DATE_TIME_ERRORS.forEach((key) => {
129361
- delete cleanedErrors[key];
129362
- });
129363
- // If no errors left, clear errors completely
129364
- control.setErrors(Object.keys(cleanedErrors).length > 0 ? cleanedErrors : null);
129365
- }
129366
- }
129367
- }
129368
-
129369
129695
  function hasRequiredField(abstractControl) {
129370
129696
  return abstractControl?.hasValidator(Validators.required);
129371
129697
  }
@@ -131664,6 +131990,58 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
131664
131990
  type: Injectable
131665
131991
  }], ctorParameters: () => [{ type: i1$4.TranslateService }] });
131666
131992
 
131993
+ const FOCUSABLE = 'input:not([type=hidden]), select, textarea, button, [tabindex]:not([tabindex="-1"])';
131994
+ const isShown = (el) => el.getClientRects().length > 0;
131995
+ /** Focuses the first visible invalid field in `container`, else its first error message; false when there is neither. */
131996
+ function focusFirstProblem(container) {
131997
+ if (focusFirstInvalidField(container)) {
131998
+ return true;
131999
+ }
132000
+ // A rule over several fields (one of Card, Car Plate or Mobile) marks no single field: read its message.
132001
+ const message = Array.from(container.querySelectorAll('[role="alert"]')).find((el) => isShown(el) && !el.closest('mat-dialog-actions'));
132002
+ if (!message) {
132003
+ return false;
132004
+ }
132005
+ message.tabIndex = -1;
132006
+ message.focus();
132007
+ return true;
132008
+ }
132009
+ /** As focusFirstProblem; when the open tab has none but the form is invalid, opens the first other tab that has one. */
132010
+ async function focusFirstProblemInTabs(container, settle = () => new Promise((resolve) => setTimeout(resolve, 300))) {
132011
+ if (focusFirstProblem(container)) {
132012
+ return true;
132013
+ }
132014
+ // Valid form = a save in progress: never flip through its tabs.
132015
+ if (!container.querySelector('.ng-invalid, [aria-invalid="true"]')) {
132016
+ return false;
132017
+ }
132018
+ const tabs = Array.from(container.querySelectorAll('[role="tab"]'));
132019
+ const current = tabs.find((tab) => tab.getAttribute('aria-selected') === 'true');
132020
+ for (const tab of tabs.filter((t) => t !== current)) {
132021
+ tab.click();
132022
+ await settle();
132023
+ if (focusFirstProblem(container)) {
132024
+ return true;
132025
+ }
132026
+ }
132027
+ current?.click();
132028
+ return false;
132029
+ }
132030
+ /** Focuses the first visible invalid field in `container`; false when there is none. */
132031
+ function focusFirstInvalidField(container) {
132032
+ for (const el of Array.from(container.querySelectorAll('.ng-invalid, [aria-invalid="true"]'))) {
132033
+ // A form or group is invalid because of a field inside it: that field comes next in page order.
132034
+ if (el.matches('form, [formGroupName], [formgroupname], [formGroup], [formgroup], [formArrayName], [formarrayname]')) {
132035
+ continue;
132036
+ }
132037
+ const target = el.matches(FOCUSABLE) ? el : el.querySelector(FOCUSABLE);
132038
+ if (target && isShown(target) && !target.closest('[inert]')) {
132039
+ target.focus();
132040
+ return true;
132041
+ }
132042
+ }
132043
+ return false;
132044
+ }
131667
132045
  const Z_INDEX_FRONT = '1000';
131668
132046
  const Z_INDEX_BACK = '999';
131669
132047
  class ModalService {
@@ -131688,6 +132066,8 @@ class ModalService {
131688
132066
  const dialogRef = this.dialog.open(modalComponent, this.buildDialogConfig(modalConfig));
131689
132067
  this.createBackdrop(dialogRef.id);
131690
132068
  this.attachButtonWrapper(dialogRef, modalConfig);
132069
+ this.closeOnEscape(dialogRef);
132070
+ this.keepFocusInDialog(dialogRef);
131691
132071
  // take(1), not first(): router teardown can complete these subjects without ever emitting,
131692
132072
  // and first() turns that benign completion into an unhandled EmptyError (SPRK3-14821).
131693
132073
  //
@@ -131843,6 +132223,45 @@ class ModalService {
131843
132223
  }
131844
132224
  });
131845
132225
  }
132226
+ // Esc does what the dialog's X does; a dialog without an X stays open. Listened on the dialog itself:
132227
+ // the overlay keyboard dispatcher gives keys only to the top overlay, often a tooltip left on the opener.
132228
+ closeOnEscape(dialogRef) {
132229
+ dialogRef.afterOpened().pipe(take$1(1)).subscribe(() => {
132230
+ const container = document.getElementById(dialogRef.id);
132231
+ container?.addEventListener('keydown', (event) => {
132232
+ if (event.key === 'Escape' && !event.defaultPrevented) {
132233
+ container.querySelector('.modal-close-icon')?.click();
132234
+ }
132235
+ });
132236
+ });
132237
+ }
132238
+ // A wizard swaps Next for Save (or drops Back on the first step) under the keyboard focus; the browser
132239
+ // then drops focus to <body>, outside the dialog, where Tab and Esc no longer reach it.
132240
+ keepFocusInDialog(dialogRef) {
132241
+ dialogRef.afterOpened().pipe(take$1(1)).subscribe(() => {
132242
+ const container = document.getElementById(dialogRef.id);
132243
+ if (!container) {
132244
+ return;
132245
+ }
132246
+ let focused = null;
132247
+ container.addEventListener('focusin', (event) => (focused = event.target));
132248
+ const observer = new MutationObserver(() => {
132249
+ if (focused && !focused.isConnected && (!document.activeElement || document.activeElement === document.body)) {
132250
+ focused = null;
132251
+ (container.querySelector('mat-dialog-actions .tb-primary-button:not([disabled])') ?? container).focus();
132252
+ }
132253
+ });
132254
+ // Create / Next / Save pressed but the dialog stayed on an invalid form: take the keyboard to the problem.
132255
+ container.addEventListener('click', (event) => {
132256
+ const button = event.target.closest('mat-dialog-actions .tb-primary-button');
132257
+ if (button) {
132258
+ setTimeout(() => document.activeElement === button && focusFirstProblemInTabs(container));
132259
+ }
132260
+ });
132261
+ observer.observe(container, { childList: true, subtree: true });
132262
+ dialogRef.afterClosed().pipe(take$1(1)).subscribe(() => observer.disconnect());
132263
+ });
132264
+ }
131846
132265
  detachButtonWrapper(dialogId) {
131847
132266
  const ref = this._buttonWrapperRefs[dialogId];
131848
132267
  if (ref) {
@@ -135027,7 +135446,7 @@ class CloudConfirmDialogComponent extends BaseComponent {
135027
135446
  this.dialogRef.close(ok);
135028
135447
  }
135029
135448
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CloudConfirmDialogComponent, deps: [{ token: i1$4.TranslateService }, { token: MAT_DIALOG_DATA }, { token: i2$1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
135030
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CloudConfirmDialogComponent, isStandalone: true, selector: "tb-cloud-confirm-dialog", usesInheritance: true, ngImport: i0, template: "<div class=\"tb-modal\">\n <div class=\"modal-title-container\">\n <div class=\"ellipsis modal-title-content\" mat-dialog-title>\n <div class=\"modal-title-primary ellipsis\">{{data.confirmTitle}}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data.confirmSubTitle\">{{data.confirmSubTitle}}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.ticket\">\n <span class=\"entity-identifier-type\">{{ data.ticket.type }}</span>\n <span>#{{ data.ticket.number }}</span>\n </div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.device\">{{ data.device.name }} | #{{ data.device.commId\n }}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.lpr\">{{ L.car_plate | translate }}: {{ data.lpr.lprString\n }}</div>\n <div class=\"modal-title-sub-secondary ellipsis\" *ngIf=\"data?.parkName\">\n <span>{{ data.parkName }}</span>\n <span *ngIf=\"data?.zoneName\"> | {{ data.zoneName }}</span>\n </div>\n </div>\n <div class=\"modal-button-wrapper\">\n <tb-notification-type-label *ngIf=\"data?.notificationSeverity\" class=\"tb-mr-5\"\n [notificationSeverity]=\"data?.notificationSeverity\"\n [notificationSeverityInvert]=\"data?.notificationSeverityInvert\">\n </tb-notification-type-label>\n </div>\n </div>\n <mat-dialog-content>\n <tb-message-bar *ngIf=\"data.showMessageBar\" [dialog]=\"true\"></tb-message-bar>\n <div class=\"modal-text\" *ngFor=\"let confirmMessage of data.confirmMessages\">\n <span [innerHTML]=\"confirmMessage | curlyToBold\"></span>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"buttons-wrapper\">\n <div class=\"buttons-wrapper-left\">\n <!-- No Left Action -->\n </div>\n <div class=\"buttons-wrapper-right\">\n <button *ngIf=\"!data.hideCancel\" class='tb-button tb-tertiary-button basic-button' tabindex=\"-1\"\n (click)=\"close(false)\" [attr.data-qa]=\"DataQaAttribute.cloud_confirm_diaglog+'_'+DataQaAttribute.cancel_btn\"\n matRipple>\n <span class=\"button-text\">{{ data.cancelText | translate }}</span>\n </button>\n <button *ngIf=\"!data.hideOk\" class='tb-button tb-primary-button basic-button' (click)=\"close(true)\"\n [attr.data-qa]=\"DataQaAttribute.cloud_confirm_diaglog+'_'+DataQaAttribute.confirm_btn\" matRipple>\n <span class=\"button-text\">{{ data.okText | translate }}</span>\n </button>\n </div>\n </div>\n\n </mat-dialog-actions>\n</div>\n", styles: [".modal-text span{white-space:pre-line}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }, { kind: "component", type: NotificationTypeLabelComponent, selector: "tb-notification-type-label", inputs: ["notificationSeverity", "notificationSeverityInvert", "notificationSeverityText"] }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i2$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i4$1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MessageBarModule }, { kind: "component", type: MessageBarComponent, selector: "tb-message-bar", inputs: ["id", "stack", "fade", "dialog", "class"] }, { kind: "pipe", type: CurlyToBoldPipe, name: "curlyToBold" }, { kind: "directive", type: SanitizedInnerHtmlDirective, selector: "[innerHTML]", inputs: ["innerHTML"] }] }); }
135449
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: CloudConfirmDialogComponent, isStandalone: true, selector: "tb-cloud-confirm-dialog", usesInheritance: true, ngImport: i0, template: "<div class=\"tb-modal\">\n <div class=\"modal-title-container\">\n <div class=\"ellipsis modal-title-content\" mat-dialog-title>\n <div class=\"modal-title-primary ellipsis\">{{data.confirmTitle}}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data.confirmSubTitle\">{{data.confirmSubTitle}}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.ticket\">\n <span class=\"entity-identifier-type\">{{ data.ticket.type }}</span>\n <span>#{{ data.ticket.number }}</span>\n </div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.device\">{{ data.device.name }} | #{{ data.device.commId\n }}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.lpr\">{{ L.car_plate | translate }}: {{ data.lpr.lprString\n }}</div>\n <div class=\"modal-title-sub-secondary ellipsis\" *ngIf=\"data?.parkName\">\n <span>{{ data.parkName }}</span>\n <span *ngIf=\"data?.zoneName\"> | {{ data.zoneName }}</span>\n </div>\n </div>\n <div class=\"modal-button-wrapper\">\n <tb-notification-type-label *ngIf=\"data?.notificationSeverity\" class=\"tb-mr-5\"\n [notificationSeverity]=\"data?.notificationSeverity\"\n [notificationSeverityInvert]=\"data?.notificationSeverityInvert\">\n </tb-notification-type-label>\n </div>\n </div>\n <mat-dialog-content>\n <tb-message-bar *ngIf=\"data.showMessageBar\" [dialog]=\"true\"></tb-message-bar>\n <div class=\"modal-text\" *ngFor=\"let confirmMessage of data.confirmMessages\">\n <span [innerHTML]=\"confirmMessage | curlyToBold\"></span>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"buttons-wrapper\">\n <div class=\"buttons-wrapper-left\">\n <!-- No Left Action -->\n </div>\n <div class=\"buttons-wrapper-right\">\n <!-- Confirmations change data: the safe choice takes focus, so Enter cannot confirm by accident. -->\n <button *ngIf=\"!data.hideCancel\" class='tb-button tb-tertiary-button basic-button'\n (click)=\"close(false)\" cdkFocusInitial [attr.data-qa]=\"DataQaAttribute.cloud_confirm_diaglog+'_'+DataQaAttribute.cancel_btn\"\n matRipple>\n <span class=\"button-text\">{{ data.cancelText | translate }}</span>\n </button>\n <button *ngIf=\"!data.hideOk\" class='tb-button tb-primary-button basic-button' (click)=\"close(true)\" [attr.cdkFocusInitial]=\"data.hideCancel ? '' : null\"\n [attr.data-qa]=\"DataQaAttribute.cloud_confirm_diaglog+'_'+DataQaAttribute.confirm_btn\" matRipple>\n <span class=\"button-text\">{{ data.okText | translate }}</span>\n </button>\n </div>\n </div>\n\n </mat-dialog-actions>\n</div>\n", styles: [".modal-text span{white-space:pre-line}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }, { kind: "component", type: NotificationTypeLabelComponent, selector: "tb-notification-type-label", inputs: ["notificationSeverity", "notificationSeverityInvert", "notificationSeverityText"] }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i2$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i2$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i4$1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }, { kind: "ngmodule", type: MessageBarModule }, { kind: "component", type: MessageBarComponent, selector: "tb-message-bar", inputs: ["id", "stack", "fade", "dialog", "class"] }, { kind: "pipe", type: CurlyToBoldPipe, name: "curlyToBold" }, { kind: "directive", type: SanitizedInnerHtmlDirective, selector: "[innerHTML]", inputs: ["innerHTML"] }] }); }
135031
135450
  }
135032
135451
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CloudConfirmDialogComponent, decorators: [{
135033
135452
  type: Component,
@@ -135042,7 +135461,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
135042
135461
  MessageBarModule,
135043
135462
  CurlyToBoldPipe,
135044
135463
  SanitizedInnerHtmlDirective,
135045
- ], template: "<div class=\"tb-modal\">\n <div class=\"modal-title-container\">\n <div class=\"ellipsis modal-title-content\" mat-dialog-title>\n <div class=\"modal-title-primary ellipsis\">{{data.confirmTitle}}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data.confirmSubTitle\">{{data.confirmSubTitle}}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.ticket\">\n <span class=\"entity-identifier-type\">{{ data.ticket.type }}</span>\n <span>#{{ data.ticket.number }}</span>\n </div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.device\">{{ data.device.name }} | #{{ data.device.commId\n }}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.lpr\">{{ L.car_plate | translate }}: {{ data.lpr.lprString\n }}</div>\n <div class=\"modal-title-sub-secondary ellipsis\" *ngIf=\"data?.parkName\">\n <span>{{ data.parkName }}</span>\n <span *ngIf=\"data?.zoneName\"> | {{ data.zoneName }}</span>\n </div>\n </div>\n <div class=\"modal-button-wrapper\">\n <tb-notification-type-label *ngIf=\"data?.notificationSeverity\" class=\"tb-mr-5\"\n [notificationSeverity]=\"data?.notificationSeverity\"\n [notificationSeverityInvert]=\"data?.notificationSeverityInvert\">\n </tb-notification-type-label>\n </div>\n </div>\n <mat-dialog-content>\n <tb-message-bar *ngIf=\"data.showMessageBar\" [dialog]=\"true\"></tb-message-bar>\n <div class=\"modal-text\" *ngFor=\"let confirmMessage of data.confirmMessages\">\n <span [innerHTML]=\"confirmMessage | curlyToBold\"></span>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"buttons-wrapper\">\n <div class=\"buttons-wrapper-left\">\n <!-- No Left Action -->\n </div>\n <div class=\"buttons-wrapper-right\">\n <button *ngIf=\"!data.hideCancel\" class='tb-button tb-tertiary-button basic-button' tabindex=\"-1\"\n (click)=\"close(false)\" [attr.data-qa]=\"DataQaAttribute.cloud_confirm_diaglog+'_'+DataQaAttribute.cancel_btn\"\n matRipple>\n <span class=\"button-text\">{{ data.cancelText | translate }}</span>\n </button>\n <button *ngIf=\"!data.hideOk\" class='tb-button tb-primary-button basic-button' (click)=\"close(true)\"\n [attr.data-qa]=\"DataQaAttribute.cloud_confirm_diaglog+'_'+DataQaAttribute.confirm_btn\" matRipple>\n <span class=\"button-text\">{{ data.okText | translate }}</span>\n </button>\n </div>\n </div>\n\n </mat-dialog-actions>\n</div>\n", styles: [".modal-text span{white-space:pre-line}\n"] }]
135464
+ ], template: "<div class=\"tb-modal\">\n <div class=\"modal-title-container\">\n <div class=\"ellipsis modal-title-content\" mat-dialog-title>\n <div class=\"modal-title-primary ellipsis\">{{data.confirmTitle}}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data.confirmSubTitle\">{{data.confirmSubTitle}}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.ticket\">\n <span class=\"entity-identifier-type\">{{ data.ticket.type }}</span>\n <span>#{{ data.ticket.number }}</span>\n </div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.device\">{{ data.device.name }} | #{{ data.device.commId\n }}</div>\n <div class=\"modal-title-secondary ellipsis\" *ngIf=\"data?.lpr\">{{ L.car_plate | translate }}: {{ data.lpr.lprString\n }}</div>\n <div class=\"modal-title-sub-secondary ellipsis\" *ngIf=\"data?.parkName\">\n <span>{{ data.parkName }}</span>\n <span *ngIf=\"data?.zoneName\"> | {{ data.zoneName }}</span>\n </div>\n </div>\n <div class=\"modal-button-wrapper\">\n <tb-notification-type-label *ngIf=\"data?.notificationSeverity\" class=\"tb-mr-5\"\n [notificationSeverity]=\"data?.notificationSeverity\"\n [notificationSeverityInvert]=\"data?.notificationSeverityInvert\">\n </tb-notification-type-label>\n </div>\n </div>\n <mat-dialog-content>\n <tb-message-bar *ngIf=\"data.showMessageBar\" [dialog]=\"true\"></tb-message-bar>\n <div class=\"modal-text\" *ngFor=\"let confirmMessage of data.confirmMessages\">\n <span [innerHTML]=\"confirmMessage | curlyToBold\"></span>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <div class=\"buttons-wrapper\">\n <div class=\"buttons-wrapper-left\">\n <!-- No Left Action -->\n </div>\n <div class=\"buttons-wrapper-right\">\n <!-- Confirmations change data: the safe choice takes focus, so Enter cannot confirm by accident. -->\n <button *ngIf=\"!data.hideCancel\" class='tb-button tb-tertiary-button basic-button'\n (click)=\"close(false)\" cdkFocusInitial [attr.data-qa]=\"DataQaAttribute.cloud_confirm_diaglog+'_'+DataQaAttribute.cancel_btn\"\n matRipple>\n <span class=\"button-text\">{{ data.cancelText | translate }}</span>\n </button>\n <button *ngIf=\"!data.hideOk\" class='tb-button tb-primary-button basic-button' (click)=\"close(true)\" [attr.cdkFocusInitial]=\"data.hideCancel ? '' : null\"\n [attr.data-qa]=\"DataQaAttribute.cloud_confirm_diaglog+'_'+DataQaAttribute.confirm_btn\" matRipple>\n <span class=\"button-text\">{{ data.okText | translate }}</span>\n </button>\n </div>\n </div>\n\n </mat-dialog-actions>\n</div>\n", styles: [".modal-text span{white-space:pre-line}\n"] }]
135046
135465
  }], ctorParameters: () => [{ type: i1$4.TranslateService }, { type: undefined, decorators: [{
135047
135466
  type: Inject,
135048
135467
  args: [MAT_DIALOG_DATA]
@@ -135057,7 +135476,8 @@ class CanDeactivateService {
135057
135476
  canDeactivate() {
135058
135477
  const isDialogClosed = this.isDialogClosed();
135059
135478
  if (this.hasUnsavedChanges() && isDialogClosed) {
135060
- return this.displayDialog().pipe(tap$1(value => {
135479
+ // X and Esc close the dialog without a result: stay, like Cancel.
135480
+ return this.displayDialog().pipe(map(value => value === true), tap$1(value => {
135061
135481
  if (value) {
135062
135482
  this.hasUnsavedChanges.set(false);
135063
135483
  }
@@ -139130,11 +139550,11 @@ class GuestOpenTicketDialogComponent {
139130
139550
  this.dialogRef.close(null);
139131
139551
  }
139132
139552
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GuestOpenTicketDialogComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i2$1.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component }); }
139133
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: GuestOpenTicketDialogComponent, isStandalone: true, selector: "tb-guest-open-ticket-dialog", ngImport: i0, template: "<div class=\"tb-open-ticket-dialog\">\n <!-- Named by id rather than by mat-dialog-title: the directive brings Material's own title\n typography and spacing with it, which would fight the coloured header band. The dialog's\n accessible name comes from ariaLabelledBy on the modal config. -->\n <header id=\"tb-guest-open-ticket-title\" class=\"tb-open-ticket-dialog__header\">\n {{ L.guest_open_ticket_detected_title | translate }}\n </header>\n\n <div class=\"tb-open-ticket-dialog__body\">\n <section class=\"tb-open-ticket-dialog__summary\">\n <!-- One key, not four concatenated fragments: he.json is a live RTL locale and a translator\n cannot reorder pieces the template glues together in source order. The emphasis on the\n plate and dates is given up deliberately - a sentence that can be translated is worth\n more than the bold. -->\n <p class=\"tb-open-ticket-dialog__summary-text\">\n {{\n (data.entryBeforeCheckIn ? L.guest_open_ticket_summary : L.guest_open_ticket_summary_after)\n | translate\n : {\n carPlate: data.carPlate,\n ticketNumber: data.ticketNumber,\n entryTime: data.entryDate | date: data.dateFormat,\n checkInTime: data.checkInDate | date: data.dateFormat,\n passEndTime: data.passEndDate | date: data.dateFormat\n }\n }}\n </p>\n <!-- Only meaningful before check-in: an entry after the pass period has no gap to absorb. -->\n <p *ngIf=\"data.entryBeforeCheckIn\" class=\"tb-open-ticket-dialog__duration\">\n {{ L.guest_open_ticket_duration_before_check_in | translate }}\n <strong>{{ data.durationBeforeCheckIn }}</strong>\n </p>\n </section>\n\n <!-- With only one option left there is no choice to make, so asking \"how would you like to\n proceed?\" above a single radio reads as a rendering fault. State the outcome instead. -->\n <h3 id=\"tb-guest-open-ticket-question\" class=\"tb-open-ticket-dialog__question\">\n {{\n (data.coverAllowed ? L.guest_open_ticket_how_to_proceed : L.guest_open_ticket_only_exit_option)\n | translate\n }}\n </h3>\n\n <mat-radio-group\n class=\"tb-open-ticket-dialog__options\"\n aria-labelledby=\"tb-guest-open-ticket-question\"\n [(ngModel)]=\"choice\"\n name=\"openTicketChoice\">\n <!-- A div, not a label: mat-radio-button renders its own <label for>, and nesting that\n inside another label is invalid HTML and makes the click target ambiguous. The click\n handler keeps the whole card selectable. -->\n <div\n *ngIf=\"data.coverAllowed\"\n class=\"tb-open-ticket-dialog__option\"\n [class.tb-open-ticket-dialog__option--selected]=\"choice === Choice.CoverParkingPeriod\"\n (click)=\"choice = Choice.CoverParkingPeriod\">\n <mat-radio-button [value]=\"Choice.CoverParkingPeriod\">\n <span class=\"tb-open-ticket-dialog__option-title\">\n {{ L.guest_open_ticket_option_cover_title | translate }}\n </span>\n </mat-radio-button>\n <p class=\"tb-open-ticket-dialog__option-detail\">\n {{\n L.guest_open_ticket_option_cover_detail\n | translate\n : {\n entryTime: data.entryDate | date: data.dateFormat,\n duration: data.durationShort\n }\n }}\n </p>\n <p class=\"tb-open-ticket-dialog__outcome tb-open-ticket-dialog__outcome--closed\">\n {{ L.guest_open_ticket_outcome_closed | translate }}\n </p>\n </div>\n\n <div\n class=\"tb-open-ticket-dialog__option\"\n [class.tb-open-ticket-dialog__option--selected]=\"choice === Choice.ExitAndReenter\"\n (click)=\"choice = Choice.ExitAndReenter\">\n <mat-radio-button [value]=\"Choice.ExitAndReenter\">\n <span class=\"tb-open-ticket-dialog__option-title\">\n {{ L.guest_open_ticket_option_exit_title | translate }}\n </span>\n </mat-radio-button>\n <p class=\"tb-open-ticket-dialog__option-detail\">\n {{\n L.guest_open_ticket_option_exit_detail\n | translate: { checkInTime: data.checkInDate | date: data.dateFormat }\n }}\n </p>\n <p class=\"tb-open-ticket-dialog__outcome tb-open-ticket-dialog__outcome--open\">\n {{ L.guest_open_ticket_outcome_open | translate }}\n </p>\n </div>\n </mat-radio-group>\n </div>\n\n <mat-dialog-actions class=\"tb-open-ticket-dialog__footer\">\n <div class=\"buttons-wrapper\">\n <div class=\"buttons-wrapper-right\">\n <button (click)=\"cancel()\" class=\"tb-button tb-tertiary-button basic-button\"\n [attr.data-qa]=\"DataQaAttribute.guest_open_ticket_dialog + '_' + DataQaAttribute.cancel_btn\" matRipple>\n <span class=\"button-text\">{{ L.cancel | translate }}</span>\n </button>\n <button (click)=\"createGuest()\" class=\"tb-button tb-primary-button basic-button\"\n [attr.data-qa]=\"DataQaAttribute.guest_open_ticket_dialog + '_' + DataQaAttribute.confirm_btn\" matRipple>\n <span class=\"button-text\">{{ L.guest_open_ticket_create_guest | translate }}</span>\n </button>\n </div>\n </div>\n </mat-dialog-actions>\n</div>\n", styles: [".tb-open-ticket-dialog{display:flex;flex-direction:column;height:100%}.tb-open-ticket-dialog__header{background:#ffd362;padding:8px 16px;font-size:14px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__body{flex:1;overflow-y:auto;padding:10px 16px}.tb-open-ticket-dialog__summary{background:#f9f9f9;border-radius:4px;padding:10px 12px;margin-bottom:10px}.tb-open-ticket-dialog__summary-text{margin:0;font-size:12px;line-height:1.45;color:#2c3e50}.tb-open-ticket-dialog__ticket{color:#0985eb;font-weight:600}.tb-open-ticket-dialog__duration{margin:6px 0 0;font-size:12px;color:#919eab}.tb-open-ticket-dialog__question{margin:0 0 8px;font-size:12px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__options{display:flex;flex-direction:column;gap:6px}.tb-open-ticket-dialog__option{display:block;border:1px solid #dee2e6;border-radius:6px;padding:10px 12px;cursor:pointer}.tb-open-ticket-dialog__option--selected{border-color:#0985eb;background:#f2f7fb}.tb-open-ticket-dialog__option-title{font-size:12px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__option-detail{margin:3px 0 0 30px;font-size:11px;line-height:1.4;color:#919eab}.tb-open-ticket-dialog__outcome{margin:5px 0 0 30px;font-size:11px;font-weight:500}.tb-open-ticket-dialog__outcome--closed{color:#26d637}.tb-open-ticket-dialog__outcome--open{color:#8a6d1a}.tb-open-ticket-dialog__footer{padding:10px 16px;border-top:1px solid #dee2e6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i5.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i4$1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }] }); }
139553
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: GuestOpenTicketDialogComponent, isStandalone: true, selector: "tb-guest-open-ticket-dialog", ngImport: i0, template: "<div class=\"tb-open-ticket-dialog\">\n <!-- Named by id rather than by mat-dialog-title: the directive brings Material's own title\n typography and spacing with it, which would fight the coloured header band. The dialog's\n accessible name comes from ariaLabelledBy on the modal config. -->\n <header id=\"tb-guest-open-ticket-title\" class=\"tb-open-ticket-dialog__header\">\n {{ L.guest_open_ticket_detected_title | translate }}\n </header>\n\n <div class=\"tb-open-ticket-dialog__body\">\n <section class=\"tb-open-ticket-dialog__summary\">\n <!-- One key, not four concatenated fragments: he.json is a live RTL locale and a translator\n cannot reorder pieces the template glues together in source order. The emphasis on the\n plate and dates is given up deliberately - a sentence that can be translated is worth\n more than the bold. -->\n <p class=\"tb-open-ticket-dialog__summary-text\">\n {{\n (data.entryBeforeCheckIn ? L.guest_open_ticket_summary : L.guest_open_ticket_summary_after)\n | translate\n : {\n carPlate: data.carPlate,\n ticketNumber: data.ticketNumber,\n entryTime: data.entryDate | date: data.dateFormat,\n checkInTime: data.checkInDate | date: data.dateFormat,\n passEndTime: data.passEndDate | date: data.dateFormat\n }\n }}\n </p>\n <!-- Only meaningful before check-in: an entry after the pass period has no gap to absorb. -->\n <p *ngIf=\"data.entryBeforeCheckIn\" class=\"tb-open-ticket-dialog__duration\">\n {{ L.guest_open_ticket_duration_before_check_in | translate }}\n <strong>{{ data.durationBeforeCheckIn }}</strong>\n </p>\n </section>\n\n <!-- With only one option left there is no choice to make, so asking \"how would you like to\n proceed?\" above a single radio reads as a rendering fault. State the outcome instead. -->\n <h3 id=\"tb-guest-open-ticket-question\" class=\"tb-open-ticket-dialog__question\">\n {{\n (data.coverAllowed ? L.guest_open_ticket_how_to_proceed : L.guest_open_ticket_only_exit_option)\n | translate\n }}\n </h3>\n\n <mat-radio-group\n class=\"tb-open-ticket-dialog__options\"\n aria-labelledby=\"tb-guest-open-ticket-question\"\n [(ngModel)]=\"choice\"\n name=\"openTicketChoice\">\n <!-- A div, not a label: mat-radio-button renders its own <label for>, and nesting that\n inside another label is invalid HTML and makes the click target ambiguous. The click\n handler keeps the whole card selectable. -->\n <div\n *ngIf=\"data.coverAllowed\"\n class=\"tb-open-ticket-dialog__option\"\n [class.tb-open-ticket-dialog__option--selected]=\"choice === Choice.CoverParkingPeriod\"\n (click)=\"choice = Choice.CoverParkingPeriod\">\n <mat-radio-button [value]=\"Choice.CoverParkingPeriod\">\n <span class=\"tb-open-ticket-dialog__option-title\">\n {{ L.guest_open_ticket_option_cover_title | translate }}\n </span>\n </mat-radio-button>\n <p class=\"tb-open-ticket-dialog__option-detail\">\n {{\n L.guest_open_ticket_option_cover_detail\n | translate\n : {\n entryTime: data.entryDate | date: data.dateFormat,\n duration: data.durationShort\n }\n }}\n </p>\n <p class=\"tb-open-ticket-dialog__outcome tb-open-ticket-dialog__outcome--closed\">\n {{ L.guest_open_ticket_outcome_closed | translate }}\n </p>\n </div>\n\n <div\n class=\"tb-open-ticket-dialog__option\"\n [class.tb-open-ticket-dialog__option--selected]=\"choice === Choice.ExitAndReenter\"\n (click)=\"choice = Choice.ExitAndReenter\">\n <mat-radio-button [value]=\"Choice.ExitAndReenter\">\n <span class=\"tb-open-ticket-dialog__option-title\">\n {{ L.guest_open_ticket_option_exit_title | translate }}\n </span>\n </mat-radio-button>\n <p class=\"tb-open-ticket-dialog__option-detail\">\n {{\n L.guest_open_ticket_option_exit_detail\n | translate: { checkInTime: data.checkInDate | date: data.dateFormat }\n }}\n </p>\n <p class=\"tb-open-ticket-dialog__outcome tb-open-ticket-dialog__outcome--open\">\n {{ L.guest_open_ticket_outcome_open | translate }}\n </p>\n </div>\n </mat-radio-group>\n </div>\n\n <mat-dialog-actions class=\"tb-open-ticket-dialog__footer\">\n <div class=\"buttons-wrapper\">\n <div class=\"buttons-wrapper-right\">\n <button (click)=\"cancel()\" class=\"tb-button tb-tertiary-button basic-button\"\n [attr.data-qa]=\"DataQaAttribute.guest_open_ticket_dialog + '_' + DataQaAttribute.cancel_btn\" matRipple>\n <span class=\"button-text\">{{ L.cancel | translate }}</span>\n </button>\n <button (click)=\"createGuest()\" class=\"tb-button tb-primary-button basic-button\"\n [attr.data-qa]=\"DataQaAttribute.guest_open_ticket_dialog + '_' + DataQaAttribute.confirm_btn\" matRipple>\n <span class=\"button-text\">{{ L.guest_open_ticket_create_guest | translate }}</span>\n </button>\n </div>\n </div>\n </mat-dialog-actions>\n</div>\n", styles: [".tb-open-ticket-dialog{display:flex;flex-direction:column;height:100%}.tb-open-ticket-dialog__header{background:#ffd362;padding:8px 16px;font-size:14px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__body{flex:1;overflow-y:auto;padding:10px 16px}.tb-open-ticket-dialog__summary{background:#f9f9f9;border-radius:4px;padding:10px 12px;margin-bottom:10px}.tb-open-ticket-dialog__summary-text{margin:0;font-size:12px;line-height:1.45;color:#2c3e50}.tb-open-ticket-dialog__ticket{color:#0670c7;font-weight:600}.tb-open-ticket-dialog__duration{margin:6px 0 0;font-size:12px;color:#5f6b78}.tb-open-ticket-dialog__question{margin:0 0 8px;font-size:12px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__options{display:flex;flex-direction:column;gap:6px}.tb-open-ticket-dialog__option{display:block;border:1px solid #dee2e6;border-radius:6px;padding:10px 12px;cursor:pointer}.tb-open-ticket-dialog__option--selected{border-color:#0670c7;background:#f2f7fb}.tb-open-ticket-dialog__option-title{font-size:12px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__option-detail{margin:3px 0 0 30px;font-size:11px;line-height:1.4;color:#5f6b78}.tb-open-ticket-dialog__outcome{margin:5px 0 0 30px;font-size:11px;font-weight:500}.tb-open-ticket-dialog__outcome--closed{color:#26d637}.tb-open-ticket-dialog__outcome--open{color:#8a6d1a}.tb-open-ticket-dialog__footer{padding:10px 16px;border-top:1px solid #dee2e6}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.DatePipe, name: "date" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: i2$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i5.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i5.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color", "disabledInteractive"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: MatRippleModule }, { kind: "directive", type: i4$1.MatRipple, selector: "[mat-ripple], [matRipple]", inputs: ["matRippleColor", "matRippleUnbounded", "matRippleCentered", "matRippleRadius", "matRippleAnimation", "matRippleDisabled", "matRippleTrigger"], exportAs: ["matRipple"] }] }); }
139134
139554
  }
139135
139555
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GuestOpenTicketDialogComponent, decorators: [{
139136
139556
  type: Component,
139137
- args: [{ selector: 'tb-guest-open-ticket-dialog', standalone: true, imports: [CommonModule, FormsModule, LocalizationModule, MatDialogModule, MatRadioModule, MatRippleModule], template: "<div class=\"tb-open-ticket-dialog\">\n <!-- Named by id rather than by mat-dialog-title: the directive brings Material's own title\n typography and spacing with it, which would fight the coloured header band. The dialog's\n accessible name comes from ariaLabelledBy on the modal config. -->\n <header id=\"tb-guest-open-ticket-title\" class=\"tb-open-ticket-dialog__header\">\n {{ L.guest_open_ticket_detected_title | translate }}\n </header>\n\n <div class=\"tb-open-ticket-dialog__body\">\n <section class=\"tb-open-ticket-dialog__summary\">\n <!-- One key, not four concatenated fragments: he.json is a live RTL locale and a translator\n cannot reorder pieces the template glues together in source order. The emphasis on the\n plate and dates is given up deliberately - a sentence that can be translated is worth\n more than the bold. -->\n <p class=\"tb-open-ticket-dialog__summary-text\">\n {{\n (data.entryBeforeCheckIn ? L.guest_open_ticket_summary : L.guest_open_ticket_summary_after)\n | translate\n : {\n carPlate: data.carPlate,\n ticketNumber: data.ticketNumber,\n entryTime: data.entryDate | date: data.dateFormat,\n checkInTime: data.checkInDate | date: data.dateFormat,\n passEndTime: data.passEndDate | date: data.dateFormat\n }\n }}\n </p>\n <!-- Only meaningful before check-in: an entry after the pass period has no gap to absorb. -->\n <p *ngIf=\"data.entryBeforeCheckIn\" class=\"tb-open-ticket-dialog__duration\">\n {{ L.guest_open_ticket_duration_before_check_in | translate }}\n <strong>{{ data.durationBeforeCheckIn }}</strong>\n </p>\n </section>\n\n <!-- With only one option left there is no choice to make, so asking \"how would you like to\n proceed?\" above a single radio reads as a rendering fault. State the outcome instead. -->\n <h3 id=\"tb-guest-open-ticket-question\" class=\"tb-open-ticket-dialog__question\">\n {{\n (data.coverAllowed ? L.guest_open_ticket_how_to_proceed : L.guest_open_ticket_only_exit_option)\n | translate\n }}\n </h3>\n\n <mat-radio-group\n class=\"tb-open-ticket-dialog__options\"\n aria-labelledby=\"tb-guest-open-ticket-question\"\n [(ngModel)]=\"choice\"\n name=\"openTicketChoice\">\n <!-- A div, not a label: mat-radio-button renders its own <label for>, and nesting that\n inside another label is invalid HTML and makes the click target ambiguous. The click\n handler keeps the whole card selectable. -->\n <div\n *ngIf=\"data.coverAllowed\"\n class=\"tb-open-ticket-dialog__option\"\n [class.tb-open-ticket-dialog__option--selected]=\"choice === Choice.CoverParkingPeriod\"\n (click)=\"choice = Choice.CoverParkingPeriod\">\n <mat-radio-button [value]=\"Choice.CoverParkingPeriod\">\n <span class=\"tb-open-ticket-dialog__option-title\">\n {{ L.guest_open_ticket_option_cover_title | translate }}\n </span>\n </mat-radio-button>\n <p class=\"tb-open-ticket-dialog__option-detail\">\n {{\n L.guest_open_ticket_option_cover_detail\n | translate\n : {\n entryTime: data.entryDate | date: data.dateFormat,\n duration: data.durationShort\n }\n }}\n </p>\n <p class=\"tb-open-ticket-dialog__outcome tb-open-ticket-dialog__outcome--closed\">\n {{ L.guest_open_ticket_outcome_closed | translate }}\n </p>\n </div>\n\n <div\n class=\"tb-open-ticket-dialog__option\"\n [class.tb-open-ticket-dialog__option--selected]=\"choice === Choice.ExitAndReenter\"\n (click)=\"choice = Choice.ExitAndReenter\">\n <mat-radio-button [value]=\"Choice.ExitAndReenter\">\n <span class=\"tb-open-ticket-dialog__option-title\">\n {{ L.guest_open_ticket_option_exit_title | translate }}\n </span>\n </mat-radio-button>\n <p class=\"tb-open-ticket-dialog__option-detail\">\n {{\n L.guest_open_ticket_option_exit_detail\n | translate: { checkInTime: data.checkInDate | date: data.dateFormat }\n }}\n </p>\n <p class=\"tb-open-ticket-dialog__outcome tb-open-ticket-dialog__outcome--open\">\n {{ L.guest_open_ticket_outcome_open | translate }}\n </p>\n </div>\n </mat-radio-group>\n </div>\n\n <mat-dialog-actions class=\"tb-open-ticket-dialog__footer\">\n <div class=\"buttons-wrapper\">\n <div class=\"buttons-wrapper-right\">\n <button (click)=\"cancel()\" class=\"tb-button tb-tertiary-button basic-button\"\n [attr.data-qa]=\"DataQaAttribute.guest_open_ticket_dialog + '_' + DataQaAttribute.cancel_btn\" matRipple>\n <span class=\"button-text\">{{ L.cancel | translate }}</span>\n </button>\n <button (click)=\"createGuest()\" class=\"tb-button tb-primary-button basic-button\"\n [attr.data-qa]=\"DataQaAttribute.guest_open_ticket_dialog + '_' + DataQaAttribute.confirm_btn\" matRipple>\n <span class=\"button-text\">{{ L.guest_open_ticket_create_guest | translate }}</span>\n </button>\n </div>\n </div>\n </mat-dialog-actions>\n</div>\n", styles: [".tb-open-ticket-dialog{display:flex;flex-direction:column;height:100%}.tb-open-ticket-dialog__header{background:#ffd362;padding:8px 16px;font-size:14px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__body{flex:1;overflow-y:auto;padding:10px 16px}.tb-open-ticket-dialog__summary{background:#f9f9f9;border-radius:4px;padding:10px 12px;margin-bottom:10px}.tb-open-ticket-dialog__summary-text{margin:0;font-size:12px;line-height:1.45;color:#2c3e50}.tb-open-ticket-dialog__ticket{color:#0985eb;font-weight:600}.tb-open-ticket-dialog__duration{margin:6px 0 0;font-size:12px;color:#919eab}.tb-open-ticket-dialog__question{margin:0 0 8px;font-size:12px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__options{display:flex;flex-direction:column;gap:6px}.tb-open-ticket-dialog__option{display:block;border:1px solid #dee2e6;border-radius:6px;padding:10px 12px;cursor:pointer}.tb-open-ticket-dialog__option--selected{border-color:#0985eb;background:#f2f7fb}.tb-open-ticket-dialog__option-title{font-size:12px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__option-detail{margin:3px 0 0 30px;font-size:11px;line-height:1.4;color:#919eab}.tb-open-ticket-dialog__outcome{margin:5px 0 0 30px;font-size:11px;font-weight:500}.tb-open-ticket-dialog__outcome--closed{color:#26d637}.tb-open-ticket-dialog__outcome--open{color:#8a6d1a}.tb-open-ticket-dialog__footer{padding:10px 16px;border-top:1px solid #dee2e6}\n"] }]
139557
+ args: [{ selector: 'tb-guest-open-ticket-dialog', standalone: true, imports: [CommonModule, FormsModule, LocalizationModule, MatDialogModule, MatRadioModule, MatRippleModule], template: "<div class=\"tb-open-ticket-dialog\">\n <!-- Named by id rather than by mat-dialog-title: the directive brings Material's own title\n typography and spacing with it, which would fight the coloured header band. The dialog's\n accessible name comes from ariaLabelledBy on the modal config. -->\n <header id=\"tb-guest-open-ticket-title\" class=\"tb-open-ticket-dialog__header\">\n {{ L.guest_open_ticket_detected_title | translate }}\n </header>\n\n <div class=\"tb-open-ticket-dialog__body\">\n <section class=\"tb-open-ticket-dialog__summary\">\n <!-- One key, not four concatenated fragments: he.json is a live RTL locale and a translator\n cannot reorder pieces the template glues together in source order. The emphasis on the\n plate and dates is given up deliberately - a sentence that can be translated is worth\n more than the bold. -->\n <p class=\"tb-open-ticket-dialog__summary-text\">\n {{\n (data.entryBeforeCheckIn ? L.guest_open_ticket_summary : L.guest_open_ticket_summary_after)\n | translate\n : {\n carPlate: data.carPlate,\n ticketNumber: data.ticketNumber,\n entryTime: data.entryDate | date: data.dateFormat,\n checkInTime: data.checkInDate | date: data.dateFormat,\n passEndTime: data.passEndDate | date: data.dateFormat\n }\n }}\n </p>\n <!-- Only meaningful before check-in: an entry after the pass period has no gap to absorb. -->\n <p *ngIf=\"data.entryBeforeCheckIn\" class=\"tb-open-ticket-dialog__duration\">\n {{ L.guest_open_ticket_duration_before_check_in | translate }}\n <strong>{{ data.durationBeforeCheckIn }}</strong>\n </p>\n </section>\n\n <!-- With only one option left there is no choice to make, so asking \"how would you like to\n proceed?\" above a single radio reads as a rendering fault. State the outcome instead. -->\n <h3 id=\"tb-guest-open-ticket-question\" class=\"tb-open-ticket-dialog__question\">\n {{\n (data.coverAllowed ? L.guest_open_ticket_how_to_proceed : L.guest_open_ticket_only_exit_option)\n | translate\n }}\n </h3>\n\n <mat-radio-group\n class=\"tb-open-ticket-dialog__options\"\n aria-labelledby=\"tb-guest-open-ticket-question\"\n [(ngModel)]=\"choice\"\n name=\"openTicketChoice\">\n <!-- A div, not a label: mat-radio-button renders its own <label for>, and nesting that\n inside another label is invalid HTML and makes the click target ambiguous. The click\n handler keeps the whole card selectable. -->\n <div\n *ngIf=\"data.coverAllowed\"\n class=\"tb-open-ticket-dialog__option\"\n [class.tb-open-ticket-dialog__option--selected]=\"choice === Choice.CoverParkingPeriod\"\n (click)=\"choice = Choice.CoverParkingPeriod\">\n <mat-radio-button [value]=\"Choice.CoverParkingPeriod\">\n <span class=\"tb-open-ticket-dialog__option-title\">\n {{ L.guest_open_ticket_option_cover_title | translate }}\n </span>\n </mat-radio-button>\n <p class=\"tb-open-ticket-dialog__option-detail\">\n {{\n L.guest_open_ticket_option_cover_detail\n | translate\n : {\n entryTime: data.entryDate | date: data.dateFormat,\n duration: data.durationShort\n }\n }}\n </p>\n <p class=\"tb-open-ticket-dialog__outcome tb-open-ticket-dialog__outcome--closed\">\n {{ L.guest_open_ticket_outcome_closed | translate }}\n </p>\n </div>\n\n <div\n class=\"tb-open-ticket-dialog__option\"\n [class.tb-open-ticket-dialog__option--selected]=\"choice === Choice.ExitAndReenter\"\n (click)=\"choice = Choice.ExitAndReenter\">\n <mat-radio-button [value]=\"Choice.ExitAndReenter\">\n <span class=\"tb-open-ticket-dialog__option-title\">\n {{ L.guest_open_ticket_option_exit_title | translate }}\n </span>\n </mat-radio-button>\n <p class=\"tb-open-ticket-dialog__option-detail\">\n {{\n L.guest_open_ticket_option_exit_detail\n | translate: { checkInTime: data.checkInDate | date: data.dateFormat }\n }}\n </p>\n <p class=\"tb-open-ticket-dialog__outcome tb-open-ticket-dialog__outcome--open\">\n {{ L.guest_open_ticket_outcome_open | translate }}\n </p>\n </div>\n </mat-radio-group>\n </div>\n\n <mat-dialog-actions class=\"tb-open-ticket-dialog__footer\">\n <div class=\"buttons-wrapper\">\n <div class=\"buttons-wrapper-right\">\n <button (click)=\"cancel()\" class=\"tb-button tb-tertiary-button basic-button\"\n [attr.data-qa]=\"DataQaAttribute.guest_open_ticket_dialog + '_' + DataQaAttribute.cancel_btn\" matRipple>\n <span class=\"button-text\">{{ L.cancel | translate }}</span>\n </button>\n <button (click)=\"createGuest()\" class=\"tb-button tb-primary-button basic-button\"\n [attr.data-qa]=\"DataQaAttribute.guest_open_ticket_dialog + '_' + DataQaAttribute.confirm_btn\" matRipple>\n <span class=\"button-text\">{{ L.guest_open_ticket_create_guest | translate }}</span>\n </button>\n </div>\n </div>\n </mat-dialog-actions>\n</div>\n", styles: [".tb-open-ticket-dialog{display:flex;flex-direction:column;height:100%}.tb-open-ticket-dialog__header{background:#ffd362;padding:8px 16px;font-size:14px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__body{flex:1;overflow-y:auto;padding:10px 16px}.tb-open-ticket-dialog__summary{background:#f9f9f9;border-radius:4px;padding:10px 12px;margin-bottom:10px}.tb-open-ticket-dialog__summary-text{margin:0;font-size:12px;line-height:1.45;color:#2c3e50}.tb-open-ticket-dialog__ticket{color:#0670c7;font-weight:600}.tb-open-ticket-dialog__duration{margin:6px 0 0;font-size:12px;color:#5f6b78}.tb-open-ticket-dialog__question{margin:0 0 8px;font-size:12px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__options{display:flex;flex-direction:column;gap:6px}.tb-open-ticket-dialog__option{display:block;border:1px solid #dee2e6;border-radius:6px;padding:10px 12px;cursor:pointer}.tb-open-ticket-dialog__option--selected{border-color:#0670c7;background:#f2f7fb}.tb-open-ticket-dialog__option-title{font-size:12px;font-weight:600;color:#2c3e50}.tb-open-ticket-dialog__option-detail{margin:3px 0 0 30px;font-size:11px;line-height:1.4;color:#5f6b78}.tb-open-ticket-dialog__outcome{margin:5px 0 0 30px;font-size:11px;font-weight:500}.tb-open-ticket-dialog__outcome--closed{color:#26d637}.tb-open-ticket-dialog__outcome--open{color:#8a6d1a}.tb-open-ticket-dialog__footer{padding:10px 16px;border-top:1px solid #dee2e6}\n"] }]
139138
139558
  }], ctorParameters: () => [{ type: undefined, decorators: [{
139139
139559
  type: Inject,
139140
139560
  args: [MAT_DIALOG_DATA]
@@ -142211,14 +142631,18 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
142211
142631
  // Resolvers
142212
142632
 
142213
142633
  class ErrorPageComponent extends BaseComponent {
142214
- constructor(store, sessionStorageService, httpCancelService, appConfig, activatedRoute) {
142634
+ constructor(store, sessionStorageService, httpCancelService, appConfig, activatedRoute, elementRef) {
142215
142635
  super();
142216
142636
  this.store = store;
142217
142637
  this.sessionStorageService = sessionStorageService;
142218
142638
  this.httpCancelService = httpCancelService;
142219
142639
  this.appConfig = appConfig;
142220
142640
  this.activatedRoute = activatedRoute;
142641
+ this.elementRef = elementRef;
142221
142642
  this.drawerCollapsed = true;
142643
+ this.animationPaused = false;
142644
+ // A button's changed name is not read again under focus: the new label is said here after a press.
142645
+ this.announcement = '';
142222
142646
  this.appSectionLabel = AppSectionLabel;
142223
142647
  this.iconsHelper = IconsHelper;
142224
142648
  }
@@ -142228,6 +142652,11 @@ class ErrorPageComponent extends BaseComponent {
142228
142652
  this.httpCancelService.cancelPendingRequests();
142229
142653
  this.isCloud = this.appConfig.getConfig().appType === AppType.Cloud;
142230
142654
  }
142655
+ /** Moving content beside text needs a way to stop it (WCAG 2.2.2). */
142656
+ toggleAnimation() {
142657
+ this.animationPaused = this.elementRef.nativeElement.classList.toggle('tb-still');
142658
+ this.announcement = this.animationPaused ? this.L.play_animation : this.L.pause_animation;
142659
+ }
142231
142660
  extractedErrorClass(activatedRoute) {
142232
142661
  this.statusCodeError = activatedRoute.routeConfig.path === '**' ? '404' : activatedRoute.routeConfig.path;
142233
142662
  this.statusCodeErrorMessage = this.statusCodeError === '404' ? this.L.error_page_message_404 : this.L.error_page_message_403;
@@ -142281,18 +142710,37 @@ class ErrorPageComponent extends BaseComponent {
142281
142710
  }
142282
142711
  this.store.dispatch(new Navigate(route));
142283
142712
  }
142713
+ /** Opening the narrow-screen menu moves focus to its first module. */
142714
+ toggleDrawer() {
142715
+ this.drawerCollapsed = !this.drawerCollapsed;
142716
+ if (!this.drawerCollapsed) {
142717
+ setTimeout(() => this.elementRef.nativeElement.querySelector('.tb-module')?.focus());
142718
+ }
142719
+ }
142720
+ closeDrawerFromKeyboard() {
142721
+ if (!this.drawerCollapsed) {
142722
+ this.drawerCollapsed = true;
142723
+ this.menuButton?.nativeElement.focus();
142724
+ }
142725
+ }
142284
142726
  click() {
142285
142727
  if (!this.drawerCollapsed) {
142286
142728
  this.drawerCollapsed = true;
142287
142729
  }
142288
142730
  }
142289
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ErrorPageComponent, deps: [{ token: i1$2.Store }, { token: SessionStorageService }, { token: HttpCancelService }, { token: AppConfigService }, { token: i1$7.ActivatedRoute }], target: i0.ɵɵFactoryTarget.Component }); }
142290
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ErrorPageComponent, selector: "tb-error-page", host: { listeners: { "document:click": "click($event)" } }, usesInheritance: true, ngImport: i0, template: "<div class=\"tb-container\" [@routerTransition]>\n <header>\n <div class=\"tb-flex tb-align-items-center tb-full-height tb-space-between tb-flex-grow\">\n <div class=\"wrapper-logo tb-flex-center\">\n <div class=\"tb-logo\" (click)=\"navigateToDefaultRoute()\"></div>\n </div>\n <div class=\"tb-button tb-mr-28\" (click)=\"drawerCollapsed = !drawerCollapsed; $event.stopPropagation();\">\n <tb-icon [settings]=\"iconsHelper.three_bars_mobile\" class=\"tb-icon tb-icon-30\"></tb-icon>\n </div>\n </div>\n <div class=\"tb-modules\" [class.drawer-collapsed]=\"drawerCollapsed\">\n <div class=\"tb-module\" *ngFor=\"let appSectionKey of appSectionModuleMenu\"\n (click)=\"navigateToModule(appSectionKey)\">\n <tb-icon [settings]=\"iconsHelper[appSectionLabel.get(appSectionKey) + '_blue']\"></tb-icon>\n <span class=\"tb-menu-header-text\"> {{appSectionLabel.get(appSectionKey) | translateLocal | async}}</span>\n </div>\n </div>\n </header>\n\n <main>\n <div class=\"container\">\n <div class=\"left-section\">\n <div class=\"inner-content\">\n <h1 class=\"heading\">{{ statusCodeError }}</h1>\n <p class=\"subheading\">{{ statusCodeErrorMessage | translateLocal | async }}</p>\n </div>\n </div>\n <div class=\"right-section\">\n <div>\n <img class=\"mountains-image\" src=\"assets/mountains-{{statusCodeError}}.svg\">\n <img *ngIf=\"statusCodeError=='404'\" class=\"blue-gate\" src=\"assets/blue-gate.svg\">\n </div>\n </div>\n </div>\n <div id=\"clouds\">\n <div class=\"cloud background light-blue-cloud\"></div>\n <div class=\"cloud foreground light-blue-cloud\"></div>\n <div class=\"cloud background grey-cloud\"></div>\n <div class=\"cloud background light-blue-cloud\"></div>\n </div>\n </main>\n</div>", styles: ["@keyframes gate-up-animation-default{0%{transform:none}20%{transform:none}50%{transform:rotate(-40deg) translate(14px,-47px)}70%{transform:rotate(-40deg) translate(14px,-47px)}to{transform:none}}@keyframes gate-up-animation-mobile{0%{transform:none}20%{transform:none}50%{transform:rotate(-40deg) translate(11px,-22px)}70%{transform:rotate(-40deg) translate(11px,-22px)}to{transform:none}}div.tb-container{position:absolute;inset:0;background-size:cover;overflow:hidden}div.tb-container header{display:flex;flex-direction:row;align-items:flex-end;height:100px;background:#263544 0% 0% no-repeat padding-box}div.tb-container header div:first-child{z-index:4;background:inherit}div.tb-container header .tb-button{display:none}div.tb-container header .wrapper-logo{width:166px;height:64px;padding:18px 56px}div.tb-container header .wrapper-logo .tb-logo{height:100%;width:100%;background:url(/assets/tiba-logo.svg) no-repeat;background-size:contain;cursor:pointer}div.tb-container header .tb-modules{display:flex;align-items:center;width:680px;min-width:340px;margin-left:80px;flex:100%}div.tb-container header .tb-modules .tb-module{flex:1;height:110px;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;max-width:180px;min-width:120px}div.tb-container header .tb-modules .tb-module span{text-align:center;font-size:13px;font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#fff}div.tb-container header .tb-modules .tb-module:hover{background:#ffffff1a}div.tb-container header .tb-modules .tb-module ::ng-deep .tb-icon-insights-module-blue{background-image:url(/assets/icons/insights-blue-404.svg)}div.tb-container header .tb-modules .tb-module ::ng-deep .tb-icon-tech-tools-module-blue{background-image:url(/assets/icons/tech-tools-module-404.svg)}div.tb-container main{height:calc(100% - 100px)}div.tb-container main .left-section .inner-content{position:absolute;top:100px}div.tb-container main .container{position:relative;margin:0 auto;width:85%;height:100%;padding-bottom:25vh;display:flex;flex-direction:row;justify-content:space-around}div.tb-container main .left-section,div.tb-container main .right-section{position:relative}div.tb-container main .left-section{width:40%}div.tb-container main .heading{text-align:center;font-size:300px;line-height:1.3em;margin:2rem 0 .5rem;padding:0;font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;font-weight:900;color:#2c3e50}div.tb-container main .subheading{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#2c3e50;text-align:center;max-width:606px;font-size:34px;line-height:1.15em;padding:0 1rem;margin:0 auto}div.tb-container main .right-section{width:50%;display:flex;justify-content:center}div.tb-container main .right-section div{height:100%;width:100%;position:relative}div.tb-container main .mountains-image{position:absolute;bottom:0;padding-top:10vh;padding-left:1vh;max-height:100%;min-width:500px;z-index:1}div.tb-container main .blue-gate{position:absolute;bottom:165px;left:493px;animation:gate-up-animation-default linear 10s infinite;animation-delay:2s}div.tb-container #clouds{height:100%;width:100%}div.tb-container #clouds .light-blue-cloud{width:187px;height:131px;background-image:url(/assets/light-blue-cloud.svg)}div.tb-container #clouds .grey-cloud{width:154px;height:108px;background-image:url(/assets/grey-cloud.svg)}div.tb-container #clouds .cloud{position:absolute;animation-fill-mode:both}div.tb-container #clouds .cloud.foreground{z-index:2}div.tb-container #clouds .cloud.background{z-index:-1}@keyframes cloud-animation{0%{left:-10%}to{left:100%}}@keyframes cloud1-animation{0%{left:-10%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(1){left:-10%;top:147px;animation:cloud1-animation linear,cloud-animation linear infinite;animation-duration:24s,27s;animation-delay:0s,24s}@keyframes cloud2-animation{0%{left:50%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(2){left:50%;top:283px;animation:cloud2-animation linear,cloud-animation linear infinite;animation-duration:18s,26s;animation-delay:0s,18s}@keyframes cloud3-animation{0%{left:53%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(3){left:53%;top:278px;animation:cloud3-animation linear,cloud-animation linear infinite;animation-duration:12s,25s;animation-delay:0s,12s}@keyframes cloud4-animation{0%{left:85%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(4){left:85%;top:488px;animation:cloud4-animation linear,cloud-animation linear infinite;animation-duration:6s,24s;animation-delay:0s,6s}@media (max-width: 1300px){div.tb-container header{height:80px}div.tb-container header .wrapper-logo{height:100%;width:121px;padding:0 0 0 20px}div.tb-container header .wrapper-logo .tb-logo{width:121px;max-width:121px;max-height:45px}div.tb-container header .tb-button{display:block}div.tb-container header .tb-modules{position:absolute;top:80px;background:#263544 0% 0% no-repeat padding-box;max-height:440px;overflow:auto;width:100%!important;margin:-1px 0 0!important;padding-bottom:20px;z-index:3;display:grid!important;grid-template-columns:repeat(4,180px);align-content:space-around;justify-content:center;transition:transform 1s}div.tb-container header .tb-modules.drawer-collapsed{transform:translateY(-100%)}div.tb-container main{height:calc(100% - 80px)}div.tb-container main .container{flex-direction:column;padding-bottom:0vh}div.tb-container main .left-section{width:100%;height:40%;position:absolute;top:0}div.tb-container main .left-section .inner-content{position:relative;padding:1rem 0}div.tb-container main .heading{font-size:143px;line-height:1.15;margin:0}div.tb-container main .subheading{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#2c3e50;font-size:16px;line-height:1.15;max-width:100%}div.tb-container main .right-section{width:100%;height:60%;position:absolute;bottom:0}div.tb-container main .right-section>div{display:flex;justify-content:center}div.tb-container main .right-section>div img.mountains-image{width:375px}div.tb-container main .right-section>div img.blue-gate{width:75px;left:47px;top:105px;animation:gate-up-animation-mobile linear 10s infinite;position:relative}div.tb-container main .mountains-image{padding:0}div.tb-container #clouds .light-blue-cloud{width:88px;height:62px;background-size:contain}div.tb-container #clouds .grey-cloud{width:73px;height:51px;background-size:contain}div.tb-container #clouds .cloud:nth-child(1){top:120px}div.tb-container #clouds .cloud:nth-child(2){top:185px}div.tb-container #clouds .cloud:nth-child(3){top:182px}div.tb-container #clouds .cloud:nth-child(4){top:325px}}@media (max-width: 800px){div.tb-container header .tb-modules{grid-template-columns:repeat(3,180px)}}@media (max-width: 600px){div.tb-container header .tb-modules{grid-template-columns:repeat(2,180px)}}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslateLocalPipe, name: "translateLocal" }], animations: [appModuleAnimation()], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
142731
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ErrorPageComponent, deps: [{ token: i1$2.Store }, { token: SessionStorageService }, { token: HttpCancelService }, { token: AppConfigService }, { token: i1$7.ActivatedRoute }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
142732
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ErrorPageComponent, selector: "tb-error-page", host: { listeners: { "document:keydown.escape": "closeDrawerFromKeyboard()", "document:click": "click($event)" } }, viewQueries: [{ propertyName: "menuButton", first: true, predicate: ["menuButton"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"tb-container\" [@routerTransition]>\n <header>\n <div class=\"tb-flex tb-align-items-center tb-full-height tb-space-between tb-flex-grow\">\n <div class=\"wrapper-logo tb-flex-center\">\n <div class=\"tb-logo\" (click)=\"navigateToDefaultRoute()\"></div>\n </div>\n <button type=\"button\" #menuButton class=\"tb-button tb-mr-28\" [attr.aria-expanded]=\"!drawerCollapsed\" aria-controls=\"tb-error-page-modules\"\n [attr.aria-label]=\"L.modules | translateLocal | async\" (click)=\"toggleDrawer(); $event.stopPropagation();\">\n <tb-icon [settings]=\"iconsHelper.three_bars_mobile\" class=\"tb-icon tb-icon-30\" aria-hidden=\"true\"></tb-icon>\n </button>\n </div>\n <nav id=\"tb-error-page-modules\" class=\"tb-modules\" [class.drawer-collapsed]=\"drawerCollapsed\" [attr.aria-label]=\"L.modules | translateLocal | async\">\n <button type=\"button\" class=\"tb-module\" *ngFor=\"let appSectionKey of appSectionModuleMenu\"\n (click)=\"navigateToModule(appSectionKey)\">\n <tb-icon [settings]=\"iconsHelper[appSectionLabel.get(appSectionKey) + '_blue']\" aria-hidden=\"true\"></tb-icon>\n <span class=\"tb-menu-header-text\"> {{appSectionLabel.get(appSectionKey) | translateLocal | async}}</span>\n </button>\n </nav>\n </header>\n\n <main>\n <div class=\"container\">\n <div class=\"left-section\">\n <div class=\"inner-content\">\n <h1 class=\"heading\">{{ statusCodeError }}</h1>\n <p class=\"subheading\">{{ statusCodeErrorMessage | translateLocal | async }}</p>\n <button type=\"button\" class=\"tb-animation-toggle\" (click)=\"toggleAnimation()\">\n {{ (animationPaused ? L.play_animation : L.pause_animation) | translateLocal | async }}\n </button>\n <span class=\"cdk-visually-hidden\" aria-live=\"polite\">{{ announcement ? (announcement | translateLocal | async) : '' }}</span>\n </div>\n </div>\n <div class=\"right-section\">\n <div>\n <img class=\"mountains-image\" alt=\"\" src=\"assets/mountains-{{statusCodeError}}.svg\">\n <img *ngIf=\"statusCodeError=='404'\" class=\"blue-gate\" alt=\"\" src=\"assets/blue-gate.svg\">\n </div>\n </div>\n </div>\n <div id=\"clouds\">\n <div class=\"cloud background light-blue-cloud\"></div>\n <div class=\"cloud foreground light-blue-cloud\"></div>\n <div class=\"cloud background grey-cloud\"></div>\n <div class=\"cloud background light-blue-cloud\"></div>\n </div>\n </main>\n</div>", styles: ["@keyframes gate-up-animation-default{0%{transform:none}20%{transform:none}50%{transform:rotate(-40deg) translate(14px,-47px)}70%{transform:rotate(-40deg) translate(14px,-47px)}to{transform:none}}@keyframes gate-up-animation-mobile{0%{transform:none}20%{transform:none}50%{transform:rotate(-40deg) translate(11px,-22px)}70%{transform:rotate(-40deg) translate(11px,-22px)}to{transform:none}}div.tb-container{position:absolute;inset:0;background-size:cover;background-color:#fff;overflow:hidden}div.tb-container header{display:flex;flex-direction:row;align-items:flex-end;height:100px;background:#263544 0% 0% no-repeat padding-box}div.tb-container header div:first-child{z-index:4;background:inherit}div.tb-container header .tb-button{display:none;padding:0;border:none;background:none;cursor:pointer}div.tb-container header .tb-button:focus-visible,div.tb-container header .tb-module:focus-visible{outline:1px solid #ffffff;outline-offset:-3px;border-radius:4px}div.tb-container header .wrapper-logo{width:166px;height:64px;padding:18px 56px}div.tb-container header .wrapper-logo .tb-logo{height:100%;width:100%;background:url(/assets/tiba-logo.svg) no-repeat;background-size:contain;cursor:pointer}div.tb-container header .tb-modules{display:flex;align-items:center;width:680px;min-width:340px;margin-left:80px;flex:100%}div.tb-container header .tb-modules .tb-module{flex:1;height:100px;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;max-width:180px;min-width:120px;padding:0;border:none;background:none;font:inherit}div.tb-container header .tb-modules .tb-module span{text-align:center;font-size:13px;font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#fff}div.tb-container header .tb-modules .tb-module:hover{background:#ffffff1a}div.tb-container header .tb-modules .tb-module ::ng-deep .tb-icon-insights-module-blue{background-image:url(/assets/icons/insights-blue-404.svg)}div.tb-container header .tb-modules .tb-module ::ng-deep .tb-icon-tech-tools-module-blue{background-image:url(/assets/icons/tech-tools-module-404.svg)}div.tb-container main{height:calc(100% - 100px)}div.tb-container main .left-section .inner-content{position:absolute;top:100px}div.tb-container main .container{position:relative;margin:0 auto;width:85%;height:100%;padding-bottom:25vh;display:flex;flex-direction:row;justify-content:space-around}div.tb-container main .left-section,div.tb-container main .right-section{position:relative}div.tb-container main .left-section{width:40%}div.tb-container main .heading{text-align:center;font-size:300px;line-height:1.3em;margin:2rem 0 .5rem;padding:0;font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;font-weight:900;color:#2c3e50}div.tb-container main .subheading{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#2c3e50;text-align:center;max-width:606px;font-size:34px;line-height:1.15em;padding:0 1rem;margin:0 auto}div.tb-container main .right-section{width:50%;display:flex;justify-content:center}div.tb-container main .right-section div{height:100%;width:100%;position:relative}div.tb-container main .mountains-image{position:absolute;bottom:0;padding-top:10vh;padding-left:1vh;max-height:100%;min-width:500px;z-index:1}div.tb-container main .blue-gate{position:absolute;bottom:165px;left:493px;animation:gate-up-animation-default linear 10s infinite;animation-delay:2s}div.tb-container #clouds{height:100%;width:100%}div.tb-container #clouds .light-blue-cloud{width:187px;height:131px;background-image:url(/assets/light-blue-cloud.svg)}div.tb-container #clouds .grey-cloud{width:154px;height:108px;background-image:url(/assets/grey-cloud.svg)}div.tb-container #clouds .cloud{position:absolute;animation-fill-mode:both}div.tb-container #clouds .cloud.foreground{z-index:2}div.tb-container #clouds .cloud.background{z-index:-1}@keyframes cloud-animation{0%{left:-10%}to{left:100%}}@keyframes cloud1-animation{0%{left:-10%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(1){left:-10%;top:147px;animation:cloud1-animation linear,cloud-animation linear infinite;animation-duration:24s,27s;animation-delay:0s,24s}@keyframes cloud2-animation{0%{left:50%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(2){left:50%;top:283px;animation:cloud2-animation linear,cloud-animation linear infinite;animation-duration:18s,26s;animation-delay:0s,18s}@keyframes cloud3-animation{0%{left:53%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(3){left:53%;top:278px;animation:cloud3-animation linear,cloud-animation linear infinite;animation-duration:12s,25s;animation-delay:0s,12s}@keyframes cloud4-animation{0%{left:85%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(4){left:85%;top:488px;animation:cloud4-animation linear,cloud-animation linear infinite;animation-duration:6s,24s;animation-delay:0s,6s}@media (max-width: 1300px){div.tb-container{overflow-y:auto}div.tb-container header{height:80px}div.tb-container header .wrapper-logo{height:100%;width:121px;padding:0 0 0 20px}div.tb-container header .wrapper-logo .tb-logo{width:121px;max-width:121px;max-height:45px}div.tb-container header .tb-button{display:block}div.tb-container header .tb-modules{position:absolute;top:80px;background:#263544 0% 0% no-repeat padding-box;max-height:440px;overflow:auto;width:100%!important;margin:-1px 0 0!important;padding-bottom:20px;z-index:3;display:grid!important;grid-template-columns:repeat(4,180px);align-content:space-around;justify-content:center;transition:transform 1s}div.tb-container header .tb-modules.drawer-collapsed{transform:translateY(-100%);visibility:hidden;transition:transform 1s,visibility 0s 1s}div.tb-container main{height:auto;min-height:calc(100% - 80px)}div.tb-container main .container{flex-direction:column;padding-bottom:0vh;height:auto}div.tb-container main .left-section{width:100%}div.tb-container main .left-section .inner-content{position:relative;top:0;padding:1rem 0}div.tb-container main .heading{font-size:143px;line-height:1.15;margin:0}div.tb-container main .subheading{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#2c3e50;font-size:16px;line-height:1.15;max-width:100%}div.tb-container main .right-section{width:100%;height:260px;flex:none}div.tb-container main .right-section>div{display:flex;justify-content:center}div.tb-container main .right-section>div img.mountains-image{width:375px}div.tb-container main .right-section>div img.blue-gate{width:75px;left:47px;top:105px;animation:gate-up-animation-mobile linear 10s infinite;position:relative}div.tb-container main .mountains-image{padding:0}div.tb-container #clouds .light-blue-cloud{width:88px;height:62px;background-size:contain}div.tb-container #clouds .grey-cloud{width:73px;height:51px;background-size:contain}div.tb-container #clouds .cloud:nth-child(1){top:120px}div.tb-container #clouds .cloud:nth-child(2){top:185px}div.tb-container #clouds .cloud:nth-child(3){top:182px}div.tb-container #clouds .cloud:nth-child(4){top:325px}}@media (max-width: 800px){div.tb-container header .tb-modules{grid-template-columns:repeat(3,180px)}}@media (max-width: 640px){div.tb-container header .tb-modules{grid-template-columns:repeat(2,180px)}}:host.tb-still *{animation-play-state:paused!important}@media (prefers-reduced-motion: reduce){:host *{animation:none!important}.tb-animation-toggle{display:none}}.tb-animation-toggle{margin-top:16px;padding:6px 12px;border:1px solid #0670c7;border-radius:4px;background:#fff;color:#0670c7;font:inherit;font-size:13px;cursor:pointer}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslateLocalPipe, name: "translateLocal" }], animations: [appModuleAnimation()], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
142291
142733
  }
142292
142734
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ErrorPageComponent, decorators: [{
142293
142735
  type: Component,
142294
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'tb-error-page', animations: [appModuleAnimation()], standalone: false, template: "<div class=\"tb-container\" [@routerTransition]>\n <header>\n <div class=\"tb-flex tb-align-items-center tb-full-height tb-space-between tb-flex-grow\">\n <div class=\"wrapper-logo tb-flex-center\">\n <div class=\"tb-logo\" (click)=\"navigateToDefaultRoute()\"></div>\n </div>\n <div class=\"tb-button tb-mr-28\" (click)=\"drawerCollapsed = !drawerCollapsed; $event.stopPropagation();\">\n <tb-icon [settings]=\"iconsHelper.three_bars_mobile\" class=\"tb-icon tb-icon-30\"></tb-icon>\n </div>\n </div>\n <div class=\"tb-modules\" [class.drawer-collapsed]=\"drawerCollapsed\">\n <div class=\"tb-module\" *ngFor=\"let appSectionKey of appSectionModuleMenu\"\n (click)=\"navigateToModule(appSectionKey)\">\n <tb-icon [settings]=\"iconsHelper[appSectionLabel.get(appSectionKey) + '_blue']\"></tb-icon>\n <span class=\"tb-menu-header-text\"> {{appSectionLabel.get(appSectionKey) | translateLocal | async}}</span>\n </div>\n </div>\n </header>\n\n <main>\n <div class=\"container\">\n <div class=\"left-section\">\n <div class=\"inner-content\">\n <h1 class=\"heading\">{{ statusCodeError }}</h1>\n <p class=\"subheading\">{{ statusCodeErrorMessage | translateLocal | async }}</p>\n </div>\n </div>\n <div class=\"right-section\">\n <div>\n <img class=\"mountains-image\" src=\"assets/mountains-{{statusCodeError}}.svg\">\n <img *ngIf=\"statusCodeError=='404'\" class=\"blue-gate\" src=\"assets/blue-gate.svg\">\n </div>\n </div>\n </div>\n <div id=\"clouds\">\n <div class=\"cloud background light-blue-cloud\"></div>\n <div class=\"cloud foreground light-blue-cloud\"></div>\n <div class=\"cloud background grey-cloud\"></div>\n <div class=\"cloud background light-blue-cloud\"></div>\n </div>\n </main>\n</div>", styles: ["@keyframes gate-up-animation-default{0%{transform:none}20%{transform:none}50%{transform:rotate(-40deg) translate(14px,-47px)}70%{transform:rotate(-40deg) translate(14px,-47px)}to{transform:none}}@keyframes gate-up-animation-mobile{0%{transform:none}20%{transform:none}50%{transform:rotate(-40deg) translate(11px,-22px)}70%{transform:rotate(-40deg) translate(11px,-22px)}to{transform:none}}div.tb-container{position:absolute;inset:0;background-size:cover;overflow:hidden}div.tb-container header{display:flex;flex-direction:row;align-items:flex-end;height:100px;background:#263544 0% 0% no-repeat padding-box}div.tb-container header div:first-child{z-index:4;background:inherit}div.tb-container header .tb-button{display:none}div.tb-container header .wrapper-logo{width:166px;height:64px;padding:18px 56px}div.tb-container header .wrapper-logo .tb-logo{height:100%;width:100%;background:url(/assets/tiba-logo.svg) no-repeat;background-size:contain;cursor:pointer}div.tb-container header .tb-modules{display:flex;align-items:center;width:680px;min-width:340px;margin-left:80px;flex:100%}div.tb-container header .tb-modules .tb-module{flex:1;height:110px;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;max-width:180px;min-width:120px}div.tb-container header .tb-modules .tb-module span{text-align:center;font-size:13px;font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#fff}div.tb-container header .tb-modules .tb-module:hover{background:#ffffff1a}div.tb-container header .tb-modules .tb-module ::ng-deep .tb-icon-insights-module-blue{background-image:url(/assets/icons/insights-blue-404.svg)}div.tb-container header .tb-modules .tb-module ::ng-deep .tb-icon-tech-tools-module-blue{background-image:url(/assets/icons/tech-tools-module-404.svg)}div.tb-container main{height:calc(100% - 100px)}div.tb-container main .left-section .inner-content{position:absolute;top:100px}div.tb-container main .container{position:relative;margin:0 auto;width:85%;height:100%;padding-bottom:25vh;display:flex;flex-direction:row;justify-content:space-around}div.tb-container main .left-section,div.tb-container main .right-section{position:relative}div.tb-container main .left-section{width:40%}div.tb-container main .heading{text-align:center;font-size:300px;line-height:1.3em;margin:2rem 0 .5rem;padding:0;font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;font-weight:900;color:#2c3e50}div.tb-container main .subheading{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#2c3e50;text-align:center;max-width:606px;font-size:34px;line-height:1.15em;padding:0 1rem;margin:0 auto}div.tb-container main .right-section{width:50%;display:flex;justify-content:center}div.tb-container main .right-section div{height:100%;width:100%;position:relative}div.tb-container main .mountains-image{position:absolute;bottom:0;padding-top:10vh;padding-left:1vh;max-height:100%;min-width:500px;z-index:1}div.tb-container main .blue-gate{position:absolute;bottom:165px;left:493px;animation:gate-up-animation-default linear 10s infinite;animation-delay:2s}div.tb-container #clouds{height:100%;width:100%}div.tb-container #clouds .light-blue-cloud{width:187px;height:131px;background-image:url(/assets/light-blue-cloud.svg)}div.tb-container #clouds .grey-cloud{width:154px;height:108px;background-image:url(/assets/grey-cloud.svg)}div.tb-container #clouds .cloud{position:absolute;animation-fill-mode:both}div.tb-container #clouds .cloud.foreground{z-index:2}div.tb-container #clouds .cloud.background{z-index:-1}@keyframes cloud-animation{0%{left:-10%}to{left:100%}}@keyframes cloud1-animation{0%{left:-10%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(1){left:-10%;top:147px;animation:cloud1-animation linear,cloud-animation linear infinite;animation-duration:24s,27s;animation-delay:0s,24s}@keyframes cloud2-animation{0%{left:50%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(2){left:50%;top:283px;animation:cloud2-animation linear,cloud-animation linear infinite;animation-duration:18s,26s;animation-delay:0s,18s}@keyframes cloud3-animation{0%{left:53%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(3){left:53%;top:278px;animation:cloud3-animation linear,cloud-animation linear infinite;animation-duration:12s,25s;animation-delay:0s,12s}@keyframes cloud4-animation{0%{left:85%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(4){left:85%;top:488px;animation:cloud4-animation linear,cloud-animation linear infinite;animation-duration:6s,24s;animation-delay:0s,6s}@media (max-width: 1300px){div.tb-container header{height:80px}div.tb-container header .wrapper-logo{height:100%;width:121px;padding:0 0 0 20px}div.tb-container header .wrapper-logo .tb-logo{width:121px;max-width:121px;max-height:45px}div.tb-container header .tb-button{display:block}div.tb-container header .tb-modules{position:absolute;top:80px;background:#263544 0% 0% no-repeat padding-box;max-height:440px;overflow:auto;width:100%!important;margin:-1px 0 0!important;padding-bottom:20px;z-index:3;display:grid!important;grid-template-columns:repeat(4,180px);align-content:space-around;justify-content:center;transition:transform 1s}div.tb-container header .tb-modules.drawer-collapsed{transform:translateY(-100%)}div.tb-container main{height:calc(100% - 80px)}div.tb-container main .container{flex-direction:column;padding-bottom:0vh}div.tb-container main .left-section{width:100%;height:40%;position:absolute;top:0}div.tb-container main .left-section .inner-content{position:relative;padding:1rem 0}div.tb-container main .heading{font-size:143px;line-height:1.15;margin:0}div.tb-container main .subheading{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#2c3e50;font-size:16px;line-height:1.15;max-width:100%}div.tb-container main .right-section{width:100%;height:60%;position:absolute;bottom:0}div.tb-container main .right-section>div{display:flex;justify-content:center}div.tb-container main .right-section>div img.mountains-image{width:375px}div.tb-container main .right-section>div img.blue-gate{width:75px;left:47px;top:105px;animation:gate-up-animation-mobile linear 10s infinite;position:relative}div.tb-container main .mountains-image{padding:0}div.tb-container #clouds .light-blue-cloud{width:88px;height:62px;background-size:contain}div.tb-container #clouds .grey-cloud{width:73px;height:51px;background-size:contain}div.tb-container #clouds .cloud:nth-child(1){top:120px}div.tb-container #clouds .cloud:nth-child(2){top:185px}div.tb-container #clouds .cloud:nth-child(3){top:182px}div.tb-container #clouds .cloud:nth-child(4){top:325px}}@media (max-width: 800px){div.tb-container header .tb-modules{grid-template-columns:repeat(3,180px)}}@media (max-width: 600px){div.tb-container header .tb-modules{grid-template-columns:repeat(2,180px)}}\n"] }]
142295
- }], ctorParameters: () => [{ type: i1$2.Store }, { type: SessionStorageService }, { type: HttpCancelService }, { type: AppConfigService }, { type: i1$7.ActivatedRoute }], propDecorators: { click: [{
142736
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, selector: 'tb-error-page', animations: [appModuleAnimation()], standalone: false, template: "<div class=\"tb-container\" [@routerTransition]>\n <header>\n <div class=\"tb-flex tb-align-items-center tb-full-height tb-space-between tb-flex-grow\">\n <div class=\"wrapper-logo tb-flex-center\">\n <div class=\"tb-logo\" (click)=\"navigateToDefaultRoute()\"></div>\n </div>\n <button type=\"button\" #menuButton class=\"tb-button tb-mr-28\" [attr.aria-expanded]=\"!drawerCollapsed\" aria-controls=\"tb-error-page-modules\"\n [attr.aria-label]=\"L.modules | translateLocal | async\" (click)=\"toggleDrawer(); $event.stopPropagation();\">\n <tb-icon [settings]=\"iconsHelper.three_bars_mobile\" class=\"tb-icon tb-icon-30\" aria-hidden=\"true\"></tb-icon>\n </button>\n </div>\n <nav id=\"tb-error-page-modules\" class=\"tb-modules\" [class.drawer-collapsed]=\"drawerCollapsed\" [attr.aria-label]=\"L.modules | translateLocal | async\">\n <button type=\"button\" class=\"tb-module\" *ngFor=\"let appSectionKey of appSectionModuleMenu\"\n (click)=\"navigateToModule(appSectionKey)\">\n <tb-icon [settings]=\"iconsHelper[appSectionLabel.get(appSectionKey) + '_blue']\" aria-hidden=\"true\"></tb-icon>\n <span class=\"tb-menu-header-text\"> {{appSectionLabel.get(appSectionKey) | translateLocal | async}}</span>\n </button>\n </nav>\n </header>\n\n <main>\n <div class=\"container\">\n <div class=\"left-section\">\n <div class=\"inner-content\">\n <h1 class=\"heading\">{{ statusCodeError }}</h1>\n <p class=\"subheading\">{{ statusCodeErrorMessage | translateLocal | async }}</p>\n <button type=\"button\" class=\"tb-animation-toggle\" (click)=\"toggleAnimation()\">\n {{ (animationPaused ? L.play_animation : L.pause_animation) | translateLocal | async }}\n </button>\n <span class=\"cdk-visually-hidden\" aria-live=\"polite\">{{ announcement ? (announcement | translateLocal | async) : '' }}</span>\n </div>\n </div>\n <div class=\"right-section\">\n <div>\n <img class=\"mountains-image\" alt=\"\" src=\"assets/mountains-{{statusCodeError}}.svg\">\n <img *ngIf=\"statusCodeError=='404'\" class=\"blue-gate\" alt=\"\" src=\"assets/blue-gate.svg\">\n </div>\n </div>\n </div>\n <div id=\"clouds\">\n <div class=\"cloud background light-blue-cloud\"></div>\n <div class=\"cloud foreground light-blue-cloud\"></div>\n <div class=\"cloud background grey-cloud\"></div>\n <div class=\"cloud background light-blue-cloud\"></div>\n </div>\n </main>\n</div>", styles: ["@keyframes gate-up-animation-default{0%{transform:none}20%{transform:none}50%{transform:rotate(-40deg) translate(14px,-47px)}70%{transform:rotate(-40deg) translate(14px,-47px)}to{transform:none}}@keyframes gate-up-animation-mobile{0%{transform:none}20%{transform:none}50%{transform:rotate(-40deg) translate(11px,-22px)}70%{transform:rotate(-40deg) translate(11px,-22px)}to{transform:none}}div.tb-container{position:absolute;inset:0;background-size:cover;background-color:#fff;overflow:hidden}div.tb-container header{display:flex;flex-direction:row;align-items:flex-end;height:100px;background:#263544 0% 0% no-repeat padding-box}div.tb-container header div:first-child{z-index:4;background:inherit}div.tb-container header .tb-button{display:none;padding:0;border:none;background:none;cursor:pointer}div.tb-container header .tb-button:focus-visible,div.tb-container header .tb-module:focus-visible{outline:1px solid #ffffff;outline-offset:-3px;border-radius:4px}div.tb-container header .wrapper-logo{width:166px;height:64px;padding:18px 56px}div.tb-container header .wrapper-logo .tb-logo{height:100%;width:100%;background:url(/assets/tiba-logo.svg) no-repeat;background-size:contain;cursor:pointer}div.tb-container header .tb-modules{display:flex;align-items:center;width:680px;min-width:340px;margin-left:80px;flex:100%}div.tb-container header .tb-modules .tb-module{flex:1;height:100px;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:pointer;max-width:180px;min-width:120px;padding:0;border:none;background:none;font:inherit}div.tb-container header .tb-modules .tb-module span{text-align:center;font-size:13px;font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#fff}div.tb-container header .tb-modules .tb-module:hover{background:#ffffff1a}div.tb-container header .tb-modules .tb-module ::ng-deep .tb-icon-insights-module-blue{background-image:url(/assets/icons/insights-blue-404.svg)}div.tb-container header .tb-modules .tb-module ::ng-deep .tb-icon-tech-tools-module-blue{background-image:url(/assets/icons/tech-tools-module-404.svg)}div.tb-container main{height:calc(100% - 100px)}div.tb-container main .left-section .inner-content{position:absolute;top:100px}div.tb-container main .container{position:relative;margin:0 auto;width:85%;height:100%;padding-bottom:25vh;display:flex;flex-direction:row;justify-content:space-around}div.tb-container main .left-section,div.tb-container main .right-section{position:relative}div.tb-container main .left-section{width:40%}div.tb-container main .heading{text-align:center;font-size:300px;line-height:1.3em;margin:2rem 0 .5rem;padding:0;font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;font-weight:900;color:#2c3e50}div.tb-container main .subheading{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#2c3e50;text-align:center;max-width:606px;font-size:34px;line-height:1.15em;padding:0 1rem;margin:0 auto}div.tb-container main .right-section{width:50%;display:flex;justify-content:center}div.tb-container main .right-section div{height:100%;width:100%;position:relative}div.tb-container main .mountains-image{position:absolute;bottom:0;padding-top:10vh;padding-left:1vh;max-height:100%;min-width:500px;z-index:1}div.tb-container main .blue-gate{position:absolute;bottom:165px;left:493px;animation:gate-up-animation-default linear 10s infinite;animation-delay:2s}div.tb-container #clouds{height:100%;width:100%}div.tb-container #clouds .light-blue-cloud{width:187px;height:131px;background-image:url(/assets/light-blue-cloud.svg)}div.tb-container #clouds .grey-cloud{width:154px;height:108px;background-image:url(/assets/grey-cloud.svg)}div.tb-container #clouds .cloud{position:absolute;animation-fill-mode:both}div.tb-container #clouds .cloud.foreground{z-index:2}div.tb-container #clouds .cloud.background{z-index:-1}@keyframes cloud-animation{0%{left:-10%}to{left:100%}}@keyframes cloud1-animation{0%{left:-10%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(1){left:-10%;top:147px;animation:cloud1-animation linear,cloud-animation linear infinite;animation-duration:24s,27s;animation-delay:0s,24s}@keyframes cloud2-animation{0%{left:50%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(2){left:50%;top:283px;animation:cloud2-animation linear,cloud-animation linear infinite;animation-duration:18s,26s;animation-delay:0s,18s}@keyframes cloud3-animation{0%{left:53%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(3){left:53%;top:278px;animation:cloud3-animation linear,cloud-animation linear infinite;animation-duration:12s,25s;animation-delay:0s,12s}@keyframes cloud4-animation{0%{left:85%}to{left:100%}}div.tb-container #clouds .cloud:nth-child(4){left:85%;top:488px;animation:cloud4-animation linear,cloud-animation linear infinite;animation-duration:6s,24s;animation-delay:0s,6s}@media (max-width: 1300px){div.tb-container{overflow-y:auto}div.tb-container header{height:80px}div.tb-container header .wrapper-logo{height:100%;width:121px;padding:0 0 0 20px}div.tb-container header .wrapper-logo .tb-logo{width:121px;max-width:121px;max-height:45px}div.tb-container header .tb-button{display:block}div.tb-container header .tb-modules{position:absolute;top:80px;background:#263544 0% 0% no-repeat padding-box;max-height:440px;overflow:auto;width:100%!important;margin:-1px 0 0!important;padding-bottom:20px;z-index:3;display:grid!important;grid-template-columns:repeat(4,180px);align-content:space-around;justify-content:center;transition:transform 1s}div.tb-container header .tb-modules.drawer-collapsed{transform:translateY(-100%);visibility:hidden;transition:transform 1s,visibility 0s 1s}div.tb-container main{height:auto;min-height:calc(100% - 80px)}div.tb-container main .container{flex-direction:column;padding-bottom:0vh;height:auto}div.tb-container main .left-section{width:100%}div.tb-container main .left-section .inner-content{position:relative;top:0;padding:1rem 0}div.tb-container main .heading{font-size:143px;line-height:1.15;margin:0}div.tb-container main .subheading{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;color:#2c3e50;font-size:16px;line-height:1.15;max-width:100%}div.tb-container main .right-section{width:100%;height:260px;flex:none}div.tb-container main .right-section>div{display:flex;justify-content:center}div.tb-container main .right-section>div img.mountains-image{width:375px}div.tb-container main .right-section>div img.blue-gate{width:75px;left:47px;top:105px;animation:gate-up-animation-mobile linear 10s infinite;position:relative}div.tb-container main .mountains-image{padding:0}div.tb-container #clouds .light-blue-cloud{width:88px;height:62px;background-size:contain}div.tb-container #clouds .grey-cloud{width:73px;height:51px;background-size:contain}div.tb-container #clouds .cloud:nth-child(1){top:120px}div.tb-container #clouds .cloud:nth-child(2){top:185px}div.tb-container #clouds .cloud:nth-child(3){top:182px}div.tb-container #clouds .cloud:nth-child(4){top:325px}}@media (max-width: 800px){div.tb-container header .tb-modules{grid-template-columns:repeat(3,180px)}}@media (max-width: 640px){div.tb-container header .tb-modules{grid-template-columns:repeat(2,180px)}}:host.tb-still *{animation-play-state:paused!important}@media (prefers-reduced-motion: reduce){:host *{animation:none!important}.tb-animation-toggle{display:none}}.tb-animation-toggle{margin-top:16px;padding:6px 12px;border:1px solid #0670c7;border-radius:4px;background:#fff;color:#0670c7;font:inherit;font-size:13px;cursor:pointer}\n"] }]
142737
+ }], ctorParameters: () => [{ type: i1$2.Store }, { type: SessionStorageService }, { type: HttpCancelService }, { type: AppConfigService }, { type: i1$7.ActivatedRoute }, { type: i0.ElementRef }], propDecorators: { menuButton: [{
142738
+ type: ViewChild,
142739
+ args: ['menuButton']
142740
+ }], closeDrawerFromKeyboard: [{
142741
+ type: HostListener,
142742
+ args: ['document:keydown.escape']
142743
+ }], click: [{
142296
142744
  type: HostListener,
142297
142745
  args: ['document:click', ['$event']]
142298
142746
  }] } });
@@ -142352,13 +142800,13 @@ class IntercomComponent {
142352
142800
  });
142353
142801
  }
142354
142802
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IntercomComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
142355
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: IntercomComponent, isStandalone: true, selector: "tb-intercom", inputs: { intercom: { classPropertyName: "intercom", publicName: "intercom", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div [ngClass]=\"intercomStatusClass()\" class=\"tb-intercom-icon\"></div>\n", styles: [":host{display:block}.tb-intercom-icon{display:block;height:22px;width:22px;background-image:url(/assets/icons/devices/status/phone.svg);background-size:12px;background-repeat:no-repeat;background-position:center;background-color:#d8dbe0;border-radius:50%;display:flex;justify-content:center;align-items:center}.tb-intercom-status-active,.tb-intercom-status-ringing{background-color:#0985eb}.tb-intercom-status-ringing:before{content:\"\";position:absolute;border:1px solid #0985eb;width:calc(100% + 10px);height:calc(100% + 10px);border-radius:50%;animation:pulse 1s linear infinite}.tb-intercom-status-ringing:after{content:\"\";position:absolute;border:1px solid #0985eb;width:calc(100% + 10px);height:calc(100% + 10px);border-radius:50%;animation:pulse 1s linear infinite;animation-delay:.3s}@keyframes pulse{0%{transform:scale(.5);opacity:0}50%{transform:scale(1);opacity:1}to{transform:scale(1.3);opacity:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
142803
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.1.0", version: "18.2.14", type: IntercomComponent, isStandalone: true, selector: "tb-intercom", inputs: { intercom: { classPropertyName: "intercom", publicName: "intercom", isSignal: true, isRequired: false, transformFunction: null } }, ngImport: i0, template: "<div [ngClass]=\"intercomStatusClass()\" class=\"tb-intercom-icon\"></div>\n", styles: [":host{display:block}.tb-intercom-icon{display:block;height:22px;width:22px;background-image:url(/assets/icons/devices/status/phone.svg);background-size:12px;background-repeat:no-repeat;background-position:center;background-color:#d8dbe0;border-radius:50%;display:flex;justify-content:center;align-items:center}.tb-intercom-status-active,.tb-intercom-status-ringing{background-color:#0670c7}.tb-intercom-status-ringing:before{content:\"\";position:absolute;border:1px solid #0670c7;width:calc(100% + 10px);height:calc(100% + 10px);border-radius:50%;animation:pulse 1s linear infinite}.tb-intercom-status-ringing:after{content:\"\";position:absolute;border:1px solid #0670c7;width:calc(100% + 10px);height:calc(100% + 10px);border-radius:50%;animation:pulse 1s linear infinite;animation-delay:.3s}@keyframes pulse{0%{transform:scale(.5);opacity:0}50%{transform:scale(1);opacity:1}to{transform:scale(1.3);opacity:0}}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
142356
142804
  }
142357
142805
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IntercomComponent, decorators: [{
142358
142806
  type: Component,
142359
142807
  args: [{ selector: 'tb-intercom', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
142360
142808
  CommonModule
142361
- ], template: "<div [ngClass]=\"intercomStatusClass()\" class=\"tb-intercom-icon\"></div>\n", styles: [":host{display:block}.tb-intercom-icon{display:block;height:22px;width:22px;background-image:url(/assets/icons/devices/status/phone.svg);background-size:12px;background-repeat:no-repeat;background-position:center;background-color:#d8dbe0;border-radius:50%;display:flex;justify-content:center;align-items:center}.tb-intercom-status-active,.tb-intercom-status-ringing{background-color:#0985eb}.tb-intercom-status-ringing:before{content:\"\";position:absolute;border:1px solid #0985eb;width:calc(100% + 10px);height:calc(100% + 10px);border-radius:50%;animation:pulse 1s linear infinite}.tb-intercom-status-ringing:after{content:\"\";position:absolute;border:1px solid #0985eb;width:calc(100% + 10px);height:calc(100% + 10px);border-radius:50%;animation:pulse 1s linear infinite;animation-delay:.3s}@keyframes pulse{0%{transform:scale(.5);opacity:0}50%{transform:scale(1);opacity:1}to{transform:scale(1.3);opacity:0}}\n"] }]
142809
+ ], template: "<div [ngClass]=\"intercomStatusClass()\" class=\"tb-intercom-icon\"></div>\n", styles: [":host{display:block}.tb-intercom-icon{display:block;height:22px;width:22px;background-image:url(/assets/icons/devices/status/phone.svg);background-size:12px;background-repeat:no-repeat;background-position:center;background-color:#d8dbe0;border-radius:50%;display:flex;justify-content:center;align-items:center}.tb-intercom-status-active,.tb-intercom-status-ringing{background-color:#0670c7}.tb-intercom-status-ringing:before{content:\"\";position:absolute;border:1px solid #0670c7;width:calc(100% + 10px);height:calc(100% + 10px);border-radius:50%;animation:pulse 1s linear infinite}.tb-intercom-status-ringing:after{content:\"\";position:absolute;border:1px solid #0670c7;width:calc(100% + 10px);height:calc(100% + 10px);border-radius:50%;animation:pulse 1s linear infinite;animation-delay:.3s}@keyframes pulse{0%{transform:scale(.5);opacity:0}50%{transform:scale(1);opacity:1}to{transform:scale(1.3);opacity:0}}\n"] }]
142362
142810
  }] });
142363
142811
 
142364
142812
  const ENTRY_TL60 = 'entry-tl60';
@@ -143080,7 +143528,7 @@ class EmptyResultsComponent extends BaseComponent {
143080
143528
  ngOnInit() {
143081
143529
  }
143082
143530
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyResultsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
143083
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EmptyResultsComponent, isStandalone: true, selector: "tb-empty-results", inputs: { options: "options" }, usesInheritance: true, ngImport: i0, template: "<div class=\"empty-results-wrapper {{options?.cssClass}}\" [class.has-leading-icon]=\"options?.icon !== undefined\">\n <!-- SPRK3-13627: leading icon, above the message. Absent unless a caller sets options.icon. -->\n <tb-icon *ngIf=\"options?.icon !== undefined\" [settings]=\"options?.icon\" [setCursorPointer]=\"false\" class=\"tb-icon-30 empty-results-icon\"></tb-icon>\n <ng-container *ngIf=\"options?.searchValue else noMessageValue\">\n <span class=\"empty-results-message\" [innerHTML]=\"options?.noDataMessage | translate:{ searchValue: options?.searchValue}\"></span>\n </ng-container>\n <ng-template #noMessageValue>\n <span class=\"empty-results-message\" [innerHTML]=\"options?.noDataMessage | translate\"></span>\n </ng-template>\n <tb-icon *ngIf=\"options?.tooltip?.icon\" [settings]=\"options?.tooltip?.icon\" class=\"tb-icon-30\" [matTooltip]=\"options?.tooltip?.text | translate\"\n [matTooltipPosition]=\"options?.tooltip?.position\">\n </tb-icon>\n</div>\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1}:host.tb-mobile-search-validate-ticket{border:none}.empty-results-wrapper{display:flex;flex:1;justify-content:center}.empty-results-wrapper.tb-search-validate-ticket,.empty-results-wrapper.tb-mobile-search-validate-ticket{flex:unset}.empty-results-wrapper.tb-mobile-search-validate-ticket span{font-family:Quicksand,Quicksand Local,Roboto,Roboto Local,sans-serif;font-size:17px;font-weight:700;text-align:center}.empty-results-wrapper.tb-mobile-search-validate-ticket tb-icon{display:none}.empty-results-wrapper.has-leading-icon{flex-direction:column;align-items:center;justify-content:center;gap:16px}.empty-results-wrapper.has-leading-icon .empty-results-message{display:block}.empty-results-wrapper .empty-results-message{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;align-items:center;color:#919eab;cursor:default;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: SanitizedInnerHtmlDirective, selector: "[innerHTML]", inputs: ["innerHTML"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
143531
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: EmptyResultsComponent, isStandalone: true, selector: "tb-empty-results", inputs: { options: "options" }, usesInheritance: true, ngImport: i0, template: "<div class=\"empty-results-wrapper {{options?.cssClass}}\" [class.has-leading-icon]=\"options?.icon !== undefined\">\n <!-- SPRK3-13627: leading icon, above the message. Absent unless a caller sets options.icon. -->\n <tb-icon *ngIf=\"options?.icon !== undefined\" [settings]=\"options?.icon\" [setCursorPointer]=\"false\" class=\"tb-icon-30 empty-results-icon\"></tb-icon>\n <ng-container *ngIf=\"options?.searchValue else noMessageValue\">\n <span class=\"empty-results-message\" [innerHTML]=\"options?.noDataMessage | translate:{ searchValue: options?.searchValue}\"></span>\n </ng-container>\n <ng-template #noMessageValue>\n <span class=\"empty-results-message\" [innerHTML]=\"options?.noDataMessage | translate\"></span>\n </ng-template>\n <tb-icon *ngIf=\"options?.tooltip?.icon\" [settings]=\"options?.tooltip?.icon\" class=\"tb-icon-30\" tabindex=\"0\" role=\"img\" [attr.aria-label]=\"L.info | translate\" [matTooltip]=\"options?.tooltip?.text | translate\"\n [matTooltipPosition]=\"options?.tooltip?.position\">\n </tb-icon>\n</div>\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1}:host.tb-mobile-search-validate-ticket{border:none}.empty-results-wrapper{display:flex;flex:1;justify-content:center}.empty-results-wrapper.tb-search-validate-ticket,.empty-results-wrapper.tb-mobile-search-validate-ticket{flex:unset}.empty-results-wrapper.tb-mobile-search-validate-ticket span{font-family:Quicksand,Quicksand Local,Roboto,Roboto Local,sans-serif;font-size:17px;font-weight:700;text-align:center}.empty-results-wrapper.tb-mobile-search-validate-ticket tb-icon{display:none}.empty-results-wrapper.has-leading-icon{flex-direction:column;align-items:center;justify-content:center;gap:16px}.empty-results-wrapper.has-leading-icon .empty-results-message{display:block}.empty-results-wrapper .empty-results-message{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;align-items:center;color:#5f6b78;cursor:default;text-align:center}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "directive", type: SanitizedInnerHtmlDirective, selector: "[innerHTML]", inputs: ["innerHTML"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
143084
143532
  }
143085
143533
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyResultsComponent, decorators: [{
143086
143534
  type: Component,
@@ -143090,7 +143538,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
143090
143538
  LocalizationModule,
143091
143539
  MatTooltipModule,
143092
143540
  SanitizedInnerHtmlDirective,
143093
- ], template: "<div class=\"empty-results-wrapper {{options?.cssClass}}\" [class.has-leading-icon]=\"options?.icon !== undefined\">\n <!-- SPRK3-13627: leading icon, above the message. Absent unless a caller sets options.icon. -->\n <tb-icon *ngIf=\"options?.icon !== undefined\" [settings]=\"options?.icon\" [setCursorPointer]=\"false\" class=\"tb-icon-30 empty-results-icon\"></tb-icon>\n <ng-container *ngIf=\"options?.searchValue else noMessageValue\">\n <span class=\"empty-results-message\" [innerHTML]=\"options?.noDataMessage | translate:{ searchValue: options?.searchValue}\"></span>\n </ng-container>\n <ng-template #noMessageValue>\n <span class=\"empty-results-message\" [innerHTML]=\"options?.noDataMessage | translate\"></span>\n </ng-template>\n <tb-icon *ngIf=\"options?.tooltip?.icon\" [settings]=\"options?.tooltip?.icon\" class=\"tb-icon-30\" [matTooltip]=\"options?.tooltip?.text | translate\"\n [matTooltipPosition]=\"options?.tooltip?.position\">\n </tb-icon>\n</div>\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1}:host.tb-mobile-search-validate-ticket{border:none}.empty-results-wrapper{display:flex;flex:1;justify-content:center}.empty-results-wrapper.tb-search-validate-ticket,.empty-results-wrapper.tb-mobile-search-validate-ticket{flex:unset}.empty-results-wrapper.tb-mobile-search-validate-ticket span{font-family:Quicksand,Quicksand Local,Roboto,Roboto Local,sans-serif;font-size:17px;font-weight:700;text-align:center}.empty-results-wrapper.tb-mobile-search-validate-ticket tb-icon{display:none}.empty-results-wrapper.has-leading-icon{flex-direction:column;align-items:center;justify-content:center;gap:16px}.empty-results-wrapper.has-leading-icon .empty-results-message{display:block}.empty-results-wrapper .empty-results-message{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;align-items:center;color:#919eab;cursor:default;text-align:center}\n"] }]
143541
+ ], template: "<div class=\"empty-results-wrapper {{options?.cssClass}}\" [class.has-leading-icon]=\"options?.icon !== undefined\">\n <!-- SPRK3-13627: leading icon, above the message. Absent unless a caller sets options.icon. -->\n <tb-icon *ngIf=\"options?.icon !== undefined\" [settings]=\"options?.icon\" [setCursorPointer]=\"false\" class=\"tb-icon-30 empty-results-icon\"></tb-icon>\n <ng-container *ngIf=\"options?.searchValue else noMessageValue\">\n <span class=\"empty-results-message\" [innerHTML]=\"options?.noDataMessage | translate:{ searchValue: options?.searchValue}\"></span>\n </ng-container>\n <ng-template #noMessageValue>\n <span class=\"empty-results-message\" [innerHTML]=\"options?.noDataMessage | translate\"></span>\n </ng-template>\n <tb-icon *ngIf=\"options?.tooltip?.icon\" [settings]=\"options?.tooltip?.icon\" class=\"tb-icon-30\" tabindex=\"0\" role=\"img\" [attr.aria-label]=\"L.info | translate\" [matTooltip]=\"options?.tooltip?.text | translate\"\n [matTooltipPosition]=\"options?.tooltip?.position\">\n </tb-icon>\n</div>\n", styles: [":host{display:flex;flex-direction:column;flex-grow:1}:host.tb-mobile-search-validate-ticket{border:none}.empty-results-wrapper{display:flex;flex:1;justify-content:center}.empty-results-wrapper.tb-search-validate-ticket,.empty-results-wrapper.tb-mobile-search-validate-ticket{flex:unset}.empty-results-wrapper.tb-mobile-search-validate-ticket span{font-family:Quicksand,Quicksand Local,Roboto,Roboto Local,sans-serif;font-size:17px;font-weight:700;text-align:center}.empty-results-wrapper.tb-mobile-search-validate-ticket tb-icon{display:none}.empty-results-wrapper.has-leading-icon{flex-direction:column;align-items:center;justify-content:center;gap:16px}.empty-results-wrapper.has-leading-icon .empty-results-message{display:block}.empty-results-wrapper .empty-results-message{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;align-items:center;color:#5f6b78;cursor:default;text-align:center}\n"] }]
143094
143542
  }], ctorParameters: () => [], propDecorators: { options: [{
143095
143543
  type: Input
143096
143544
  }] } });
@@ -143101,7 +143549,7 @@ class ErrorResultsComponent extends BaseComponent {
143101
143549
  this.IconsHelper = IconsHelper;
143102
143550
  }
143103
143551
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ErrorResultsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
143104
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ErrorResultsComponent, isStandalone: true, selector: "tb-error-results", usesInheritance: true, ngImport: i0, template: "<div class=\"tb-loading-error\">\n <tb-icon [settings]=\"IconsHelper.info_gray\" class=\"cursor-default\"></tb-icon>\n <div class=\"error-general error-primary tb-center-text\">{{ L.something_went_wrong | translate }}</div>\n <div class=\"error-general error-secondary tb-center-text\">{{ L.please_contact_us_to_report_the_error | translate }}\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}.tb-loading-error{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;height:100%;justify-content:center;align-items:center;flex-direction:column;color:#919eab;padding:20px 0}.tb-loading-error .error-general{margin-top:10px;font-weight:500}.tb-loading-error .error-general.error-primary{font-size:15px}.tb-loading-error .error-general.error-secondary{font-size:13px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
143552
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ErrorResultsComponent, isStandalone: true, selector: "tb-error-results", usesInheritance: true, ngImport: i0, template: "<div class=\"tb-loading-error\">\n <tb-icon [settings]=\"IconsHelper.info_gray\" class=\"cursor-default\"></tb-icon>\n <div class=\"error-general error-primary tb-center-text\">{{ L.something_went_wrong | translate }}</div>\n <div class=\"error-general error-secondary tb-center-text\">{{ L.please_contact_us_to_report_the_error | translate }}\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}.tb-loading-error{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;height:100%;justify-content:center;align-items:center;flex-direction:column;color:#5f6b78;padding:20px 0}.tb-loading-error .error-general{margin-top:10px;font-weight:500}.tb-loading-error .error-general.error-primary{font-size:15px}.tb-loading-error .error-general.error-secondary{font-size:13px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
143105
143553
  }
143106
143554
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ErrorResultsComponent, decorators: [{
143107
143555
  type: Component,
@@ -143109,7 +143557,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
143109
143557
  CommonModule,
143110
143558
  IconModule,
143111
143559
  LocalizationModule,
143112
- ], template: "<div class=\"tb-loading-error\">\n <tb-icon [settings]=\"IconsHelper.info_gray\" class=\"cursor-default\"></tb-icon>\n <div class=\"error-general error-primary tb-center-text\">{{ L.something_went_wrong | translate }}</div>\n <div class=\"error-general error-secondary tb-center-text\">{{ L.please_contact_us_to_report_the_error | translate }}\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}.tb-loading-error{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;height:100%;justify-content:center;align-items:center;flex-direction:column;color:#919eab;padding:20px 0}.tb-loading-error .error-general{margin-top:10px;font-weight:500}.tb-loading-error .error-general.error-primary{font-size:15px}.tb-loading-error .error-general.error-secondary{font-size:13px}\n"] }]
143560
+ ], template: "<div class=\"tb-loading-error\">\n <tb-icon [settings]=\"IconsHelper.info_gray\" class=\"cursor-default\"></tb-icon>\n <div class=\"error-general error-primary tb-center-text\">{{ L.something_went_wrong | translate }}</div>\n <div class=\"error-general error-secondary tb-center-text\">{{ L.please_contact_us_to_report_the_error | translate }}\n </div>\n</div>\n", styles: [":host{display:flex;flex-direction:column;height:100%;width:100%}.tb-loading-error{font-family:Open Sans,Open Sans Local,Roboto,Roboto Local,sans-serif;display:flex;height:100%;justify-content:center;align-items:center;flex-direction:column;color:#5f6b78;padding:20px 0}.tb-loading-error .error-general{margin-top:10px;font-weight:500}.tb-loading-error .error-general.error-primary{font-size:15px}.tb-loading-error .error-general.error-secondary{font-size:13px}\n"] }]
143113
143561
  }], ctorParameters: () => [] });
143114
143562
 
143115
143563
  class LoadingOverlayComponent extends BaseComponent {
@@ -143353,7 +143801,7 @@ class LogoComponent extends BaseComponent {
143353
143801
  ngOnInit() {
143354
143802
  }
143355
143803
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LogoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
143356
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LogoComponent, isStandalone: true, selector: "tb-logo", inputs: { classImage: "classImage" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"image$ | async as image\">\n <div [class.tb-h-60]=\"image\" class=\"tb-logo-wrapper {{classImage}}\">\n <img class=\"image-logo\" [src]=\"image\">\n </div>\n</ng-container>\n", styles: [":host{width:100%}.tb-logo-wrapper{display:flex;justify-content:center}.tb-logo-wrapper.tb-user-menu-logo{height:20px!important;max-width:50px;margin:5px 10px}.image-logo{max-width:100%;object-fit:contain}.mobile-menu-logo{margin:0;padding:5px 6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TenantLogoModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
143804
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: LogoComponent, isStandalone: true, selector: "tb-logo", inputs: { classImage: "classImage" }, usesInheritance: true, ngImport: i0, template: "<ng-container *ngIf=\"image$ | async as image\">\n <div [class.tb-h-60]=\"image\" class=\"tb-logo-wrapper {{classImage}}\">\n <img class=\"image-logo\" [src]=\"image\" alt=\"\">\n </div>\n</ng-container>\n", styles: [":host{width:100%}.tb-logo-wrapper{display:flex;justify-content:center}.tb-logo-wrapper.tb-user-menu-logo{height:20px!important;max-width:50px;margin:5px 10px}.image-logo{max-width:100%;object-fit:contain}.mobile-menu-logo{margin:0;padding:5px 6px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: TenantLogoModule }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
143357
143805
  }
143358
143806
  __decorate([
143359
143807
  Select(LogoState.image)
@@ -143363,7 +143811,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
143363
143811
  args: [{ selector: 'tb-logo', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
143364
143812
  CommonModule,
143365
143813
  TenantLogoModule,
143366
- ], template: "<ng-container *ngIf=\"image$ | async as image\">\n <div [class.tb-h-60]=\"image\" class=\"tb-logo-wrapper {{classImage}}\">\n <img class=\"image-logo\" [src]=\"image\">\n </div>\n</ng-container>\n", styles: [":host{width:100%}.tb-logo-wrapper{display:flex;justify-content:center}.tb-logo-wrapper.tb-user-menu-logo{height:20px!important;max-width:50px;margin:5px 10px}.image-logo{max-width:100%;object-fit:contain}.mobile-menu-logo{margin:0;padding:5px 6px}\n"] }]
143814
+ ], template: "<ng-container *ngIf=\"image$ | async as image\">\n <div [class.tb-h-60]=\"image\" class=\"tb-logo-wrapper {{classImage}}\">\n <img class=\"image-logo\" [src]=\"image\" alt=\"\">\n </div>\n</ng-container>\n", styles: [":host{width:100%}.tb-logo-wrapper{display:flex;justify-content:center}.tb-logo-wrapper.tb-user-menu-logo{height:20px!important;max-width:50px;margin:5px 10px}.image-logo{max-width:100%;object-fit:contain}.mobile-menu-logo{margin:0;padding:5px 6px}\n"] }]
143367
143815
  }], ctorParameters: () => [], propDecorators: { image$: [], classImage: [{
143368
143816
  type: Input
143369
143817
  }] } });
@@ -143392,7 +143840,7 @@ class ModalButtonsWrapperComponent extends BaseComponent {
143392
143840
  this.minimize.next(this.isMinimized);
143393
143841
  }
143394
143842
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalButtonsWrapperComponent, deps: [{ token: i1$2.Store }], target: i0.ɵɵFactoryTarget.Component }); }
143395
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ModalButtonsWrapperComponent, isStandalone: true, selector: "tb-modal-buttons-wrapper", inputs: { enabledMinimized: "enabledMinimized" }, outputs: { close: "close", minimize: "minimize" }, usesInheritance: true, ngImport: i0, template: "<tb-icon *ngIf=\"enabledMinimized\" (click)=\"toggleMinimize()\" [settings]=\"isMinimized ? IconsHelper.fullscreen : IconsHelper.minus\"\n class=\"tb-button tb-icon-30 modal-minimize-icon tb-mr-5\" [class.disabled]=\"isMinimizeIconDisabled$ | async\">\n</tb-icon>\n\n<tb-icon (click)=\"close.next()\" [settings]=\"IconsHelper.cancel\" class=\"tb-button tb-icon-30 modal-close-icon\" [attr.data-qa]=\"DataQaAttribute.close\">\n</tb-icon>", styles: [":host{display:flex}tb-icon:hover{height:30px;width:30px;border-radius:4px;background-color:#ecedf0}tb-icon.disabled{opacity:.5;cursor:default;pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: MatDialogModule }] }); }
143843
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ModalButtonsWrapperComponent, isStandalone: true, selector: "tb-modal-buttons-wrapper", inputs: { enabledMinimized: "enabledMinimized" }, outputs: { close: "close", minimize: "minimize" }, usesInheritance: true, ngImport: i0, template: "<tb-icon *ngIf=\"enabledMinimized\" (click)=\"toggleMinimize()\" [settings]=\"isMinimized ? IconsHelper.fullscreen : IconsHelper.minus\"\n [tbIconButton]=\"(isMinimized ? L.restore : L.minimize) | translate\"\n class=\"tb-button tb-icon-30 modal-minimize-icon tb-mr-5\" [class.disabled]=\"isMinimizeIconDisabled$ | async\">\n</tb-icon>\n\n<tb-icon (click)=\"close.next()\" [settings]=\"IconsHelper.cancel\" class=\"tb-button tb-icon-30 modal-close-icon\" [attr.data-qa]=\"DataQaAttribute.close\"\n [tbIconButton]=\"L.close | translate\">\n</tb-icon>", styles: [":host{display:flex}tb-icon:hover{height:30px;width:30px;border-radius:4px;background-color:#ecedf0}tb-icon.disabled{opacity:.5;cursor:default;pointer-events:none}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }, { kind: "ngmodule", type: IconModule }, { kind: "component", type: IconComponent, selector: "tb-icon", inputs: ["setCursorPointer", "facilityCommandIcon", "remoteCommandIcon", "settings"] }, { kind: "ngmodule", type: MatSnackBarModule }, { kind: "ngmodule", type: MatDialogModule }, { kind: "directive", type: IconButtonDirective, selector: "[tbIconButton]", inputs: ["tbIconButton"] }, { kind: "ngmodule", type: LocalizationModule }, { kind: "pipe", type: i1$4.TranslatePipe, name: "translate" }] }); }
143396
143844
  }
143397
143845
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalButtonsWrapperComponent, decorators: [{
143398
143846
  type: Component,
@@ -143400,8 +143848,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
143400
143848
  CommonModule,
143401
143849
  IconModule,
143402
143850
  MatSnackBarModule,
143403
- MatDialogModule
143404
- ], template: "<tb-icon *ngIf=\"enabledMinimized\" (click)=\"toggleMinimize()\" [settings]=\"isMinimized ? IconsHelper.fullscreen : IconsHelper.minus\"\n class=\"tb-button tb-icon-30 modal-minimize-icon tb-mr-5\" [class.disabled]=\"isMinimizeIconDisabled$ | async\">\n</tb-icon>\n\n<tb-icon (click)=\"close.next()\" [settings]=\"IconsHelper.cancel\" class=\"tb-button tb-icon-30 modal-close-icon\" [attr.data-qa]=\"DataQaAttribute.close\">\n</tb-icon>", styles: [":host{display:flex}tb-icon:hover{height:30px;width:30px;border-radius:4px;background-color:#ecedf0}tb-icon.disabled{opacity:.5;cursor:default;pointer-events:none}\n"] }]
143851
+ MatDialogModule,
143852
+ IconButtonDirective,
143853
+ LocalizationModule,
143854
+ ], template: "<tb-icon *ngIf=\"enabledMinimized\" (click)=\"toggleMinimize()\" [settings]=\"isMinimized ? IconsHelper.fullscreen : IconsHelper.minus\"\n [tbIconButton]=\"(isMinimized ? L.restore : L.minimize) | translate\"\n class=\"tb-button tb-icon-30 modal-minimize-icon tb-mr-5\" [class.disabled]=\"isMinimizeIconDisabled$ | async\">\n</tb-icon>\n\n<tb-icon (click)=\"close.next()\" [settings]=\"IconsHelper.cancel\" class=\"tb-button tb-icon-30 modal-close-icon\" [attr.data-qa]=\"DataQaAttribute.close\"\n [tbIconButton]=\"L.close | translate\">\n</tb-icon>", styles: [":host{display:flex}tb-icon:hover{height:30px;width:30px;border-radius:4px;background-color:#ecedf0}tb-icon.disabled{opacity:.5;cursor:default;pointer-events:none}\n"] }]
143405
143855
  }], ctorParameters: () => [{ type: i1$2.Store }], propDecorators: { enabledMinimized: [{
143406
143856
  type: Input
143407
143857
  }], close: [{
@@ -143573,5 +144023,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
143573
144023
  * Generated bundle index. Do not edit.
143574
144024
  */
143575
144025
 
143576
- export { ACCESS_PROFILE_DAT_TYPES_SP, ACTION_STATUS, ACTIVE_BYTE, ADVANCED_OPTIONS_VALUE, ADVANCED_PERMISSION_DEPENDENCIES, AES_DEFAULT_IV, ALERT_DESCRIPTION_DISPLAY_LENGTH, ALERT_NOTIFICATION_CONTAINER, ALLOWED_FILES_FORMATS, ALLOWED_FILES_MAX_SIZE_1_MB, ALLOWED_FILES_MAX_SIZE_200_KB, ALLOWED_FILES_MAX_SIZE_2_MB, ALLOWED_FILES_MAX_SIZE_MB, ALLOWED_NUMBER_OF_DAYS, ALLOWED_UPLOAD_FILES_QUANTITY, ALL_DAYS_IN_BINARY, ALL_DAYS_IN_BYTE, AccessModeIconPipe, AccessProfileChangeValidTypesText, AccessProfileDayTypesText, AccessProfileRestrictionTypesText, AccessProfileShortDayTypesText, AccessProfileSpecialDaysMap, AccessProfileTypesText, AccountFrameMessageBarComponent, AccountLinkedEntitiesText, AccountLinkedEntityText, AccountSetPasswordAction, AccountSetPasswordErrorAction, AccountSetPasswordInitAction, ActionStatusService, AddSmartparkAction, AddUserAction, AdministrativeNotificationEntityType, AdministrativeNotificationsModule, AdministrativeNotificationsState, AggregatedStatusText, AlertChangedAction, AlertNotificationBorderClass, AlertNotificationClassificationMap, AlertNotificationComponent, AlertNotificationService, AlertsAndNotificationsService, AlertsAndNotificationsState, AlertsDeviceTypeLabel, AlertsDeviceTypeOptions, AlertsDeviceTypeOptionsMapping, AmountStepSurchargeMinLimit, AnalyticsCommandsText, AnalyticsEventsText, AnalyticsService, AnalyticsSourceComponent, AnalyticsSourceProps, AppConfigService, AppModuleService, AppModuleToMainPermissionTypeMap, AppSectionLabel, AppSectionModuleMenuOrder, AppSectionRoute, AppSettingsService, AppType, AuditActionTypeText, AuditLogoutAction, AuthModule, AuthRouteGuard, AuthService, AuthTokenService, Authenticate2FAforUser, AuthenticateMultipleTenantsAction, AutofocusDirective, BC_DS_P_VALIDATION, BOM_UNICODE, BackOfficeParkerType, BackofficeAutheticateAction, BarcodeTypeLength, BarrireStateText, BaseComponent, BaseDeviceItemComponent, BaseDeviceService, BaseFacilityCommandsConfigService, BaseFacilityCommandsService, BaseNotificationService, BillDispenserStatusText, BillTypeText, BillValidatorStatusText, ButtonStatus, CANCEL_ALL_RELAY_VALUE, CLogItPipe, COLORS, CREDIT_CARD_POSTFIX_LENGTH, CalculatorModule, CalculatorState, CanDeactivateService, CancelWhatsAppReceiptAction, CarModule, CarState, CassetteStatusText, CategoryModule, CategoryState, CentToCoinPipe, ChangeLanguageAction, ChangePasswordAction, ChartLayout, CleanLogoAction, ClearAdministrativeNotificationsAction, ClearAdministrativeNotificationsByEntityTypeAction, ClearAlertsAndNotificationsAction, ClearBaseZonesAction, ClearCalculatorPriceAction, ClearCategoriesAction, ClearColorsAction, ClearConflictDetected, ClearDeviceAction, ClearDeviceEventsExpanded, ClearDevicesAction, ClearEventActivitiesExpanded, ClearFacilityDictionaryAction, ClearGroupsAction, ClearGuestAction, ClearGuestProfilesAction, ClearGuestsListAction, ClearHandledGuest, ClearInactiveSelectedParkAction, ClearJobTitlesAction, ClearLocateTicketSearchAction, ClearLocatedTicketAction, ClearLprTransactionsExpanded, ClearMacroCommandsAction, ClearModelsAction, ClearParkerAction, ClearRateAction, ClearSearchResultsAction, ClearSearchTermAction, ClearSearchTicketAction, ClearSelectedFacilityAction, ClearSelectedParkAction, ClearSelectedRow, ClearSelectedSmartparkAction, ClearSmartparksBasicAction, ClearSpAndSparkVersionsAction, ClearSpecialTransientTablesAction, ClearSuspendedParkActivitiesAction, ClearUserSettingsByCategoryAction, ClearUsersAction, ClearValidationTypesAction, ClearZoneAction, ClearZonesAction, ClearZsAction, cloudServiceProxies as Cloud, CloudConfirmDialogComponent, CofCredentialSubTypeText, CoinStatusText, CollapsedGuestsByBatchIdAction, ComAggregatedStatus, ComAggregatedStatusText, ComStatusIconComponent, CommandCenterModuleResolver, CommandNotificationBorderClass, CommandNotificationComponent, CommandNotificationDisplayCase, CommandNotificationService, CommandNotificationType, CommandsLocalizationKey, CommonPagesModule, CompanyService, ConfigResolver, ConnectSmartparkAction, ContainerRefDirective, CoreEntities, CouponSearchFieldSelectorText, CreateBasicBatchAction, CreateBasicGuestAction, CreateBatchAction, CreateCategoryAction, CreateColorAction, CreateGroupAction, CreateGuestAction, CreateJobTitleAction, CreateModelAction, CreateOrUpdateSMTPDetailsAction, CredentialTypeText, CreditCardTypeText, CrudOperationText, CurlyToBoldPipe, DATA_IMAGE_BASE64_PREFIX, DATE_TIME_ERROR_INVALID_DATE, DATE_TIME_ERROR_INVALID_DATE_RANGE, DATE_TIME_ERROR_REQUIRED, DEFAULT_DATE_FORMAT, DEFAULT_EXPIRATION_MONTHS_COUNT, DEFAULT_MINIMUM_LENGTH, DEFAULT_MODULE, DEFAULT_PASSWORD_HISTORY_COUNT, DEFAULT_PERMITTED_CREDENTIALS, DEFAULT_SMART_PARK_DATE_TIME, DEFAULT_SORT_MENU, DEFAULT_SPECIAL_TRANSIENT_CATEGORY, DEFAULT_STICKER_NUM, DEVICE_EVENT_OPTIONS_KEY, DEVICE_NAVIGATE_KEY, DISABLED_FOCUS_ELEMENT_CLASSES, DISABLED_FOCUS_ELEMENT_TYPES, DYNAMIC_PRICING_CONDITION, DataQaAttribute, DateService, DateValidityText, DaysText, DecimalToAmountPipe, DecimalToCurrencyPipe, DefaultImageTimeout, DeleteCategoryAction, DeleteGroupAction, DeleteGuestAction, DeleteJobTitleAction, DeleteLogoAction, DeleteUserAction, DetectBrowserService, DeviceActivityChangedAction, DeviceActivityLabel, DeviceActivityMode, DeviceActivityModeIcon, DeviceActivityModeText, DeviceActivityStatus, DeviceActivityType, DeviceAggregatedStatus, DeviceAggregatedStatusText, DeviceEventChangedAction, DeviceIconComponent, DeviceIndicationStatus, DeviceLaneTypes, DeviceLoop, DeviceModule, DevicePipeModule, DevicePrinterStatusText, DeviceRemoteCommandsService, DeviceSortBy, DeviceStatusBaseComponent, DeviceStatusChangedAction, DeviceTypeIconName, DeviceTypeText, DeviceTypesAlertsMapping, DevicesViewMode, DialogMode, DipSwitchStatus, Disable2FAAction, DisableUserSSOAction, DisconnectSmartParkAction, DoorSensorStatus, DoorStatusText, DurationMessageBar, DynamicContainerComponent, DynamicEllipsisTooltipDirective, ENGLISH_LANGUAGE, ENVIRONMENT, EXPIRATION_MONTHS_COUNT_OPTIONS, edgeServiceProxies as Edge, EditUserAction, ElectronicWalletPaymentMethodTypesText, EllipsisMultilineDirective, EmailServerModule, EmailServerState, EmptyResultsComponent, Enable2FAAction, EnumsToArrayPipe, EnvironmentModeText, ErrorPageComponent, ErrorPageResolver, ErrorResultsComponent, ExceedingBehaviorTypeText, ExpandGuestsByBatchIdAction, ExportFileService, ExportGuestsAction, ExportPdfSmartparksTableAction, ExportSmartparkAction, FONT_BASE64, FacilitiesAndSmartparksState, FacilityChangedAction, FacilityMenuService, FacilityModule, FacilityRemoteCommandExecutedAction, FacilityRemoteCommandTypesIcon, FacilityRemoteCommandsLocalizationKey, FacilityRemoteCommandsMenuItems, FacilityService, FacilityState, FieldLabelComponent, FieldValidationsComponent, FileGenerateMethod, FileSanitizerService, FileService, FilterByDeviceType, FilterDevicesByTypePipe, FilterDevicesByZonePipe, FilterKeysPipe, FilterNumbersPipe, FilterPipe, FlattenedCoreEntities, FloatMessageBarService, ForgotPasswordAction, ForgotPasswordTenantlessAction, FormValidationsComponent, FormattedInputDirective, FrequentParkingActionText, FrequentParkingErrorActionText, GATE_STATE_VALUE, GeneralActionService, GenerateSearchParamsDto, GenerateSlimSearchParamsDto, GetAllLocalizationsAction, GetLogoAction, GetRateByIdAction, GetSpecialTransientTablesAction, GetUserSettingsByCategoryAction, GlobalErrorService, GlobalMessageContainerComponent, GroupModule, GroupPermissionsPipe, GroupState, GuestModule, GuestOpenTicketChoice, GuestOpenTicketDialogComponent, GuestOpenTicketResolutionService, GuestSearchFieldSelectorText, GuestState, GuestTypeCastText, GuestTypesText, HOUR_FORMAT_12, HOUR_FORMAT_24, HOUR_FORMAT_FULL_DAY, HandleAlertsAction, HandleNotificationAction, HandledNotificationAction, HasActionErrored, HealthAction, HoldRelayMode, HoldRelayModeText, HopperStatusText, HotelGuestSearchFieldSelectorText, HtmlSanitizerService, HttpCancelBlackListUrls, HttpCancelInterceptor, HttpCancelService, HumanizePipe, INPUT_SEARCH_DEBOUNCE_TIME, INPUT_SEARCH_DEBOUNCE_TIME_LOW, INPUT_SEARCH_DEBOUNCE_TIME_MEDIUM, IconColumnComponent, IconComponent, IconModule, IconsHelper, IconsHelperText, identityServiceProxies as Identity, ImportMonthyStastusFieldSelectorText, InitAddSmartparkConnectionAction, InitSMTPDetailsAction, InitSessionFromLocalStorageAction, InitSmartparkTransportAction, IntercomComponent, InternetConnectionService, InternetConnectionStatus, IsActionExecuting, IsEllipsisDirective, JobTitleModule, JobTitleState, LOCAL_ENGLISH_LANGUAGE, LOCATION_OPTIONS, LOGGED_TENANT_KEY, LOOKUP_NAME_MAX_LENGTH, LanguageTypeKeys, LayoutModule, LayoutState, Load2FAUserAction, LoadAccessProfileBaseZonesAction, LoadAccessProfileZoneAction, LoadAccessProfileZonesAction, LoadAdministrativeNotificationsAction, LoadAlertsAndNotificationsAction, LoadAppConfigurationAction, LoadBackofficeAppConfigurationAction, LoadBackofficeSmartparksTableAction, LoadBackofficeSpAndSparkVersionsAction, LoadBackofficeVarByIdAction, LoadBackofficeVarsAction, LoadCalculatorPriceAction, LoadCategoriesAction, LoadCcMainBaseZonesAction, LoadCcMainZonesAction, LoadColorsAction, LoadColorsAction1, LoadColorsAction2, LoadColorsAction3, LoadColorsAction4, LoadColorsAction5, LoadDeviceAction, LoadDeviceEventActivitiesAction, LoadDeviceEventsAction, LoadDeviceEventsCollapse, LoadDeviceLprTransactionsAction, LoadDeviceStatusAction, LoadDevicesAction, LoadDevicesByTypeAction, LoadDynamicPricingBaseZonesAction, LoadDynamicPricingZoneAction, LoadEventActivitiesCollapse, LoadFacilityAction, LoadFacilityRemoteCommandsRefAction, LoadGroupAction, LoadGuestByIdAction, LoadGuestProfilesAction, LoadGuestsAction, LoadGuestsByBatchIdAction, LoadGuestsByBatchIdCancelledAction, LoadJobTitleAction, LoadLocateTicketSearchAction, LoadLocatedTicketAction, LoadLprTransactionsCollapse, LoadMacroCommandsAction, LoadModelsAction, LoadModelsAction1, LoadModelsAction2, LoadModelsAction3, LoadModelsAction4, LoadModelsAction5, LoadOverflowPriceTableAction, LoadParkActivitiesAction, LoadParkDevicesAction, LoadParkerAction, LoadParkersAction, LoadParkingLotAction, LoadParksAction, LoadRateByIdAction, LoadRatesAction, LoadRemoteCommandsRefAction, LoadReportsBaseZonesAction, LoadReportsZoneAction, LoadReportsZonesAction, LoadSMTPDetailsAction, LoadSelectedDeviceAction, LoadSmartparksAction, LoadSmartparksDropdownAction, LoadSmartparksTableAction, LoadSpAndSparkVersionsAction, LoadStickerPriceTableAction, LoadTicketNumParkersAction, LoadTransientPriceTableAction, LoadUserCapabilitiesAction, LoadUsersAction, LoadUsersAdministrativeNotificationsAction, LoadValidationTypeAction, LoadVarsAction, LoadZsAction, LoadingOverlayComponent, LocalStorageMigrator, LocalStorageService, Localization, LocalizationModule, LocalizationResolver, LocalizationService, LocalizationState, LoginModule, LoginRequestAction, LoginService, LoginState, LoginSuccess, LogoComponent, LogoState, LogoutAction, LogoutMobileAction, LoopStatus, LowerCaseUrlSerializer, LprTransactionsChangedAction, LprTransactionsOptionsText, LprTransactionsSearchFieldSelectorText, MANUAL_ACTION_REASON_NAME_MAX_LENGTH, MAX_ALLOWED_BADGE_VALUE, MAX_ALLOWED_CURRENT_BALANCE, MAX_ALLOWED_DEDUCTION_VALUE, MAX_ALLOWED_GUEST_UNIT_QUANTITY, MAX_ALLOWED_IDENTIFIER_VALUE, MAX_ALLOWED_STARTING_PURSE_VALUE, MAX_CAPACITY_VALUE, MAX_CARDS, MAX_CAR_PLATES, MAX_EMAIL_CHARACTERS_LENGTH, MAX_EXPORT_RECORDS, MAX_HOTEL_ROOM_NUMBER_LENGTH, MAX_INT16_VALUE, MAX_INT32_VALUE, MAX_INTEGER_VALUE, MAX_LENGTH_BATCH_NAME, MAX_LENGTH_DESCRIPTION_50, MAX_LENGTH_DESCRIPTION_70, MAX_LENGTH_FOOTER, MAX_LENGTH_LEFT, MAX_LENGTH_LEFT_BACKWARD_COMPATIBILITY, MAX_LENGTH_MANUAL_TEXT, MAX_LENGTH_NAME_100, MAX_LENGTH_NAME_20, MAX_LENGTH_NAME_25, MAX_LENGTH_NAME_30, MAX_LENGTH_NAME_50, MAX_LENGTH_NOTES, MAX_LENGTH_QUANTITY, MAX_LENGTH_REASON_DESCRIPTION, MAX_LENGTH_SERACH_TERM, MAX_LENGTH_SERACH_TERM_30, MAX_MOBILE_LENGTH, MAX_NUMBER_OF_NIGHTS, MAX_NUMBER_OF_ROW_IN_MENU, MAX_OCCUPANCY_VALUE, MAX_PERIOD_TIME, MAX_PLATE_ID_LENGTH, MAX_PRICE_NO_TIME_LIMIT_VALUE, MAX_PRICE_PERIOD_VALUE, MAX_REPEAT_COUNT_VALUE, MAX_RESULTS, MAX_ROLE_NAME_LENGTH, MAX_SP, MAX_TIME_RANGE_ITEMS_PER_KEY, MC_READER_ID, MESSAGE_BAR_DEFAULT_ID, MINIMUM_DROPDOWN_RESULTS_WITHOUT_SEARCH, MINIMUM_LENGTH_OPTIONS, MINUTES_PER_HOUR, MIN_ALLOWED_GUEST_UNIT_QUANTITY, MIN_LENGTH_QUANTITY, MIN_NUMBER_OF_ROW_IN_MENU, MIN_TIME_RANGE_ITEMS_PER_KEY, MOBILE_REFRESH_INFO, MSALGuardConfigFactory, MSALInstanceFactory, MSALInterceptorConfigFactory, MSLAuthService, MULTIPLE, MainModuleToSubModulesPermissionTypeMap, MatHintErrorDirective, MaxAllowedSurchargeAmount, MaxAllowedSurchargeMaxLimit, MaxAllowedSurchargeMinLimit, MaxDisplayTimeout, MaxIPV4TextLength, MaxSurchargeNameLength, MenuAppModuleLoadAction, MenuClearAction, MenuLoadAction, MenuService, MenuSubModuleClearAction, MenuSubModuleLoadAction, MessageBarComponent, MessageBarContainerComponent, MessageBarModule, MessageBarPosition, MessageBarService, MessageBarStatus, MiddayPeriod, MinAllowedSurchargeAmount, MinAllowedSurchargeMaxLimit, MinAllowedSurchargeMinLimit, MinDisplayTimeout, MobileAppSectionLabel, MobileLogoutAction, ModalButtonsWrapperComponent, ModalService, ModuleGuard, ModuleMenuBaseComponent, MonthlyRenewalSettingsActionTypesText, MonthlyRenewalSettingsActionTypesValueText, MonthlySearchFieldSelectorText, MslEventType, NONE_ACTIVE_BYTE, NONE_USER_ID, NO_RESULT, NativeElementInjectorDirective, NotSupportedBrowserGuard, NotSupportedBrowserPageComponent, NotificationChangedAction, NotificationClass, NotificationClassficationType, NotificationCloseAllButtonComponent, NotificationConfig, NotificationEventService, NotificationHPositions, NotificationModule, NotificationSeverityText, NotificationTypeLabelComponent, NotificationTypeText, NotificationVPositions, NotificationsModule, ONE_DAY_IN_MINUTES_VALUE, ONE_MINUTE_IN_MILLISECONDS, ONE_SECOND_IN_MILLISECONDS, OPEN_TICKET_CHECK_MIN_VERSION, OPEN_TICKET_CHECK_NOTICE_DELAY_MS, OffScreenDirective, OpenIdAuthInitializeService, OpenIdAuthService, OpenIdAutheticateAction, Operator, OrderBy, OrderByPipe, OrderDirection, OrphanFacilitiesPipe, PARKER_SEARCH_AUTO_REDIRECT, PASSWORD_EXPIRED, PASSWORD_HISTORY_COUNT_OPTIONS, PREVENT_CLICK_ELEMENT_CLASSES, ParkActivitiesModule, ParkActivitiesState, ParkActivityChangedAction, ParkConnectionStatus, ParkConnectionStatusClass, ParkConnectionStatusText, ParkManagerModule, ParkManagerState, ParkService, ParkTimeService, ParkerSearchTerm, ParkerService, ParkerState, ParkerTagsText, ParkerTypesText, PasswordScore, PasswordStrengthService, PaymentSearchFieldSelectorText, PaymentServiceTypeText, PaymentsTypesText, PermissionCacheService, PermissionConfigService, PermissionGroupText, PermissionTypeSupportedVersionDictionary, PermissionTypeText, PermissionsService, PrintReceiptAction, ProfileTypeText, QUERY_INTENT_PATTERNS, RATE_ID_WITH_VALUE_2, REDIRECT_URL, RELAY_2_VALUE, RELAY_3_VALUE, RELAY_4_VALUE, REPORT_CATEGORY_ALL, RESET_PASSWORD_EMAIL, RESTRICTED_CAR_NOTE_MAX_LENGTH, REVENUE_DATA_UNAVAILABLE, RTL_LANGUAGES, RTObjectObject, RangeModes, RangeModesText, RateModule, RateState, RealtimeEventService, RealtimeResolver, ReceiptGeneratedAction, RefreshTokenService, RefreshTokenState, RelayStatus, ReloadParkerAction, RemoteCommandService, RemoteCommandTypesIcon, RemoteValidationModule, RemoteValidationState, RemoveExpiredAlertsAndNotificationsAction, RemoveSmartparkBasicAction, ReportMethodDictionary, ResendPendingAdminInvitationsAction, ResendUserInvitationAction, ResetRatesAction, RestartLinkComponent, RestartLinkModule, RestrictionLocationTypeText, RestrictionLocationTypeTextTable, RestrictionTypeText, RevenueService, RouteService, RowOperation, rpcServiceProxies as Rpc, SESSION, SPECIAL_TRANSIENT_CATEGORIES, SPECIAL_TRANSIENT_LABEL_NOT_AVAILABLE, STATUS_CODE_SERVER_VALIDATION, STATUS_CODE_UNAUTHORIZED, STRING_ZERO, SUPER_PARK_ROUTE_KEY, SUPPORETD_RESTORE_TICKET_TYPES, SUPPORTED_CAR_ON_LOOP_DEVICE_TYPES, SUPPORTED_DEVICES_SCHEDULER, SUPPORTED_GATE_DEVICE_TYPES, SUPPORTED_LPR_TRANSACTIONS_DEVICE_TYPES, SUPPORTED_PAYMENT_FOR_ISF_TYPES, SUPPORTED_RESTORE_TICKET_DEVICE_TYPES, SUPPORTED_STATUS_DEVICE_TYPES, SUPPORTED_TICKET_INSIDE_DEVICE_TYPES, SYSTEM_ALERT_VALUE, SanitizedInnerHtmlDirective, SearchFacilitiesMode, SearchFieldSelectorText, SearchTicketAction, SearchValueHighlightComponent, SecurityModule, SecurityState, SelectDeviceAction, SelectLprTransactionsRowAction, SelectParkAction, SelectSmartParkAction, SelectedRowAction, SendEmailFromEntityAction, SendEmailToGuestAction, SendGuestPassesToEmailAction, SendTestEmailAction, ServiceProxyModule, ServicesRunningStatusChangedAction, SessionState, SessionStorageService, SetBackofficeSmartParkVersionsAction, SetBasicMenuAction, SetConflictDetected, SetDeviceEventsExpanded, SetDeviceRemoteCommandsMapAction, SetDeviceStatusAction, SetDeviceViewModeAction, SetEnableHotelPostingAction, SetEventActivitiesExpanded, SetFacilityRemoteCommandsMapAction, SetGuestsAction, SetLprTransactionsExpanded, SetMobileModeAction, SetParkActivitiesAction, SetRealTimeEventStatusAction, SetSearchTermAction, SetSelectedParkAction, SetSelectedSmartparkAction, SetSmartParkAction, SetSmartParkTableAction, SetSmartParkVersionsAction, SetSmartparkBasicAction, SetSmartparkBasicAllAction, SetSmartparkEdgeWebhooksAction, SetStateAction, SetTFASetupAction, SetTenantUserAction, SetTicketIdentifierAction, SetUserNameAction, SetUserStatusAction, SetUsersAction, SetkeepMeLoggedInAction, SharedComponentsModule, SharedDirectivesModule, SharedModule, SharedPipesModule, SideNavSortBy, SidenavModule, SidenavState, SignalR, SignalRObject, SignalRRefreshTokenAction, SingleSignOnProviderText, SmartParkDeviceStatusChangedAction, SmartParkStatusText, SmartparkDateTimePipe, SmartparkModule, SmartparkService, SmartparkState, SortDevicesPipe, SortPipe, SparkKeyboardEvent, SparkNotification, SpecialDaysPipe, SpecialTransientCategory, SpecialTransientCategoryText, SpinnerDiameterSize, StaticMessageBarService, StatusIconComponent, StickerSearchFieldSelectorText, StopPropagationDirective, StringItPipe, SubModuleGuard, SubstrHightlightManyPipe, SubstrHightlightPipe, SubstrHightlightSinglePipe, SwallowUnitStatusText, SwitchUserToSSOAction, SyncUsersAndRolesBySmartparkIdAction, TAKE_TOP_300, TBFormatPipe, TBNumberDirective, TENANT_KEY, TENS_MULTIPLIER, TableColumnGroup, TableColumnGroupLabel, TableRowHeightSizes, TableTypeText, TagLabelType, TechToolsModuleResolver, TenantClearAction, TenantLoadAction, TenantLogoModule, TenantService, TenantlessLoginMode, TibaDateFormat, TibaMatDialogConfig, TibaRetryPolicy, TibaValidators, TicketService, TimeAgoPipe, TimeElapsedCounterComponent, TimeElapsedFormats, TimeElapsedPipe, TimeRangeFormats, TimeRangePipe, ToggleDrawerAction, ToggleDrawerCollapseAction, TooltipPositions, TrackAction, TransientParkingActionText, TranslateLocalPipe, TreeFilterKeysPipe, TreeMode, TruncatePipe, TypeCastText, UNSAVED_DATA, USER_IS_TEMPORARY_BLOCKED, UnloadParkingLotAction, UnsafeHtmlValidatorDirective, UpdateAndActivateUserAction, UpdateAuthTokenAction, UpdateBasicGuestAction, UpdateDocumentAction, UpdateGuestAction, UpdateGuestLocationAction, UpdateMobileMode, UpdateSmartparkAction, UpdateSmartparkNameAction, UpdateSmartparkVarAction, UpdateTenantInfoProps, UpdateTenantSingleSignOnAction, UpdateTicketPlateIdAction, UpdateUserAlertsPreferencesAction, UpdateUserNotificaitonsPreferencesAction, UpdateUserSettingsAction, UpdateUserSettingsInSessionAction, UploadLogoAction, UserCreationType, UserModule, UserSettingsModule, UserSettingsState, UserState, VALIDATION_TYPE_BY_HOURS_41, VALIDATION_TYPE_BY_HOURS_42, VALID_DATETIME_FILTERS, VALID_TIME_MAX_LENGTH, VALID_ZIP_CODE_LENGTH, VERSION_10_1_0, VERSION_10_2_0, VERSION_10_2_1, VERSION_10_3_0, VERSION_10_3_9, VERSION_10_4_0, VERSION_25_1_0, VERSION_25_2_0, VERSION_25_2_1, VERSION_25_3_0, VERSION_25_3_1, VERSION_25_3_6, VERSION_25_4_0, VERSION_25_4_1, VERSION_26_1_0, VERSION_26_1_1, VERSION_26_1_2, VERSION_26_2_0, VERSION_26_3_0, VERSION_7_4_0, VERSION_7_4_1, VERSION_8_1_0, VERSION_8_2_0, VERSION_8_3_0, VERSION_8_4_0, VERSION_9_1_0, VERSION_9_2_0, VERSION_9_2_2, VERSION_9_3_0, VERSION_9_4_0, VGuestWithBatchTableData, VIRTUAL_DEVICE_LPR_COMPACT_LAYOUT_MEDIA_QUERY, ValidateUserTokenAction, ValidationService, ValidationStickerType, ValidationTypeModule, ValidationTypeState, VarDirective, Verify2FactorAuthenticationAction, VirtualValidationStatusText, WhatsAppReceiptAction, WrapFnPipe, YEAR_LIMIT_IN_DAYS, ZerofyNegativePipe, ZoneChangedAction, ZoneModule, ZoneState, accountModuleAnimation, adjustForTimezone, allowSpecialKeys, alphanumericRegex, appModuleAnimation, areDatesIdentical, areVersionsCompatible, arrayEquals, arraysAreDifferent, baseReduce, blobToBase64, buildMessageInfos, buildMessages, camelize, cancelOn, canceled, capitalizeFirstLetter, compareValues, composeSubCategoryLabel, convert24HoursToAmPM, convertAmPmTo24Hours, convertBinaryToDecimal, convertCentToWholeCoin, convertDecimalToBinary, convertFeaturePermissionsToDictionary, convertFormatWithoutTime, convertWholeCoinToCent, createDescriptor, createMessageText, dateDiffInSeconds, days, daysTranslation, decimalNumberRegex, decimalPercentageRegex, decimalPositiveNumberRegex, decryptClientSecret, delayCancellation, deviceIndicationStatusLocalization, deviceTypeFilterOptions, diffInMillis, dispatched, distinctObjectByProperties, distinctObjectByProperty, downloadFile, ensureObjectMetadata, entryDevicesLaneTypes, errored, exceedsLength, exitDevicesLaneTypes, extractErrorsChanges, extractNumber, extractResetChanges, extractSetValueChanges, extractToggleStatusChanges, extractTouchedChanges, extractUpdateValueAndValidityChanges, filterDependentPermissions, filterDevicesByTypes, filterKeyValueBaseReduce, findChildRoute, findObjectDifferences, findParentElement, findParentElementDimensions, findParentRoute, findParentRouteConfig, flattenByKey, formatMinutesToTimeNumber, formatTimeToMinutes, formatTimeToString, formatTimeWithMidnight, formatTimeWithSeparator, formatTimeWithoutMidnight, formatTimeWithoutSeparator, formatTimeWithoutSeperatorAndWithMidnight, formatTimeWithoutSeperatorAndWithoutMidnight, getActivatedRoutePathSegment, getAddress, getCurrentLang, getDateTimeInSeconds, getDateWithoutTime, getDaysFromValue, getDefaultDeviceStatus, getFormattedTime, getMomenWithTime, getMomentNullable, getMomentWithoutTime, getNavigationRoute, getObjectMetadata, getParkerTypesText, getPasswordMinimalLength, getSecondsBackoff, getTooltipTextByParkerType, getUserTimeZone, getUtcMomentNullable, hasMiddayPeriod, hasMonthName, hasRequiredField, hasUnsafeHtmlValue, hasValue, humanizeTimeElapsed, humanizeUtcTimeElapsed, identity, initializeMsal, initializeOpenId, integerNumberRegex, integerPositiveNumberRegex, ipv4Regex, isBoolean, isCharacterLengthValid, isDefinedAndNotEmpty, isDeviceActive, isDeviceDisplayedActive, isDeviceInFilterDeviceTypes, isDeviceInFiltersDeviceTypes, isFalsy, isIOSDevice, isMaxDaysRangeValid, isNullOrEmpty, isNumber, isObjectEmpty, isQueryIntentRequest, isSearchFieldChanged, isSingularOrPlural, isTrueInBinary, isTruthy, isVersionGreaterThanEqual, loadHTMLContent, lowerCase, lowerCaseFirstLetter, mapTransientTags, markEntitiesAsChanged, markEntityAsUnchanged, matchesDeviceCriteria, matchesDeviceParkingLotCriteria, matchesDevicesParkingLotCriteria, minutesToTime, mobileRegex, nameof, navigateToForbiddenAccessPage, navigateToNotSupportedBrowserPage, noEmojiRegex, notificationAnimation, numberWithLeadingZero, objectKeystoLowerCase, ofStatus, omitKeys, openBackgroundIframe, openCloseFiltersAnimation, parentParkBaseEventTypes, parentParkEventTypes, parkBaseEventTypes, parkEventTypes, parkerEnumToText, parseApiErrorData, parseApiErrorMessage, parseDateTimeToSparkParkTime, parseSmartParkTime, passwordRegex, percentageRegex, printSpecialDaysText, printStackTrace, readjustForTimezone, regexExp, remoteCommandLocalizationMap, replaceAll, resolveAccessModeIcon, resolveSpecialTransientCategory, rtEventPermissions, safeParse, sanitizeHtmlValue, searchBarPopupAnimation, setDateTimeErrorMessage, setErrorMessage, shortDaysTranslation, sleep, slideFromBottom, slideFromRight, slideFromUp, slideUpDown, successful, timeToMinutes, timeToMoment, toInt, toNumberMap, toStringMap, truncate, wrapConstructor };
144026
+ export { ACCESS_PROFILE_DAT_TYPES_SP, ACTION_STATUS, ACTIVE_BYTE, ADVANCED_OPTIONS_VALUE, ADVANCED_PERMISSION_DEPENDENCIES, AES_DEFAULT_IV, ALERT_DESCRIPTION_DISPLAY_LENGTH, ALERT_NOTIFICATION_CONTAINER, ALLOWED_FILES_FORMATS, ALLOWED_FILES_MAX_SIZE_1_MB, ALLOWED_FILES_MAX_SIZE_200_KB, ALLOWED_FILES_MAX_SIZE_2_MB, ALLOWED_FILES_MAX_SIZE_MB, ALLOWED_NUMBER_OF_DAYS, ALLOWED_UPLOAD_FILES_QUANTITY, ALL_DAYS_IN_BINARY, ALL_DAYS_IN_BYTE, AccessModeIconPipe, AccessProfileChangeValidTypesText, AccessProfileDayTypesText, AccessProfileRestrictionTypesText, AccessProfileShortDayTypesText, AccessProfileSpecialDaysMap, AccessProfileTypesText, AccountFrameMessageBarComponent, AccountLinkedEntitiesText, AccountLinkedEntityText, AccountSetPasswordAction, AccountSetPasswordErrorAction, AccountSetPasswordInitAction, ActionStatusService, AddSmartparkAction, AddUserAction, AdministrativeNotificationEntityType, AdministrativeNotificationsModule, AdministrativeNotificationsState, AggregatedStatusText, AlertChangedAction, AlertNotificationBorderClass, AlertNotificationClassificationMap, AlertNotificationComponent, AlertNotificationService, AlertsAndNotificationsService, AlertsAndNotificationsState, AlertsDeviceTypeLabel, AlertsDeviceTypeOptions, AlertsDeviceTypeOptionsMapping, AmountStepSurchargeMinLimit, AnalyticsCommandsText, AnalyticsEventsText, AnalyticsService, AnalyticsSourceComponent, AnalyticsSourceProps, AppConfigService, AppModuleService, AppModuleToMainPermissionTypeMap, AppSectionLabel, AppSectionModuleMenuOrder, AppSectionRoute, AppSettingsService, AppType, AuditActionTypeText, AuditLogoutAction, AuthModule, AuthRouteGuard, AuthService, AuthTokenService, Authenticate2FAforUser, AuthenticateMultipleTenantsAction, AutofocusDirective, BC_DS_P_VALIDATION, BOM_UNICODE, BackOfficeParkerType, BackofficeAutheticateAction, BarcodeTypeLength, BarrireStateText, BaseComponent, BaseDeviceItemComponent, BaseDeviceService, BaseFacilityCommandsConfigService, BaseFacilityCommandsService, BaseNotificationService, BillDispenserStatusText, BillTypeText, BillValidatorStatusText, ButtonStatus, CANCEL_ALL_RELAY_VALUE, CLogItPipe, COLORS, CREDIT_CARD_POSTFIX_LENGTH, CalculatorModule, CalculatorState, CanDeactivateService, CancelWhatsAppReceiptAction, CarModule, CarState, CassetteStatusText, CategoryModule, CategoryState, CentToCoinPipe, ChangeLanguageAction, ChangePasswordAction, ChartLayout, CleanLogoAction, ClearAdministrativeNotificationsAction, ClearAdministrativeNotificationsByEntityTypeAction, ClearAlertsAndNotificationsAction, ClearAllButtonDirective, ClearBaseZonesAction, ClearCalculatorPriceAction, ClearCategoriesAction, ClearColorsAction, ClearConflictDetected, ClearDeviceAction, ClearDeviceEventsExpanded, ClearDevicesAction, ClearEventActivitiesExpanded, ClearFacilityDictionaryAction, ClearGroupsAction, ClearGuestAction, ClearGuestProfilesAction, ClearGuestsListAction, ClearHandledGuest, ClearInactiveSelectedParkAction, ClearJobTitlesAction, ClearLocateTicketSearchAction, ClearLocatedTicketAction, ClearLprTransactionsExpanded, ClearMacroCommandsAction, ClearModelsAction, ClearParkerAction, ClearRateAction, ClearSearchResultsAction, ClearSearchTermAction, ClearSearchTicketAction, ClearSelectedFacilityAction, ClearSelectedParkAction, ClearSelectedRow, ClearSelectedSmartparkAction, ClearSmartparksBasicAction, ClearSpAndSparkVersionsAction, ClearSpecialTransientTablesAction, ClearSuspendedParkActivitiesAction, ClearUserSettingsByCategoryAction, ClearUsersAction, ClearValidationTypesAction, ClearZoneAction, ClearZonesAction, ClearZsAction, cloudServiceProxies as Cloud, CloudConfirmDialogComponent, CofCredentialSubTypeText, CoinStatusText, CollapsedGuestsByBatchIdAction, ComAggregatedStatus, ComAggregatedStatusText, ComStatusIconComponent, CommandCenterModuleResolver, CommandNotificationBorderClass, CommandNotificationComponent, CommandNotificationDisplayCase, CommandNotificationService, CommandNotificationType, CommandsLocalizationKey, CommonPagesModule, CompanyService, ConfigResolver, ConnectSmartparkAction, ContainerRefDirective, CoreEntities, CouponSearchFieldSelectorText, CreateBasicBatchAction, CreateBasicGuestAction, CreateBatchAction, CreateCategoryAction, CreateColorAction, CreateGroupAction, CreateGuestAction, CreateJobTitleAction, CreateModelAction, CreateOrUpdateSMTPDetailsAction, CredentialTypeText, CreditCardTypeText, CrudOperationText, CurlyToBoldPipe, DATA_IMAGE_BASE64_PREFIX, DATE_TIME_ERROR_INVALID_DATE, DATE_TIME_ERROR_INVALID_DATE_RANGE, DATE_TIME_ERROR_REQUIRED, DEFAULT_DATE_FORMAT, DEFAULT_EXPIRATION_MONTHS_COUNT, DEFAULT_MINIMUM_LENGTH, DEFAULT_MODULE, DEFAULT_PASSWORD_HISTORY_COUNT, DEFAULT_PERMITTED_CREDENTIALS, DEFAULT_SMART_PARK_DATE_TIME, DEFAULT_SORT_MENU, DEFAULT_SPECIAL_TRANSIENT_CATEGORY, DEFAULT_STICKER_NUM, DEVICE_EVENT_OPTIONS_KEY, DEVICE_NAVIGATE_KEY, DISABLED_FOCUS_ELEMENT_CLASSES, DISABLED_FOCUS_ELEMENT_TYPES, DYNAMIC_PRICING_CONDITION, DataQaAttribute, DateService, DateValidityText, DaysText, DecimalToAmountPipe, DecimalToCurrencyPipe, DefaultImageTimeout, DeleteCategoryAction, DeleteGroupAction, DeleteGuestAction, DeleteJobTitleAction, DeleteLogoAction, DeleteUserAction, DetectBrowserService, DeviceActivityChangedAction, DeviceActivityLabel, DeviceActivityMode, DeviceActivityModeIcon, DeviceActivityModeText, DeviceActivityStatus, DeviceActivityType, DeviceAggregatedStatus, DeviceAggregatedStatusText, DeviceEventChangedAction, DeviceIconComponent, DeviceIndicationStatus, DeviceLaneTypes, DeviceLoop, DeviceModule, DevicePipeModule, DevicePrinterStatusText, DeviceRemoteCommandsService, DeviceSortBy, DeviceStatusBaseComponent, DeviceStatusChangedAction, DeviceTypeIconName, DeviceTypeText, DeviceTypesAlertsMapping, DevicesViewMode, DialogMode, DipSwitchStatus, Disable2FAAction, DisableUserSSOAction, DisabledDirective, DisconnectSmartParkAction, DoorSensorStatus, DoorStatusText, DurationMessageBar, DynamicContainerComponent, DynamicEllipsisTooltipDirective, ENGLISH_LANGUAGE, ENVIRONMENT, EXPIRATION_MONTHS_COUNT_OPTIONS, edgeServiceProxies as Edge, EditUserAction, ElectronicWalletPaymentMethodTypesText, EllipsisMultilineDirective, EmailServerModule, EmailServerState, EmptyResultsComponent, Enable2FAAction, EnumsToArrayPipe, EnvironmentModeText, ErrorPageComponent, ErrorPageResolver, ErrorResultsComponent, ExceedingBehaviorTypeText, ExpandGuestsByBatchIdAction, ExportFileService, ExportGuestsAction, ExportPdfSmartparksTableAction, ExportSmartparkAction, FONT_BASE64, FacilitiesAndSmartparksState, FacilityChangedAction, FacilityMenuService, FacilityModule, FacilityRemoteCommandExecutedAction, FacilityRemoteCommandTypesIcon, FacilityRemoteCommandsLocalizationKey, FacilityRemoteCommandsMenuItems, FacilityService, FacilityState, FieldLabelComponent, FieldValidationsComponent, FileGenerateMethod, FileSanitizerService, FileService, FilterByDeviceType, FilterDevicesByTypePipe, FilterDevicesByZonePipe, FilterKeysPipe, FilterNumbersPipe, FilterPipe, FlattenedCoreEntities, FloatMessageBarService, ForgotPasswordAction, ForgotPasswordTenantlessAction, FormValidationsComponent, FormattedInputDirective, FrequentParkingActionText, FrequentParkingErrorActionText, GATE_STATE_VALUE, GeneralActionService, GenerateSearchParamsDto, GenerateSlimSearchParamsDto, GetAllLocalizationsAction, GetLogoAction, GetRateByIdAction, GetSpecialTransientTablesAction, GetUserSettingsByCategoryAction, GlobalErrorService, GlobalMessageContainerComponent, GroupModule, GroupPermissionsPipe, GroupState, GuestModule, GuestOpenTicketChoice, GuestOpenTicketDialogComponent, GuestOpenTicketResolutionService, GuestSearchFieldSelectorText, GuestState, GuestTypeCastText, GuestTypesText, HOUR_FORMAT_12, HOUR_FORMAT_24, HOUR_FORMAT_FULL_DAY, HandleAlertsAction, HandleNotificationAction, HandledNotificationAction, HasActionErrored, HealthAction, HoldRelayMode, HoldRelayModeText, HopperStatusText, HotelGuestSearchFieldSelectorText, HtmlSanitizerService, HttpCancelBlackListUrls, HttpCancelInterceptor, HttpCancelService, HumanizePipe, INPUT_SEARCH_DEBOUNCE_TIME, INPUT_SEARCH_DEBOUNCE_TIME_LOW, INPUT_SEARCH_DEBOUNCE_TIME_MEDIUM, IconButtonDirective, IconColumnComponent, IconComponent, IconModule, IconsHelper, IconsHelperText, identityServiceProxies as Identity, ImportMonthyStastusFieldSelectorText, InitAddSmartparkConnectionAction, InitSMTPDetailsAction, InitSessionFromLocalStorageAction, InitSmartparkTransportAction, IntercomComponent, InternetConnectionService, InternetConnectionStatus, IsActionExecuting, IsEllipsisDirective, JobTitleModule, JobTitleState, LOCAL_ENGLISH_LANGUAGE, LOCATION_OPTIONS, LOGGED_TENANT_KEY, LOOKUP_NAME_MAX_LENGTH, LanguageTypeKeys, LayoutModule, LayoutState, Load2FAUserAction, LoadAccessProfileBaseZonesAction, LoadAccessProfileZoneAction, LoadAccessProfileZonesAction, LoadAdministrativeNotificationsAction, LoadAlertsAndNotificationsAction, LoadAppConfigurationAction, LoadBackofficeAppConfigurationAction, LoadBackofficeSmartparksTableAction, LoadBackofficeSpAndSparkVersionsAction, LoadBackofficeVarByIdAction, LoadBackofficeVarsAction, LoadCalculatorPriceAction, LoadCategoriesAction, LoadCcMainBaseZonesAction, LoadCcMainZonesAction, LoadColorsAction, LoadColorsAction1, LoadColorsAction2, LoadColorsAction3, LoadColorsAction4, LoadColorsAction5, LoadDeviceAction, LoadDeviceEventActivitiesAction, LoadDeviceEventsAction, LoadDeviceEventsCollapse, LoadDeviceLprTransactionsAction, LoadDeviceStatusAction, LoadDevicesAction, LoadDevicesByTypeAction, LoadDynamicPricingBaseZonesAction, LoadDynamicPricingZoneAction, LoadEventActivitiesCollapse, LoadFacilityAction, LoadFacilityRemoteCommandsRefAction, LoadGroupAction, LoadGuestByIdAction, LoadGuestProfilesAction, LoadGuestsAction, LoadGuestsByBatchIdAction, LoadGuestsByBatchIdCancelledAction, LoadJobTitleAction, LoadLocateTicketSearchAction, LoadLocatedTicketAction, LoadLprTransactionsCollapse, LoadMacroCommandsAction, LoadModelsAction, LoadModelsAction1, LoadModelsAction2, LoadModelsAction3, LoadModelsAction4, LoadModelsAction5, LoadOverflowPriceTableAction, LoadParkActivitiesAction, LoadParkDevicesAction, LoadParkerAction, LoadParkersAction, LoadParkingLotAction, LoadParksAction, LoadRateByIdAction, LoadRatesAction, LoadRemoteCommandsRefAction, LoadReportsBaseZonesAction, LoadReportsZoneAction, LoadReportsZonesAction, LoadSMTPDetailsAction, LoadSelectedDeviceAction, LoadSmartparksAction, LoadSmartparksDropdownAction, LoadSmartparksTableAction, LoadSpAndSparkVersionsAction, LoadStickerPriceTableAction, LoadTicketNumParkersAction, LoadTransientPriceTableAction, LoadUserCapabilitiesAction, LoadUsersAction, LoadUsersAdministrativeNotificationsAction, LoadValidationTypeAction, LoadVarsAction, LoadZsAction, LoadingOverlayComponent, LocalStorageMigrator, LocalStorageService, Localization, LocalizationModule, LocalizationResolver, LocalizationService, LocalizationState, LoginModule, LoginRequestAction, LoginService, LoginState, LoginSuccess, LogoComponent, LogoState, LogoutAction, LogoutMobileAction, LoopStatus, LowerCaseUrlSerializer, LprTransactionsChangedAction, LprTransactionsOptionsText, LprTransactionsSearchFieldSelectorText, MANUAL_ACTION_REASON_NAME_MAX_LENGTH, MAX_ALLOWED_BADGE_VALUE, MAX_ALLOWED_CURRENT_BALANCE, MAX_ALLOWED_DEDUCTION_VALUE, MAX_ALLOWED_GUEST_UNIT_QUANTITY, MAX_ALLOWED_IDENTIFIER_VALUE, MAX_ALLOWED_STARTING_PURSE_VALUE, MAX_CAPACITY_VALUE, MAX_CARDS, MAX_CAR_PLATES, MAX_EMAIL_CHARACTERS_LENGTH, MAX_EXPORT_RECORDS, MAX_HOTEL_ROOM_NUMBER_LENGTH, MAX_INT16_VALUE, MAX_INT32_VALUE, MAX_INTEGER_VALUE, MAX_LENGTH_BATCH_NAME, MAX_LENGTH_DESCRIPTION_50, MAX_LENGTH_DESCRIPTION_70, MAX_LENGTH_FOOTER, MAX_LENGTH_LEFT, MAX_LENGTH_LEFT_BACKWARD_COMPATIBILITY, MAX_LENGTH_MANUAL_TEXT, MAX_LENGTH_NAME_100, MAX_LENGTH_NAME_20, MAX_LENGTH_NAME_25, MAX_LENGTH_NAME_30, MAX_LENGTH_NAME_50, MAX_LENGTH_NOTES, MAX_LENGTH_QUANTITY, MAX_LENGTH_REASON_DESCRIPTION, MAX_LENGTH_SERACH_TERM, MAX_LENGTH_SERACH_TERM_30, MAX_MOBILE_LENGTH, MAX_NUMBER_OF_NIGHTS, MAX_NUMBER_OF_ROW_IN_MENU, MAX_OCCUPANCY_VALUE, MAX_PERIOD_TIME, MAX_PLATE_ID_LENGTH, MAX_PRICE_NO_TIME_LIMIT_VALUE, MAX_PRICE_PERIOD_VALUE, MAX_REPEAT_COUNT_VALUE, MAX_RESULTS, MAX_ROLE_NAME_LENGTH, MAX_SP, MAX_TIME_RANGE_ITEMS_PER_KEY, MC_READER_ID, MESSAGE_BAR_DEFAULT_ID, MINIMUM_DROPDOWN_RESULTS_WITHOUT_SEARCH, MINIMUM_LENGTH_OPTIONS, MINUTES_PER_HOUR, MIN_ALLOWED_GUEST_UNIT_QUANTITY, MIN_LENGTH_QUANTITY, MIN_MESSAGE_DURATION, MIN_NUMBER_OF_ROW_IN_MENU, MIN_TIME_RANGE_ITEMS_PER_KEY, MOBILE_REFRESH_INFO, MSALGuardConfigFactory, MSALInstanceFactory, MSALInterceptorConfigFactory, MSLAuthService, MULTIPLE, MainModuleToSubModulesPermissionTypeMap, MatHintErrorDirective, MaxAllowedSurchargeAmount, MaxAllowedSurchargeMaxLimit, MaxAllowedSurchargeMinLimit, MaxDisplayTimeout, MaxIPV4TextLength, MaxSurchargeNameLength, MenuAppModuleLoadAction, MenuClearAction, MenuLoadAction, MenuService, MenuSubModuleClearAction, MenuSubModuleLoadAction, MessageBarComponent, MessageBarContainerComponent, MessageBarModule, MessageBarPosition, MessageBarService, MessageBarStatus, MiddayPeriod, MinAllowedSurchargeAmount, MinAllowedSurchargeMaxLimit, MinAllowedSurchargeMinLimit, MinDisplayTimeout, MobileAppSectionLabel, MobileLogoutAction, ModalButtonsWrapperComponent, ModalService, ModuleGuard, ModuleMenuBaseComponent, MonthlyRenewalSettingsActionTypesText, MonthlyRenewalSettingsActionTypesValueText, MonthlySearchFieldSelectorText, MslEventType, NONE_ACTIVE_BYTE, NONE_USER_ID, NO_RESULT, NativeElementInjectorDirective, NotSupportedBrowserGuard, NotSupportedBrowserPageComponent, NotificationChangedAction, NotificationClass, NotificationClassficationType, NotificationCloseAllButtonComponent, NotificationConfig, NotificationEventService, NotificationHPositions, NotificationModule, NotificationSeverityText, NotificationTypeLabelComponent, NotificationTypeText, NotificationVPositions, NotificationsModule, ONE_DAY_IN_MINUTES_VALUE, ONE_MINUTE_IN_MILLISECONDS, ONE_SECOND_IN_MILLISECONDS, OPEN_TICKET_CHECK_MIN_VERSION, OPEN_TICKET_CHECK_NOTICE_DELAY_MS, OffScreenDirective, OpenIdAuthInitializeService, OpenIdAuthService, OpenIdAutheticateAction, Operator, OrderBy, OrderByPipe, OrderDirection, OrphanFacilitiesPipe, PARKER_SEARCH_AUTO_REDIRECT, PASSWORD_EXPIRED, PASSWORD_HISTORY_COUNT_OPTIONS, PREVENT_CLICK_ELEMENT_CLASSES, ParkActivitiesModule, ParkActivitiesState, ParkActivityChangedAction, ParkConnectionStatus, ParkConnectionStatusClass, ParkConnectionStatusText, ParkManagerModule, ParkManagerState, ParkService, ParkTimeService, ParkerSearchTerm, ParkerService, ParkerState, ParkerTagsText, ParkerTypesText, PasswordScore, PasswordStrengthService, PaymentSearchFieldSelectorText, PaymentServiceTypeText, PaymentsTypesText, PermissionCacheService, PermissionConfigService, PermissionGroupText, PermissionTypeSupportedVersionDictionary, PermissionTypeText, PermissionsService, PrintReceiptAction, ProfileTypeText, QUERY_INTENT_PATTERNS, RATE_ID_WITH_VALUE_2, REDIRECT_URL, RELAY_2_VALUE, RELAY_3_VALUE, RELAY_4_VALUE, REPORT_CATEGORY_ALL, RESET_PASSWORD_EMAIL, RESTRICTED_CAR_NOTE_MAX_LENGTH, REVENUE_DATA_UNAVAILABLE, RTL_LANGUAGES, RTObjectObject, RangeModes, RangeModesText, RateModule, RateState, RealtimeEventService, RealtimeResolver, ReceiptGeneratedAction, RefreshTokenService, RefreshTokenState, RelayStatus, ReloadParkerAction, RemoteCommandService, RemoteCommandTypesIcon, RemoteValidationModule, RemoteValidationState, RemoveExpiredAlertsAndNotificationsAction, RemoveSmartparkBasicAction, ReportMethodDictionary, ResendPendingAdminInvitationsAction, ResendUserInvitationAction, ResetRatesAction, RestartLinkComponent, RestartLinkModule, RestrictionLocationTypeText, RestrictionLocationTypeTextTable, RestrictionTypeText, RevenueService, RouteService, RowOperation, rpcServiceProxies as Rpc, SESSION, SPECIAL_TRANSIENT_CATEGORIES, SPECIAL_TRANSIENT_LABEL_NOT_AVAILABLE, STATUS_CODE_SERVER_VALIDATION, STATUS_CODE_UNAUTHORIZED, STRING_ZERO, SUPER_PARK_ROUTE_KEY, SUPPORETD_RESTORE_TICKET_TYPES, SUPPORTED_CAR_ON_LOOP_DEVICE_TYPES, SUPPORTED_DEVICES_SCHEDULER, SUPPORTED_GATE_DEVICE_TYPES, SUPPORTED_LPR_TRANSACTIONS_DEVICE_TYPES, SUPPORTED_PAYMENT_FOR_ISF_TYPES, SUPPORTED_RESTORE_TICKET_DEVICE_TYPES, SUPPORTED_STATUS_DEVICE_TYPES, SUPPORTED_TICKET_INSIDE_DEVICE_TYPES, SYSTEM_ALERT_VALUE, SanitizedInnerHtmlDirective, SearchFacilitiesMode, SearchFieldSelectorText, SearchTicketAction, SearchValueHighlightComponent, SecurityModule, SecurityState, SelectDeviceAction, SelectLprTransactionsRowAction, SelectParkAction, SelectSmartParkAction, SelectedRowAction, SendEmailFromEntityAction, SendEmailToGuestAction, SendGuestPassesToEmailAction, SendTestEmailAction, ServiceProxyModule, ServicesRunningStatusChangedAction, SessionState, SessionStorageService, SetBackofficeSmartParkVersionsAction, SetBasicMenuAction, SetConflictDetected, SetDeviceEventsExpanded, SetDeviceRemoteCommandsMapAction, SetDeviceStatusAction, SetDeviceViewModeAction, SetEnableHotelPostingAction, SetEventActivitiesExpanded, SetFacilityRemoteCommandsMapAction, SetGuestsAction, SetLprTransactionsExpanded, SetMobileModeAction, SetParkActivitiesAction, SetRealTimeEventStatusAction, SetSearchTermAction, SetSelectedParkAction, SetSelectedSmartparkAction, SetSmartParkAction, SetSmartParkTableAction, SetSmartParkVersionsAction, SetSmartparkBasicAction, SetSmartparkBasicAllAction, SetSmartparkEdgeWebhooksAction, SetStateAction, SetTFASetupAction, SetTenantUserAction, SetTicketIdentifierAction, SetUserNameAction, SetUserStatusAction, SetUsersAction, SetkeepMeLoggedInAction, SharedComponentsModule, SharedDirectivesModule, SharedModule, SharedPipesModule, SideNavSortBy, SidenavModule, SidenavState, SignalR, SignalRObject, SignalRRefreshTokenAction, SingleSignOnProviderText, SmartParkDeviceStatusChangedAction, SmartParkStatusText, SmartparkDateTimePipe, SmartparkModule, SmartparkService, SmartparkState, SortDevicesPipe, SortPipe, SparkKeyboardEvent, SparkNotification, SpecialDaysPipe, SpecialTransientCategory, SpecialTransientCategoryText, SpinnerDiameterSize, StaticMessageBarService, StatusIconComponent, StickerSearchFieldSelectorText, StopPropagationDirective, StringItPipe, SubModuleGuard, SubstrHightlightManyPipe, SubstrHightlightPipe, SubstrHightlightSinglePipe, SwallowUnitStatusText, SwitchUserToSSOAction, SyncUsersAndRolesBySmartparkIdAction, TAKE_TOP_300, TBFormatPipe, TBNumberDirective, TENANT_KEY, TENS_MULTIPLIER, TableColumnGroup, TableColumnGroupLabel, TableRowHeightSizes, TableTypeText, TagLabelType, TechToolsModuleResolver, TenantClearAction, TenantLoadAction, TenantLogoModule, TenantService, TenantlessLoginMode, TibaDateFormat, TibaMatDialogConfig, TibaRetryPolicy, TibaValidators, TicketService, TimeAgoPipe, TimeElapsedCounterComponent, TimeElapsedFormats, TimeElapsedPipe, TimeRangeFormats, TimeRangePipe, ToggleDrawerAction, ToggleDrawerCollapseAction, TooltipPositions, TrackAction, TransientParkingActionText, TranslateLocalPipe, TreeFilterKeysPipe, TreeMode, TruncatePipe, TypeCastText, UNSAVED_DATA, USER_IS_TEMPORARY_BLOCKED, UnloadParkingLotAction, UnsafeHtmlValidatorDirective, UpdateAndActivateUserAction, UpdateAuthTokenAction, UpdateBasicGuestAction, UpdateDocumentAction, UpdateGuestAction, UpdateGuestLocationAction, UpdateMobileMode, UpdateSmartparkAction, UpdateSmartparkNameAction, UpdateSmartparkVarAction, UpdateTenantInfoProps, UpdateTenantSingleSignOnAction, UpdateTicketPlateIdAction, UpdateUserAlertsPreferencesAction, UpdateUserNotificaitonsPreferencesAction, UpdateUserSettingsAction, UpdateUserSettingsInSessionAction, UploadLogoAction, UserCreationType, UserModule, UserSettingsModule, UserSettingsState, UserState, VALIDATION_TYPE_BY_HOURS_41, VALIDATION_TYPE_BY_HOURS_42, VALID_DATETIME_FILTERS, VALID_TIME_MAX_LENGTH, VALID_ZIP_CODE_LENGTH, VERSION_10_1_0, VERSION_10_2_0, VERSION_10_2_1, VERSION_10_3_0, VERSION_10_3_9, VERSION_10_4_0, VERSION_25_1_0, VERSION_25_2_0, VERSION_25_2_1, VERSION_25_3_0, VERSION_25_3_1, VERSION_25_3_6, VERSION_25_4_0, VERSION_25_4_1, VERSION_26_1_0, VERSION_26_1_1, VERSION_26_1_2, VERSION_26_2_0, VERSION_26_3_0, VERSION_7_4_0, VERSION_7_4_1, VERSION_8_1_0, VERSION_8_2_0, VERSION_8_3_0, VERSION_8_4_0, VERSION_9_1_0, VERSION_9_2_0, VERSION_9_2_2, VERSION_9_3_0, VERSION_9_4_0, VGuestWithBatchTableData, VIRTUAL_DEVICE_LPR_COMPACT_LAYOUT_MEDIA_QUERY, ValidateUserTokenAction, ValidationService, ValidationStickerType, ValidationTypeModule, ValidationTypeState, VarDirective, Verify2FactorAuthenticationAction, VirtualValidationStatusText, WhatsAppReceiptAction, WrapFnPipe, YEAR_LIMIT_IN_DAYS, ZerofyNegativePipe, ZoneChangedAction, ZoneModule, ZoneState, accountModuleAnimation, adjustForTimezone, allowSpecialKeys, alphanumericRegex, appModuleAnimation, areDatesIdentical, areVersionsCompatible, arrayEquals, arraysAreDifferent, baseReduce, blobToBase64, buildMessageInfos, buildMessages, camelize, cancelOn, canceled, capitalizeFirstLetter, compareValues, composeSubCategoryLabel, convert24HoursToAmPM, convertAmPmTo24Hours, convertBinaryToDecimal, convertCentToWholeCoin, convertDecimalToBinary, convertFeaturePermissionsToDictionary, convertFormatWithoutTime, convertWholeCoinToCent, createDescriptor, createMessageText, dateDiffInSeconds, dateRangeKey, days, daysTranslation, decimalNumberRegex, decimalPercentageRegex, decimalPositiveNumberRegex, decryptClientSecret, delayCancellation, deviceIndicationStatusLocalization, deviceTypeFilterOptions, diffInMillis, dispatched, distinctObjectByProperties, distinctObjectByProperty, downloadFile, ensureObjectMetadata, entryDevicesLaneTypes, errored, exceedsLength, exitDevicesLaneTypes, extractErrorsChanges, extractNumber, extractResetChanges, extractSetValueChanges, extractToggleStatusChanges, extractTouchedChanges, extractUpdateValueAndValidityChanges, filterDependentPermissions, filterDevicesByTypes, filterKeyValueBaseReduce, findChildRoute, findObjectDifferences, findParentElement, findParentElementDimensions, findParentRoute, findParentRouteConfig, flattenByKey, focusFirstInvalidField, focusFirstProblem, focusFirstProblemInTabs, formatMinutesToTimeNumber, formatTimeToMinutes, formatTimeToString, formatTimeWithMidnight, formatTimeWithSeparator, formatTimeWithoutMidnight, formatTimeWithoutSeparator, formatTimeWithoutSeperatorAndWithMidnight, formatTimeWithoutSeperatorAndWithoutMidnight, getActivatedRoutePathSegment, getAddress, getCurrentLang, getDateTimeInSeconds, getDateWithoutTime, getDaysFromValue, getDefaultDeviceStatus, getFormattedTime, getMomenWithTime, getMomentNullable, getMomentWithoutTime, getNavigationRoute, getObjectMetadata, getParkerTypesText, getPasswordMinimalLength, getSecondsBackoff, getTooltipTextByParkerType, getUserTimeZone, getUtcMomentNullable, hasMiddayPeriod, hasMonthName, hasRequiredField, hasUnsafeHtmlValue, hasValue, humanizeTimeElapsed, humanizeUtcTimeElapsed, identity, initializeMsal, initializeOpenId, integerNumberRegex, integerPositiveNumberRegex, ipv4Regex, isBoolean, isCharacterLengthValid, isDefinedAndNotEmpty, isDeviceActive, isDeviceDisplayedActive, isDeviceInFilterDeviceTypes, isDeviceInFiltersDeviceTypes, isFalsy, isIOSDevice, isMaxDaysRangeValid, isNullOrEmpty, isNumber, isObjectEmpty, isQueryIntentRequest, isSearchFieldChanged, isSingularOrPlural, isTrueInBinary, isTruthy, isVersionGreaterThanEqual, loadHTMLContent, lowerCase, lowerCaseFirstLetter, mapTransientTags, markEntitiesAsChanged, markEntityAsUnchanged, matchesDeviceCriteria, matchesDeviceParkingLotCriteria, matchesDevicesParkingLotCriteria, minutesToTime, mobileRegex, nameof, navigateToForbiddenAccessPage, navigateToNotSupportedBrowserPage, noEmojiRegex, notificationAnimation, numberWithLeadingZero, objectKeystoLowerCase, ofStatus, omitKeys, openBackgroundIframe, openCloseFiltersAnimation, parentParkBaseEventTypes, parentParkEventTypes, parkBaseEventTypes, parkEventTypes, parkerEnumToText, parseApiErrorData, parseApiErrorMessage, parseDateTimeToSparkParkTime, parseSmartParkTime, passwordRegex, percentageRegex, printSpecialDaysText, printStackTrace, readjustForTimezone, regexExp, remoteCommandLocalizationMap, replaceAll, resolveAccessModeIcon, resolveSpecialTransientCategory, rtEventPermissions, safeParse, sanitizeHtmlValue, searchBarPopupAnimation, setDateTimeErrorMessage, setErrorMessage, shortDaysTranslation, sleep, slideFromBottom, slideFromRight, slideFromUp, slideUpDown, successful, timeToMinutes, timeToMoment, toInt, toNumberMap, toStringMap, truncate, wrapConstructor };
143577
144027
  //# sourceMappingURL=tiba-spark-client-shared-lib.mjs.map