@igo2/context 16.3.0 → 17.0.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/esm2022/lib/context-import-export/context-import-export/context-import-export.component.mjs +43 -18
  2. package/esm2022/lib/context-import-export/context-import-export.module.mjs +10 -66
  3. package/esm2022/lib/context-import-export/shared/context-export.service.mjs +4 -4
  4. package/esm2022/lib/context-import-export/shared/context-export.utils.mjs +1 -1
  5. package/esm2022/lib/context-import-export/shared/context-import.errors.mjs +1 -1
  6. package/esm2022/lib/context-import-export/shared/context-import.service.mjs +7 -7
  7. package/esm2022/lib/context-import-export/shared/context-import.utils.mjs +1 -1
  8. package/esm2022/lib/context-manager/context-edit/context-edit-binding.directive.mjs +10 -9
  9. package/esm2022/lib/context-manager/context-edit/context-edit.component.mjs +10 -9
  10. package/esm2022/lib/context-manager/context-form/context-form.component.mjs +32 -16
  11. package/esm2022/lib/context-manager/context-item/context-item.component.mjs +30 -15
  12. package/esm2022/lib/context-manager/context-list/context-list-binding.directive.mjs +16 -10
  13. package/esm2022/lib/context-manager/context-list/context-list.component.mjs +48 -17
  14. package/esm2022/lib/context-manager/context-manager.module.mjs +23 -102
  15. package/esm2022/lib/context-manager/context-permissions/context-permissions-binding.directive.mjs +12 -9
  16. package/esm2022/lib/context-manager/context-permissions/context-permissions.component.mjs +47 -18
  17. package/esm2022/lib/context-manager/index.mjs +19 -1
  18. package/esm2022/lib/context-manager/shared/context.interface.mjs +1 -1
  19. package/esm2022/lib/context-manager/shared/context.service.mjs +17 -9
  20. package/esm2022/lib/context-manager/shared/layer-context.directive.mjs +14 -9
  21. package/esm2022/lib/context-manager/shared/map-context.directive.mjs +9 -8
  22. package/esm2022/lib/context-map-button/bookmark-button/bookmark-button.component.mjs +14 -10
  23. package/esm2022/lib/context-map-button/bookmark-button/bookmark-dialog.component.mjs +25 -11
  24. package/esm2022/lib/context-map-button/context-map-button.module.mjs +16 -75
  25. package/esm2022/lib/context-map-button/index.mjs +10 -1
  26. package/esm2022/lib/context-map-button/poi-button/poi-button.component.mjs +33 -16
  27. package/esm2022/lib/context-map-button/poi-button/poi-dialog.component.mjs +25 -11
  28. package/esm2022/lib/context-map-button/poi-button/shared/poi.service.mjs +7 -7
  29. package/esm2022/lib/context-map-button/user-button/user-button.animation.mjs +1 -1
  30. package/esm2022/lib/context-map-button/user-button/user-button.component.mjs +24 -13
  31. package/esm2022/lib/context-map-button/user-button/user-dialog.component.mjs +17 -9
  32. package/esm2022/lib/context.module.mjs +9 -11
  33. package/esm2022/lib/environment/environment.interface.mjs +1 -1
  34. package/esm2022/lib/environment/index.mjs +1 -1
  35. package/esm2022/lib/share-map/index.mjs +9 -1
  36. package/esm2022/lib/share-map/share-map/share-map-api.component.mjs +36 -18
  37. package/esm2022/lib/share-map/share-map/share-map-url.component.mjs +28 -15
  38. package/esm2022/lib/share-map/share-map/share-map.component.mjs +21 -13
  39. package/esm2022/lib/share-map/share-map.module.mjs +10 -50
  40. package/esm2022/lib/share-map/shared/share-map.service.mjs +8 -8
  41. package/esm2022/lib/sidenav/sidenav.component.mjs +29 -16
  42. package/esm2022/lib/sidenav/sidenav.module.mjs +10 -46
  43. package/esm2022/public_api.mjs +1 -1
  44. package/fesm2022/igo2-context.mjs +1363 -1380
  45. package/fesm2022/igo2-context.mjs.map +1 -1
  46. package/lib/context-import-export/context-import-export/context-import-export.component.d.ts +3 -2
  47. package/lib/context-import-export/context-import-export.module.d.ts +4 -15
  48. package/lib/context-import-export/shared/context-export.utils.d.ts +1 -1
  49. package/lib/context-import-export/shared/context-import.service.d.ts +1 -1
  50. package/lib/context-import-export/shared/context-import.utils.d.ts +1 -1
  51. package/lib/context-manager/context-edit/context-edit-binding.directive.d.ts +2 -2
  52. package/lib/context-manager/context-edit/context-edit.component.d.ts +1 -1
  53. package/lib/context-manager/context-form/context-form.component.d.ts +2 -2
  54. package/lib/context-manager/context-item/context-item.component.d.ts +2 -2
  55. package/lib/context-manager/context-list/context-list-binding.directive.d.ts +4 -2
  56. package/lib/context-manager/context-list/context-list.component.d.ts +4 -2
  57. package/lib/context-manager/context-manager.module.d.ts +6 -22
  58. package/lib/context-manager/context-permissions/context-permissions-binding.directive.d.ts +3 -2
  59. package/lib/context-manager/context-permissions/context-permissions.component.d.ts +2 -2
  60. package/lib/context-manager/index.d.ts +7 -0
  61. package/lib/context-manager/shared/context.interface.d.ts +1 -1
  62. package/lib/context-manager/shared/context.service.d.ts +5 -1
  63. package/lib/context-manager/shared/layer-context.directive.d.ts +3 -2
  64. package/lib/context-manager/shared/map-context.directive.d.ts +2 -2
  65. package/lib/context-map-button/bookmark-button/bookmark-button.component.d.ts +2 -2
  66. package/lib/context-map-button/bookmark-button/bookmark-dialog.component.d.ts +1 -1
  67. package/lib/context-map-button/context-map-button.module.d.ts +5 -18
  68. package/lib/context-map-button/index.d.ts +4 -0
  69. package/lib/context-map-button/poi-button/poi-button.component.d.ts +3 -2
  70. package/lib/context-map-button/poi-button/poi-dialog.component.d.ts +1 -1
  71. package/lib/context-map-button/poi-button/shared/poi.service.d.ts +1 -1
  72. package/lib/context-map-button/user-button/user-button.component.d.ts +2 -2
  73. package/lib/context-map-button/user-button/user-dialog.component.d.ts +2 -2
  74. package/lib/context.module.d.ts +9 -9
  75. package/lib/share-map/index.d.ts +4 -0
  76. package/lib/share-map/share-map/share-map-api.component.d.ts +3 -2
  77. package/lib/share-map/share-map/share-map-url.component.d.ts +2 -2
  78. package/lib/share-map/share-map/share-map.component.d.ts +2 -2
  79. package/lib/share-map/share-map.module.d.ts +4 -11
  80. package/lib/share-map/shared/share-map.service.d.ts +1 -1
  81. package/lib/sidenav/sidenav.component.d.ts +2 -2
  82. package/lib/sidenav/sidenav.module.d.ts +4 -10
  83. package/locale/en.context.json +200 -200
  84. package/locale/fr.context.json +200 -200
  85. package/package.json +12 -12
  86. package/src/context-theme.scss +5 -5
  87. package/src/lib/context-manager/context-item/context-item.theming.scss +21 -21
  88. package/src/lib/context-manager/context-list/context-list.theming.scss +23 -23
  89. package/src/lib/context-manager/context-manager.theming.scss +7 -7
@@ -1,64 +1,68 @@
1
1
  import * as i0 from '@angular/core';
2
2
  import { Injectable, Optional, Component, Input, NgModule, EventEmitter, Output, Directive, Self, HostListener, ChangeDetectionStrategy } from '@angular/core';
3
- import * as i6$1 from '@angular/material/form-field';
4
- import { MatFormFieldModule } from '@angular/material/form-field';
5
- import * as i5 from '@angular/material/input';
6
- import { MatInputModule } from '@angular/material/input';
7
- import * as i12$1 from '@angular/material/menu';
8
- import { MatMenuModule } from '@angular/material/menu';
9
- import * as i6 from '@angular/common';
10
- import { CommonModule } from '@angular/common';
11
- import * as i1$2 from '@angular/forms';
3
+ import { NgIf, NgFor, AsyncPipe, NgClass, KeyValuePipe } from '@angular/common';
4
+ import * as i1$3 from '@angular/forms';
12
5
  import { Validators, FormsModule, ReactiveFormsModule, UntypedFormControl } from '@angular/forms';
13
- import * as i7 from '@angular/material/button';
6
+ import * as i5 from '@angular/material/button';
14
7
  import { MatButtonModule } from '@angular/material/button';
15
- import * as i8 from '@angular/material/button-toggle';
8
+ import * as i7 from '@angular/material/button-toggle';
16
9
  import { MatButtonToggleModule } from '@angular/material/button-toggle';
17
- import * as i11$1 from '@angular/material/checkbox';
18
- import { MatCheckboxModule } from '@angular/material/checkbox';
19
10
  import * as i12 from '@angular/material/core';
20
11
  import { MatOptionModule } from '@angular/material/core';
21
- import * as i9 from '@angular/material/divider';
12
+ import * as i13 from '@angular/material/divider';
22
13
  import { MatDividerModule } from '@angular/material/divider';
14
+ import * as i6$1 from '@angular/material/form-field';
15
+ import { MatFormFieldModule } from '@angular/material/form-field';
16
+ import * as i7$1 from '@angular/material/input';
17
+ import { MatInputModule } from '@angular/material/input';
23
18
  import * as i11 from '@angular/material/select';
24
19
  import { MatSelectModule } from '@angular/material/select';
25
- import * as i3$1 from '@angular/material/tabs';
26
- import { MatTabsModule } from '@angular/material/tabs';
27
- import * as i6$3 from '@angular/material/tooltip';
28
- import { MatTooltipModule } from '@angular/material/tooltip';
29
- import * as i13 from '@igo2/common';
30
- import { IgoSpinnerModule, IgoConfirmDialogModule, IgoStopPropagationModule, ActionStore, ActionbarMode, IgoListModule, IgoKeyValueModule, IgoCollapsibleModule, IgoActionbarModule, IgoCustomHtmlModule, getEntityTitle, IgoPanelModule, IgoFlexibleModule } from '@igo2/common';
31
- import * as i3 from '@igo2/core';
32
- import { IgoLanguageModule } from '@igo2/core';
33
- import { BehaviorSubject, Subject, of, Observable, EMPTY, ReplaySubject, timer, merge, combineLatest } from 'rxjs';
20
+ import * as i5$2 from '@igo2/common';
21
+ import { SpinnerComponent, StopPropagationDirective, CollapseDirective, ActionStore, ActionbarMode, ListComponent, ActionbarComponent, CollapsibleComponent, ListItemDirective, ConfirmDialogService, CustomHtmlComponent, getEntityTitle, FlexibleComponent, PanelComponent } from '@igo2/common';
22
+ import * as i1$1 from '@igo2/core/config';
23
+ import * as i3 from '@igo2/core/message';
24
+ import * as i7$2 from '@ngx-translate/core';
25
+ import { TranslateModule } from '@ngx-translate/core';
26
+ import { BehaviorSubject, Subject, of, Observable, ReplaySubject, timer, merge, EMPTY, combineLatest } from 'rxjs';
34
27
  import { skip, first, catchError, tap, map, mergeMap, debounceTime, take, debounce, filter, buffer } from 'rxjs/operators';
35
28
  import * as i1 from '@angular/common/http';
29
+ import { HttpClientModule } from '@angular/common/http';
36
30
  import * as i2 from '@igo2/auth';
37
- import { IgoAuthModule } from '@igo2/auth';
38
- import * as i1$1 from '@igo2/geo';
39
- import { FeatureDataSource, featureRandomStyleFunction, featureRandomStyle, VectorLayer, ClusterDataSource, moveToOlFeatures, FeatureMotion, IgoFeatureModule } from '@igo2/geo';
31
+ import * as i4 from '@igo2/core/language';
32
+ import * as i8 from '@igo2/core/route';
33
+ import * as i6 from '@igo2/core/storage';
34
+ import * as i1$2 from '@igo2/geo';
35
+ import { FeatureDataSource, featureRandomStyleFunction, featureRandomStyle, VectorLayer, ClusterDataSource, moveToOlFeatures, FeatureMotion, FeatureDetailsComponent } from '@igo2/geo';
40
36
  import { ObjectUtils, uuid, downloadContent, Clipboard } from '@igo2/utils';
41
37
  import GeoJSON from 'ol/format/GeoJSON';
42
38
  import olPoint from 'ol/geom/Point';
43
39
  import Cluster from 'ol/source/Cluster';
44
40
  import olVectorSource from 'ol/source/Vector';
45
- import * as i9$1 from '@ngx-translate/core';
46
- import * as i14 from '@angular/material/autocomplete';
47
- import { MatAutocompleteModule } from '@angular/material/autocomplete';
48
- import * as i1$3 from '@angular/material/dialog';
49
- import { MatDialogModule } from '@angular/material/dialog';
50
41
  import * as i6$2 from '@angular/material/icon';
51
42
  import { MatIconModule } from '@angular/material/icon';
52
- import * as i7$1 from '@angular/material/list';
43
+ import * as i5$1 from '@angular/material/tooltip';
44
+ import { MatTooltipModule } from '@angular/material/tooltip';
45
+ import * as i3$1 from '@angular/material/list';
53
46
  import { MatListModule } from '@angular/material/list';
54
- import * as i12$2 from '@angular/material/radio';
47
+ import * as i13$1 from '@angular/material/checkbox';
48
+ import { MatCheckboxModule } from '@angular/material/checkbox';
49
+ import * as i1$4 from '@angular/material/dialog';
50
+ import { MatDialogTitle, MatDialogContent, MatDialogActions } from '@angular/material/dialog';
51
+ import * as i12$1 from '@angular/material/menu';
52
+ import { MatMenuModule } from '@angular/material/menu';
53
+ import * as i8$1 from '@angular/material/autocomplete';
54
+ import { MatAutocompleteModule } from '@angular/material/autocomplete';
55
+ import * as i5$3 from '@angular/material/radio';
55
56
  import { MatRadioModule } from '@angular/material/radio';
57
+ import * as i3$2 from '@igo2/core/media';
56
58
  import * as oleasing from 'ol/easing';
57
59
  import * as olproj from 'ol/proj';
58
60
  import { trigger, state, style, transition, animate } from '@angular/animations';
59
- import * as i5$1 from '@angular/material/sidenav';
61
+ import * as i2$1 from '@angular/material/tabs';
62
+ import { MatTabsModule } from '@angular/material/tabs';
63
+ import * as i2$2 from '@angular/material/sidenav';
60
64
  import { MatSidenavModule } from '@angular/material/sidenav';
61
- import * as i1$4 from '@angular/platform-browser';
65
+ import * as i1$5 from '@angular/platform-browser';
62
66
 
63
67
  var TypePermission;
64
68
  (function (TypePermission) {
@@ -709,17 +713,17 @@ class ContextService {
709
713
  }
710
714
  return found;
711
715
  }
712
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextService, deps: [{ token: i1.HttpClient }, { token: i2.AuthService }, { token: i3.LanguageService }, { token: i3.ConfigService }, { token: i3.MessageService }, { token: i3.StorageService }, { token: i1$1.ExportService }, { token: i3.RouteService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
713
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextService, providedIn: 'root' });
716
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextService, deps: [{ token: i1.HttpClient }, { token: i2.AuthService }, { token: i4.LanguageService }, { token: i1$1.ConfigService }, { token: i3.MessageService }, { token: i6.StorageService }, { token: i1$2.ExportService }, { token: i8.RouteService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
717
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextService, providedIn: 'root' });
714
718
  }
715
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextService, decorators: [{
719
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextService, decorators: [{
716
720
  type: Injectable,
717
721
  args: [{
718
722
  providedIn: 'root'
719
723
  }]
720
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.LanguageService }, { type: i3.ConfigService }, { type: i3.MessageService }, { type: i3.StorageService }, { type: i1$1.ExportService }, { type: i3.RouteService, decorators: [{
724
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i2.AuthService }, { type: i4.LanguageService }, { type: i1$1.ConfigService }, { type: i3.MessageService }, { type: i6.StorageService }, { type: i1$2.ExportService }, { type: i8.RouteService, decorators: [{
721
725
  type: Optional
722
- }] }]; } });
726
+ }] }] });
723
727
 
724
728
  class ExportError extends Error {
725
729
  }
@@ -759,10 +763,10 @@ class ContextExportService {
759
763
  }
760
764
  return false;
761
765
  }
762
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
763
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextExportService, providedIn: 'root' });
766
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextExportService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
767
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextExportService, providedIn: 'root' });
764
768
  }
765
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextExportService, decorators: [{
769
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextExportService, decorators: [{
766
770
  type: Injectable,
767
771
  args: [{
768
772
  providedIn: 'root'
@@ -1027,15 +1031,15 @@ class ContextImportService {
1027
1031
  const context = JSON.parse(data);
1028
1032
  return context;
1029
1033
  }
1030
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextImportService, deps: [{ token: i3.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
1031
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextImportService, providedIn: 'root' });
1034
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextImportService, deps: [{ token: i1$1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
1035
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextImportService, providedIn: 'root' });
1032
1036
  }
1033
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextImportService, decorators: [{
1037
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextImportService, decorators: [{
1034
1038
  type: Injectable,
1035
1039
  args: [{
1036
1040
  providedIn: 'root'
1037
1041
  }]
1038
- }], ctorParameters: function () { return [{ type: i3.ConfigService }]; } });
1042
+ }], ctorParameters: () => [{ type: i1$1.ConfigService }] });
1039
1043
 
1040
1044
  class ContextImportExportComponent {
1041
1045
  contextImportService;
@@ -1134,352 +1138,360 @@ class ContextImportExportComponent {
1134
1138
  ngOnDestroy() {
1135
1139
  this.layers$$.unsubscribe();
1136
1140
  }
1137
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextImportExportComponent, deps: [{ token: ContextImportService }, { token: ContextExportService }, { token: i3.MessageService }, { token: i1$2.UntypedFormBuilder }, { token: i3.ConfigService }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
1138
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContextImportExportComponent, selector: "igo-context-import-export", inputs: { map: "map" }, ngImport: i0, template: "<div class=\"import-export-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"activeImportExport\"\r\n (change)=\"onImportExportChange($event)\"\r\n >\r\n <mat-button-toggle [value]=\"'import'\">\r\n {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'export'\">\r\n {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div *ngIf=\"activeImportExport === 'import'\">\r\n <form class=\"igo-form\">\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"fileInput.click()\"\r\n [disabled]=\"loading$ | async\"\r\n >\r\n {{ 'igo.geo.importExportForm.importButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [style.display]=\"'none'\"\r\n (click)=\"fileInput.value = null\"\r\n (change)=\"importFiles($event.target.files)\"\r\n />\r\n </div>\r\n </form>\r\n <section class=\"mat-typography\">\r\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\r\n <ul>\r\n <li>\r\n {{\r\n 'igo.geo.importExportForm.importSizeMax'\r\n | translate: { size: fileSizeMb }\r\n }}\r\n </li>\r\n </ul>\r\n </section>\r\n</div>\r\n\r\n<form\r\n class=\"igo-form\"\r\n *ngIf=\"activeImportExport === 'export'\"\r\n [formGroup]=\"form\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field class=\"example-full-width\">\r\n <mat-label>{{\r\n 'igo.context.contextImportExport.export.exportContextName' | translate\r\n }}</mat-label>\r\n <input formControlName=\"name\" matInput [value]=\"\" />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.context.contextImportExport.export.exportPlaceHolder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"layers\" multiple>\r\n <mat-option [value]=\"1\" (click)=\"selectAll(e)\" #e>\r\n {{\r\n 'igo.context.contextImportExport.export.exportSelectAll' | translate\r\n }}\r\n </mat-option>\r\n <mat-divider></mat-divider>\r\n <mat-option\r\n *ngFor=\"let layer of userControlledLayerList\"\r\n [value]=\"layer\"\r\n >{{ layer.title }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (loading$ | async)\"\r\n (click)=\"handleExportFormSubmit(form.value)\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n </div>\r\n</form>\r\n", styles: [".import-export-toggle{padding:10px;text-align:center}.import-export-toggle mat-button-toggle-group{width:100%}.import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}.igo-input-container{padding:10px}.igo-input-container mat-form-field{width:100%}h4{padding:0 5px}.igo-form{padding:15px 5px}.igo-form-button-group{text-align:center;padding-top:10px}igo-spinner{position:absolute;padding-left:10px}\n"], dependencies: [{ kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i8.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i8.MatButtonToggle, selector: "mat-button-toggle", inputs: ["disableRipple", "aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatLabel, selector: "mat-label" }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i13.SpinnerComponent, selector: "igo-spinner", inputs: ["shown"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
1141
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextImportExportComponent, deps: [{ token: ContextImportService }, { token: ContextExportService }, { token: i3.MessageService }, { token: i1$3.UntypedFormBuilder }, { token: i1$1.ConfigService }, { token: ContextService }], target: i0.ɵɵFactoryTarget.Component });
1142
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ContextImportExportComponent, isStandalone: true, selector: "igo-context-import-export", inputs: { map: "map" }, ngImport: i0, template: "<div class=\"import-export-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"activeImportExport\"\r\n (change)=\"onImportExportChange($event)\"\r\n >\r\n <mat-button-toggle [value]=\"'import'\">\r\n {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'export'\">\r\n {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div *ngIf=\"activeImportExport === 'import'\">\r\n <form class=\"igo-form\">\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"fileInput.click()\"\r\n [disabled]=\"loading$ | async\"\r\n >\r\n {{ 'igo.geo.importExportForm.importButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [style.display]=\"'none'\"\r\n (click)=\"fileInput.value = null\"\r\n (change)=\"importFiles($any($event.target).files)\"\r\n />\r\n </div>\r\n </form>\r\n <section class=\"mat-typography\">\r\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\r\n <ul>\r\n <li>\r\n {{\r\n 'igo.geo.importExportForm.importSizeMax'\r\n | translate: { size: fileSizeMb }\r\n }}\r\n </li>\r\n </ul>\r\n </section>\r\n</div>\r\n\r\n<form\r\n class=\"igo-form\"\r\n *ngIf=\"activeImportExport === 'export'\"\r\n [formGroup]=\"form\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field class=\"example-full-width\">\r\n <mat-label>{{\r\n 'igo.context.contextImportExport.export.exportContextName' | translate\r\n }}</mat-label>\r\n <input formControlName=\"name\" matInput [value]=\"\" />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.context.contextImportExport.export.exportPlaceHolder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"layers\" multiple>\r\n <mat-option [value]=\"1\" (click)=\"selectAll(e)\" #e>\r\n {{\r\n 'igo.context.contextImportExport.export.exportSelectAll' | translate\r\n }}\r\n </mat-option>\r\n <mat-divider></mat-divider>\r\n <mat-option\r\n *ngFor=\"let layer of userControlledLayerList\"\r\n [value]=\"layer\"\r\n >{{ layer.title }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (loading$ | async)\"\r\n (click)=\"handleExportFormSubmit(form.value)\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n </div>\r\n</form>\r\n", styles: [".import-export-toggle{padding:10px;text-align:center}.import-export-toggle mat-button-toggle-group{width:100%}.import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}.igo-input-container{padding:10px}.igo-input-container mat-form-field{width:100%}h4{padding:0 5px}.igo-form{padding:15px 5px}.igo-form-button-group{text-align:center;padding-top:10px}igo-spinner{position:absolute;padding-left:10px}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonToggleModule }, { kind: "directive", type: i7.MatButtonToggleGroup, selector: "mat-button-toggle-group", inputs: ["appearance", "name", "vertical", "value", "multiple", "disabled"], outputs: ["valueChange", "change"], exportAs: ["matButtonToggleGroup"] }, { kind: "component", type: i7.MatButtonToggle, selector: "mat-button-toggle", inputs: ["aria-label", "aria-labelledby", "id", "name", "value", "tabIndex", "disableRipple", "appearance", "checked", "disabled"], outputs: ["change"], exportAs: ["matButtonToggle"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.NgForm, selector: "form:not([ngNoForm]):not([formGroup]),ng-form,[ngForm]", inputs: ["ngFormOptions"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: SpinnerComponent, selector: "igo-spinner", inputs: ["shown"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatLabel, selector: "mat-label" }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i13.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
1139
1143
  }
1140
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextImportExportComponent, decorators: [{
1144
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextImportExportComponent, decorators: [{
1141
1145
  type: Component,
1142
- args: [{ selector: 'igo-context-import-export', template: "<div class=\"import-export-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"activeImportExport\"\r\n (change)=\"onImportExportChange($event)\"\r\n >\r\n <mat-button-toggle [value]=\"'import'\">\r\n {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'export'\">\r\n {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div *ngIf=\"activeImportExport === 'import'\">\r\n <form class=\"igo-form\">\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"fileInput.click()\"\r\n [disabled]=\"loading$ | async\"\r\n >\r\n {{ 'igo.geo.importExportForm.importButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [style.display]=\"'none'\"\r\n (click)=\"fileInput.value = null\"\r\n (change)=\"importFiles($event.target.files)\"\r\n />\r\n </div>\r\n </form>\r\n <section class=\"mat-typography\">\r\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\r\n <ul>\r\n <li>\r\n {{\r\n 'igo.geo.importExportForm.importSizeMax'\r\n | translate: { size: fileSizeMb }\r\n }}\r\n </li>\r\n </ul>\r\n </section>\r\n</div>\r\n\r\n<form\r\n class=\"igo-form\"\r\n *ngIf=\"activeImportExport === 'export'\"\r\n [formGroup]=\"form\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field class=\"example-full-width\">\r\n <mat-label>{{\r\n 'igo.context.contextImportExport.export.exportContextName' | translate\r\n }}</mat-label>\r\n <input formControlName=\"name\" matInput [value]=\"\" />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.context.contextImportExport.export.exportPlaceHolder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"layers\" multiple>\r\n <mat-option [value]=\"1\" (click)=\"selectAll(e)\" #e>\r\n {{\r\n 'igo.context.contextImportExport.export.exportSelectAll' | translate\r\n }}\r\n </mat-option>\r\n <mat-divider></mat-divider>\r\n <mat-option\r\n *ngFor=\"let layer of userControlledLayerList\"\r\n [value]=\"layer\"\r\n >{{ layer.title }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (loading$ | async)\"\r\n (click)=\"handleExportFormSubmit(form.value)\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n </div>\r\n</form>\r\n", styles: [".import-export-toggle{padding:10px;text-align:center}.import-export-toggle mat-button-toggle-group{width:100%}.import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}.igo-input-container{padding:10px}.igo-input-container mat-form-field{width:100%}h4{padding:0 5px}.igo-form{padding:15px 5px}.igo-form-button-group{text-align:center;padding-top:10px}igo-spinner{position:absolute;padding-left:10px}\n"] }]
1143
- }], ctorParameters: function () { return [{ type: ContextImportService }, { type: ContextExportService }, { type: i3.MessageService }, { type: i1$2.UntypedFormBuilder }, { type: i3.ConfigService }, { type: ContextService }]; }, propDecorators: { map: [{
1146
+ args: [{ selector: 'igo-context-import-export', standalone: true, imports: [
1147
+ MatButtonToggleModule,
1148
+ NgIf,
1149
+ FormsModule,
1150
+ MatButtonModule,
1151
+ SpinnerComponent,
1152
+ ReactiveFormsModule,
1153
+ MatFormFieldModule,
1154
+ MatInputModule,
1155
+ MatSelectModule,
1156
+ MatOptionModule,
1157
+ MatDividerModule,
1158
+ NgFor,
1159
+ AsyncPipe,
1160
+ TranslateModule
1161
+ ], template: "<div class=\"import-export-toggle mat-typography\">\r\n <mat-button-toggle-group\r\n [value]=\"activeImportExport\"\r\n (change)=\"onImportExportChange($event)\"\r\n >\r\n <mat-button-toggle [value]=\"'import'\">\r\n {{ 'igo.geo.importExportForm.importTabTitle' | translate }}\r\n </mat-button-toggle>\r\n <mat-button-toggle [value]=\"'export'\">\r\n {{ 'igo.geo.importExportForm.exportTabTitle' | translate }}\r\n </mat-button-toggle>\r\n </mat-button-toggle-group>\r\n</div>\r\n\r\n<div *ngIf=\"activeImportExport === 'import'\">\r\n <form class=\"igo-form\">\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"fileInput.click()\"\r\n [disabled]=\"loading$ | async\"\r\n >\r\n {{ 'igo.geo.importExportForm.importButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n <input\r\n #fileInput\r\n type=\"file\"\r\n [style.display]=\"'none'\"\r\n (click)=\"fileInput.value = null\"\r\n (change)=\"importFiles($any($event.target).files)\"\r\n />\r\n </div>\r\n </form>\r\n <section class=\"mat-typography\">\r\n <h4>{{ 'igo.geo.importExportForm.importClarifications' | translate }}</h4>\r\n <ul>\r\n <li>\r\n {{\r\n 'igo.geo.importExportForm.importSizeMax'\r\n | translate: { size: fileSizeMb }\r\n }}\r\n </li>\r\n </ul>\r\n </section>\r\n</div>\r\n\r\n<form\r\n class=\"igo-form\"\r\n *ngIf=\"activeImportExport === 'export'\"\r\n [formGroup]=\"form\"\r\n>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field class=\"example-full-width\">\r\n <mat-label>{{\r\n 'igo.context.contextImportExport.export.exportContextName' | translate\r\n }}</mat-label>\r\n <input formControlName=\"name\" matInput [value]=\"\" />\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <mat-label>{{\r\n 'igo.context.contextImportExport.export.exportPlaceHolder' | translate\r\n }}</mat-label>\r\n <mat-select formControlName=\"layers\" multiple>\r\n <mat-option [value]=\"1\" (click)=\"selectAll(e)\" #e>\r\n {{\r\n 'igo.context.contextImportExport.export.exportSelectAll' | translate\r\n }}\r\n </mat-option>\r\n <mat-divider></mat-divider>\r\n <mat-option\r\n *ngFor=\"let layer of userControlledLayerList\"\r\n [value]=\"layer\"\r\n >{{ layer.title }}</mat-option\r\n >\r\n </mat-select>\r\n </mat-form-field>\r\n </div>\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"button\"\r\n [disabled]=\"!form.valid || (loading$ | async)\"\r\n (click)=\"handleExportFormSubmit(form.value)\"\r\n >\r\n {{ 'igo.geo.importExportForm.exportButton' | translate }}\r\n </button>\r\n <igo-spinner [shown]=\"loading$ | async\"></igo-spinner>\r\n </div>\r\n</form>\r\n", styles: [".import-export-toggle{padding:10px;text-align:center}.import-export-toggle mat-button-toggle-group{width:100%}.import-export-toggle mat-button-toggle-group mat-button-toggle{width:50%}.igo-input-container{padding:10px}.igo-input-container mat-form-field{width:100%}h4{padding:0 5px}.igo-form{padding:15px 5px}.igo-form-button-group{text-align:center;padding-top:10px}igo-spinner{position:absolute;padding-left:10px}\n"] }]
1162
+ }], ctorParameters: () => [{ type: ContextImportService }, { type: ContextExportService }, { type: i3.MessageService }, { type: i1$3.UntypedFormBuilder }, { type: i1$1.ConfigService }, { type: ContextService }], propDecorators: { map: [{
1144
1163
  type: Input
1145
1164
  }] } });
1146
1165
 
1166
+ /**
1167
+ * @deprecated import the ContextImportExportComponent directly
1168
+ */
1147
1169
  class IgoContextImportExportModule {
1148
1170
  static forRoot() {
1149
1171
  return {
1150
1172
  ngModule: IgoContextImportExportModule
1151
1173
  };
1152
1174
  }
1153
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextImportExportModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1154
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: IgoContextImportExportModule, declarations: [ContextImportExportComponent], imports: [FormsModule,
1155
- ReactiveFormsModule,
1156
- CommonModule,
1157
- MatButtonModule,
1158
- MatButtonToggleModule,
1159
- MatDividerModule,
1160
- MatTabsModule,
1161
- MatSelectModule,
1162
- MatOptionModule,
1163
- MatFormFieldModule,
1164
- MatInputModule,
1165
- MatCheckboxModule,
1166
- IgoLanguageModule,
1167
- IgoSpinnerModule,
1168
- MatTooltipModule], exports: [ContextImportExportComponent] });
1169
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextImportExportModule, imports: [FormsModule,
1170
- ReactiveFormsModule,
1171
- CommonModule,
1172
- MatButtonModule,
1173
- MatButtonToggleModule,
1174
- MatDividerModule,
1175
- MatTabsModule,
1176
- MatSelectModule,
1177
- MatOptionModule,
1178
- MatFormFieldModule,
1179
- MatInputModule,
1180
- MatCheckboxModule,
1181
- IgoLanguageModule,
1182
- IgoSpinnerModule,
1183
- MatTooltipModule] });
1175
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextImportExportModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1176
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IgoContextImportExportModule, imports: [ContextImportExportComponent], exports: [ContextImportExportComponent] });
1177
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextImportExportModule, imports: [ContextImportExportComponent] });
1184
1178
  }
1185
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextImportExportModule, decorators: [{
1179
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextImportExportModule, decorators: [{
1186
1180
  type: NgModule,
1187
1181
  args: [{
1188
- imports: [
1189
- FormsModule,
1190
- ReactiveFormsModule,
1191
- CommonModule,
1192
- MatButtonModule,
1193
- MatButtonToggleModule,
1194
- MatDividerModule,
1195
- MatTabsModule,
1196
- MatSelectModule,
1197
- MatOptionModule,
1198
- MatFormFieldModule,
1199
- MatInputModule,
1200
- MatCheckboxModule,
1201
- IgoLanguageModule,
1202
- IgoSpinnerModule,
1203
- MatTooltipModule
1204
- ],
1205
- exports: [ContextImportExportComponent],
1206
- declarations: [ContextImportExportComponent]
1182
+ imports: [ContextImportExportComponent],
1183
+ exports: [ContextImportExportComponent]
1207
1184
  }]
1208
1185
  }] });
1209
1186
 
