@tiba-spark/client-shared-lib 26.3.0-619 → 26.3.0-621

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 (80) 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 +32 -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 +6 -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/directives/clear-all-button.directive.mjs +49 -0
  18. package/esm2022/libraries/directives/disabled.directive.mjs +121 -0
  19. package/esm2022/libraries/directives/icon-button.directive.mjs +36 -0
  20. package/esm2022/libraries/directives/index.mjs +4 -1
  21. package/esm2022/libraries/directives/shared-directives.module.mjs +16 -1
  22. package/esm2022/libraries/enums/localization.enum.mjs +40 -1
  23. package/esm2022/libraries/enums/message-bar-duration.enum.mjs +4 -2
  24. package/esm2022/libraries/interfaces/table-column.interface.mjs +1 -1
  25. package/esm2022/libraries/modules/layout/layout.state.mjs +2 -2
  26. package/esm2022/libraries/services/can-deactivate.service.mjs +4 -3
  27. package/esm2022/libraries/services/modal.service.mjs +14 -1
  28. package/fesm2022/tiba-spark-client-shared-lib.mjs +402 -48
  29. package/fesm2022/tiba-spark-client-shared-lib.mjs.map +1 -1
  30. package/libraries/components/common-pages/error-page/error-page.component.d.ts +10 -2
  31. package/libraries/components/common-pages/error-page/error-page.component.d.ts.map +1 -1
  32. package/libraries/components/field-label/field-label.component.d.ts +8 -3
  33. package/libraries/components/field-label/field-label.component.d.ts.map +1 -1
  34. package/libraries/components/field-validations/field-validations.component.d.ts +0 -4
  35. package/libraries/components/field-validations/field-validations.component.d.ts.map +1 -1
  36. package/libraries/components/message-bar/float-message-bar.service.d.ts +2 -0
  37. package/libraries/components/message-bar/float-message-bar.service.d.ts.map +1 -1
  38. package/libraries/components/modal-buttons-wrapper/modal-buttons-wrapper.component.d.ts.map +1 -1
  39. package/libraries/components/notification/alert-notification/alert-notification.component.d.ts.map +1 -1
  40. package/libraries/components/notification/command-notification/command-notification.component.d.ts.map +1 -1
  41. package/libraries/components/notification/notification.service.d.ts.map +1 -1
  42. package/libraries/directives/clear-all-button.directive.d.ts +19 -0
  43. package/libraries/directives/clear-all-button.directive.d.ts.map +1 -0
  44. package/libraries/directives/disabled.directive.d.ts +30 -0
  45. package/libraries/directives/disabled.directive.d.ts.map +1 -0
  46. package/libraries/directives/icon-button.directive.d.ts +14 -0
  47. package/libraries/directives/icon-button.directive.d.ts.map +1 -0
  48. package/libraries/directives/index.d.ts +3 -0
  49. package/libraries/directives/index.d.ts.map +1 -1
  50. package/libraries/directives/shared-directives.module.d.ts +7 -4
  51. package/libraries/directives/shared-directives.module.d.ts.map +1 -1
  52. package/libraries/enums/localization.enum.d.ts +40 -1
  53. package/libraries/enums/localization.enum.d.ts.map +1 -1
  54. package/libraries/enums/message-bar-duration.enum.d.ts +3 -1
  55. package/libraries/enums/message-bar-duration.enum.d.ts.map +1 -1
  56. package/libraries/interfaces/table-column.interface.d.ts +1 -0
  57. package/libraries/interfaces/table-column.interface.d.ts.map +1 -1
  58. package/libraries/services/can-deactivate.service.d.ts.map +1 -1
  59. package/libraries/services/modal.service.d.ts +1 -0
  60. package/libraries/services/modal.service.d.ts.map +1 -1
  61. package/package.json +1 -1
  62. package/src/libraries/theme/_calendar.scss +2 -1
  63. package/src/libraries/theme/_card.scss +6 -5
  64. package/src/libraries/theme/_forms.scss +1 -1
  65. package/src/libraries/theme/_mixins.scss +0 -1
  66. package/src/libraries/theme/_modals.scss +3 -2
  67. package/src/libraries/theme/_ngx.scss +0 -1
  68. package/src/libraries/theme/_tables.scss +3 -2
  69. package/src/libraries/theme/_tabs.scss +6 -4
  70. package/src/libraries/theme/_utils.scss +123 -4
  71. package/src/libraries/theme/_variables.scss +35 -8
  72. package/src/libraries/theme/components/_carousel.scss +2 -2
  73. package/src/libraries/theme/components/_tb-search.scss +10 -4
  74. package/src/libraries/theme/mat-components/_mat-date-picker.scss +4 -0
  75. package/src/libraries/theme/mat-components/_mat-input.scss +5 -0
  76. package/src/libraries/theme/mat-components/_mat-menu.scss +40 -14
  77. package/src/libraries/theme/mat-components/_mat-select.scss +23 -1
  78. package/src/libraries/theme/mat-components/_mat-selection-list.scss +2 -3
  79. package/src/libraries/theme/mat-components/_mat-step.scss +19 -0
  80. 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 = '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))) {
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;
@@ -72804,6 +73004,8 @@ var Localization;
72804
73004
  Localization["start_time"] = "start_time";
