@provoly/dashboard 0.14.5 → 0.14.7

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 (127) hide show
  1. package/admin/admin.module.d.ts +2 -1
  2. package/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.d.ts +5 -2
  3. package/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.d.ts +7 -3
  4. package/admin/i18n/en.translations.d.ts +15 -0
  5. package/admin/i18n/fr.translations.d.ts +15 -0
  6. package/components/metadata-editor/metadata-editor.component.d.ts +3 -1
  7. package/esm2022/admin/admin.module.mjs +8 -4
  8. package/esm2022/admin/components/admin-classes/admin-classes-form/admin-classes-form.component.mjs +3 -3
  9. package/esm2022/admin/components/admin-classes/admin-classes-view/admin-attributes-form/admin-attributes-form.component.mjs +19 -14
  10. package/esm2022/admin/components/admin-dataset/admin-select-dataset/admin-select-dataset.component.mjs +1 -1
  11. package/esm2022/admin/components/admin-dataset/shared/admin-form-dataset/admin-form-dataset.component.mjs +3 -5
  12. package/esm2022/admin/components/admin-fields/admin-fields-form/admin-fields-form.component.mjs +23 -12
  13. package/esm2022/admin/components/admin-user/admin-user-select/admin-user-select.component.mjs +1 -1
  14. package/esm2022/admin/i18n/en.translations.mjs +17 -2
  15. package/esm2022/admin/i18n/fr.translations.mjs +19 -4
  16. package/esm2022/components/metadata-editor/metadata-editor.component.mjs +30 -9
  17. package/esm2022/dataset/components/dataset-detail/dataset-detail.component.mjs +4 -3
  18. package/esm2022/import/components/import.component.mjs +12 -5
  19. package/esm2022/import/i18n/en.translations.mjs +3 -2
  20. package/esm2022/import/i18n/fr.translations.mjs +3 -2
  21. package/esm2022/import/import.module.mjs +7 -4
  22. package/esm2022/import/store/import.actions.mjs +1 -1
  23. package/esm2022/import/store/import.effects.mjs +2 -2
  24. package/esm2022/import/store/import.service.mjs +3 -2
  25. package/esm2022/lib/core/components/translate-id/translate-id.pipe.mjs +9 -9
  26. package/esm2022/lib/core/i18n/en.translations.mjs +4 -2
  27. package/esm2022/lib/core/i18n/fr.translations.mjs +4 -2
  28. package/esm2022/lib/core/model/admin-api.model.mjs +66 -14
  29. package/esm2022/lib/core/model/widget-map-manifest.interface.mjs +1 -1
  30. package/esm2022/lib/core/store/field/field.interface.mjs +10 -1
  31. package/esm2022/lib/core/symbol/symbol.service.mjs +7 -3
  32. package/esm2022/lib/core/toolbox/toolbox-manifest.service.mjs +17 -1
  33. package/esm2022/lib/core/toolbox/toolbox-menu.service.mjs +2 -1
  34. package/esm2022/lib/dashboard/components/dashboard.component.mjs +5 -5
  35. package/esm2022/lib/dashboard/components/widgets/header/widget-header.component.mjs +9 -3
  36. package/esm2022/lib/dashboard/public-api.mjs +2 -2
  37. package/esm2022/lib/dashboard/store/dashboard.actions.mjs +6 -2
  38. package/esm2022/lib/dashboard/store/dashboard.effects.mjs +20 -13
  39. package/esm2022/lib/dashboard/store/dashboard.reducers.mjs +11 -2
  40. package/esm2022/lib/dashboard/store/dashboard.selectors.mjs +4 -2
  41. package/esm2022/lib/dashboard/store/manifest.service.mjs +11 -1
  42. package/esm2022/lib/dashboard/store/wms.service.mjs +54 -0
  43. package/esm2022/pipeline/components/pipeline-list/pipeline-list.component.mjs +25 -13
  44. package/esm2022/pipeline/pipeline.module.mjs +8 -4
  45. package/esm2022/presentation/components/add-edit-presentation/add-edit-presentation.component.mjs +19 -3
  46. package/esm2022/presentation/presentation.module.mjs +8 -4
  47. package/esm2022/presentation/style/css.component.mjs +2 -2
  48. package/esm2022/supervision/store/supervision.reducer.mjs +2 -7
  49. package/esm2022/widgets/widget-map/component/widget-map-layer.service.mjs +35 -3
  50. package/esm2022/widgets/widget-map/component/widget-map.component.mjs +99 -39
  51. package/esm2022/widgets/widget-map/i18n/en.translations.mjs +3 -2
  52. package/esm2022/widgets/widget-map/i18n/fr.translations.mjs +3 -2
  53. package/esm2022/widgets/widget-map/pipe/widget-map-legend-url.pipe.mjs +3 -4
  54. package/esm2022/widgets/widget-map/public-api.mjs +1 -2
  55. package/esm2022/widgets/widget-map/utils/widget-map.utils.mjs +14 -8
  56. package/esm2022/widgets/widget-map/utils/xml-utils.class.mjs +20 -1
  57. package/fesm2022/provoly-dashboard-admin.mjs +81 -33
  58. package/fesm2022/provoly-dashboard-admin.mjs.map +1 -1
  59. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs +29 -8
  60. package/fesm2022/provoly-dashboard-components-metadata-editor.mjs.map +1 -1
  61. package/fesm2022/provoly-dashboard-dataset.mjs +3 -2
  62. package/fesm2022/provoly-dashboard-dataset.mjs.map +1 -1
  63. package/fesm2022/provoly-dashboard-import.mjs +23 -10
  64. package/fesm2022/provoly-dashboard-import.mjs.map +1 -1
  65. package/fesm2022/provoly-dashboard-pipeline.mjs +27 -11
  66. package/fesm2022/provoly-dashboard-pipeline.mjs.map +1 -1
  67. package/fesm2022/provoly-dashboard-presentation.mjs +26 -7
  68. package/fesm2022/provoly-dashboard-presentation.mjs.map +1 -1
  69. package/fesm2022/provoly-dashboard-supervision.mjs +1 -6
  70. package/fesm2022/provoly-dashboard-supervision.mjs.map +1 -1
  71. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs +380 -323
  72. package/fesm2022/provoly-dashboard-widgets-widget-map.mjs.map +1 -1
  73. package/fesm2022/provoly-dashboard.mjs +266 -133
  74. package/fesm2022/provoly-dashboard.mjs.map +1 -1
  75. package/import/components/import.component.d.ts +1 -0
  76. package/import/i18n/en.translations.d.ts +1 -0
  77. package/import/i18n/fr.translations.d.ts +1 -0
  78. package/import/import.module.d.ts +2 -1
  79. package/import/store/import.actions.d.ts +2 -0
  80. package/import/store/import.service.d.ts +1 -1
  81. package/lib/core/components/translate-id/translate-id.pipe.d.ts +1 -1
  82. package/lib/core/i18n/en.translations.d.ts +2 -0
  83. package/lib/core/i18n/fr.translations.d.ts +2 -0
  84. package/lib/core/model/admin-api.model.d.ts +1 -0
  85. package/lib/core/model/widget-map-manifest.interface.d.ts +12 -1
  86. package/lib/core/store/field/field.interface.d.ts +1 -0
  87. package/lib/core/symbol/symbol.service.d.ts +1 -1
  88. package/lib/dashboard/components/dashboard.component.d.ts +1 -1
  89. package/lib/dashboard/components/widgets/header/widget-header.component.d.ts +3 -1
  90. package/lib/dashboard/public-api.d.ts +1 -1
  91. package/lib/dashboard/store/dashboard.actions.d.ts +31 -0
  92. package/lib/dashboard/store/dashboard.effects.d.ts +9 -3
  93. package/lib/dashboard/store/dashboard.reducers.d.ts +4 -0
  94. package/lib/dashboard/store/dashboard.selectors.d.ts +5 -0
  95. package/lib/dashboard/store/manifest.service.d.ts +2 -0
  96. package/{widgets/widget-map/component → lib/dashboard/store}/wms.service.d.ts +4 -4
  97. package/package.json +30 -30
  98. package/pipeline/components/pipeline-list/pipeline-list.component.d.ts +1 -0
  99. package/pipeline/pipeline.module.d.ts +2 -1
  100. package/presentation/components/add-edit-presentation/add-edit-presentation.component.d.ts +3 -0
  101. package/presentation/presentation.module.d.ts +2 -1
  102. package/presentation/style/_o-pry-new-presentation.scss +18 -5
  103. package/schematics/migration.json +5 -0
  104. package/schematics/ng-update/utils/replaceStrings.function.d.ts +7 -0
  105. package/schematics/ng-update/utils/replaceStrings.function.js +15 -0
  106. package/schematics/ng-update/utils/replaceStrings.function.js.map +1 -0
  107. package/schematics/ng-update/version-0-13/index.spec.js +11 -0
  108. package/schematics/ng-update/version-0-13/index.spec.js.map +1 -1
  109. package/schematics/ng-update/version-0-14/index.d.ts +2 -0
  110. package/schematics/ng-update/version-0-14/index.js +49 -0
  111. package/schematics/ng-update/version-0-14/index.js.map +1 -0
  112. package/schematics/ng-update/version-0-14/index.spec.d.ts +1 -0
  113. package/schematics/ng-update/version-0-14/index.spec.js +51 -0
  114. package/schematics/ng-update/version-0-14/index.spec.js.map +1 -0
  115. package/styles/components/_m-context-menu.scss +4 -0
  116. package/styles/components/_o-pry-admin-classes-customize.scss +48 -0
  117. package/widgets/widget-map/component/widget-map-layer.service.d.ts +6 -1
  118. package/widgets/widget-map/component/widget-map.component.d.ts +14 -9
  119. package/widgets/widget-map/i18n/en.translations.d.ts +1 -0
  120. package/widgets/widget-map/i18n/fr.translations.d.ts +1 -0
  121. package/widgets/widget-map/pipe/widget-map-legend-url.pipe.d.ts +4 -3
  122. package/widgets/widget-map/public-api.d.ts +0 -1
  123. package/widgets/widget-map/utils/widget-map.utils.d.ts +2 -5
  124. package/widgets/widget-map/utils/xml-utils.class.d.ts +1 -0
  125. package/esm2022/lib/dashboard/store/geocoding.service.mjs +0 -44
  126. package/esm2022/widgets/widget-map/component/wms.service.mjs +0 -67
  127. package/lib/dashboard/store/geocoding.service.d.ts +0 -56