1210
- class BookmarkDialogComponent {
1211
- dialogRef;
1212
- title;
1213
- constructor(dialogRef) {
1214
- this.dialogRef = dialogRef;
1215
- }
1216
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BookmarkDialogComponent, deps: [{ token: i1$3.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
1217
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BookmarkDialogComponent, selector: "igo-bookmark-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"mat-typography\">\r\n {{ 'igo.context.bookmarkButton.dialog.title' | translate }}\r\n</h1>\r\n<div mat-dialog-content class=\"mat-typography\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n required\r\n autocomplete=\"off\"\r\n maxlength=\"128\"\r\n [placeholder]=\"\r\n 'igo.context.bookmarkButton.dialog.placeholder' | translate\r\n \"\r\n [(ngModel)]=\"title\"\r\n />\r\n </mat-form-field>\r\n</div>\r\n<div mat-dialog-actions>\r\n <button\r\n mat-button\r\n color=\"primary\"\r\n [disabled]=\"!title\"\r\n (click)=\"dialogRef.close(title)\"\r\n >\r\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\r\n </button>\r\n <button mat-button (click)=\"dialogRef.close(false)\">\r\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\r\n </button>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
1218
- }
1219
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BookmarkDialogComponent, decorators: [{
1220
- type: Component,
1221
- args: [{ selector: 'igo-bookmark-dialog', template: "<h1 mat-dialog-title class=\"mat-typography\">\r\n {{ 'igo.context.bookmarkButton.dialog.title' | translate }}\r\n</h1>\r\n<div mat-dialog-content class=\"mat-typography\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n required\r\n autocomplete=\"off\"\r\n maxlength=\"128\"\r\n [placeholder]=\"\r\n 'igo.context.bookmarkButton.dialog.placeholder' | translate\r\n \"\r\n [(ngModel)]=\"title\"\r\n />\r\n </mat-form-field>\r\n</div>\r\n<div mat-dialog-actions>\r\n <button\r\n mat-button\r\n color=\"primary\"\r\n [disabled]=\"!title\"\r\n (click)=\"dialogRef.close(title)\"\r\n >\r\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\r\n </button>\r\n <button mat-button (click)=\"dialogRef.close(false)\">\r\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\r\n </button>\r\n</div>\r\n" }]
1222
- }], ctorParameters: function () { return [{ type: i1$3.MatDialogRef }]; } });
1223
-
1224
- class BookmarkButtonComponent {
1225
- dialog;
1226
- contextService;
1187
+ class ContextFormComponent {
1188
+ formBuilder;
1227
1189
  messageService;
1228
- get map() {
1229
- return this._map;
1190
+ form;
1191
+ prefix;
1192
+ get btnSubmitText() {
1193
+ return this._btnSubmitText;
1230
1194
  }
1231
- set map(value) {
1232
- this._map = value;
1195
+ set btnSubmitText(value) {
1196
+ this._btnSubmitText = value;
1233
1197
  }
1234
- _map;
1235
- get color() {
1236
- return this._color;
1198
+ _btnSubmitText;
1199
+ get context() {
1200
+ return this._context;
1237
1201
  }
1238
- set color(value) {
1239
- this._color = value;
1202
+ set context(value) {
1203
+ this._context = value;
1204
+ this.buildForm();
1240
1205
  }
1241
- _color;
1242
- constructor(dialog, contextService, messageService) {
1243
- this.dialog = dialog;
1244
- this.contextService = contextService;
1206
+ _context;
1207
+ get disabled() {
1208
+ return this._disabled;
1209
+ }
1210
+ set disabled(value) {
1211
+ this._disabled = value;
1212
+ }
1213
+ _disabled = false;
1214
+ // TODO: replace any by ContextOptions or Context
1215
+ submitForm = new EventEmitter();
1216
+ clone = new EventEmitter();
1217
+ delete = new EventEmitter();
1218
+ constructor(formBuilder, messageService) {
1219
+ this.formBuilder = formBuilder;
1245
1220
  this.messageService = messageService;
1246
1221
  }
1247
- createContext() {
1248
- this.dialog
1249
- .open(BookmarkDialogComponent, { disableClose: false })
1250
- .afterClosed()
1251
- .pipe(take(1))
1252
- .subscribe((title) => {
1253
- if (title) {
1254
- const context = this.contextService.getContextFromMap(this.map);
1255
- context.title = title;
1256
- this.contextService.create(context).subscribe(() => {
1257
- this.messageService.success('igo.context.bookmarkButton.dialog.createMsg', 'igo.context.bookmarkButton.dialog.createTitle', undefined, { value: context.title });
1258
- this.contextService.loadContext(context.uri);
1259
- });
1260
- }
1222
+ ngOnInit() {
1223
+ this.buildForm();
1224
+ }
1225
+ handleFormSubmit(value) {
1226
+ let inputs = Object.assign({}, value);
1227
+ inputs = ObjectUtils.removeNull(inputs);
1228
+ inputs.uri = inputs.uri.replace(' ', '');
1229
+ if (inputs.uri) {
1230
+ inputs.uri = this.prefix + '-' + inputs.uri;
1231
+ }
1232
+ else {
1233
+ inputs.uri = this.prefix;
1234
+ }
1235
+ this.submitForm.emit(inputs);
1236
+ }
1237
+ copyTextToClipboard() {
1238
+ const text = this.prefix + '-' + this.form.value.uri.replace(' ', '');
1239
+ const successful = Clipboard.copy(text);
1240
+ if (successful) {
1241
+ this.messageService.success('igo.context.contextManager.dialog.copyMsg', 'igo.context.contextManager.dialog.copyTitle');
1242
+ }
1243
+ }
1244
+ buildForm() {
1245
+ const context = this.context || {};
1246
+ const uriSplit = context.uri.split('-');
1247
+ this.prefix = uriSplit.shift();
1248
+ const uri = uriSplit.join('-');
1249
+ this.form = this.formBuilder.group({
1250
+ title: [context.title],
1251
+ uri: [uri || ' ']
1261
1252
  });
1262
1253
  }
1263
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BookmarkButtonComponent, deps: [{ token: i1$3.MatDialog }, { token: ContextService }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Component });
1264
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: BookmarkButtonComponent, selector: "igo-bookmark-button", inputs: { map: "map", color: "color" }, ngImport: i0, template: "<div class=\"igo-bookmark-button-container\">\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.bookmarkButton.create' | translate\"\r\n matTooltipPosition=\"above\"\r\n [color]=\"color\"\r\n (click)=\"createContext()\"\r\n >\r\n <mat-icon svgIcon=\"star\"></mat-icon>\r\n </button>\r\n</div>\r\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-bookmark-button-container{width:40px}:host .igo-bookmark-button-container button{background-color:#fff}:host .igo-bookmark-button-container button:hover{background-color:#efefef}\n"], dependencies: [{ kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
1254
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextFormComponent, deps: [{ token: i1$3.UntypedFormBuilder }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Component });
1255
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ContextFormComponent, isStandalone: true, selector: "igo-context-form", inputs: { btnSubmitText: "btnSubmitText", context: "context", disabled: "disabled" }, outputs: { submitForm: "submitForm", clone: "clone", delete: "delete" }, ngImport: i0, template: "<form\n class=\"igo-form\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleFormSubmit(form.value)\"\n>\n <mat-form-field class=\"full-width\">\n <input\n matInput\n required\n maxlength=\"128\"\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\"\n />\n <mat-error>\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field id=\"uriInput\" class=\"full-width\">\n <span *ngIf=\"prefix\" class=\"prefix\">{{ prefix }}-</span>\n <span class=\"fieldWrapper\">\n <input\n matInput\n maxlength=\"64\"\n floatLabel=\"always\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\"\n />\n </span>\n </mat-form-field>\n\n <button\n id=\"copyButton\"\n type=\"button\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.contextManager.form.copy' | translate\"\n color=\"primary\"\n (click)=\"copyTextToClipboard()\"\n >\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n\n <div class=\"igo-form-button-group\">\n <button\n mat-raised-button\n type=\"submit\"\n [disabled]=\"!form.valid || disabled\"\n >\n {{ 'igo.context.contextManager.form.edit' | translate }}\n </button>\n </div>\n</form>\n", styles: ["form{margin:10px}.full-width{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}#copyButton{width:24px;float:right;position:relative;top:-58px;left:5px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
1265
1256
  }
1266
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: BookmarkButtonComponent, decorators: [{
1257
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextFormComponent, decorators: [{
1267
1258
  type: Component,
1268
- args: [{ selector: 'igo-bookmark-button', template: "<div class=\"igo-bookmark-button-container\">\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.bookmarkButton.create' | translate\"\r\n matTooltipPosition=\"above\"\r\n [color]=\"color\"\r\n (click)=\"createContext()\"\r\n >\r\n <mat-icon svgIcon=\"star\"></mat-icon>\r\n </button>\r\n</div>\r\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-bookmark-button-container{width:40px}:host .igo-bookmark-button-container button{background-color:#fff}:host .igo-bookmark-button-container button:hover{background-color:#efefef}\n"] }]
1269
- }], ctorParameters: function () { return [{ type: i1$3.MatDialog }, { type: ContextService }, { type: i3.MessageService }]; }, propDecorators: { map: [{
1259
+ args: [{ selector: 'igo-context-form', standalone: true, imports: [
1260
+ FormsModule,
1261
+ ReactiveFormsModule,
1262
+ MatFormFieldModule,
1263
+ MatInputModule,
1264
+ NgIf,
1265
+ MatButtonModule,
1266
+ MatTooltipModule,
1267
+ MatIconModule,
1268
+ TranslateModule
1269
+ ], template: "<form\n class=\"igo-form\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleFormSubmit(form.value)\"\n>\n <mat-form-field class=\"full-width\">\n <input\n matInput\n required\n maxlength=\"128\"\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\"\n />\n <mat-error>\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\n </mat-error>\n </mat-form-field>\n\n <mat-form-field id=\"uriInput\" class=\"full-width\">\n <span *ngIf=\"prefix\" class=\"prefix\">{{ prefix }}-</span>\n <span class=\"fieldWrapper\">\n <input\n matInput\n maxlength=\"64\"\n floatLabel=\"always\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\"\n />\n </span>\n </mat-form-field>\n\n <button\n id=\"copyButton\"\n type=\"button\"\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.contextManager.form.copy' | translate\"\n color=\"primary\"\n (click)=\"copyTextToClipboard()\"\n >\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n\n <div class=\"igo-form-button-group\">\n <button\n mat-raised-button\n type=\"submit\"\n [disabled]=\"!form.valid || disabled\"\n >\n {{ 'igo.context.contextManager.form.edit' | translate }}\n </button>\n </div>\n</form>\n", styles: ["form{margin:10px}.full-width{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}#copyButton{width:24px;float:right;position:relative;top:-58px;left:5px}\n"] }]
1270
+ }], ctorParameters: () => [{ type: i1$3.UntypedFormBuilder }, { type: i3.MessageService }], propDecorators: { btnSubmitText: [{
1270
1271
  type: Input
1271
- }], color: [{
1272
+ }], context: [{
1272
1273
  type: Input
1274
+ }], disabled: [{
1275
+ type: Input
1276
+ }], submitForm: [{
1277
+ type: Output
1278
+ }], clone: [{
1279
+ type: Output
1280
+ }], delete: [{
1281
+ type: Output
1273
1282
  }] } });
1274
1283
 
1275
- class PoiDialogComponent {
1276
- dialogRef;
1277
- title;
1278
- constructor(dialogRef) {
1279
- this.dialogRef = dialogRef;
1280
- }
1281
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PoiDialogComponent, deps: [{ token: i1$3.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
1282
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PoiDialogComponent, selector: "igo-poi-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"mat-typography\">\r\n {{ 'igo.context.poiButton.dialog.title' | translate }}\r\n</h1>\r\n<div mat-dialog-content>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n required\r\n autocomplete=\"off\"\r\n [placeholder]=\"'igo.context.poiButton.dialog.placeholder' | translate\"\r\n [(ngModel)]=\"title\"\r\n />\r\n </mat-form-field>\r\n</div>\r\n<div mat-dialog-actions>\r\n <button\r\n mat-button\r\n color=\"primary\"\r\n [disabled]=\"!title\"\r\n (click)=\"dialogRef.close(title)\"\r\n >\r\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\r\n </button>\r\n <button mat-button (click)=\"dialogRef.close(false)\">\r\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\r\n </button>\r\n</div>\r\n", dependencies: [{ kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
1283
- }
1284
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PoiDialogComponent, decorators: [{
1285
- type: Component,
1286
- args: [{ selector: 'igo-poi-dialog', template: "<h1 mat-dialog-title class=\"mat-typography\">\r\n {{ 'igo.context.poiButton.dialog.title' | translate }}\r\n</h1>\r\n<div mat-dialog-content>\r\n <mat-form-field>\r\n <input\r\n matInput\r\n required\r\n autocomplete=\"off\"\r\n [placeholder]=\"'igo.context.poiButton.dialog.placeholder' | translate\"\r\n [(ngModel)]=\"title\"\r\n />\r\n </mat-form-field>\r\n</div>\r\n<div mat-dialog-actions>\r\n <button\r\n mat-button\r\n color=\"primary\"\r\n [disabled]=\"!title\"\r\n (click)=\"dialogRef.close(title)\"\r\n >\r\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\r\n </button>\r\n <button mat-button (click)=\"dialogRef.close(false)\">\r\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\r\n </button>\r\n</div>\r\n" }]
1287
- }], ctorParameters: function () { return [{ type: i1$3.MatDialogRef }]; } });
1288
-
1289
- class PoiService {
1290
- http;
1291
- config;
1292
- baseUrl;
1293
- constructor(http, config) {
1294
- this.http = http;
1295
- this.config = config;
1296
- this.baseUrl = this.config.getConfig('context.url');
1284
+ class ContextEditComponent {
1285
+ cd;
1286
+ get context() {
1287
+ return this._context;
1297
1288
  }
1298
- get() {
1299
- if (!this.baseUrl) {
1300
- return EMPTY;
1301
- }
1302
- const url = this.baseUrl + '/pois';
1303
- return this.http.get(url);
1289
+ set context(value) {
1290
+ this._context = value;
1291
+ this.refresh();
1304
1292
  }
1305
- delete(id) {
1306
- const url = this.baseUrl + '/pois/' + id;
1307
- return this.http.delete(url);
1293
+ _context;
1294
+ submitForm = new EventEmitter();
1295
+ constructor(cd) {
1296
+ this.cd = cd;
1308
1297
  }
1309
- create(context) {
1310
- const url = this.baseUrl + '/pois';
1311
- return this.http.post(url, context);
1298
+ refresh() {
1299
+ this.cd.detectChanges();
1312
1300
  }
1313
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PoiService, deps: [{ token: i1.HttpClient }, { token: i3.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
1314
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PoiService });
1301
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextEditComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1302
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ContextEditComponent, isStandalone: true, selector: "igo-context-edit", inputs: { context: "context" }, outputs: { submitForm: "submitForm" }, ngImport: i0, template: "<igo-context-form\n *ngIf=\"context\"\n [btnSubmitText]=\"'igo.context.contextManager.save' | translate\"\n [context]=\"context\"\n (submitForm)=\"submitForm.emit($event)\"\n>\n</igo-context-form>\n", dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ContextFormComponent, selector: "igo-context-form", inputs: ["btnSubmitText", "context", "disabled"], outputs: ["submitForm", "clone", "delete"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
1315
1303
  }
1316
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PoiService, decorators: [{
1317
- type: Injectable
1318
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i3.ConfigService }]; } });
1304
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextEditComponent, decorators: [{
1305
+ type: Component,
1306
+ args: [{ selector: 'igo-context-edit', standalone: true, imports: [NgIf, ContextFormComponent, TranslateModule], template: "<igo-context-form\n *ngIf=\"context\"\n [btnSubmitText]=\"'igo.context.contextManager.save' | translate\"\n [context]=\"context\"\n (submitForm)=\"submitForm.emit($event)\"\n>\n</igo-context-form>\n" }]
1307
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { context: [{
1308
+ type: Input
1309
+ }], submitForm: [{
1310
+ type: Output
1311
+ }] } });
1319
1312
 
1320
- class PoiButtonComponent {
1321
- dialog;
1322
- authService;
1323
- poiService;
1313
+ class ContextEditBindingDirective {
1314
+ contextService;
1324
1315
  messageService;
1325
- languageService;
1326
- confirmDialogService;
1327
- get map() {
1328
- return this._map;
1329
- }
1330
- set map(value) {
1331
- this._map = value;
1332
- }
1333
- _map;
1334
- get color() {
1335
- return this._color;
1336
- }
1337
- set color(value) {
1338
- this._color = value;
1316
+ component;
1317
+ editedContext$$;
1318
+ submitSuccessed = new EventEmitter();
1319
+ onEdit(context) {
1320
+ const id = this.component.context.id;
1321
+ this.contextService.update(id, context).subscribe(() => {
1322
+ this.messageService.success('igo.context.contextManager.dialog.saveMsg', 'igo.context.contextManager.dialog.saveTitle', undefined, {
1323
+ value: context.title || this.component.context.title
1324
+ });
1325
+ this.contextService.setEditedContext(undefined);
1326
+ this.submitSuccessed.emit(context);
1327
+ });
1339
1328
  }
1340
- _color;
1341
- pois;
1342
- authenticate$$;
1343
- constructor(dialog, authService, poiService, messageService, languageService, confirmDialogService) {
1344
- this.dialog = dialog;
1345
- this.authService = authService;
1346
- this.poiService = poiService;
1329
+ constructor(component, contextService, messageService) {
1330
+ this.contextService = contextService;
1347
1331
  this.messageService = messageService;
1348
- this.languageService = languageService;
1349
- this.confirmDialogService = confirmDialogService;
1332
+ this.component = component;
1350
1333
  }
1351
1334
  ngOnInit() {
1352
- this.authenticate$$ = this.authService.authenticate$.subscribe((auth) => {
1353
- if (auth) {
1354
- this.getPois();
1355
- }
1356
- });
1335
+ this.editedContext$$ = this.contextService.editedContext$.subscribe((context) => this.handleEditedContextChange(context));
1357
1336
  }
1358
1337
  ngOnDestroy() {
1359
- this.authenticate$$.unsubscribe();
1338
+ this.editedContext$$.unsubscribe();
1360
1339
  }
1361
- deletePoi(poi) {
1362
- if (poi && poi.id) {
1363
- this.confirmDialogService
1364
- .open(this.languageService.translate.instant('igo.context.poiButton.dialog.confirmDelete'))
1365
- .subscribe((confirm) => {
1366
- if (confirm) {
1367
- this.poiService.delete(poi.id).subscribe(() => {
1368
- this.messageService.info('igo.context.poiButton.dialog.deleteMsg', 'igo.context.poiButton.dialog.deleteTitle', undefined, { value: poi.title });
1369
- this.pois = this.pois.filter((p) => p.id !== poi.id);
1370
- }, (err) => {
1371
- err.error.title = 'DELETE Pois';
1372
- this.messageService.showError(err);
1373
- });
1374
- }
1375
- });
1376
- }
1340
+ handleEditedContextChange(context) {
1341
+ this.component.context = context;
1377
1342
  }
1378
- getPois() {
1379
- this.poiService
1380
- .get()
1381
- .pipe(take(1))
1382
- .subscribe((rep) => {
1383
- this.pois = rep;
1384
- }, (err) => {
1385
- err.error.title = 'GET Pois';
1386
- this.messageService.showError(err);
1387
- });
1343
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextEditBindingDirective, deps: [{ token: ContextEditComponent, self: true }, { token: ContextService }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Directive });
1344
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: ContextEditBindingDirective, isStandalone: true, selector: "[igoContextEditBinding]", outputs: { submitSuccessed: "submitSuccessed" }, host: { listeners: { "submitForm": "onEdit($event)" } }, ngImport: i0 });
1345
+ }
1346
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextEditBindingDirective, decorators: [{
1347
+ type: Directive,
1348
+ args: [{
1349
+ selector: '[igoContextEditBinding]',
1350
+ standalone: true
1351
+ }]
1352
+ }], ctorParameters: () => [{ type: ContextEditComponent, decorators: [{
1353
+ type: Self
1354
+ }] }, { type: ContextService }, { type: i3.MessageService }], propDecorators: { submitSuccessed: [{
1355
+ type: Output
1356
+ }], onEdit: [{
1357
+ type: HostListener,
1358
+ args: ['submitForm', ['$event']]
1359
+ }] } });
1360
+
1361
+ class ContextItemComponent {
1362
+ auth;
1363
+ storageService;
1364
+ typePermission = TypePermission;
1365
+ color = 'primary';
1366
+ collapsed = true;
1367
+ showFavorite = true;
1368
+ context;
1369
+ default;
1370
+ selected;
1371
+ edit = new EventEmitter();
1372
+ delete = new EventEmitter();
1373
+ save = new EventEmitter();
1374
+ clone = new EventEmitter();
1375
+ hide = new EventEmitter();
1376
+ show = new EventEmitter();
1377
+ favorite = new EventEmitter();
1378
+ managePermissions = new EventEmitter();
1379
+ manageTools = new EventEmitter();
1380
+ get hidden() {
1381
+ return this.context.hidden;
1388
1382
  }
1389
- createPoi() {
1390
- const view = this.map.ol.getView();
1391
- const proj = view.getProjection().getCode();
1392
- const center = new olPoint(view.getCenter()).transform(proj, 'EPSG:4326');
1393
- const poi = {
1394
- title: '',
1395
- x: center.getCoordinates()[0],
1396
- y: center.getCoordinates()[1],
1397
- zoom: view.getZoom()
1398
- };
1399
- this.dialog
1400
- .open(PoiDialogComponent, { disableClose: false })
1401
- .afterClosed()
1402
- .subscribe((title) => {
1403
- if (title) {
1404
- poi.title = title;
1405
- this.poiService.create(poi).subscribe((newPoi) => {
1406
- this.messageService.success('igo.context.poiButton.dialog.createMsg', 'igo.context.poiButton.dialog.createTitle', undefined, { value: poi.title });
1407
- poi.id = newPoi.id;
1408
- this.pois.push(poi);
1409
- }, (err) => {
1410
- err.error.title = 'POST Pois';
1411
- this.messageService.showError(err);
1412
- });
1413
- }
1414
- });
1383
+ get canShare() {
1384
+ return this.storageService.get('canShare') === true;
1415
1385
  }
1416
- zoomOnPoi(id) {
1417
- const poi = this.pois.find((p) => p.id === id);
1418
- const center = olproj.fromLonLat([Number(poi.x), Number(poi.y)], this.map.projection);
1419
- this.map.ol.getView().animate({
1420
- center,
1421
- zoom: poi.zoom,
1422
- duration: 500,
1423
- easing: oleasing.easeOut
1424
- });
1386
+ constructor(auth, storageService) {
1387
+ this.auth = auth;
1388
+ this.storageService = storageService;
1425
1389
  }
1426
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PoiButtonComponent, deps: [{ token: i1$3.MatDialog }, { token: i2.AuthService }, { token: PoiService }, { token: i3.MessageService }, { token: i3.LanguageService }, { token: i13.ConfirmDialogService }], target: i0.ɵɵFactoryTarget.Component });
1427
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: PoiButtonComponent, selector: "igo-poi-button", inputs: { map: "map", color: "color" }, ngImport: i0, template: "<mat-select\r\n [placeholder]=\"'igo.context.poiButton.placeholder' | translate\"\r\n floatPlaceholder=\"never\"\r\n>\r\n <mat-option (click)=\"createPoi()\" class=\"poi-option\">\r\n <div class=\"titlePoi\">\r\n {{ 'igo.context.poiButton.create' | translate }}\r\n </div>\r\n <button\r\n igoStopPropagation\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"createPoi()\"\r\n >\r\n <mat-icon svgIcon=\"plus-circle\"></mat-icon>\r\n </button>\r\n </mat-option>\r\n <mat-divider></mat-divider>\r\n <mat-option\r\n *ngFor=\"let poi of pois\"\r\n class=\"poi-option\"\r\n [value]=\"poi.id\"\r\n (click)=\"zoomOnPoi(poi.id)\"\r\n >\r\n <div class=\"titlePoi\">{{ poi.title }}</div>\r\n <button\r\n mat-icon-button\r\n igoStopPropagation\r\n color=\"warn\"\r\n (click)=\"deletePoi(poi)\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </mat-option>\r\n</mat-select>\r\n", styles: [":host{background-color:#fff;padding:0 8px;height:100%}mat-select{width:150px;height:100%}mat-select ::ng-deep .mat-mdc-select-trigger{height:100%}::ng-deep .poi-option .mdc-list-item__primary-text{display:flex;justify-content:space-between;align-items:center;flex:1;overflow:visible}::ng-deep .poi-option button{margin-right:-16px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i13.StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i9.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex", "panelWidth", "hideSingleSelectionIndicator"], exportAs: ["matSelect"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
1390
+ favoriteClick(context) {
1391
+ this.favorite.emit(context);
1392
+ }
1393
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextItemComponent, deps: [{ token: i2.AuthService }, { token: i6.StorageService }], target: i0.ɵɵFactoryTarget.Component });
1394
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ContextItemComponent, isStandalone: true, selector: "igo-context-item", inputs: { showFavorite: "showFavorite", context: "context", default: "default", selected: "selected" }, outputs: { edit: "edit", delete: "delete", save: "save", clone: "clone", hide: "hide", show: "show", favorite: "favorite", managePermissions: "managePermissions", manageTools: "manageTools" }, ngImport: i0, template: "<mat-list-item\r\n class=\"mat-list-item\"\r\n [ngClass]=\"{ 'mat-list-item-light': hidden }\"\r\n>\r\n <button\r\n *ngIf=\"auth.authenticated\"\r\n matListItemAvatar\r\n mat-icon-button\r\n igoStopPropagation\r\n [matTooltip]=\"\r\n auth.authenticated\r\n ? ('igo.context.contextManager.favorite' | translate)\r\n : ''\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"default ? 'primary' : 'default'\"\r\n (click)=\"favoriteClick(context)\"\r\n >\r\n <mat-icon\r\n *ngIf=\"!context.iconImage\"\r\n svgIcon=\"{{\r\n context.icon\r\n ? context.icon\r\n : context.scope === 'public'\r\n ? 'earth'\r\n : 'star'\r\n }}\"\r\n ></mat-icon>\r\n <img *ngIf=\"context.iconImage\" [src]=\"context.iconImage\" />\r\n </button>\r\n <button\r\n matListItemAvatar\r\n *ngIf=\"!auth.authenticated && showFavorite\"\r\n mat-icon-button\r\n igoStopPropagation\r\n [matTooltip]=\"'igo.context.contextManager.favorite' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"default ? 'primary' : 'default'\"\r\n (click)=\"favoriteClick(context)\"\r\n >\r\n <mat-icon svgIcon=\"star\"></mat-icon>\r\n </button>\r\n <span matListItemTitle>{{ context.title }}</span>\r\n\r\n <div\r\n *ngIf=\"auth.authenticated\"\r\n matListItemMeta\r\n igoStopPropagation\r\n class=\"igo-actions-container\"\r\n >\r\n <button\r\n *ngIf=\"\r\n collapsed &&\r\n selected &&\r\n (context.permission === typePermission[typePermission.write] ||\r\n context.imported)\r\n \"\r\n class=\"save-button\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.save' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"save.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"content-save\"></mat-icon>\r\n </button>\r\n\r\n <div #actions class=\"igo-actions-expand-container\">\r\n <button\r\n *ngIf=\"canShare && !context.imported\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.managePermissions' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"managePermissions.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"account-arrow-right\"></mat-icon>\r\n </button>\r\n\r\n <!--button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.manageTools' | translate\"\r\n [color]=\"color\"\r\n (click)=\"manageTools.emit(context)\">\r\n <mat-icon svgIcon=\"widgets\"></mat-icon>\r\n </button-->\r\n\r\n <button\r\n *ngIf=\"!context.imported\"\r\n class=\"clone-button\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.clone' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"clone.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"\r\n context.permission === typePermission[typePermission.write] &&\r\n !context.imported\r\n \"\r\n class=\"edit-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.edit' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"edit.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"pencil\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"!context.hidden && !context.imported\"\r\n class=\"hide-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.hide' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"hide.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"eye\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"context.hidden && !context.imported\"\r\n class=\"hide-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.show' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"show.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"eye-off\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"\r\n context.permission === typePermission[typePermission.write] ||\r\n context.imported\r\n \"\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.context.contextManager.delete' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"delete.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <button\r\n class=\"actions-button\"\r\n mat-icon-button\r\n igoCollapse\r\n [color]=\"color\"\r\n [target]=\"actions\"\r\n [collapsed]=\"collapsed\"\r\n (click)=\"collapsed = !collapsed\"\r\n >\r\n <mat-icon svgIcon=\"dots-horizontal\"></mat-icon>\r\n </button>\r\n </div>\r\n</mat-list-item>\r\n", styles: [":host{overflow:hidden}:host .igo-actions-container{flex-shrink:0}:host .igo-actions-expand-container{display:inline-flex}:host mat-icon.disabled{color:#00000061}:host button[matlistitemavatar]{margin-right:8px}\n"], dependencies: [{ kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i3$1.MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "directive", type: i3$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i3$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: CollapseDirective, selector: "[igoCollapse]", inputs: ["target", "collapsed"], outputs: ["toggle"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1428
1395
  }
1429
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: PoiButtonComponent, decorators: [{
1396
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextItemComponent, decorators: [{
1430
1397
  type: Component,
1431
- args: [{ selector: 'igo-poi-button', template: "<mat-select\r\n [placeholder]=\"'igo.context.poiButton.placeholder' | translate\"\r\n floatPlaceholder=\"never\"\r\n>\r\n <mat-option (click)=\"createPoi()\" class=\"poi-option\">\r\n <div class=\"titlePoi\">\r\n {{ 'igo.context.poiButton.create' | translate }}\r\n </div>\r\n <button\r\n igoStopPropagation\r\n mat-icon-button\r\n color=\"primary\"\r\n (click)=\"createPoi()\"\r\n >\r\n <mat-icon svgIcon=\"plus-circle\"></mat-icon>\r\n </button>\r\n </mat-option>\r\n <mat-divider></mat-divider>\r\n <mat-option\r\n *ngFor=\"let poi of pois\"\r\n class=\"poi-option\"\r\n [value]=\"poi.id\"\r\n (click)=\"zoomOnPoi(poi.id)\"\r\n >\r\n <div class=\"titlePoi\">{{ poi.title }}</div>\r\n <button\r\n mat-icon-button\r\n igoStopPropagation\r\n color=\"warn\"\r\n (click)=\"deletePoi(poi)\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </mat-option>\r\n</mat-select>\r\n", styles: [":host{background-color:#fff;padding:0 8px;height:100%}mat-select{width:150px;height:100%}mat-select ::ng-deep .mat-mdc-select-trigger{height:100%}::ng-deep .poi-option .mdc-list-item__primary-text{display:flex;justify-content:space-between;align-items:center;flex:1;overflow:visible}::ng-deep .poi-option button{margin-right:-16px}\n"] }]
1432
- }], ctorParameters: function () { return [{ type: i1$3.MatDialog }, { type: i2.AuthService }, { type: PoiService }, { type: i3.MessageService }, { type: i3.LanguageService }, { type: i13.ConfirmDialogService }]; }, propDecorators: { map: [{
1398
+ args: [{ selector: 'igo-context-item', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1399
+ MatListModule,
1400
+ NgClass,
1401
+ NgIf,
1402
+ MatButtonModule,
1403
+ StopPropagationDirective,
1404
+ MatTooltipModule,
1405
+ MatIconModule,
1406
+ CollapseDirective,
1407
+ TranslateModule
1408
+ ], template: "<mat-list-item\r\n class=\"mat-list-item\"\r\n [ngClass]=\"{ 'mat-list-item-light': hidden }\"\r\n>\r\n <button\r\n *ngIf=\"auth.authenticated\"\r\n matListItemAvatar\r\n mat-icon-button\r\n igoStopPropagation\r\n [matTooltip]=\"\r\n auth.authenticated\r\n ? ('igo.context.contextManager.favorite' | translate)\r\n : ''\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"default ? 'primary' : 'default'\"\r\n (click)=\"favoriteClick(context)\"\r\n >\r\n <mat-icon\r\n *ngIf=\"!context.iconImage\"\r\n svgIcon=\"{{\r\n context.icon\r\n ? context.icon\r\n : context.scope === 'public'\r\n ? 'earth'\r\n : 'star'\r\n }}\"\r\n ></mat-icon>\r\n <img *ngIf=\"context.iconImage\" [src]=\"context.iconImage\" />\r\n </button>\r\n <button\r\n matListItemAvatar\r\n *ngIf=\"!auth.authenticated && showFavorite\"\r\n mat-icon-button\r\n igoStopPropagation\r\n [matTooltip]=\"'igo.context.contextManager.favorite' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"default ? 'primary' : 'default'\"\r\n (click)=\"favoriteClick(context)\"\r\n >\r\n <mat-icon svgIcon=\"star\"></mat-icon>\r\n </button>\r\n <span matListItemTitle>{{ context.title }}</span>\r\n\r\n <div\r\n *ngIf=\"auth.authenticated\"\r\n matListItemMeta\r\n igoStopPropagation\r\n class=\"igo-actions-container\"\r\n >\r\n <button\r\n *ngIf=\"\r\n collapsed &&\r\n selected &&\r\n (context.permission === typePermission[typePermission.write] ||\r\n context.imported)\r\n \"\r\n class=\"save-button\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.save' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"save.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"content-save\"></mat-icon>\r\n </button>\r\n\r\n <div #actions class=\"igo-actions-expand-container\">\r\n <button\r\n *ngIf=\"canShare && !context.imported\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.managePermissions' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"managePermissions.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"account-arrow-right\"></mat-icon>\r\n </button>\r\n\r\n <!--button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.manageTools' | translate\"\r\n [color]=\"color\"\r\n (click)=\"manageTools.emit(context)\">\r\n <mat-icon svgIcon=\"widgets\"></mat-icon>\r\n </button-->\r\n\r\n <button\r\n *ngIf=\"!context.imported\"\r\n class=\"clone-button\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.clone' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"clone.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"\r\n context.permission === typePermission[typePermission.write] &&\r\n !context.imported\r\n \"\r\n class=\"edit-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.edit' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"edit.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"pencil\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"!context.hidden && !context.imported\"\r\n class=\"hide-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.hide' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"hide.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"eye\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"context.hidden && !context.imported\"\r\n class=\"hide-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.show' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"show.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"eye-off\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"\r\n context.permission === typePermission[typePermission.write] ||\r\n context.imported\r\n \"\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.context.contextManager.delete' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"delete.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <button\r\n class=\"actions-button\"\r\n mat-icon-button\r\n igoCollapse\r\n [color]=\"color\"\r\n [target]=\"actions\"\r\n [collapsed]=\"collapsed\"\r\n (click)=\"collapsed = !collapsed\"\r\n >\r\n <mat-icon svgIcon=\"dots-horizontal\"></mat-icon>\r\n </button>\r\n </div>\r\n</mat-list-item>\r\n", styles: [":host{overflow:hidden}:host .igo-actions-container{flex-shrink:0}:host .igo-actions-expand-container{display:inline-flex}:host mat-icon.disabled{color:#00000061}:host button[matlistitemavatar]{margin-right:8px}\n"] }]
1409
+ }], ctorParameters: () => [{ type: i2.AuthService }, { type: i6.StorageService }], propDecorators: { showFavorite: [{
1433
1410
  type: Input
1434
- }], color: [{
1411
+ }], context: [{
1412
+ type: Input
1413
+ }], default: [{
1414
+ type: Input
1415
+ }], selected: [{
1435
1416
  type: Input
1417
+ }], edit: [{
1418
+ type: Output
1419
+ }], delete: [{
1420
+ type: Output
1421
+ }], save: [{
1422
+ type: Output
1423
+ }], clone: [{
1424
+ type: Output
1425
+ }], hide: [{
1426
+ type: Output
1427
+ }], show: [{
1428
+ type: Output
1429
+ }], favorite: [{
1430
+ type: Output
1431
+ }], managePermissions: [{
1432
+ type: Output
1433
+ }], manageTools: [{
1434
+ type: Output
1436
1435
  }] } });
1437
1436
 
1438
- function userButtonSlideInOut() {
1439
- return trigger('userButtonState', [
1440
- state('collapse', style({
1441
- width: '0',
1442
- overflow: 'hidden',
1443
- display: 'none'
1444
- })),
1445
- state('expand', style({
1446
- overflow: 'hidden',
1447
- display: 'display'
1448
- })),
1449
- transition('collapse => expand', animate('200ms')),
1450
- transition('expand => collapse', animate('200ms'))
1451
- ]);
1452
- }
1453
-
1454
- class UserDialogComponent {
1437
+ class BookmarkDialogComponent {
1455
1438
  dialogRef;
1456
- auth;
1457
- storageService;
1458
- user;
1459
- exp;
1460
- constructor(dialogRef, auth, storageService) {
1439
+ title;
1440
+ constructor(dialogRef) {
1461
1441
  this.dialogRef = dialogRef;
1462
- this.auth = auth;
1463
- this.storageService = storageService;
1464
- const decodeToken = this.auth.decodeToken();
1465
- this.user = decodeToken?.user;
1466
- this.exp = new Date(decodeToken.exp * 1000).toLocaleString();
1467
- }
1468
- clearPreferences() {
1469
- this.storageService.clear();
1470
1442
  }
1471
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserDialogComponent, deps: [{ token: i1$3.MatDialogRef }, { token: i2.AuthService }, { token: i3.StorageService }], target: i0.ɵɵFactoryTarget.Component });
1472
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserDialogComponent, selector: "igo-user-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"mat-typography\">\r\n {{ 'igo.context.userButton.infoTitle' | translate }}\r\n</h1>\r\n<div mat-dialog-content class=\"mat-typography\">\r\n <p>\r\n {{ 'igo.context.userButton.dialog.user' | translate }}: {{ user.sourceId }}\r\n </p>\r\n <p>\r\n {{ 'igo.context.userButton.dialog.email' | translate }}: {{ user.email }}\r\n </p>\r\n <p>{{ 'igo.context.userButton.dialog.expiration' | translate }}: {{ exp }}</p>\r\n <button mat-stroked-button color=\"primary\" (click)=\"clearPreferences()\">\r\n {{ 'igo.context.userButton.dialog.clearPreferences' | translate }}\r\n </button>\r\n <br />\r\n</div>\r\n<div mat-dialog-actions style=\"justify-content: center\">\r\n <button mat-raised-button color=\"primary\" (click)=\"dialogRef.close(false)\">\r\n OK\r\n </button>\r\n</div>\r\n", dependencies: [{ kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
1443
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: BookmarkDialogComponent, deps: [{ token: i1$4.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
1444
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: BookmarkDialogComponent, isStandalone: true, selector: "igo-bookmark-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.bookmarkButton.dialog.title' | translate }}\n</h1>\n<div mat-dialog-content class=\"mat-typography\">\n <mat-form-field>\n <input\n matInput\n required\n autocomplete=\"off\"\n maxlength=\"128\"\n [placeholder]=\"\n 'igo.context.bookmarkButton.dialog.placeholder' | translate\n \"\n [(ngModel)]=\"title\"\n />\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n [disabled]=\"!title\"\n (click)=\"dialogRef.close(title)\"\n >\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\n </button>\n <button mat-button (click)=\"dialogRef.close(false)\">\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
1473
1445
  }
1474
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserDialogComponent, decorators: [{
1446
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: BookmarkDialogComponent, decorators: [{
1475
1447
  type: Component,
1476
- args: [{ selector: 'igo-user-dialog', template: "<h1 mat-dialog-title class=\"mat-typography\">\r\n {{ 'igo.context.userButton.infoTitle' | translate }}\r\n</h1>\r\n<div mat-dialog-content class=\"mat-typography\">\r\n <p>\r\n {{ 'igo.context.userButton.dialog.user' | translate }}: {{ user.sourceId }}\r\n </p>\r\n <p>\r\n {{ 'igo.context.userButton.dialog.email' | translate }}: {{ user.email }}\r\n </p>\r\n <p>{{ 'igo.context.userButton.dialog.expiration' | translate }}: {{ exp }}</p>\r\n <button mat-stroked-button color=\"primary\" (click)=\"clearPreferences()\">\r\n {{ 'igo.context.userButton.dialog.clearPreferences' | translate }}\r\n </button>\r\n <br />\r\n</div>\r\n<div mat-dialog-actions style=\"justify-content: center\">\r\n <button mat-raised-button color=\"primary\" (click)=\"dialogRef.close(false)\">\r\n OK\r\n </button>\r\n</div>\r\n" }]
1477
- }], ctorParameters: function () { return [{ type: i1$3.MatDialogRef }, { type: i2.AuthService }, { type: i3.StorageService }]; } });
1448
+ args: [{ selector: 'igo-bookmark-dialog', standalone: true, imports: [
1449
+ MatDialogTitle,
1450
+ MatDialogContent,
1451
+ MatFormFieldModule,
1452
+ MatInputModule,
1453
+ FormsModule,
1454
+ MatDialogActions,
1455
+ MatButtonModule,
1456
+ TranslateModule
1457
+ ], template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.bookmarkButton.dialog.title' | translate }}\n</h1>\n<div mat-dialog-content class=\"mat-typography\">\n <mat-form-field>\n <input\n matInput\n required\n autocomplete=\"off\"\n maxlength=\"128\"\n [placeholder]=\"\n 'igo.context.bookmarkButton.dialog.placeholder' | translate\n \"\n [(ngModel)]=\"title\"\n />\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n [disabled]=\"!title\"\n (click)=\"dialogRef.close(title)\"\n >\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\n </button>\n <button mat-button (click)=\"dialogRef.close(false)\">\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\n </button>\n</div>\n" }]
1458
+ }], ctorParameters: () => [{ type: i1$4.MatDialogRef }] });
1478
1459
 
1479
- class UserButtonComponent {
1480
- dialog;
1481
- config;
1460
+ var ContextListControlsEnum;
1461
+ (function (ContextListControlsEnum) {
1462
+ ContextListControlsEnum["always"] = "always";
1463
+ ContextListControlsEnum["never"] = "never";
1464
+ ContextListControlsEnum["default"] = "default";
1465
+ })(ContextListControlsEnum || (ContextListControlsEnum = {}));
1466
+
1467
+ class ContextListComponent {
1468
+ cdRef;
1469
+ configService;
1482
1470
  auth;
1471
+ dialog;
1472
+ languageService;
1473
+ storageService;
1474
+ contextConfigs;
1475
+ contextsInitial = { ours: [] };
1476
+ contexts$ = new BehaviorSubject(this.contextsInitial);
1477
+ change$ = new ReplaySubject(1);
1478
+ change$$;
1479
+ get contexts() {
1480
+ return this._contexts;
1481
+ }
1482
+ set contexts(value) {
1483
+ this._contexts = value;
1484
+ this.next();
1485
+ }
1486
+ _contexts = { ours: [] };
1487
+ get selectedContext() {
1488
+ return this._selectedContext;
1489
+ }
1490
+ set selectedContext(value) {
1491
+ this._selectedContext = value;
1492
+ this.cdRef.detectChanges();
1493
+ }
1494
+ _selectedContext;
1483
1495
  get map() {
1484
1496
  return this._map;
1485
1497
  }
@@ -1487,413 +1499,14 @@ class UserButtonComponent {
1487
1499
  this._map = value;
1488
1500
  }
1489
1501
  _map;
1490
- get color() {
1491
- return this._color;
1492
- }
1493
- set color(value) {
1494
- this._color = value;
1495
- }
1496
- _color;
1497
- expand = false;
1498
- visible = false;
1499
- hasApi = false;
1500
- constructor(dialog, config, auth) {
1501
- this.dialog = dialog;
1502
- this.config = config;
1503
- this.auth = auth;
1504
- this.visible = this.config.getConfig('auth') ? true : false;
1505
- this.hasApi = this.config.getConfig('context.url') !== undefined;
1506
- }
1507
- accountClick() {
1508
- if (this.auth.authenticated) {
1509
- this.expand = !this.expand;
1510
- }
1511
- else {
1512
- this.auth.logout();
1513
- }
1514
- }
1515
- logout() {
1516
- this.expand = false;
1517
- this.auth.logout();
1518
- }
1519
- infoUser() {
1520
- this.dialog.open(UserDialogComponent, { disableClose: false });
1502
+ get defaultContextId() {
1503
+ return this.contextConfigs
1504
+ ? this._defaultContextId
1505
+ : this.storageService.get('favorite.context.uri') ||
1506
+ this._defaultContextId;
1521
1507
  }
1522
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserButtonComponent, deps: [{ token: i1$3.MatDialog }, { token: i3.ConfigService }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Component });
1523
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: UserButtonComponent, selector: "igo-user-button", inputs: { map: "map", color: "color" }, ngImport: i0, template: "<div *ngIf=\"visible\" class=\"igo-user-button-container\">\r\n <div\r\n class=\"igo-user-button-more-container\"\r\n [@userButtonState]=\"expand ? 'expand' : 'collapse'\"\r\n >\r\n <igo-poi-button *ngIf=\"hasApi\" [color]=\"color\" [map]=\"map\"></igo-poi-button>\r\n\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.userButton.infoTitle' | translate\"\r\n matTooltipPosition=\"above\"\r\n [color]=\"color\"\r\n (click)=\"infoUser()\"\r\n >\r\n <mat-icon svgIcon=\"information-outline\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.userButton.logout' | translate\"\r\n matTooltipPosition=\"above\"\r\n [color]=\"color\"\r\n (click)=\"logout()\"\r\n >\r\n <mat-icon svgIcon=\"power\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <button\r\n mat-icon-button\r\n [color]=\"auth.authenticated ? color : 'warn'\"\r\n (click)=\"accountClick()\"\r\n >\r\n <mat-icon svgIcon=\"account-box\"></mat-icon>\r\n </button>\r\n</div>\r\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-user-button-container{display:flex;gap:4px}:host .igo-user-button-container button{background-color:#fff}:host .igo-user-button-container button:hover{background-color:#efefef}:host .igo-user-button-more-container{display:flex;gap:4px}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: PoiButtonComponent, selector: "igo-poi-button", inputs: ["map", "color"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }], animations: [userButtonSlideInOut()] });
1524
- }
1525
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: UserButtonComponent, decorators: [{
1526
- type: Component,
1527
- args: [{ selector: 'igo-user-button', animations: [userButtonSlideInOut()], template: "<div *ngIf=\"visible\" class=\"igo-user-button-container\">\r\n <div\r\n class=\"igo-user-button-more-container\"\r\n [@userButtonState]=\"expand ? 'expand' : 'collapse'\"\r\n >\r\n <igo-poi-button *ngIf=\"hasApi\" [color]=\"color\" [map]=\"map\"></igo-poi-button>\r\n\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.userButton.infoTitle' | translate\"\r\n matTooltipPosition=\"above\"\r\n [color]=\"color\"\r\n (click)=\"infoUser()\"\r\n >\r\n <mat-icon svgIcon=\"information-outline\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.userButton.logout' | translate\"\r\n matTooltipPosition=\"above\"\r\n [color]=\"color\"\r\n (click)=\"logout()\"\r\n >\r\n <mat-icon svgIcon=\"power\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <button\r\n mat-icon-button\r\n [color]=\"auth.authenticated ? color : 'warn'\"\r\n (click)=\"accountClick()\"\r\n >\r\n <mat-icon svgIcon=\"account-box\"></mat-icon>\r\n </button>\r\n</div>\r\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-user-button-container{display:flex;gap:4px}:host .igo-user-button-container button{background-color:#fff}:host .igo-user-button-container button:hover{background-color:#efefef}:host .igo-user-button-more-container{display:flex;gap:4px}\n"] }]
1528
- }], ctorParameters: function () { return [{ type: i1$3.MatDialog }, { type: i3.ConfigService }, { type: i2.AuthService }]; }, propDecorators: { map: [{
1529
- type: Input
1530
- }], color: [{
1531
- type: Input
1532
- }] } });
1533
-
1534
- class IgoContextMapButtonModule {
1535
- static forRoot() {
1536
- return {
1537
- ngModule: IgoContextMapButtonModule
1538
- };
1539
- }
1540
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextMapButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1541
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: IgoContextMapButtonModule, declarations: [BookmarkButtonComponent,
1542
- BookmarkDialogComponent,
1543
- PoiButtonComponent,
1544
- PoiDialogComponent,
1545
- UserButtonComponent,
1546
- UserDialogComponent], imports: [CommonModule,
1547
- FormsModule,
1548
- IgoAuthModule,
1549
- IgoConfirmDialogModule,
1550
- IgoLanguageModule,
1551
- IgoStopPropagationModule,
1552
- MatButtonModule,
1553
- MatDialogModule,
1554
- MatDividerModule,
1555
- MatFormFieldModule,
1556
- MatIconModule,
1557
- MatInputModule,
1558
- MatOptionModule,
1559
- MatSelectModule,
1560
- MatTooltipModule], exports: [BookmarkButtonComponent,
1561
- PoiButtonComponent,
1562
- UserButtonComponent,
1563
- BookmarkDialogComponent] });
1564
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextMapButtonModule, providers: [PoiService], imports: [CommonModule,
1565
- FormsModule,
1566
- IgoAuthModule,
1567
- IgoConfirmDialogModule,
1568
- IgoLanguageModule,
1569
- IgoStopPropagationModule,
1570
- MatButtonModule,
1571
- MatDialogModule,
1572
- MatDividerModule,
1573
- MatFormFieldModule,
1574
- MatIconModule,
1575
- MatInputModule,
1576
- MatOptionModule,
1577
- MatSelectModule,
1578
- MatTooltipModule] });
1579
- }
1580
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextMapButtonModule, decorators: [{
1581
- type: NgModule,
1582
- args: [{
1583
- imports: [
1584
- CommonModule,
1585
- FormsModule,
1586
- IgoAuthModule,
1587
- IgoConfirmDialogModule,
1588
- IgoLanguageModule,
1589
- IgoStopPropagationModule,
1590
- MatButtonModule,
1591
- MatDialogModule,
1592
- MatDividerModule,
1593
- MatFormFieldModule,
1594
- MatIconModule,
1595
- MatInputModule,
1596
- MatOptionModule,
1597
- MatSelectModule,
1598
- MatTooltipModule
1599
- ],
1600
- exports: [
1601
- BookmarkButtonComponent,
1602
- PoiButtonComponent,
1603
- UserButtonComponent,
1604
- BookmarkDialogComponent
1605
- ],
1606
- declarations: [
1607
- BookmarkButtonComponent,
1608
- BookmarkDialogComponent,
1609
- PoiButtonComponent,
1610
- PoiDialogComponent,
1611
- UserButtonComponent,
1612
- UserDialogComponent
1613
- ],
1614
- providers: [PoiService]
1615
- }]
1616
- }] });
1617
-
1618
- class ContextFormComponent {
1619
- formBuilder;
1620
- messageService;
1621
- form;
1622
- prefix;
1623
- get btnSubmitText() {
1624
- return this._btnSubmitText;
1625
- }
1626
- set btnSubmitText(value) {
1627
- this._btnSubmitText = value;
1628
- }
1629
- _btnSubmitText;
1630
- get context() {
1631
- return this._context;
1632
- }
1633
- set context(value) {
1634
- this._context = value;
1635
- this.buildForm();
1636
- }
1637
- _context;
1638
- get disabled() {
1639
- return this._disabled;
1640
- }
1641
- set disabled(value) {
1642
- this._disabled = value;
1643
- }
1644
- _disabled = false;
1645
- // TODO: replace any by ContextOptions or Context
1646
- submitForm = new EventEmitter();
1647
- clone = new EventEmitter();
1648
- delete = new EventEmitter();
1649
- constructor(formBuilder, messageService) {
1650
- this.formBuilder = formBuilder;
1651
- this.messageService = messageService;
1652
- }
1653
- ngOnInit() {
1654
- this.buildForm();
1655
- }
1656
- handleFormSubmit(value) {
1657
- let inputs = Object.assign({}, value);
1658
- inputs = ObjectUtils.removeNull(inputs);
1659
- inputs.uri = inputs.uri.replace(' ', '');
1660
- if (inputs.uri) {
1661
- inputs.uri = this.prefix + '-' + inputs.uri;
1662
- }
1663
- else {
1664
- inputs.uri = this.prefix;
1665
- }
1666
- this.submitForm.emit(inputs);
1667
- }
1668
- copyTextToClipboard() {
1669
- const text = this.prefix + '-' + this.form.value.uri.replace(' ', '');
1670
- const successful = Clipboard.copy(text);
1671
- if (successful) {
1672
- this.messageService.success('igo.context.contextManager.dialog.copyMsg', 'igo.context.contextManager.dialog.copyTitle');
1673
- }
1674
- }
1675
- buildForm() {
1676
- const context = this.context || {};
1677
- const uriSplit = context.uri.split('-');
1678
- this.prefix = uriSplit.shift();
1679
- const uri = uriSplit.join('-');
1680
- this.form = this.formBuilder.group({
1681
- title: [context.title],
1682
- uri: [uri || ' ']
1683
- });
1684
- }
1685
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextFormComponent, deps: [{ token: i1$2.UntypedFormBuilder }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Component });
1686
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContextFormComponent, selector: "igo-context-form", inputs: { btnSubmitText: "btnSubmitText", context: "context", disabled: "disabled" }, outputs: { submitForm: "submitForm", clone: "clone", delete: "delete" }, ngImport: i0, template: "<form\r\n class=\"igo-form\"\r\n [formGroup]=\"form\"\r\n (ngSubmit)=\"handleFormSubmit(form.value)\"\r\n>\r\n <mat-form-field class=\"full-width\">\r\n <input\r\n matInput\r\n required\r\n maxlength=\"128\"\r\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\r\n formControlName=\"title\"\r\n />\r\n <mat-error>\r\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <mat-form-field id=\"uriInput\" class=\"full-width\">\r\n <span *ngIf=\"prefix\" class=\"prefix\">{{ prefix }}-</span>\r\n <span class=\"fieldWrapper\">\r\n <input\r\n matInput\r\n maxlength=\"64\"\r\n floatLabel=\"always\"\r\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\r\n formControlName=\"uri\"\r\n />\r\n </span>\r\n </mat-form-field>\r\n\r\n <button\r\n id=\"copyButton\"\r\n type=\"button\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.contextManager.form.copy' | translate\"\r\n color=\"primary\"\r\n (click)=\"copyTextToClipboard()\"\r\n >\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n </button>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"submit\"\r\n [disabled]=\"!form.valid || disabled\"\r\n >\r\n {{ 'igo.context.contextManager.form.edit' | translate }}\r\n </button>\r\n </div>\r\n</form>\r\n", styles: ["form{margin:10px}.full-width{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}#copyButton{width:24px;float:right;position:relative;top:-58px;left:5px}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
1687
- }
1688
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextFormComponent, decorators: [{
1689
- type: Component,
1690
- args: [{ selector: 'igo-context-form', template: "<form\r\n class=\"igo-form\"\r\n [formGroup]=\"form\"\r\n (ngSubmit)=\"handleFormSubmit(form.value)\"\r\n>\r\n <mat-form-field class=\"full-width\">\r\n <input\r\n matInput\r\n required\r\n maxlength=\"128\"\r\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\r\n formControlName=\"title\"\r\n />\r\n <mat-error>\r\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <mat-form-field id=\"uriInput\" class=\"full-width\">\r\n <span *ngIf=\"prefix\" class=\"prefix\">{{ prefix }}-</span>\r\n <span class=\"fieldWrapper\">\r\n <input\r\n matInput\r\n maxlength=\"64\"\r\n floatLabel=\"always\"\r\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\r\n formControlName=\"uri\"\r\n />\r\n </span>\r\n </mat-form-field>\r\n\r\n <button\r\n id=\"copyButton\"\r\n type=\"button\"\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.contextManager.form.copy' | translate\"\r\n color=\"primary\"\r\n (click)=\"copyTextToClipboard()\"\r\n >\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n </button>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n mat-raised-button\r\n type=\"submit\"\r\n [disabled]=\"!form.valid || disabled\"\r\n >\r\n {{ 'igo.context.contextManager.form.edit' | translate }}\r\n </button>\r\n </div>\r\n</form>\r\n", styles: ["form{margin:10px}.full-width{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}#copyButton{width:24px;float:right;position:relative;top:-58px;left:5px}\n"] }]
1691
- }], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }, { type: i3.MessageService }]; }, propDecorators: { btnSubmitText: [{
1692
- type: Input
1693
- }], context: [{
1694
- type: Input
1695
- }], disabled: [{
1696
- type: Input
1697
- }], submitForm: [{
1698
- type: Output
1699
- }], clone: [{
1700
- type: Output
1701
- }], delete: [{
1702
- type: Output
1703
- }] } });
1704
-
1705
- class ContextEditComponent {
1706
- cd;
1707
- get context() {
1708
- return this._context;
1709
- }
1710
- set context(value) {
1711
- this._context = value;
1712
- this.refresh();
1713
- }
1714
- _context;
1715
- submitForm = new EventEmitter();
1716
- constructor(cd) {
1717
- this.cd = cd;
1718
- }
1719
- refresh() {
1720
- this.cd.detectChanges();
1721
- }
1722
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextEditComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
1723
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContextEditComponent, selector: "igo-context-edit", inputs: { context: "context" }, outputs: { submitForm: "submitForm" }, ngImport: i0, template: "<igo-context-form\r\n *ngIf=\"context\"\r\n [btnSubmitText]=\"'igo.context.contextManager.save' | translate\"\r\n [context]=\"context\"\r\n (submitForm)=\"submitForm.emit($event)\"\r\n>\r\n</igo-context-form>\r\n", dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ContextFormComponent, selector: "igo-context-form", inputs: ["btnSubmitText", "context", "disabled"], outputs: ["submitForm", "clone", "delete"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
1724
- }
1725
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextEditComponent, decorators: [{
1726
- type: Component,
1727
- args: [{ selector: 'igo-context-edit', template: "<igo-context-form\r\n *ngIf=\"context\"\r\n [btnSubmitText]=\"'igo.context.contextManager.save' | translate\"\r\n [context]=\"context\"\r\n (submitForm)=\"submitForm.emit($event)\"\r\n>\r\n</igo-context-form>\r\n" }]
1728
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { context: [{
1729
- type: Input
1730
- }], submitForm: [{
1731
- type: Output
1732
- }] } });
1733
-
1734
- class ContextEditBindingDirective {
1735
- contextService;
1736
- messageService;
1737
- component;
1738
- editedContext$$;
1739
- submitSuccessed = new EventEmitter();
1740
- onEdit(context) {
1741
- const id = this.component.context.id;
1742
- this.contextService.update(id, context).subscribe(() => {
1743
- this.messageService.success('igo.context.contextManager.dialog.saveMsg', 'igo.context.contextManager.dialog.saveTitle', undefined, {
1744
- value: context.title || this.component.context.title
1745
- });
1746
- this.contextService.setEditedContext(undefined);
1747
- this.submitSuccessed.emit(context);
1748
- });
1749
- }
1750
- constructor(component, contextService, messageService) {
1751
- this.contextService = contextService;
1752
- this.messageService = messageService;
1753
- this.component = component;
1754
- }
1755
- ngOnInit() {
1756
- this.editedContext$$ = this.contextService.editedContext$.subscribe((context) => this.handleEditedContextChange(context));
1757
- }
1758
- ngOnDestroy() {
1759
- this.editedContext$$.unsubscribe();
1760
- }
1761
- handleEditedContextChange(context) {
1762
- this.component.context = context;
1763
- }
1764
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextEditBindingDirective, deps: [{ token: ContextEditComponent, self: true }, { token: ContextService }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Directive });
1765
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ContextEditBindingDirective, selector: "[igoContextEditBinding]", outputs: { submitSuccessed: "submitSuccessed" }, host: { listeners: { "submitForm": "onEdit($event)" } }, ngImport: i0 });
1766
- }
1767
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextEditBindingDirective, decorators: [{
1768
- type: Directive,
1769
- args: [{
1770
- selector: '[igoContextEditBinding]'
1771
- }]
1772
- }], ctorParameters: function () { return [{ type: ContextEditComponent, decorators: [{
1773
- type: Self
1774
- }] }, { type: ContextService }, { type: i3.MessageService }]; }, propDecorators: { submitSuccessed: [{
1775
- type: Output
1776
- }], onEdit: [{
1777
- type: HostListener,
1778
- args: ['submitForm', ['$event']]
1779
- }] } });
1780
-
1781
- class ContextItemComponent {
1782
- auth;
1783
- storageService;
1784
- typePermission = TypePermission;
1785
- color = 'primary';
1786
- collapsed = true;
1787
- showFavorite = true;
1788
- context;
1789
- default;
1790
- selected;
1791
- edit = new EventEmitter();
1792
- delete = new EventEmitter();
1793
- save = new EventEmitter();
1794
- clone = new EventEmitter();
1795
- hide = new EventEmitter();
1796
- show = new EventEmitter();
1797
- favorite = new EventEmitter();
1798
- managePermissions = new EventEmitter();
1799
- manageTools = new EventEmitter();
1800
- get hidden() {
1801
- return this.context.hidden;
1802
- }
1803
- get canShare() {
1804
- return this.storageService.get('canShare') === true;
1805
- }
1806
- constructor(auth, storageService) {
1807
- this.auth = auth;
1808
- this.storageService = storageService;
1809
- }
1810
- favoriteClick(context) {
1811
- this.favorite.emit(context);
1812
- }
1813
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextItemComponent, deps: [{ token: i2.AuthService }, { token: i3.StorageService }], target: i0.ɵɵFactoryTarget.Component });
1814
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContextItemComponent, selector: "igo-context-item", inputs: { showFavorite: "showFavorite", context: "context", default: "default", selected: "selected" }, outputs: { edit: "edit", delete: "delete", save: "save", clone: "clone", hide: "hide", show: "show", favorite: "favorite", managePermissions: "managePermissions", manageTools: "manageTools" }, ngImport: i0, template: "<mat-list-item\r\n class=\"mat-list-item\"\r\n [ngClass]=\"{ 'mat-list-item-light': hidden }\"\r\n>\r\n <button\r\n *ngIf=\"auth.authenticated\"\r\n matListItemAvatar\r\n mat-icon-button\r\n igoStopPropagation\r\n [matTooltip]=\"\r\n auth.authenticated\r\n ? ('igo.context.contextManager.favorite' | translate)\r\n : ''\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"default ? 'primary' : 'default'\"\r\n (click)=\"favoriteClick(context)\"\r\n >\r\n <mat-icon\r\n *ngIf=\"!context.iconImage\"\r\n svgIcon=\"{{\r\n context.icon\r\n ? context.icon\r\n : context.scope === 'public'\r\n ? 'earth'\r\n : 'star'\r\n }}\"\r\n ></mat-icon>\r\n <img *ngIf=\"context.iconImage\" [src]=\"context.iconImage\" />\r\n </button>\r\n <button\r\n matListItemAvatar\r\n *ngIf=\"!auth.authenticated && showFavorite\"\r\n mat-icon-button\r\n igoStopPropagation\r\n [matTooltip]=\"'igo.context.contextManager.favorite' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"default ? 'primary' : 'default'\"\r\n (click)=\"favoriteClick(context)\"\r\n >\r\n <mat-icon svgIcon=\"star\"></mat-icon>\r\n </button>\r\n <span matListItemTitle>{{ context.title }}</span>\r\n\r\n <div\r\n *ngIf=\"auth.authenticated\"\r\n matListItemMeta\r\n igoStopPropagation\r\n class=\"igo-actions-container\"\r\n >\r\n <button\r\n *ngIf=\"\r\n collapsed &&\r\n selected &&\r\n (context.permission === typePermission[typePermission.write] ||\r\n context.imported)\r\n \"\r\n class=\"save-button\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.save' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"save.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"content-save\"></mat-icon>\r\n </button>\r\n\r\n <div #actions class=\"igo-actions-expand-container\">\r\n <button\r\n *ngIf=\"canShare && !context.imported\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.managePermissions' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"managePermissions.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"account-arrow-right\"></mat-icon>\r\n </button>\r\n\r\n <!--button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.manageTools' | translate\"\r\n [color]=\"color\"\r\n (click)=\"manageTools.emit(context)\">\r\n <mat-icon svgIcon=\"widgets\"></mat-icon>\r\n </button-->\r\n\r\n <button\r\n *ngIf=\"!context.imported\"\r\n class=\"clone-button\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.clone' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"clone.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"\r\n context.permission === typePermission[typePermission.write] &&\r\n !context.imported\r\n \"\r\n class=\"edit-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.edit' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"edit.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"pencil\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"!context.hidden && !context.imported\"\r\n class=\"hide-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.hide' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"hide.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"eye\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"context.hidden && !context.imported\"\r\n class=\"hide-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.show' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"show.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"eye-off\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"\r\n context.permission === typePermission[typePermission.write] ||\r\n context.imported\r\n \"\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.context.contextManager.delete' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"delete.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <button\r\n class=\"actions-button\"\r\n mat-icon-button\r\n igoCollapse\r\n [color]=\"color\"\r\n [target]=\"actions\"\r\n [collapsed]=\"collapsed\"\r\n (click)=\"collapsed = !collapsed\"\r\n >\r\n <mat-icon svgIcon=\"dots-horizontal\"></mat-icon>\r\n </button>\r\n </div>\r\n</mat-list-item>\r\n", styles: [":host{overflow:hidden}:host .igo-actions-container{flex-shrink:0}:host .igo-actions-expand-container{display:inline-flex}:host mat-icon.disabled{color:#00000061}:host button[matlistitemavatar]{margin-right:8px}\n"], dependencies: [{ kind: "directive", type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i7$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i7$1.MatListItemAvatar, selector: "[matListItemAvatar]" }, { kind: "directive", type: i7$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i7$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: i13.CollapseDirective, selector: "[igoCollapse]", inputs: ["target", "collapsed"], outputs: ["toggle"] }, { kind: "directive", type: i13.StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1815
- }
1816
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextItemComponent, decorators: [{
1817
- type: Component,
1818
- args: [{ selector: 'igo-context-item', changeDetection: ChangeDetectionStrategy.OnPush, template: "<mat-list-item\r\n class=\"mat-list-item\"\r\n [ngClass]=\"{ 'mat-list-item-light': hidden }\"\r\n>\r\n <button\r\n *ngIf=\"auth.authenticated\"\r\n matListItemAvatar\r\n mat-icon-button\r\n igoStopPropagation\r\n [matTooltip]=\"\r\n auth.authenticated\r\n ? ('igo.context.contextManager.favorite' | translate)\r\n : ''\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"default ? 'primary' : 'default'\"\r\n (click)=\"favoriteClick(context)\"\r\n >\r\n <mat-icon\r\n *ngIf=\"!context.iconImage\"\r\n svgIcon=\"{{\r\n context.icon\r\n ? context.icon\r\n : context.scope === 'public'\r\n ? 'earth'\r\n : 'star'\r\n }}\"\r\n ></mat-icon>\r\n <img *ngIf=\"context.iconImage\" [src]=\"context.iconImage\" />\r\n </button>\r\n <button\r\n matListItemAvatar\r\n *ngIf=\"!auth.authenticated && showFavorite\"\r\n mat-icon-button\r\n igoStopPropagation\r\n [matTooltip]=\"'igo.context.contextManager.favorite' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"default ? 'primary' : 'default'\"\r\n (click)=\"favoriteClick(context)\"\r\n >\r\n <mat-icon svgIcon=\"star\"></mat-icon>\r\n </button>\r\n <span matListItemTitle>{{ context.title }}</span>\r\n\r\n <div\r\n *ngIf=\"auth.authenticated\"\r\n matListItemMeta\r\n igoStopPropagation\r\n class=\"igo-actions-container\"\r\n >\r\n <button\r\n *ngIf=\"\r\n collapsed &&\r\n selected &&\r\n (context.permission === typePermission[typePermission.write] ||\r\n context.imported)\r\n \"\r\n class=\"save-button\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.save' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"save.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"content-save\"></mat-icon>\r\n </button>\r\n\r\n <div #actions class=\"igo-actions-expand-container\">\r\n <button\r\n *ngIf=\"canShare && !context.imported\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.managePermissions' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"managePermissions.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"account-arrow-right\"></mat-icon>\r\n </button>\r\n\r\n <!--button\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.manageTools' | translate\"\r\n [color]=\"color\"\r\n (click)=\"manageTools.emit(context)\">\r\n <mat-icon svgIcon=\"widgets\"></mat-icon>\r\n </button-->\r\n\r\n <button\r\n *ngIf=\"!context.imported\"\r\n class=\"clone-button\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.clone' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [color]=\"color\"\r\n (click)=\"clone.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"\r\n context.permission === typePermission[typePermission.write] &&\r\n !context.imported\r\n \"\r\n class=\"edit-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.edit' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"edit.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"pencil\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"!context.hidden && !context.imported\"\r\n class=\"hide-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.hide' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"hide.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"eye\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"context.hidden && !context.imported\"\r\n class=\"hide-button\"\r\n mat-icon-button\r\n [color]=\"color\"\r\n [matTooltip]=\"'igo.context.contextManager.show' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"show.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"eye-off\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n *ngIf=\"\r\n context.permission === typePermission[typePermission.write] ||\r\n context.imported\r\n \"\r\n class=\"delete-button\"\r\n mat-icon-button\r\n color=\"warn\"\r\n [matTooltip]=\"'igo.context.contextManager.delete' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"delete.emit(context)\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </div>\r\n\r\n <button\r\n class=\"actions-button\"\r\n mat-icon-button\r\n igoCollapse\r\n [color]=\"color\"\r\n [target]=\"actions\"\r\n [collapsed]=\"collapsed\"\r\n (click)=\"collapsed = !collapsed\"\r\n >\r\n <mat-icon svgIcon=\"dots-horizontal\"></mat-icon>\r\n </button>\r\n </div>\r\n</mat-list-item>\r\n", styles: [":host{overflow:hidden}:host .igo-actions-container{flex-shrink:0}:host .igo-actions-expand-container{display:inline-flex}:host mat-icon.disabled{color:#00000061}:host button[matlistitemavatar]{margin-right:8px}\n"] }]
1819
- }], ctorParameters: function () { return [{ type: i2.AuthService }, { type: i3.StorageService }]; }, propDecorators: { showFavorite: [{
1820
- type: Input
1821
- }], context: [{
1822
- type: Input
1823
- }], default: [{
1824
- type: Input
1825
- }], selected: [{
1826
- type: Input
1827
- }], edit: [{
1828
- type: Output
1829
- }], delete: [{
1830
- type: Output
1831
- }], save: [{
1832
- type: Output
1833
- }], clone: [{
1834
- type: Output
1835
- }], hide: [{
1836
- type: Output
1837
- }], show: [{
1838
- type: Output
1839
- }], favorite: [{
1840
- type: Output
1841
- }], managePermissions: [{
1842
- type: Output
1843
- }], manageTools: [{
1844
- type: Output
1845
- }] } });
1846
-
1847
- var ContextListControlsEnum;
1848
- (function (ContextListControlsEnum) {
1849
- ContextListControlsEnum["always"] = "always";
1850
- ContextListControlsEnum["never"] = "never";
1851
- ContextListControlsEnum["default"] = "default";
1852
- })(ContextListControlsEnum || (ContextListControlsEnum = {}));
1853
-
1854
- class ContextListComponent {
1855
- cdRef;
1856
- configService;
1857
- auth;
1858
- dialog;
1859
- languageService;
1860
- storageService;
1861
- contextConfigs;
1862
- contextsInitial = { ours: [] };
1863
- contexts$ = new BehaviorSubject(this.contextsInitial);
1864
- change$ = new ReplaySubject(1);
1865
- change$$;
1866
- get contexts() {
1867
- return this._contexts;
1868
- }
1869
- set contexts(value) {
1870
- this._contexts = value;
1871
- this.next();
1872
- }
1873
- _contexts = { ours: [] };
1874
- get selectedContext() {
1875
- return this._selectedContext;
1876
- }
1877
- set selectedContext(value) {
1878
- this._selectedContext = value;
1879
- this.cdRef.detectChanges();
1880
- }
1881
- _selectedContext;
1882
- get map() {
1883
- return this._map;
1884
- }
1885
- set map(value) {
1886
- this._map = value;
1887
- }
1888
- _map;
1889
- get defaultContextId() {
1890
- return this.contextConfigs
1891
- ? this._defaultContextId
1892
- : this.storageService.get('favorite.context.uri') ||
1893
- this._defaultContextId;
1894
- }
1895
- set defaultContextId(value) {
1896
- this._defaultContextId = value;
1508
+ set defaultContextId(value) {
1509
+ this._defaultContextId = value;
1897
1510
  }
1898
1511
  _defaultContextId;
1899
1512
  collapsed = [];
@@ -2182,13 +1795,32 @@ class ContextListComponent {
2182
1795
  context.hidden = false;
2183
1796
  this.show.emit(context);
2184
1797
  }
2185
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextListComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i3.ConfigService }, { token: i2.AuthService }, { token: i1$3.MatDialog }, { token: i3.LanguageService }, { token: i3.StorageService }], target: i0.ɵɵFactoryTarget.Component });
2186
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContextListComponent, selector: "igo-context-list", inputs: { contexts: "contexts", selectedContext: "selectedContext", map: "map", defaultContextId: "defaultContextId", term: "term" }, outputs: { select: "select", unselect: "unselect", edit: "edit", delete: "delete", save: "save", clone: "clone", create: "create", hide: "hide", show: "show", showHiddenContexts: "showHiddenContexts", favorite: "favorite", managePermissions: "managePermissions", manageTools: "manageTools", filterPermissionsChanged: "filterPermissionsChanged" }, ngImport: i0, template: "<igo-list [navigation]=\"true\">\r\n <div class=\"context-filter-container\">\r\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\r\n <mat-label>{{\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n \"\r\n [(ngModel)]=\"term\"\r\n />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n class=\"clear-button\"\r\n *ngIf=\"term.length\"\r\n aria-label=\"Clear\"\r\n color=\"warn\"\r\n (click)=\"clearFilter()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"actions-container\">\r\n <button\r\n *ngIf=\"!sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.sortAlphabetically' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(true)\"\r\n >\r\n <mat-icon\r\n color=\"primary\"\r\n svgIcon=\"sort-alphabetical-variant\"\r\n ></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(false)\"\r\n >\r\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\r\n </button>\r\n\r\n <igo-actionbar\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"add-context-button\"\r\n [iconColor]=\"color\"\r\n [store]=\"actionStore\"\r\n [withIcon]=\"true\"\r\n icon=\"plus\"\r\n [withTitle]=\"actionbarMode === 'overlay'\"\r\n [horizontal]=\"false\"\r\n [mode]=\"actionbarMode\"\r\n >\r\n </igo-actionbar>\r\n\r\n <button\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"users-filter\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"accountMenu\"\r\n >\r\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\r\n </button>\r\n <mat-menu #accountMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let user of users\">\r\n <button\r\n *ngIf=\"!user.childs; else withSubMenu\"\r\n mat-menu-item\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n <ng-template #withSubMenu>\r\n <button\r\n mat-menu-item\r\n [matMenuTriggerFor]=\"subAccountMenu\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n\r\n <mat-menu #subAccountMenu=\"matMenu\">\r\n <button\r\n mat-menu-item\r\n *ngFor=\"let child of user.childs\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(child).checked\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(child, user)\"\r\n >\r\n {{ child.title }}\r\n </mat-checkbox>\r\n </button>\r\n </mat-menu>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <button mat-menu-item class=\"profil-menu\">\r\n <mat-checkbox\r\n [checked]=\"showHidden\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"showHiddenContexts.emit()\"\r\n >\r\n </mat-checkbox>\r\n <span>\r\n {{ 'igo.context.contextManager.showHidden' | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n\r\n <ng-template ngFor let-groupContexts [ngForOf]=\"contexts$ | async | keyvalue\">\r\n <igo-collapsible\r\n *ngIf=\"groupContexts.value.length && auth.authenticated\"\r\n [title]=\"titleMapping[groupContexts.key] | translate\"\r\n [collapsed]=\"collapsed[titleMapping[groupContexts.key]]\"\r\n (toggle)=\"collapsed[titleMapping[groupContexts.key]] = $event\"\r\n >\r\n <ng-template ngFor let-context [ngForOf]=\"groupContexts.value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n context.id &&\r\n this.defaultContextId &&\r\n this.defaultContextId === context.id\r\n \"\r\n (edit)=\"edit.emit(context)\"\r\n (delete)=\"delete.emit(context)\"\r\n (clone)=\"clone.emit(context)\"\r\n (save)=\"save.emit(context)\"\r\n (hide)=\"hideContext(context)\"\r\n (show)=\"showContext(context)\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (manageTools)=\"manageTools.emit(context)\"\r\n (managePermissions)=\"managePermissions.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n\r\n <ng-template\r\n *ngIf=\"groupContexts.value.length && !auth.authenticated\"\r\n ngFor\r\n let-context\r\n [ngForOf]=\"groupContexts.value\"\r\n >\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [showFavorite]=\"\r\n configService.getConfig('favoriteContext4NonAuthenticated')\r\n \"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n contextConfigs\r\n ? defaultContextId === context.id\r\n : defaultContextId === context.uri\r\n \"\r\n (favorite)=\"favorite.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </ng-template>\r\n\r\n <div *ngIf=\"isEmpty\" class=\"no-result\">\r\n {{ 'igo.context.contextManager.noResult' | translate }}\r\n </div>\r\n</igo-list>\r\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i11$1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }, { kind: "component", type: i12$1.MatMenu, selector: "mat-menu", exportAs: ["matMenu"] }, { kind: "component", type: i12$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["disabled", "disableRipple", "role"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", exportAs: ["matMenuTrigger"] }, { kind: "directive", type: i13.ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "component", type: i13.ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "component", type: i13.CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "component", type: i13.ActionbarComponent, selector: "igo-actionbar", inputs: ["store", "mode", "withToggleButton", "horizontal", "color", "iconColor", "withTitle", "withTooltip", "scrollActive", "withIcon", "icon", "xPosition", "yPosition", "overlayClass"] }, { kind: "component", type: ContextItemComponent, selector: "igo-context-item", inputs: ["showFavorite", "context", "default", "selected"], outputs: ["edit", "delete", "save", "clone", "hide", "show", "favorite", "managePermissions", "manageTools"] }, { kind: "pipe", type: i6.AsyncPipe, name: "async" }, { kind: "pipe", type: i13.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1798
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextListComponent, deps: [{ token: i0.ChangeDetectorRef }, { token: i1$1.ConfigService }, { token: i2.AuthService }, { token: i1$4.MatDialog }, { token: i4.LanguageService }, { token: i6.StorageService }], target: i0.ɵɵFactoryTarget.Component });
1799
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ContextListComponent, isStandalone: true, selector: "igo-context-list", inputs: { contexts: "contexts", selectedContext: "selectedContext", map: "map", defaultContextId: "defaultContextId", term: "term" }, outputs: { select: "select", unselect: "unselect", edit: "edit", delete: "delete", save: "save", clone: "clone", create: "create", hide: "hide", show: "show", showHiddenContexts: "showHiddenContexts", favorite: "favorite", managePermissions: "managePermissions", manageTools: "manageTools", filterPermissionsChanged: "filterPermissionsChanged" }, ngImport: i0, template: "<igo-list [navigation]=\"true\">\r\n <div class=\"context-filter-container\">\r\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\r\n <mat-label>{{\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n \"\r\n [(ngModel)]=\"term\"\r\n />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n class=\"clear-button\"\r\n *ngIf=\"term.length\"\r\n aria-label=\"Clear\"\r\n color=\"warn\"\r\n (click)=\"clearFilter()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"actions-container\">\r\n <button\r\n *ngIf=\"!sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.sortAlphabetically' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(true)\"\r\n >\r\n <mat-icon\r\n color=\"primary\"\r\n svgIcon=\"sort-alphabetical-variant\"\r\n ></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(false)\"\r\n >\r\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\r\n </button>\r\n\r\n <igo-actionbar\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"add-context-button\"\r\n [iconColor]=\"color\"\r\n [store]=\"actionStore\"\r\n [withIcon]=\"true\"\r\n icon=\"plus\"\r\n [withTitle]=\"actionbarMode === 'overlay'\"\r\n [horizontal]=\"false\"\r\n [mode]=\"actionbarMode\"\r\n >\r\n </igo-actionbar>\r\n\r\n <button\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"users-filter\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"accountMenu\"\r\n >\r\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\r\n </button>\r\n <mat-menu #accountMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let user of users\">\r\n <button\r\n *ngIf=\"!user.childs; else withSubMenu\"\r\n mat-menu-item\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n <ng-template #withSubMenu>\r\n <button\r\n mat-menu-item\r\n [matMenuTriggerFor]=\"subAccountMenu\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n\r\n <mat-menu #subAccountMenu=\"matMenu\">\r\n <button\r\n mat-menu-item\r\n *ngFor=\"let child of user.childs\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(child).checked\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(child, user)\"\r\n >\r\n {{ child.title }}\r\n </mat-checkbox>\r\n </button>\r\n </mat-menu>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <button mat-menu-item class=\"profil-menu\">\r\n <mat-checkbox\r\n [checked]=\"showHidden\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"showHiddenContexts.emit()\"\r\n >\r\n </mat-checkbox>\r\n <span>\r\n {{ 'igo.context.contextManager.showHidden' | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n\r\n <ng-template\r\n ngFor\r\n let-groupContexts\r\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\r\n >\r\n <igo-collapsible\r\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\r\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\r\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\r\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\r\n >\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n context.id &&\r\n this.defaultContextId &&\r\n this.defaultContextId === context.id\r\n \"\r\n (edit)=\"edit.emit(context)\"\r\n (delete)=\"delete.emit(context)\"\r\n (clone)=\"clone.emit(context)\"\r\n (save)=\"save.emit(context)\"\r\n (hide)=\"hideContext(context)\"\r\n (show)=\"showContext(context)\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (manageTools)=\"manageTools.emit(context)\"\r\n (managePermissions)=\"managePermissions.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n\r\n <ng-container\r\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\r\n ></ng-container>\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [showFavorite]=\"\r\n configService.getConfig('favoriteContext4NonAuthenticated')\r\n \"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n contextConfigs\r\n ? defaultContextId === context.id\r\n : defaultContextId === context.uri\r\n \"\r\n (favorite)=\"favorite.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </ng-template>\r\n\r\n <div *ngIf=\"isEmpty\" class=\"no-result\">\r\n {{ 'igo.context.contextManager.noResult' | translate }}\r\n </div>\r\n</igo-list>\r\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"], dependencies: [{ kind: "component", type: ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatLabel, selector: "mat-label" }, { kind: "directive", type: i6$1.MatSuffix, selector: "[matSuffix], [matIconSuffix], [matTextSuffix]", inputs: ["matTextSuffix"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: ActionbarComponent, selector: "igo-actionbar", inputs: ["store", "mode", "withToggleButton", "horizontal", "color", "iconColor", "withTitle", "withTooltip", "scrollActive", "withIcon", "icon", "xPosition", "yPosition", "overlayClass"] }, { kind: "ngmodule", type: MatMenuModule }, { kind: "component", type: i12$1.MatMenu, selector: "mat-menu", inputs: ["backdropClass", "aria-label", "aria-labelledby", "aria-describedby", "xPosition", "yPosition", "overlapTrigger", "hasBackdrop", "class", "classList"], outputs: ["closed", "close"], exportAs: ["matMenu"] }, { kind: "component", type: i12$1.MatMenuItem, selector: "[mat-menu-item]", inputs: ["role", "disabled", "disableRipple"], exportAs: ["matMenuItem"] }, { kind: "directive", type: i12$1.MatMenuTrigger, selector: "[mat-menu-trigger-for], [matMenuTriggerFor]", inputs: ["mat-menu-trigger-for", "matMenuTriggerFor", "matMenuTriggerData", "matMenuTriggerRestoreFocus"], outputs: ["menuOpened", "onMenuOpen", "menuClosed", "onMenuClose"], exportAs: ["matMenuTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatCheckboxModule }, { kind: "component", type: i13$1.MatCheckbox, selector: "mat-checkbox", inputs: ["aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "disableRipple", "tabIndex", "color", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }, { kind: "component", type: CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "component", type: ContextItemComponent, selector: "igo-context-item", inputs: ["showFavorite", "context", "default", "selected"], outputs: ["edit", "delete", "save", "clone", "hide", "show", "favorite", "managePermissions", "manageTools"] }, { kind: "directive", type: ListItemDirective, selector: "[igoListItem]", inputs: ["color", "focused", "selected", "disabled"], outputs: ["beforeSelect", "beforeFocus", "beforeUnselect", "beforeUnfocus", "beforeDisable", "beforeEnable", "focus", "unfocus", "select", "unselect", "disable", "enable"] }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
2187
1800
  }
2188
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextListComponent, decorators: [{
1801
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextListComponent, decorators: [{
2189
1802
  type: Component,
2190
- args: [{ selector: 'igo-context-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<igo-list [navigation]=\"true\">\r\n <div class=\"context-filter-container\">\r\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\r\n <mat-label>{{\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n \"\r\n [(ngModel)]=\"term\"\r\n />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n class=\"clear-button\"\r\n *ngIf=\"term.length\"\r\n aria-label=\"Clear\"\r\n color=\"warn\"\r\n (click)=\"clearFilter()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"actions-container\">\r\n <button\r\n *ngIf=\"!sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.sortAlphabetically' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(true)\"\r\n >\r\n <mat-icon\r\n color=\"primary\"\r\n svgIcon=\"sort-alphabetical-variant\"\r\n ></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(false)\"\r\n >\r\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\r\n </button>\r\n\r\n <igo-actionbar\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"add-context-button\"\r\n [iconColor]=\"color\"\r\n [store]=\"actionStore\"\r\n [withIcon]=\"true\"\r\n icon=\"plus\"\r\n [withTitle]=\"actionbarMode === 'overlay'\"\r\n [horizontal]=\"false\"\r\n [mode]=\"actionbarMode\"\r\n >\r\n </igo-actionbar>\r\n\r\n <button\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"users-filter\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"accountMenu\"\r\n >\r\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\r\n </button>\r\n <mat-menu #accountMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let user of users\">\r\n <button\r\n *ngIf=\"!user.childs; else withSubMenu\"\r\n mat-menu-item\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n <ng-template #withSubMenu>\r\n <button\r\n mat-menu-item\r\n [matMenuTriggerFor]=\"subAccountMenu\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n\r\n <mat-menu #subAccountMenu=\"matMenu\">\r\n <button\r\n mat-menu-item\r\n *ngFor=\"let child of user.childs\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(child).checked\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(child, user)\"\r\n >\r\n {{ child.title }}\r\n </mat-checkbox>\r\n </button>\r\n </mat-menu>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <button mat-menu-item class=\"profil-menu\">\r\n <mat-checkbox\r\n [checked]=\"showHidden\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"showHiddenContexts.emit()\"\r\n >\r\n </mat-checkbox>\r\n <span>\r\n {{ 'igo.context.contextManager.showHidden' | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n\r\n <ng-template ngFor let-groupContexts [ngForOf]=\"contexts$ | async | keyvalue\">\r\n <igo-collapsible\r\n *ngIf=\"groupContexts.value.length && auth.authenticated\"\r\n [title]=\"titleMapping[groupContexts.key] | translate\"\r\n [collapsed]=\"collapsed[titleMapping[groupContexts.key]]\"\r\n (toggle)=\"collapsed[titleMapping[groupContexts.key]] = $event\"\r\n >\r\n <ng-template ngFor let-context [ngForOf]=\"groupContexts.value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n context.id &&\r\n this.defaultContextId &&\r\n this.defaultContextId === context.id\r\n \"\r\n (edit)=\"edit.emit(context)\"\r\n (delete)=\"delete.emit(context)\"\r\n (clone)=\"clone.emit(context)\"\r\n (save)=\"save.emit(context)\"\r\n (hide)=\"hideContext(context)\"\r\n (show)=\"showContext(context)\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (manageTools)=\"manageTools.emit(context)\"\r\n (managePermissions)=\"managePermissions.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n\r\n <ng-template\r\n *ngIf=\"groupContexts.value.length && !auth.authenticated\"\r\n ngFor\r\n let-context\r\n [ngForOf]=\"groupContexts.value\"\r\n >\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [showFavorite]=\"\r\n configService.getConfig('favoriteContext4NonAuthenticated')\r\n \"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n contextConfigs\r\n ? defaultContextId === context.id\r\n : defaultContextId === context.uri\r\n \"\r\n (favorite)=\"favorite.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </ng-template>\r\n\r\n <div *ngIf=\"isEmpty\" class=\"no-result\">\r\n {{ 'igo.context.contextManager.noResult' | translate }}\r\n </div>\r\n</igo-list>\r\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"] }]
2191
- }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i3.ConfigService }, { type: i2.AuthService }, { type: i1$3.MatDialog }, { type: i3.LanguageService }, { type: i3.StorageService }]; }, propDecorators: { contexts: [{
1803
+ args: [{ selector: 'igo-context-list', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
1804
+ ListComponent,
1805
+ NgIf,
1806
+ MatFormFieldModule,
1807
+ MatInputModule,
1808
+ FormsModule,
1809
+ MatButtonModule,
1810
+ MatIconModule,
1811
+ MatTooltipModule,
1812
+ ActionbarComponent,
1813
+ MatMenuModule,
1814
+ NgFor,
1815
+ MatCheckboxModule,
1816
+ CollapsibleComponent,
1817
+ ContextItemComponent,
1818
+ ListItemDirective,
1819
+ AsyncPipe,
1820
+ KeyValuePipe,
1821
+ TranslateModule
1822
+ ], template: "<igo-list [navigation]=\"true\">\r\n <div class=\"context-filter-container\">\r\n <mat-form-field *ngIf=\"showFilter()\" floatLabel=\"always\">\r\n <mat-label>{{\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n }}</mat-label>\r\n <input\r\n matInput\r\n type=\"text\"\r\n [placeholder]=\"\r\n 'igo.context.contextManager.filterPlaceHolder' | translate\r\n \"\r\n [(ngModel)]=\"term\"\r\n />\r\n <button\r\n mat-icon-button\r\n matSuffix\r\n class=\"clear-button\"\r\n *ngIf=\"term.length\"\r\n aria-label=\"Clear\"\r\n color=\"warn\"\r\n (click)=\"clearFilter()\"\r\n >\r\n <mat-icon svgIcon=\"close\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n\r\n <div class=\"actions-container\">\r\n <button\r\n *ngIf=\"!sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"\r\n 'igo.context.contextManager.sortAlphabetically' | translate\r\n \"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(true)\"\r\n >\r\n <mat-icon\r\n color=\"primary\"\r\n svgIcon=\"sort-alphabetical-variant\"\r\n ></mat-icon>\r\n </button>\r\n <button\r\n *ngIf=\"sortedAlpha\"\r\n class=\"sort-alpha\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.sortContextOrder' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n (click)=\"toggleSort(false)\"\r\n >\r\n <mat-icon color=\"warn\" svgIcon=\"sort-variant-remove\"></mat-icon>\r\n </button>\r\n\r\n <igo-actionbar\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"add-context-button\"\r\n [iconColor]=\"color\"\r\n [store]=\"actionStore\"\r\n [withIcon]=\"true\"\r\n icon=\"plus\"\r\n [withTitle]=\"actionbarMode === 'overlay'\"\r\n [horizontal]=\"false\"\r\n [mode]=\"actionbarMode\"\r\n >\r\n </igo-actionbar>\r\n\r\n <button\r\n *ngIf=\"auth.authenticated && contextConfigs\"\r\n class=\"users-filter\"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.contextManager.filterUser' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n [matMenuTriggerFor]=\"accountMenu\"\r\n >\r\n <mat-icon color=\"primary\" svgIcon=\"filter-menu\"></mat-icon>\r\n </button>\r\n <mat-menu #accountMenu=\"matMenu\">\r\n <ng-container *ngFor=\"let user of users\">\r\n <button\r\n *ngIf=\"!user.childs; else withSubMenu\"\r\n mat-menu-item\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n <ng-template #withSubMenu>\r\n <button\r\n mat-menu-item\r\n [matMenuTriggerFor]=\"subAccountMenu\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(user).checked\"\r\n [indeterminate]=\"getPermission(user).indeterminate\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(user)\"\r\n >\r\n </mat-checkbox>\r\n <span>{{ user.title }}</span>\r\n </button>\r\n\r\n <mat-menu #subAccountMenu=\"matMenu\">\r\n <button\r\n mat-menu-item\r\n *ngFor=\"let child of user.childs\"\r\n class=\"profil-menu\"\r\n >\r\n <mat-checkbox\r\n [checked]=\"getPermission(child).checked\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"handleToggleCategory(child, user)\"\r\n >\r\n {{ child.title }}\r\n </mat-checkbox>\r\n </button>\r\n </mat-menu>\r\n </ng-template>\r\n </ng-container>\r\n\r\n <button mat-menu-item class=\"profil-menu\">\r\n <mat-checkbox\r\n [checked]=\"showHidden\"\r\n (click)=\"$event.stopPropagation()\"\r\n (change)=\"showHiddenContexts.emit()\"\r\n >\r\n </mat-checkbox>\r\n <span>\r\n {{ 'igo.context.contextManager.showHidden' | translate }}\r\n </span>\r\n </button>\r\n </mat-menu>\r\n </div>\r\n </div>\r\n\r\n <ng-template\r\n ngFor\r\n let-groupContexts\r\n [ngForOf]=\"$any(contexts$ | async) | keyvalue\"\r\n >\r\n <igo-collapsible\r\n *ngIf=\"$any(groupContexts).value.length && auth.authenticated\"\r\n [title]=\"titleMapping[$any(groupContexts).key] | translate\"\r\n [collapsed]=\"$any(collapsed[titleMapping[$any(groupContexts).key]])\"\r\n (toggle)=\"collapsed[titleMapping[$any(groupContexts).key]] = $any($event)\"\r\n >\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n context.id &&\r\n this.defaultContextId &&\r\n this.defaultContextId === context.id\r\n \"\r\n (edit)=\"edit.emit(context)\"\r\n (delete)=\"delete.emit(context)\"\r\n (clone)=\"clone.emit(context)\"\r\n (save)=\"save.emit(context)\"\r\n (hide)=\"hideContext(context)\"\r\n (show)=\"showContext(context)\"\r\n (favorite)=\"favorite.emit(context)\"\r\n (manageTools)=\"manageTools.emit(context)\"\r\n (managePermissions)=\"managePermissions.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n\r\n <ng-container\r\n *ngIf=\"$any(groupContexts).value.length && !auth.authenticated\"\r\n ></ng-container>\r\n <ng-template ngFor let-context [ngForOf]=\"$any(groupContexts).value\">\r\n <igo-context-item\r\n igoListItem\r\n color=\"accent\"\r\n [showFavorite]=\"\r\n configService.getConfig('favoriteContext4NonAuthenticated')\r\n \"\r\n [selected]=\"selectedContext && selectedContext.uri === context.uri\"\r\n [context]=\"context\"\r\n [default]=\"\r\n contextConfigs\r\n ? defaultContextId === context.id\r\n : defaultContextId === context.uri\r\n \"\r\n (favorite)=\"favorite.emit(context)\"\r\n (select)=\"select.emit(context)\"\r\n (unselect)=\"unselect.emit(context)\"\r\n >\r\n </igo-context-item>\r\n </ng-template>\r\n </ng-template>\r\n\r\n <div *ngIf=\"isEmpty\" class=\"no-result\">\r\n {{ 'igo.context.contextManager.noResult' | translate }}\r\n </div>\r\n</igo-list>\r\n", styles: [":host ::ng-deep mat-form-field .mat-mdc-form-field-subscript-wrapper{display:none}.context-filter-container{display:flex;align-items:center;padding:8px 4px}.context-filter-container mat-form-field{flex:1}.context-filter-min-width{width:calc(100% - 135px);margin:5px;padding-left:6px}.profil-menu{padding-left:8px}.profil-menu mat-checkbox{margin-right:8px}.add-context-button{margin:0;width:40px;display:inline-flex;overflow:hidden}.actions-container{margin-left:4px}.no-result{padding:16px}\n"] }]
1823
+ }], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i1$1.ConfigService }, { type: i2.AuthService }, { type: i1$4.MatDialog }, { type: i4.LanguageService }, { type: i6.StorageService }], propDecorators: { contexts: [{
2192
1824
  type: Input
2193
1825
  }], selectedContext: [{
2194
1826
  type: Input
@@ -2412,618 +2044,965 @@ class ContextListBindingDirective {
2412
2044
  });
2413
2045
  }
2414
2046
  ngOnDestroy() {
2415
- this.contexts$$.unsubscribe();
2416
- this.selectedContext$$.unsubscribe();
2417
- this.defaultContextId$$.unsubscribe();
2047
+ this.contexts$$.unsubscribe();
2048
+ this.selectedContext$$.unsubscribe();
2049
+ this.defaultContextId$$.unsubscribe();
2050
+ }
2051
+ handleContextsChange(contexts) {
2052
+ this.component.contexts = contexts;
2053
+ }
2054
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextListBindingDirective, deps: [{ token: ContextListComponent, self: true }, { token: ContextService }, { token: i1$2.MapService }, { token: i4.LanguageService }, { token: i5$2.ConfirmDialogService }, { token: i3.MessageService }, { token: i2.AuthService }, { token: i6.StorageService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
2055
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: ContextListBindingDirective, isStandalone: true, selector: "[igoContextListBinding]", host: { listeners: { "select": "onSelect($event)", "edit": "onEdit($event)", "save": "onSave($event)", "favorite": "onFavorite($event)", "manageTools": "onManageTools($event)", "managePermissions": "onManagePermissions($event)", "delete": "onDelete($event)", "clone": "onClone($event)", "create": "onCreate($event)", "filterPermissionsChanged": "loadContexts()", "showHiddenContexts": "showHiddenContexts()", "show": "onShowContext($event)", "hide": "onHideContext($event)" } }, providers: [ConfirmDialogService], ngImport: i0 });
2056
+ }
2057
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextListBindingDirective, decorators: [{
2058
+ type: Directive,
2059
+ args: [{
2060
+ selector: '[igoContextListBinding]',
2061
+ standalone: true,
2062
+ providers: [ConfirmDialogService]
2063
+ }]
2064
+ }], ctorParameters: () => [{ type: ContextListComponent, decorators: [{
2065
+ type: Self
2066
+ }] }, { type: ContextService }, { type: i1$2.MapService }, { type: i4.LanguageService }, { type: i5$2.ConfirmDialogService }, { type: i3.MessageService }, { type: i2.AuthService }, { type: i6.StorageService }, { type: i0.ChangeDetectorRef }], propDecorators: { onSelect: [{
2067
+ type: HostListener,
2068
+ args: ['select', ['$event']]
2069
+ }], onEdit: [{
2070
+ type: HostListener,
2071
+ args: ['edit', ['$event']]
2072
+ }], onSave: [{
2073
+ type: HostListener,
2074
+ args: ['save', ['$event']]
2075
+ }], onFavorite: [{
2076
+ type: HostListener,
2077
+ args: ['favorite', ['$event']]
2078
+ }], onManageTools: [{
2079
+ type: HostListener,
2080
+ args: ['manageTools', ['$event']]
2081
+ }], onManagePermissions: [{
2082
+ type: HostListener,
2083
+ args: ['managePermissions', ['$event']]
2084
+ }], onDelete: [{
2085
+ type: HostListener,
2086
+ args: ['delete', ['$event']]
2087
+ }], onClone: [{
2088
+ type: HostListener,
2089
+ args: ['clone', ['$event']]
2090
+ }], onCreate: [{
2091
+ type: HostListener,
2092
+ args: ['create', ['$event']]
2093
+ }], loadContexts: [{
2094
+ type: HostListener,
2095
+ args: ['filterPermissionsChanged']
2096
+ }], showHiddenContexts: [{
2097
+ type: HostListener,
2098
+ args: ['showHiddenContexts']
2099
+ }], onShowContext: [{
2100
+ type: HostListener,
2101
+ args: ['show', ['$event']]
2102
+ }], onHideContext: [{
2103
+ type: HostListener,
2104
+ args: ['hide', ['$event']]
2105
+ }] } });
2106
+
2107
+ class ContextPermissionsComponent {
2108
+ formBuilder;
2109
+ cd;
2110
+ http;
2111
+ authService;
2112
+ config;
2113
+ form;
2114
+ get context() {
2115
+ return this._context;
2116
+ }
2117
+ set context(value) {
2118
+ this._context = value;
2119
+ this.cd.detectChanges();
2120
+ }
2121
+ _context;
2122
+ get permissions() {
2123
+ return this._permissions;
2124
+ }
2125
+ set permissions(value) {
2126
+ this._permissions = value;
2127
+ this.cd.detectChanges();
2128
+ }
2129
+ _permissions;
2130
+ get profils() {
2131
+ return this._profils;
2132
+ }
2133
+ set profils(value) {
2134
+ this._profils = value;
2135
+ this.cd.detectChanges();
2136
+ }
2137
+ _profils = [];
2138
+ get canWrite() {
2139
+ return this.context.permission === TypePermission[TypePermission.write];
2140
+ }
2141
+ baseUrlProfils;
2142
+ formControl = new UntypedFormControl();
2143
+ formValueChanges$$;
2144
+ addPermission = new EventEmitter();
2145
+ removePermission = new EventEmitter();
2146
+ scopeChanged = new EventEmitter();
2147
+ constructor(formBuilder, cd, http, authService, config) {
2148
+ this.formBuilder = formBuilder;
2149
+ this.cd = cd;
2150
+ this.http = http;
2151
+ this.authService = authService;
2152
+ this.config = config;
2153
+ }
2154
+ ngOnInit() {
2155
+ this.buildForm();
2156
+ this.baseUrlProfils =
2157
+ this.config.getConfig('context.url') + '/profils-users?';
2158
+ this.formValueChanges$$ = this.formControl.valueChanges.subscribe((value) => {
2159
+ if (value.length) {
2160
+ this.http
2161
+ .get(this.baseUrlProfils + 'q=' + value)
2162
+ .subscribe((profils) => {
2163
+ this.profils = profils;
2164
+ });
2165
+ this.profils.filter((profil) => {
2166
+ const filterNormalized = value
2167
+ .toLowerCase()
2168
+ .normalize('NFD')
2169
+ .replace(/[\u0300-\u036f]/g, '');
2170
+ const profilTitleNormalized = profil.title
2171
+ .toLowerCase()
2172
+ .normalize('NFD')
2173
+ .replace(/[\u0300-\u036f]/g, '');
2174
+ const profilNameNormalized = profil.name
2175
+ .toLowerCase()
2176
+ .normalize('NFD')
2177
+ .replace(/[\u0300-\u036f]/g, '');
2178
+ const profilNormalized = profilNameNormalized + profilTitleNormalized;
2179
+ return profilNormalized.includes(filterNormalized);
2180
+ });
2181
+ }
2182
+ else {
2183
+ this.profils = [];
2184
+ }
2185
+ });
2186
+ }
2187
+ displayFn(profil) {
2188
+ return profil ? profil.title : undefined;
2189
+ }
2190
+ handleFormSubmit(value) {
2191
+ this.addPermission.emit(value);
2192
+ }
2193
+ buildForm() {
2194
+ this.form = this.formBuilder.group({
2195
+ profil: [],
2196
+ typePermission: ['read']
2197
+ });
2198
+ }
2199
+ onProfilSelected(value) {
2200
+ this.form.setValue({
2201
+ profil: value.name,
2202
+ typePermission: this.form.value.typePermission
2203
+ });
2204
+ }
2205
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextPermissionsComponent, deps: [{ token: i1$3.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.AuthService }, { token: i1$1.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
2206
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ContextPermissionsComponent, isStandalone: true, selector: "igo-context-permissions", inputs: { context: "context", permissions: "permissions" }, outputs: { addPermission: "addPermission", removePermission: "removePermission", scopeChanged: "scopeChanged" }, ngImport: i0, template: "<div *ngIf=\"context\">\n <div *ngIf=\"!canWrite\" class=\"scopeForm\">\n <h4>{{ 'igo.context.permission.readOnlyTitle' | translate }}</h4>\n <p>{{ 'igo.context.permission.readOnlyMsg' | translate }}</p>\n </div>\n\n <div *ngIf=\"canWrite\" class=\"scopeForm\">\n <mat-radio-group\n [(ngModel)]=\"context.scope\"\n (change)=\"scopeChanged.emit(context)\"\n >\n <mat-radio-button value=\"private\">\n {{ 'igo.context.permission.scope.private' | translate }}\n </mat-radio-button>\n <mat-radio-button value=\"protected\">\n {{ 'igo.context.permission.scope.shared' | translate }}\n </mat-radio-button>\n <mat-radio-button *ngIf=\"authService.isAdmin\" value=\"public\">\n {{ 'igo.context.permission.scope.public' | translate }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <form\n *ngIf=\"context.scope !== 'private' && canWrite\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleFormSubmit(form.value)\"\n >\n <mat-form-field class=\"full-width\">\n <input\n matInput\n required\n [placeholder]=\"'igo.context.permission.user' | translate\"\n [formControl]=\"formControl\"\n [matAutocomplete]=\"auto\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onProfilSelected($event.option.value)\"\n [displayWith]=\"displayFn\"\n >\n <mat-option *ngFor=\"let profil of this.profils\" [value]=\"profil\">\n {{ profil.title }}<br />\n <small class=\"mat-typography\">{{ profil.name }}</small>\n </mat-option>\n </mat-autocomplete>\n <mat-error>\n {{ 'igo.context.permission.profilRequired' | translate }}\n </mat-error>\n </mat-form-field>\n\n <mat-radio-group formControlName=\"typePermission\">\n <mat-radio-button value=\"read\">\n {{ 'igo.context.permission.read' | translate }}\n </mat-radio-button>\n <mat-radio-button value=\"write\">\n {{ 'igo.context.permission.write' | translate }}\n </mat-radio-button>\n </mat-radio-group>\n\n <div class=\"igo-form-button-group\">\n <button mat-raised-button type=\"submit\" [disabled]=\"!form.valid\">\n {{ 'igo.context.permission.addBtn' | translate }}\n </button>\n </div>\n </form>\n\n <igo-list *ngIf=\"permissions && context.scope !== 'private'\">\n <ng-template ngFor let-groupPermissions [ngForOf]=\"permissions | keyvalue\">\n <igo-collapsible\n *ngIf=\"groupPermissions.value.length\"\n [title]=\"'igo.context.permission.' + groupPermissions.key | translate\"\n >\n <ng-template ngFor let-permission [ngForOf]=\"groupPermissions.value\">\n <mat-list-item>\n <mat-icon matListItemIcon svgIcon=\"account-outline\"></mat-icon>\n <h4 matListItemTitle>\n {{ permission.profilTitle }}\n <small class=\"mat-typography\">{{ permission.profil }}</small>\n </h4>\n\n <div\n matListItemMeta\n igoStopPropagation\n class=\"igo-actions-container\"\n >\n <button\n *ngIf=\"\n canWrite ||\n permission.profil === authService.decodeToken().user.sourceId\n \"\n mat-icon-button\n [matTooltip]=\"'igo.context.permission.delete' | translate\"\n matTooltipShowDelay=\"500\"\n color=\"warn\"\n (click)=\"removePermission.emit(permission)\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </div>\n </mat-list-item>\n </ng-template>\n </igo-collapsible>\n </ng-template>\n </igo-list>\n</div>\n", styles: [":host{margin:10px}.full-width{width:100%}mat-radio-button{padding:14px 14px 14px 0}.scopeForm,form{padding:5px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatRadioModule }, { kind: "directive", type: i5$3.MatRadioGroup, selector: "mat-radio-group", inputs: ["color", "name", "labelPosition", "value", "selected", "disabled", "required"], outputs: ["change"], exportAs: ["matRadioGroup"] }, { kind: "component", type: i5$3.MatRadioButton, selector: "mat-radio-button", inputs: ["id", "name", "aria-label", "aria-labelledby", "aria-describedby", "disableRipple", "tabIndex", "checked", "value", "labelPosition", "disabled", "required", "color"], outputs: ["change"], exportAs: ["matRadioButton"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatAutocompleteModule }, { kind: "component", type: i8$1.MatAutocomplete, selector: "mat-autocomplete", inputs: ["aria-label", "aria-labelledby", "displayWith", "autoActiveFirstOption", "autoSelectActiveOption", "requireSelection", "panelWidth", "disableRipple", "class", "hideSingleSelectionIndicator"], outputs: ["optionSelected", "opened", "closed", "optionActivated"], exportAs: ["matAutocomplete"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "directive", type: i8$1.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", inputs: ["matAutocomplete", "matAutocompletePosition", "matAutocompleteConnectedTo", "autocomplete", "matAutocompleteDisabled"], exportAs: ["matAutocompleteTrigger"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "component", type: ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "component", type: CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "ngmodule", type: MatListModule }, { kind: "component", type: i3$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i3$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i3$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i3$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "pipe", type: KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
2207
+ }
2208
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextPermissionsComponent, decorators: [{
2209
+ type: Component,
2210
+ args: [{ selector: 'igo-context-permissions', standalone: true, imports: [
2211
+ NgIf,
2212
+ MatRadioModule,
2213
+ FormsModule,
2214
+ ReactiveFormsModule,
2215
+ MatFormFieldModule,
2216
+ MatInputModule,
2217
+ MatAutocompleteModule,
2218
+ NgFor,
2219
+ MatOptionModule,
2220
+ MatButtonModule,
2221
+ ListComponent,
2222
+ CollapsibleComponent,
2223
+ MatListModule,
2224
+ MatIconModule,
2225
+ StopPropagationDirective,
2226
+ MatTooltipModule,
2227
+ KeyValuePipe,
2228
+ TranslateModule
2229
+ ], template: "<div *ngIf=\"context\">\n <div *ngIf=\"!canWrite\" class=\"scopeForm\">\n <h4>{{ 'igo.context.permission.readOnlyTitle' | translate }}</h4>\n <p>{{ 'igo.context.permission.readOnlyMsg' | translate }}</p>\n </div>\n\n <div *ngIf=\"canWrite\" class=\"scopeForm\">\n <mat-radio-group\n [(ngModel)]=\"context.scope\"\n (change)=\"scopeChanged.emit(context)\"\n >\n <mat-radio-button value=\"private\">\n {{ 'igo.context.permission.scope.private' | translate }}\n </mat-radio-button>\n <mat-radio-button value=\"protected\">\n {{ 'igo.context.permission.scope.shared' | translate }}\n </mat-radio-button>\n <mat-radio-button *ngIf=\"authService.isAdmin\" value=\"public\">\n {{ 'igo.context.permission.scope.public' | translate }}\n </mat-radio-button>\n </mat-radio-group>\n </div>\n\n <form\n *ngIf=\"context.scope !== 'private' && canWrite\"\n [formGroup]=\"form\"\n (ngSubmit)=\"handleFormSubmit(form.value)\"\n >\n <mat-form-field class=\"full-width\">\n <input\n matInput\n required\n [placeholder]=\"'igo.context.permission.user' | translate\"\n [formControl]=\"formControl\"\n [matAutocomplete]=\"auto\"\n />\n <mat-autocomplete\n #auto=\"matAutocomplete\"\n (optionSelected)=\"onProfilSelected($event.option.value)\"\n [displayWith]=\"displayFn\"\n >\n <mat-option *ngFor=\"let profil of this.profils\" [value]=\"profil\">\n {{ profil.title }}<br />\n <small class=\"mat-typography\">{{ profil.name }}</small>\n </mat-option>\n </mat-autocomplete>\n <mat-error>\n {{ 'igo.context.permission.profilRequired' | translate }}\n </mat-error>\n </mat-form-field>\n\n <mat-radio-group formControlName=\"typePermission\">\n <mat-radio-button value=\"read\">\n {{ 'igo.context.permission.read' | translate }}\n </mat-radio-button>\n <mat-radio-button value=\"write\">\n {{ 'igo.context.permission.write' | translate }}\n </mat-radio-button>\n </mat-radio-group>\n\n <div class=\"igo-form-button-group\">\n <button mat-raised-button type=\"submit\" [disabled]=\"!form.valid\">\n {{ 'igo.context.permission.addBtn' | translate }}\n </button>\n </div>\n </form>\n\n <igo-list *ngIf=\"permissions && context.scope !== 'private'\">\n <ng-template ngFor let-groupPermissions [ngForOf]=\"permissions | keyvalue\">\n <igo-collapsible\n *ngIf=\"groupPermissions.value.length\"\n [title]=\"'igo.context.permission.' + groupPermissions.key | translate\"\n >\n <ng-template ngFor let-permission [ngForOf]=\"groupPermissions.value\">\n <mat-list-item>\n <mat-icon matListItemIcon svgIcon=\"account-outline\"></mat-icon>\n <h4 matListItemTitle>\n {{ permission.profilTitle }}\n <small class=\"mat-typography\">{{ permission.profil }}</small>\n </h4>\n\n <div\n matListItemMeta\n igoStopPropagation\n class=\"igo-actions-container\"\n >\n <button\n *ngIf=\"\n canWrite ||\n permission.profil === authService.decodeToken().user.sourceId\n \"\n mat-icon-button\n [matTooltip]=\"'igo.context.permission.delete' | translate\"\n matTooltipShowDelay=\"500\"\n color=\"warn\"\n (click)=\"removePermission.emit(permission)\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </div>\n </mat-list-item>\n </ng-template>\n </igo-collapsible>\n </ng-template>\n </igo-list>\n</div>\n", styles: [":host{margin:10px}.full-width{width:100%}mat-radio-button{padding:14px 14px 14px 0}.scopeForm,form{padding:5px}\n"] }]
2230
+ }], ctorParameters: () => [{ type: i1$3.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.AuthService }, { type: i1$1.ConfigService }], propDecorators: { context: [{
2231
+ type: Input
2232
+ }], permissions: [{
2233
+ type: Input
2234
+ }], addPermission: [{
2235
+ type: Output
2236
+ }], removePermission: [{
2237
+ type: Output
2238
+ }], scopeChanged: [{
2239
+ type: Output
2240
+ }] } });
2241
+
2242
+ class ContextPermissionsBindingDirective {
2243
+ contextService;
2244
+ languageService;
2245
+ messageService;
2246
+ cd;
2247
+ component;
2248
+ editedContext$$;
2249
+ onAddPermission(permission) {
2250
+ if (!permission.profil) {
2251
+ this.messageService.error('igo.context.contextManager.errors.addPermissionEmpty', 'igo.context.contextManager.errors.addPermissionTitle');
2252
+ return;
2253
+ }
2254
+ const contextId = this.component.context.id;
2255
+ this.contextService
2256
+ .addPermissionAssociation(contextId, permission.profil, permission.typePermission)
2257
+ .subscribe((profils) => {
2258
+ for (const p of profils) {
2259
+ this.component.permissions[permission.typePermission].push(p);
2260
+ }
2261
+ const profil = permission.profil;
2262
+ this.messageService.success('igo.context.permission.dialog.addMsg', 'igo.context.permission.dialog.addTitle', undefined, { value: profil });
2263
+ this.cd.detectChanges();
2264
+ });
2265
+ }
2266
+ onRemovePermission(permission) {
2267
+ const contextId = this.component.context.id;
2268
+ this.contextService
2269
+ .deletePermissionAssociation(contextId, permission.id)
2270
+ .subscribe(() => {
2271
+ const index = this.component.permissions[permission.typePermission].findIndex((p) => {
2272
+ return p.id === permission.id;
2273
+ });
2274
+ this.component.permissions[permission.typePermission].splice(index, 1);
2275
+ const profil = permission.profil;
2276
+ this.messageService.success('igo.context.permission.dialog.deleteMsg', 'igo.context.permission.dialog.deleteTitle', undefined, { value: profil });
2277
+ this.cd.detectChanges();
2278
+ });
2279
+ }
2280
+ onScopeChanged(context) {
2281
+ const scope = context.scope;
2282
+ this.contextService.update(context.id, { scope }).subscribe(() => {
2283
+ this.messageService.success('igo.context.permission.dialog.scopeChangedMsg', 'igo.context.permission.dialog.scopeChangedTitle', undefined, { value: 'igo.context.permission.scope.' + scope });
2284
+ });
2285
+ }
2286
+ constructor(component, contextService, languageService, messageService, cd) {
2287
+ this.contextService = contextService;
2288
+ this.languageService = languageService;
2289
+ this.messageService = messageService;
2290
+ this.cd = cd;
2291
+ this.component = component;
2292
+ }
2293
+ ngOnInit() {
2294
+ this.editedContext$$ = this.contextService.editedContext$.subscribe((context) => this.handleEditedContextChange(context));
2295
+ }
2296
+ ngOnDestroy() {
2297
+ this.editedContext$$.unsubscribe();
2298
+ this.contextService.editedContext$.next(undefined);
2418
2299
  }
2419
- handleContextsChange(contexts) {
2420
- this.component.contexts = contexts;
2300
+ handleEditedContextChange(context) {
2301
+ this.component.context = context;
2302
+ if (context) {
2303
+ this.contextService
2304
+ .getPermissions(context.id)
2305
+ .subscribe((permissionsArray) => {
2306
+ permissionsArray = permissionsArray || [];
2307
+ const permissions = {
2308
+ read: permissionsArray.filter((p) => {
2309
+ return p.typePermission.toString() === 'read';
2310
+ }),
2311
+ write: permissionsArray.filter((p) => {
2312
+ return p.typePermission.toString() === 'write';
2313
+ })
2314
+ };
2315
+ return (this.component.permissions = permissions);
2316
+ });
2317
+ }
2421
2318
  }
2422
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextListBindingDirective, deps: [{ token: ContextListComponent, self: true }, { token: ContextService }, { token: i1$1.MapService }, { token: i3.LanguageService }, { token: i13.ConfirmDialogService }, { token: i3.MessageService }, { token: i2.AuthService }, { token: i3.StorageService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
2423
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ContextListBindingDirective, selector: "[igoContextListBinding]", host: { listeners: { "select": "onSelect($event)", "edit": "onEdit($event)", "save": "onSave($event)", "favorite": "onFavorite($event)", "manageTools": "onManageTools($event)", "managePermissions": "onManagePermissions($event)", "delete": "onDelete($event)", "clone": "onClone($event)", "create": "onCreate($event)", "filterPermissionsChanged": "loadContexts()", "showHiddenContexts": "showHiddenContexts()", "show": "onShowContext($event)", "hide": "onHideContext($event)" } }, ngImport: i0 });
2319
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextPermissionsBindingDirective, deps: [{ token: ContextPermissionsComponent, self: true }, { token: ContextService }, { token: i4.LanguageService }, { token: i3.MessageService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
2320
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: ContextPermissionsBindingDirective, isStandalone: true, selector: "[igoContextPermissionsBinding]", host: { listeners: { "addPermission": "onAddPermission($event)", "removePermission": "onRemovePermission($event)", "scopeChanged": "onScopeChanged($event)" } }, ngImport: i0 });
2424
2321
  }
2425
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextListBindingDirective, decorators: [{
2322
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ContextPermissionsBindingDirective, decorators: [{
2426
2323
  type: Directive,
2427
2324
  args: [{
2428
- selector: '[igoContextListBinding]'
2325
+ selector: '[igoContextPermissionsBinding]',
2326
+ standalone: true
2429
2327
  }]
2430
- }], ctorParameters: function () { return [{ type: ContextListComponent, decorators: [{
2328
+ }], ctorParameters: () => [{ type: ContextPermissionsComponent, decorators: [{
2431
2329
  type: Self
2432
- }] }, { type: ContextService }, { type: i1$1.MapService }, { type: i3.LanguageService }, { type: i13.ConfirmDialogService }, { type: i3.MessageService }, { type: i2.AuthService }, { type: i3.StorageService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { onSelect: [{
2433
- type: HostListener,
2434
- args: ['select', ['$event']]
2435
- }], onEdit: [{
2436
- type: HostListener,
2437
- args: ['edit', ['$event']]
2438
- }], onSave: [{
2439
- type: HostListener,
2440
- args: ['save', ['$event']]
2441
- }], onFavorite: [{
2442
- type: HostListener,
2443
- args: ['favorite', ['$event']]
2444
- }], onManageTools: [{
2445
- type: HostListener,
2446
- args: ['manageTools', ['$event']]
2447
- }], onManagePermissions: [{
2448
- type: HostListener,
2449
- args: ['managePermissions', ['$event']]
2450
- }], onDelete: [{
2451
- type: HostListener,
2452
- args: ['delete', ['$event']]
2453
- }], onClone: [{
2454
- type: HostListener,
2455
- args: ['clone', ['$event']]
2456
- }], onCreate: [{
2457
- type: HostListener,
2458
- args: ['create', ['$event']]
2459
- }], loadContexts: [{
2460
- type: HostListener,
2461
- args: ['filterPermissionsChanged']
2462
- }], showHiddenContexts: [{
2330
+ }] }, { type: ContextService }, { type: i4.LanguageService }, { type: i3.MessageService }, { type: i0.ChangeDetectorRef }], propDecorators: { onAddPermission: [{
2463
2331
  type: HostListener,
2464
- args: ['showHiddenContexts']
2465
- }], onShowContext: [{
2332
+ args: ['addPermission', ['$event']]
2333
+ }], onRemovePermission: [{
2466
2334
  type: HostListener,
2467
- args: ['show', ['$event']]
2468
- }], onHideContext: [{
2335
+ args: ['removePermission', ['$event']]
2336
+ }], onScopeChanged: [{
2469
2337
  type: HostListener,
2470
- args: ['hide', ['$event']]
2338
+ args: ['scopeChanged', ['$event']]
2471
2339
  }] } });
2472
2340
 
2473
- class ContextPermissionsComponent {
2474
- formBuilder;
2475
- cd;
2476
- http;
2477
- authService;
2478
- config;
2479
- form;
2480
- get context() {
2481
- return this._context;
2482
- }
2483
- set context(value) {
2484
- this._context = value;
2485
- this.cd.detectChanges();
2486
- }
2487
- _context;
2488
- get permissions() {
2489
- return this._permissions;
2341
+ class LayerContextDirective {
2342
+ component;
2343
+ contextService;
2344
+ layerService;
2345
+ configService;
2346
+ styleListService;
2347
+ styleService;
2348
+ route;
2349
+ context$$;
2350
+ queryParams;
2351
+ contextLayers = [];
2352
+ removeLayersOnContextChange = true;
2353
+ get map() {
2354
+ return this.component.map;
2490
2355
  }
2491
- set permissions(value) {
2492
- this._permissions = value;
2493
- this.cd.detectChanges();
2356
+ constructor(component, contextService, layerService, configService, styleListService, styleService, route) {
2357
+ this.component = component;
2358
+ this.contextService = contextService;
2359
+ this.layerService = layerService;
2360
+ this.configService = configService;
2361
+ this.styleListService = styleListService;
2362
+ this.styleService = styleService;
2363
+ this.route = route;
2494
2364
  }
2495
- _permissions;
2496
- get profils() {
2497
- return this._profils;
2365
+ ngOnInit() {
2366
+ this.context$$ = this.contextService.context$
2367
+ .pipe(filter((context) => context !== undefined))
2368
+ .subscribe((context) => this.handleContextChange(context));
2369
+ if (this.route &&
2370
+ this.route.options.visibleOnLayersKey &&
2371
+ this.route.options.visibleOffLayersKey &&
2372
+ this.route.options.contextKey) {
2373
+ this.route.queryParams
2374
+ .pipe(first((params) => !ObjectUtils.isEmpty(params)))
2375
+ .subscribe((params) => {
2376
+ this.queryParams = params;
2377
+ });
2378
+ }
2498
2379
  }
2499
- set profils(value) {
2500
- this._profils = value;
2501
- this.cd.detectChanges();
2380
+ ngOnDestroy() {
2381
+ this.context$$.unsubscribe();
2502
2382
  }
2503
- _profils = [];
2504
- get canWrite() {
2505
- return this.context.permission === TypePermission[TypePermission.write];
2383
+ handleContextChange(context) {
2384
+ if (context.layers === undefined) {
2385
+ return;
2386
+ }
2387
+ if (this.removeLayersOnContextChange === true) {
2388
+ this.map.removeAllLayers();
2389
+ }
2390
+ else {
2391
+ this.map.removeLayers(this.contextLayers);
2392
+ }
2393
+ this.contextLayers = [];
2394
+ const layersAndIndex$ = merge(...context.layers.map((layerOptions, index) => {
2395
+ return this.layerService.createAsyncLayer(layerOptions, context.uri);
2396
+ }));
2397
+ layersAndIndex$
2398
+ .pipe(buffer(layersAndIndex$.pipe(debounceTime(500))))
2399
+ .subscribe((layers) => {
2400
+ this.handleAddLayers(layers);
2401
+ if (context.extraFeatures) {
2402
+ context.extraFeatures.forEach((featureCollection) => {
2403
+ const importExportOptions = this.configService.getConfig('importExport');
2404
+ if (!importExportOptions?.importWithStyle) {
2405
+ addImportedFeaturesToMap(featureCollection, this.map);
2406
+ }
2407
+ else {
2408
+ addImportedFeaturesStyledToMap(featureCollection, this.map, this.styleListService, this.styleService);
2409
+ }
2410
+ });
2411
+ }
2412
+ });
2413
+ this.layerService
2414
+ .createAsyncIdbLayers(context.uri)
2415
+ .pipe(debounceTime(500))
2416
+ .subscribe((layers) => this.handleAddLayers(layers));
2506
2417
  }
2507
- baseUrlProfils;
2508
- formControl = new UntypedFormControl();
2509
- formValueChanges$$;
2510
- addPermission = new EventEmitter();
2511
- removePermission = new EventEmitter();
2512
- scopeChanged = new EventEmitter();
2513
- constructor(formBuilder, cd, http, authService, config) {
2514
- this.formBuilder = formBuilder;
2515
- this.cd = cd;
2516
- this.http = http;
2517
- this.authService = authService;
2518
- this.config = config;
2418
+ handleAddLayers(layers) {
2419
+ layers = layers
2420
+ .filter((layer) => layer !== undefined)
2421
+ .map((layer) => {
2422
+ layer.visible = this.computeLayerVisibilityFromUrl(layer);
2423
+ layer.zIndex = layer.zIndex;
2424
+ return layer;
2425
+ });
2426
+ this.contextLayers.concat(layers);
2427
+ this.map.addLayers(layers);
2519
2428
  }
2520
- ngOnInit() {
2521
- this.buildForm();
2522
- this.baseUrlProfils =
2523
- this.config.getConfig('context.url') + '/profils-users?';
2524
- this.formValueChanges$$ = this.formControl.valueChanges.subscribe((value) => {
2525
- if (value.length) {
2526
- this.http
2527
- .get(this.baseUrlProfils + 'q=' + value)
2528
- .subscribe((profils) => {
2529
- this.profils = profils;
2530
- });
2531
- this.profils.filter((profil) => {
2532
- const filterNormalized = value
2533
- .toLowerCase()
2534
- .normalize('NFD')
2535
- .replace(/[\u0300-\u036f]/g, '');
2536
- const profilTitleNormalized = profil.title
2537
- .toLowerCase()
2538
- .normalize('NFD')
2539
- .replace(/[\u0300-\u036f]/g, '');
2540
- const profilNameNormalized = profil.name
2541
- .toLowerCase()
2542
- .normalize('NFD')
2543
- .replace(/[\u0300-\u036f]/g, '');
2544
- const profilNormalized = profilNameNormalized + profilTitleNormalized;
2545
- return profilNormalized.includes(filterNormalized);
2546
- });
2429
+ computeLayerVisibilityFromUrl(layer) {
2430
+ const params = this.queryParams;
2431
+ const currentContext = this.contextService.context$.value.uri;
2432
+ const currentLayerid = layer.id;
2433
+ let visible = layer.visible;
2434
+ if (!params || !currentLayerid) {
2435
+ return visible;
2436
+ }
2437
+ const contextParams = params[this.route.options.contextKey];
2438
+ if (contextParams === currentContext || !contextParams) {
2439
+ let visibleOnLayersParams = '';
2440
+ let visibleOffLayersParams = '';
2441
+ let visiblelayers = [];
2442
+ let invisiblelayers = [];
2443
+ if (this.route.options.visibleOnLayersKey &&
2444
+ params[this.route.options.visibleOnLayersKey]) {
2445
+ visibleOnLayersParams =
2446
+ params[this.route.options.visibleOnLayersKey];
2447
+ }
2448
+ if (this.route.options.visibleOffLayersKey &&
2449
+ params[this.route.options.visibleOffLayersKey]) {
2450
+ visibleOffLayersParams =
2451
+ params[this.route.options.visibleOffLayersKey];
2452
+ }
2453
+ /* This order is important because to control whichever
2454
+ the order of * param. First whe open and close everything.*/
2455
+ if (visibleOnLayersParams === '*') {
2456
+ visible = true;
2457
+ }
2458
+ if (visibleOffLayersParams === '*') {
2459
+ visible = false;
2460
+ }
2461
+ // After, managing named layer by id (context.json OR id from datasource)
2462
+ visiblelayers = visibleOnLayersParams.split(',');
2463
+ invisiblelayers = visibleOffLayersParams.split(',');
2464
+ if (visiblelayers.indexOf(currentLayerid) > -1 ||
2465
+ visiblelayers.indexOf(currentLayerid.toString()) > -1) {
2466
+ visible = true;
2547
2467
  }
2548
- else {
2549
- this.profils = [];
2468
+ if (invisiblelayers.indexOf(currentLayerid) > -1 ||
2469
+ invisiblelayers.indexOf(currentLayerid.toString()) > -1) {
2470
+ visible = false;
2550
2471
  }
2551
- });
2552
- }
2553
- displayFn(profil) {
2554
- return profil ? profil.title : undefined;
2555
- }
2556
- handleFormSubmit(value) {
2557
- this.addPermission.emit(value);
2558
- }
2559
- buildForm() {
2560
- this.form = this.formBuilder.group({
2561
- profil: [],
2562
- typePermission: ['read']
2563
- });
2564
- }
2565
- onProfilSelected(value) {
2566
- this.form.setValue({
2567
- profil: value.name,
2568
- typePermission: this.form.value.typePermission
2569
- });
2472
+ }
2473
+ return visible;
2570
2474
  }
2571
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextPermissionsComponent, deps: [{ token: i1$2.UntypedFormBuilder }, { token: i0.ChangeDetectorRef }, { token: i1.HttpClient }, { token: i2.AuthService }, { token: i3.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
2572
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ContextPermissionsComponent, selector: "igo-context-permissions", inputs: { context: "context", permissions: "permissions" }, outputs: { addPermission: "addPermission", removePermission: "removePermission", scopeChanged: "scopeChanged" }, ngImport: i0, template: "<div *ngIf=\"context\">\r\n <div *ngIf=\"!canWrite\" class=\"scopeForm\">\r\n <h4>{{ 'igo.context.permission.readOnlyTitle' | translate }}</h4>\r\n <p>{{ 'igo.context.permission.readOnlyMsg' | translate }}</p>\r\n </div>\r\n\r\n <div *ngIf=\"canWrite\" class=\"scopeForm\">\r\n <mat-radio-group\r\n [(ngModel)]=\"context.scope\"\r\n (change)=\"scopeChanged.emit(context)\"\r\n >\r\n <mat-radio-button value=\"private\">\r\n {{ 'igo.context.permission.scope.private' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button value=\"protected\">\r\n {{ 'igo.context.permission.scope.shared' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button *ngIf=\"authService.isAdmin\" value=\"public\">\r\n {{ 'igo.context.permission.scope.public' | translate }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <form\r\n *ngIf=\"context.scope !== 'private' && canWrite\"\r\n [formGroup]=\"form\"\r\n (ngSubmit)=\"handleFormSubmit(form.value)\"\r\n >\r\n <mat-form-field class=\"full-width\">\r\n <input\r\n matInput\r\n required\r\n [placeholder]=\"'igo.context.permission.user' | translate\"\r\n [formControl]=\"formControl\"\r\n [matAutocomplete]=\"auto\"\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n (optionSelected)=\"onProfilSelected($event.option.value)\"\r\n [displayWith]=\"displayFn\"\r\n >\r\n <mat-option *ngFor=\"let profil of this.profils\" [value]=\"profil\">\r\n {{ profil.title }}<br />\r\n <small class=\"mat-typography\">{{ profil.name }}</small>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error>\r\n {{ 'igo.context.permission.profilRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <mat-radio-group formControlName=\"typePermission\">\r\n <mat-radio-button value=\"read\">\r\n {{ 'igo.context.permission.read' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button value=\"write\">\r\n {{ 'igo.context.permission.write' | translate }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button mat-raised-button type=\"submit\" [disabled]=\"!form.valid\">\r\n {{ 'igo.context.permission.addBtn' | translate }}\r\n </button>\r\n </div>\r\n </form>\r\n\r\n <igo-list *ngIf=\"permissions && context.scope !== 'private'\">\r\n <ng-template ngFor let-groupPermissions [ngForOf]=\"permissions | keyvalue\">\r\n <igo-collapsible\r\n *ngIf=\"groupPermissions.value.length\"\r\n [title]=\"'igo.context.permission.' + groupPermissions.key | translate\"\r\n >\r\n <ng-template ngFor let-permission [ngForOf]=\"groupPermissions.value\">\r\n <mat-list-item>\r\n <mat-icon matListItemIcon svgIcon=\"account-outline\"></mat-icon>\r\n <h4 matListItemTitle>\r\n {{ permission.profilTitle }}\r\n <small class=\"mat-typography\">{{ permission.profil }}</small>\r\n </h4>\r\n\r\n <div\r\n matListItemMeta\r\n igoStopPropagation\r\n class=\"igo-actions-container\"\r\n >\r\n <button\r\n *ngIf=\"\r\n canWrite ||\r\n permission.profil === authService.decodeToken().user.sourceId\r\n \"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.permission.delete' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n color=\"warn\"\r\n (click)=\"removePermission.emit(permission)\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </div>\r\n </mat-list-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n </ng-template>\r\n </igo-list>\r\n</div>\r\n", styles: [":host{margin:10px}.full-width{width:100%}mat-radio-button{padding:14px 14px 14px 0}.scopeForm,form{padding:5px}\n"], dependencies: [{ kind: "directive", type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: i1$2.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i6$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i7$1.MatListItem, selector: "mat-list-item, a[mat-list-item], button[mat-list-item]", inputs: ["activated"], exportAs: ["matListItem"] }, { kind: "directive", type: i7$1.MatListItemIcon, selector: "[matListItemIcon]" }, { kind: "directive", type: i7$1.MatListItemTitle, selector: "[matListItemTitle]" }, { kind: "directive", type: i7$1.MatListItemMeta, selector: "[matListItemMeta]" }, { kind: "directive", type: i12$2.MatRadioGroup, selector: "mat-radio-group", exportAs: ["matRadioGroup"] }, { kind: "component", type: i12$2.MatRadioButton, selector: "mat-radio-button", inputs: ["disableRipple", "tabIndex"], exportAs: ["matRadioButton"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { kind: "component", type: i14.MatAutocomplete, selector: "mat-autocomplete", inputs: ["disableRipple", "hideSingleSelectionIndicator"], exportAs: ["matAutocomplete"] }, { kind: "directive", type: i14.MatAutocompleteTrigger, selector: "input[matAutocomplete], textarea[matAutocomplete]", exportAs: ["matAutocompleteTrigger"] }, { kind: "component", type: i13.ListComponent, selector: "igo-list", inputs: ["navigation", "selection"] }, { kind: "component", type: i13.CollapsibleComponent, selector: "igo-collapsible", inputs: ["title", "collapsed"], outputs: ["toggle"] }, { kind: "directive", type: i13.StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "pipe", type: i13.KeyValuePipe, name: "keyvalue" }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
2475
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: LayerContextDirective, deps: [{ token: i1$2.MapBrowserComponent }, { token: ContextService }, { token: i1$2.LayerService }, { token: i1$1.ConfigService }, { token: i1$2.StyleListService }, { token: i1$2.StyleService }, { token: i8.RouteService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
2476
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: LayerContextDirective, isStandalone: true, selector: "[igoLayerContext]", inputs: { removeLayersOnContextChange: "removeLayersOnContextChange" }, providers: [HttpClientModule], ngImport: i0 });
2573
2477
  }
2574
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextPermissionsComponent, decorators: [{
2575
- type: Component,
2576
- args: [{ selector: 'igo-context-permissions', template: "<div *ngIf=\"context\">\r\n <div *ngIf=\"!canWrite\" class=\"scopeForm\">\r\n <h4>{{ 'igo.context.permission.readOnlyTitle' | translate }}</h4>\r\n <p>{{ 'igo.context.permission.readOnlyMsg' | translate }}</p>\r\n </div>\r\n\r\n <div *ngIf=\"canWrite\" class=\"scopeForm\">\r\n <mat-radio-group\r\n [(ngModel)]=\"context.scope\"\r\n (change)=\"scopeChanged.emit(context)\"\r\n >\r\n <mat-radio-button value=\"private\">\r\n {{ 'igo.context.permission.scope.private' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button value=\"protected\">\r\n {{ 'igo.context.permission.scope.shared' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button *ngIf=\"authService.isAdmin\" value=\"public\">\r\n {{ 'igo.context.permission.scope.public' | translate }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n </div>\r\n\r\n <form\r\n *ngIf=\"context.scope !== 'private' && canWrite\"\r\n [formGroup]=\"form\"\r\n (ngSubmit)=\"handleFormSubmit(form.value)\"\r\n >\r\n <mat-form-field class=\"full-width\">\r\n <input\r\n matInput\r\n required\r\n [placeholder]=\"'igo.context.permission.user' | translate\"\r\n [formControl]=\"formControl\"\r\n [matAutocomplete]=\"auto\"\r\n />\r\n <mat-autocomplete\r\n #auto=\"matAutocomplete\"\r\n (optionSelected)=\"onProfilSelected($event.option.value)\"\r\n [displayWith]=\"displayFn\"\r\n >\r\n <mat-option *ngFor=\"let profil of this.profils\" [value]=\"profil\">\r\n {{ profil.title }}<br />\r\n <small class=\"mat-typography\">{{ profil.name }}</small>\r\n </mat-option>\r\n </mat-autocomplete>\r\n <mat-error>\r\n {{ 'igo.context.permission.profilRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n\r\n <mat-radio-group formControlName=\"typePermission\">\r\n <mat-radio-button value=\"read\">\r\n {{ 'igo.context.permission.read' | translate }}\r\n </mat-radio-button>\r\n <mat-radio-button value=\"write\">\r\n {{ 'igo.context.permission.write' | translate }}\r\n </mat-radio-button>\r\n </mat-radio-group>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button mat-raised-button type=\"submit\" [disabled]=\"!form.valid\">\r\n {{ 'igo.context.permission.addBtn' | translate }}\r\n </button>\r\n </div>\r\n </form>\r\n\r\n <igo-list *ngIf=\"permissions && context.scope !== 'private'\">\r\n <ng-template ngFor let-groupPermissions [ngForOf]=\"permissions | keyvalue\">\r\n <igo-collapsible\r\n *ngIf=\"groupPermissions.value.length\"\r\n [title]=\"'igo.context.permission.' + groupPermissions.key | translate\"\r\n >\r\n <ng-template ngFor let-permission [ngForOf]=\"groupPermissions.value\">\r\n <mat-list-item>\r\n <mat-icon matListItemIcon svgIcon=\"account-outline\"></mat-icon>\r\n <h4 matListItemTitle>\r\n {{ permission.profilTitle }}\r\n <small class=\"mat-typography\">{{ permission.profil }}</small>\r\n </h4>\r\n\r\n <div\r\n matListItemMeta\r\n igoStopPropagation\r\n class=\"igo-actions-container\"\r\n >\r\n <button\r\n *ngIf=\"\r\n canWrite ||\r\n permission.profil === authService.decodeToken().user.sourceId\r\n \"\r\n mat-icon-button\r\n [matTooltip]=\"'igo.context.permission.delete' | translate\"\r\n matTooltipShowDelay=\"500\"\r\n color=\"warn\"\r\n (click)=\"removePermission.emit(permission)\"\r\n >\r\n <mat-icon svgIcon=\"delete\"></mat-icon>\r\n </button>\r\n </div>\r\n </mat-list-item>\r\n </ng-template>\r\n </igo-collapsible>\r\n </ng-template>\r\n </igo-list>\r\n</div>\r\n", styles: [":host{margin:10px}.full-width{width:100%}mat-radio-button{padding:14px 14px 14px 0}.scopeForm,form{padding:5px}\n"] }]
2577
- }], ctorParameters: function () { return [{ type: i1$2.UntypedFormBuilder }, { type: i0.ChangeDetectorRef }, { type: i1.HttpClient }, { type: i2.AuthService }, { type: i3.ConfigService }]; }, propDecorators: { context: [{
2578
- type: Input
2579
- }], permissions: [{
2478
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: LayerContextDirective, decorators: [{
2479
+ type: Directive,
2480
+ args: [{
2481
+ selector: '[igoLayerContext]',
2482
+ standalone: true,
2483
+ providers: [HttpClientModule]
2484
+ }]
2485
+ }], ctorParameters: () => [{ type: i1$2.MapBrowserComponent }, { type: ContextService }, { type: i1$2.LayerService }, { type: i1$1.ConfigService }, { type: i1$2.StyleListService }, { type: i1$2.StyleService }, { type: i8.RouteService, decorators: [{
2486
+ type: Optional
2487
+ }] }], propDecorators: { removeLayersOnContextChange: [{
2580
2488
  type: Input
2581
- }], addPermission: [{
2582
- type: Output
2583
- }], removePermission: [{
2584
- type: Output
2585
- }], scopeChanged: [{
2586
- type: Output
2587
2489
  }] } });
2588
2490
 
2589
- class ContextPermissionsBindingDirective {
2491
+ class MapContextDirective {
2590
2492
  contextService;
2591
- languageService;
2592
- messageService;
2593
- cd;
2493
+ mediaService;
2594
2494
  component;
2595
- editedContext$$;
2596
- onAddPermission(permission) {
2597
- if (!permission.profil) {
2598
- this.messageService.error('igo.context.contextManager.errors.addPermissionEmpty', 'igo.context.contextManager.errors.addPermissionTitle');
2495
+ context$$;
2496
+ get map() {
2497
+ return this.component.map;
2498
+ }
2499
+ constructor(component, contextService, mediaService) {
2500
+ this.contextService = contextService;
2501
+ this.mediaService = mediaService;
2502
+ this.component = component;
2503
+ }
2504
+ ngOnInit() {
2505
+ this.context$$ = this.contextService.context$
2506
+ .pipe(filter((context) => context !== undefined))
2507
+ .subscribe((context) => this.handleContextChange(context));
2508
+ }
2509
+ ngOnDestroy() {
2510
+ this.context$$.unsubscribe();
2511
+ }
2512
+ handleContextChange(context) {
2513
+ if (context.map === undefined) {
2599
2514
  return;
2600
2515
  }
2601
- const contextId = this.component.context.id;
2602
- this.contextService
2603
- .addPermissionAssociation(contextId, permission.profil, permission.typePermission)
2604
- .subscribe((profils) => {
2605
- for (const p of profils) {
2606
- this.component.permissions[permission.typePermission].push(p);
2516
+ // This creates a new ol.Map when the context changes. Doing that
2517
+ // allows the print tool to work properly even when the map's canvas
2518
+ // has been tainted (CORS) with the layers of another context. This could
2519
+ // have some side effects such as unbinding all listeners on the first map.
2520
+ // A better solution would be to create a new map (preview) before
2521
+ // printing and avoid the tainted canvas issue. This will come later so
2522
+ // this snippet of code is kept here in case it takes too long becomes
2523
+ // an issue
2524
+ // const target = this.component.map.ol.getTarget();
2525
+ // this.component.map.ol.setTarget(undefined);
2526
+ // this.component.map.init();
2527
+ // this.component.map.ol.setTarget(target);
2528
+ const viewContext = context.map.view;
2529
+ if (!this.component.view ||
2530
+ viewContext.keepCurrentView !== true ||
2531
+ context.map.view.projection !== this.map.projection) {
2532
+ this.component.view = viewContext;
2533
+ }
2534
+ if (this.component.map.geolocationController) {
2535
+ this.component.map.geolocationController.updateGeolocationOptions(viewContext);
2536
+ }
2537
+ const controlsContext = context.map.controls;
2538
+ if (!this.component.controls && controlsContext) {
2539
+ if (this.mediaService.isMobile()) {
2540
+ if (typeof controlsContext.scaleLine !== 'boolean') {
2541
+ const scaleLineOption = controlsContext.scaleLine;
2542
+ if (!scaleLineOption.minWidth) {
2543
+ scaleLineOption.minWidth = Math.min(64, scaleLineOption.minWidth);
2544
+ controlsContext.scaleLine = scaleLineOption;
2545
+ }
2546
+ }
2607
2547
  }
2608
- const profil = permission.profil;
2609
- this.messageService.success('igo.context.permission.dialog.addMsg', 'igo.context.permission.dialog.addTitle', undefined, { value: profil });
2610
- this.cd.detectChanges();
2611
- });
2548
+ this.component.controls = controlsContext;
2549
+ }
2612
2550
  }
2613
- onRemovePermission(permission) {
2614
- const contextId = this.component.context.id;
2615
- this.contextService
2616
- .deletePermissionAssociation(contextId, permission.id)
2617
- .subscribe(() => {
2618
- const index = this.component.permissions[permission.typePermission].findIndex((p) => {
2619
- return p.id === permission.id;
2620
- });
2621
- this.component.permissions[permission.typePermission].splice(index, 1);
2622
- const profil = permission.profil;
2623
- this.messageService.success('igo.context.permission.dialog.deleteMsg', 'igo.context.permission.dialog.deleteTitle', undefined, { value: profil });
2624
- this.cd.detectChanges();
2625
- });
2551
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MapContextDirective, deps: [{ token: i1$2.MapBrowserComponent }, { token: ContextService }, { token: i3$2.MediaService }], target: i0.ɵɵFactoryTarget.Directive });
2552
+ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.2.4", type: MapContextDirective, isStandalone: true, selector: "[igoMapContext]", ngImport: i0 });
2553
+ }
2554
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: MapContextDirective, decorators: [{
2555
+ type: Directive,
2556
+ args: [{
2557
+ selector: '[igoMapContext]',
2558
+ standalone: true
2559
+ }]
2560
+ }], ctorParameters: () => [{ type: i1$2.MapBrowserComponent }, { type: ContextService }, { type: i3$2.MediaService }] });
2561
+
2562
+ /**
2563
+ * @deprecated import the components/directives directly or CONTEXT_MANAGER_DIRECTIVES for the set
2564
+ */
2565
+ class IgoContextManagerModule {
2566
+ static forRoot() {
2567
+ return {
2568
+ ngModule: IgoContextManagerModule
2569
+ };
2626
2570
  }
2627
- onScopeChanged(context) {
2628
- const scope = context.scope;
2629
- this.contextService.update(context.id, { scope }).subscribe(() => {
2630
- this.messageService.success('igo.context.permission.dialog.scopeChangedMsg', 'igo.context.permission.dialog.scopeChangedTitle', undefined, { value: 'igo.context.permission.scope.' + scope });
2631
- });
2571
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextManagerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2572
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IgoContextManagerModule, imports: [ContextListComponent,
2573
+ ContextListBindingDirective,
2574
+ ContextItemComponent,
2575
+ ContextFormComponent,
2576
+ ContextEditComponent,
2577
+ ContextEditBindingDirective,
2578
+ ContextPermissionsComponent,
2579
+ ContextPermissionsBindingDirective,
2580
+ LayerContextDirective,
2581
+ MapContextDirective], exports: [ContextListComponent,
2582
+ ContextListBindingDirective,
2583
+ ContextItemComponent,
2584
+ ContextFormComponent,
2585
+ ContextEditComponent,
2586
+ ContextEditBindingDirective,
2587
+ ContextPermissionsComponent,
2588
+ ContextPermissionsBindingDirective,
2589
+ LayerContextDirective,
2590
+ MapContextDirective] });
2591
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextManagerModule, imports: [ContextListComponent,
2592
+ ContextItemComponent,
2593
+ ContextFormComponent,
2594
+ ContextEditComponent,
2595
+ ContextPermissionsComponent] });
2596
+ }
2597
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextManagerModule, decorators: [{
2598
+ type: NgModule,
2599
+ args: [{
2600
+ imports: [
2601
+ ContextListComponent,
2602
+ ContextListBindingDirective,
2603
+ ContextItemComponent,
2604
+ ContextFormComponent,
2605
+ ContextEditComponent,
2606
+ ContextEditBindingDirective,
2607
+ ContextPermissionsComponent,
2608
+ ContextPermissionsBindingDirective,
2609
+ LayerContextDirective,
2610
+ MapContextDirective
2611
+ ],
2612
+ exports: [
2613
+ ContextListComponent,
2614
+ ContextListBindingDirective,
2615
+ ContextItemComponent,
2616
+ ContextFormComponent,
2617
+ ContextEditComponent,
2618
+ ContextEditBindingDirective,
2619
+ ContextPermissionsComponent,
2620
+ ContextPermissionsBindingDirective,
2621
+ LayerContextDirective,
2622
+ MapContextDirective
2623
+ ]
2624
+ }]
2625
+ }] });
2626
+
2627
+ class BookmarkButtonComponent {
2628
+ dialog;
2629
+ contextService;
2630
+ messageService;
2631
+ get map() {
2632
+ return this._map;
2632
2633
  }
2633
- constructor(component, contextService, languageService, messageService, cd) {
2634
+ set map(value) {
2635
+ this._map = value;
2636
+ }
2637
+ _map;
2638
+ get color() {
2639
+ return this._color;
2640
+ }
2641
+ set color(value) {
2642
+ this._color = value;
2643
+ }
2644
+ _color;
2645
+ constructor(dialog, contextService, messageService) {
2646
+ this.dialog = dialog;
2634
2647
  this.contextService = contextService;
2635
- this.languageService = languageService;
2636
2648
  this.messageService = messageService;
2637
- this.cd = cd;
2638
- this.component = component;
2639
2649
  }
2640
- ngOnInit() {
2641
- this.editedContext$$ = this.contextService.editedContext$.subscribe((context) => this.handleEditedContextChange(context));
2650
+ createContext() {
2651
+ this.dialog
2652
+ .open(BookmarkDialogComponent, { disableClose: false })
2653
+ .afterClosed()
2654
+ .pipe(take(1))
2655
+ .subscribe((title) => {
2656
+ if (title) {
2657
+ const context = this.contextService.getContextFromMap(this.map);
2658
+ context.title = title;
2659
+ this.contextService.create(context).subscribe(() => {
2660
+ this.messageService.success('igo.context.bookmarkButton.dialog.createMsg', 'igo.context.bookmarkButton.dialog.createTitle', undefined, { value: context.title });
2661
+ this.contextService.loadContext(context.uri);
2662
+ });
2663
+ }
2664
+ });
2642
2665
  }
2643
- ngOnDestroy() {
2644
- this.editedContext$$.unsubscribe();
2645
- this.contextService.editedContext$.next(undefined);
2666
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: BookmarkButtonComponent, deps: [{ token: i1$4.MatDialog }, { token: ContextService }, { token: i3.MessageService }], target: i0.ɵɵFactoryTarget.Component });
2667
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: BookmarkButtonComponent, isStandalone: true, selector: "igo-bookmark-button", inputs: { map: "map", color: "color" }, ngImport: i0, template: "<div class=\"igo-bookmark-button-container\">\n <button\n mat-icon-button\n [matTooltip]=\"'igo.context.bookmarkButton.create' | translate\"\n matTooltipPosition=\"above\"\n [color]=\"color\"\n (click)=\"createContext()\"\n >\n <mat-icon svgIcon=\"star\"></mat-icon>\n </button>\n</div>\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-bookmark-button-container{width:40px}:host .igo-bookmark-button-container button{background-color:#fff}:host .igo-bookmark-button-container button:hover{background-color:#efefef}\n"], dependencies: [{ kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
2668
+ }
2669
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: BookmarkButtonComponent, decorators: [{
2670
+ type: Component,
2671
+ args: [{ selector: 'igo-bookmark-button', standalone: true, imports: [MatButtonModule, MatTooltipModule, MatIconModule, TranslateModule], template: "<div class=\"igo-bookmark-button-container\">\n <button\n mat-icon-button\n [matTooltip]=\"'igo.context.bookmarkButton.create' | translate\"\n matTooltipPosition=\"above\"\n [color]=\"color\"\n (click)=\"createContext()\"\n >\n <mat-icon svgIcon=\"star\"></mat-icon>\n </button>\n</div>\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-bookmark-button-container{width:40px}:host .igo-bookmark-button-container button{background-color:#fff}:host .igo-bookmark-button-container button:hover{background-color:#efefef}\n"] }]
2672
+ }], ctorParameters: () => [{ type: i1$4.MatDialog }, { type: ContextService }, { type: i3.MessageService }], propDecorators: { map: [{
2673
+ type: Input
2674
+ }], color: [{
2675
+ type: Input
2676
+ }] } });
2677
+
2678
+ class PoiDialogComponent {
2679
+ dialogRef;
2680
+ title;
2681
+ constructor(dialogRef) {
2682
+ this.dialogRef = dialogRef;
2683
+ }
2684
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PoiDialogComponent, deps: [{ token: i1$4.MatDialogRef }], target: i0.ɵɵFactoryTarget.Component });
2685
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: PoiDialogComponent, isStandalone: true, selector: "igo-poi-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.poiButton.dialog.title' | translate }}\n</h1>\n<div mat-dialog-content>\n <mat-form-field>\n <input\n matInput\n required\n autocomplete=\"off\"\n [placeholder]=\"'igo.context.poiButton.dialog.placeholder' | translate\"\n [(ngModel)]=\"title\"\n />\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n [disabled]=\"!title\"\n (click)=\"dialogRef.close(title)\"\n >\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\n </button>\n <button mat-button (click)=\"dialogRef.close(false)\">\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$3.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
2686
+ }
2687
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PoiDialogComponent, decorators: [{
2688
+ type: Component,
2689
+ args: [{ selector: 'igo-poi-dialog', standalone: true, imports: [
2690
+ MatDialogTitle,
2691
+ MatDialogContent,
2692
+ MatFormFieldModule,
2693
+ MatInputModule,
2694
+ FormsModule,
2695
+ MatDialogActions,
2696
+ MatButtonModule,
2697
+ TranslateModule
2698
+ ], template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.poiButton.dialog.title' | translate }}\n</h1>\n<div mat-dialog-content>\n <mat-form-field>\n <input\n matInput\n required\n autocomplete=\"off\"\n [placeholder]=\"'igo.context.poiButton.dialog.placeholder' | translate\"\n [(ngModel)]=\"title\"\n />\n </mat-form-field>\n</div>\n<div mat-dialog-actions>\n <button\n mat-button\n color=\"primary\"\n [disabled]=\"!title\"\n (click)=\"dialogRef.close(title)\"\n >\n {{ 'igo.common.confirmDialog.confirmBtn' | translate }}\n </button>\n <button mat-button (click)=\"dialogRef.close(false)\">\n {{ 'igo.common.confirmDialog.cancelBtn' | translate }}\n </button>\n</div>\n" }]
2699
+ }], ctorParameters: () => [{ type: i1$4.MatDialogRef }] });
2700
+
2701
+ class PoiService {
2702
+ http;
2703
+ config;
2704
+ baseUrl;
2705
+ constructor(http, config) {
2706
+ this.http = http;
2707
+ this.config = config;
2708
+ this.baseUrl = this.config.getConfig('context.url');
2646
2709
  }
2647
- handleEditedContextChange(context) {
2648
- this.component.context = context;
2649
- if (context) {
2650
- this.contextService
2651
- .getPermissions(context.id)
2652
- .subscribe((permissionsArray) => {
2653
- permissionsArray = permissionsArray || [];
2654
- const permissions = {
2655
- read: permissionsArray.filter((p) => {
2656
- return p.typePermission.toString() === 'read';
2657
- }),
2658
- write: permissionsArray.filter((p) => {
2659
- return p.typePermission.toString() === 'write';
2660
- })
2661
- };
2662
- return (this.component.permissions = permissions);
2663
- });
2710
+ get() {
2711
+ if (!this.baseUrl) {
2712
+ return EMPTY;
2664
2713
  }
2714
+ const url = this.baseUrl + '/pois';
2715
+ return this.http.get(url);
2716
+ }
2717
+ delete(id) {
2718
+ const url = this.baseUrl + '/pois/' + id;
2719
+ return this.http.delete(url);
2720
+ }
2721
+ create(context) {
2722
+ const url = this.baseUrl + '/pois';
2723
+ return this.http.post(url, context);
2665
2724
  }
2666
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextPermissionsBindingDirective, deps: [{ token: ContextPermissionsComponent, self: true }, { token: ContextService }, { token: i3.LanguageService }, { token: i3.MessageService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
2667
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: ContextPermissionsBindingDirective, selector: "[igoContextPermissionsBinding]", host: { listeners: { "addPermission": "onAddPermission($event)", "removePermission": "onRemovePermission($event)", "scopeChanged": "onScopeChanged($event)" } }, ngImport: i0 });
2725
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PoiService, deps: [{ token: i1.HttpClient }, { token: i1$1.ConfigService }], target: i0.ɵɵFactoryTarget.Injectable });
2726
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PoiService });
2668
2727
  }
2669
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ContextPermissionsBindingDirective, decorators: [{
2670
- type: Directive,
2671
- args: [{
2672
- selector: '[igoContextPermissionsBinding]'
2673
- }]
2674
- }], ctorParameters: function () { return [{ type: ContextPermissionsComponent, decorators: [{
2675
- type: Self
2676
- }] }, { type: ContextService }, { type: i3.LanguageService }, { type: i3.MessageService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { onAddPermission: [{
2677
- type: HostListener,
2678
- args: ['addPermission', ['$event']]
2679
- }], onRemovePermission: [{
2680
- type: HostListener,
2681
- args: ['removePermission', ['$event']]
2682
- }], onScopeChanged: [{
2683
- type: HostListener,
2684
- args: ['scopeChanged', ['$event']]
2685
- }] } });
2728
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PoiService, decorators: [{
2729
+ type: Injectable
2730
+ }], ctorParameters: () => [{ type: i1.HttpClient }, { type: i1$1.ConfigService }] });
2686
2731
 
2687
- class LayerContextDirective {
2688
- component;
2689
- contextService;
2690
- layerService;
2691
- configService;
2692
- styleListService;
2693
- styleService;
2694
- route;
2695
- context$$;
2696
- queryParams;
2697
- contextLayers = [];
2698
- removeLayersOnContextChange = true;
2732
+ class PoiButtonComponent {
2733
+ dialog;
2734
+ authService;
2735
+ poiService;
2736
+ messageService;
2737
+ languageService;
2738
+ confirmDialogService;
2699
2739
  get map() {
2700
- return this.component.map;
2740
+ return this._map;
2701
2741
  }
2702
- constructor(component, contextService, layerService, configService, styleListService, styleService, route) {
2703
- this.component = component;
2704
- this.contextService = contextService;
2705
- this.layerService = layerService;
2706
- this.configService = configService;
2707
- this.styleListService = styleListService;
2708
- this.styleService = styleService;
2709
- this.route = route;
2742
+ set map(value) {
2743
+ this._map = value;
2744
+ }
2745
+ _map;
2746
+ get color() {
2747
+ return this._color;
2748
+ }
2749
+ set color(value) {
2750
+ this._color = value;
2751
+ }
2752
+ _color;
2753
+ pois;
2754
+ authenticate$$;
2755
+ constructor(dialog, authService, poiService, messageService, languageService, confirmDialogService) {
2756
+ this.dialog = dialog;
2757
+ this.authService = authService;
2758
+ this.poiService = poiService;
2759
+ this.messageService = messageService;
2760
+ this.languageService = languageService;
2761
+ this.confirmDialogService = confirmDialogService;
2710
2762
  }
2711
2763
  ngOnInit() {
2712
- this.context$$ = this.contextService.context$
2713
- .pipe(filter((context) => context !== undefined))
2714
- .subscribe((context) => this.handleContextChange(context));
2715
- if (this.route &&
2716
- this.route.options.visibleOnLayersKey &&
2717
- this.route.options.visibleOffLayersKey &&
2718
- this.route.options.contextKey) {
2719
- this.route.queryParams
2720
- .pipe(first((params) => !ObjectUtils.isEmpty(params)))
2721
- .subscribe((params) => {
2722
- this.queryParams = params;
2723
- });
2724
- }
2764
+ this.authenticate$$ = this.authService.authenticate$.subscribe((auth) => {
2765
+ if (auth) {
2766
+ this.getPois();
2767
+ }
2768
+ });
2725
2769
  }
2726
2770
  ngOnDestroy() {
2727
- this.context$$.unsubscribe();
2771
+ this.authenticate$$.unsubscribe();
2728
2772
  }
2729
- handleContextChange(context) {
2730
- if (context.layers === undefined) {
2731
- return;
2732
- }
2733
- if (this.removeLayersOnContextChange === true) {
2734
- this.map.removeAllLayers();
2735
- }
2736
- else {
2737
- this.map.removeLayers(this.contextLayers);
2773
+ deletePoi(poi) {
2774
+ if (poi && poi.id) {
2775
+ this.confirmDialogService
2776
+ .open(this.languageService.translate.instant('igo.context.poiButton.dialog.confirmDelete'))
2777
+ .subscribe((confirm) => {
2778
+ if (confirm) {
2779
+ this.poiService.delete(poi.id).subscribe(() => {
2780
+ this.messageService.info('igo.context.poiButton.dialog.deleteMsg', 'igo.context.poiButton.dialog.deleteTitle', undefined, { value: poi.title });
2781
+ this.pois = this.pois.filter((p) => p.id !== poi.id);
2782
+ }, (err) => {
2783
+ err.error.title = 'DELETE Pois';
2784
+ this.messageService.showError(err);
2785
+ });
2786
+ }
2787
+ });
2738
2788
  }
2739
- this.contextLayers = [];
2740
- const layersAndIndex$ = merge(...context.layers.map((layerOptions, index) => {
2741
- return this.layerService.createAsyncLayer(layerOptions, context.uri);
2742
- }));
2743
- layersAndIndex$
2744
- .pipe(buffer(layersAndIndex$.pipe(debounceTime(500))))
2745
- .subscribe((layers) => {
2746
- this.handleAddLayers(layers);
2747
- if (context.extraFeatures) {
2748
- context.extraFeatures.forEach((featureCollection) => {
2749
- const importExportOptions = this.configService.getConfig('importExport');
2750
- if (!importExportOptions?.importWithStyle) {
2751
- addImportedFeaturesToMap(featureCollection, this.map);
2752
- }
2753
- else {
2754
- addImportedFeaturesStyledToMap(featureCollection, this.map, this.styleListService, this.styleService);
2755
- }
2789
+ }
2790
+ getPois() {
2791
+ this.poiService
2792
+ .get()
2793
+ .pipe(take(1))
2794
+ .subscribe((rep) => {
2795
+ this.pois = rep;
2796
+ }, (err) => {
2797
+ err.error.title = 'GET Pois';
2798
+ this.messageService.showError(err);
2799
+ });
2800
+ }
2801
+ createPoi() {
2802
+ const view = this.map.ol.getView();
2803
+ const proj = view.getProjection().getCode();
2804
+ const center = new olPoint(view.getCenter()).transform(proj, 'EPSG:4326');
2805
+ const poi = {
2806
+ title: '',
2807
+ x: center.getCoordinates()[0],
2808
+ y: center.getCoordinates()[1],
2809
+ zoom: view.getZoom()
2810
+ };
2811
+ this.dialog
2812
+ .open(PoiDialogComponent, { disableClose: false })
2813
+ .afterClosed()
2814
+ .subscribe((title) => {
2815
+ if (title) {
2816
+ poi.title = title;
2817
+ this.poiService.create(poi).subscribe((newPoi) => {
2818
+ this.messageService.success('igo.context.poiButton.dialog.createMsg', 'igo.context.poiButton.dialog.createTitle', undefined, { value: poi.title });
2819
+ poi.id = newPoi.id;
2820
+ this.pois.push(poi);
2821
+ }, (err) => {
2822
+ err.error.title = 'POST Pois';
2823
+ this.messageService.showError(err);
2756
2824
  });
2757
2825
  }
2758
2826
  });
2759
- this.layerService
2760
- .createAsyncIdbLayers(context.uri)
2761
- .pipe(debounceTime(500))
2762
- .subscribe((layers) => this.handleAddLayers(layers));
2763
2827
  }
2764
- handleAddLayers(layers) {
2765
- layers = layers
2766
- .filter((layer) => layer !== undefined)
2767
- .map((layer) => {
2768
- layer.visible = this.computeLayerVisibilityFromUrl(layer);
2769
- layer.zIndex = layer.zIndex;
2770
- return layer;
2828
+ zoomOnPoi(id) {
2829
+ const poi = this.pois.find((p) => p.id === id);
2830
+ const center = olproj.fromLonLat([Number(poi.x), Number(poi.y)], this.map.projection);
2831
+ this.map.ol.getView().animate({
2832
+ center,
2833
+ zoom: poi.zoom,
2834
+ duration: 500,
2835
+ easing: oleasing.easeOut
2771
2836
  });
2772
- this.contextLayers.concat(layers);
2773
- this.map.addLayers(layers);
2774
- }
2775
- computeLayerVisibilityFromUrl(layer) {
2776
- const params = this.queryParams;
2777
- const currentContext = this.contextService.context$.value.uri;
2778
- const currentLayerid = layer.id;
2779
- let visible = layer.visible;
2780
- if (!params || !currentLayerid) {
2781
- return visible;
2782
- }
2783
- const contextParams = params[this.route.options.contextKey];
2784
- if (contextParams === currentContext || !contextParams) {
2785
- let visibleOnLayersParams = '';
2786
- let visibleOffLayersParams = '';
2787
- let visiblelayers = [];
2788
- let invisiblelayers = [];
2789
- if (this.route.options.visibleOnLayersKey &&
2790
- params[this.route.options.visibleOnLayersKey]) {
2791
- visibleOnLayersParams =
2792
- params[this.route.options.visibleOnLayersKey];
2793
- }
2794
- if (this.route.options.visibleOffLayersKey &&
2795
- params[this.route.options.visibleOffLayersKey]) {
2796
- visibleOffLayersParams =
2797
- params[this.route.options.visibleOffLayersKey];
2798
- }
2799
- /* This order is important because to control whichever
2800
- the order of * param. First whe open and close everything.*/
2801
- if (visibleOnLayersParams === '*') {
2802
- visible = true;
2803
- }
2804
- if (visibleOffLayersParams === '*') {
2805
- visible = false;
2806
- }
2807
- // After, managing named layer by id (context.json OR id from datasource)
2808
- visiblelayers = visibleOnLayersParams.split(',');
2809
- invisiblelayers = visibleOffLayersParams.split(',');
2810
- if (visiblelayers.indexOf(currentLayerid) > -1 ||
2811
- visiblelayers.indexOf(currentLayerid.toString()) > -1) {
2812
- visible = true;
2813
- }
2814
- if (invisiblelayers.indexOf(currentLayerid) > -1 ||
2815
- invisiblelayers.indexOf(currentLayerid.toString()) > -1) {
2816
- visible = false;
2817
- }
2818
- }
2819
- return visible;
2820
2837
  }
2821
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayerContextDirective, deps: [{ token: i1$1.MapBrowserComponent }, { token: ContextService }, { token: i1$1.LayerService }, { token: i3.ConfigService }, { token: i1$1.StyleListService }, { token: i1$1.StyleService }, { token: i3.RouteService, optional: true }], target: i0.ɵɵFactoryTarget.Directive });
2822
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: LayerContextDirective, selector: "[igoLayerContext]", inputs: { removeLayersOnContextChange: "removeLayersOnContextChange" }, ngImport: i0 });
2838
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PoiButtonComponent, deps: [{ token: i1$4.MatDialog }, { token: i2.AuthService }, { token: PoiService }, { token: i3.MessageService }, { token: i4.LanguageService }, { token: i5$2.ConfirmDialogService }], target: i0.ɵɵFactoryTarget.Component });
2839
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: PoiButtonComponent, isStandalone: true, selector: "igo-poi-button", inputs: { map: "map", color: "color" }, ngImport: i0, template: "<mat-select\n [placeholder]=\"'igo.context.poiButton.placeholder' | translate\"\n floatPlaceholder=\"never\"\n>\n <mat-option (click)=\"createPoi()\" class=\"poi-option\">\n <div class=\"titlePoi\">\n {{ 'igo.context.poiButton.create' | translate }}\n </div>\n <button\n igoStopPropagation\n mat-icon-button\n color=\"primary\"\n (click)=\"createPoi()\"\n >\n <mat-icon svgIcon=\"plus-circle\"></mat-icon>\n </button>\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option\n *ngFor=\"let poi of pois\"\n class=\"poi-option\"\n [value]=\"poi.id\"\n (click)=\"zoomOnPoi(poi.id)\"\n >\n <div class=\"titlePoi\">{{ poi.title }}</div>\n <button\n mat-icon-button\n igoStopPropagation\n color=\"warn\"\n (click)=\"deletePoi(poi)\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </mat-option>\n</mat-select>\n", styles: [":host{background-color:#fff;padding:0 8px;height:100%}mat-select{width:150px;height:100%}mat-select ::ng-deep .mat-mdc-select-trigger{height:100%}::ng-deep .poi-option .mdc-list-item__primary-text{display:flex;justify-content:space-between;align-items:center;flex:1;overflow:visible}::ng-deep .poi-option button{margin-right:-16px}\n"], dependencies: [{ kind: "ngmodule", type: MatSelectModule }, { kind: "component", type: i11.MatSelect, selector: "mat-select", inputs: ["aria-describedby", "panelClass", "disabled", "disableRipple", "tabIndex", "hideSingleSelectionIndicator", "placeholder", "required", "multiple", "disableOptionCentering", "compareWith", "value", "aria-label", "aria-labelledby", "errorStateMatcher", "typeaheadDebounceInterval", "sortComparator", "id", "panelWidth"], outputs: ["openedChange", "opened", "closed", "selectionChange", "valueChange"], exportAs: ["matSelect"] }, { kind: "component", type: i12.MatOption, selector: "mat-option", inputs: ["value", "id", "disabled"], outputs: ["onSelectionChange"], exportAs: ["matOption"] }, { kind: "ngmodule", type: MatOptionModule }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "directive", type: StopPropagationDirective, selector: "[igoStopPropagation]" }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: MatDividerModule }, { kind: "component", type: i13.MatDivider, selector: "mat-divider", inputs: ["vertical", "inset"] }, { kind: "directive", type: NgFor, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
2823
2840
  }
2824
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: LayerContextDirective, decorators: [{
2825
- type: Directive,
2826
- args: [{
2827
- selector: '[igoLayerContext]'
2828
- }]
2829
- }], ctorParameters: function () { return [{ type: i1$1.MapBrowserComponent }, { type: ContextService }, { type: i1$1.LayerService }, { type: i3.ConfigService }, { type: i1$1.StyleListService }, { type: i1$1.StyleService }, { type: i3.RouteService, decorators: [{
2830
- type: Optional
2831
- }] }]; }, propDecorators: { removeLayersOnContextChange: [{
2841
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: PoiButtonComponent, decorators: [{
2842
+ type: Component,
2843
+ args: [{ selector: 'igo-poi-button', standalone: true, imports: [
2844
+ MatSelectModule,
2845
+ MatOptionModule,
2846
+ MatButtonModule,
2847
+ StopPropagationDirective,
2848
+ MatIconModule,
2849
+ MatDividerModule,
2850
+ NgFor,
2851
+ TranslateModule
2852
+ ], template: "<mat-select\n [placeholder]=\"'igo.context.poiButton.placeholder' | translate\"\n floatPlaceholder=\"never\"\n>\n <mat-option (click)=\"createPoi()\" class=\"poi-option\">\n <div class=\"titlePoi\">\n {{ 'igo.context.poiButton.create' | translate }}\n </div>\n <button\n igoStopPropagation\n mat-icon-button\n color=\"primary\"\n (click)=\"createPoi()\"\n >\n <mat-icon svgIcon=\"plus-circle\"></mat-icon>\n </button>\n </mat-option>\n <mat-divider></mat-divider>\n <mat-option\n *ngFor=\"let poi of pois\"\n class=\"poi-option\"\n [value]=\"poi.id\"\n (click)=\"zoomOnPoi(poi.id)\"\n >\n <div class=\"titlePoi\">{{ poi.title }}</div>\n <button\n mat-icon-button\n igoStopPropagation\n color=\"warn\"\n (click)=\"deletePoi(poi)\"\n >\n <mat-icon svgIcon=\"delete\"></mat-icon>\n </button>\n </mat-option>\n</mat-select>\n", styles: [":host{background-color:#fff;padding:0 8px;height:100%}mat-select{width:150px;height:100%}mat-select ::ng-deep .mat-mdc-select-trigger{height:100%}::ng-deep .poi-option .mdc-list-item__primary-text{display:flex;justify-content:space-between;align-items:center;flex:1;overflow:visible}::ng-deep .poi-option button{margin-right:-16px}\n"] }]
2853
+ }], ctorParameters: () => [{ type: i1$4.MatDialog }, { type: i2.AuthService }, { type: PoiService }, { type: i3.MessageService }, { type: i4.LanguageService }, { type: i5$2.ConfirmDialogService }], propDecorators: { map: [{
2854
+ type: Input
2855
+ }], color: [{
2832
2856
  type: Input
2833
2857
  }] } });
2834
2858
 
2835
- class MapContextDirective {
2836
- contextService;
2837
- mediaService;
2838
- component;
2839
- context$$;
2859
+ function userButtonSlideInOut() {
2860
+ return trigger('userButtonState', [
2861
+ state('collapse', style({
2862
+ width: '0',
2863
+ overflow: 'hidden',
2864
+ display: 'none'
2865
+ })),
2866
+ state('expand', style({
2867
+ overflow: 'hidden',
2868
+ display: 'display'
2869
+ })),
2870
+ transition('collapse => expand', animate('200ms')),
2871
+ transition('expand => collapse', animate('200ms'))
2872
+ ]);
2873
+ }
2874
+
2875
+ class UserDialogComponent {
2876
+ dialogRef;
2877
+ auth;
2878
+ storageService;
2879
+ user;
2880
+ exp;
2881
+ constructor(dialogRef, auth, storageService) {
2882
+ this.dialogRef = dialogRef;
2883
+ this.auth = auth;
2884
+ this.storageService = storageService;
2885
+ const decodeToken = this.auth.decodeToken();
2886
+ this.user = decodeToken?.user;
2887
+ this.exp = new Date(decodeToken.exp * 1000).toLocaleString();
2888
+ }
2889
+ clearPreferences() {
2890
+ this.storageService.clear();
2891
+ }
2892
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: UserDialogComponent, deps: [{ token: i1$4.MatDialogRef }, { token: i2.AuthService }, { token: i6.StorageService }], target: i0.ɵɵFactoryTarget.Component });
2893
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: UserDialogComponent, isStandalone: true, selector: "igo-user-dialog", ngImport: i0, template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.userButton.infoTitle' | translate }}\n</h1>\n<div mat-dialog-content class=\"mat-typography\">\n <p>\n {{ 'igo.context.userButton.dialog.user' | translate }}: {{ user.sourceId }}\n </p>\n <p>\n {{ 'igo.context.userButton.dialog.email' | translate }}: {{ user.email }}\n </p>\n <p>{{ 'igo.context.userButton.dialog.expiration' | translate }}: {{ exp }}</p>\n <button mat-stroked-button color=\"primary\" (click)=\"clearPreferences()\">\n {{ 'igo.context.userButton.dialog.clearPreferences' | translate }}\n </button>\n <br />\n</div>\n<div mat-dialog-actions style=\"justify-content: center\">\n <button mat-raised-button color=\"primary\" (click)=\"dialogRef.close(false)\">\n OK\n </button>\n</div>\n", dependencies: [{ kind: "directive", type: MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
2894
+ }
2895
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: UserDialogComponent, decorators: [{
2896
+ type: Component,
2897
+ args: [{ selector: 'igo-user-dialog', standalone: true, imports: [
2898
+ MatDialogTitle,
2899
+ MatDialogContent,
2900
+ MatButtonModule,
2901
+ MatDialogActions,
2902
+ TranslateModule
2903
+ ], template: "<h1 mat-dialog-title class=\"mat-typography\">\n {{ 'igo.context.userButton.infoTitle' | translate }}\n</h1>\n<div mat-dialog-content class=\"mat-typography\">\n <p>\n {{ 'igo.context.userButton.dialog.user' | translate }}: {{ user.sourceId }}\n </p>\n <p>\n {{ 'igo.context.userButton.dialog.email' | translate }}: {{ user.email }}\n </p>\n <p>{{ 'igo.context.userButton.dialog.expiration' | translate }}: {{ exp }}</p>\n <button mat-stroked-button color=\"primary\" (click)=\"clearPreferences()\">\n {{ 'igo.context.userButton.dialog.clearPreferences' | translate }}\n </button>\n <br />\n</div>\n<div mat-dialog-actions style=\"justify-content: center\">\n <button mat-raised-button color=\"primary\" (click)=\"dialogRef.close(false)\">\n OK\n </button>\n</div>\n" }]
2904
+ }], ctorParameters: () => [{ type: i1$4.MatDialogRef }, { type: i2.AuthService }, { type: i6.StorageService }] });
2905
+
2906
+ class UserButtonComponent {
2907
+ dialog;
2908
+ config;
2909
+ auth;
2840
2910
  get map() {
2841
- return this.component.map;
2911
+ return this._map;
2842
2912
  }
2843
- constructor(component, contextService, mediaService) {
2844
- this.contextService = contextService;
2845
- this.mediaService = mediaService;
2846
- this.component = component;
2913
+ set map(value) {
2914
+ this._map = value;
2847
2915
  }
2848
- ngOnInit() {
2849
- this.context$$ = this.contextService.context$
2850
- .pipe(filter((context) => context !== undefined))
2851
- .subscribe((context) => this.handleContextChange(context));
2916
+ _map;
2917
+ get color() {
2918
+ return this._color;
2852
2919
  }
2853
- ngOnDestroy() {
2854
- this.context$$.unsubscribe();
2920
+ set color(value) {
2921
+ this._color = value;
2855
2922
  }
2856
- handleContextChange(context) {
2857
- if (context.map === undefined) {
2858
- return;
2859
- }
2860
- // This creates a new ol.Map when the context changes. Doing that
2861
- // allows the print tool to work properly even when the map's canvas
2862
- // has been tainted (CORS) with the layers of another context. This could
2863
- // have some side effects such as unbinding all listeners on the first map.
2864
- // A better solution would be to create a new map (preview) before
2865
- // printing and avoid the tainted canvas issue. This will come later so
2866
- // this snippet of code is kept here in case it takes too long becomes
2867
- // an issue
2868
- // const target = this.component.map.ol.getTarget();
2869
- // this.component.map.ol.setTarget(undefined);
2870
- // this.component.map.init();
2871
- // this.component.map.ol.setTarget(target);
2872
- const viewContext = context.map.view;
2873
- if (!this.component.view ||
2874
- viewContext.keepCurrentView !== true ||
2875
- context.map.view.projection !== this.map.projection) {
2876
- this.component.view = viewContext;
2877
- }
2878
- if (this.component.map.geolocationController) {
2879
- this.component.map.geolocationController.updateGeolocationOptions(viewContext);
2923
+ _color;
2924
+ expand = false;
2925
+ visible = false;
2926
+ hasApi = false;
2927
+ constructor(dialog, config, auth) {
2928
+ this.dialog = dialog;
2929
+ this.config = config;
2930
+ this.auth = auth;
2931
+ this.visible = this.config.getConfig('auth') ? true : false;
2932
+ this.hasApi = this.config.getConfig('context.url') !== undefined;
2933
+ }
2934
+ accountClick() {
2935
+ if (this.auth.authenticated) {
2936
+ this.expand = !this.expand;
2880
2937
  }
2881
- const controlsContext = context.map.controls;
2882
- if (!this.component.controls && controlsContext) {
2883
- if (this.mediaService.isMobile()) {
2884
- if (typeof controlsContext.scaleLine !== 'boolean') {
2885
- const scaleLineOption = controlsContext.scaleLine;
2886
- if (!scaleLineOption.minWidth) {
2887
- scaleLineOption.minWidth = Math.min(64, scaleLineOption.minWidth);
2888
- controlsContext.scaleLine = scaleLineOption;
2889
- }
2890
- }
2891
- }
2892
- this.component.controls = controlsContext;
2938
+ else {
2939
+ this.auth.logout();
2893
2940
  }
2894
2941
  }
2895
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MapContextDirective, deps: [{ token: i1$1.MapBrowserComponent }, { token: ContextService }, { token: i3.MediaService }], target: i0.ɵɵFactoryTarget.Directive });
2896
- static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.12", type: MapContextDirective, selector: "[igoMapContext]", ngImport: i0 });
2942
+ logout() {
2943
+ this.expand = false;
2944
+ this.auth.logout();
2945
+ }
2946
+ infoUser() {
2947
+ this.dialog.open(UserDialogComponent, { disableClose: false });
2948
+ }
2949
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: UserButtonComponent, deps: [{ token: i1$4.MatDialog }, { token: i1$1.ConfigService }, { token: i2.AuthService }], target: i0.ɵɵFactoryTarget.Component });
2950
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: UserButtonComponent, isStandalone: true, selector: "igo-user-button", inputs: { map: "map", color: "color" }, ngImport: i0, template: "<div *ngIf=\"visible\" class=\"igo-user-button-container\">\n <div\n class=\"igo-user-button-more-container\"\n [@userButtonState]=\"expand ? 'expand' : 'collapse'\"\n >\n <igo-poi-button *ngIf=\"hasApi\" [color]=\"color\" [map]=\"map\"></igo-poi-button>\n\n <button\n mat-icon-button\n [matTooltip]=\"'igo.context.userButton.infoTitle' | translate\"\n matTooltipPosition=\"above\"\n [color]=\"color\"\n (click)=\"infoUser()\"\n >\n <mat-icon svgIcon=\"information-outline\"></mat-icon>\n </button>\n\n <button\n mat-icon-button\n [matTooltip]=\"'igo.context.userButton.logout' | translate\"\n matTooltipPosition=\"above\"\n [color]=\"color\"\n (click)=\"logout()\"\n >\n <mat-icon svgIcon=\"power\"></mat-icon>\n </button>\n </div>\n\n <button\n mat-icon-button\n [color]=\"auth.authenticated ? color : 'warn'\"\n (click)=\"accountClick()\"\n >\n <mat-icon svgIcon=\"account-box\"></mat-icon>\n </button>\n</div>\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-user-button-container{display:flex;gap:4px}:host .igo-user-button-container button{background-color:#fff}:host .igo-user-button-container button:hover{background-color:#efefef}:host .igo-user-button-more-container{display:flex;gap:4px}\n"], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PoiButtonComponent, selector: "igo-poi-button", inputs: ["map", "color"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }], animations: [userButtonSlideInOut()] });
2897
2951
  }
2898
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: MapContextDirective, decorators: [{
2899
- type: Directive,
2900
- args: [{
2901
- selector: '[igoMapContext]'
2902
- }]
2903
- }], ctorParameters: function () { return [{ type: i1$1.MapBrowserComponent }, { type: ContextService }, { type: i3.MediaService }]; } });
2952
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: UserButtonComponent, decorators: [{
2953
+ type: Component,
2954
+ args: [{ selector: 'igo-user-button', animations: [userButtonSlideInOut()], standalone: true, imports: [
2955
+ NgIf,
2956
+ PoiButtonComponent,
2957
+ MatButtonModule,
2958
+ MatTooltipModule,
2959
+ MatIconModule,
2960
+ TranslateModule
2961
+ ], template: "<div *ngIf=\"visible\" class=\"igo-user-button-container\">\n <div\n class=\"igo-user-button-more-container\"\n [@userButtonState]=\"expand ? 'expand' : 'collapse'\"\n >\n <igo-poi-button *ngIf=\"hasApi\" [color]=\"color\" [map]=\"map\"></igo-poi-button>\n\n <button\n mat-icon-button\n [matTooltip]=\"'igo.context.userButton.infoTitle' | translate\"\n matTooltipPosition=\"above\"\n [color]=\"color\"\n (click)=\"infoUser()\"\n >\n <mat-icon svgIcon=\"information-outline\"></mat-icon>\n </button>\n\n <button\n mat-icon-button\n [matTooltip]=\"'igo.context.userButton.logout' | translate\"\n matTooltipPosition=\"above\"\n [color]=\"color\"\n (click)=\"logout()\"\n >\n <mat-icon svgIcon=\"power\"></mat-icon>\n </button>\n </div>\n\n <button\n mat-icon-button\n [color]=\"auth.authenticated ? color : 'warn'\"\n (click)=\"accountClick()\"\n >\n <mat-icon svgIcon=\"account-box\"></mat-icon>\n </button>\n</div>\n", styles: [":host button{border-radius:0!important}:host button .mat-ripple,:host button .mdc-icon-button__ripple{border-radius:0!important}:host .igo-user-button-container{display:flex;gap:4px}:host .igo-user-button-container button{background-color:#fff}:host .igo-user-button-container button:hover{background-color:#efefef}:host .igo-user-button-more-container{display:flex;gap:4px}\n"] }]
2962
+ }], ctorParameters: () => [{ type: i1$4.MatDialog }, { type: i1$1.ConfigService }, { type: i2.AuthService }], propDecorators: { map: [{
2963
+ type: Input
2964
+ }], color: [{
2965
+ type: Input
2966
+ }] } });
2904
2967
 
2905
- const CONTEXT_DIRECTIVES = [MapContextDirective, LayerContextDirective];
2906
- class IgoContextManagerModule {
2968
+ /**
2969
+ * @deprecated import the components/directives directly or CONTEXT_MAP_BUTTON_DIRECTIVES for the set
2970
+ */
2971
+ class IgoContextMapButtonModule {
2907
2972
  static forRoot() {
2908
2973
  return {
2909
- ngModule: IgoContextManagerModule
2974
+ ngModule: IgoContextMapButtonModule
2910
2975
  };
2911
2976
  }
2912
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextManagerModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2913
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: IgoContextManagerModule, declarations: [ContextListComponent,
2914
- ContextListBindingDirective,
2915
- ContextItemComponent,
2916
- ContextFormComponent,
2917
- ContextEditComponent,
2918
- ContextEditBindingDirective,
2919
- ContextPermissionsComponent,
2920
- ContextPermissionsBindingDirective, MapContextDirective, LayerContextDirective], imports: [CommonModule,
2921
- FormsModule,
2922
- ReactiveFormsModule,
2923
- MatFormFieldModule,
2924
- MatInputModule,
2925
- MatIconModule,
2926
- MatButtonModule,
2927
- MatTooltipModule,
2928
- MatListModule,
2929
- MatCheckboxModule,
2930
- MatRadioModule,
2931
- MatDialogModule,
2932
- MatMenuModule,
2933
- MatOptionModule,
2934
- MatAutocompleteModule,
2935
- IgoAuthModule,
2936
- IgoListModule,
2937
- IgoKeyValueModule,
2938
- IgoCollapsibleModule,
2939
- IgoStopPropagationModule,
2940
- IgoLanguageModule,
2941
- IgoContextImportExportModule,
2942
- IgoContextMapButtonModule,
2943
- IgoActionbarModule], exports: [ContextListComponent,
2944
- ContextListBindingDirective,
2945
- ContextItemComponent,
2946
- ContextFormComponent,
2947
- ContextEditComponent,
2948
- ContextEditBindingDirective,
2949
- ContextPermissionsComponent,
2950
- ContextPermissionsBindingDirective, MapContextDirective, LayerContextDirective] });
2951
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextManagerModule, imports: [CommonModule,
2952
- FormsModule,
2953
- ReactiveFormsModule,
2954
- MatFormFieldModule,
2955
- MatInputModule,
2956
- MatIconModule,
2957
- MatButtonModule,
2958
- MatTooltipModule,
2959
- MatListModule,
2960
- MatCheckboxModule,
2961
- MatRadioModule,
2962
- MatDialogModule,
2963
- MatMenuModule,
2964
- MatOptionModule,
2965
- MatAutocompleteModule,
2966
- IgoAuthModule,
2967
- IgoListModule,
2968
- IgoKeyValueModule,
2969
- IgoCollapsibleModule,
2970
- IgoStopPropagationModule,
2971
- IgoLanguageModule,
2972
- IgoContextImportExportModule,
2973
- IgoContextMapButtonModule,
2974
- IgoActionbarModule] });
2977
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextMapButtonModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
2978
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IgoContextMapButtonModule, imports: [BookmarkButtonComponent,
2979
+ BookmarkDialogComponent,
2980
+ PoiButtonComponent,
2981
+ UserButtonComponent], exports: [BookmarkButtonComponent,
2982
+ PoiButtonComponent,
2983
+ UserButtonComponent,
2984
+ BookmarkDialogComponent] });
2985
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextMapButtonModule, providers: [PoiService], imports: [BookmarkButtonComponent,
2986
+ BookmarkDialogComponent,
2987
+ PoiButtonComponent,
2988
+ UserButtonComponent] });
2975
2989
  }
2976
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextManagerModule, decorators: [{
2990
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextMapButtonModule, decorators: [{
2977
2991
  type: NgModule,
2978
2992
  args: [{
2979
2993
  imports: [
2980
- CommonModule,
2981
- FormsModule,
2982
- ReactiveFormsModule,
2983
- MatFormFieldModule,
2984
- MatInputModule,
2985
- MatIconModule,
2986
- MatButtonModule,
2987
- MatTooltipModule,
2988
- MatListModule,
2989
- MatCheckboxModule,
2990
- MatRadioModule,
2991
- MatDialogModule,
2992
- MatMenuModule,
2993
- MatOptionModule,
2994
- MatAutocompleteModule,
2995
- IgoAuthModule,
2996
- IgoListModule,
2997
- IgoKeyValueModule,
2998
- IgoCollapsibleModule,
2999
- IgoStopPropagationModule,
3000
- IgoLanguageModule,
3001
- IgoContextImportExportModule,
3002
- IgoContextMapButtonModule,
3003
- IgoActionbarModule
2994
+ BookmarkButtonComponent,
2995
+ BookmarkDialogComponent,
2996
+ PoiButtonComponent,
2997
+ UserButtonComponent
3004
2998
  ],
3005
2999
  exports: [
3006
- ContextListComponent,
3007
- ContextListBindingDirective,
3008
- ContextItemComponent,
3009
- ContextFormComponent,
3010
- ContextEditComponent,
3011
- ContextEditBindingDirective,
3012
- ContextPermissionsComponent,
3013
- ContextPermissionsBindingDirective,
3014
- ...CONTEXT_DIRECTIVES
3000
+ BookmarkButtonComponent,
3001
+ PoiButtonComponent,
3002
+ UserButtonComponent,
3003
+ BookmarkDialogComponent
3015
3004
  ],
3016
- declarations: [
3017
- ContextListComponent,
3018
- ContextListBindingDirective,
3019
- ContextItemComponent,
3020
- ContextFormComponent,
3021
- ContextEditComponent,
3022
- ContextEditBindingDirective,
3023
- ContextPermissionsComponent,
3024
- ContextPermissionsBindingDirective,
3025
- ...CONTEXT_DIRECTIVES
3026
- ]
3005
+ providers: [PoiService]
3027
3006
  }]
3028
3007
  }] });
3029
3008
 
@@ -3230,17 +3209,17 @@ class ShareMapService {
3230
3209
  }
3231
3210
  return addedLayersQueryParams;
3232
3211
  }
3233
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ShareMapService, deps: [{ token: ContextService }, { token: i3.RouteService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
3234
- static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ShareMapService, providedIn: 'root' });
3212
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ShareMapService, deps: [{ token: ContextService }, { token: i8.RouteService, optional: true }], target: i0.ɵɵFactoryTarget.Injectable });
3213
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ShareMapService, providedIn: 'root' });
3235
3214
  }