72805
73005
  Localization["end_time"] = "end_time";
72806
73006
  Localization["pause"] = "pause";
73007
+ Localization["pause_animation"] = "pause_animation";
73008
+ Localization["play_animation"] = "play_animation";
72807
73009
  Localization["resume"] = "resume";
72808
73010
  Localization["ignored"] = "ignored";
72809
73011
  Localization["none"] = "none";
@@ -75818,6 +76020,43 @@ var Localization;
75818
76020
  Localization["search_room_number"] = "search_room_number";
75819
76021
  Localization["tech_tools_module"] = "tech_tools_module";
75820
76022
  Localization["device_configurator"] = "device_configurator";
76023
+ Localization["reason_unsupported_version"] = "reason_unsupported_version";
76024
+ Localization["reason_no_permission"] = "reason_no_permission";
76025
+ Localization["clear_search"] = "clear_search";
76026
+ Localization["selected_label"] = "selected_label";
76027
+ Localization["collapse_side_menu"] = "collapse_side_menu";
76028
+ Localization["expand_side_menu"] = "expand_side_menu";
76029
+ Localization["breadcrumb"] = "breadcrumb";
76030
+ Localization["expand_row"] = "expand_row";
76031
+ Localization["table_rows"] = "table_rows";
76032
+ Localization["increase"] = "increase";
76033
+ Localization["decrease"] = "decrease";
76034
+ Localization["move_row"] = "move_row";
76035
+ Localization["moved_to_position"] = "moved_to_position";
76036
+ Localization["date_part_day"] = "date_part_day";
76037
+ Localization["date_part_hour"] = "date_part_hour";
76038
+ Localization["date_part_minute"] = "date_part_minute";
76039
+ Localization["show_password"] = "show_password";
76040
+ Localization["hide_password"] = "hide_password";
76041
+ Localization["clear"] = "clear";
76042
+ Localization["enlarge_image"] = "enlarge_image";
76043
+ Localization["shrink_image"] = "shrink_image";
76044
+ Localization["past_day"] = "past_day";
76045
+ Localization["warning"] = "warning";
76046
+ Localization["devices_found_count"] = "devices_found_count";
76047
+ Localization["clear_field"] = "clear_field";
76048
+ Localization["open_field_calendar"] = "open_field_calendar";
76049
+ Localization["date_format"] = "date_format";
76050
+ Localization["form_validation_invalid_date_example"] = "form_validation_invalid_date_example";
76051
+ Localization["choose_time"] = "choose_time";
76052
+ Localization["date_part_placeholder_year"] = "date_part_placeholder_year";
76053
+ Localization["date_part_placeholder_month"] = "date_part_placeholder_month";
76054
+ Localization["date_part_placeholder_day"] = "date_part_placeholder_day";
76055
+ Localization["date_part_placeholder_hour"] = "date_part_placeholder_hour";
76056
+ Localization["date_part_placeholder_minute"] = "date_part_placeholder_minute";
76057
+ Localization["skip_to_content"] = "skip_to_content";
76058
+ Localization["lost_ticket_active_rate_description"] = "lost_ticket_active_rate_description";
76059
+ Localization["lost_ticket_lane_firmware_unknown"] = "lost_ticket_lane_firmware_unknown";
75821
76060
  })(Localization || (Localization = {}));
75822
76061
 
75823
76062
  //----------------------
@@ -117095,11 +117334,17 @@ class SharedDirectivesModule {
117095
117334
  TBNumberDirective,
117096
117335
  UnsafeHtmlValidatorDirective,
117097
117336
  VarDirective], imports: [CommonModule,
117337
+ ClearAllButtonDirective,
117098
117338
  ContainerRefDirective,
117339
+ DisabledDirective,
117340
+ IconButtonDirective,
117099
117341
  MatHintErrorDirective,
117100
117342
  SanitizedInnerHtmlDirective], exports: [AutofocusDirective,
117343
+ ClearAllButtonDirective,
117101
117344
  ContainerRefDirective,
117345
+ DisabledDirective,
117102
117346
  EllipsisMultilineDirective,
117347
+ IconButtonDirective,
117103
117348
  IsEllipsisDirective,
117104
117349
  NativeElementInjectorDirective,
117105
117350
  OffScreenDirective,
@@ -117127,14 +117372,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
117127
117372
  ],
