turbogui-angular 19.1.0 → 20.0.0

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.
@@ -8,6 +8,7 @@ import * as i3 from '@angular/material/button';
8
8
  import { MatButtonModule } from '@angular/material/button';
9
9
  import * as i2 from '@angular/common';
10
10
  import { CommonModule } from '@angular/common';
11
+ import { take, filter } from 'rxjs/operators';
11
12
  import { trigger, transition, style, animate } from '@angular/animations';
12
13
  import { ComponentPortal, DomPortalOutlet } from '@angular/cdk/portal';
13
14
  import * as i2$1 from '@angular/material/datepicker';
@@ -16,7 +17,6 @@ import { MatNativeDateModule } from '@angular/material/core';
16
17
  import * as i1$1 from '@angular/material/snack-bar';
17
18
  import * as i1$2 from '@angular/router';
18
19
  import { NavigationEnd } from '@angular/router';
19
- import { filter } from 'rxjs/operators';
20
20
  import * as i2$2 from '@angular/platform-browser';
21
21
  import { MatFormFieldModule } from '@angular/material/form-field';
22
22
  import * as i4 from '@angular/material/input';
@@ -623,13 +623,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
623
623
  * Manages the application modal and non modal floating elements
624
624
  */
625
625
  class DialogService extends SingletoneStrictClass {
626
- constructor(rendererFactory, matSnackBar, matDialog, injector, applicationRef, componentFactoryResolver) {
626
+ constructor(rendererFactory, matSnackBar, matDialog, injector, applicationRef, environmentInjector) {
627
627
  super(DialogService);
628
628
  this.matSnackBar = matSnackBar;
629
629
  this.matDialog = matDialog;
630
630
  this.injector = injector;
631
631
  this.applicationRef = applicationRef;
632
- this.componentFactoryResolver = componentFactoryResolver;
632
+ this.environmentInjector = environmentInjector;
633
633
  /**
634
634
  * Used to modify the busy state component that is shown by default by the addModalBusyState() method.
635
635
  *
@@ -659,7 +659,7 @@ class DialogService extends SingletoneStrictClass {
659
659
  */
660
660
  this._isShowingSnackBar = false;
661
661
  /**
662
- * Contains a list of the dialogs that are currently visible to the user.
662
+ * Contains a list of the dialogs (MODAL AND NON MODAL) that are currently visible to the user.
663
663
  * Each item in this list is a hash that is computed when dialog is created to uniquely identify it.
664
664
  *
665
665
  * Empty list means no dialogs are currently visible
@@ -670,6 +670,10 @@ class DialogService extends SingletoneStrictClass {
670
670
  * The list uses the same order as the list of _activeDialogs hash values
671
671
  */
672
672
  this._activeDialogInstances = [];
673
+ /**
674
+ * Counts the number of dialogs that are currently open and that can be closed by the user by navigating with the browser
675
+ */
676
+ this._activeCloseableDialogs = 0;
673
677
  /**
674
678
  * Method that is used to delete the window beforeunload event listener once not used anymore
675
679
  */
@@ -709,9 +713,7 @@ class DialogService extends SingletoneStrictClass {
709
713
  * otherwise it will do nothing.
710
714
  */
711
715
  addCloseApplicationWarning() {
712
- if (this._windowBeforeUnloadUnListen === null) {
713
- this._windowBeforeUnloadUnListen = this._renderer.listen('window', 'beforeunload', (event) => event.returnValue = true);
714
- }
716
+ this._windowBeforeUnloadUnListen ??= this._renderer.listen('window', 'beforeunload', (event) => event.returnValue = true);
715
717
  }
716
718
  /**
717
719
  * Remove the close application warning message if previously assigned
@@ -745,7 +747,7 @@ class DialogService extends SingletoneStrictClass {
745
747
  if (this._componentPortal === null) {
746
748
  this._componentPortal = new ComponentPortal(this.customBusyStateComponentClass);
747
749
  // Create a PortalHost with document.body as its anchor element
748
- this._modalBusyStateHost = new DomPortalOutlet(document.body, this.componentFactoryResolver, this.applicationRef, this.injector);
750
+ this._modalBusyStateHost = new DomPortalOutlet(document.body, this.environmentInjector, this.applicationRef, this.injector);
749
751
  }
750
752
  this._modalBusyStateHost.attach(this._componentPortal);
751
753
  this._isShowingBusyState = true;
@@ -799,12 +801,12 @@ class DialogService extends SingletoneStrictClass {
799
801
  return new Promise((resolve) => {
800
802
  const snackBarRef = this.matSnackBar.open(message, action === '' ? undefined : action, config);
801
803
  // Handle action button click
802
- snackBarRef.onAction().subscribe(() => {
804
+ snackBarRef.onAction().pipe(take(1)).subscribe(() => {
803
805
  this._isShowingSnackBar = false;
804
806
  resolve(true);
805
807
  });
806
808
  // Handle dismiss
807
- snackBarRef.afterDismissed().subscribe(() => {
809
+ snackBarRef.afterDismissed().pipe(take(1)).subscribe(() => {
808
810
  this._isShowingSnackBar = false;
809
811
  resolve(false);
810
812
  });
@@ -833,21 +835,29 @@ class DialogService extends SingletoneStrictClass {
833
835
  * this library or extend DialogBaseComponent to create our own custom ones.
834
836
  *
835
837
  * @param dialogComponentClass A class for a component that extends DialogBaseComponent, which will be the dialog that is shown to the user.
836
- * @param properties An object containing the different visual and textual options that this dialog allows:
838
+ * @param properties An object containing the different visual and textual options that this dialog allows.
839
+ * IMPORTANT: texts, options and data values need to be read at the dialog component by declaring "@Inject(MAT_DIALOG_DATA) public data: any"
840
+ * at the dialog component constructor. This data object will contain the texts, options and data properties
841
+ *
837
842
  * - id: The html unique identifier that the dialog will have once created. If not specified, no id will be explicitly set
838
843
  * - width: 50% by default. Specify the css value for the default dialog width. As the dialog is responsive, the value will be automatically
839
844
  * reduced if the available screen is not enough, and will reach the desired value otherwise. We can set any css unit like pixels,
840
845
  * %, vh, vw, or any other. For example: '400px', '50%', etc.
841
- * - maxWidth: Defines the maximum width that the dialog will have regarding the viewport. We can specify it in % or vw, just like is done in
846
+ * - maxWidth: Defines the maximum width that the dialog will have. We can specify it in % or vw, just like is done in
842
847
  * css. By default it is defined as 96vw, which will fit 96% of the viewport on small devices
843
- * - height: TODO docs
844
- * - maxHeight: TODO docs
848
+ * - height: Unset by default. Specify the css value for the dialog height.
849
+ * - maxHeight: Defines the maximum height that the dialog will have. We can specify it in % or vh, just like is done in
850
+ * css. By default it is defined as 96vh, which will fit 96% of the viewport
845
851
  * - modal: True (default) if selecting an option is mandatory to close the dialog, false if the dialog can be closed
846
852
  * by the user clicking outside it
853
+ * - closeOnNavigation: Tells if the dialog should be closed when the user navigates with the browser. By default is true for non modal and false for modal dialogs.
847
854
  * - texts: A list with strings containing the dialog texts, sorted by importance. When dialog has a title, this should
848
855
  * be placed first, subtitle second and so (Each dialog may accept a different custom number of texts).
856
+ * (add "@Inject(MAT_DIALOG_DATA) public data: any" to dialog constructor and read it with data.texts)
849
857
  * - options: A list of strings that will be used as button captions for each one of the accepted dialog options
850
- * - data: An object that we can use to pass any extra data that we want to the dialog
858
+ * (add "@Inject(MAT_DIALOG_DATA) public data: any" to dialog constructor and read it with data.options)
859
+ * - data: An object to pass any extra data we want to the dialog.
860
+ * (add "@Inject(MAT_DIALOG_DATA) public data: any" to dialog constructor and read it with data.data)
851
861
  * - viewContainerRef: This is important if we want to propagate providers from a parent component to this dialog. We must specify
852
862
  * this reference to make sure the same services injected on the parent are available too at the child dialog
853
863
  *
@@ -862,6 +872,7 @@ class DialogService extends SingletoneStrictClass {
862
872
  return new Promise((resolve) => {
863
873
  // Set the default values for non specified properties
864
874
  properties.modal = properties.modal ?? true;
875
+ properties.closeOnNavigation = properties.closeOnNavigation ?? !properties.modal;
865
876
  properties.texts = properties.texts ?? [];
866
877
  properties.options = properties.options ?? [];
867
878
  properties.data = properties.data ?? {};
@@ -877,24 +888,44 @@ class DialogService extends SingletoneStrictClass {
877
888
  if (this._activeDialogs.includes(dialogHash)) {
878
889
  return resolve({ index: -1 });
879
890
  }
880
- const dialogRef = this.matDialog.open(dialogComponentClass, {
891
+ let dialogRefConfig = {
881
892
  width: properties.width ?? "50%",
882
893
  maxWidth: properties.maxWidth ?? "96vw",
894
+ maxHeight: properties.maxHeight ?? "96vh",
883
895
  disableClose: properties.modal,
884
896
  autoFocus: false,
885
- closeOnNavigation: !properties.modal,
897
+ closeOnNavigation: properties.closeOnNavigation,
886
898
  viewContainerRef: properties.viewContainerRef,
887
899
  data: { texts: properties.texts, options: properties.options, data: properties.data }
888
- });
900
+ };
901
+ // Dialog height will only be set if it is specified on properties
902
+ if (properties.height && properties.height !== undefined) {
903
+ dialogRefConfig['height'] = properties.height;
904
+ }
905
+ const dialogRef = this.matDialog.open(dialogComponentClass, dialogRefConfig);
906
+ // Push a new state to handle browser navigation to close the dialog
907
+ if (properties.closeOnNavigation && this._activeCloseableDialogs === 0) {
908
+ history.pushState({ dialogOpen: true }, '');
909
+ }
889
910
  // Assign the dialog ID only if specifically set on properties
890
911
  if (properties.id && properties.id !== undefined) {
891
912
  dialogRef.id = properties.id;
892
913
  }
893
914
  this._activeDialogs.push(dialogHash);
894
915
  this._activeDialogInstances.push(dialogRef);
895
- dialogRef.beforeClosed().subscribe((selection) => {
916
+ if (properties.closeOnNavigation) {
917
+ this._activeCloseableDialogs += 1;
918
+ }
919
+ dialogRef.beforeClosed().pipe(take(1)).subscribe((selection) => {
896
920
  this._activeDialogs = ArrayUtils.removeElement(this._activeDialogs, dialogHash);
897
921
  this._activeDialogInstances = ArrayUtils.removeElement(this._activeDialogInstances, dialogRef);
922
+ if (properties.closeOnNavigation) {
923
+ // Remove dialog state from browser history
924
+ if (this._activeCloseableDialogs === 1 && window.history.state?.dialogOpen) {
925
+ history.back();
926
+ }
927
+ this._activeCloseableDialogs -= 1;
928
+ }
898
929
  if (!properties.modal && selection === undefined) {
899
930
  selection = { index: -1 };
900
931
  }
@@ -936,7 +967,7 @@ class DialogService extends SingletoneStrictClass {
936
967
  id: properties.id ?? undefined,
937
968
  width: properties.width ?? "50%",
938
969
  maxWidth: properties.maxWidth ?? "96vw",
939
- height: properties.height ?? "50%",
970
+ height: properties.height ?? "auto",
940
971
  maxHeight: properties.maxHeight ?? "92vw",
941
972
  modal: properties.modal ?? false,
942
973
  texts: [properties.title ?? ''],
@@ -953,11 +984,16 @@ class DialogService extends SingletoneStrictClass {
953
984
  if (!this._isEnabled) {
954
985
  return;
955
986
  }
987
+ // If there are dialogs that should close on navigation and a history state was pushed, pop it
988
+ if (this._activeCloseableDialogs > 0 && window.history.state?.dialogOpen) {
989
+ history.back();
990
+ }
956
991
  for (const dialogRef of this._activeDialogInstances) {
957
992
  dialogRef.close({ index: -1 });
958
993
  }
959
994
  this._activeDialogs = [];
960
995
  this._activeDialogInstances = [];
996
+ this._activeCloseableDialogs = 0;
961
997
  }
962
998
  /**
963
999
  * TODO - translate from TS version
@@ -981,15 +1017,9 @@ class DialogService extends SingletoneStrictClass {
981
1017
  * Block all the user interactions with the application (keyboard, touch, mouse, ...)
982
1018
  */
983
1019
  _disableUserInteraction() {
984
- if (this._documentKeydownUnlisten === null) {
985
- this._documentKeydownUnlisten = this._renderer.listen('document', 'keydown', (event) => event.preventDefault());
986
- }
987
- if (this._documentMousedownUnlisten === null) {
988
- this._documentMousedownUnlisten = this._renderer.listen('document', 'mousedown', (event) => event.preventDefault());
989
- }
990
- if (this._documentPointerdownUnlisten === null) {
991
- this._documentPointerdownUnlisten = this._renderer.listen('document', 'pointerdown', (event) => event.preventDefault());
992
- }
1020
+ this._documentKeydownUnlisten ??= this._renderer.listen('document', 'keydown', (event) => event.preventDefault());
1021
+ this._documentMousedownUnlisten ??= this._renderer.listen('document', 'mousedown', (event) => event.preventDefault());
1022
+ this._documentPointerdownUnlisten ??= this._renderer.listen('document', 'pointerdown', (event) => event.preventDefault());
993
1023
  }
994
1024
  /**
995
1025
  * Restore the user interactions that were previously disabled with _disableUserInteraction method
@@ -1005,10 +1035,10 @@ class DialogService extends SingletoneStrictClass {
1005
1035
  }
1006
1036
  if (this._documentPointerdownUnlisten !== null) {
1007
1037
  this._documentPointerdownUnlisten();
1008
- this._documentMousedownUnlisten = null;
1038
+ this._documentPointerdownUnlisten = null;
1009
1039
  }
1010
1040
  }
1011
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogService, deps: [{ token: i0.RendererFactory2 }, { token: i1$1.MatSnackBar }, { token: i1.MatDialog }, { token: i0.Injector }, { token: i0.ApplicationRef }, { token: i0.ComponentFactoryResolver }], target: i0.ɵɵFactoryTarget.Injectable }); }
1041
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogService, deps: [{ token: i0.RendererFactory2 }, { token: i1$1.MatSnackBar }, { token: i1.MatDialog }, { token: i0.Injector }, { token: i0.ApplicationRef }, { token: i0.EnvironmentInjector }], target: i0.ɵɵFactoryTarget.Injectable }); }
1012
1042
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogService, providedIn: 'root' }); }
1013
1043
  }
1014
1044
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogService, decorators: [{
@@ -1016,7 +1046,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
1016
1046
  args: [{
1017
1047
  providedIn: 'root',
1018
1048
  }]
1019
- }], ctorParameters: () => [{ type: i0.RendererFactory2 }, { type: i1$1.MatSnackBar }, { type: i1.MatDialog }, { type: i0.Injector }, { type: i0.ApplicationRef }, { type: i0.ComponentFactoryResolver }] });
1049
+ }], ctorParameters: () => [{ type: i0.RendererFactory2 }, { type: i1$1.MatSnackBar }, { type: i1.MatDialog }, { type: i0.Injector }, { type: i0.ApplicationRef }, { type: i0.EnvironmentInjector }] });
1020
1050
 
1021
1051
  /**
1022
1052
  * TurboGUI is A library that helps with the most common and generic UI elements and functionalities
@@ -1170,9 +1200,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
1170
1200
  /**
1171
1201
  * Allows us to easily perform requests to a remote API that is developed with Turbo framework.
1172
1202
  */
1173
- class TurboApiCallerService extends SingletoneStrictClass {
1203
+ class TurboApiService {
1174
1204
  constructor(dialogService, browserService) {
1175
- super(TurboApiCallerService);
1176
1205
  this.dialogService = dialogService;
1177
1206
  this.browserService = browserService;
1178
1207
  /**
@@ -1581,10 +1610,10 @@ class TurboApiCallerService extends SingletoneStrictClass {
1581
1610
  this._token = '';
1582
1611
  this.httpManager.setGlobalPostParam('token', '-');
1583
1612
  }
1584
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TurboApiCallerService, deps: [{ token: DialogService }, { token: BrowserService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1585
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TurboApiCallerService, providedIn: 'root' }); }
1613
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TurboApiService, deps: [{ token: DialogService }, { token: BrowserService }], target: i0.ɵɵFactoryTarget.Injectable }); }
1614
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TurboApiService, providedIn: 'root' }); }
1586
1615
  }
1587
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TurboApiCallerService, decorators: [{
1616
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: TurboApiService, decorators: [{
1588
1617
  type: Injectable,
1589
1618
  args: [{
1590
1619
  providedIn: 'root',
@@ -2234,6 +2263,45 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImpor
2234
2263
  }]
2235
2264
  }] });
2236
2265
 
2266
+ /**
2267
+ * TurboGUI is A library that helps with the most common and generic UI elements and functionalities
2268
+ *
2269
+ * Website : -> http://www.turbogui.org
2270
+ * License : -> Licensed under the Apache License, Version 2.0. You may not use this file except in compliance with the License.
2271
+ * License Url : -> http://www.apache.org/licenses/LICENSE-2.0
2272
+ * CopyRight : -> Copyright 2018 Edertone Advanded Solutions. https://www.edertone.com
2273
+ */
2274
+ /**
2275
+ * A dialog component with an iframe that can be used to display any url or content.
2276
+ *
2277
+ * We must specify the url in the data parameter when opening the dialog, and we can also specify the title
2278
+ * bi placing it at the first position of the texts array.
2279
+ */
2280
+ class DialogIFrameComponent extends DialogBaseComponent {
2281
+ static { this.DIALOG_CLASS_NAME = 'DialogIFrameComponent'; }
2282
+ constructor(elementRef, dialogRef, sanitizer, data) {
2283
+ super(elementRef, dialogRef);
2284
+ this.elementRef = elementRef;
2285
+ this.dialogRef = dialogRef;
2286
+ this.sanitizer = sanitizer;
2287
+ this.data = data;
2288
+ this.title = '';
2289
+ if (data.texts.length > 0) {
2290
+ this.title = data.texts[0];
2291
+ }
2292
+ this.safeUrl = this.sanitizer.bypassSecurityTrustResourceUrl(data.data);
2293
+ }
2294
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogIFrameComponent, deps: [{ token: i0.ElementRef }, { token: i1.MatDialogRef }, { token: i2$2.DomSanitizer }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component }); }
2295
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "19.2.5", type: DialogIFrameComponent, isStandalone: true, selector: "tg-dialog-iframe", providers: [], usesInheritance: true, ngImport: i0, template: "<h2 *ngIf=\"title !== ''\">{{title}}</h2>\r\n\r\n<iframe [src]=\"safeUrl\" title=\"data.texts[0]\"></iframe>", styles: [":host{display:block;width:100%;height:100%}h2{margin-top:0;margin-bottom:25px;width:82%}iframe{width:100%;height:100%}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] }); }
2296
+ }
2297
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.2.5", ngImport: i0, type: DialogIFrameComponent, decorators: [{
2298
+ type: Component,
2299
+ args: [{ selector: 'tg-dialog-iframe', imports: [CommonModule], providers: [], template: "<h2 *ngIf=\"title !== ''\">{{title}}</h2>\r\n\r\n<iframe [src]=\"safeUrl\" title=\"data.texts[0]\"></iframe>", styles: [":host{display:block;width:100%;height:100%}h2{margin-top:0;margin-bottom:25px;width:82%}iframe{width:100%;height:100%}\n"] }]
2300
+ }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.MatDialogRef }, { type: i2$2.DomSanitizer }, { type: undefined, decorators: [{
2301
+ type: Inject,
2302
+ args: [MAT_DIALOG_DATA]
2303
+ }] }] });
2304
+
2237
2305
  /**
2238
2306
  * TurboGUI is A library that helps with the most common and generic UI elements and functionalities
2239
2307
  *
@@ -2766,7 +2834,6 @@ class ButtonContainerComponent extends ButtonBaseComponent {
2766
2834
  super(...arguments);
2767
2835
  /**
2768
2836
  * This is used to attach the fade animation directly to this component so it fades in and out when created and removed from the app
2769
- * TODO: THIS IS NOT A GOOD IDEA
2770
2837
  */
2771
2838
  this.buttonFade = true;
2772
2839
  }