3236
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ShareMapService, decorators: [{
3215
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ShareMapService, decorators: [{
3237
3216
  type: Injectable,
3238
3217
  args: [{
3239
3218
  providedIn: 'root'
3240
3219
  }]
3241
- }], ctorParameters: function () { return [{ type: ContextService }, { type: i3.RouteService, decorators: [{
3220
+ }], ctorParameters: () => [{ type: ContextService }, { type: i8.RouteService, decorators: [{
3242
3221
  type: Optional
3243
- }] }]; } });
3222
+ }] }] });
3244
3223
 
3245
3224
  class ShareMapApiComponent {
3246
3225
  languageService;
@@ -3307,13 +3286,23 @@ class ShareMapApiComponent {
3307
3286
  uri: [id]
3308
3287
  });
3309
3288
  }
3310
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ShareMapApiComponent, deps: [{ token: i3.LanguageService }, { token: i3.MessageService }, { token: i2.AuthService }, { token: ShareMapService }, { token: i1$2.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3311
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ShareMapApiComponent, selector: "igo-share-map-api", inputs: { map: "map" }, ngImport: i0, template: "<form class=\"igo-form\" [formGroup]=\"form\" (ngSubmit)=\"createUrl(form.value)\">\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n required\r\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\r\n formControlName=\"title\"\r\n />\r\n <mat-error>\r\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div id=\"uriInput\" class=\"igo-input-container\">\r\n <mat-form-field>\r\n <span *ngIf=\"userId\" class=\"prefix\">{{ userId }}-</span>\r\n <span class=\"fieldWrapper\">\r\n <input\r\n matInput\r\n required\r\n [readonly]=\"!userId\"\r\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\r\n formControlName=\"uri\"\r\n />\r\n </span>\r\n <mat-error>\r\n {{ 'igo.context.contextManager.form.uriRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n *ngIf=\"!url\"\r\n mat-raised-button\r\n type=\"submit\"\r\n [disabled]=\"!form.valid\"\r\n >\r\n {{ 'igo.context.shareMap.button' | translate }}\r\n </button>\r\n <button\r\n *ngIf=\"url\"\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"updateContextShared(form.value)\"\r\n >\r\n {{ 'igo.context.shareMap.refreshBtn' | translate }}\r\n </button>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"url\" class=\"igo-input-container linkToShare\">\r\n <mat-form-field>\r\n <textarea\r\n #textArea\r\n matInput\r\n readonly\r\n rows=\"3\"\r\n class=\"textAreaWithButton\"\r\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\r\n [value]=\"url\"\r\n ></textarea>\r\n <button\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.shareMap.copy' | translate\"\r\n color=\"primary\"\r\n (click)=\"copyTextToClipboard(textArea)\"\r\n >\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n <div></div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form{padding:20px 5px 5px}.igo-form-button-group{text-align:center;padding-top:10px}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i1$2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i6$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
3289
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ShareMapApiComponent, deps: [{ token: i4.LanguageService }, { token: i3.MessageService }, { token: i2.AuthService }, { token: ShareMapService }, { token: i1$3.UntypedFormBuilder }], target: i0.ɵɵFactoryTarget.Component });
3290
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ShareMapApiComponent, isStandalone: true, selector: "igo-share-map-api", inputs: { map: "map" }, ngImport: i0, template: "<form class=\"igo-form\" [formGroup]=\"form\" (ngSubmit)=\"createUrl(form.value)\">\n <div class=\"igo-input-container\">\n <mat-form-field>\n <input\n matInput\n required\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\"\n />\n <mat-error>\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div id=\"uriInput\" class=\"igo-input-container\">\n <mat-form-field>\n <span *ngIf=\"userId\" class=\"prefix\">{{ userId }}-</span>\n <span class=\"fieldWrapper\">\n <input\n matInput\n required\n [readonly]=\"!userId\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\"\n />\n </span>\n <mat-error>\n {{ 'igo.context.contextManager.form.uriRequired' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"igo-form-button-group\">\n <button\n *ngIf=\"!url\"\n mat-raised-button\n type=\"submit\"\n [disabled]=\"!form.valid\"\n >\n {{ 'igo.context.shareMap.button' | translate }}\n </button>\n <button\n *ngIf=\"url\"\n mat-raised-button\n type=\"button\"\n (click)=\"updateContextShared(form.value)\"\n >\n {{ 'igo.context.shareMap.refreshBtn' | translate }}\n </button>\n </div>\n</form>\n\n<div *ngIf=\"url\" class=\"igo-input-container linkToShare\">\n <mat-form-field>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"3\"\n class=\"textAreaWithButton\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"\n ></textarea>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.shareMap.copy' | translate\"\n color=\"primary\"\n (click)=\"copyTextToClipboard(textArea)\"\n >\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n </mat-form-field>\n <div></div>\n</div>\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form{padding:20px 5px 5px}.igo-form-button-group{text-align:center;padding-top:10px}\n"], dependencies: [{ kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i1$3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i1$3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i1$3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1$3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1$3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1$3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1$3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i6$1.MatError, selector: "mat-error, [matError]", inputs: ["id"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
3312
3291
  }