117128
117373
  imports: [
117129
117374
  CommonModule,
117375
+ ClearAllButtonDirective,
117130
117376
  ContainerRefDirective,
117377
+ DisabledDirective,
117378
+ IconButtonDirective,
117131
117379
  MatHintErrorDirective,
117132
117380
  SanitizedInnerHtmlDirective,
117133
117381
  ],
117134
117382
  exports: [
117135
117383
  AutofocusDirective,
117384
+ ClearAllButtonDirective,
117136
117385
  ContainerRefDirective,
117386
+ DisabledDirective,
117137
117387
  EllipsisMultilineDirective,
117388
+ IconButtonDirective,
117138
117389
  IsEllipsisDirective,
117139
117390
  NativeElementInjectorDirective,
117140
117391
  OffScreenDirective,
@@ -118135,7 +118386,7 @@ let LayoutState = class LayoutState {
118135
118386
  constructor(mediaMatcher, store) {
118136
118387
  this.store = store;
118137
118388
  this.mobileQuerySubject = new Subject();
118138
- this.mobileQuery = mediaMatcher.matchMedia('(max-width: 600px)');
118389
+ this.mobileQuery = mediaMatcher.matchMedia('(max-width: 640px)');
118139
118390
  this.mobileQuery.onchange = (event) => this.mobileQuerySubject.next(event.matches);
118140
118391
  this.mobileQuerySubject
118141
118392
  .pipe(distinctUntilChanged())
@@ -118200,16 +118451,17 @@ class FieldValidationsComponent extends BaseComponent {
118200
118451
  constructor(controlContainer) {
118201
118452
  super();
118202
118453
  this.controlContainer = controlContainer;
118203
- this.ObjectKeys = Object.keys;
118204
118454
  }
118455
+ // Only the first error shows, so a field failing several rules still says what to fix (not just "Invalid").
118205
118456
  getErrors(errors) {
118206
118457
  if (errors) {
118207
118458
  delete errors.mask; // remove default NgxMaskDirective validation
118208
118459
  }
118209
- return errors;
118460
+ const first = errors && Object.keys(errors)[0];
118461
+ return first ? { [first]: errors[first] } : null;
118210
118462
  }
118211
118463
  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 }); }
118212
- 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"] }] }); }
118464
+ 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\">\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-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"] }] }); }
118213
118465
  }
118214
118466
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FieldValidationsComponent, decorators: [{
118215
118467
  type: Component,
@@ -118218,7 +118470,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
118218
118470
  WrapFnPipe,
118219
118471
  LocalizationModule,
118220
118472
  SharedDirectivesModule,
118221
- ], 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" }]
118473
+ ], 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\">\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-container>\n </ng-container>\n</ng-container>\n" }]
118222
118474
  }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { controlName: [{
118223
118475
  type: Input
118224
118476
  }], label: [{
@@ -118400,12 +118652,22 @@ const extractErrorsChanges = (control) => {
118400
118652
  return setErrorsChanges$;
118401
118653
  };
118402
118654
 
118655
+ let nextLabelId = 0;
118656
+ /** How far up from the label to look for its field. */
118657
+ const FIELD_SEARCH_DEPTH = 4;
118658
+ const FIELD_SELECTOR = 'input:not([type=hidden]):not([type=checkbox]):not([type=radio]), textarea';
118403
118659
  class FieldLabelComponent {
118404
- constructor(controlContainer) {
118660
+ constructor(controlContainer, elementRef) {
118405
118661
  this.controlContainer = controlContainer;
118662
+ this.elementRef = elementRef;
118663
+ this.labelId = `tb-field-label-${nextLabelId++}`;
118406
118664
  this.isRequired$ = new BehaviorSubject(false);
118407
118665
  this.isInvalid$ = new BehaviorSubject(false);
118408
118666
  }
118667
+ ngAfterViewInit() {
118668
+ // ponytail: links once; a field rendered later (behind *ngIf) stays unlinked.
118669
+ setTimeout(() => this.linkField());
118670
+ }
118409
118671
  ngOnInit() {
118410
118672
  this.control = this.controlContainer.control?.get(this.controlName);
118411
118673
  if (!this.control) {
@@ -118424,6 +118686,29 @@ class FieldLabelComponent {
118424
118686
  });
118425
118687
  });
118426
118688
  }
118689
+ /** Names the first text field after this label (before the next label) with the label text. */
118690
+ linkField() {
118691
+ if (!this.control) {
118692
+ return;
118693
+ }
118694
+ const host = this.elementRef.nativeElement;
118695
+ const follows = (a, b) => !!(a.compareDocumentPosition(b) & Node.DOCUMENT_POSITION_FOLLOWING);
118696
+ let scope = host.parentElement;
118697
+ for (let depth = 0; scope && depth < FIELD_SEARCH_DEPTH; depth++, scope = scope.parentElement) {
118698
+ const nextLabel = Array.from(scope.querySelectorAll('[tb-field-label]')).find(label => follows(host, label));
118699
+ const field = Array.from(scope.querySelectorAll(FIELD_SELECTOR))
118700
+ .find(candidate => follows(host, candidate) && (!nextLabel || follows(candidate, nextLabel)));
118701
+ if (field) {
118702
+ if (!field.hasAttribute('aria-labelledby') && !field.hasAttribute('aria-label') && !field.labels?.length) {
118703
+ field.setAttribute('aria-labelledby', this.labelId);
118704
+ }
118705
+ return;
118706
+ }
118707
+ if (nextLabel) {
118708
+ return;
118709
+ }
118710
+ }
118711
+ }
118427
118712
  get isControlRequired() {
118428
118713
  return this.control.hasValidator(Validators.required);
118429
118714
  }
@@ -118436,11 +118721,11 @@ class FieldLabelComponent {
118436
118721
  this.touchedChangesSubscription?.unsubscribe();
118437
118722
  });
118438
118723
  }
118439
- 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 }); }
118724
+ 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 }); }
118440
118725
  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: `
118441
118726
  <div class="tb-field-label" *ngIf="control">
118442
118727
  <span class="required-asterisk" *ngIf="isRequired$ | async" [class.required]="isInvalid$ | async">*</span>
118443
- <span [ngClass]="ngLabelClass">{{ label | translate }}</span>
118728
+ <span [id]="labelId" [ngClass]="ngLabelClass">{{ label | translate }}</span>
118444
118729
  <ng-content select="[tooltip]"></ng-content>
118445
118730
  </div>
118446
118731
  `, 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 }); }