@@ -274,6 +274,7 @@ const enTranslations$1 = {
274
274
  heatmap: 'Heatmap',
275
275
  bubblemap: 'Bubbles',
276
276
  markermap: 'Markers',
277
+ simplemap: 'Map',
277
278
  map: 'Map',
278
279
  table: 'Table',
279
280
  detail: 'Detail',
@@ -396,7 +397,8 @@ const enTranslations$1 = {
396
397
  upload: 'Add image',
397
398
  next: 'Next',
398
399
  back: 'Back',
399
- filterByType: 'Filter by type'
400
+ filterByType: 'Filter by type',
401
+ editMetadata: 'Edit metadata'
400
402
  },
401
403
  snack: {
402
404
  default: 'Vega encountered an error using your data and settings.',
@@ -603,6 +605,7 @@ const frTranslations$1 = {
603
605
  heatmap: 'Fréquentation',
604
606
  bubblemap: 'Bulles',
605
607
  markermap: 'Marqueurs',
608
+ simplemap: 'Carte',
606
609
  map: 'Carte',
607
610
  table: 'Tableau',
608
611
  detail: 'Détail',
@@ -725,7 +728,8 @@ const frTranslations$1 = {
725
728
  upload: 'Ajouter une image',
726
729
  next: 'Suivant',
727
730
  back: 'Retour',
728
- filterByType: 'Filtrer par type'
731
+ filterByType: 'Filtrer par type',
732
+ editMetadata: 'Modifier la métadonnée'
729
733
  },
730
734
  snack: {
731
735
  default: 'Vega a rencontré une erreur en utilisant vos données et paramétrage.',
@@ -1309,7 +1313,11 @@ const DashboardActions = {
1309
1313
  resetWmsFeatures: createAction('[Widget map] Reset Wms layer features'),
1310
1314
  getWmsFeatures: createAction('[Widget map] Get Wms layer features', props()),
1311
1315
  addWmsFeatures: createAction('[Widget map] Set Wms layer features', props()),
1312
- updateDisplayOptions: createAction('[Dashboard/Display] Update displayed dashboard management features', props())
1316
+ updateDisplayOptions: createAction('[Dashboard/Display] Update displayed dashboard management features', props()),
1317
+ getCapability: createAction('[Widget map] Get Wms capability', props()),
1318
+ updateCapability: createAction('[Widget map] Store Wms capability', props()),
1319
+ addManifestMetadata: createAction('[Dashboard] Add manifest metadata', props()),
1320
+ deleteManifestMetadata: createAction('[Dashboard] Add manifest metadata', props())
1313
1321
  };
1314
1322
 
1315
1323
  const ConfigActions = {
@@ -1973,9 +1981,13 @@ class SymbolService {
1973
1981
  const imageSet = this.imageCache[item.oClass] ?? this.imageCache['default'];
1974
1982
  return imageSet[bordered ? 'borderedImages' : 'images'][ruleMatch];
1975
1983
  }
1976
- getSymbolOfClass(id) {
1984
+ getSymbolOfClass(id, noDefault = false) {
1977
1985
  const definitionsForClass = (this.definitions[id] || []).find((def) => def.isDefault);
1978
- return this.downloadAsUrl(definitionsForClass?.iconUrl ?? DEFAULT_ICON_URL);
1986
+ const url = definitionsForClass?.iconUrl ?? DEFAULT_ICON_URL;
1987
+ if (url === DEFAULT_ICON_URL && noDefault) {
1988
+ return Promise.resolve(null);
1989
+ }
1990
+ return this.downloadAsUrl(url);
1979
1991
  }
1980
1992
  downloadAsUrl(url) {
1981
1993
  return new Promise((resolve) => {
@@ -3316,7 +3328,7 @@ class TranslateIdPipe {
3316
3328
  ]), filter(([oDs, iconDefs, classes]) => !!oDs), map(([oDs, iconDefs, classes]) => {
3317
3329
  if (oDs.sourceType === 'dataset') {
3318
3330
  return {
3319
- promise: this.symbolService.getSymbolOfClass(oDs.oClass),
3331
+ promise: this.symbolService.getSymbolOfClass(oDs.oClass, config.noDefault),
3320
3332
  url: ''
3321
3333
  };
3322
3334
  }
@@ -3324,22 +3336,23 @@ class TranslateIdPipe {
3324
3336
  switch (oDs.request.type) {
3325
3337
  case NamedQueryTypes.MONO_CLASS:
3326
3338
  return {
3327
- promise: this.symbolService.getSymbolOfClass(oDs.request.oClass),
3339
+ promise: this.symbolService.getSymbolOfClass(oDs.request.oClass, config.noDefault),
3328
3340
  url: ''
3329
3341
  };
3330
- case NamedQueryTypes.MULTI_CLASS:
3342
+ default:
3331
3343
  if (oDs.request.fullSearch) {
3332
3344
  return { promise: null, url: 'assets/svgs/save-line.svg' };
3333
3345
  }
3334
3346
  else {
3335
- return { promise: null, url: 'assets/svgs/graph.svg' };
3347
+ return {
3348
+ promise: null,
3349
+ url: oDs.request.type === NamedQueryTypes.MULTI_CLASS ? 'assets/svgs/save-line.svg' : ''
3350
+ };
3336
3351
  }
3337
- default:
3338
- return { promise: null, url: DEFAULT_ICON_URL };
3339
3352
  }
3340
3353
  }
3341
3354
  else {
3342
- return { promise: null, url: DEFAULT_ICON_URL };
3355
+ return { promise: null, url: '' };
3343
3356
  }
3344
3357
  }), mergeMap((info) => {
3345
3358
  if (info.promise) {
@@ -3866,6 +3879,7 @@ const datasourceFilters = createSelector(feature$4, (state) => state?.manifests.
3866
3879
  : {});
3867
3880
  const wmsFeatures = createSelector(feature$4, (state) => state?.wmsFeatures);
3868
3881
  const displayOptions = createSelector(feature$4, (state) => state?.display);
3882
+ const capabilities = createSelector(feature$4, (state) => state?.capabilities);
3869
3883
  const DashboardSelectors = {
3870
3884
  feature: feature$4,
3871
3885
  rank,
@@ -3901,7 +3915,8 @@ const DashboardSelectors = {
3901
3915
  filters,
3902
3916
  datasourceFilters,
3903
3917
  wmsFeatures,
3904
- displayOptions
3918
+ displayOptions,
3919
+ capabilities
3905
3920
  };
3906
3921
 
3907
3922
  const SearchActions = {
@@ -4352,6 +4367,15 @@ var FieldType;
4352
4367
  FieldType["OCLASS"] = "mod\u00E8le de donn\u00E9es";
4353
4368
  FieldType["DATASET"] = "test";
4354
4369
  })(FieldType || (FieldType = {}));
4370
+ const GeometricFieldTypes = [
4371
+ FieldType.POINT,
4372
+ FieldType.MULTIPOINT,
4373
+ FieldType.LINE,
4374
+ FieldType.MULTILINE,
4375
+ FieldType.POLYGON,
4376
+ FieldType.MULTIPOLYGON,
4377
+ FieldType.GEOMETRYCOLLECTION
4378
+ ];
4355
4379
 
4356
4380
  const hiddenFieldText = '*********';
4357
4381
  class ItemUtils {
@@ -6457,6 +6481,63 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
6457
6481
  }]
6458
6482
  }], ctorParameters: function () { return [{ type: i1.Store }]; } });
6459
6483
 
6484
+ var DisplayMode;
6485
+ (function (DisplayMode) {
6486
+ DisplayMode["CONSULT"] = "CONSULT";
6487
+ DisplayMode["CREATE"] = "CREATE";
6488
+ DisplayMode["EDIT"] = "EDIT";
6489
+ DisplayMode["SEARCH"] = "SEARCH";
6490
+ DisplayMode["CUSTOM"] = "CUSTOM";
6491
+ })(DisplayMode || (DisplayMode = {}));
6492
+ function getDisplayOptions(mode) {
6493
+ const displayOptions = {
6494
+ presentationTitle: true,
6495
+ search: false,
6496
+ catalog: false,
6497
+ useFilters: false,
6498
+ toolbox: {
6499
+ save_view: false,
6500
+ save_view_as: false,
6501
+ filter_settings: false,
6502
+ new_tab: false,
6503
+ clear_view: false,
6504
+ default_size: false,
6505
+ refresh_datasets: false,
6506
+ automate_refresh: false
6507
+ }
6508
+ };
6509
+ switch (mode) {
6510
+ case DisplayMode.CONSULT:
6511
+ return {
6512
+ ...displayOptions,
6513
+ useFilters: true,
6514
+ toolbox: { ...displayOptions.toolbox, save_view_as: true, refresh_datasets: true }
6515
+ };
6516
+ case DisplayMode.SEARCH:
6517
+ return {
6518
+ ...displayOptions,
6519
+ presentationTitle: false,
6520
+ search: true,
6521
+ toolbox: { ...displayOptions.toolbox, clear_view: true, default_size: true, refresh_datasets: true }
6522
+ };
6523
+ case DisplayMode.EDIT:
6524
+ case DisplayMode.CREATE:
6525
+ return {
6526
+ ...displayOptions,
6527
+ catalog: true,
6528
+ useFilters: true,
6529
+ toolbox: {
6530
+ ...Object.keys(displayOptions.toolbox).reduce((acc, key) => {
6531
+ acc[key] = true;
6532
+ return acc;
6533
+ }, {})
6534
+ }
6535
+ };
6536
+ default:
6537
+ return displayOptions;
6538
+ }
6539
+ }
6540
+
6460
6541
  const MIME_TYPE_RESULTSET = 'application/resultset';
6461
6542
 
6462
6543
  const DEFAULT_GAP_PX = 2;
@@ -6730,63 +6811,6 @@ function solveCollisions(candidateWidget, initialWidgetManifestList, dashboardMa
6730
6811
  }
6731
6812
  }
6732
6813
 
6733
- var DisplayMode;
6734
- (function (DisplayMode) {
6735
- DisplayMode["CONSULT"] = "CONSULT";
6736
- DisplayMode["CREATE"] = "CREATE";
6737
- DisplayMode["EDIT"] = "EDIT";
6738
- DisplayMode["SEARCH"] = "SEARCH";
6739
- DisplayMode["CUSTOM"] = "CUSTOM";
6740
- })(DisplayMode || (DisplayMode = {}));
6741
- function getDisplayOptions(mode) {
6742
- const displayOptions = {
6743
- presentationTitle: true,
6744
- search: false,
6745
- catalog: false,
6746
- useFilters: false,
6747
- toolbox: {
6748
- save_view: false,
6749
- save_view_as: false,
6750
- filter_settings: false,
6751
- new_tab: false,
6752
- clear_view: false,
6753
- default_size: false,
6754
- refresh_datasets: false,
6755
- automate_refresh: false
6756
- }
6757
- };
6758
- switch (mode) {
6759
- case DisplayMode.CONSULT:
6760
- return {
6761
- ...displayOptions,
6762
- useFilters: true,
6763
- toolbox: { ...displayOptions.toolbox, save_view_as: true, refresh_datasets: true }
6764
- };
6765
- case DisplayMode.SEARCH:
6766
- return {
6767
- ...displayOptions,
6768
- presentationTitle: false,
6769
- search: true,
6770
- toolbox: { ...displayOptions.toolbox, clear_view: true, default_size: true, refresh_datasets: true }
6771
- };
6772
- case DisplayMode.EDIT:
6773
- case DisplayMode.CREATE:
6774
- return {
6775
- ...displayOptions,
6776
- catalog: true,
6777
- useFilters: true,
6778
- toolbox: {
6779
- ...Object.keys(displayOptions.toolbox).reduce((acc, key) => {
6780
- acc[key] = true;
6781
- return acc;
6782
- }, {})
6783
- }
6784
- };
6785
- default:
6786
- return displayOptions;
6787
- }
6788
- }
6789
-
6790
6814
  class BaseWidgetComponent extends SubscriptionnerDirective {
6791
6815
  set widgetIndex(index) {
6792
6816
  this.widgetIndex$.next(index);
@@ -7417,7 +7441,7 @@ class DashboardComponent extends SubscriptionnerDirective {
7417
7441
  }));
7418
7442
  this.targetIndexes$ = this.store.select(DashboardSelectors.targetTenantsIndexes);
7419
7443
  this.subscriptions.add(this.store.select(DashboardSelectors.dashboardCellParams).subscribe((params) => (this.dashboardParams = params)));
7420
- this.windowManifest$ = this.store.select(DashboardSelectors.windowManifest).pipe(combineLatestWith(this.staticDashboard$), switchMap(([windowManifest, staticDashboard]) => (!staticDashboard ? of(windowManifest) : of(staticDashboard))), distinctUntilChanged((p, c) => equal(p, c)), map$1((_wManifest) => {
7444
+ this.windowManifest$ = this.store.select(DashboardSelectors.windowManifest).pipe(combineLatestWith(this.staticDashboard$), switchMap(([windowManifest, staticDashboard]) => (!staticDashboard ? of(windowManifest) : of(staticDashboard))), map$1((_wManifest) => {
7421
7445
  const wManifest = JSON.parse(JSON.stringify(_wManifest));
7422
7446
  if (wManifest.grid?.layout && wManifest.grid.layout !== DashboardGridLayout.MANUAL) {
7423
7447
  // Complete with placeholders
@@ -7439,7 +7463,7 @@ class DashboardComponent extends SubscriptionnerDirective {
7439
7463
  }
7440
7464
  }
7441
7465
  return wManifest;
7442
- }));
7466
+ }), distinctUntilChanged((p, c) => equal(p, c)));
7443
7467
  this.nonFillerWidgets$ = this.windowManifest$.pipe(map$1((wManifest) => wManifest.widgets.filter((w) => w.type !== 'filler').length));
7444
7468
  this.subscriptions.add(this.staticDashboard$.subscribe((manifest) => {
7445
7469
  if (!!manifest) {
@@ -7869,7 +7893,7 @@ class DashboardComponent extends SubscriptionnerDirective {
7869
7893
  this.confirmRemoveRef = undefined;
7870
7894
  }
7871
7895
  trackWidgets(index, widgetManifest) {
7872
- return widgetManifest.type + '-' + widgetManifest.datasource;
7896
+ return index + '-' + widgetManifest.type + '-' + JSON.stringify(widgetManifest.layout);
7873
7897
  }
7874
7898
  updateInstance(widgetIndex, $event) {
7875
7899
  this.widgetsInstances[widgetIndex] = $event;
@@ -7947,6 +7971,22 @@ class ToolboxManifestService extends SubscriptionnerDirective {
7947
7971
  super();
7948
7972
  this.store = store;
7949
7973
  this.initialManifests$ = new BehaviorSubject({
7974
+ simplemap: {
7975
+ type: 'map',
7976
+ layout: {
7977
+ x: 1,
7978
+ y: 1,
7979
+ height: 2,
7980
+ width: 3
7981
+ },
7982
+ options: {
7983
+ fit: true,
7984
+ automaticLayers: true,
7985
+ layers: [],
7986
+ tooltipMode: TooltipMode.CLICK
7987
+ },
7988
+ datasource: USE_CURRENT_RESULTSET
7989
+ },
7950
7990
  heatmap: {
7951
7991
  type: 'map',
7952
7992
  layout: {
@@ -8271,6 +8311,7 @@ const defaultMenuStructure = [
8271
8311
  label: '@pry.toolbox.sub.map',
8272
8312
  opened: false,
8273
8313
  sub: [
8314
+ { icon: 'map', label: '@pry.toolbox.simplemap', type: 'simplemap' },
8274
8315
  { icon: 'bubble-chart-line', label: '@pry.toolbox.heatmap', type: 'heatmap' },
8275
8316
  { icon: 'bulles', label: '@pry.toolbox.bubblemap', type: 'bubblemap' },
8276
8317
  { icon: 'place', label: '@pry.toolbox.markermap', type: 'markermap' }
@@ -8485,19 +8526,71 @@ const META_OPTIONS = [
8485
8526
  const FIELD_UUID = '8b4907be-6159-486a-8502-c5e2139bbc27';
8486
8527
  const DEFAULT_CATEGORY_UUID = 'cf666d66-838f-4d92-a4d2-a315df21fac9';
8487
8528
  const FIELD_OPTIONS = [
8488
- { varType: FieldType.INTEGER, translation: '@pry.admin.fields.fieldType.int' },
8489
- { varType: FieldType.LONG, translation: '@pry.admin.fields.fieldType.long' },
8490
- { varType: FieldType.DECIMAL, translation: '@pry.admin.fields.fieldType.decimal' },
8491
- { varType: FieldType.STRING, translation: '@pry.admin.fields.fieldType.string' },
8492
- { varType: FieldType.KEYWORD, translation: '@pry.admin.fields.fieldType.keyword' },
8493
- { varType: FieldType.INSTANT, translation: '@pry.admin.fields.fieldType.instant' },
8494
- { varType: FieldType.RAW, translation: '@pry.admin.fields.fieldType.raw' },
8495
- { varType: FieldType.POINT, translation: '@pry.admin.fields.fieldType.point' },
8496
- { varType: FieldType.MULTIPOINT, translation: '@pry.admin.fields.fieldType.multipoint' },
8497
- { varType: FieldType.LINE, translation: '@pry.admin.fields.fieldType.line' },
8498
- { varType: FieldType.MULTILINE, translation: '@pry.admin.fields.fieldType.multiline' },
8499
- { varType: FieldType.POLYGON, translation: '@pry.admin.fields.fieldType.polygon' },
8500
- { varType: FieldType.MULTIPOLYGON, translation: '@pry.admin.fields.fieldType.multipolygon' }
8529
+ {
8530
+ varType: FieldType.INTEGER,
8531
+ translation: '@pry.admin.fields.fieldType.int',
8532
+ description: '@pry.admin.fields.fieldType.information.int'
8533
+ },
8534
+ {
8535
+ varType: FieldType.LONG,
8536
+ translation: '@pry.admin.fields.fieldType.long',
8537
+ description: '@pry.admin.fields.fieldType.information.long'
8538
+ },
8539
+ {
8540
+ varType: FieldType.DECIMAL,
8541
+ translation: '@pry.admin.fields.fieldType.decimal',
8542
+ description: '@pry.admin.fields.fieldType.information.decimal'
8543
+ },
8544
+ {
8545
+ varType: FieldType.STRING,
8546
+ translation: '@pry.admin.fields.fieldType.string',
8547
+ description: '@pry.admin.fields.fieldType.information.string'
8548
+ },
8549
+ {
8550
+ varType: FieldType.KEYWORD,
8551
+ translation: '@pry.admin.fields.fieldType.keyword',
8552
+ description: '@pry.admin.fields.fieldType.information.keyword'
8553
+ },
8554
+ {
8555
+ varType: FieldType.INSTANT,
8556
+ translation: '@pry.admin.fields.fieldType.instant',
8557
+ description: '@pry.admin.fields.fieldType.information.instant'
8558
+ },
8559
+ {
8560
+ varType: FieldType.RAW,
8561
+ translation: '@pry.admin.fields.fieldType.raw',
8562
+ description: '@pry.admin.fields.fieldType.information.raw'
8563
+ },
8564
+ {
8565
+ varType: FieldType.POINT,
8566
+ translation: '@pry.admin.fields.fieldType.point',
8567
+ description: '@pry.admin.fields.fieldType.information.point'
8568
+ },
8569
+ {
8570
+ varType: FieldType.MULTIPOINT,
8571
+ translation: '@pry.admin.fields.fieldType.multipoint',
8572
+ description: '@pry.admin.fields.fieldType.information.multipoint'
8573
+ },
8574
+ {
8575
+ varType: FieldType.LINE,
8576
+ translation: '@pry.admin.fields.fieldType.line',
8577
+ description: '@pry.admin.fields.fieldType.information.line'
8578
+ },
8579
+ {
8580
+ varType: FieldType.MULTILINE,
8581
+ translation: '@pry.admin.fields.fieldType.multiline',
8582
+ description: '@pry.admin.fields.fieldType.information.multiline'
8583
+ },
8584
+ {
8585
+ varType: FieldType.POLYGON,
8586
+ translation: '@pry.admin.fields.fieldType.polygon',
8587
+ description: '@pry.admin.fields.fieldType.information.polygon'
8588
+ },
8589
+ {
8590
+ varType: FieldType.MULTIPOLYGON,
8591
+ translation: '@pry.admin.fields.fieldType.multipolygon',
8592
+ description: '@pry.admin.fields.fieldType.information.multipolygon'
8593
+ }
8501
8594
  ];
8502
8595
 
8503
8596
  const httpErrorOptions = {
@@ -8998,6 +9091,7 @@ class PryWidgetHeaderComponent extends SubscriptionnerDirective {
8998
9091
  this.windowManifest = null;
8999
9092
  this.menu = false;
9000
9093
  this.type = LibraryTypes.ILLUSTRATION;
9094
+ this.DEFAULT_ICON_URL = DEFAULT_ICON_URL;
9001
9095
  this.windowManifest$ = this.store
9002
9096
  .select(DashboardSelectors.windowManifest)
9003
9097
  .pipe(distinctUntilChanged$1((p, c) => equal(p, c)));
@@ -9307,12 +9401,15 @@ class PryWidgetHeaderComponent extends SubscriptionnerDirective {
9307
9401
  this.selectedDataSourceIds$.next(ids);
9308
9402
  }
9309
9403
  }
9404
+ isGeo(ds) {
9405
+ return ds.metadata?.find((m) => m.metadataDef.name === GeoMetadata.NAMESPACE) !== undefined;
9406
+ }
9310
9407
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryWidgetHeaderComponent, deps: [{ token: i1.Store }, { token: i2$1.Overlay }, { token: i0.ViewContainerRef }, { token: ToolboxMenuService }], target: i0.ɵɵFactoryTarget.Component }); }
9311
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: { manifest: "manifest", additionalOptions: "additionalOptions", headerOptions: "headerOptions", displayCount: "displayCount", datasourceIds: "datasourceIds", widgetIndex: "widgetIndex" }, outputs: { manifestModified: "manifestModified" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }, { propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "toggle", first: true, predicate: ["toggle"], descendants: true, read: TemplateRef }, { propertyName: "overlayMenu", first: true, predicate: ["overlayMenu"], descendants: true, read: TemplateRef }, { propertyName: "overlayCatalog", first: true, predicate: ["overlayCatalog"], descendants: true, read: TemplateRef }, { propertyName: "overlaySpot", first: true, predicate: ["overlaySpot"], descendants: true, read: TemplateRef }, { propertyName: "togglePanel", first: true, predicate: ["togglePanel"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "validate", first: true, predicate: ["validate"], descendants: true }, { propertyName: "validateCatalog", first: true, predicate: ["validateCatalog"], descendants: true }, { propertyName: "cancel", first: true, predicate: ["cancel"], descendants: true }, { propertyName: "crossCatalog", first: true, predicate: ["crossCatalog"], descendants: true }, { propertyName: "inputCatalog", first: true, predicate: ["inputCatalog"], descendants: true }, { propertyName: "menuList", first: true, predicate: ["menuList"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-widget__header\">\n <div class=\"o-widget__header__content\">\n <h2 class=\"o-widget__header__content__title\" *ngIf=\"(manifest$ | async)?.title; else querySelector\">\n {{ (manifest$ | async)?.title }}\n </h2>\n <ng-template #querySelector>\n <div *ngFor=\"let ds of usedDatasources$ | async\" class=\"o-widget__header__content__query\">\n <pry-nq-color-selector [disabled]=\"true\" [datasource]=\"ds\"></pry-nq-color-selector>\n <img\n [height]=\"20\"\n [src]=\"ds.id | translateId : { type: 'datasource', output: 'icon' } | async\"\n [width]=\"20\"\n alt=\"\"\n class=\"o-widget__header__content__query__icon\"\n />\n <h3 class=\"o-widget__header__content__query__name\">{{ ds.name }}</h3>\n <h3 class=\"o-widget__header__content__query__name\" *ngIf=\"displayCount\">\n ({{ (selectedDataSourceIds$ | async) ?? [] | resultSetSize | async }})\n </h3>\n </div>\n <div *ngIf=\"((usedDatasources$ | async) ?? []).length === 0\" class=\"o-widget__header__content__no-data\">\n <h2 class=\"o-widget__header__content__title\">{{ '@pry.widget.noData' | i18n }}</h2>\n </div>\n </ng-template>\n </div>\n <div class=\"m-btn-group\" *ngIf=\"!(lockedView$ | async) && displaySettings(headerOptions)\">\n <button\n type=\"button\"\n id=\"dialog_Menu\"\n aria-controls=\"menu\"\n [attr.aria-expanded]=\"this.menu\"\n #togglePanel\n class=\"a-btn a-btn--more\"\n (click)=\"menuOpen($event)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"more_horiz\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.openMenuWidget' | i18n }}</span>\n </button>\n </div>\n</div>\n\n<ng-template #overlayMenu>\n <div class=\"m-context-menu\">\n <ul\n class=\"m-context-menu__list\"\n #menuList\n id=\"menu\"\n role=\"menu\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Menu\"\n (keydown.arrowDown)=\"onArrowDown()\"\n (keydown.arrowUp)=\"onArrowUp()\"\n (keydown.escape)=\"menuOpen()\"\n >\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n *ngIf=\"(manifest$ | async)?.datasource && displayOption(headerOptions, 'datasourceSelection')\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n id=\"toggleActions\"\n (click)=\"toggleCombo()\"\n *pryAccess=\"{ module: 'dashboard', page: 'widget', action: 'select_named_query' }\"\n class=\"a-btn\"\n [pryTooltip]=\"infoTooltip\"\n aria-describedby=\"infoTooltip_widgetHeader\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"stack-fill\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'parameters')\">\n <ng-content></ng-content>\n </li>\n <ng-container *ngIf=\"displayOption(headerOptions, 'window')\">\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let targetIndex of targetIndexes$ | async\">\n <button\n type=\"button\"\n (click)=\"moveInNewWindow(_widgetIndex, targetIndex)\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"launch\"></pry-icon>\n {{\n (targetIndex !== -1 ? '@pry.widget.target.existing' : '@pry.widget.target.new')\n | i18n : { targetIndex: this.targetIndex + 1 }\n }}\n </button>\n </li>\n </ng-container>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"hasGrid && displayOption(headerOptions, 'changeSpot')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n (click)=\"toggleChangeSpot()\"\n class=\"a-btn\"\n tabindex=\"-1\"\n [pryTooltip]=\"infoChangeSpot\"\n aria-describedby=\"infoTooltip_changeSpot\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"move\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'maximize')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"maximize(_widgetIndex)\"\n class=\"a-btn\"\n (keydown.escape)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"fullscreen\"></pry-icon>\n {{ '@pry.widget.target.maximize' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'addToCatalog')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleCatalog()\"\n class=\"a-btn\"\n [pryTooltip]=\"infoAdd\"\n aria-describedby=\"infoAdd_widgetHeader\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"library_add\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'delete')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleRemoveConfirm($event)\"\n class=\"a-btn\"\n [pryTooltip]=\"infoRemove\"\n aria-describedby=\"infoRemove_widgetHeader\"\n (keydown.tab)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"delete\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let option of additionalOptions\">\n <button\n type=\"button\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"executeAction(option)\"\n [disabled]=\"isActionDisabled(option)\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" [iconSvg]=\"option.icon\"></pry-icon>\n {{ option.label | i18n }}\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n (keydown.escape)=\"cancelRemoveConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (click)=\"cancelRemoveConfirm()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\" (keydown.tab)=\"focusCrossElement()\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #infoTooltip>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltip_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoRemove>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoRemove_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoAdd>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoAdd_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoChangeSpot>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoAdd_changeSpot\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #template>\n <pry-datasource-selector\n (cancel)=\"toggleCombo()\"\n (validated)=\"emitManifest()\"\n (nextTab)=\"focusInputCatalog()\"\n (previousTab)=\"focusValidation()\"\n (datasourcesChanged)=\"datasourcesChanged($event)\"\n [datasourceIds]=\"(selectedDataSourceIds$ | async) ?? []\"\n ></pry-datasource-selector>\n</ng-template>\n\n<ng-template #overlayCatalog>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Catalog\"\n (keydown.escape)=\"toggleCatalog()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.defineCatalog' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n (keydown.shift.tab)=\"focusValidation()\"\n #crossCatalog\n (click)=\"toggleCatalog()\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"name\">{{ '@pry.toolbox.catalog.label' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.name\" id=\"name\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"description\">{{ '@pry.toolbox.catalog.description' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.description\" id=\"description\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <pry-select-image\n [iconUrl]=\"catalogInfo.image\"\n (changed)=\"catalogInfo.image = $event\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n (click)=\"toggleCatalog()\"\n #cancel\n (keydown.tab)=\"disableValidation()\"\n class=\"a-btn a-btn--secondary\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n #validateCatalog\n (click)=\"confirmCatalog()\"\n [disabled]=\"!toolboxMenuService.isValidForCatalog(catalogInfo.name)\"\n class=\"a-btn a-btn--primary\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #overlaySpot>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.tooltip.changeSpot' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"toggleChangeSpot()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <ng-container *ngFor=\"let place of places; let i = index\">\n <ng-container *ngIf=\"currentPlacementIndex !== i\">\n <button type=\"button\" class=\"a-btn\" (click)=\"moveToPlace(place)\">\n <span>{{ '@pry.widget.tooltip.spotName' | i18n : { place: i + 1 } }}</span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryNqColorSelectorComponent, selector: "pry-nq-color-selector", inputs: ["disabled", "datasource"], outputs: ["colorChanged"] }, { kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: PrySelectImageComponent, selector: "pry-select-image", inputs: ["iconUrl", "size", "mode"], outputs: ["toggled", "changed"] }, { kind: "directive", type: PryTooltipDirective, selector: "[pryTooltip]", inputs: ["pryTooltip", "styleReversed", "pryTooltipContext", "pryTooltipPosition", "pryTooltipShowDelay"] }, { kind: "component", type: DatasourceSelectorComponent, selector: "pry-datasource-selector", inputs: ["manifest", "datasourceIds"], outputs: ["cancel", "validated", "previousTab", "nextTab", "datasourcesChanged"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: ResultSetSizePipe, name: "resultSetSize" }] }); }
9408
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.6", type: PryWidgetHeaderComponent, selector: "pry-widget-header", inputs: { manifest: "manifest", additionalOptions: "additionalOptions", headerOptions: "headerOptions", displayCount: "displayCount", datasourceIds: "datasourceIds", widgetIndex: "widgetIndex" }, outputs: { manifestModified: "manifestModified" }, viewQueries: [{ propertyName: "template", first: true, predicate: ["template"], descendants: true, read: TemplateRef }, { propertyName: "templateModal", first: true, predicate: ["templateModal"], descendants: true, read: TemplateRef }, { propertyName: "toggle", first: true, predicate: ["toggle"], descendants: true, read: TemplateRef }, { propertyName: "overlayMenu", first: true, predicate: ["overlayMenu"], descendants: true, read: TemplateRef }, { propertyName: "overlayCatalog", first: true, predicate: ["overlayCatalog"], descendants: true, read: TemplateRef }, { propertyName: "overlaySpot", first: true, predicate: ["overlaySpot"], descendants: true, read: TemplateRef }, { propertyName: "togglePanel", first: true, predicate: ["togglePanel"], descendants: true }, { propertyName: "cross", first: true, predicate: ["cross"], descendants: true }, { propertyName: "validate", first: true, predicate: ["validate"], descendants: true }, { propertyName: "validateCatalog", first: true, predicate: ["validateCatalog"], descendants: true }, { propertyName: "cancel", first: true, predicate: ["cancel"], descendants: true }, { propertyName: "crossCatalog", first: true, predicate: ["crossCatalog"], descendants: true }, { propertyName: "inputCatalog", first: true, predicate: ["inputCatalog"], descendants: true }, { propertyName: "menuList", first: true, predicate: ["menuList"], descendants: true }], usesInheritance: true, ngImport: i0, template: "<div class=\"o-widget__header\">\n <div class=\"o-widget__header__content\">\n <h2 class=\"o-widget__header__content__title\" *ngIf=\"(manifest$ | async)?.title; else querySelector\">\n {{ (manifest$ | async)?.title }}\n </h2>\n <ng-template #querySelector>\n <div *ngFor=\"let ds of usedDatasources$ | async\" class=\"o-widget__header__content__query\">\n <pry-nq-color-selector [disabled]=\"true\" [datasource]=\"ds\"></pry-nq-color-selector>\n <ng-container\n *ngIf=\"ds.id | translateId : { type: 'datasource', output: 'icon', noDefault: true } | async as url\"\n >\n <img [height]=\"20\" [src]=\"url\" [width]=\"20\" alt=\"\" class=\"o-widget__header__content__query__icon\" />\n </ng-container>\n <h3 class=\"o-widget__header__content__query__name\">{{ ds.name }}</h3>\n <h3 class=\"o-widget__header__content__query__name\" *ngIf=\"displayCount && !isGeo(ds)\">\n ({{ [ds.id] | resultSetSize | async }})\n </h3>\n </div>\n <div *ngIf=\"((usedDatasources$ | async) ?? []).length === 0\" class=\"o-widget__header__content__no-data\">\n <h2 class=\"o-widget__header__content__title\">{{ '@pry.widget.noData' | i18n }}</h2>\n </div>\n </ng-template>\n </div>\n <div class=\"m-btn-group\" *ngIf=\"!(lockedView$ | async) && displaySettings(headerOptions)\">\n <button\n type=\"button\"\n id=\"dialog_Menu\"\n aria-controls=\"menu\"\n [attr.aria-expanded]=\"this.menu\"\n #togglePanel\n class=\"a-btn a-btn--more\"\n (click)=\"menuOpen($event)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"more_horiz\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.openMenuWidget' | i18n }}</span>\n </button>\n </div>\n</div>\n\n<ng-template #overlayMenu>\n <div class=\"m-context-menu\">\n <ul\n class=\"m-context-menu__list\"\n #menuList\n id=\"menu\"\n role=\"menu\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Menu\"\n (keydown.arrowDown)=\"onArrowDown()\"\n (keydown.arrowUp)=\"onArrowUp()\"\n (keydown.escape)=\"menuOpen()\"\n >\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n *ngIf=\"(manifest$ | async)?.datasource && displayOption(headerOptions, 'datasourceSelection')\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n id=\"toggleActions\"\n (click)=\"toggleCombo()\"\n *pryAccess=\"{ module: 'dashboard', page: 'widget', action: 'select_named_query' }\"\n class=\"a-btn\"\n [pryTooltip]=\"infoTooltip\"\n aria-describedby=\"infoTooltip_widgetHeader\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"stack-fill\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'parameters')\">\n <ng-content></ng-content>\n </li>\n <ng-container *ngIf=\"displayOption(headerOptions, 'window')\">\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let targetIndex of targetIndexes$ | async\">\n <button\n type=\"button\"\n (click)=\"moveInNewWindow(_widgetIndex, targetIndex)\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"launch\"></pry-icon>\n {{\n (targetIndex !== -1 ? '@pry.widget.target.existing' : '@pry.widget.target.new')\n | i18n : { targetIndex: this.targetIndex + 1 }\n }}\n </button>\n </li>\n </ng-container>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"hasGrid && displayOption(headerOptions, 'changeSpot')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n (click)=\"toggleChangeSpot()\"\n class=\"a-btn\"\n tabindex=\"-1\"\n [pryTooltip]=\"infoChangeSpot\"\n aria-describedby=\"infoTooltip_changeSpot\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"move\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'maximize')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"maximize(_widgetIndex)\"\n class=\"a-btn\"\n (keydown.escape)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"fullscreen\"></pry-icon>\n {{ '@pry.widget.target.maximize' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'addToCatalog')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleCatalog()\"\n class=\"a-btn\"\n [pryTooltip]=\"infoAdd\"\n aria-describedby=\"infoAdd_widgetHeader\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"library_add\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'delete')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleRemoveConfirm($event)\"\n class=\"a-btn\"\n [pryTooltip]=\"infoRemove\"\n aria-describedby=\"infoRemove_widgetHeader\"\n (keydown.tab)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"delete\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let option of additionalOptions\">\n <button\n type=\"button\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"executeAction(option)\"\n [disabled]=\"isActionDisabled(option)\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" [iconSvg]=\"option.icon\"></pry-icon>\n {{ option.label | i18n }}\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n (keydown.escape)=\"cancelRemoveConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (click)=\"cancelRemoveConfirm()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\" (keydown.tab)=\"focusCrossElement()\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #infoTooltip>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltip_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoRemove>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoRemove_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoAdd>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoAdd_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoChangeSpot>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoAdd_changeSpot\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #template>\n <pry-datasource-selector\n (cancel)=\"toggleCombo()\"\n (validated)=\"emitManifest()\"\n (nextTab)=\"focusInputCatalog()\"\n (previousTab)=\"focusValidation()\"\n (datasourcesChanged)=\"datasourcesChanged($event)\"\n [datasourceIds]=\"(selectedDataSourceIds$ | async) ?? []\"\n ></pry-datasource-selector>\n</ng-template>\n\n<ng-template #overlayCatalog>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Catalog\"\n (keydown.escape)=\"toggleCatalog()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.defineCatalog' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n (keydown.shift.tab)=\"focusValidation()\"\n #crossCatalog\n (click)=\"toggleCatalog()\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"name\">{{ '@pry.toolbox.catalog.label' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.name\" id=\"name\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"description\">{{ '@pry.toolbox.catalog.description' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.description\" id=\"description\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <pry-select-image\n [iconUrl]=\"catalogInfo.image\"\n (changed)=\"catalogInfo.image = $event\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n (click)=\"toggleCatalog()\"\n #cancel\n (keydown.tab)=\"disableValidation()\"\n class=\"a-btn a-btn--secondary\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n #validateCatalog\n (click)=\"confirmCatalog()\"\n [disabled]=\"!toolboxMenuService.isValidForCatalog(catalogInfo.name)\"\n class=\"a-btn a-btn--primary\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #overlaySpot>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.tooltip.changeSpot' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"toggleChangeSpot()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <ng-container *ngFor=\"let place of places; let i = index\">\n <ng-container *ngIf=\"currentPlacementIndex !== i\">\n <button type=\"button\" class=\"a-btn\" (click)=\"moveToPlace(place)\">\n <span>{{ '@pry.widget.tooltip.spotName' | i18n : { place: i + 1 } }}</span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n", dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i3$1.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: i3$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3$1.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: PryIconComponent, selector: "pry-icon", inputs: ["color", "iconSvg", "animation", "iconImage", "alt", "width", "height", "classes"] }, { kind: "component", type: PryNqColorSelectorComponent, selector: "pry-nq-color-selector", inputs: ["disabled", "datasource"], outputs: ["colorChanged"] }, { kind: "directive", type: PryAccessDirective, selector: "[pryAccess]", inputs: ["pryAccess"] }, { kind: "component", type: PrySelectImageComponent, selector: "pry-select-image", inputs: ["iconUrl", "size", "mode"], outputs: ["toggled", "changed"] }, { kind: "directive", type: PryTooltipDirective, selector: "[pryTooltip]", inputs: ["pryTooltip", "styleReversed", "pryTooltipContext", "pryTooltipPosition", "pryTooltipShowDelay"] }, { kind: "component", type: DatasourceSelectorComponent, selector: "pry-datasource-selector", inputs: ["manifest", "datasourceIds"], outputs: ["cancel", "validated", "previousTab", "nextTab", "datasourcesChanged"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }, { kind: "pipe", type: TranslateIdPipe, name: "translateId" }, { kind: "pipe", type: I18nPipe, name: "i18n" }, { kind: "pipe", type: ResultSetSizePipe, name: "resultSetSize" }] }); }
9312
9409
  }
9313
9410
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: PryWidgetHeaderComponent, decorators: [{
9314
9411
  type: Component,
9315
- args: [{ selector: 'pry-widget-header', template: "<div class=\"o-widget__header\">\n <div class=\"o-widget__header__content\">\n <h2 class=\"o-widget__header__content__title\" *ngIf=\"(manifest$ | async)?.title; else querySelector\">\n {{ (manifest$ | async)?.title }}\n </h2>\n <ng-template #querySelector>\n <div *ngFor=\"let ds of usedDatasources$ | async\" class=\"o-widget__header__content__query\">\n <pry-nq-color-selector [disabled]=\"true\" [datasource]=\"ds\"></pry-nq-color-selector>\n <img\n [height]=\"20\"\n [src]=\"ds.id | translateId : { type: 'datasource', output: 'icon' } | async\"\n [width]=\"20\"\n alt=\"\"\n class=\"o-widget__header__content__query__icon\"\n />\n <h3 class=\"o-widget__header__content__query__name\">{{ ds.name }}</h3>\n <h3 class=\"o-widget__header__content__query__name\" *ngIf=\"displayCount\">\n ({{ (selectedDataSourceIds$ | async) ?? [] | resultSetSize | async }})\n </h3>\n </div>\n <div *ngIf=\"((usedDatasources$ | async) ?? []).length === 0\" class=\"o-widget__header__content__no-data\">\n <h2 class=\"o-widget__header__content__title\">{{ '@pry.widget.noData' | i18n }}</h2>\n </div>\n </ng-template>\n </div>\n <div class=\"m-btn-group\" *ngIf=\"!(lockedView$ | async) && displaySettings(headerOptions)\">\n <button\n type=\"button\"\n id=\"dialog_Menu\"\n aria-controls=\"menu\"\n [attr.aria-expanded]=\"this.menu\"\n #togglePanel\n class=\"a-btn a-btn--more\"\n (click)=\"menuOpen($event)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"more_horiz\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.openMenuWidget' | i18n }}</span>\n </button>\n </div>\n</div>\n\n<ng-template #overlayMenu>\n <div class=\"m-context-menu\">\n <ul\n class=\"m-context-menu__list\"\n #menuList\n id=\"menu\"\n role=\"menu\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Menu\"\n (keydown.arrowDown)=\"onArrowDown()\"\n (keydown.arrowUp)=\"onArrowUp()\"\n (keydown.escape)=\"menuOpen()\"\n >\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n *ngIf=\"(manifest$ | async)?.datasource && displayOption(headerOptions, 'datasourceSelection')\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n id=\"toggleActions\"\n (click)=\"toggleCombo()\"\n *pryAccess=\"{ module: 'dashboard', page: 'widget', action: 'select_named_query' }\"\n class=\"a-btn\"\n [pryTooltip]=\"infoTooltip\"\n aria-describedby=\"infoTooltip_widgetHeader\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"stack-fill\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'parameters')\">\n <ng-content></ng-content>\n </li>\n <ng-container *ngIf=\"displayOption(headerOptions, 'window')\">\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let targetIndex of targetIndexes$ | async\">\n <button\n type=\"button\"\n (click)=\"moveInNewWindow(_widgetIndex, targetIndex)\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"launch\"></pry-icon>\n {{\n (targetIndex !== -1 ? '@pry.widget.target.existing' : '@pry.widget.target.new')\n | i18n : { targetIndex: this.targetIndex + 1 }\n }}\n </button>\n </li>\n </ng-container>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"hasGrid && displayOption(headerOptions, 'changeSpot')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n (click)=\"toggleChangeSpot()\"\n class=\"a-btn\"\n tabindex=\"-1\"\n [pryTooltip]=\"infoChangeSpot\"\n aria-describedby=\"infoTooltip_changeSpot\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"move\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'maximize')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"maximize(_widgetIndex)\"\n class=\"a-btn\"\n (keydown.escape)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"fullscreen\"></pry-icon>\n {{ '@pry.widget.target.maximize' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'addToCatalog')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleCatalog()\"\n class=\"a-btn\"\n [pryTooltip]=\"infoAdd\"\n aria-describedby=\"infoAdd_widgetHeader\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"library_add\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'delete')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleRemoveConfirm($event)\"\n class=\"a-btn\"\n [pryTooltip]=\"infoRemove\"\n aria-describedby=\"infoRemove_widgetHeader\"\n (keydown.tab)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"delete\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let option of additionalOptions\">\n <button\n type=\"button\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"executeAction(option)\"\n [disabled]=\"isActionDisabled(option)\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" [iconSvg]=\"option.icon\"></pry-icon>\n {{ option.label | i18n }}\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n (keydown.escape)=\"cancelRemoveConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (click)=\"cancelRemoveConfirm()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\" (keydown.tab)=\"focusCrossElement()\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #infoTooltip>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltip_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoRemove>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoRemove_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoAdd>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoAdd_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoChangeSpot>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoAdd_changeSpot\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #template>\n <pry-datasource-selector\n (cancel)=\"toggleCombo()\"\n (validated)=\"emitManifest()\"\n (nextTab)=\"focusInputCatalog()\"\n (previousTab)=\"focusValidation()\"\n (datasourcesChanged)=\"datasourcesChanged($event)\"\n [datasourceIds]=\"(selectedDataSourceIds$ | async) ?? []\"\n ></pry-datasource-selector>\n</ng-template>\n\n<ng-template #overlayCatalog>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Catalog\"\n (keydown.escape)=\"toggleCatalog()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.defineCatalog' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n (keydown.shift.tab)=\"focusValidation()\"\n #crossCatalog\n (click)=\"toggleCatalog()\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"name\">{{ '@pry.toolbox.catalog.label' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.name\" id=\"name\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"description\">{{ '@pry.toolbox.catalog.description' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.description\" id=\"description\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <pry-select-image\n [iconUrl]=\"catalogInfo.image\"\n (changed)=\"catalogInfo.image = $event\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n (click)=\"toggleCatalog()\"\n #cancel\n (keydown.tab)=\"disableValidation()\"\n class=\"a-btn a-btn--secondary\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n #validateCatalog\n (click)=\"confirmCatalog()\"\n [disabled]=\"!toolboxMenuService.isValidForCatalog(catalogInfo.name)\"\n class=\"a-btn a-btn--primary\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #overlaySpot>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.tooltip.changeSpot' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"toggleChangeSpot()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <ng-container *ngFor=\"let place of places; let i = index\">\n <ng-container *ngIf=\"currentPlacementIndex !== i\">\n <button type=\"button\" class=\"a-btn\" (click)=\"moveToPlace(place)\">\n <span>{{ '@pry.widget.tooltip.spotName' | i18n : { place: i + 1 } }}</span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n" }]
9412
+ args: [{ selector: 'pry-widget-header', template: "<div class=\"o-widget__header\">\n <div class=\"o-widget__header__content\">\n <h2 class=\"o-widget__header__content__title\" *ngIf=\"(manifest$ | async)?.title; else querySelector\">\n {{ (manifest$ | async)?.title }}\n </h2>\n <ng-template #querySelector>\n <div *ngFor=\"let ds of usedDatasources$ | async\" class=\"o-widget__header__content__query\">\n <pry-nq-color-selector [disabled]=\"true\" [datasource]=\"ds\"></pry-nq-color-selector>\n <ng-container\n *ngIf=\"ds.id | translateId : { type: 'datasource', output: 'icon', noDefault: true } | async as url\"\n >\n <img [height]=\"20\" [src]=\"url\" [width]=\"20\" alt=\"\" class=\"o-widget__header__content__query__icon\" />\n </ng-container>\n <h3 class=\"o-widget__header__content__query__name\">{{ ds.name }}</h3>\n <h3 class=\"o-widget__header__content__query__name\" *ngIf=\"displayCount && !isGeo(ds)\">\n ({{ [ds.id] | resultSetSize | async }})\n </h3>\n </div>\n <div *ngIf=\"((usedDatasources$ | async) ?? []).length === 0\" class=\"o-widget__header__content__no-data\">\n <h2 class=\"o-widget__header__content__title\">{{ '@pry.widget.noData' | i18n }}</h2>\n </div>\n </ng-template>\n </div>\n <div class=\"m-btn-group\" *ngIf=\"!(lockedView$ | async) && displaySettings(headerOptions)\">\n <button\n type=\"button\"\n id=\"dialog_Menu\"\n aria-controls=\"menu\"\n [attr.aria-expanded]=\"this.menu\"\n #togglePanel\n class=\"a-btn a-btn--more\"\n (click)=\"menuOpen($event)\"\n >\n <pry-icon [height]=\"25\" [width]=\"25\" iconSvg=\"more_horiz\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.action.openMenuWidget' | i18n }}</span>\n </button>\n </div>\n</div>\n\n<ng-template #overlayMenu>\n <div class=\"m-context-menu\">\n <ul\n class=\"m-context-menu__list\"\n #menuList\n id=\"menu\"\n role=\"menu\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Menu\"\n (keydown.arrowDown)=\"onArrowDown()\"\n (keydown.arrowUp)=\"onArrowUp()\"\n (keydown.escape)=\"menuOpen()\"\n >\n <li\n class=\"m-context-menu__list__item\"\n role=\"none\"\n *ngIf=\"(manifest$ | async)?.datasource && displayOption(headerOptions, 'datasourceSelection')\"\n >\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n id=\"toggleActions\"\n (click)=\"toggleCombo()\"\n *pryAccess=\"{ module: 'dashboard', page: 'widget', action: 'select_named_query' }\"\n class=\"a-btn\"\n [pryTooltip]=\"infoTooltip\"\n aria-describedby=\"infoTooltip_widgetHeader\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"stack-fill\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'parameters')\">\n <ng-content></ng-content>\n </li>\n <ng-container *ngIf=\"displayOption(headerOptions, 'window')\">\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let targetIndex of targetIndexes$ | async\">\n <button\n type=\"button\"\n (click)=\"moveInNewWindow(_widgetIndex, targetIndex)\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"launch\"></pry-icon>\n {{\n (targetIndex !== -1 ? '@pry.widget.target.existing' : '@pry.widget.target.new')\n | i18n : { targetIndex: this.targetIndex + 1 }\n }}\n </button>\n </li>\n </ng-container>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"hasGrid && displayOption(headerOptions, 'changeSpot')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n (click)=\"toggleChangeSpot()\"\n class=\"a-btn\"\n tabindex=\"-1\"\n [pryTooltip]=\"infoChangeSpot\"\n aria-describedby=\"infoTooltip_changeSpot\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"move\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'maximize')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"maximize(_widgetIndex)\"\n class=\"a-btn\"\n (keydown.escape)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"fullscreen\"></pry-icon>\n {{ '@pry.widget.target.maximize' | i18n }}\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'addToCatalog')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleCatalog()\"\n class=\"a-btn\"\n [pryTooltip]=\"infoAdd\"\n aria-describedby=\"infoAdd_widgetHeader\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"library_add\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngIf=\"displayOption(headerOptions, 'delete')\">\n <button\n type=\"button\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"toggleRemoveConfirm($event)\"\n class=\"a-btn\"\n [pryTooltip]=\"infoRemove\"\n aria-describedby=\"infoRemove_widgetHeader\"\n (keydown.tab)=\"menuOpen()\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" iconSvg=\"delete\"></pry-icon>\n <span>{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </button>\n </li>\n <li class=\"m-context-menu__list__item\" role=\"none\" *ngFor=\"let option of additionalOptions\">\n <button\n type=\"button\"\n class=\"a-btn\"\n role=\"menuitem\"\n tabindex=\"-1\"\n (click)=\"executeAction(option)\"\n [disabled]=\"isActionDisabled(option)\"\n >\n <pry-icon [height]=\"17\" [width]=\"17\" [iconSvg]=\"option.icon\"></pry-icon>\n {{ option.label | i18n }}\n </button>\n </li>\n </ul>\n </div>\n</ng-template>\n\n<ng-template #templateModal>\n <div\n class=\"o-modal\"\n (keydown.escape)=\"cancelRemoveConfirm()\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog confirm delete presentation\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\" id=\"dialog_title\">\n {{ '@pry.widget.modalTitle' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" #cross (click)=\"cancelRemoveConfirm()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-btn-group\">\n <button type=\"button\" (click)=\"cancelRemoveConfirm()\" class=\"a-btn a-btn--secondary\">\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button type=\"submit\" (click)=\"confirmRemove()\" class=\"a-btn a-btn--primary\" (keydown.tab)=\"focusCrossElement()\">\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #infoTooltip>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoTooltip_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.readSearch' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoRemove>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoRemove_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.deleteWidget' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoAdd>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoAdd_widgetHeader\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.catalogWidget' | i18n }}</span>\n </div>\n</ng-template>\n<ng-template #infoChangeSpot>\n <div class=\"m-tooltip\" role=\"tooltip\" id=\"infoAdd_changeSpot\" aria-hidden=\"true\">\n <span class=\"m-tooltip__text\">{{ '@pry.widget.tooltip.changeSpot' | i18n }}</span>\n </div>\n</ng-template>\n\n<ng-template #template>\n <pry-datasource-selector\n (cancel)=\"toggleCombo()\"\n (validated)=\"emitManifest()\"\n (nextTab)=\"focusInputCatalog()\"\n (previousTab)=\"focusValidation()\"\n (datasourcesChanged)=\"datasourcesChanged($event)\"\n [datasourceIds]=\"(selectedDataSourceIds$ | async) ?? []\"\n ></pry-datasource-selector>\n</ng-template>\n\n<ng-template #overlayCatalog>\n <div\n class=\"o-modal\"\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby=\"dialog_Catalog\"\n (keydown.escape)=\"toggleCatalog()\"\n >\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.defineCatalog' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button\n class=\"a-btn a-btn--icon-only\"\n (keydown.shift.tab)=\"focusValidation()\"\n #crossCatalog\n (click)=\"toggleCatalog()\"\n >\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"name\">{{ '@pry.toolbox.catalog.label' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.name\" id=\"name\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <label class=\"a-label\" for=\"description\">{{ '@pry.toolbox.catalog.description' | i18n }}</label>\n <input [(ngModel)]=\"catalogInfo.description\" id=\"description\" type=\"text\" class=\"a-form-field\" required />\n </div>\n <div class=\"m-form-label-field\">\n <pry-select-image\n [iconUrl]=\"catalogInfo.image\"\n (changed)=\"catalogInfo.image = $event\"\n [mode]=\"type\"\n ></pry-select-image>\n </div>\n <div class=\"m-btn-group\">\n <button\n type=\"button\"\n (click)=\"toggleCatalog()\"\n #cancel\n (keydown.tab)=\"disableValidation()\"\n class=\"a-btn a-btn--secondary\"\n >\n {{ '@pry.toolbox.manifest.close' | i18n }}\n </button>\n <button\n type=\"submit\"\n #validateCatalog\n (click)=\"confirmCatalog()\"\n [disabled]=\"!toolboxMenuService.isValidForCatalog(catalogInfo.name)\"\n class=\"a-btn a-btn--primary\"\n (keydown.tab)=\"focusCrossElement()\"\n >\n {{ '@pry.toolbox.manifest.validate' | i18n }}\n </button>\n </div>\n </div>\n</ng-template>\n\n<ng-template #overlaySpot>\n <div class=\"o-modal\">\n <div class=\"o-modal__top\">\n <div class=\"o-modal__top__title\">\n <h2 class=\"a-h2\">\n {{ '@pry.widget.tooltip.changeSpot' | i18n }}\n </h2>\n </div>\n <div class=\"o-modal__top__close\">\n <button class=\"a-btn a-btn--icon-only\" (click)=\"toggleChangeSpot()\">\n <pry-icon iconSvg=\"close\" [height]=\"35\" [width]=\"35\"></pry-icon>\n <span class=\"u-visually-hidden\">{{ '@pry.toolbox.close' | i18n }}</span>\n </button>\n </div>\n </div>\n <ng-container *ngFor=\"let place of places; let i = index\">\n <ng-container *ngIf=\"currentPlacementIndex !== i\">\n <button type=\"button\" class=\"a-btn\" (click)=\"moveToPlace(place)\">\n <span>{{ '@pry.widget.tooltip.spotName' | i18n : { place: i + 1 } }}</span>\n </button>\n </ng-container>\n </ng-container>\n </div>\n</ng-template>\n" }]
9316
9413
  }], ctorParameters: function () { return [{ type: i1.Store }, { type: i2$1.Overlay }, { type: i0.ViewContainerRef }, { type: ToolboxMenuService }]; }, propDecorators: { template: [{
9317
9414
  type: ViewChild,
9318
9415
  args: ['template', { read: TemplateRef }]
@@ -9669,6 +9766,16 @@ class ManifestService {
9669
9766
  }
9670
9767
  }));
9671
9768
  }
9769
+ addMetadata(presentationId, metadataId, value) {
9770
+ return this.store
9771
+ .select(ConfigSelectors.refUrl)
9772
+ .pipe(mergeMap((url) => this.httpClient.put(encodeURI(`${url}/users/me/dashboards/id/${presentationId}/metadata/id/${metadataId}`), { value })));
9773
+ }
9774
+ deleteMetadata(presentationId, metadataId) {
9775
+ return this.store
9776
+ .select(ConfigSelectors.refUrl)
9777
+ .pipe(mergeMap((url) => this.httpClient.delete(encodeURI(`${url}/users/me/dashboards/id/${presentationId}/metadata/id/${metadataId}`))));
9778
+ }
9672
9779
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: ManifestService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }, { token: PrySnackbarService }, { token: PryI18nService }], target: i0.ɵɵFactoryTarget.Injectable }); }
9673
9780
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: ManifestService, providedIn: 'root' }); }
9674
9781
  }
@@ -9778,44 +9885,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
9778
9885
  }]
9779
9886
  }], ctorParameters: function () { return [{ type: i3.Title }, { type: PryI18nService }, { type: i1.Store }]; } });