@@ -2985,5 +3052,5 @@ class ValidatorsPlus extends Validators {
2985
3052
  * Generated bundle index. Do not edit.
2986
3053
  */
2987
3054
 
2988
- export { AutoFocusOnDisplayDirective, AutoSelectTextOnFocusDirective, BrowserService, BusyStateBaseComponent, ButtonContainerComponent, ButtonImageComponent, DelayedMethodCallManager, DialogBaseComponent, DialogDateSelectionComponent, DialogErrorComponent, DialogMultipleOptionComponent, DialogService, DialogSingleInputComponent, DialogSingleOptionComponent, DialogSingleSelectionListComponent, DialogTwoOptionComponent, ElementClickOutsideDirective, ElementCreatedDirective, ElementDestroyedDirective, FadeAnimationClass, GUINotification, GlobalErrorService, HTTPService, HTTPServiceGetRequest, HTTPServicePostRequest, LocalesBaseService, NotificationService, RouterBaseService, SingletoneStrictClass, TurboApiCallerService, TurboGuiAngularModule, ValidatorsPlus, View, ViewService };
3055
+ export { AutoFocusOnDisplayDirective, AutoSelectTextOnFocusDirective, BrowserService, BusyStateBaseComponent, ButtonContainerComponent, ButtonImageComponent, DelayedMethodCallManager, DialogBaseComponent, DialogDateSelectionComponent, DialogErrorComponent, DialogIFrameComponent, DialogMultipleOptionComponent, DialogService, DialogSingleInputComponent, DialogSingleOptionComponent, DialogSingleSelectionListComponent, DialogTwoOptionComponent, ElementClickOutsideDirective, ElementCreatedDirective, ElementDestroyedDirective, FadeAnimationClass, GUINotification, GlobalErrorService, HTTPService, HTTPServiceGetRequest, HTTPServicePostRequest, LocalesBaseService, NotificationService, RouterBaseService, SingletoneStrictClass, TurboApiService, TurboGuiAngularModule, ValidatorsPlus, View, ViewService };
2989
3056
  //# sourceMappingURL=turbogui-angular.mjs.map