@@ -118452,7 +118737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
118452
118737
  template: `
118453
118738
  <div class="tb-field-label" *ngIf="control">
118454
118739
  <span class="required-asterisk" *ngIf="isRequired$ | async" [class.required]="isInvalid$ | async">*</span>
118455
- <span [ngClass]="ngLabelClass">{{ label | translate }}</span>
118740
+ <span [id]="labelId" [ngClass]="ngLabelClass">{{ label | translate }}</span>
118456
118741
  <ng-content select="[tooltip]"></ng-content>
118457
118742
  </div>
118458
118743
  `,
@@ -118463,7 +118748,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
118463
118748
  LocalizationModule
118464
118749
  ]
118465
118750
  }]
118466
- }], ctorParameters: () => [{ type: i1.ControlContainer }], propDecorators: { controlName: [{
118751
+ }], ctorParameters: () => [{ type: i1.ControlContainer }, { type: i0.ElementRef }], propDecorators: { controlName: [{
118467
118752
  type: Input
118468
118753
  }], label: [{
118469
118754
  type: Input
@@ -121265,10 +121550,12 @@ var LprTransactionsOptionsText;
121265
121550
  LprTransactionsOptionsText["NotRecognized"] = "not_recognized";
121266
121551
  })(LprTransactionsOptionsText || (LprTransactionsOptionsText = {}));
121267
121552
 
121553
+ /** Shortest time a message stays up, so it can be read. */
121554
+ const MIN_MESSAGE_DURATION = ONE_SECOND_IN_MILLISECONDS * 5;
121268
121555
  var DurationMessageBar;
121269
121556
  (function (DurationMessageBar) {
121270
121557
  DurationMessageBar[DurationMessageBar["displayContinuously"] = 0] = "displayContinuously";
121271
- DurationMessageBar[DurationMessageBar["defaultDisplayOneMessage"] = 3000] = "defaultDisplayOneMessage";
121558
+ DurationMessageBar[DurationMessageBar["defaultDisplayOneMessage"] = 5000] = "defaultDisplayOneMessage";
121272
121559
  DurationMessageBar[DurationMessageBar["defaultDisplayMultiMessages"] = 5000] = "defaultDisplayMultiMessages";
121273
121560
  DurationMessageBar[DurationMessageBar["defaultDisplayLongMessage"] = 8000] = "defaultDisplayLongMessage";
121274
121561
  })(DurationMessageBar || (DurationMessageBar = {}));
@@ -123230,27 +123517,51 @@ class FloatMessageBarService {
123230
123517
  openFromMessageBarComponent(messageBarDetails, options) {
123231
123518
  const messagesInfo = buildMessageInfos(this.translateService, messageBarDetails, options);
123232
123519
  const duration = options?.duration === DurationMessageBar.displayContinuously ? undefined : (options?.duration || DurationMessageBar.defaultDisplayMultiMessages); // On duration "0", the snack bar will be display continuously
123233
- this._snackBar.openFromComponent(MessageBarComponent, {
123520
+ const ref = this._snackBar.openFromComponent(MessageBarComponent, {
123234
123521
  data: messagesInfo,
123235
123522
  horizontalPosition: 'center',
123236
123523
  verticalPosition: 'top',
123237
- duration,
123238
123524
  panelClass: 'message-bar'
123239
123525
  });
123526
+ this.dismissWhenIdle(ref, duration);
123240
123527
  }
123241
123528
  openMessageBarContainerComponent(message) {
123242
123529
  const duration = message.duration === DurationMessageBar.displayContinuously ? undefined : (message.duration || DurationMessageBar.defaultDisplayOneMessage); // On duration "0", the snack bar will be display continuously
123243
- this._snackBar.openFromComponent(MessageBarContainerComponent, {
123530
+ const ref = this._snackBar.openFromComponent(MessageBarContainerComponent, {
123244
123531
  data: message,
123245
123532
  horizontalPosition: 'center',
123246
123533
  verticalPosition: 'top',
123247
- duration,
123248
123534
  panelClass: 'message-bar'
123249
123535
  });
123536
+ this.dismissWhenIdle(ref, duration);
123250
123537
  }
123251
123538
  clearSnackbar() {
123252
123539
  this._snackBar.dismiss();
123253
123540
  }
123541
+ /** Closes after `duration` (at least 5 s), restarting the wait while hovered or focused. */
123542
+ dismissWhenIdle(ref, duration) {
123543
+ if (!duration) {
123544
+ return;
123545
+ }
123546
+ ref.afterOpened().subscribe(() => {
123547
+ const element = document.querySelector('mat-snack-bar-container.message-bar');
123548
+ let timer;
123549
+ const stop = () => clearTimeout(timer);
123550
+ const start = () => {
123551
+ stop();
123552
+ if (!element?.matches(':hover') && !element?.contains(document.activeElement)) {
123553
+ timer = setTimeout(() => ref.dismiss(), Math.max(duration, MIN_MESSAGE_DURATION));
123554
+ }
123555
+ };
123556
+ element?.addEventListener('mouseenter', stop);
123557
+ element?.addEventListener('focusin', stop);
123558
+ element?.addEventListener('mouseleave', start);
123559
+ // focusout fires before focus lands on the next element.
123560
+ element?.addEventListener('focusout', () => setTimeout(start));
123561
+ ref.afterDismissed().subscribe(stop);
123562
+ start();
123563
+ });
123564
+ }
123254
123565
  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 }); }
123255
123566
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: FloatMessageBarService, providedIn: 'root' }); }
123256
123567
  }