3313
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ShareMapApiComponent, decorators: [{
3292
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ShareMapApiComponent, decorators: [{
3314
3293
  type: Component,
3315
- args: [{ selector: 'igo-share-map-api', template: "<form class=\"igo-form\" [formGroup]=\"form\" (ngSubmit)=\"createUrl(form.value)\">\r\n <div class=\"igo-input-container\">\r\n <mat-form-field>\r\n <input\r\n matInput\r\n required\r\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\r\n formControlName=\"title\"\r\n />\r\n <mat-error>\r\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div id=\"uriInput\" class=\"igo-input-container\">\r\n <mat-form-field>\r\n <span *ngIf=\"userId\" class=\"prefix\">{{ userId }}-</span>\r\n <span class=\"fieldWrapper\">\r\n <input\r\n matInput\r\n required\r\n [readonly]=\"!userId\"\r\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\r\n formControlName=\"uri\"\r\n />\r\n </span>\r\n <mat-error>\r\n {{ 'igo.context.contextManager.form.uriRequired' | translate }}\r\n </mat-error>\r\n </mat-form-field>\r\n </div>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button\r\n *ngIf=\"!url\"\r\n mat-raised-button\r\n type=\"submit\"\r\n [disabled]=\"!form.valid\"\r\n >\r\n {{ 'igo.context.shareMap.button' | translate }}\r\n </button>\r\n <button\r\n *ngIf=\"url\"\r\n mat-raised-button\r\n type=\"button\"\r\n (click)=\"updateContextShared(form.value)\"\r\n >\r\n {{ 'igo.context.shareMap.refreshBtn' | translate }}\r\n </button>\r\n </div>\r\n</form>\r\n\r\n<div *ngIf=\"url\" class=\"igo-input-container linkToShare\">\r\n <mat-form-field>\r\n <textarea\r\n #textArea\r\n matInput\r\n readonly\r\n rows=\"3\"\r\n class=\"textAreaWithButton\"\r\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\r\n [value]=\"url\"\r\n ></textarea>\r\n <button\r\n mat-icon-button\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.shareMap.copy' | translate\"\r\n color=\"primary\"\r\n (click)=\"copyTextToClipboard(textArea)\"\r\n >\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n </button>\r\n </mat-form-field>\r\n <div></div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form{padding:20px 5px 5px}.igo-form-button-group{text-align:center;padding-top:10px}\n"] }]
3316
- }], ctorParameters: function () { return [{ type: i3.LanguageService }, { type: i3.MessageService }, { type: i2.AuthService }, { type: ShareMapService }, { type: i1$2.UntypedFormBuilder }]; }, propDecorators: { map: [{
3294
+ args: [{ selector: 'igo-share-map-api', standalone: true, imports: [
3295
+ FormsModule,
3296
+ ReactiveFormsModule,
3297
+ MatFormFieldModule,
3298
+ MatInputModule,
3299
+ NgIf,
3300
+ MatButtonModule,
3301
+ MatTooltipModule,
3302
+ MatIconModule,
3303
+ TranslateModule
3304
+ ], template: "<form class=\"igo-form\" [formGroup]=\"form\" (ngSubmit)=\"createUrl(form.value)\">\n <div class=\"igo-input-container\">\n <mat-form-field>\n <input\n matInput\n required\n [placeholder]=\"'igo.context.contextManager.form.title' | translate\"\n formControlName=\"title\"\n />\n <mat-error>\n {{ 'igo.context.contextManager.form.titleRequired' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div id=\"uriInput\" class=\"igo-input-container\">\n <mat-form-field>\n <span *ngIf=\"userId\" class=\"prefix\">{{ userId }}-</span>\n <span class=\"fieldWrapper\">\n <input\n matInput\n required\n [readonly]=\"!userId\"\n [placeholder]=\"'igo.context.contextManager.form.uri' | translate\"\n formControlName=\"uri\"\n />\n </span>\n <mat-error>\n {{ 'igo.context.contextManager.form.uriRequired' | translate }}\n </mat-error>\n </mat-form-field>\n </div>\n\n <div class=\"igo-form-button-group\">\n <button\n *ngIf=\"!url\"\n mat-raised-button\n type=\"submit\"\n [disabled]=\"!form.valid\"\n >\n {{ 'igo.context.shareMap.button' | translate }}\n </button>\n <button\n *ngIf=\"url\"\n mat-raised-button\n type=\"button\"\n (click)=\"updateContextShared(form.value)\"\n >\n {{ 'igo.context.shareMap.refreshBtn' | translate }}\n </button>\n </div>\n</form>\n\n<div *ngIf=\"url\" class=\"igo-input-container linkToShare\">\n <mat-form-field>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"3\"\n class=\"textAreaWithButton\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"\n ></textarea>\n <button\n mat-icon-button\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.shareMap.copy' | translate\"\n color=\"primary\"\n (click)=\"copyTextToClipboard(textArea)\"\n >\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n </button>\n </mat-form-field>\n <div></div>\n</div>\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}#uriInput .fieldWrapper{display:block;overflow:hidden}#uriInput .prefix{float:left}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form{padding:20px 5px 5px}.igo-form-button-group{text-align:center;padding-top:10px}\n"] }]
3305
+ }], ctorParameters: () => [{ type: i4.LanguageService }, { type: i3.MessageService }, { type: i2.AuthService }, { type: ShareMapService }, { type: i1$3.UntypedFormBuilder }], propDecorators: { map: [{
3317
3306
  type: Input
3318
3307
  }] } });
3319
3308
 
@@ -3357,13 +3346,21 @@ class ShareMapUrlComponent {
3357
3346
  this.messageService.success('igo.context.shareMap.dialog.copyMsg', 'igo.context.shareMap.dialog.copyTitle');
3358
3347
  }
3359
3348
  }
3360
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ShareMapUrlComponent, deps: [{ token: i3.MessageService }, { token: ShareMapService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3361
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ShareMapUrlComponent, selector: "igo-share-map-url", inputs: { map: "map" }, ngImport: i0, template: "<div class=\"igo-input-container linkToShare\">\r\n <mat-form-field>\r\n <textarea\r\n #textArea\r\n matInput\r\n readonly\r\n rows=\"3\"\r\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\r\n [value]=\"url\"\r\n ></textarea>\r\n </mat-form-field>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button mat-raised-button (click)=\"copyTextToClipboard(textArea)\">\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n {{ 'igo.context.shareMap.copy' | translate }}\r\n </button>\r\n </div>\r\n <div>\r\n <br />\r\n <section class=\"mat-typography\">\r\n <div\r\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) === ''\"\r\n >\r\n <h4 *ngIf=\"('igo.context.shareMap.included' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.included' | translate }}\r\n </h4>\r\n <ul>\r\n <li *ngIf=\"('igo.context.shareMap.context' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.context' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.center' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.center' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.zoom' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.zoom' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.addedLayers' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.addedLayers' | translate }}\r\n </li>\r\n <li\r\n *ngIf=\"('igo.context.shareMap.visibleInvisible' | translate) !== ''\"\r\n >\r\n {{ 'igo.context.shareMap.visibleInvisible' | translate }}\r\n </li>\r\n </ul>\r\n\r\n <h4 *ngIf=\"('igo.context.shareMap.excluded' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.excluded' | translate }}\r\n </h4>\r\n <ul>\r\n <li *ngIf=\"('igo.context.shareMap.order' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.order' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.opacity' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.opacity' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.filterOgc' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.filterOgc' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.filterTime' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.filterTime' | translate }}\r\n </li>\r\n </ul>\r\n </div>\r\n <igo-custom-html\r\n class=\"shareCustomPadding\"\r\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) !== ''\"\r\n class=\"mat-typography\"\r\n [html]=\"'igo.context.shareMap.htmlClarifications' | translate\"\r\n >\r\n </igo-custom-html>\r\n </section>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form-button-group{text-align:center;padding-top:10px}igo-custom-html.shareCustomPadding{padding:0}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "directive", type: i5.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "component", type: i7.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i13.CustomHtmlComponent, selector: "igo-custom-html", inputs: ["html"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
3349
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ShareMapUrlComponent, deps: [{ token: i3.MessageService }, { token: ShareMapService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
3350
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ShareMapUrlComponent, isStandalone: true, selector: "igo-share-map-url", inputs: { map: "map" }, ngImport: i0, template: "<div class=\"igo-input-container linkToShare\">\n <mat-form-field>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"3\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"\n ></textarea>\n </mat-form-field>\n\n <div class=\"igo-form-button-group\">\n <button mat-raised-button (click)=\"copyTextToClipboard(textArea)\">\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n {{ 'igo.context.shareMap.copy' | translate }}\n </button>\n </div>\n <div>\n <br />\n <section class=\"mat-typography\">\n <div\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) === ''\"\n >\n <h4 *ngIf=\"('igo.context.shareMap.included' | translate) !== ''\">\n {{ 'igo.context.shareMap.included' | translate }}\n </h4>\n <ul>\n <li *ngIf=\"('igo.context.shareMap.context' | translate) !== ''\">\n {{ 'igo.context.shareMap.context' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.center' | translate) !== ''\">\n {{ 'igo.context.shareMap.center' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.zoom' | translate) !== ''\">\n {{ 'igo.context.shareMap.zoom' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.addedLayers' | translate) !== ''\">\n {{ 'igo.context.shareMap.addedLayers' | translate }}\n </li>\n <li\n *ngIf=\"('igo.context.shareMap.visibleInvisible' | translate) !== ''\"\n >\n {{ 'igo.context.shareMap.visibleInvisible' | translate }}\n </li>\n </ul>\n\n <h4 *ngIf=\"('igo.context.shareMap.excluded' | translate) !== ''\">\n {{ 'igo.context.shareMap.excluded' | translate }}\n </h4>\n <ul>\n <li *ngIf=\"('igo.context.shareMap.order' | translate) !== ''\">\n {{ 'igo.context.shareMap.order' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.opacity' | translate) !== ''\">\n {{ 'igo.context.shareMap.opacity' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.filterOgc' | translate) !== ''\">\n {{ 'igo.context.shareMap.filterOgc' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.filterTime' | translate) !== ''\">\n {{ 'igo.context.shareMap.filterTime' | translate }}\n </li>\n </ul>\n </div>\n <igo-custom-html\n class=\"shareCustomPadding\"\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) !== ''\"\n class=\"mat-typography\"\n [html]=\"'igo.context.shareMap.htmlClarifications' | translate\"\n >\n </igo-custom-html>\n </section>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form-button-group{text-align:center;padding-top:10px}igo-custom-html.shareCustomPadding{padding:0}\n"], dependencies: [{ kind: "ngmodule", type: MatFormFieldModule }, { kind: "component", type: i6$1.MatFormField, selector: "mat-form-field", inputs: ["hideRequiredMarker", "color", "floatLabel", "appearance", "subscriptSizing", "hintLabel"], exportAs: ["matFormField"] }, { kind: "ngmodule", type: MatInputModule }, { kind: "directive", type: i7$1.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["disabled", "id", "placeholder", "name", "required", "type", "errorStateMatcher", "aria-describedby", "value", "readonly"], exportAs: ["matInput"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: CustomHtmlComponent, selector: "igo-custom-html", inputs: ["html"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
3362
3351
  }
3363
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ShareMapUrlComponent, decorators: [{
3352
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ShareMapUrlComponent, decorators: [{
3364
3353
  type: Component,
3365
- args: [{ selector: 'igo-share-map-url', template: "<div class=\"igo-input-container linkToShare\">\r\n <mat-form-field>\r\n <textarea\r\n #textArea\r\n matInput\r\n readonly\r\n rows=\"3\"\r\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\r\n [value]=\"url\"\r\n ></textarea>\r\n </mat-form-field>\r\n\r\n <div class=\"igo-form-button-group\">\r\n <button mat-raised-button (click)=\"copyTextToClipboard(textArea)\">\r\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\r\n {{ 'igo.context.shareMap.copy' | translate }}\r\n </button>\r\n </div>\r\n <div>\r\n <br />\r\n <section class=\"mat-typography\">\r\n <div\r\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) === ''\"\r\n >\r\n <h4 *ngIf=\"('igo.context.shareMap.included' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.included' | translate }}\r\n </h4>\r\n <ul>\r\n <li *ngIf=\"('igo.context.shareMap.context' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.context' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.center' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.center' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.zoom' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.zoom' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.addedLayers' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.addedLayers' | translate }}\r\n </li>\r\n <li\r\n *ngIf=\"('igo.context.shareMap.visibleInvisible' | translate) !== ''\"\r\n >\r\n {{ 'igo.context.shareMap.visibleInvisible' | translate }}\r\n </li>\r\n </ul>\r\n\r\n <h4 *ngIf=\"('igo.context.shareMap.excluded' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.excluded' | translate }}\r\n </h4>\r\n <ul>\r\n <li *ngIf=\"('igo.context.shareMap.order' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.order' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.opacity' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.opacity' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.filterOgc' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.filterOgc' | translate }}\r\n </li>\r\n <li *ngIf=\"('igo.context.shareMap.filterTime' | translate) !== ''\">\r\n {{ 'igo.context.shareMap.filterTime' | translate }}\r\n </li>\r\n </ul>\r\n </div>\r\n <igo-custom-html\r\n class=\"shareCustomPadding\"\r\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) !== ''\"\r\n class=\"mat-typography\"\r\n [html]=\"'igo.context.shareMap.htmlClarifications' | translate\"\r\n >\r\n </igo-custom-html>\r\n </section>\r\n </div>\r\n</div>\r\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form-button-group{text-align:center;padding-top:10px}igo-custom-html.shareCustomPadding{padding:0}\n"] }]
3366
- }], ctorParameters: function () { return [{ type: i3.MessageService }, { type: ShareMapService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { map: [{
3354
+ args: [{ selector: 'igo-share-map-url', standalone: true, imports: [
3355
+ MatFormFieldModule,
3356
+ MatInputModule,
3357
+ MatButtonModule,
3358
+ MatIconModule,
3359
+ NgIf,
3360
+ CustomHtmlComponent,
3361
+ TranslateModule
3362
+ ], template: "<div class=\"igo-input-container linkToShare\">\n <mat-form-field>\n <textarea\n #textArea\n matInput\n readonly\n rows=\"3\"\n [placeholder]=\"'igo.context.shareMap.placeholderLink' | translate\"\n [value]=\"url\"\n ></textarea>\n </mat-form-field>\n\n <div class=\"igo-form-button-group\">\n <button mat-raised-button (click)=\"copyTextToClipboard(textArea)\">\n <mat-icon svgIcon=\"content-copy\"></mat-icon>\n {{ 'igo.context.shareMap.copy' | translate }}\n </button>\n </div>\n <div>\n <br />\n <section class=\"mat-typography\">\n <div\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) === ''\"\n >\n <h4 *ngIf=\"('igo.context.shareMap.included' | translate) !== ''\">\n {{ 'igo.context.shareMap.included' | translate }}\n </h4>\n <ul>\n <li *ngIf=\"('igo.context.shareMap.context' | translate) !== ''\">\n {{ 'igo.context.shareMap.context' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.center' | translate) !== ''\">\n {{ 'igo.context.shareMap.center' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.zoom' | translate) !== ''\">\n {{ 'igo.context.shareMap.zoom' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.addedLayers' | translate) !== ''\">\n {{ 'igo.context.shareMap.addedLayers' | translate }}\n </li>\n <li\n *ngIf=\"('igo.context.shareMap.visibleInvisible' | translate) !== ''\"\n >\n {{ 'igo.context.shareMap.visibleInvisible' | translate }}\n </li>\n </ul>\n\n <h4 *ngIf=\"('igo.context.shareMap.excluded' | translate) !== ''\">\n {{ 'igo.context.shareMap.excluded' | translate }}\n </h4>\n <ul>\n <li *ngIf=\"('igo.context.shareMap.order' | translate) !== ''\">\n {{ 'igo.context.shareMap.order' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.opacity' | translate) !== ''\">\n {{ 'igo.context.shareMap.opacity' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.filterOgc' | translate) !== ''\">\n {{ 'igo.context.shareMap.filterOgc' | translate }}\n </li>\n <li *ngIf=\"('igo.context.shareMap.filterTime' | translate) !== ''\">\n {{ 'igo.context.shareMap.filterTime' | translate }}\n </li>\n </ul>\n </div>\n <igo-custom-html\n class=\"shareCustomPadding\"\n *ngIf=\"('igo.context.shareMap.htmlClarifications' | translate) !== ''\"\n class=\"mat-typography\"\n [html]=\"'igo.context.shareMap.htmlClarifications' | translate\"\n >\n </igo-custom-html>\n </section>\n </div>\n</div>\n", styles: ["@charset \"UTF-8\";mat-form-field{width:100%}.linkToShare\\a0 {padding:25px 5px 5px}.linkToShare\\a0 textarea{resize:none;width:100%;line-height:1.3;height:40px;overflow-y:hidden;word-wrap:normal;word-break:break-all}.linkToShare\\a0 textarea.textAreaWithButton{width:calc(100% - 60px)}.linkToShare\\a0 mat-form-field>button{float:right;margin:-10px 0}.igo-form-button-group{text-align:center;padding-top:10px}igo-custom-html.shareCustomPadding{padding:0}\n"] }]
3363
+ }], ctorParameters: () => [{ type: i3.MessageService }, { type: ShareMapService }, { type: i0.ChangeDetectorRef }], propDecorators: { map: [{
3367
3364
  type: Input
3368
3365
  }] } });
3369
3366
 
@@ -3375,64 +3372,40 @@ class ShareMapComponent {
3375
3372
  this.config = config;
3376
3373
  this.hasApi = this.config.getConfig('context.url') ? true : false;
3377
3374
  }
3378
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ShareMapComponent, deps: [{ token: i3.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
3379
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: ShareMapComponent, selector: "igo-share-map", inputs: { map: "map" }, ngImport: i0, template: "<mat-tab-group *ngIf=\"hasApi\">\r\n <mat-tab [label]=\"'igo.context.shareMap.shareWithApi' | translate\">\r\n <igo-share-map-api [map]=\"map\"></igo-share-map-api>\r\n </mat-tab>\r\n <mat-tab [label]=\"'igo.context.shareMap.shareWithUrl' | translate\">\r\n <igo-share-map-url [map]=\"map\"></igo-share-map-url>\r\n </mat-tab>\r\n</mat-tab-group>\r\n\r\n<igo-share-map-url *ngIf=\"!hasApi\" [map]=\"map\"></igo-share-map-url>\r\n", styles: [""], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i3$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "component", type: ShareMapUrlComponent, selector: "igo-share-map-url", inputs: ["map"] }, { kind: "component", type: ShareMapApiComponent, selector: "igo-share-map-api", inputs: ["map"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
3375
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ShareMapComponent, deps: [{ token: i1$1.ConfigService }], target: i0.ɵɵFactoryTarget.Component });
3376
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: ShareMapComponent, isStandalone: true, selector: "igo-share-map", inputs: { map: "map" }, ngImport: i0, template: "<mat-tab-group *ngIf=\"hasApi\">\n <mat-tab [label]=\"'igo.context.shareMap.shareWithApi' | translate\">\n <igo-share-map-api [map]=\"map\"></igo-share-map-api>\n </mat-tab>\n <mat-tab [label]=\"'igo.context.shareMap.shareWithUrl' | translate\">\n <igo-share-map-url [map]=\"map\"></igo-share-map-url>\n </mat-tab>\n</mat-tab-group>\n\n<igo-share-map-url *ngIf=\"!hasApi\" [map]=\"map\"></igo-share-map-url>\n", styles: [""], dependencies: [{ kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatTabsModule }, { kind: "component", type: i2$1.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i2$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: ShareMapApiComponent, selector: "igo-share-map-api", inputs: ["map"] }, { kind: "component", type: ShareMapUrlComponent, selector: "igo-share-map-url", inputs: ["map"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
3380
3377
  }
3381
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: ShareMapComponent, decorators: [{
3378
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: ShareMapComponent, decorators: [{
3382
3379
  type: Component,
3383
- args: [{ selector: 'igo-share-map', template: "<mat-tab-group *ngIf=\"hasApi\">\r\n <mat-tab [label]=\"'igo.context.shareMap.shareWithApi' | translate\">\r\n <igo-share-map-api [map]=\"map\"></igo-share-map-api>\r\n </mat-tab>\r\n <mat-tab [label]=\"'igo.context.shareMap.shareWithUrl' | translate\">\r\n <igo-share-map-url [map]=\"map\"></igo-share-map-url>\r\n </mat-tab>\r\n</mat-tab-group>\r\n\r\n<igo-share-map-url *ngIf=\"!hasApi\" [map]=\"map\"></igo-share-map-url>\r\n" }]
3384
- }], ctorParameters: function () { return [{ type: i3.ConfigService }]; }, propDecorators: { map: [{
3380
+ args: [{ selector: 'igo-share-map', standalone: true, imports: [
3381
+ NgIf,
3382
+ MatTabsModule,
3383
+ ShareMapApiComponent,
3384
+ ShareMapUrlComponent,
3385
+ TranslateModule
3386
+ ], template: "<mat-tab-group *ngIf=\"hasApi\">\n <mat-tab [label]=\"'igo.context.shareMap.shareWithApi' | translate\">\n <igo-share-map-api [map]=\"map\"></igo-share-map-api>\n </mat-tab>\n <mat-tab [label]=\"'igo.context.shareMap.shareWithUrl' | translate\">\n <igo-share-map-url [map]=\"map\"></igo-share-map-url>\n </mat-tab>\n</mat-tab-group>\n\n<igo-share-map-url *ngIf=\"!hasApi\" [map]=\"map\"></igo-share-map-url>\n" }]
3387
+ }], ctorParameters: () => [{ type: i1$1.ConfigService }], propDecorators: { map: [{
3385
3388
  type: Input
3386
3389
  }] } });
3387
3390
 
3391
+ /**
3392
+ * @deprecated import the components/directives directly or SHARE_MAP_DIRECTIVES for the set
3393
+ */
3388
3394
  class IgoShareMapModule {
3389
3395
  static forRoot() {
3390
3396
  return {
3391
3397
  ngModule: IgoShareMapModule
3392
3398
  };
3393
3399
  }
3394
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoShareMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3395
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: IgoShareMapModule, declarations: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent], imports: [CommonModule,
3396
- FormsModule,
3397
- ReactiveFormsModule,
3398
- MatIconModule,
3399
- MatTooltipModule,
3400
- MatTabsModule,
3401
- MatFormFieldModule,
3402
- MatInputModule,
3403
- MatButtonModule,
3404
- IgoLanguageModule,
3405
- IgoCustomHtmlModule], exports: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent] });
3406
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoShareMapModule, imports: [CommonModule,
3407
- FormsModule,
3408
- ReactiveFormsModule,
3409
- MatIconModule,
3410
- MatTooltipModule,
3411
- MatTabsModule,
3412
- MatFormFieldModule,
3413
- MatInputModule,
3414
- MatButtonModule,
3415
- IgoLanguageModule,
3416
- IgoCustomHtmlModule] });
3400
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoShareMapModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3401
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IgoShareMapModule, imports: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent], exports: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent] });
3402
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoShareMapModule, imports: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent] });
3417
3403
  }
3418
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoShareMapModule, decorators: [{
3404
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoShareMapModule, decorators: [{
3419
3405
  type: NgModule,
3420
3406
  args: [{
3421
- imports: [
3422
- CommonModule,
3423
- FormsModule,
3424
- ReactiveFormsModule,
3425
- MatIconModule,
3426
- MatTooltipModule,
3427
- MatTabsModule,
3428
- MatFormFieldModule,
3429
- MatInputModule,
3430
- MatButtonModule,
3431
- IgoLanguageModule,
3432
- IgoCustomHtmlModule
3433
- ],
3434
- exports: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent],
3435
- declarations: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent]
3407
+ imports: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent],
3408
+ exports: [ShareMapComponent, ShareMapUrlComponent, ShareMapApiComponent]
3436
3409
  }]
3437
3410
  }] });