9780
9887
 
9781
- class GeocodingService {
9782
- constructor(httpClient, store) {
9783
- this.httpClient = httpClient;
9784
- this.store = store;
9785
- }
9786
- fromAddress(address) {
9787
- const preparedAddress = address.replace(/\s/g, '+');
9788
- return this.store.select(ConfigSelectors.geocodingUrl).pipe(mergeMap((url) => this.httpClient.get(`${url}/search/?text=${preparedAddress}`).pipe(map((result) => ({
9789
- latLon: result.features[0].geometry.coordinates.reverse(),
9790
- pointAddress: result.features[0].properties.label
9791
- })))));
9792
- }
9793
- fromLatLong(latLng) {
9794
- return this.store.select(ConfigSelectors.geocodingUrl).pipe(mergeMap((url) => this.httpClient
9795
- .get(`${url}/reverse/`, {
9796
- params: {
9797
- lat: latLng[0],
9798
- lon: latLng[1]
9799
- }
9800
- })
9801
- .pipe(map((result) => ({
9802
- latLon: result.features[0].geometry.coordinates.reverse(),
9803
- pointAddress: result.features[0].properties.label
9804
- })))));
9805
- }
9806
- getWmsFeatures(url) {
9807
- return this.httpClient.get(url).pipe(map((json) => json));
9808
- }
9809
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: GeocodingService, deps: [{ token: i1$2.HttpClient }, { token: i1.Store }], target: i0.ɵɵFactoryTarget.Injectable }); }
9810
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: GeocodingService, providedIn: 'root' }); }
9811
- }
9812
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: GeocodingService, decorators: [{
9813
- type: Injectable,
9814
- args: [{
9815
- providedIn: 'root'
9816
- }]
9817
- }], ctorParameters: function () { return [{ type: i1$2.HttpClient }, { type: i1.Store }]; } });
9818
-
9819
9888
  class RefreshService {
9820
9889
  constructor(store) {
9821
9890
  this.store = store;
@@ -9847,8 +9916,56 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImpor
9847
9916
  }]