@@ -124894,8 +125205,10 @@ class BaseNotificationService {
124894
125205
  show(config, notificationComponent) {
124895
125206
  this.options.toastComponent = notificationComponent;
124896
125207
  this.options.toastClass = config.class;
124897
- this.options.timeOut = config.duration;
124898
- this.options.extendedTimeOut = config.duration;
125208
+ // 0 or no duration keeps the notification open.
125209
+ const duration = config.duration ? Math.max(config.duration, MIN_MESSAGE_DURATION) : config.duration;
125210
+ this.options.timeOut = duration;
125211
+ this.options.extendedTimeOut = duration;
124899
125212
  this.options.autoDismiss = !!config.maxOpened;
124900
125213
  this.options.maxOpened = config.maxOpened;
124901
125214
  this.options.easeTime = 0;
@@ -124976,14 +125289,14 @@ class NotificationTypeLabelComponent extends BaseComponent {
124976
125289
  this.notificationTypeClass = notificationTypeClasses.join(" ");
124977
125290
  }
124978
125291
  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 }); }
124979
- 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 }); }
125292
+ 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:#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 }); }
124980
125293
  }
124981
125294
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: NotificationTypeLabelComponent, decorators: [{
124982
125295
  type: Component,
124983
125296
  args: [{ selector: 'tb-notification-type-label', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
124984
125297
  CommonModule,
124985
125298
  LocalizationModule,
124986
- ], 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"] }]
125299
+ ], 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:#0670c7;color:#fff}\n"] }]
124987
125300
  }], ctorParameters: () => [{ type: i1$4.TranslateService }], propDecorators: { notificationSeverity: [{
124988
125301
  type: Input
124989
125302
  }], notificationSeverityInvert: [{
@@ -125005,11 +125318,11 @@ class AlertNotificationComponent extends Toast {
125005
125318
  $event.stopPropagation();
125006
125319
  }
125007
125320
  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 }); }
125008
- 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()] }); }
125321
+ 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()] }); }
125009
125322
  }