3438
3411
 
@@ -3508,13 +3481,23 @@ class SidenavComponent {
3508
3481
  this.topPanelState = 'initial';
3509
3482
  }
3510
3483
  }
3511
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SidenavComponent, deps: [{ token: i1$4.Title }], target: i0.ɵɵFactoryTarget.Component });
3512
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: SidenavComponent, selector: "igo-sidenav", inputs: { map: "map", opened: "opened", feature: "feature", tool: "tool", media: "media", title: "title" }, ngImport: i0, template: "<mat-sidenav #sidenav igoSidenavShim mode=\"side\" [opened]=\"opened\">\r\n <div class=\"igo-sidenav-content\">\r\n <igo-flexible\r\n #topPanel\r\n initial=\"50%\"\r\n initialMobile=\"100%\"\r\n expanded=\"calc(100% - 58px)\"\r\n [state]=\"topPanelState\"\r\n >\r\n <div class=\"igo-content\">\r\n <igo-panel [title]=\"tool ? (tool.title | translate) : title\">\r\n <button\r\n mat-icon-button\r\n panelLeftButton\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.sidenav.goBack' | translate\"\r\n *ngIf=\"tool\"\r\n >\r\n <mat-icon svgIcon=\"arrow-back\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n mat-icon-button\r\n panelRightButton\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.sidenav.mainMenu' | translate\"\r\n *ngIf=\"tool\"\r\n >\r\n <mat-icon svgIcon=\"menu\"></mat-icon>\r\n </button>\r\n </igo-panel>\r\n </div>\r\n\r\n <div igoFlexibleFill class=\"igo-content\">\r\n <igo-panel [title]=\"featureTitle\" *ngIf=\"feature && media !== 'mobile'\">\r\n <button\r\n mat-icon-button\r\n panelLeftButton\r\n class=\"igo-icon-button\"\r\n (click)=\"toggleTopPanel()\"\r\n >\r\n <mat-icon\r\n [svgIcon]=\"\r\n ['collapsed', 'initial'].indexOf(topPanel.state) >= 0\r\n ? 'arrow_downward'\r\n : 'arrow_upward'\r\n \"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n mat-icon-button\r\n panelRightButton\r\n class=\"igo-icon-button\"\r\n (click)=\"zoomToFeatureExtent()\"\r\n *ngIf=\"feature.geometry\"\r\n >\r\n <mat-icon svgIcon=\"zoom-in\"></mat-icon>\r\n </button>\r\n\r\n <igo-feature-details\r\n [feature]=\"feature\"\r\n *ngIf=\"['collapsed', 'initial'].indexOf(topPanel.state) >= 0\"\r\n >\r\n </igo-feature-details>\r\n </igo-panel>\r\n </div>\r\n </igo-flexible>\r\n </div>\r\n</mat-sidenav>\r\n", styles: [":host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}:host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{border-top-width:1px;border-top-style:solid;border-top-color:#0003}mat-sidenav{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd}:host{background-color:#fff}:host ::ng-deep mat-sidenav{z-index:3!important}mat-sidenav{width:400px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){mat-sidenav{width:calc(100% - 45px)}}.igo-sidenav-content{margin-top:50px;height:calc(100% - 50px)}igo-feature-details ::ng-deep table{width:100%}\n"], dependencies: [{ kind: "directive", type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i7.MatIconButton, selector: "button[mat-icon-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i5$1.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "directive", type: i6$3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i13.PanelComponent, selector: "igo-panel", inputs: ["title", "withHeader", "cursorPointer"] }, { kind: "component", type: i13.FlexibleComponent, selector: "igo-flexible", inputs: ["initial", "collapsed", "expanded", "initialMobile", "collapsedMobile", "expandedMobile", "direction", "state"] }, { kind: "component", type: i1$1.FeatureDetailsComponent, selector: "igo-feature-details", inputs: ["source", "map", "toolbox", "feature"], outputs: ["routeEvent", "selectFeature", "htmlDisplayEvent"] }, { kind: "pipe", type: i9$1.TranslatePipe, name: "translate" }] });
3484
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SidenavComponent, deps: [{ token: i1$5.Title }], target: i0.ɵɵFactoryTarget.Component });
3485
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.2.4", type: SidenavComponent, isStandalone: true, selector: "igo-sidenav", inputs: { map: "map", opened: "opened", feature: "feature", tool: "tool", media: "media", title: "title" }, ngImport: i0, template: "<mat-sidenav #sidenav igoSidenavShim mode=\"side\" [opened]=\"opened\">\n <div class=\"igo-sidenav-content\">\n <igo-flexible\n #topPanel\n initial=\"50%\"\n initialMobile=\"100%\"\n expanded=\"calc(100% - 58px)\"\n [state]=\"topPanelState\"\n >\n <div class=\"igo-content\">\n <igo-panel [title]=\"tool ? (tool.title | translate) : title\">\n <button\n mat-icon-button\n panelLeftButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.sidenav.goBack' | translate\"\n *ngIf=\"tool\"\n >\n <mat-icon svgIcon=\"arrow-back\"></mat-icon>\n </button>\n\n <button\n mat-icon-button\n panelRightButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.sidenav.mainMenu' | translate\"\n *ngIf=\"tool\"\n >\n <mat-icon svgIcon=\"menu\"></mat-icon>\n </button>\n </igo-panel>\n </div>\n\n <div igoFlexibleFill class=\"igo-content\">\n <igo-panel [title]=\"featureTitle\" *ngIf=\"feature && media !== 'mobile'\">\n <button\n mat-icon-button\n panelLeftButton\n class=\"igo-icon-button\"\n (click)=\"toggleTopPanel()\"\n >\n <mat-icon\n [svgIcon]=\"\n ['collapsed', 'initial'].indexOf(topPanel.state) >= 0\n ? 'arrow_downward'\n : 'arrow_upward'\n \"\n ></mat-icon>\n </button>\n\n <button\n mat-icon-button\n panelRightButton\n class=\"igo-icon-button\"\n (click)=\"zoomToFeatureExtent()\"\n *ngIf=\"feature.geometry\"\n >\n <mat-icon svgIcon=\"zoom-in\"></mat-icon>\n </button>\n\n <igo-feature-details\n [feature]=\"feature\"\n *ngIf=\"['collapsed', 'initial'].indexOf(topPanel.state) >= 0\"\n >\n </igo-feature-details>\n </igo-panel>\n </div>\n </igo-flexible>\n </div>\n</mat-sidenav>\n", styles: [":host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}:host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{border-top-width:1px;border-top-style:solid;border-top-color:#0003}mat-sidenav{-moz-box-shadow:2px 0px 2px 0px #dddddd;-webkit-box-shadow:2px 0px 2px 0px #dddddd;-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd}:host{background-color:#fff}:host ::ng-deep mat-sidenav{z-index:3!important}mat-sidenav{width:400px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){mat-sidenav{width:calc(100% - 45px)}}.igo-sidenav-content{margin-top:50px;height:calc(100% - 50px)}igo-feature-details ::ng-deep table{width:100%}\n"], dependencies: [{ kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i2$2.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: FlexibleComponent, selector: "igo-flexible", inputs: ["initial", "collapsed", "expanded", "initialMobile", "collapsedMobile", "expandedMobile", "direction", "state"] }, { kind: "component", type: PanelComponent, selector: "igo-panel", inputs: ["title", "withHeader", "cursorPointer"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatButtonModule }, { kind: "component", type: i5.MatIconButton, selector: "button[mat-icon-button]", exportAs: ["matButton"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i5$1.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i6$2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: FeatureDetailsComponent, selector: "igo-feature-details", inputs: ["source", "map", "toolbox", "feature"], outputs: ["routeEvent", "selectFeature", "htmlDisplayEvent"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "pipe", type: i7$2.TranslatePipe, name: "translate" }] });
3513
3486
  }