9848
9917
  }], ctorParameters: function () { return [{ type: i1.Store }]; } });
9849
9918
 
9919
+ class WmsService {
9920
+ constructor(httpClient) {
9921
+ this.httpClient = httpClient;
9922
+ this.parser = new DOMParser();
9923
+ }
9924
+ getCapabilities(url) {
9925
+ if (url) {
9926
+ const layerUrlWithQmark = url.indexOf('?') === -1 ? url + '?' : url;
9927
+ const layerUrlWithService = layerUrlWithQmark.indexOf('&SERVICE=') === -1 ? layerUrlWithQmark + '&SERVICE=WMS' : layerUrlWithQmark;
9928
+ const layerUrlWithVersion = layerUrlWithService.indexOf('&VERSION=') === -1 ? layerUrlWithService + '&VERSION=1.3.0' : layerUrlWithService;
9929
+ return this.httpClient
9930
+ .get(`${layerUrlWithVersion}&REQUEST=GetCapabilities`, {
9931
+ headers: new HttpHeaders({
9932
+ Accept: 'text/html, application/xhtml+xml, */*',
9933
+ 'Content-Type': 'application/x-www-form-urlencoded'
9934
+ }),
9935
+ responseType: 'text'
9936
+ })
9937
+ .pipe(map((response) => {
9938
+ const doc = this.parser.parseFromString(response, 'application/xml');
9939
+ const errorNode = doc.querySelector('parsererror');
9940
+ if (errorNode) {
9941
+ console.error(`Cannot getCapabilities for ${url}`);
9942
+ return null;
9943
+ }
9944
+ else {
9945
+ return { url, doc };
9946
+ }
9947
+ }), catchError(() => {
9948
+ console.error(`Cannot getCapabilities for ${url}`);
9949
+ return of(null);
9950
+ }));
9951
+ }
9952
+ return of(null);
9953
+ }
9954
+ getWmsFeatures(url) {
9955
+ return this.httpClient.get(url).pipe(map((json) => json));
9956
+ }
9957
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WmsService, deps: [{ token: i1$2.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
9958
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WmsService, providedIn: 'root' }); }
9959
+ }
9960
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: WmsService, decorators: [{
9961
+ type: Injectable,
9962
+ args: [{
9963
+ providedIn: 'root'
9964
+ }]
9965
+ }], ctorParameters: function () { return [{ type: i1$2.HttpClient }]; } });
9966
+
9850
9967
  class DashboardEffects {
9851
- constructor(dashboardInitService, actions$, store, manifestService, itemService, titleService, translateService, snackBar, router, geocodingService, refreshService, toolboxManifestService, busService, searchService, pryDialog) {
9968
+ constructor(dashboardInitService, actions$, store, manifestService, itemService, titleService, translateService, snackBar, router, refreshService, toolboxManifestService, busService, searchService, pryDialog, wmsService) {
9852
9969
  this.dashboardInitService = dashboardInitService;
9853
9970
  this.actions$ = actions$;
9854
9971
  this.store = store;
@@ -9858,12 +9975,12 @@ class DashboardEffects {
9858
9975
  this.translateService = translateService;
9859
9976
  this.snackBar = snackBar;
9860
9977
  this.router = router;
9861
- this.geocodingService = geocodingService;
9862
9978
  this.refreshService = refreshService;
9863
9979
  this.toolboxManifestService = toolboxManifestService;
9864
9980
  this.busService = busService;
9865
9981
  this.searchService = searchService;
9866
9982
  this.pryDialog = pryDialog;
9983
+ this.wmsService = wmsService;
9867
9984
  this.join$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.join), withLatestFrom(this.store.select(DashboardSelectors.rank), this.store.select(DashboardSelectors.tenants), this.store.select(DashboardSelectors.globalManifest), this.store.select(DashboardSelectors.resultSets), this.store.select(DashboardSelectors.selectedItemIds), this.store.select(DashboardSelectors.presentation)), filter$1(([action, rank, tenants, manifest, resultSets]) => rank === 0), map$1(([action, rank, tenants, manifest, resultSets, selectedIds, presentation]) => DashboardActions.updateManifestAfterTenantJoin({
9868
9985
  tenants,
9869
9986
  manifest: {
@@ -10139,7 +10256,8 @@ class DashboardEffects {
10139
10256
  this.propagateGridLayout$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.setGridLayout), withLatestFrom(this.store.select(DashboardSelectors.rank), this.store.select(DashboardSelectors.windowManifest)), map$1(([action, rank, windowManifest]) => DashboardActions.propagateGridLayout({ manifest: windowManifest, rank }))));
10140
10257
  this.toggleEditionModeIfNotManual$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.setGridLayout), filter$1((action) => action.layout !== DashboardGridLayout.MANUAL), map$1(() => DashboardActions.toggleEditionMode({ force: false }))));
10141
10258
  this.updateViewAfterFilterValueUpdate$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.updateFilterValue), map$1((action) => SearchActions.getDatasourceItems({ id: action.datasourceId }))));