125010
125323
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: AlertNotificationComponent, decorators: [{
125011
125324
  type: Component,
125012
- args: [{ selector: 'tb-alert-notification', animations: [notificationAnimation()], standalone: true, imports: [
125325
+ args: [{ selector: 'tb-alert-notification', animations: [notificationAnimation()], host: { '(focusin)': 'stickAround()', '(focusout)': 'delayedHideToast()' }, standalone: true, imports: [
125013
125326
  CommonModule,
125014
125327
  LocalizationModule,
125015
125328
  MatTooltipModule,
@@ -126965,11 +127278,11 @@ class CommandNotificationComponent extends Toast {
126965
127278
  this.CommandNotificationType = CommandNotificationType;
126966
127279
  }
126967
127280
  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 }); }
126968
- 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()] }); }
127281
+ 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()] }); }
126969
127282
  }
126970
127283
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CommandNotificationComponent, decorators: [{
126971
127284
  type: Component,
126972
- args: [{ selector: 'tb-command-notification', animations: [notificationAnimation()], standalone: true, imports: [
127285
+ args: [{ selector: 'tb-command-notification', animations: [notificationAnimation()], host: { '(focusin)': 'stickAround()', '(focusout)': 'delayedHideToast()' }, standalone: true, imports: [
126973
127286
  CommonModule,
126974
127287
  ], 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"] }]
126975
127288
  }], ctorParameters: () => [{ type: i1$8.ToastrService }, { type: i1$8.ToastPackage }], propDecorators: { data: [{
@@ -129075,11 +129388,11 @@ class RestartLinkComponent {
129075
129388
  window.location.reload();
129076
129389
  }
129077
129390
  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 }); }
129078
- 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"] }] }); }
129391
+ 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"] }] }); }
129079
129392
  }
129080
129393
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: RestartLinkComponent, decorators: [{
129081
129394
  type: Component,
129082
- 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"] }]
129395
+ 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"] }]
129083
129396
  }], ctorParameters: () => [{ type: i1$4.TranslateService }, { type: i1$2.Store }, { type: i0.ElementRef }], propDecorators: { label: [{
129084
129397
  type: Input
129085
129398
  }], messageText: [{
@@ -131684,6 +131997,7 @@ class ModalService {
131684
131997
  const dialogRef = this.dialog.open(modalComponent, this.buildDialogConfig(modalConfig));
131685
131998
  this.createBackdrop(dialogRef.id);
131686
131999
  this.attachButtonWrapper(dialogRef, modalConfig);
132000
+ this.closeOnEscape(dialogRef);
131687
132001
  // take(1), not first(): router teardown can complete these subjects without ever emitting,
131688
132002
  // and first() turns that benign completion into an unhandled EmptyError (SPRK3-14821).
131689
132003
  //
@@ -131839,6 +132153,18 @@ class ModalService {
131839
132153
  }
131840
132154
  });
131841
132155
  }
132156
+ // Esc does what the dialog's X does; a dialog without an X stays open. Listened on the dialog itself:
132157
+ // the overlay keyboard dispatcher gives keys only to the top overlay, often a tooltip left on the opener.
132158
+ closeOnEscape(dialogRef) {
132159
+ dialogRef.afterOpened().pipe(take$1(1)).subscribe(() => {
132160
+ const container = document.getElementById(dialogRef.id);
132161
+ container?.addEventListener('keydown', (event) => {
132162
+ if (event.key === 'Escape' && !event.defaultPrevented) {
132163
+ container.querySelector('.modal-close-icon')?.click();
132164
+ }
132165
+ });
132166
+ });
132167
+ }
131842
132168
  detachButtonWrapper(dialogId) {
131843
132169
  const ref = this._buttonWrapperRefs[dialogId];
131844
132170
  if (ref) {
@@ -135023,7 +135349,7 @@ class CloudConfirmDialogComponent extends BaseComponent {
135023
135349
  this.dialogRef.close(ok);
135024
135350
  }
135025
135351
  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 }); }
135026
- 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"] }] }); }
135352
+ 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"] }] }); }
135027
135353
  }
135028
135354
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: CloudConfirmDialogComponent, decorators: [{
135029
135355
  type: Component,
@@ -135038,7 +135364,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
135038
135364
  MessageBarModule,
135039
135365
  CurlyToBoldPipe,
135040
135366
  SanitizedInnerHtmlDirective,
135041
- ], 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"] }]
135367
+ ], 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"] }]
135042
135368
  }], ctorParameters: () => [{ type: i1$4.TranslateService }, { type: undefined, decorators: [{
135043
135369
  type: Inject,
135044
135370
  args: [MAT_DIALOG_DATA]
@@ -135053,7 +135379,8 @@ class CanDeactivateService {
135053
135379
  canDeactivate() {
135054
135380
  const isDialogClosed = this.isDialogClosed();
135055
135381
  if (this.hasUnsavedChanges() && isDialogClosed) {
135056
- return this.displayDialog().pipe(tap$1(value => {
135382
+ // X and Esc close the dialog without a result: stay, like Cancel.
135383
+ return this.displayDialog().pipe(map(value => value === true), tap$1(value => {
135057
135384
  if (value) {
135058
135385
  this.hasUnsavedChanges.set(false);
135059
135386
  }
@@ -139126,11 +139453,11 @@ class GuestOpenTicketDialogComponent {
139126
139453
  this.dialogRef.close(null);
139127
139454
  }
139128
139455
  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 }); }
139129
- 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"] }] }); }
139456
+ 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"] }] }); }
139130
139457
  }
139131
139458
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: GuestOpenTicketDialogComponent, decorators: [{
139132
139459
  type: Component,
139133
- 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"] }]
139460
+ 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"] }]
139134
139461
  }], ctorParameters: () => [{ type: undefined, decorators: [{
139135
139462
  type: Inject,
139136
139463
  args: [MAT_DIALOG_DATA]
@@ -142207,14 +142534,16 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
142207
142534
  // Resolvers
142208
142535
 
142209
142536
  class ErrorPageComponent extends BaseComponent {
142210
- constructor(store, sessionStorageService, httpCancelService, appConfig, activatedRoute) {
142537
+ constructor(store, sessionStorageService, httpCancelService, appConfig, activatedRoute, elementRef) {
142211
142538
  super();
142212
142539
  this.store = store;
142213
142540
  this.sessionStorageService = sessionStorageService;
142214
142541
  this.httpCancelService = httpCancelService;
142215
142542
  this.appConfig = appConfig;
142216
142543
  this.activatedRoute = activatedRoute;
142544
+ this.elementRef = elementRef;
142217
142545
  this.drawerCollapsed = true;
142546
+ this.animationPaused = false;
142218
142547
  this.appSectionLabel = AppSectionLabel;
142219
142548
  this.iconsHelper = IconsHelper;
142220
142549
  }
@@ -142224,6 +142553,10 @@ class ErrorPageComponent extends BaseComponent {
142224
142553
  this.httpCancelService.cancelPendingRequests();
142225
142554
  this.isCloud = this.appConfig.getConfig().appType === AppType.Cloud;
142226
142555
  }
142556
+ /** Moving content beside text needs a way to stop it (WCAG 2.2.2). */
142557
+ toggleAnimation() {
142558
+ this.animationPaused = this.elementRef.nativeElement.classList.toggle('tb-still');
142559
+ }
142227
142560
  extractedErrorClass(activatedRoute) {
142228
142561
  this.statusCodeError = activatedRoute.routeConfig.path === '**' ? '404' : activatedRoute.routeConfig.path;
142229
142562
  this.statusCodeErrorMessage = this.statusCodeError === '404' ? this.L.error_page_message_404 : this.L.error_page_message_403;
@@ -142277,18 +142610,37 @@ class ErrorPageComponent extends BaseComponent {
142277
142610
  }
142278
142611
  this.store.dispatch(new Navigate(route));
142279
142612
  }
142613
+ /** Opening the narrow-screen menu moves focus to its first module. */
142614
+ toggleDrawer() {
142615
+ this.drawerCollapsed = !this.drawerCollapsed;
142616
+ if (!this.drawerCollapsed) {
142617
+ setTimeout(() => this.elementRef.nativeElement.querySelector('.tb-module')?.focus());
142618
+ }
142619
+ }
142620
+ closeDrawerFromKeyboard() {
142621
+ if (!this.drawerCollapsed) {
142622
+ this.drawerCollapsed = true;
142623
+ this.menuButton?.nativeElement.focus();
142624
+ }
142625
+ }
142280
142626
  click() {
142281
142627
  if (!this.drawerCollapsed) {
142282
142628
  this.drawerCollapsed = true;
142283
142629
  }
142284
142630
  }
142285
- 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 }); }
142286
- 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 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 }); }
142631
+ 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 }); }
142632
+ 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 </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;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 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%);visibility:hidden;transition:transform 1s,visibility 0s 1s}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: 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 }); }
142287
142633
  }
142288
142634
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ErrorPageComponent, decorators: [{
142289
142635
  type: Component,
142290
- 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 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"] }]
142291
- }], ctorParameters: () => [{ type: i1$2.Store }, { type: SessionStorageService }, { type: HttpCancelService }, { type: AppConfigService }, { type: i1$7.ActivatedRoute }], propDecorators: { click: [{
142636
+ 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 </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;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 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%);visibility:hidden;transition:transform 1s,visibility 0s 1s}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: 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"] }]
142637
+ }], ctorParameters: () => [{ type: i1$2.Store }, { type: SessionStorageService }, { type: HttpCancelService }, { type: AppConfigService }, { type: i1$7.ActivatedRoute }, { type: i0.ElementRef }], propDecorators: { menuButton: [{
142638
+ type: ViewChild,
142639
+ args: ['menuButton']
142640
+ }], closeDrawerFromKeyboard: [{
142641
+ type: HostListener,
142642
+ args: ['document:keydown.escape']
142643
+ }], click: [{
142292
142644
  type: HostListener,
142293
142645
  args: ['document:click', ['$event']]
142294
142646
  }] } });