3514
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SidenavComponent, decorators: [{
3487
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: SidenavComponent, decorators: [{
3515
3488
  type: Component,
3516
- args: [{ selector: 'igo-sidenav', template: "<mat-sidenav #sidenav igoSidenavShim mode=\"side\" [opened]=\"opened\">\r\n <div class=\"igo-sidenav-content\">\r\n <igo-flexible\r\n #topPanel\r\n initial=\"50%\"\r\n initialMobile=\"100%\"\r\n expanded=\"calc(100% - 58px)\"\r\n [state]=\"topPanelState\"\r\n >\r\n <div class=\"igo-content\">\r\n <igo-panel [title]=\"tool ? (tool.title | translate) : title\">\r\n <button\r\n mat-icon-button\r\n panelLeftButton\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.sidenav.goBack' | translate\"\r\n *ngIf=\"tool\"\r\n >\r\n <mat-icon svgIcon=\"arrow-back\"></mat-icon>\r\n </button>\r\n\r\n <button\r\n mat-icon-button\r\n panelRightButton\r\n tooltip-position=\"below\"\r\n matTooltipShowDelay=\"500\"\r\n [matTooltip]=\"'igo.context.sidenav.mainMenu' | translate\"\r\n *ngIf=\"tool\"\r\n >\r\n <mat-icon svgIcon=\"menu\"></mat-icon>\r\n </button>\r\n </igo-panel>\r\n </div>\r\n\r\n <div igoFlexibleFill class=\"igo-content\">\r\n <igo-panel [title]=\"featureTitle\" *ngIf=\"feature && media !== 'mobile'\">\r\n <button\r\n mat-icon-button\r\n panelLeftButton\r\n class=\"igo-icon-button\"\r\n (click)=\"toggleTopPanel()\"\r\n >\r\n <mat-icon\r\n [svgIcon]=\"\r\n ['collapsed', 'initial'].indexOf(topPanel.state) >= 0\r\n ? 'arrow_downward'\r\n : 'arrow_upward'\r\n \"\r\n ></mat-icon>\r\n </button>\r\n\r\n <button\r\n mat-icon-button\r\n panelRightButton\r\n class=\"igo-icon-button\"\r\n (click)=\"zoomToFeatureExtent()\"\r\n *ngIf=\"feature.geometry\"\r\n >\r\n <mat-icon svgIcon=\"zoom-in\"></mat-icon>\r\n </button>\r\n\r\n <igo-feature-details\r\n [feature]=\"feature\"\r\n *ngIf=\"['collapsed', 'initial'].indexOf(topPanel.state) >= 0\"\r\n >\r\n </igo-feature-details>\r\n </igo-panel>\r\n </div>\r\n </igo-flexible>\r\n </div>\r\n</mat-sidenav>\r\n", styles: [":host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}:host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{border-top-width:1px;border-top-style:solid;border-top-color:#0003}mat-sidenav{-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd}:host{background-color:#fff}:host ::ng-deep mat-sidenav{z-index:3!important}mat-sidenav{width:400px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){mat-sidenav{width:calc(100% - 45px)}}.igo-sidenav-content{margin-top:50px;height:calc(100% - 50px)}igo-feature-details ::ng-deep table{width:100%}\n"] }]
3517
- }], ctorParameters: function () { return [{ type: i1$4.Title }]; }, propDecorators: { map: [{
3489
+ args: [{ selector: 'igo-sidenav', standalone: true, imports: [
3490
+ MatSidenavModule,
3491
+ FlexibleComponent,
3492
+ PanelComponent,
3493
+ NgIf,
3494
+ MatButtonModule,
3495
+ MatTooltipModule,
3496
+ MatIconModule,
3497
+ FeatureDetailsComponent,
3498
+ TranslateModule
3499
+ ], template: "<mat-sidenav #sidenav igoSidenavShim mode=\"side\" [opened]=\"opened\">\n <div class=\"igo-sidenav-content\">\n <igo-flexible\n #topPanel\n initial=\"50%\"\n initialMobile=\"100%\"\n expanded=\"calc(100% - 58px)\"\n [state]=\"topPanelState\"\n >\n <div class=\"igo-content\">\n <igo-panel [title]=\"tool ? (tool.title | translate) : title\">\n <button\n mat-icon-button\n panelLeftButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.sidenav.goBack' | translate\"\n *ngIf=\"tool\"\n >\n <mat-icon svgIcon=\"arrow-back\"></mat-icon>\n </button>\n\n <button\n mat-icon-button\n panelRightButton\n tooltip-position=\"below\"\n matTooltipShowDelay=\"500\"\n [matTooltip]=\"'igo.context.sidenav.mainMenu' | translate\"\n *ngIf=\"tool\"\n >\n <mat-icon svgIcon=\"menu\"></mat-icon>\n </button>\n </igo-panel>\n </div>\n\n <div igoFlexibleFill class=\"igo-content\">\n <igo-panel [title]=\"featureTitle\" *ngIf=\"feature && media !== 'mobile'\">\n <button\n mat-icon-button\n panelLeftButton\n class=\"igo-icon-button\"\n (click)=\"toggleTopPanel()\"\n >\n <mat-icon\n [svgIcon]=\"\n ['collapsed', 'initial'].indexOf(topPanel.state) >= 0\n ? 'arrow_downward'\n : 'arrow_upward'\n \"\n ></mat-icon>\n </button>\n\n <button\n mat-icon-button\n panelRightButton\n class=\"igo-icon-button\"\n (click)=\"zoomToFeatureExtent()\"\n *ngIf=\"feature.geometry\"\n >\n <mat-icon svgIcon=\"zoom-in\"></mat-icon>\n </button>\n\n <igo-feature-details\n [feature]=\"feature\"\n *ngIf=\"['collapsed', 'initial'].indexOf(topPanel.state) >= 0\"\n >\n </igo-feature-details>\n </igo-panel>\n </div>\n </igo-flexible>\n </div>\n</mat-sidenav>\n", styles: [":host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}:host ::ng-deep .igo-flexible-fill .igo-container,.igo-sidenav-content .igo-flexible-fill .igo-container{border-top-width:1px;border-top-style:solid;border-top-color:#0003}mat-sidenav{-moz-box-shadow:2px 0px 2px 0px #dddddd;-webkit-box-shadow:2px 0px 2px 0px #dddddd;-o-box-shadow:2px 0px 2px 0px #dddddd;box-shadow:2px 0 2px #ddd}:host{background-color:#fff}:host ::ng-deep mat-sidenav{z-index:3!important}mat-sidenav{width:400px}@media only screen and (orientation:portrait) and (max-width: 599px),only screen and (orientation:landscape) and (max-width: 959px){mat-sidenav{width:calc(100% - 45px)}}.igo-sidenav-content{margin-top:50px;height:calc(100% - 50px)}igo-feature-details ::ng-deep table{width:100%}\n"] }]
3500
+ }], ctorParameters: () => [{ type: i1$5.Title }], propDecorators: { map: [{
3518
3501
  type: Input
3519
3502
  }], opened: [{
3520
3503
  type: Input
@@ -3528,77 +3511,51 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3528
3511
  type: Input
3529
3512
  }] } });
3530
3513
 
3514
+ /**
3515
+ * @deprecated import the SidenavComponent directly
3516
+ */
3531
3517
  class IgoSidenavModule {
3532
3518
  static forRoot() {
3533
3519
  return {
3534
3520
  ngModule: IgoSidenavModule
3535
3521
  };
3536
3522
  }
3537
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoSidenavModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3538
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: IgoSidenavModule, declarations: [SidenavComponent], imports: [CommonModule,
3539
- MatIconModule,
3540
- MatButtonModule,
3541
- MatSidenavModule,
3542
- MatTooltipModule,
3543
- IgoLanguageModule,
3544
- IgoPanelModule,
3545
- IgoFlexibleModule,
3546
- IgoFeatureModule,
3547
- IgoContextManagerModule], exports: [SidenavComponent] });
3548
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoSidenavModule, imports: [CommonModule,
3549
- MatIconModule,
3550
- MatButtonModule,
3551
- MatSidenavModule,
3552
- MatTooltipModule,
3553
- IgoLanguageModule,
3554
- IgoPanelModule,
3555
- IgoFlexibleModule,
3556
- IgoFeatureModule,
3557
- IgoContextManagerModule] });
3523
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoSidenavModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3524
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IgoSidenavModule, imports: [SidenavComponent], exports: [SidenavComponent] });
3525
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoSidenavModule, imports: [SidenavComponent] });
3558
3526
  }