10142
- this.getWmsFeatures = createEffect(() => this.actions$.pipe(ofType(DashboardActions.getWmsFeatures), mergeMap$1((action) => combineLatest([of(action), this.geocodingService.getWmsFeatures(action.url)])), map$1(([action, json]) => {
10259
+ this.getCapability$ = createEffect(() => this.actions$.pipe(ofType(DashboardActions.getCapability), debounceTime$1(100), withLatestFrom(this.store.select(DashboardSelectors.capabilities)), filter$1(([action, capabilities]) => (!!capabilities && !!action.url && !capabilities[action.url]) || !!action.force), mergeMap$1(([action, _]) => this.wmsService.getCapabilities(action.url).pipe(map$1((capability) => DashboardActions.updateCapability({ url: action.url, capability })), startWith(DashboardActions.updateCapability({ url: action.url, capability: null }))))));
10260
+ this.getWmsFeatures = createEffect(() => this.actions$.pipe(ofType(DashboardActions.getWmsFeatures), mergeMap$1((action) => combineLatest([of(action), this.wmsService.getWmsFeatures(action.url)])), map$1(([action, json]) => {
10143
10261
  return DashboardActions.addWmsFeatures({
10144
10262
  features: json.features.map((feature) => {
10145
10263
  const result = {
@@ -10157,15 +10275,21 @@ class DashboardEffects {
10157
10275
  })
10158
10276
  });
10159
10277
  })));
10278
+ this.addManifestMetadata = createEffect(() => this.actions$.pipe(ofType(DashboardActions.addManifestMetadata), mergeMap$1((action) => this.manifestService
10279
+ .addMetadata(action.presentationId, action.metadataId, action.value)
10280
+ .pipe(map$1(() => DashboardActions.fetchManifestsList())))));
10281
+ this.deleteManifestMetadata = createEffect(() => this.actions$.pipe(ofType(DashboardActions.deleteManifestMetadata), mergeMap$1((action) => this.manifestService
10282
+ .deleteMetadata(action.presentationId, action.metadataId)
10283
+ .pipe(map$1(() => DashboardActions.fetchManifestsList())))));
10160
10284
  dashboardInitService.init();
10161
10285
  refreshService.start();
10162
10286
  }
10163
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: DashboardEffects, deps: [{ token: DashboardInitService }, { token: i1$3.Actions }, { token: i1.Store }, { token: ManifestService }, { token: ItemService }, { token: PryTitleService }, { token: PryI18nService }, { token: PrySnackbarService }, { token: i2.Router }, { token: GeocodingService }, { token: RefreshService }, { token: ToolboxManifestService }, { token: BusService }, { token: SearchService }, { token: PryDialogService }], target: i0.ɵɵFactoryTarget.Injectable }); }
10287
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: DashboardEffects, deps: [{ token: DashboardInitService }, { token: i1$3.Actions }, { token: i1.Store }, { token: ManifestService }, { token: ItemService }, { token: PryTitleService }, { token: PryI18nService }, { token: PrySnackbarService }, { token: i2.Router }, { token: RefreshService }, { token: ToolboxManifestService }, { token: BusService }, { token: SearchService }, { token: PryDialogService }, { token: WmsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
10164
10288
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: DashboardEffects }); }
10165
10289
  }