@@ -142348,13 +142700,13 @@ class IntercomComponent {
142348
142700
  });
142349
142701
  }
142350
142702
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IntercomComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
142351
- 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 }); }
142703
+ 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 }); }
142352
142704
  }
142353
142705
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: IntercomComponent, decorators: [{
142354
142706
  type: Component,
142355
142707
  args: [{ selector: 'tb-intercom', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
142356
142708
  CommonModule
142357
- ], 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"] }]
142709
+ ], 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"] }]
142358
142710
  }] });
142359
142711
 
142360
142712
  const ENTRY_TL60 = 'entry-tl60';
@@ -143076,7 +143428,7 @@ class EmptyResultsComponent extends BaseComponent {
143076
143428
  ngOnInit() {
143077
143429
  }
143078
143430
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyResultsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
143079
- 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 }); }
143431
+ 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 }); }
143080
143432
  }
143081
143433
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: EmptyResultsComponent, decorators: [{
143082
143434
  type: Component,
@@ -143086,7 +143438,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
143086
143438
  LocalizationModule,
143087
143439
  MatTooltipModule,
143088
143440
  SanitizedInnerHtmlDirective,
143089
- ], 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"] }]
143441
+ ], 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"] }]
143090
143442
  }], ctorParameters: () => [], propDecorators: { options: [{
143091
143443
  type: Input
143092
143444
  }] } });