3559
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoSidenavModule, decorators: [{
3527
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoSidenavModule, decorators: [{
3560
3528
  type: NgModule,
3561
3529
  args: [{
3562
- imports: [
3563
- CommonModule,
3564
- MatIconModule,
3565
- MatButtonModule,
3566
- MatSidenavModule,
3567
- MatTooltipModule,
3568
- IgoLanguageModule,
3569
- IgoPanelModule,
3570
- IgoFlexibleModule,
3571
- IgoFeatureModule,
3572
- IgoContextManagerModule
3573
- ],
3574
- exports: [SidenavComponent],
3575
- declarations: [SidenavComponent]
3530
+ imports: [SidenavComponent],
3531
+ exports: [SidenavComponent]
3576
3532
  }]
3577
3533
  }] });
3578
3534
 
3535
+ /**
3536
+ * @deprecated import the components/directives directly or SHARE_MAP_DIRECTIVES for the set
3537
+ */
3579
3538
  class IgoContextModule {
3580
3539
  static forRoot() {
3581
3540
  return {
3582
- ngModule: IgoContextModule,
3583
- providers: []
3541
+ ngModule: IgoContextModule
3584
3542
  };
3585
3543
  }
3586
- static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3587
- static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.2.12", ngImport: i0, type: IgoContextModule, imports: [MatInputModule, MatFormFieldModule, MatMenuModule], exports: [IgoContextImportExportModule,
3544
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
3545
+ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.2.4", ngImport: i0, type: IgoContextModule, exports: [IgoContextImportExportModule,
3588
3546
  IgoContextManagerModule,
3589
3547
  IgoContextMapButtonModule,
3590
3548
  IgoShareMapModule,
3591
3549
  IgoSidenavModule] });