10166
10290
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.6", ngImport: i0, type: DashboardEffects, decorators: [{
10167
10291
  type: Injectable
10168
- }], ctorParameters: function () { return [{ type: DashboardInitService }, { type: i1$3.Actions }, { type: i1.Store }, { type: ManifestService }, { type: ItemService }, { type: PryTitleService }, { type: PryI18nService }, { type: PrySnackbarService }, { type: i2.Router }, { type: GeocodingService }, { type: RefreshService }, { type: ToolboxManifestService }, { type: BusService }, { type: SearchService }, { type: PryDialogService }]; } });
10292
+ }], ctorParameters: function () { return [{ type: DashboardInitService }, { type: i1$3.Actions }, { type: i1.Store }, { type: ManifestService }, { type: ItemService }, { type: PryTitleService }, { type: PryI18nService }, { type: PrySnackbarService }, { type: i2.Router }, { type: RefreshService }, { type: ToolboxManifestService }, { type: BusService }, { type: SearchService }, { type: PryDialogService }, { type: WmsService }]; } });
10169
10293
 
10170
10294
  const dashboardFeatureKey = '@pry/dashboard';
10171
10295
  const dashboardInitialState = {
@@ -10216,7 +10340,8 @@ const dashboardInitialState = {
10216
10340
  },
10217
10341
  editionMode: false
10218
10342
  },