@@ -143097,7 +143449,7 @@ class ErrorResultsComponent extends BaseComponent {
143097
143449
  this.IconsHelper = IconsHelper;
143098
143450
  }
143099
143451
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ErrorResultsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
143100
- 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 }); }
143452
+ 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 }); }
143101
143453
  }
143102
143454
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ErrorResultsComponent, decorators: [{
143103
143455
  type: Component,
@@ -143105,7 +143457,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
143105
143457
  CommonModule,
143106
143458
  IconModule,
143107
143459
  LocalizationModule,
143108
- ], 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"] }]
143460
+ ], 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"] }]
143109
143461
  }], ctorParameters: () => [] });
143110
143462
 
143111
143463
  class LoadingOverlayComponent extends BaseComponent {
@@ -143349,7 +143701,7 @@ class LogoComponent extends BaseComponent {
143349
143701
  ngOnInit() {
143350
143702
  }
143351
143703
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: LogoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
143352
- 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 }); }
143704
+ 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 }); }
143353
143705
  }
143354
143706
  __decorate([
143355
143707
  Select(LogoState.image)
@@ -143359,7 +143711,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
143359
143711
  args: [{ selector: 'tb-logo', standalone: true, changeDetection: ChangeDetectionStrategy.OnPush, imports: [
143360
143712
  CommonModule,
143361
143713
  TenantLogoModule,
143362
- ], 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"] }]
143714
+ ], 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"] }]
143363
143715
  }], ctorParameters: () => [], propDecorators: { image$: [], classImage: [{
143364
143716
  type: Input
143365
143717
  }] } });
@@ -143388,7 +143740,7 @@ class ModalButtonsWrapperComponent extends BaseComponent {
143388
143740
  this.minimize.next(this.isMinimized);
143389
143741
  }
143390
143742
  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 }); }
143391
- 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 }] }); }
143743
+ 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" }] }); }
143392
143744
  }
143393
143745
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ModalButtonsWrapperComponent, decorators: [{
143394
143746
  type: Component,
@@ -143396,8 +143748,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
143396
143748
  CommonModule,
143397
143749
  IconModule,
143398
143750
  MatSnackBarModule,
143399
- MatDialogModule
143400
- ], 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"] }]
143751
+ MatDialogModule,
143752
+ IconButtonDirective,
143753
+ LocalizationModule,
143754
+ ], 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"] }]
143401
143755
  }], ctorParameters: () => [{ type: i1$2.Store }], propDecorators: { enabledMinimized: [{
143402
143756
  type: Input
143403
143757
  }], close: [{
@@ -143569,5 +143923,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
143569
143923
  * Generated bundle index. Do not edit.
143570
143924
  */
143571
143925
 
143572
- 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 };
143926
+ 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, 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 };
143573
143927
  //# sourceMappingURL=tiba-spark-client-shared-lib.mjs.map