3592
- static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextModule, imports: [MatInputModule, MatFormFieldModule, MatMenuModule, IgoContextImportExportModule,
3550
+ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextModule, imports: [IgoContextImportExportModule,
3593
3551
  IgoContextManagerModule,
3594
3552
  IgoContextMapButtonModule,
3595
3553
  IgoShareMapModule,
3596
3554
  IgoSidenavModule] });
3597
3555
  }
3598
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: IgoContextModule, decorators: [{
3556
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.2.4", ngImport: i0, type: IgoContextModule, decorators: [{
3599
3557
  type: NgModule,
3600
3558
  args: [{
3601
- imports: [MatInputModule, MatFormFieldModule, MatMenuModule],
3602
3559
  declarations: [],
3603
3560
  exports: [
3604
3561
  IgoContextImportExportModule,
@@ -3610,6 +3567,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3610
3567
  }]
3611
3568
  }] });
3612
3569
 
3570
+ const CONTEXT_MANAGER_DIRECTIVES = [
3571
+ ContextListComponent,
3572
+ ContextListBindingDirective,
3573
+ ContextItemComponent,
3574
+ ContextFormComponent,
3575
+ ContextEditComponent,
3576
+ ContextEditBindingDirective,
3577
+ ContextPermissionsComponent,
3578
+ ContextPermissionsBindingDirective,
3579
+ MapContextDirective,
3580
+ LayerContextDirective
3581
+ ];
3582
+
3583
+ const CONTEXT_MAP_BUTTON_DIRECTIVES = [
3584
+ BookmarkButtonComponent,
3585
+ BookmarkDialogComponent,
3586
+ PoiButtonComponent,
3587
+ UserButtonComponent
3588
+ ];
3589
+
3590
+ const SHARE_MAP_DIRECTIVES = [
3591
+ ShareMapComponent,
3592
+ ShareMapUrlComponent,
3593
+ ShareMapApiComponent
3594
+ ];
3595
+
3613
3596
  /*
3614
3597
  * Public API Surface of context
3615
3598
  */
@@ -3618,5 +3601,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
3618
3601
  * Generated bundle index. Do not edit.
3619
3602
  */
3620
3603
 
3621
- export { BookmarkButtonComponent, BookmarkDialogComponent, ContextEditBindingDirective, ContextEditComponent, ContextExportService, ContextFormComponent, ContextImportExportComponent, ContextImportService, ContextItemComponent, ContextListBindingDirective, ContextListComponent, ContextPermissionsBindingDirective, ContextPermissionsComponent, ContextService, ExportError, ExportInvalidFileError, ExportNothingToExportError, IgoContextImportExportModule, IgoContextManagerModule, IgoContextMapButtonModule, IgoContextModule, IgoShareMapModule, IgoSidenavModule, ImportError, ImportInvalidFileError, ImportNothingToImportError, ImportSRSError, ImportSizeError, ImportUnreadableFileError, LayerContextDirective, MapContextDirective, PoiButtonComponent, PoiDialogComponent, PoiService, Scope, ShareMapApiComponent, ShareMapComponent, ShareMapService, ShareMapUrlComponent, SidenavComponent, TypePermission, UserButtonComponent, UserDialogComponent, addContextToContextList, addImportedFeaturesStyledToMap, addImportedFeaturesToMap, computeLayerTitleFromFile, getFileExtension, handleFileExportError, handleFileExportSuccess, handleFileImportError, handleFileImportSuccess, handleInvalidFileImportError, handleNothingToExportError, handleNothingToImportError, handleSizeFileImportError, handleUnreadbleFileImportError };
3604
+ export { BookmarkButtonComponent, BookmarkDialogComponent, CONTEXT_MANAGER_DIRECTIVES, CONTEXT_MAP_BUTTON_DIRECTIVES, ContextEditBindingDirective, ContextEditComponent, ContextExportService, ContextFormComponent, ContextImportExportComponent, ContextImportService, ContextItemComponent, ContextListBindingDirective, ContextListComponent, ContextPermissionsBindingDirective, ContextPermissionsComponent, ContextService, ExportError, ExportInvalidFileError, ExportNothingToExportError, IgoContextImportExportModule, IgoContextManagerModule, IgoContextMapButtonModule, IgoContextModule, IgoShareMapModule, IgoSidenavModule, ImportError, ImportInvalidFileError, ImportNothingToImportError, ImportSRSError, ImportSizeError, ImportUnreadableFileError, LayerContextDirective, MapContextDirective, PoiButtonComponent, PoiDialogComponent, PoiService, SHARE_MAP_DIRECTIVES, Scope, ShareMapApiComponent, ShareMapComponent, ShareMapService, ShareMapUrlComponent, SidenavComponent, TypePermission, UserButtonComponent, UserDialogComponent, addContextToContextList, addImportedFeaturesStyledToMap, addImportedFeaturesToMap, computeLayerTitleFromFile, getFileExtension, handleFileExportError, handleFileExportSuccess, handleFileImportError, handleFileImportSuccess, handleInvalidFileImportError, handleNothingToExportError, handleNothingToImportError, handleSizeFileImportError, handleUnreadbleFileImportError };
3622
3605
  //# sourceMappingURL=igo2-context.mjs.map