10219
- wmsFeatures: []
10343
+ wmsFeatures: [],
10344
+ capabilities: {}
10220
10345
  };
10221
10346
  const internalReducer = createReducer(dashboardInitialState, on(DashboardActions.join, (state, action) => ({
10222
10347
  ...state,
@@ -10777,6 +10902,14 @@ const internalReducer = createReducer(dashboardInitialState, on(DashboardActions
10777
10902
  ...state,
10778
10903
  display: action.customDisplay ? action.customDisplay : getDisplayOptions(action.mode)
10779
10904
  };
10905
+ }), on(DashboardActions.updateCapability, (state, action) => {
10906
+ return {
10907
+ ...state,
10908
+ capabilities: {
10909
+ ...state.capabilities,
10910
+ [action.url]: action.capability
10911
+ }
10912
+ };
10780
10913
  }));
10781
10914
  function dashboardReducer(state, action) {
10782
10915
  return internalReducer(state, action);
@@ -11112,5 +11245,5 @@ function filterLoader(module, prop) {
11112
11245
  * Generated bundle index. Do not edit.
11113
11246
  */
11114
11247
 
11115
- export { AccordionComponent, AccordionItemComponent, Aggregation, BaseFilterComponent, BaseFilterModule, BaseLayoutComponent, BaseMenuComponent, BaseToolboxComponent, BaseTooltipComponent, BaseTooltipModule, BaseWidgetComponent, BaseWidgetModule, BusService, CategoryActions, CategorySelectors, CategoryService, ChartOptionDefault, ClassActions, ClassSelectors, ClassService, ConfigActions, ConfigSelectors, ConfigService, ContextMenuActions, ContextMenuComponent, ContextMenuSelectors, DEFAULT_CATEGORY_UUID, DEFAULT_COLUMNS_NUMBER, DEFAULT_GAP_PX, DEFAULT_ICON_URL, DEFAULT_MSG_TIMEOUT, DEFAULT_NAMED_QUERY_ID, DEFAULT_RESTITUTION_ICON_URL, DEFAULT_ROWS_NUMBER, DEFAULT_ROW_HEIGHT_PX, DELAY_FOR_HIDE, DashboardActions, DashboardComponent, DashboardGridLayout, DashboardSelectors, DataSourceActions, DataSourceSelectors, DataSourceService, DataWidgetComponent, DatasourceSelectorComponent, DateRangeHighlightPipe, DateUtils, DefaultTooltipComponent, DefaultViewGuard, DisplayMode, ENV_OPTIONS, EXPLORE_NAMED_QUERY_ID, FIELD_OPTIONS, FIELD_UUID, FILTERS_DOMAIN, FILTER_DEFINITION, FieldActions, FieldSelectors, FieldService, FieldType, FilterFactoryService, FilterInstanciatorComponent, GeoMetadata, GeocodingService, GetSecuredImagePipe, GraphType, HTTP_ORIGIN_METADATA, I18nPipe, INTERNALLY_STORED_IMAGE_PREFIX, IconPosition, ImageActions, ImageService, ImagesSelectors, ItemUtils, LibraryTypes, LoopScrollColumnComponent, METADATA_TYPE, META_OPTIONS, MIME_TYPE_RESULTSET, MIME_TYPE_WIDGET_MANIFEST, MIME_TYPE_WIDGET_SIZE, MIME_TYPE_WIDGET_TYPE, ManifestService, ManifestUtils, ManifestsComponent, MarkSubType, MarkType, MetadataComponent, NamedQueryTypes, NamedQueryUtils, OPERATOR_OPTIONS, Operation, PRY_ACCESS_GUARD, PRY_ACCESS_TOKEN, PRY_CUSTOMEVENT_TYPE, PRY_DIALOG_DATA, PryAccessDirective, PryAccessUtils, PryBaseAccess, PryBaseAccessGuard, PryCoreModule, PryDashboardModule, PryDatasetType, PryDatePickerComponent, PryDatePickerModule, PryDefaultAccessGuard, PryDefaultAccessService, PryDialogConfirmComponent, PryDialogRef, PryDialogService, PryEditInputComponent, PryEditInputModule, PryHiddenWhenOverlay, PryHiddenWhenOverlayDirective, PryHttpErrorInterceptorService, PryI18nModule, PryI18nService, PryIconComponent, PryIconModule, PryModalComponent, PryModalModule, PryModalStatusComponent, PryModalStatusModule, PryNqColorSelectorComponent, PryObjectEditionComponent, PryOverlayDirective, PryOverlayModule, PryRangeComponent, PryRangeModule, PrySelectComponent, PrySelectImageComponent, PrySelectModule, PryShareComponent, PryShareModule, PrySnackbarComponent, PrySnackbarModule, PrySnackbarService, PrySortDataPipe, PrySortHeaderComponent, PrySortHeaderDirective, PrySortModule, PrySortTableDirective, PryTimePickerComponent, PryTitleService, PryToggleComponent, PryToggleModule, PryTooltipDirective, PryUploadComponent, PryVisibilityType, PryWidgetHeaderComponent, RawService, RelationTypesActions, RelationTypesSelectors, RelationTypesService, ResultSetSizePipe, ResultsetUtils, SYMBOL_DOMAIN, SearchActions, SearchSelectors, SearchService, SettingsComponent, SubscriptionnerDirective, SymbolService, TABLE_ATTR_DOMAIN, TILE_ATTR_DOMAIN, TOOLTIPS_DOMAIN, TOOLTIP_DEFINITION, TabComponent, TabGroupComponent, ToolboxManifestService, ToolboxMenuService, TooltipFactoryService, TooltipMode, TranslateIdPipe, TranslateItemToSymbolPipe, UNKNOWN_DATASOURCE, USE_CURRENT_RESULTSET, VARIABLE_TYPE, VegaColorType, VegaType, ViewMode, VizualizeRawComponent, WIDGET_DEFINITION, WIDGET_HEADER_HEIGHT, WebsocketService, WidgetFactoryService, WidgetInstanciatorComponent, WidgetPlaceholderComponent, WidgetPlacementUtils, adapter$2 as adapter, aggregationDefault, baseItemProperties, classReducer, classesFeatureKey, compareOperationFunctions, contextMenuFeatureKey, contextMenuReducer, createPlacedWidgetCopy, dashboardFeatureKey, dashboardInitialState, dashboardReducer, dataSourceFeatureKey, dataSourceReducer, deepMerge, defaultColors, defaultMenuStructure, enTranslations$1 as enTranslations, filterLoader, frTranslations$1 as frTranslations, getDisplayOptions, httpErrorOptions, imageFeatureKey, imageReducer, initialClassState, initialContextMenuState, initialDataSourceState, initialImageState, initialSearchState, latLonToGeographicFieldTransformation, markTypesDefault, notificationFeatureKey, orderWidgetsAccordingToPlacement, searchFeatureKey, searchReducer, selectAll$2 as selectAll, selectEntities$2 as selectEntities, selectIds$2 as selectIds, selectTotal$2 as selectTotal, solveCollisions, solvingCollisionOptions, sortByName$2 as sortByName, subTypesDefault, tooltipLoader, vegaColorSchemesDefault, widgetLoader, widgetMapConfig };
11248
+ export { AccordionComponent, AccordionItemComponent, Aggregation, BaseFilterComponent, BaseFilterModule, BaseLayoutComponent, BaseMenuComponent, BaseToolboxComponent, BaseTooltipComponent, BaseTooltipModule, BaseWidgetComponent, BaseWidgetModule, BusService, CategoryActions, CategorySelectors, CategoryService, ChartOptionDefault, ClassActions, ClassSelectors, ClassService, ConfigActions, ConfigSelectors, ConfigService, ContextMenuActions, ContextMenuComponent, ContextMenuSelectors, DEFAULT_CATEGORY_UUID, DEFAULT_COLUMNS_NUMBER, DEFAULT_GAP_PX, DEFAULT_ICON_URL, DEFAULT_MSG_TIMEOUT, DEFAULT_NAMED_QUERY_ID, DEFAULT_RESTITUTION_ICON_URL, DEFAULT_ROWS_NUMBER, DEFAULT_ROW_HEIGHT_PX, DELAY_FOR_HIDE, DashboardActions, DashboardComponent, DashboardGridLayout, DashboardSelectors, DataSourceActions, DataSourceSelectors, DataSourceService, DataWidgetComponent, DatasourceSelectorComponent, DateRangeHighlightPipe, DateUtils, DefaultTooltipComponent, DefaultViewGuard, DisplayMode, ENV_OPTIONS, EXPLORE_NAMED_QUERY_ID, FIELD_OPTIONS, FIELD_UUID, FILTERS_DOMAIN, FILTER_DEFINITION, FieldActions, FieldSelectors, FieldService, FieldType, FilterFactoryService, FilterInstanciatorComponent, GeoMetadata, GeometricFieldTypes, GetSecuredImagePipe, GraphType, HTTP_ORIGIN_METADATA, I18nPipe, INTERNALLY_STORED_IMAGE_PREFIX, IconPosition, ImageActions, ImageService, ImagesSelectors, ItemUtils, LibraryTypes, LoopScrollColumnComponent, METADATA_TYPE, META_OPTIONS, MIME_TYPE_RESULTSET, MIME_TYPE_WIDGET_MANIFEST, MIME_TYPE_WIDGET_SIZE, MIME_TYPE_WIDGET_TYPE, ManifestService, ManifestUtils, ManifestsComponent, MarkSubType, MarkType, MetadataComponent, NamedQueryTypes, NamedQueryUtils, OPERATOR_OPTIONS, Operation, PRY_ACCESS_GUARD, PRY_ACCESS_TOKEN, PRY_CUSTOMEVENT_TYPE, PRY_DIALOG_DATA, PryAccessDirective, PryAccessUtils, PryBaseAccess, PryBaseAccessGuard, PryCoreModule, PryDashboardModule, PryDatasetType, PryDatePickerComponent, PryDatePickerModule, PryDefaultAccessGuard, PryDefaultAccessService, PryDialogConfirmComponent, PryDialogRef, PryDialogService, PryEditInputComponent, PryEditInputModule, PryHiddenWhenOverlay, PryHiddenWhenOverlayDirective, PryHttpErrorInterceptorService, PryI18nModule, PryI18nService, PryIconComponent, PryIconModule, PryModalComponent, PryModalModule, PryModalStatusComponent, PryModalStatusModule, PryNqColorSelectorComponent, PryObjectEditionComponent, PryOverlayDirective, PryOverlayModule, PryRangeComponent, PryRangeModule, PrySelectComponent, PrySelectImageComponent, PrySelectModule, PryShareComponent, PryShareModule, PrySnackbarComponent, PrySnackbarModule, PrySnackbarService, PrySortDataPipe, PrySortHeaderComponent, PrySortHeaderDirective, PrySortModule, PrySortTableDirective, PryTimePickerComponent, PryTitleService, PryToggleComponent, PryToggleModule, PryTooltipDirective, PryUploadComponent, PryVisibilityType, PryWidgetHeaderComponent, RawService, RelationTypesActions, RelationTypesSelectors, RelationTypesService, ResultSetSizePipe, ResultsetUtils, SYMBOL_DOMAIN, SearchActions, SearchSelectors, SearchService, SettingsComponent, SubscriptionnerDirective, SymbolService, TABLE_ATTR_DOMAIN, TILE_ATTR_DOMAIN, TOOLTIPS_DOMAIN, TOOLTIP_DEFINITION, TabComponent, TabGroupComponent, ToolboxManifestService, ToolboxMenuService, TooltipFactoryService, TooltipMode, TranslateIdPipe, TranslateItemToSymbolPipe, UNKNOWN_DATASOURCE, USE_CURRENT_RESULTSET, VARIABLE_TYPE, VegaColorType, VegaType, ViewMode, VizualizeRawComponent, WIDGET_DEFINITION, WIDGET_HEADER_HEIGHT, WebsocketService, WidgetFactoryService, WidgetInstanciatorComponent, WidgetPlaceholderComponent, WidgetPlacementUtils, WmsService, adapter$2 as adapter, aggregationDefault, baseItemProperties, classReducer, classesFeatureKey, compareOperationFunctions, contextMenuFeatureKey, contextMenuReducer, createPlacedWidgetCopy, dashboardFeatureKey, dashboardInitialState, dashboardReducer, dataSourceFeatureKey, dataSourceReducer, deepMerge, defaultColors, defaultMenuStructure, enTranslations$1 as enTranslations, filterLoader, frTranslations$1 as frTranslations, getDisplayOptions, httpErrorOptions, imageFeatureKey, imageReducer, initialClassState, initialContextMenuState, initialDataSourceState, initialImageState, initialSearchState, latLonToGeographicFieldTransformation, markTypesDefault, notificationFeatureKey, orderWidgetsAccordingToPlacement, searchFeatureKey, searchReducer, selectAll$2 as selectAll, selectEntities$2 as selectEntities, selectIds$2 as selectIds, selectTotal$2 as selectTotal, solveCollisions, solvingCollisionOptions, sortByName$2 as sortByName, subTypesDefault, tooltipLoader, vegaColorSchemesDefault, widgetLoader, widgetMapConfig };
11116
11249
  //# sourceMappingURL=provoly-dashboard.mjs.map