geonetwork-ui 2.7.0-dev.d500b08cc → 2.7.0-dev.d6c0958d7

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 (144) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.mjs +4 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +5 -1
  3. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +4 -6
  4. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +28 -4
  5. package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
  6. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +5 -1
  7. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  8. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +10 -2
  9. package/esm2022/libs/feature/editor/src/index.mjs +2 -1
  10. package/esm2022/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.mjs +80 -0
  11. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +3 -3
  12. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +1 -3
  13. package/esm2022/libs/feature/record/src/lib/data-view/data-view.component.mjs +31 -12
  14. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +76 -27
  15. package/esm2022/libs/feature/record/src/lib/state/mdview.effects.mjs +4 -2
  16. package/esm2022/libs/ui/dataviz/src/lib/data-table/data-table.component.mjs +4 -3
  17. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +5 -4
  18. package/esm2022/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.mjs +5 -4
  19. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +4 -4
  20. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +21 -43
  21. package/esm2022/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.mjs +5 -4
  22. package/esm2022/libs/ui/map/src/lib/components/map-legend/map-legend.component.mjs +2 -2
  23. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +3 -1
  24. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  25. package/esm2022/libs/util/shared/src/index.mjs +2 -2
  26. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +12 -2
  27. package/esm2022/libs/util/shared/src/lib/record/index.mjs +3 -0
  28. package/esm2022/libs/util/shared/src/lib/record/quality-score.util.mjs +45 -0
  29. package/esm2022/libs/util/shared/src/lib/record/record.util.mjs +56 -0
  30. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
  31. package/esm2022/libs/util/shared/src/lib/utils/mobile-screen.mjs +9 -0
  32. package/esm2022/translations/de.json +9 -1
  33. package/esm2022/translations/en.json +9 -1
  34. package/esm2022/translations/es.json +9 -1
  35. package/esm2022/translations/fr.json +10 -2
  36. package/esm2022/translations/it.json +9 -1
  37. package/esm2022/translations/nl.json +9 -1
  38. package/esm2022/translations/pt.json +9 -1
  39. package/esm2022/translations/sk.json +9 -1
  40. package/fesm2022/geonetwork-ui.mjs +403 -114
  41. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  42. package/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.d.ts.map +1 -1
  43. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  44. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  45. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +2 -0
  46. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  47. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +1 -0
  48. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
  49. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  50. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -0
  51. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  52. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +3 -2
  53. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  54. package/libs/feature/editor/src/index.d.ts +1 -0
  55. package/libs/feature/editor/src/index.d.ts.map +1 -1
  56. package/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.d.ts +19 -0
  57. package/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.d.ts.map +1 -0
  58. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  59. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts +8 -4
  60. package/libs/feature/record/src/lib/data-view/data-view.component.d.ts.map +1 -1
  61. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts +12 -5
  62. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  63. package/libs/feature/record/src/lib/state/mdview.effects.d.ts.map +1 -1
  64. package/libs/ui/dataviz/src/lib/data-table/data-table.component.d.ts.map +1 -1
  65. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -0
  66. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts.map +1 -1
  67. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts +1 -0
  68. package/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.d.ts.map +1 -1
  69. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  70. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +7 -6
  71. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  72. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts +1 -0
  73. package/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.d.ts.map +1 -1
  74. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  75. package/libs/util/app-config/src/lib/model.d.ts +1 -0
  76. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  77. package/libs/util/shared/src/index.d.ts +1 -1
  78. package/libs/util/shared/src/index.d.ts.map +1 -1
  79. package/libs/util/shared/src/lib/links/link-utils.d.ts +2 -1
  80. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  81. package/libs/util/shared/src/lib/record/index.d.ts +3 -0
  82. package/libs/util/shared/src/lib/record/index.d.ts.map +1 -0
  83. package/libs/util/shared/src/lib/record/quality-score.util.d.ts +13 -0
  84. package/libs/util/shared/src/lib/record/quality-score.util.d.ts.map +1 -0
  85. package/libs/util/shared/src/lib/record/record.util.d.ts +3 -0
  86. package/libs/util/shared/src/lib/record/record.util.d.ts.map +1 -0
  87. package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
  88. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  89. package/libs/util/shared/src/lib/utils/mobile-screen.d.ts +2 -0
  90. package/libs/util/shared/src/lib/utils/mobile-screen.d.ts.map +1 -0
  91. package/package.json +1 -1
  92. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/status.mapper.ts +3 -0
  93. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.ts +3 -0
  94. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -0
  95. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +3 -5
  96. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +36 -4
  97. package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +1 -0
  98. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +4 -0
  99. package/src/libs/common/domain/src/lib/platform.service.interface.ts +2 -0
  100. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +0 -3
  101. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +10 -1
  102. package/src/libs/feature/editor/src/index.ts +1 -0
  103. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.css +0 -0
  104. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.html +37 -0
  105. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.ts +90 -0
  106. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +2 -1
  107. package/src/libs/feature/editor/src/lib/fields.config.ts +0 -2
  108. package/src/libs/feature/record/src/lib/data-view/data-view.component.html +2 -0
  109. package/src/libs/feature/record/src/lib/data-view/data-view.component.ts +34 -15
  110. package/src/libs/feature/record/src/lib/map-view/map-view.component.html +5 -2
  111. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +70 -23
  112. package/src/libs/feature/record/src/lib/state/mdview.effects.ts +5 -1
  113. package/src/libs/ui/dataviz/src/lib/data-table/data-table.component.ts +6 -1
  114. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +12 -11
  115. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.ts +7 -1
  116. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.html +4 -1
  117. package/src/libs/ui/elements/src/lib/geo-data-badge/geo-data-badge.component.ts +7 -1
  118. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +1 -0
  119. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +5 -1
  120. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +1 -0
  121. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +21 -54
  122. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.html +7 -1
  123. package/src/libs/ui/inputs/src/lib/search-feature-catalog/search-feature-catalog.component.ts +3 -1
  124. package/src/libs/ui/map/src/lib/components/map-legend/map-legend.component.ts +1 -1
  125. package/src/libs/util/app-config/src/lib/app-config.ts +2 -0
  126. package/src/libs/util/app-config/src/lib/model.ts +1 -0
  127. package/src/libs/util/shared/src/index.ts +1 -1
  128. package/src/libs/util/shared/src/lib/links/link-utils.ts +11 -1
  129. package/src/libs/util/shared/src/lib/record/index.ts +2 -0
  130. package/src/libs/util/shared/src/lib/record/quality-score.util.ts +69 -0
  131. package/src/libs/util/shared/src/lib/{record.util.ts → record/record.util.ts} +1 -1
  132. package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
  133. package/src/libs/util/shared/src/lib/utils/mobile-screen.ts +14 -0
  134. package/translations/de.json +9 -1
  135. package/translations/en.json +9 -1
  136. package/translations/es.json +9 -1
  137. package/translations/fr.json +10 -2
  138. package/translations/it.json +9 -1
  139. package/translations/nl.json +9 -1
  140. package/translations/pt.json +9 -1
  141. package/translations/sk.json +9 -1
  142. package/esm2022/libs/util/shared/src/lib/record.util.mjs +0 -56
  143. package/libs/util/shared/src/lib/record.util.d.ts +0 -3
  144. package/libs/util/shared/src/lib/record.util.d.ts.map +0 -1
@@ -15,7 +15,7 @@ import { TranslateCompiler, TranslateLoader, TranslateDefaultParser, TranslatePa
15
15
  import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
16
16
  import { TranslateHttpLoader } from '@ngx-translate/http-loader';
17
17
  import { map as map$1, shareReplay, catchError, tap as tap$1, filter, startWith, withLatestFrom, switchMap as switchMap$1, take, mergeMap, delay, distinctUntilChanged, debounceTime, finalize, throttleTime, share, pairwise, first as first$1, defaultIfEmpty, toArray } from 'rxjs/operators';
18
- import { of, map as map$2, lastValueFrom, Subject, switchMap, combineLatest, from, exhaustMap, throwError, forkJoin, takeLast, firstValueFrom, merge, BehaviorSubject, fromEvent, timer, ReplaySubject, Subscription, first, distinctUntilChanged as distinctUntilChanged$1, animationFrameScheduler, debounceTime as debounceTime$1, filter as filter$1, take as take$1, tap as tap$2, Observable, buffer, combineLatestWith, startWith as startWith$1, catchError as catchError$1, takeUntil, EMPTY, mergeMap as mergeMap$1, withLatestFrom as withLatestFrom$1, shareReplay as shareReplay$1, pairwise as pairwise$1 } from 'rxjs';
18
+ import { of, map as map$2, lastValueFrom, Subject, switchMap, combineLatest, from, exhaustMap, throwError, forkJoin, takeLast, firstValueFrom, merge, BehaviorSubject, fromEvent, startWith as startWith$1, shareReplay as shareReplay$1, timer, ReplaySubject, Subscription, first, distinctUntilChanged as distinctUntilChanged$1, animationFrameScheduler, debounceTime as debounceTime$1, filter as filter$1, take as take$1, tap as tap$2, Observable, buffer, combineLatestWith, catchError as catchError$1, takeUntil, EMPTY, mergeMap as mergeMap$1, withLatestFrom as withLatestFrom$1, pairwise as pairwise$1 } from 'rxjs';
19
19
  import { lt, valid, coerce, satisfies, ltr } from 'semver';
20
20
  import * as i1$2 from '@angular/common';
21
21
  import { CommonModule, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault, NgClass, NgTemplateOutlet, DatePipe } from '@angular/common';
@@ -38,7 +38,7 @@ import * as TOML from '@ltd/j-toml';
38
38
  import { Style, Fill, Stroke, Circle } from 'ol/style';
39
39
  import CircleStyle from 'ol/style/Circle';
40
40
  import EmblaCarousel from 'embla-carousel';
41
- import { iconoirNavArrowRight, iconoirNavArrowLeft, iconoirSearch, iconoirLongArrowDownLeft, iconoirCalendar, iconoirLink, iconoirArrowUp, iconoirCloudUpload, iconoirFramePlusIn, iconoirReduce, iconoirNavArrowDown, iconoirNavArrowUp, iconoirExpand, iconoirAppleWallet, iconoirDatabase, iconoirCode, iconoirAppWindow, iconoirBank, iconoirSettings, iconoirDownload, iconoirMediaImage, iconoirMediaImageXmark, iconoirBin, iconoirPlus, iconoirList, iconoirUser, iconoirLock, iconoirTranslate, iconoirImport, iconoirLightBulbOn, iconoirArrowLeft, iconoirAttachment, iconoirRefresh, iconoirCheckCircle, iconoirCircle } from '@ng-icons/iconoir';
41
+ import { iconoirNavArrowRight, iconoirNavArrowLeft, iconoirSearch, iconoirLongArrowDownLeft, iconoirCalendar, iconoirLink, iconoirArrowUp, iconoirCloudUpload, iconoirFramePlusIn, iconoirReduce, iconoirNavArrowDown, iconoirNavArrowUp, iconoirExpand, iconoirAppleWallet, iconoirDatabase, iconoirCode, iconoirAppWindow, iconoirBank, iconoirSettings, iconoirDownload, iconoirMediaImage, iconoirMediaImageXmark, iconoirBin, iconoirPlus, iconoirList, iconoirUser, iconoirLock, iconoirTranslate, iconoirImport, iconoirLightBulbOn, iconoirArrowLeft, iconoirAttachment, iconoirRefresh, iconoirCheckCircle, iconoirCircle, iconoirSystemShut, iconoirBadgeCheck } from '@ng-icons/iconoir';
42
42
  import { MatButtonModule } from '@angular/material/button';
43
43
  import * as i1$8 from '@angular/cdk/overlay';
44
44
  import { CdkConnectedOverlay, OverlayModule, CdkOverlayOrigin } from '@angular/cdk/overlay';
@@ -795,8 +795,11 @@ function getStatusFromStatusCode(statusCode) {
795
795
  case 'onGoing':
796
796
  return 'ongoing';
797
797
  case 'planned':
798
+ return 'planned';
798
799
  case 'required':
800
+ return 'required';
799
801
  case 'underDevelopment':
802
+ return 'under_development';
800
803
  default:
801
804
  return 'under_development';
802
805
  }
@@ -893,12 +896,16 @@ marker('domain.record.status.ongoing');
893
896
  marker('domain.record.status.under_development');
894
897
  marker('domain.record.status.deprecated');
895
898
  marker('domain.record.status.removed');
899
+ marker('domain.record.status.planned');
900
+ marker('domain.record.status.required');
896
901
  const RecordStatusValues = [
897
902
  'completed',
898
903
  'ongoing',
899
904
  'under_development',
900
905
  'deprecated',
901
906
  'removed',
907
+ 'planned',
908
+ 'required',
902
909
  ];
903
910
 
904
911
  function getUpdateFrequencyFromFrequencyCode(frequencyCode) {
@@ -1565,6 +1572,10 @@ function getProgressCode(status) {
1565
1572
  return 'removed';
1566
1573
  case 'under_development':
1567
1574
  return 'underDevelopment';
1575
+ case 'planned':
1576
+ return 'planned';
1577
+ case 'required':
1578
+ return 'required';
1568
1579
  default:
1569
1580
  throw new Error(`Could not determine progress code from status: ${status}`);
1570
1581
  }
@@ -18770,7 +18781,9 @@ var de = {
18770
18781
  "domain.record.status.completed": "Abgeschlossen",
18771
18782
  "domain.record.status.deprecated": "Veraltet",
18772
18783
  "domain.record.status.ongoing": "Kontinuierliche Aktualisierung",
18784
+ "domain.record.status.planned": "",
18773
18785
  "domain.record.status.removed": "Entfernt",
18786
+ "domain.record.status.required": "",
18774
18787
  "domain.record.status.under_development": "In Erstellung",
18775
18788
  "domain.record.updateFrequency.annually": "Daten werden jedes Jahr aktualisiert",
18776
18789
  "domain.record.updateFrequency.asNeeded": "Daten werden nach Bedarf aktualisiert",
@@ -18826,6 +18839,7 @@ var de = {
18826
18839
  "editor.record.form.draft.updateAlert": "",
18827
18840
  "editor.record.form.field.abstract": "Kurzbeschreibung",
18828
18841
  "editor.record.form.field.constraintsShortcuts": "",
18842
+ "editor.record.form.field.contacts": "Ansprechpartner - Email",
18829
18843
  "editor.record.form.field.contacts.noContact": "",
18830
18844
  "editor.record.form.field.contacts.placeholder": "",
18831
18845
  "editor.record.form.field.contactsForResource.noContact": "",
@@ -18850,6 +18864,7 @@ var de = {
18850
18864
  "editor.record.form.field.onlineResource.toggle.dataset": "",
18851
18865
  "editor.record.form.field.onlineResource.toggle.service": "",
18852
18866
  "editor.record.form.field.onlineResources": "",
18867
+ "editor.record.form.field.organisation": "Ansprechpartner - Organisation",
18853
18868
  "editor.record.form.field.otherConstraints": "Allgemeine Einschränkung",
18854
18869
  "editor.record.form.field.overviews": "",
18855
18870
  "editor.record.form.field.recordUpdated": "Datensatz zuletzt aktualisiert",
@@ -18861,6 +18876,7 @@ var de = {
18861
18876
  "editor.record.form.field.temporalExtents": "Zeitlicher Umfang",
18862
18877
  "editor.record.form.field.title": "Metadaten-Titel",
18863
18878
  "editor.record.form.field.title.placeholder": "Geben Sie einen Titel ein",
18879
+ "editor.record.form.field.topics": "Kategorien",
18864
18880
  "editor.record.form.field.uniqueIdentifier": "Eindeutige Kennung (ID)",
18865
18881
  "editor.record.form.field.updateFrequency": "Aktualisierungshäufigkeit",
18866
18882
  "editor.record.form.keywords.place.placeholder": "",
@@ -18875,6 +18891,8 @@ var de = {
18875
18891
  "editor.record.form.license.odc-by": "",
18876
18892
  "editor.record.form.license.pddl": "",
18877
18893
  "editor.record.form.license.unknown": "",
18894
+ "editor.record.form.metadataQuality.open": "Öffnen Sie das Panel zur Metadatenqualität",
18895
+ "editor.record.form.metadataQuality.title": "Vollständigkeit",
18878
18896
  "editor.record.form.multilingual.activate": "",
18879
18897
  "editor.record.form.multilingual.default": "",
18880
18898
  "editor.record.form.multilingual.enable": "",
@@ -19024,6 +19042,7 @@ var de = {
19024
19042
  "map.layer.add": "Hinzufügen",
19025
19043
  "map.layers.available": "Verfügbare Layer",
19026
19044
  "map.layers.list": "Ebenen",
19045
+ "map.legend.title": "Legende",
19027
19046
  "map.loading.data": "Kartendaten werden geladen...",
19028
19047
  "map.loading.service": "Dienst wird geladen...",
19029
19048
  "map.navigation.message": "Bitte verwenden Sie STRG + Maus (oder zwei Finger auf einem Mobilgerät), um die Karte zu navigieren",
@@ -19057,7 +19076,6 @@ var de = {
19057
19076
  "record.action.rollback": "",
19058
19077
  "record.action.switchLang": "",
19059
19078
  "record.action.view": "Anzeigen",
19060
- "record.card.metadata.contact": "",
19061
19079
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
19062
19080
  "record.feature.catalog.number.total.attribute": "",
19063
19081
  "record.feature.catalog.number.total.object": "",
@@ -19263,6 +19281,7 @@ var de = {
19263
19281
  "service.metadata.filter.noLayers": "",
19264
19282
  "service.metadata.other": "",
19265
19283
  "service.metadata.question": "",
19284
+ "service.metadata.reuse": "",
19266
19285
  "service.metadata.search": "",
19267
19286
  "service.metadata.search.clear": "",
19268
19287
  "service.metadata.spatialExtent": "",
@@ -19380,7 +19399,9 @@ var en = {
19380
19399
  "domain.record.status.completed": "Completed",
19381
19400
  "domain.record.status.deprecated": "Deprecated",
19382
19401
  "domain.record.status.ongoing": "Ongoing",
19402
+ "domain.record.status.planned": "Planned",
19383
19403
  "domain.record.status.removed": "Removed",
19404
+ "domain.record.status.required": "Required",
19384
19405
  "domain.record.status.under_development": "Under development",
19385
19406
  "domain.record.updateFrequency.annually": "Data is updated every year",
19386
19407
  "domain.record.updateFrequency.asNeeded": "Data is updated as deemed necessary",
@@ -19436,6 +19457,7 @@ var en = {
19436
19457
  "editor.record.form.draft.updateAlert": "Since you created this draft, the dataset has been updated on { date } by { user }. Publishing your draft might erase their edits. To avoid this, you need to either cancel your changes or knowingly publish your own version.",
19437
19458
  "editor.record.form.field.abstract": "Abstract",
19438
19459
  "editor.record.form.field.constraintsShortcuts": "",
19460
+ "editor.record.form.field.contacts": "Point of contact - Email",
19439
19461
  "editor.record.form.field.contacts.noContact": "Please provide at least one point of contact.",
19440
19462
  "editor.record.form.field.contacts.placeholder": "Choose a contact",
19441
19463
  "editor.record.form.field.contactsForResource.noContact": "Please provide at least one point of contact responsible for the data.",
@@ -19460,6 +19482,7 @@ var en = {
19460
19482
  "editor.record.form.field.onlineResource.toggle.dataset": "Link to a file",
19461
19483
  "editor.record.form.field.onlineResource.toggle.service": "Link to a service",
19462
19484
  "editor.record.form.field.onlineResources": "Distribution",
19485
+ "editor.record.form.field.organisation": "Point of contact - Organization",
19463
19486
  "editor.record.form.field.otherConstraints": "Other constraint",
19464
19487
  "editor.record.form.field.overviews": "Overview",
19465
19488
  "editor.record.form.field.recordUpdated": "Record updated",
@@ -19471,6 +19494,7 @@ var en = {
19471
19494
  "editor.record.form.field.temporalExtents": "Temporal extents",
19472
19495
  "editor.record.form.field.title": "Metadata title",
19473
19496
  "editor.record.form.field.title.placeholder": "Enter a title",
19497
+ "editor.record.form.field.topics": "Categories",
19474
19498
  "editor.record.form.field.uniqueIdentifier": "Unique identifier",
19475
19499
  "editor.record.form.field.updateFrequency": "Update frequency",
19476
19500
  "editor.record.form.keywords.place.placeholder": "Search for place keywords",
@@ -19485,6 +19509,8 @@ var en = {
19485
19509
  "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
19486
19510
  "editor.record.form.license.pddl": "Open Data Commons PDDL",
19487
19511
  "editor.record.form.license.unknown": "Unknown or absent",
19512
+ "editor.record.form.metadataQuality.open": "Open the metadata quality panel",
19513
+ "editor.record.form.metadataQuality.title": "Completeness",
19488
19514
  "editor.record.form.multilingual.activate": "Activate the languages",
19489
19515
  "editor.record.form.multilingual.default": "Default",
19490
19516
  "editor.record.form.multilingual.enable": "Multilingual Mode",
@@ -19634,6 +19660,7 @@ var en = {
19634
19660
  "map.layer.add": "Add",
19635
19661
  "map.layers.available": "Available Layers",
19636
19662
  "map.layers.list": "Layers",
19663
+ "map.legend.title": "Legend",
19637
19664
  "map.loading.data": "Loading map data...",
19638
19665
  "map.loading.service": "Loading service...",
19639
19666
  "map.navigation.message": "Please use CTRL + mouse (or two fingers on mobile) to navigate the map",
@@ -19667,7 +19694,6 @@ var en = {
19667
19694
  "record.action.rollback": "Rollback",
19668
19695
  "record.action.switchLang": "Switch to default",
19669
19696
  "record.action.view": "View",
19670
- "record.card.metadata.contact": "Metadata Contact",
19671
19697
  "record.externalViewer.open": "Open in the external map viewer",
19672
19698
  "record.feature.catalog.number.total.attribute": "Total amount of objects",
19673
19699
  "record.feature.catalog.number.total.object": "Total amount of attributes",
@@ -19873,6 +19899,7 @@ var en = {
19873
19899
  "service.metadata.filter.noLayers": "No layer matches your search",
19874
19900
  "service.metadata.other": "Other information",
19875
19901
  "service.metadata.question": "Ask a question",
19902
+ "service.metadata.reuse": "Declare a reuse",
19876
19903
  "service.metadata.search": "Search through the layer list",
19877
19904
  "service.metadata.search.clear": "Clear the layer search",
19878
19905
  "service.metadata.spatialExtent": "Spatial extent",
@@ -19990,7 +20017,9 @@ var es = {
19990
20017
  "domain.record.status.completed": "",
19991
20018
  "domain.record.status.deprecated": "",
19992
20019
  "domain.record.status.ongoing": "",
20020
+ "domain.record.status.planned": "",
19993
20021
  "domain.record.status.removed": "",
20022
+ "domain.record.status.required": "",
19994
20023
  "domain.record.status.under_development": "",
19995
20024
  "domain.record.updateFrequency.annually": "Los datos se actualizan cada año",
19996
20025
  "domain.record.updateFrequency.asNeeded": "Los datos se actualizan según sea necesario",
@@ -20046,6 +20075,7 @@ var es = {
20046
20075
  "editor.record.form.draft.updateAlert": "",
20047
20076
  "editor.record.form.field.abstract": "",
20048
20077
  "editor.record.form.field.constraintsShortcuts": "",
20078
+ "editor.record.form.field.contacts": "Punto de contacto - Correo ",
20049
20079
  "editor.record.form.field.contacts.noContact": "",
20050
20080
  "editor.record.form.field.contacts.placeholder": "",
20051
20081
  "editor.record.form.field.contactsForResource.noContact": "",
@@ -20070,6 +20100,7 @@ var es = {
20070
20100
  "editor.record.form.field.onlineResource.toggle.dataset": "",
20071
20101
  "editor.record.form.field.onlineResource.toggle.service": "",
20072
20102
  "editor.record.form.field.onlineResources": "",
20103
+ "editor.record.form.field.organisation": "Punto de contacto - Organización",
20073
20104
  "editor.record.form.field.otherConstraints": "",
20074
20105
  "editor.record.form.field.overviews": "",
20075
20106
  "editor.record.form.field.recordUpdated": "",
@@ -20081,6 +20112,7 @@ var es = {
20081
20112
  "editor.record.form.field.temporalExtents": "",
20082
20113
  "editor.record.form.field.title": "",
20083
20114
  "editor.record.form.field.title.placeholder": "Introduzca un título",
20115
+ "editor.record.form.field.topics": "Categorías",
20084
20116
  "editor.record.form.field.uniqueIdentifier": "",
20085
20117
  "editor.record.form.field.updateFrequency": "",
20086
20118
  "editor.record.form.keywords.place.placeholder": "",
@@ -20095,6 +20127,8 @@ var es = {
20095
20127
  "editor.record.form.license.odc-by": "",
20096
20128
  "editor.record.form.license.pddl": "",
20097
20129
  "editor.record.form.license.unknown": "",
20130
+ "editor.record.form.metadataQuality.open": "Abrir el panel de calidad de los metadatos",
20131
+ "editor.record.form.metadataQuality.title": "Completitud",
20098
20132
  "editor.record.form.multilingual.activate": "",
20099
20133
  "editor.record.form.multilingual.default": "",
20100
20134
  "editor.record.form.multilingual.enable": "",
@@ -20244,6 +20278,7 @@ var es = {
20244
20278
  "map.layer.add": "",
20245
20279
  "map.layers.available": "",
20246
20280
  "map.layers.list": "",
20281
+ "map.legend.title": "",
20247
20282
  "map.loading.data": "",
20248
20283
  "map.loading.service": "",
20249
20284
  "map.navigation.message": "",
@@ -20277,7 +20312,6 @@ var es = {
20277
20312
  "record.action.rollback": "",
20278
20313
  "record.action.switchLang": "",
20279
20314
  "record.action.view": "",
20280
- "record.card.metadata.contact": "",
20281
20315
  "record.externalViewer.open": "",
20282
20316
  "record.feature.catalog.number.total.attribute": "",
20283
20317
  "record.feature.catalog.number.total.object": "",
@@ -20483,6 +20517,7 @@ var es = {
20483
20517
  "service.metadata.filter.noLayers": "",
20484
20518
  "service.metadata.other": "",
20485
20519
  "service.metadata.question": "",
20520
+ "service.metadata.reuse": "",
20486
20521
  "service.metadata.search": "",
20487
20522
  "service.metadata.search.clear": "",
20488
20523
  "service.metadata.spatialExtent": "",
@@ -20600,7 +20635,9 @@ var fr = {
20600
20635
  "domain.record.status.completed": "Finalisé",
20601
20636
  "domain.record.status.deprecated": "Obsolète",
20602
20637
  "domain.record.status.ongoing": "Mise à jour continue",
20638
+ "domain.record.status.planned": "Planifié",
20603
20639
  "domain.record.status.removed": "Supprimé",
20640
+ "domain.record.status.required": "Obligatoire",
20604
20641
  "domain.record.status.under_development": "En cours de création",
20605
20642
  "domain.record.updateFrequency.annually": "Les données sont mises à jour chaque année",
20606
20643
  "domain.record.updateFrequency.asNeeded": "Les données sont mises à jour selon les besoins",
@@ -20613,7 +20650,7 @@ var fr = {
20613
20650
  "domain.record.updateFrequency.irregular": "Les données sont mises à jour à intervalles irréguliers",
20614
20651
  "domain.record.updateFrequency.month": "{count, plural, =0{0 fois} one{Une fois} other{{count} fois}} par mois",
20615
20652
  "domain.record.updateFrequency.monthly": "Les données sont mises à jour chaque mois",
20616
- "domain.record.updateFrequency.notPlanned": "Il n'y a pas de plan pour mettre à jour les données",
20653
+ "domain.record.updateFrequency.notPlanned": "La mise à jour des données n’est pas planifiée",
20617
20654
  "domain.record.updateFrequency.periodic": "Les données sont mises à jour à intervalles réguliers",
20618
20655
  "domain.record.updateFrequency.quarterly": "Les données sont mises à jour tous les trois mois",
20619
20656
  "domain.record.updateFrequency.semimonthly": "Les données sont mises à jour deux fois par mois",
@@ -20656,6 +20693,7 @@ var fr = {
20656
20693
  "editor.record.form.draft.updateAlert": "Depuis la création de ce brouillon, ce jeu de données a été modifié le { date } par { user }. Publier votre version peut supprimer ses modifications. Pour éviter cela, vous pouvez annuler vos changements, ou publier votre version en connaissance de cause.",
20657
20694
  "editor.record.form.field.abstract": "Description",
20658
20695
  "editor.record.form.field.constraintsShortcuts": "",
20696
+ "editor.record.form.field.contacts": "Point de contact - Email",
20659
20697
  "editor.record.form.field.contacts.noContact": "Veuillez renseigner au moins un point de contact.",
20660
20698
  "editor.record.form.field.contacts.placeholder": "Choisissez un contact",
20661
20699
  "editor.record.form.field.contactsForResource.noContact": "Veuillez renseigner au moins un point de contact responsable de la donnée.",
@@ -20680,6 +20718,7 @@ var fr = {
20680
20718
  "editor.record.form.field.onlineResource.toggle.dataset": "Lier un fichier",
20681
20719
  "editor.record.form.field.onlineResource.toggle.service": "Lier un service",
20682
20720
  "editor.record.form.field.onlineResources": "Distribution",
20721
+ "editor.record.form.field.organisation": "Point de contact - Organisation",
20683
20722
  "editor.record.form.field.otherConstraints": "Contrainte générale",
20684
20723
  "editor.record.form.field.overviews": "Aperçu",
20685
20724
  "editor.record.form.field.recordUpdated": "Date de mise à jour",
@@ -20691,6 +20730,7 @@ var fr = {
20691
20730
  "editor.record.form.field.temporalExtents": "Étendue temporelle",
20692
20731
  "editor.record.form.field.title": "Titre",
20693
20732
  "editor.record.form.field.title.placeholder": "Saisir un titre",
20733
+ "editor.record.form.field.topics": "Thèmes",
20694
20734
  "editor.record.form.field.uniqueIdentifier": "Identifiant unique",
20695
20735
  "editor.record.form.field.updateFrequency": "Fréquence de mise à jour",
20696
20736
  "editor.record.form.keywords.place.placeholder": "Rechercher une localisation par mot-clé",
@@ -20705,6 +20745,8 @@ var fr = {
20705
20745
  "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
20706
20746
  "editor.record.form.license.pddl": "Open Data Commons PDDL",
20707
20747
  "editor.record.form.license.unknown": "Inconnue ou absente",
20748
+ "editor.record.form.metadataQuality.open": "Ouvrir le menu de qualité des métadonnées",
20749
+ "editor.record.form.metadataQuality.title": "Complétion",
20708
20750
  "editor.record.form.multilingual.activate": "Activez les langues",
20709
20751
  "editor.record.form.multilingual.default": "Par défaut",
20710
20752
  "editor.record.form.multilingual.enable": "Mode Multilingue",
@@ -20854,6 +20896,7 @@ var fr = {
20854
20896
  "map.layer.add": "Ajouter",
20855
20897
  "map.layers.available": "Couches disponibles",
20856
20898
  "map.layers.list": "Couches",
20899
+ "map.legend.title": "Légende",
20857
20900
  "map.loading.data": "Chargement des données...",
20858
20901
  "map.loading.service": "Chargement du service...",
20859
20902
  "map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
@@ -20887,7 +20930,6 @@ var fr = {
20887
20930
  "record.action.rollback": "Restaurer",
20888
20931
  "record.action.switchLang": "Marquer par défaut",
20889
20932
  "record.action.view": "Voir",
20890
- "record.card.metadata.contact": "Contact de la métadonnée ",
20891
20933
  "record.externalViewer.open": "Ouvrir dans le visualiseur externe",
20892
20934
  "record.feature.catalog.number.total.attribute": "Nombre total d'attributs",
20893
20935
  "record.feature.catalog.number.total.object": "Nombre total d'objets",
@@ -21093,6 +21135,7 @@ var fr = {
21093
21135
  "service.metadata.filter.noLayers": "Aucune couche ne correspond à votre recherche",
21094
21136
  "service.metadata.other": "Autres informations",
21095
21137
  "service.metadata.question": "Poser une question",
21138
+ "service.metadata.reuse": "Déclarer une réutilisation",
21096
21139
  "service.metadata.search": "Rechercher dans la liste des couches",
21097
21140
  "service.metadata.search.clear": "Effacer la recherche des couches",
21098
21141
  "service.metadata.spatialExtent": "Etendue spatiale",
@@ -21210,7 +21253,9 @@ var it = {
21210
21253
  "domain.record.status.completed": "Completato",
21211
21254
  "domain.record.status.deprecated": "Deprecato",
21212
21255
  "domain.record.status.ongoing": "Aggiornamento continuo",
21256
+ "domain.record.status.planned": "",
21213
21257
  "domain.record.status.removed": "Rimosso",
21258
+ "domain.record.status.required": "",
21214
21259
  "domain.record.status.under_development": "In fase di creazione",
21215
21260
  "domain.record.updateFrequency.annually": "I dati vengono aggiornati ogni anno",
21216
21261
  "domain.record.updateFrequency.asNeeded": "I dati vengono aggiornati secondo necessità",
@@ -21266,6 +21311,7 @@ var it = {
21266
21311
  "editor.record.form.draft.updateAlert": "Da quando è stata creata questa bozza, questo dataset è stato modificato il { date } da { user }. La pubblicazione della sua versione potrebbe rimuovere le loro modifiche. Per evitarlo, puoi annullare le sue modifiche o pubblicare la sua versione consapevolmente.",
21267
21312
  "editor.record.form.field.abstract": "Riassunto",
21268
21313
  "editor.record.form.field.constraintsShortcuts": "",
21314
+ "editor.record.form.field.contacts": "",
21269
21315
  "editor.record.form.field.contacts.noContact": "Inserisci almeno un punto di contatto.",
21270
21316
  "editor.record.form.field.contacts.placeholder": "Scegli un contatto",
21271
21317
  "editor.record.form.field.contactsForResource.noContact": "Inserisci almeno un punto di contatto responsabile dei dati.",
@@ -21290,6 +21336,7 @@ var it = {
21290
21336
  "editor.record.form.field.onlineResource.toggle.dataset": "Collega un file",
21291
21337
  "editor.record.form.field.onlineResource.toggle.service": "Collega un servizio",
21292
21338
  "editor.record.form.field.onlineResources": "Distribuzione",
21339
+ "editor.record.form.field.organisation": "",
21293
21340
  "editor.record.form.field.otherConstraints": "Vincolo generale",
21294
21341
  "editor.record.form.field.overviews": "Panoramica",
21295
21342
  "editor.record.form.field.recordUpdated": "Data di aggiornamento",
@@ -21301,6 +21348,7 @@ var it = {
21301
21348
  "editor.record.form.field.temporalExtents": "Estensioni temporali",
21302
21349
  "editor.record.form.field.title": "Titolo",
21303
21350
  "editor.record.form.field.title.placeholder": "Inserisci un titolo",
21351
+ "editor.record.form.field.topics": "",
21304
21352
  "editor.record.form.field.uniqueIdentifier": "Identificatore univoco",
21305
21353
  "editor.record.form.field.updateFrequency": "Frequenza di aggiornamento",
21306
21354
  "editor.record.form.keywords.place.placeholder": "Cerca una posizione per parola chiave",
@@ -21315,6 +21363,8 @@ var it = {
21315
21363
  "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
21316
21364
  "editor.record.form.license.pddl": "Open Data Commons PDDL",
21317
21365
  "editor.record.form.license.unknown": "Sconosciuto o assente",
21366
+ "editor.record.form.metadataQuality.open": "",
21367
+ "editor.record.form.metadataQuality.title": "",
21318
21368
  "editor.record.form.multilingual.activate": "",
21319
21369
  "editor.record.form.multilingual.default": "",
21320
21370
  "editor.record.form.multilingual.enable": "Aprire il pannello multilingue",
@@ -21464,6 +21514,7 @@ var it = {
21464
21514
  "map.layer.add": "Aggiungi",
21465
21515
  "map.layers.available": "Layer disponibili",
21466
21516
  "map.layers.list": "Layers",
21517
+ "map.legend.title": "",
21467
21518
  "map.loading.data": "Caricamento dati...",
21468
21519
  "map.loading.service": "Caricamento del servizio...",
21469
21520
  "map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
@@ -21497,7 +21548,6 @@ var it = {
21497
21548
  "record.action.rollback": "Annulla",
21498
21549
  "record.action.switchLang": "",
21499
21550
  "record.action.view": "Visualizza",
21500
- "record.card.metadata.contact": "Contatto del metadata",
21501
21551
  "record.externalViewer.open": "Aprire nel visualizzatore esterno",
21502
21552
  "record.feature.catalog.number.total.attribute": "Quantità totale di oggetti",
21503
21553
  "record.feature.catalog.number.total.object": "Quantità totale di attributi",
@@ -21703,6 +21753,7 @@ var it = {
21703
21753
  "service.metadata.filter.noLayers": "Nessun layer abbina la ricerca",
21704
21754
  "service.metadata.other": "Altri informazioni",
21705
21755
  "service.metadata.question": "Fare una domanda",
21756
+ "service.metadata.reuse": "",
21706
21757
  "service.metadata.search": "Cerca nella lista del layers",
21707
21758
  "service.metadata.search.clear": "Cancella la ricerca del layers",
21708
21759
  "service.metadata.spatialExtent": "Estensione spaziale",
@@ -21820,7 +21871,9 @@ var nl = {
21820
21871
  "domain.record.status.completed": "",
21821
21872
  "domain.record.status.deprecated": "",
21822
21873
  "domain.record.status.ongoing": "",
21874
+ "domain.record.status.planned": "",
21823
21875
  "domain.record.status.removed": "",
21876
+ "domain.record.status.required": "",
21824
21877
  "domain.record.status.under_development": "",
21825
21878
  "domain.record.updateFrequency.annually": "Gegevens worden elk jaar bijgewerkt",
21826
21879
  "domain.record.updateFrequency.asNeeded": "Gegevens worden bijgewerkt naar behoefte",
@@ -21876,6 +21929,7 @@ var nl = {
21876
21929
  "editor.record.form.draft.updateAlert": "",
21877
21930
  "editor.record.form.field.abstract": "",
21878
21931
  "editor.record.form.field.constraintsShortcuts": "",
21932
+ "editor.record.form.field.contacts": "",
21879
21933
  "editor.record.form.field.contacts.noContact": "",
21880
21934
  "editor.record.form.field.contacts.placeholder": "",
21881
21935
  "editor.record.form.field.contactsForResource.noContact": "",
@@ -21900,6 +21954,7 @@ var nl = {
21900
21954
  "editor.record.form.field.onlineResource.toggle.dataset": "",
21901
21955
  "editor.record.form.field.onlineResource.toggle.service": "",
21902
21956
  "editor.record.form.field.onlineResources": "",
21957
+ "editor.record.form.field.organisation": "",
21903
21958
  "editor.record.form.field.otherConstraints": "",
21904
21959
  "editor.record.form.field.overviews": "",
21905
21960
  "editor.record.form.field.recordUpdated": "",
@@ -21911,6 +21966,7 @@ var nl = {
21911
21966
  "editor.record.form.field.temporalExtents": "",
21912
21967
  "editor.record.form.field.title": "",
21913
21968
  "editor.record.form.field.title.placeholder": "Voer een titel in",
21969
+ "editor.record.form.field.topics": "",
21914
21970
  "editor.record.form.field.uniqueIdentifier": "",
21915
21971
  "editor.record.form.field.updateFrequency": "",
21916
21972
  "editor.record.form.keywords.place.placeholder": "",
@@ -21925,6 +21981,8 @@ var nl = {
21925
21981
  "editor.record.form.license.odc-by": "",
21926
21982
  "editor.record.form.license.pddl": "",
21927
21983
  "editor.record.form.license.unknown": "",
21984
+ "editor.record.form.metadataQuality.open": "",
21985
+ "editor.record.form.metadataQuality.title": "",
21928
21986
  "editor.record.form.multilingual.activate": "",
21929
21987
  "editor.record.form.multilingual.default": "",
21930
21988
  "editor.record.form.multilingual.enable": "",
@@ -22074,6 +22132,7 @@ var nl = {
22074
22132
  "map.layer.add": "",
22075
22133
  "map.layers.available": "",
22076
22134
  "map.layers.list": "",
22135
+ "map.legend.title": "",
22077
22136
  "map.loading.data": "",
22078
22137
  "map.loading.service": "",
22079
22138
  "map.navigation.message": "",
@@ -22107,7 +22166,6 @@ var nl = {
22107
22166
  "record.action.rollback": "",
22108
22167
  "record.action.switchLang": "",
22109
22168
  "record.action.view": "",
22110
- "record.card.metadata.contact": "",
22111
22169
  "record.externalViewer.open": "",
22112
22170
  "record.feature.catalog.number.total.attribute": "",
22113
22171
  "record.feature.catalog.number.total.object": "",
@@ -22313,6 +22371,7 @@ var nl = {
22313
22371
  "service.metadata.filter.noLayers": "",
22314
22372
  "service.metadata.other": "",
22315
22373
  "service.metadata.question": "",
22374
+ "service.metadata.reuse": "",
22316
22375
  "service.metadata.search": "",
22317
22376
  "service.metadata.search.clear": "",
22318
22377
  "service.metadata.spatialExtent": "",
@@ -22430,7 +22489,9 @@ var pt = {
22430
22489
  "domain.record.status.completed": "",
22431
22490
  "domain.record.status.deprecated": "",
22432
22491
  "domain.record.status.ongoing": "",
22492
+ "domain.record.status.planned": "",
22433
22493
  "domain.record.status.removed": "",
22494
+ "domain.record.status.required": "",
22434
22495
  "domain.record.status.under_development": "",
22435
22496
  "domain.record.updateFrequency.annually": "Os dados são atualizados anualmente",
22436
22497
  "domain.record.updateFrequency.asNeeded": "Os dados são atualizados conforme necessário",
@@ -22486,6 +22547,7 @@ var pt = {
22486
22547
  "editor.record.form.draft.updateAlert": "",
22487
22548
  "editor.record.form.field.abstract": "",
22488
22549
  "editor.record.form.field.constraintsShortcuts": "",
22550
+ "editor.record.form.field.contacts": "",
22489
22551
  "editor.record.form.field.contacts.noContact": "",
22490
22552
  "editor.record.form.field.contacts.placeholder": "",
22491
22553
  "editor.record.form.field.contactsForResource.noContact": "",
@@ -22510,6 +22572,7 @@ var pt = {
22510
22572
  "editor.record.form.field.onlineResource.toggle.dataset": "",
22511
22573
  "editor.record.form.field.onlineResource.toggle.service": "",
22512
22574
  "editor.record.form.field.onlineResources": "",
22575
+ "editor.record.form.field.organisation": "",
22513
22576
  "editor.record.form.field.otherConstraints": "",
22514
22577
  "editor.record.form.field.overviews": "",
22515
22578
  "editor.record.form.field.recordUpdated": "",
@@ -22521,6 +22584,7 @@ var pt = {
22521
22584
  "editor.record.form.field.temporalExtents": "",
22522
22585
  "editor.record.form.field.title": "",
22523
22586
  "editor.record.form.field.title.placeholder": "Insira um título",
22587
+ "editor.record.form.field.topics": "",
22524
22588
  "editor.record.form.field.uniqueIdentifier": "",
22525
22589
  "editor.record.form.field.updateFrequency": "",
22526
22590
  "editor.record.form.keywords.place.placeholder": "",
@@ -22535,6 +22599,8 @@ var pt = {
22535
22599
  "editor.record.form.license.odc-by": "",
22536
22600
  "editor.record.form.license.pddl": "",
22537
22601
  "editor.record.form.license.unknown": "",
22602
+ "editor.record.form.metadataQuality.open": "",
22603
+ "editor.record.form.metadataQuality.title": "",
22538
22604
  "editor.record.form.multilingual.activate": "",
22539
22605
  "editor.record.form.multilingual.default": "",
22540
22606
  "editor.record.form.multilingual.enable": "",
@@ -22684,6 +22750,7 @@ var pt = {
22684
22750
  "map.layer.add": "",
22685
22751
  "map.layers.available": "",
22686
22752
  "map.layers.list": "",
22753
+ "map.legend.title": "",
22687
22754
  "map.loading.data": "",
22688
22755
  "map.loading.service": "",
22689
22756
  "map.navigation.message": "",
@@ -22717,7 +22784,6 @@ var pt = {
22717
22784
  "record.action.rollback": "",
22718
22785
  "record.action.switchLang": "",
22719
22786
  "record.action.view": "",
22720
- "record.card.metadata.contact": "",
22721
22787
  "record.externalViewer.open": "",
22722
22788
  "record.feature.catalog.number.total.attribute": "",
22723
22789
  "record.feature.catalog.number.total.object": "",
@@ -22923,6 +22989,7 @@ var pt = {
22923
22989
  "service.metadata.filter.noLayers": "",
22924
22990
  "service.metadata.other": "",
22925
22991
  "service.metadata.question": "",
22992
+ "service.metadata.reuse": "",
22926
22993
  "service.metadata.search": "",
22927
22994
  "service.metadata.search.clear": "",
22928
22995
  "service.metadata.spatialExtent": "",
@@ -23040,7 +23107,9 @@ var sk = {
23040
23107
  "domain.record.status.completed": "Dokončené",
23041
23108
  "domain.record.status.deprecated": "Zastarané",
23042
23109
  "domain.record.status.ongoing": "Prebiehajúce",
23110
+ "domain.record.status.planned": "",
23043
23111
  "domain.record.status.removed": "Odstránené",
23112
+ "domain.record.status.required": "",
23044
23113
  "domain.record.status.under_development": "Vo vývoji",
23045
23114
  "domain.record.updateFrequency.annually": "Údaje sa aktualizujú každý rok",
23046
23115
  "domain.record.updateFrequency.asNeeded": "Údaje sa aktualizujú podľa potreby",
@@ -23096,6 +23165,7 @@ var sk = {
23096
23165
  "editor.record.form.draft.updateAlert": "",
23097
23166
  "editor.record.form.field.abstract": "",
23098
23167
  "editor.record.form.field.constraintsShortcuts": "",
23168
+ "editor.record.form.field.contacts": "",
23099
23169
  "editor.record.form.field.contacts.noContact": "",
23100
23170
  "editor.record.form.field.contacts.placeholder": "",
23101
23171
  "editor.record.form.field.contactsForResource.noContact": "",
@@ -23120,6 +23190,7 @@ var sk = {
23120
23190
  "editor.record.form.field.onlineResource.toggle.dataset": "",
23121
23191
  "editor.record.form.field.onlineResource.toggle.service": "",
23122
23192
  "editor.record.form.field.onlineResources": "",
23193
+ "editor.record.form.field.organisation": "",
23123
23194
  "editor.record.form.field.otherConstraints": "",
23124
23195
  "editor.record.form.field.overviews": "",
23125
23196
  "editor.record.form.field.recordUpdated": "",
@@ -23131,6 +23202,7 @@ var sk = {
23131
23202
  "editor.record.form.field.temporalExtents": "",
23132
23203
  "editor.record.form.field.title": "",
23133
23204
  "editor.record.form.field.title.placeholder": "Zadajte názov",
23205
+ "editor.record.form.field.topics": "",
23134
23206
  "editor.record.form.field.uniqueIdentifier": "",
23135
23207
  "editor.record.form.field.updateFrequency": "",
23136
23208
  "editor.record.form.keywords.place.placeholder": "",
@@ -23145,6 +23217,8 @@ var sk = {
23145
23217
  "editor.record.form.license.odc-by": "",
23146
23218
  "editor.record.form.license.pddl": "",
23147
23219
  "editor.record.form.license.unknown": "",
23220
+ "editor.record.form.metadataQuality.open": "",
23221
+ "editor.record.form.metadataQuality.title": "",
23148
23222
  "editor.record.form.multilingual.activate": "",
23149
23223
  "editor.record.form.multilingual.default": "",
23150
23224
  "editor.record.form.multilingual.enable": "",
@@ -23294,6 +23368,7 @@ var sk = {
23294
23368
  "map.layer.add": "Pridať",
23295
23369
  "map.layers.available": "Dostupné vrsty",
23296
23370
  "map.layers.list": "Vrstvy",
23371
+ "map.legend.title": "",
23297
23372
  "map.loading.data": "Načítavanie dát mapy...",
23298
23373
  "map.loading.service": "Načítavanie služieb...",
23299
23374
  "map.navigation.message": "Použite prosím CTRL + myš (alebo dva prsty na mobilnom zariadení) na navigáciu po mape",
@@ -23327,7 +23402,6 @@ var sk = {
23327
23402
  "record.action.rollback": "",
23328
23403
  "record.action.switchLang": "",
23329
23404
  "record.action.view": "Zobraziť",
23330
- "record.card.metadata.contact": "",
23331
23405
  "record.externalViewer.open": "Otvoriť v externom mapovom prehliadači",
23332
23406
  "record.feature.catalog.number.total.attribute": "",
23333
23407
  "record.feature.catalog.number.total.object": "",
@@ -23533,6 +23607,7 @@ var sk = {
23533
23607
  "service.metadata.filter.noLayers": "",
23534
23608
  "service.metadata.other": "",
23535
23609
  "service.metadata.question": "",
23610
+ "service.metadata.reuse": "",
23536
23611
  "service.metadata.search": "",
23537
23612
  "service.metadata.search.clear": "",
23538
23613
  "service.metadata.spatialExtent": "",
@@ -24068,14 +24143,12 @@ const ES_SOURCE_SUMMARY = [
24068
24143
  'codelist_status_text',
24069
24144
  'link',
24070
24145
  'linkProtocol',
24071
- 'contactForResource.organisation',
24072
- 'contact.organisation',
24073
- 'contact.email',
24146
+ 'contactForResource*.organisation*',
24147
+ 'contact*.organisation*',
24148
+ 'contact*.email',
24074
24149
  'userSavedCount',
24075
- 'updateFrequency',
24076
24150
  'cl_topic',
24077
24151
  'cl_maintenanceAndUpdateFrequency',
24078
- 'tag',
24079
24152
  'MD_LegalConstraints*Object',
24080
24153
  'qualityScore',
24081
24154
  'allKeywords',
@@ -25838,6 +25911,14 @@ function downgradeImage(blob, maxSizeBytes) {
25838
25911
  });
25839
25912
  }
25840
25913
 
25914
+ /**
25915
+ * This returns true when the screen size is under 768px, which is the mobile threshold.
25916
+ */
25917
+ const MOBILE_MAX_WIDTH = 768;
25918
+ function getIsMobile() {
25919
+ return fromEvent(window, 'resize').pipe(startWith$1(window.innerWidth), map$2(() => window.innerWidth < MOBILE_MAX_WIDTH), shareReplay$1({ bufferSize: 1, refCount: true }));
25920
+ }
25921
+
25841
25922
  function noDuplicateFileName(fileName, fileNameList) {
25842
25923
  if (fileNameList.includes(fileName)) {
25843
25924
  const fileNameParts = fileName.split('.');
@@ -25976,8 +26057,8 @@ const FORMATS = {
25976
26057
  excel: {
25977
26058
  extensions: [
25978
26059
  'excel',
25979
- 'xls',
25980
26060
  'xlsx',
26061
+ 'xls',
25981
26062
  'ms-excel',
25982
26063
  'openxmlformats-officedocument',
25983
26064
  ],
@@ -26126,6 +26207,8 @@ function getFileFormat(link) {
26126
26207
  }
26127
26208
  function isFormatInQueryParam(link, alias) {
26128
26209
  const queryParams = link.url.searchParams;
26210
+ if (!queryParams)
26211
+ return false;
26129
26212
  for (const [key, value] of queryParams.entries()) {
26130
26213
  if (key === 'format' || key === 'f') {
26131
26214
  return value === alias;
@@ -26158,6 +26241,14 @@ function getBadgeColor(linkFormat) {
26158
26241
  }
26159
26242
  return 'var(--color-gray-700)'; // Default color ?
26160
26243
  }
26244
+ function getLinkId(link) {
26245
+ const href = link.url.href ?? link.url;
26246
+ return `${getLinkLabel(link)
26247
+ .replace(/é/g, 'e')
26248
+ .replace(/è/g, 'e')
26249
+ .normalize('NFD')
26250
+ .replace(/[\u0300-\u036f]/g, '')}-${href}`;
26251
+ }
26161
26252
  function getLinkLabel(link) {
26162
26253
  let format = '';
26163
26254
  switch (link.type) {
@@ -26326,7 +26417,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26326
26417
  }] } });
26327
26418
 
26328
26419
  var name = "geonetwork-ui";
26329
- var version = "2.7.0-dev.d500b08cc";
26420
+ var version = "2.7.0-dev.d6c0958d7";
26330
26421
  var engines = {
26331
26422
  node: ">=20"
26332
26423
  };
@@ -26425,6 +26516,51 @@ const GEONETWORK_UI_TAG_NAME = GEONETWORK_UI_VERSION.split('-')[1] === 'dev'
26425
26516
  ? 'main'
26426
26517
  : `v${packageJson.version}`;
26427
26518
 
26519
+ const ValidatorMapper = {
26520
+ title: (record) => !!record?.title,
26521
+ abstract: (record) => !!record?.abstract,
26522
+ keywords: (record) => (record?.keywords?.length ?? 0) > 0,
26523
+ legalConstraints: (record) => (record?.legalConstraints?.length ?? 0) > 0,
26524
+ contacts: (record) => !!record?.contacts?.[0]?.email,
26525
+ updateFrequency: (record) => !!record?.updateFrequency,
26526
+ topics: (record) => (record?.topics?.length ?? 0) > 0,
26527
+ organisation: (record) => !!record?.contacts?.[0]?.organization?.name,
26528
+ capabilities: (record) => record?.onlineResources?.some((resource) => resource?.url?.href.toLowerCase().includes('capabilities')),
26529
+ source: (record) => !!record?.extras?.sourcesIdentifiers,
26530
+ };
26531
+ function getAllKeysValidator() {
26532
+ return Object.keys(ValidatorMapper);
26533
+ }
26534
+ function getMappersFromKind(kind) {
26535
+ let kindKeys = [];
26536
+ const commonsKeys = [
26537
+ 'title',
26538
+ 'abstract',
26539
+ 'keywords',
26540
+ 'legalConstraints',
26541
+ 'contacts',
26542
+ ];
26543
+ switch (kind) {
26544
+ case 'service':
26545
+ kindKeys = ['capabilities'];
26546
+ break;
26547
+ case 'reuse':
26548
+ kindKeys = ['topics', 'organisation', 'source'];
26549
+ break;
26550
+ case 'dataset':
26551
+ default:
26552
+ kindKeys = ['updateFrequency', 'topics', 'organisation'];
26553
+ }
26554
+ return [...commonsKeys, ...kindKeys];
26555
+ }
26556
+ function getQualityValidators(record, propsToValidate) {
26557
+ const filteredProps = propsToValidate.filter((prop) => getMappersFromKind(record.kind).includes(prop));
26558
+ return filteredProps.map((name) => ({
26559
+ name,
26560
+ validator: () => ValidatorMapper[name](record),
26561
+ }));
26562
+ }
26563
+
26428
26564
  function updateLanguages(record, defaultLanguage, otherLanguages) {
26429
26565
  function updateFieldTranslations(target, fieldName) {
26430
26566
  const fieldTranslations = {};
@@ -26631,9 +26767,13 @@ class Gn4PlatformService {
26631
26767
  ...(Array.isArray(onlines) ? onlines : []),
26632
26768
  ...(Array.isArray(thumbnails) ? thumbnails : []),
26633
26769
  ].map((resource) => Object.values(resource.url)[0]);
26634
- const fileToDelete = attachments
26635
- .filter((attachment) => !urlsToKeep.includes(attachment.url))
26636
- .map((attachment) => attachment.filename);
26770
+ const fileToDelete = attachments.reduce((acc, attachment) => {
26771
+ if (!urlsToKeep.includes(attachment.url) &&
26772
+ attachment.filename !== 'datavizConfig.json') {
26773
+ acc.push(attachment.filename);
26774
+ }
26775
+ return acc;
26776
+ }, []);
26637
26777
  return fileToDelete;
26638
26778
  }), mergeMap((filesToDelete) => filesToDelete.length
26639
26779
  ? forkJoin(filesToDelete.map((filename) => this.recordsApiService.delResource(record.uniqueIdentifier, filename))).pipe(map$1(() => undefined))
@@ -26671,6 +26811,26 @@ class Gn4PlatformService {
26671
26811
  return throwError(() => new Error(error.error?.message ?? error.message));
26672
26812
  }));
26673
26813
  }
26814
+ getFileContent(url) {
26815
+ return this.httpClient.get(url.toString(), { responseType: 'text' }).pipe(map$1((text) => {
26816
+ const parsed = JSON.parse(text);
26817
+ if (typeof parsed === 'object') {
26818
+ return parsed;
26819
+ }
26820
+ const decoded = this.decodeBase64(parsed);
26821
+ return JSON.parse(decoded);
26822
+ }));
26823
+ }
26824
+ decodeBase64(base64) {
26825
+ const text = atob(base64);
26826
+ const length = text.length;
26827
+ const bytes = new Uint8Array(length);
26828
+ for (let i = 0; i < length; i++) {
26829
+ bytes[i] = text.charCodeAt(i);
26830
+ }
26831
+ const decoder = new TextDecoder();
26832
+ return decoder.decode(bytes);
26833
+ }
26674
26834
  attachFileToRecord(recordUuid, file, removeDuplicate = false) {
26675
26835
  return this.getRecordAttachments(recordUuid).pipe(map$1((recordAttachments) => recordAttachments.map((r) => r.fileName)), switchMap((fileNames) => {
26676
26836
  const fileName = file.name;
@@ -27048,7 +27208,7 @@ class MapLegendComponent {
27048
27208
  async ngOnChanges(changes) {
27049
27209
  if ('context' in changes) {
27050
27210
  const mapContext = changes['context'].currentValue;
27051
- if (mapContext.layers && mapContext.layers.length > 0) {
27211
+ if (mapContext?.layers && mapContext.layers.length > 0) {
27052
27212
  const mapContextLayer = mapContext.layers[0];
27053
27213
  this.legendHTML = await createLegendFromLayer(mapContextLayer);
27054
27214
  if (this.legendHTML) {
@@ -27833,6 +27993,7 @@ function loadAppConfig() {
27833
27993
  'web_component_embedder_url',
27834
27994
  'languages',
27835
27995
  'contact_email',
27996
+ 'reuse_form_url',
27836
27997
  ], warnings, errors);
27837
27998
  if (parsedGlobalSection?.metadata_language) {
27838
27999
  parsedGlobalSection = checkMetadataLanguage(parsedGlobalSection, warnings);
@@ -27853,6 +28014,7 @@ function loadAppConfig() {
27853
28014
  WEB_COMPONENT_EMBEDDER_URL: parsedGlobalSection.web_component_embedder_url,
27854
28015
  LANGUAGES: parsedGlobalSection.languages,
27855
28016
  CONTACT_EMAIL: parsedGlobalSection.contact_email,
28017
+ REUSE_FORM_URL: parsedGlobalSection.reuse_form_url,
27856
28018
  };
27857
28019
  const parsedLayersSections = parseMultiConfigSection(parsed, 'map_layer', ['type'], ['name', 'url', 'data', 'styleUrl', 'accessToken'], warnings, errors);
27858
28020
  const parsedMapSection = parseConfigSection(parsed, 'map', [], [
@@ -30239,6 +30401,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30239
30401
 
30240
30402
  class SearchFeatureCatalogComponent {
30241
30403
  constructor() {
30404
+ this.isMobile$ = getIsMobile();
30242
30405
  this.filteredFeatureCatalogChange = new EventEmitter();
30243
30406
  this.filterAction = (searchTerm) => {
30244
30407
  of(searchTerm)
@@ -30271,7 +30434,7 @@ class SearchFeatureCatalogComponent {
30271
30434
  return (this.filteredFeatureCatalog?.featureTypes?.reduce((total, featureType) => total + (featureType.attributes?.length || 0), 0) || 0);
30272
30435
  }
30273
30436
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SearchFeatureCatalogComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30274
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchFeatureCatalogComponent, isStandalone: true, selector: "gn-ui-search-feature-catalog", inputs: { featureCatalog: "featureCatalog" }, outputs: { filteredFeatureCatalogChange: "filteredFeatureCatalogChange" }, ngImport: i0, template: "<div\n class=\"flex items-center justify-between p-3 mt-8 bg-white rounded-lg border-b solid border-gray-300\"\n>\n <div\n class=\"relative shrink-0\"\n *ngIf=\"featureCatalog?.featureTypes?.length > 1\"\n >\n <input\n type=\"text\"\n [placeholder]=\"'search.filter.into.feature.catalog' | translate\"\n class=\"w-[220px] h-8 pl-3 pr-10 py-2 border rounded-md\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"filterAction(searchTerm)\"\n />\n <ng-icon\n class=\"absolute right-2.5 top-1 w-6 h-6 text-black\"\n name=\"iconoirSearch\"\n ></ng-icon>\n </div>\n <div class=\"text-sm px-1 ml-auto hidden sm:inline\">\n <ng-container *ngIf=\"featureCatalog?.featureTypes?.length > 1\">\n <span\n class=\"text-sm font-medium text-gray-900\"\n data-cy=\"total-objects-label\"\n translate\n >record.feature.catalog.number.total.object</span\n ><span\n class=\"text-sm font-bold px-1 text-gray-900\"\n data-cy=\"total-objects\"\n >{{ totalObjects }}</span\n >\n <span class=\"px-1.5\">|</span>\n </ng-container>\n <span\n class=\"text-sm font-medium px-1 text-gray-900\"\n data-cy=\"total-attributes-label\"\n translate\n >record.feature.catalog.number.total.attribute</span\n ><span class=\"text-sm font-bold text-gray-900\" data-cy=\"total-attributes\">{{\n totalAttributes\n }}</span>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$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: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], viewProviders: [
30437
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SearchFeatureCatalogComponent, isStandalone: true, selector: "gn-ui-search-feature-catalog", inputs: { featureCatalog: "featureCatalog" }, outputs: { filteredFeatureCatalogChange: "filteredFeatureCatalogChange" }, ngImport: i0, template: "<div\n class=\"flex items-center justify-between p-3 mt-8 bg-white rounded-lg border-b solid border-gray-300\"\n *ngIf=\"\n (isMobile$ | async) === false || featureCatalog?.featureTypes?.length > 1\n \"\n>\n <div\n class=\"relative shrink-0\"\n *ngIf=\"featureCatalog?.featureTypes?.length > 1\"\n >\n <input\n type=\"text\"\n [placeholder]=\"'search.filter.into.feature.catalog' | translate\"\n class=\"w-[220px] h-8 pl-3 pr-10 py-2 border rounded-md\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"filterAction(searchTerm)\"\n />\n <ng-icon\n class=\"absolute right-2.5 top-1 w-6 h-6 text-black\"\n name=\"iconoirSearch\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"(isMobile$ | async) === false\"\n class=\"text-sm px-1 ml-auto inline\"\n >\n <ng-container *ngIf=\"featureCatalog?.featureTypes?.length > 1\">\n <span\n class=\"text-sm font-medium text-gray-900\"\n data-cy=\"total-objects-label\"\n translate\n >record.feature.catalog.number.total.object</span\n ><span\n class=\"text-sm font-bold px-1 text-gray-900\"\n data-cy=\"total-objects\"\n >{{ totalObjects }}</span\n >\n <span class=\"px-1.5\">|</span>\n </ng-container>\n <span\n class=\"text-sm font-medium px-1 text-gray-900\"\n data-cy=\"total-attributes-label\"\n translate\n >record.feature.catalog.number.total.attribute</span\n ><span class=\"text-sm font-bold text-gray-900\" data-cy=\"total-attributes\">{{\n totalAttributes\n }}</span>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2$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: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }], viewProviders: [
30275
30438
  provideIcons({ iconoirSearch }),
30276
30439
  provideNgIconsConfig({
30277
30440
  size: '1.5rem',
@@ -30291,7 +30454,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
30291
30454
  provideNgIconsConfig({
30292
30455
  size: '1.5rem',
30293
30456
  }),
30294
- ], template: "<div\n class=\"flex items-center justify-between p-3 mt-8 bg-white rounded-lg border-b solid border-gray-300\"\n>\n <div\n class=\"relative shrink-0\"\n *ngIf=\"featureCatalog?.featureTypes?.length > 1\"\n >\n <input\n type=\"text\"\n [placeholder]=\"'search.filter.into.feature.catalog' | translate\"\n class=\"w-[220px] h-8 pl-3 pr-10 py-2 border rounded-md\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"filterAction(searchTerm)\"\n />\n <ng-icon\n class=\"absolute right-2.5 top-1 w-6 h-6 text-black\"\n name=\"iconoirSearch\"\n ></ng-icon>\n </div>\n <div class=\"text-sm px-1 ml-auto hidden sm:inline\">\n <ng-container *ngIf=\"featureCatalog?.featureTypes?.length > 1\">\n <span\n class=\"text-sm font-medium text-gray-900\"\n data-cy=\"total-objects-label\"\n translate\n >record.feature.catalog.number.total.object</span\n ><span\n class=\"text-sm font-bold px-1 text-gray-900\"\n data-cy=\"total-objects\"\n >{{ totalObjects }}</span\n >\n <span class=\"px-1.5\">|</span>\n </ng-container>\n <span\n class=\"text-sm font-medium px-1 text-gray-900\"\n data-cy=\"total-attributes-label\"\n translate\n >record.feature.catalog.number.total.attribute</span\n ><span class=\"text-sm font-bold text-gray-900\" data-cy=\"total-attributes\">{{\n totalAttributes\n }}</span>\n </div>\n</div>\n" }]
30457
+ ], template: "<div\n class=\"flex items-center justify-between p-3 mt-8 bg-white rounded-lg border-b solid border-gray-300\"\n *ngIf=\"\n (isMobile$ | async) === false || featureCatalog?.featureTypes?.length > 1\n \"\n>\n <div\n class=\"relative shrink-0\"\n *ngIf=\"featureCatalog?.featureTypes?.length > 1\"\n >\n <input\n type=\"text\"\n [placeholder]=\"'search.filter.into.feature.catalog' | translate\"\n class=\"w-[220px] h-8 pl-3 pr-10 py-2 border rounded-md\"\n [(ngModel)]=\"searchTerm\"\n (ngModelChange)=\"filterAction(searchTerm)\"\n />\n <ng-icon\n class=\"absolute right-2.5 top-1 w-6 h-6 text-black\"\n name=\"iconoirSearch\"\n ></ng-icon>\n </div>\n <div\n *ngIf=\"(isMobile$ | async) === false\"\n class=\"text-sm px-1 ml-auto inline\"\n >\n <ng-container *ngIf=\"featureCatalog?.featureTypes?.length > 1\">\n <span\n class=\"text-sm font-medium text-gray-900\"\n data-cy=\"total-objects-label\"\n translate\n >record.feature.catalog.number.total.object</span\n ><span\n class=\"text-sm font-bold px-1 text-gray-900\"\n data-cy=\"total-objects\"\n >{{ totalObjects }}</span\n >\n <span class=\"px-1.5\">|</span>\n </ng-container>\n <span\n class=\"text-sm font-medium px-1 text-gray-900\"\n data-cy=\"total-attributes-label\"\n translate\n >record.feature.catalog.number.total.attribute</span\n ><span class=\"text-sm font-bold text-gray-900\" data-cy=\"total-attributes\">{{\n totalAttributes\n }}</span>\n </div>\n</div>\n" }]
30295
30458
  }], propDecorators: { featureCatalog: [{
30296
30459
  type: Input
30297
30460
  }], filteredFeatureCatalogChange: [{
@@ -31889,58 +32052,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
31889
32052
  class MetadataQualityComponent {
31890
32053
  constructor() {
31891
32054
  this.smaller = false;
32055
+ this.popoverDisplay = true;
32056
+ this.forceComputeScore = false; // Instead of returning es' quality score
31892
32057
  this.items = [];
31893
- this.COMMON_CHECKS = {
31894
- title: (metadata) => !!metadata?.title,
31895
- description: (metadata) => !!metadata?.abstract,
31896
- keywords: (metadata) => (metadata?.keywords?.length ?? 0) > 0,
31897
- legalConstraints: (metadata) => (metadata?.legalConstraints?.length ?? 0) > 0,
31898
- contact: (metadata) => !!metadata?.contacts?.[0]?.email,
31899
- };
31900
- this.SPECIFIC_CHECKS = {
31901
- dataset: {
31902
- updateFrequency: (metadata) => !!metadata?.updateFrequency,
31903
- topic: (metadata) => (metadata?.topics?.length ?? 0) > 0,
31904
- organisation: (metadata) => !!metadata?.contacts?.[0]?.organization?.name,
31905
- },
31906
- service: {
31907
- capabilities: (metadata) => (metadata?.onlineResources ?? []).some((resource) => this.hasGetCapabilities(resource?.url?.href ?? '')),
31908
- },
31909
- reuse: {
31910
- topic: (metadata) => (metadata?.topics?.length ?? 0) > 0,
31911
- organisation: (metadata) => !!metadata?.contacts?.[0]?.organization?.name,
31912
- source: (metadata) => !!metadata?.extras?.sourcesIdentifiers,
31913
- },
31914
- };
31915
32058
  }
31916
32059
  get qualityScore() {
31917
- const qualityScore = this.metadata?.extras?.qualityScore;
32060
+ const qualityScore = !this.forceComputeScore
32061
+ ? this.metadata?.extras?.qualityScore
32062
+ : this.computedQualityScore;
31918
32063
  return typeof qualityScore === 'number'
31919
32064
  ? qualityScore
31920
- : this.calculatedQualityScore;
32065
+ : this.computedQualityScore;
31921
32066
  }
31922
- get calculatedQualityScore() {
32067
+ get computedQualityScore() {
31923
32068
  return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
31924
32069
  }
31925
- add(name, value) {
31926
- if (this.metadataQualityDisplay?.[name] !== false) {
31927
- this.items.push({ name, value });
31928
- }
31929
- }
31930
32070
  hasGetCapabilities(url) {
31931
32071
  return url.toLowerCase().includes('capabilities');
31932
32072
  }
31933
32073
  initialize() {
31934
- this.items = [];
31935
- Object.entries(this.COMMON_CHECKS).forEach(([name, check]) => {
31936
- this.add(name, check(this.metadata));
31937
- });
31938
- const datasetType = this.metadata?.kind;
31939
- if (datasetType && this.SPECIFIC_CHECKS[datasetType]) {
31940
- Object.entries(this.SPECIFIC_CHECKS[datasetType]).forEach(([name, check]) => {
31941
- this.add(name, check(this.metadata));
31942
- });
32074
+ if (!this.propsToValidate) {
32075
+ this.propsToValidate = getAllKeysValidator();
31943
32076
  }
32077
+ this.items = getQualityValidators(this.metadata, this.propsToValidate).map(({ name, validator }) => ({ name, value: validator() }));
31944
32078
  }
31945
32079
  ngOnChanges(changes) {
31946
32080
  if (changes['metadata'] || changes['metadataQualityDisplay']) {
@@ -31948,7 +32082,7 @@ class MetadataQualityComponent {
31948
32082
  }
31949
32083
  }
31950
32084
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataQualityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31951
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataQualityComponent, isStandalone: true, selector: "gn-ui-metadata-quality", inputs: { metadata: "metadata", smaller: "smaller", metadataQualityDisplay: "metadataQualityDisplay" }, providers: [
32085
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataQualityComponent, isStandalone: true, selector: "gn-ui-metadata-quality", inputs: { metadata: "metadata", smaller: "smaller", metadataQualityDisplay: "metadataQualityDisplay", popoverDisplay: "popoverDisplay", propsToValidate: "propsToValidate", forceComputeScore: "forceComputeScore" }, providers: [
31952
32086
  provideIcons({
31953
32087
  matInfoOutline,
31954
32088
  }),
@@ -31956,7 +32090,7 @@ class MetadataQualityComponent {
31956
32090
  size: '1.2em',
31957
32091
  strokeWidth: '1.5px',
31958
32092
  }),
31959
- ], usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"metadataQualityDisplay\"\n class=\"flex items-center metadata-quality min-w-0\"\n [ngClass]=\"{ 'text-xs leading-[8px] m-h-[120px]': smaller }\"\n>\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n [type]=\"'light'\"\n class=\"flex-grow\"\n ></gn-ui-progress-bar>\n <gn-ui-popover\n [content]=\"popoverItems\"\n theme=\"light-border\"\n [class]=\"smaller ? 'ml-2' : 'ml-2 mt-1'\"\n >\n <ng-icon\n name=\"matInfoOutline\"\n class=\"flex-shrink-0 text-gray-600\"\n ></ng-icon>\n </gn-ui-popover>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PopoverComponent, selector: "gn-ui-popover", inputs: ["content", "theme"] }, { kind: "component", type: ProgressBarComponent, selector: "gn-ui-progress-bar", inputs: ["value", "type"] }, { kind: "component", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: ["name", "value"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32093
+ ], usesOnChanges: true, ngImport: i0, template: "<div\n *ngIf=\"metadataQualityDisplay\"\n class=\"flex items-center metadata-quality min-w-0\"\n [ngClass]=\"{ 'text-xs leading-[8px] m-h-[120px]': smaller }\"\n>\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n [type]=\"'light'\"\n class=\"flex-grow\"\n ></gn-ui-progress-bar>\n <gn-ui-popover\n *ngIf=\"popoverDisplay\"\n [content]=\"popoverItems\"\n theme=\"light-border\"\n [class]=\"smaller ? 'ml-2' : 'ml-2 mt-1'\"\n >\n <ng-icon\n name=\"matInfoOutline\"\n class=\"flex-shrink-0 text-gray-600\"\n ></ng-icon>\n </gn-ui-popover>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: PopoverComponent, selector: "gn-ui-popover", inputs: ["content", "theme"] }, { kind: "component", type: ProgressBarComponent, selector: "gn-ui-progress-bar", inputs: ["value", "type"] }, { kind: "component", type: MetadataQualityItemComponent, selector: "gn-ui-metadata-quality-item", inputs: ["name", "value"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31960
32094
  }
31961
32095
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataQualityComponent, decorators: [{
31962
32096
  type: Component,
@@ -31975,13 +32109,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
31975
32109
  size: '1.2em',
31976
32110
  strokeWidth: '1.5px',
31977
32111
  }),
31978
- ], template: "<div\n *ngIf=\"metadataQualityDisplay\"\n class=\"flex items-center metadata-quality min-w-0\"\n [ngClass]=\"{ 'text-xs leading-[8px] m-h-[120px]': smaller }\"\n>\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n [type]=\"'light'\"\n class=\"flex-grow\"\n ></gn-ui-progress-bar>\n <gn-ui-popover\n [content]=\"popoverItems\"\n theme=\"light-border\"\n [class]=\"smaller ? 'ml-2' : 'ml-2 mt-1'\"\n >\n <ng-icon\n name=\"matInfoOutline\"\n class=\"flex-shrink-0 text-gray-600\"\n ></ng-icon>\n </gn-ui-popover>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"] }]
32112
+ ], template: "<div\n *ngIf=\"metadataQualityDisplay\"\n class=\"flex items-center metadata-quality min-w-0\"\n [ngClass]=\"{ 'text-xs leading-[8px] m-h-[120px]': smaller }\"\n>\n <gn-ui-progress-bar\n tabindex=\"0\"\n [value]=\"qualityScore\"\n [type]=\"'light'\"\n class=\"flex-grow\"\n ></gn-ui-progress-bar>\n <gn-ui-popover\n *ngIf=\"popoverDisplay\"\n [content]=\"popoverItems\"\n theme=\"light-border\"\n [class]=\"smaller ? 'ml-2' : 'ml-2 mt-1'\"\n >\n <ng-icon\n name=\"matInfoOutline\"\n class=\"flex-shrink-0 text-gray-600\"\n ></ng-icon>\n </gn-ui-popover>\n</div>\n<ng-template #popoverItems>\n <div class=\"p-2 py-4\">\n <div class=\"mb-4 font-bold\" translate>record.metadata.quality.details</div>\n <gn-ui-metadata-quality-item\n *ngFor=\"let e of items\"\n [name]=\"e.name\"\n [value]=\"e.value\"\n ></gn-ui-metadata-quality-item>\n </div>\n</ng-template>\n", styles: [":host gn-ui-progress-bar{--progress-bar-font-weight: \"normal\"}\n"] }]
31979
32113
  }], propDecorators: { metadata: [{
31980
32114
  type: Input
31981
32115
  }], smaller: [{
31982
32116
  type: Input
31983
32117
  }], metadataQualityDisplay: [{
31984
32118
  type: Input
32119
+ }], popoverDisplay: [{
32120
+ type: Input
32121
+ }], propsToValidate: [{
32122
+ type: Input
32123
+ }], forceComputeScore: [{
32124
+ type: Input
31985
32125
  }] } });
31986
32126
 
31987
32127
  class InternalLinkCardComponent {
@@ -32023,7 +32163,7 @@ class InternalLinkCardComponent {
32023
32163
  provideNgIconsConfig({
32024
32164
  size: '1.2em',
32025
32165
  }),
32026
- ], ngImport: i0, template: "<a\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n class=\"record-card\"\n [ngClass]=\"cardClass\"\n>\n <div *ngIf=\"shouldShowThumbnail\" class=\"record-card__thumbnail\">\n <gn-ui-thumbnail\n class=\"w-full h-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url?.toString() || ''\"\n [fit]=\"'cover'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grow pt-1\" [ngClass]=\"shouldShowThumbnail ? 'sm:w-0' : ''\">\n <div class=\"flex flex-col gap-2 h-full\">\n <h4\n class=\"record-card__title\"\n data-cy=\"recordTitle\"\n [title]=\"record.title\"\n >\n {{ record.title }}\n </h4>\n <div class=\"grow\">\n <gn-ui-markdown-parser\n data-cy=\"recordAbstract\"\n [textContent]=\"abstract\"\n [whitoutStyles]=\"true\"\n class=\"record-card__abstract\"\n [title]=\"abstract\"\n ></gn-ui-markdown-parser>\n </div>\n <div class=\"record-card__footer\">\n <div\n data-cy=\"recordOrg\"\n *ngIf=\"record.ownerOrganization?.name\"\n class=\"grow flex flex-row gap-1 items-center text-primary-lighter\"\n [ngClass]=\"displayContactIconOnly ? 'justify-center' : ''\"\n >\n <ng-icon\n name=\"iconoirBank\"\n class=\"text-primary -translate-y-[0.5px] shrink-0\"\n [title]=\"record.ownerOrganization.name\"\n ></ng-icon>\n <span\n *ngIf=\"!displayContactIconOnly\"\n data-cy=\"recordOrgName\"\n class=\"line-clamp-1\"\n [title]=\"record.ownerOrganization.name\"\n >{{ record.ownerOrganization.name }}</span\n >\n </div>\n <div class=\"record-card__footer__other\">\n <div\n class=\"xs:border-r last:border-r-0 flex grow gap-4 px-4 last:pr-0\"\n >\n <gn-ui-kind-badge\n [extraClass]=\"'text-[1.2em]'\"\n [styling]=\"'gray'\"\n [kind]=\"record?.kind\"\n [contentTemplate]=\"customTemplate\"\n class=\"pt-1\"\n >\n <ng-template #customTemplate></ng-template\n ></gn-ui-kind-badge>\n <gn-ui-metadata-quality\n *ngIf=\"metadataQualityDisplay\"\n class=\"flex items-center min-w-[113px]\"\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"flex justify-center\"\n data-cy=\"recordFav\"\n [ngClass]=\"displayContactIconOnly ? 'px-1' : 'px-4'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n</a>\n", styles: [".record-card{@apply rounded-md bg-white hover:cursor-pointer hover:bg-slate-50 overflow-hidden items-stretch flex flex-row md:gap-0 justify-between py-3 pl-3 pr-5;}.record-card.size-L{@apply w-full md:h-[208px] gap-5;}.record-card.size-M{@apply max-w-[940px] md:h-[231px] gap-4;}.record-card.size-S{@apply max-w-[572px] md:h-[315px] gap-4;}.record-card.size-XS{@apply max-w-[280px] md:h-[315px] gap-4;}.record-card:hover .record-card__title{@apply text-primary;}.record-card__thumbnail{@apply border rounded-lg overflow-hidden shrink-0;}.size-L .record-card__thumbnail{@apply w-full w-[190px] h-[184px];}.size-M .record-card__thumbnail{@apply w-full w-[138px] h-[207px];}.record-card__title{@apply text-xl font-medium text-title leading-6;}.size-L .record-card__title{@apply line-clamp-2;}.size-M .record-card__title{@apply line-clamp-2 ml-2;}.size-S .record-card__title,.size-XS .record-card__title{@apply line-clamp-3 ml-2;}.record-card__abstract{@apply text-gray-900 overflow-hidden;}.size-L .record-card__abstract{@apply line-clamp-3;}.size-M .record-card__abstract{@apply line-clamp-3 ml-2;}.size-S .record-card__abstract,.size-XS .record-card__abstract{@apply line-clamp-4 ml-2;}.record-card__footer{@apply flex sm:flex-row flex-col flex-nowrap gap-3 justify-end items-center w-full border-t pt-1 overflow-hidden;}@media (max-width: 450px){.size-S .record-card__footer{@apply flex-col items-stretch;}}.size-XS .record-card__footer{@apply flex-col items-stretch gap-2;}.record-card__footer__other{@apply flex flex-col xs:flex-row flex-nowrap gap-3 xs:border-l first:border-l-0;}.record-card__footer__other>div{@apply py-1;}@media (max-width: 450px){.size-S .record-card__footer__other,.size-S .record-card__footer__other>div{@apply border-0 px-0 py-0;}}.size-XS .record-card__footer__other,.size-XS .record-card__footer__other>div{@apply border-0;}.size-XS .record-card__footer__other>div{@apply px-0 py-0;}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: KindBadgeComponent, selector: "gn-ui-kind-badge", inputs: ["styling", "contentTemplate", "kind", "extraClass"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }] }); }
32166
+ ], ngImport: i0, template: "<a\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n class=\"record-card\"\n [ngClass]=\"cardClass\"\n>\n <div *ngIf=\"shouldShowThumbnail\" class=\"record-card__thumbnail\">\n <gn-ui-thumbnail\n class=\"w-full h-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url?.toString() || ''\"\n [fit]=\"'cover'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grow pt-1\" [ngClass]=\"shouldShowThumbnail ? 'sm:w-0' : ''\">\n <div class=\"flex flex-col gap-2 h-full\">\n <h4\n class=\"record-card__title\"\n data-cy=\"recordTitle\"\n [title]=\"record.title\"\n >\n {{ record.title }}\n </h4>\n <div class=\"grow\">\n <gn-ui-markdown-parser\n data-cy=\"recordAbstract\"\n [textContent]=\"abstract\"\n [whitoutStyles]=\"true\"\n class=\"record-card__abstract\"\n [title]=\"abstract\"\n ></gn-ui-markdown-parser>\n </div>\n <div class=\"record-card__footer\">\n <div\n data-cy=\"recordOrg\"\n *ngIf=\"record.ownerOrganization?.name\"\n class=\"grow flex flex-row gap-1 items-center text-primary-lighter\"\n [ngClass]=\"displayContactIconOnly ? 'justify-center' : ''\"\n >\n <ng-icon\n name=\"iconoirBank\"\n class=\"text-primary -translate-y-[0.5px] shrink-0\"\n [title]=\"record.ownerOrganization.name\"\n ></ng-icon>\n <span\n *ngIf=\"!displayContactIconOnly\"\n data-cy=\"recordOrgName\"\n class=\"line-clamp-1\"\n [title]=\"record.ownerOrganization.name\"\n >{{ record.ownerOrganization.name }}</span\n >\n </div>\n <div class=\"record-card__footer__other\">\n <div\n class=\"xs:border-r last:border-r-0 flex grow gap-4 px-4 last:pr-0\"\n >\n <gn-ui-kind-badge\n [extraClass]=\"'text-[1.2em]'\"\n [styling]=\"'gray'\"\n [kind]=\"record?.kind\"\n [contentTemplate]=\"customTemplate\"\n class=\"pt-1\"\n >\n <ng-template #customTemplate></ng-template\n ></gn-ui-kind-badge>\n <gn-ui-metadata-quality\n *ngIf=\"metadataQualityDisplay\"\n class=\"flex items-center min-w-[113px]\"\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n [popoverDisplay]=\"true\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"flex justify-center\"\n data-cy=\"recordFav\"\n [ngClass]=\"displayContactIconOnly ? 'px-1' : 'px-4'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n</a>\n", styles: [".record-card{@apply rounded-md bg-white hover:cursor-pointer hover:bg-slate-50 overflow-hidden items-stretch flex flex-row md:gap-0 justify-between py-3 pl-3 pr-5;}.record-card.size-L{@apply w-full md:h-[208px] gap-5;}.record-card.size-M{@apply max-w-[940px] md:h-[231px] gap-4;}.record-card.size-S{@apply max-w-[572px] md:h-[315px] gap-4;}.record-card.size-XS{@apply max-w-[280px] md:h-[315px] gap-4;}.record-card:hover .record-card__title{@apply text-primary;}.record-card__thumbnail{@apply border rounded-lg overflow-hidden shrink-0;}.size-L .record-card__thumbnail{@apply w-full w-[190px] h-[184px];}.size-M .record-card__thumbnail{@apply w-full w-[138px] h-[207px];}.record-card__title{@apply text-xl font-medium text-title leading-6;}.size-L .record-card__title{@apply line-clamp-2;}.size-M .record-card__title{@apply line-clamp-2 ml-2;}.size-S .record-card__title,.size-XS .record-card__title{@apply line-clamp-3 ml-2;}.record-card__abstract{@apply text-gray-900 overflow-hidden;}.size-L .record-card__abstract{@apply line-clamp-3;}.size-M .record-card__abstract{@apply line-clamp-3 ml-2;}.size-S .record-card__abstract,.size-XS .record-card__abstract{@apply line-clamp-4 ml-2;}.record-card__footer{@apply flex sm:flex-row flex-col flex-nowrap gap-3 justify-end items-center w-full border-t pt-1 overflow-hidden;}@media (max-width: 450px){.size-S .record-card__footer{@apply flex-col items-stretch;}}.size-XS .record-card__footer{@apply flex-col items-stretch gap-2;}.record-card__footer__other{@apply flex flex-col xs:flex-row flex-nowrap gap-3 xs:border-l first:border-l-0;}.record-card__footer__other>div{@apply py-1;}@media (max-width: 450px){.size-S .record-card__footer__other,.size-S .record-card__footer__other>div{@apply border-0 px-0 py-0;}}.size-XS .record-card__footer__other,.size-XS .record-card__footer__other>div{@apply border-0;}.size-XS .record-card__footer__other>div{@apply px-0 py-0;}\n"], dependencies: [{ kind: "directive", type: NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay", "popoverDisplay", "propsToValidate", "forceComputeScore"] }, { kind: "directive", type: NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: KindBadgeComponent, selector: "gn-ui-kind-badge", inputs: ["styling", "contentTemplate", "kind", "extraClass"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }] }); }
32027
32167
  }
32028
32168
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InternalLinkCardComponent, decorators: [{
32029
32169
  type: Component,
@@ -32044,7 +32184,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
32044
32184
  provideNgIconsConfig({
32045
32185
  size: '1.2em',
32046
32186
  }),
32047
- ], template: "<a\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n class=\"record-card\"\n [ngClass]=\"cardClass\"\n>\n <div *ngIf=\"shouldShowThumbnail\" class=\"record-card__thumbnail\">\n <gn-ui-thumbnail\n class=\"w-full h-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url?.toString() || ''\"\n [fit]=\"'cover'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grow pt-1\" [ngClass]=\"shouldShowThumbnail ? 'sm:w-0' : ''\">\n <div class=\"flex flex-col gap-2 h-full\">\n <h4\n class=\"record-card__title\"\n data-cy=\"recordTitle\"\n [title]=\"record.title\"\n >\n {{ record.title }}\n </h4>\n <div class=\"grow\">\n <gn-ui-markdown-parser\n data-cy=\"recordAbstract\"\n [textContent]=\"abstract\"\n [whitoutStyles]=\"true\"\n class=\"record-card__abstract\"\n [title]=\"abstract\"\n ></gn-ui-markdown-parser>\n </div>\n <div class=\"record-card__footer\">\n <div\n data-cy=\"recordOrg\"\n *ngIf=\"record.ownerOrganization?.name\"\n class=\"grow flex flex-row gap-1 items-center text-primary-lighter\"\n [ngClass]=\"displayContactIconOnly ? 'justify-center' : ''\"\n >\n <ng-icon\n name=\"iconoirBank\"\n class=\"text-primary -translate-y-[0.5px] shrink-0\"\n [title]=\"record.ownerOrganization.name\"\n ></ng-icon>\n <span\n *ngIf=\"!displayContactIconOnly\"\n data-cy=\"recordOrgName\"\n class=\"line-clamp-1\"\n [title]=\"record.ownerOrganization.name\"\n >{{ record.ownerOrganization.name }}</span\n >\n </div>\n <div class=\"record-card__footer__other\">\n <div\n class=\"xs:border-r last:border-r-0 flex grow gap-4 px-4 last:pr-0\"\n >\n <gn-ui-kind-badge\n [extraClass]=\"'text-[1.2em]'\"\n [styling]=\"'gray'\"\n [kind]=\"record?.kind\"\n [contentTemplate]=\"customTemplate\"\n class=\"pt-1\"\n >\n <ng-template #customTemplate></ng-template\n ></gn-ui-kind-badge>\n <gn-ui-metadata-quality\n *ngIf=\"metadataQualityDisplay\"\n class=\"flex items-center min-w-[113px]\"\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"flex justify-center\"\n data-cy=\"recordFav\"\n [ngClass]=\"displayContactIconOnly ? 'px-1' : 'px-4'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n</a>\n", styles: [".record-card{@apply rounded-md bg-white hover:cursor-pointer hover:bg-slate-50 overflow-hidden items-stretch flex flex-row md:gap-0 justify-between py-3 pl-3 pr-5;}.record-card.size-L{@apply w-full md:h-[208px] gap-5;}.record-card.size-M{@apply max-w-[940px] md:h-[231px] gap-4;}.record-card.size-S{@apply max-w-[572px] md:h-[315px] gap-4;}.record-card.size-XS{@apply max-w-[280px] md:h-[315px] gap-4;}.record-card:hover .record-card__title{@apply text-primary;}.record-card__thumbnail{@apply border rounded-lg overflow-hidden shrink-0;}.size-L .record-card__thumbnail{@apply w-full w-[190px] h-[184px];}.size-M .record-card__thumbnail{@apply w-full w-[138px] h-[207px];}.record-card__title{@apply text-xl font-medium text-title leading-6;}.size-L .record-card__title{@apply line-clamp-2;}.size-M .record-card__title{@apply line-clamp-2 ml-2;}.size-S .record-card__title,.size-XS .record-card__title{@apply line-clamp-3 ml-2;}.record-card__abstract{@apply text-gray-900 overflow-hidden;}.size-L .record-card__abstract{@apply line-clamp-3;}.size-M .record-card__abstract{@apply line-clamp-3 ml-2;}.size-S .record-card__abstract,.size-XS .record-card__abstract{@apply line-clamp-4 ml-2;}.record-card__footer{@apply flex sm:flex-row flex-col flex-nowrap gap-3 justify-end items-center w-full border-t pt-1 overflow-hidden;}@media (max-width: 450px){.size-S .record-card__footer{@apply flex-col items-stretch;}}.size-XS .record-card__footer{@apply flex-col items-stretch gap-2;}.record-card__footer__other{@apply flex flex-col xs:flex-row flex-nowrap gap-3 xs:border-l first:border-l-0;}.record-card__footer__other>div{@apply py-1;}@media (max-width: 450px){.size-S .record-card__footer__other,.size-S .record-card__footer__other>div{@apply border-0 px-0 py-0;}}.size-XS .record-card__footer__other,.size-XS .record-card__footer__other>div{@apply border-0;}.size-XS .record-card__footer__other>div{@apply px-0 py-0;}\n"] }]
32187
+ ], template: "<a\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n class=\"record-card\"\n [ngClass]=\"cardClass\"\n>\n <div *ngIf=\"shouldShowThumbnail\" class=\"record-card__thumbnail\">\n <gn-ui-thumbnail\n class=\"w-full h-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url?.toString() || ''\"\n [fit]=\"'cover'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grow pt-1\" [ngClass]=\"shouldShowThumbnail ? 'sm:w-0' : ''\">\n <div class=\"flex flex-col gap-2 h-full\">\n <h4\n class=\"record-card__title\"\n data-cy=\"recordTitle\"\n [title]=\"record.title\"\n >\n {{ record.title }}\n </h4>\n <div class=\"grow\">\n <gn-ui-markdown-parser\n data-cy=\"recordAbstract\"\n [textContent]=\"abstract\"\n [whitoutStyles]=\"true\"\n class=\"record-card__abstract\"\n [title]=\"abstract\"\n ></gn-ui-markdown-parser>\n </div>\n <div class=\"record-card__footer\">\n <div\n data-cy=\"recordOrg\"\n *ngIf=\"record.ownerOrganization?.name\"\n class=\"grow flex flex-row gap-1 items-center text-primary-lighter\"\n [ngClass]=\"displayContactIconOnly ? 'justify-center' : ''\"\n >\n <ng-icon\n name=\"iconoirBank\"\n class=\"text-primary -translate-y-[0.5px] shrink-0\"\n [title]=\"record.ownerOrganization.name\"\n ></ng-icon>\n <span\n *ngIf=\"!displayContactIconOnly\"\n data-cy=\"recordOrgName\"\n class=\"line-clamp-1\"\n [title]=\"record.ownerOrganization.name\"\n >{{ record.ownerOrganization.name }}</span\n >\n </div>\n <div class=\"record-card__footer__other\">\n <div\n class=\"xs:border-r last:border-r-0 flex grow gap-4 px-4 last:pr-0\"\n >\n <gn-ui-kind-badge\n [extraClass]=\"'text-[1.2em]'\"\n [styling]=\"'gray'\"\n [kind]=\"record?.kind\"\n [contentTemplate]=\"customTemplate\"\n class=\"pt-1\"\n >\n <ng-template #customTemplate></ng-template\n ></gn-ui-kind-badge>\n <gn-ui-metadata-quality\n *ngIf=\"metadataQualityDisplay\"\n class=\"flex items-center min-w-[113px]\"\n [smaller]=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n [popoverDisplay]=\"true\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"flex justify-center\"\n data-cy=\"recordFav\"\n [ngClass]=\"displayContactIconOnly ? 'px-1' : 'px-4'\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n </div>\n </div>\n </div>\n</a>\n", styles: [".record-card{@apply rounded-md bg-white hover:cursor-pointer hover:bg-slate-50 overflow-hidden items-stretch flex flex-row md:gap-0 justify-between py-3 pl-3 pr-5;}.record-card.size-L{@apply w-full md:h-[208px] gap-5;}.record-card.size-M{@apply max-w-[940px] md:h-[231px] gap-4;}.record-card.size-S{@apply max-w-[572px] md:h-[315px] gap-4;}.record-card.size-XS{@apply max-w-[280px] md:h-[315px] gap-4;}.record-card:hover .record-card__title{@apply text-primary;}.record-card__thumbnail{@apply border rounded-lg overflow-hidden shrink-0;}.size-L .record-card__thumbnail{@apply w-full w-[190px] h-[184px];}.size-M .record-card__thumbnail{@apply w-full w-[138px] h-[207px];}.record-card__title{@apply text-xl font-medium text-title leading-6;}.size-L .record-card__title{@apply line-clamp-2;}.size-M .record-card__title{@apply line-clamp-2 ml-2;}.size-S .record-card__title,.size-XS .record-card__title{@apply line-clamp-3 ml-2;}.record-card__abstract{@apply text-gray-900 overflow-hidden;}.size-L .record-card__abstract{@apply line-clamp-3;}.size-M .record-card__abstract{@apply line-clamp-3 ml-2;}.size-S .record-card__abstract,.size-XS .record-card__abstract{@apply line-clamp-4 ml-2;}.record-card__footer{@apply flex sm:flex-row flex-col flex-nowrap gap-3 justify-end items-center w-full border-t pt-1 overflow-hidden;}@media (max-width: 450px){.size-S .record-card__footer{@apply flex-col items-stretch;}}.size-XS .record-card__footer{@apply flex-col items-stretch gap-2;}.record-card__footer__other{@apply flex flex-col xs:flex-row flex-nowrap gap-3 xs:border-l first:border-l-0;}.record-card__footer__other>div{@apply py-1;}@media (max-width: 450px){.size-S .record-card__footer__other,.size-S .record-card__footer__other>div{@apply border-0 px-0 py-0;}}.size-XS .record-card__footer__other,.size-XS .record-card__footer__other>div{@apply border-0;}.size-XS .record-card__footer__other>div{@apply px-0 py-0;}\n"] }]
32048
32188
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { record: [{
32049
32189
  type: Input
32050
32190
  }], linkTarget: [{
@@ -32468,6 +32608,7 @@ class DownloadsListComponent {
32468
32608
  constructor(translateService, changeDetector) {
32469
32609
  this.translateService = translateService;
32470
32610
  this.changeDetector = changeDetector;
32611
+ this.isMobile$ = getIsMobile();
32471
32612
  this.activeFilterFormats = ['all'];
32472
32613
  }
32473
32614
  get linksCount() {
@@ -32555,7 +32696,7 @@ class DownloadsListComponent {
32555
32696
  link.accessServiceProtocol === 'ogcFeatures'));
32556
32697
  }
32557
32698
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DownloadsListComponent, deps: [{ token: i1$1.TranslateService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
32558
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DownloadsListComponent, isStandalone: true, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between items-center pb-4\"\n *ngIf=\"links && links.length > 0\"\n>\n <div class=\"flex flex-row items-center gap-x-4\">\n <div>\n <h3\n class=\"inline-block font-title text-xl text-title font-medium mr-4\"\n translate\n >\n record.metadata.download\n </h3>\n <span class=\"px-3\">({{ linksCount }})</span>\n </div>\n <gn-ui-previous-next-buttons\n class=\"md:block hidden\"\n *ngIf=\"_list?.pagesCount > 1\"\n [listComponent]=\"_list\"\n ></gn-ui-previous-next-buttons>\n </div>\n\n <div\n class=\"flex flex-wrap justify-start sm:justify-end\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-60')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n\n<ng-container>\n <gn-ui-block-list\n class=\"md:block hidden\"\n #blockList\n (listChanges)=\"updateList($event)\"\n containerClass=\"gap-4 pt-5 pb-7\"\n >\n <gn-ui-download-item\n #block\n *ngFor=\"let link of filteredLinks\"\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromApi]=\"isFromApi(link)\"\n [size]=\"blockList.subComponentSize\"\n ></gn-ui-download-item>\n </gn-ui-block-list>\n</ng-container>\n\n<div class=\"mb-5 md:hidden block\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n size=\"M\"\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromApi]=\"isFromApi(link)\"\n ></gn-ui-download-item>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: BlockListComponent, selector: "gn-ui-block-list", inputs: ["containerClass", "paginationContainerClass"], outputs: ["listChanges"] }, { kind: "component", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: ["link", "color", "format", "isFromApi", "size"], outputs: ["exportUrl"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: PreviousNextButtonsComponent, selector: "gn-ui-previous-next-buttons", inputs: ["listComponent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32699
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DownloadsListComponent, isStandalone: true, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between items-center pb-4\"\n *ngIf=\"links && links.length > 0\"\n>\n <div class=\"flex flex-row items-center gap-x-4\">\n <div>\n <h3\n class=\"inline-block font-title text-xl text-title font-medium mr-4\"\n translate\n >\n record.metadata.download\n </h3>\n <span class=\"px-3\">({{ linksCount }})</span>\n </div>\n <gn-ui-previous-next-buttons\n *ngIf=\"(isMobile$ | async) === false && _list?.pagesCount > 1\"\n [listComponent]=\"_list\"\n ></gn-ui-previous-next-buttons>\n </div>\n\n <div\n class=\"flex flex-wrap justify-start sm:justify-end\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-60')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n\n<ng-container>\n <gn-ui-block-list\n *ngIf=\"(isMobile$ | async) === false\"\n #blockList\n (listChanges)=\"updateList($event)\"\n containerClass=\"gap-4 pt-5 pb-7\"\n >\n <gn-ui-download-item\n #block\n *ngFor=\"let link of filteredLinks\"\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromApi]=\"isFromApi(link)\"\n [size]=\"blockList.subComponentSize\"\n ></gn-ui-download-item>\n </gn-ui-block-list>\n</ng-container>\n\n<div class=\"mb-5\" *ngFor=\"let link of filteredLinks\">\n <ng-container *ngIf=\"(isMobile$ | async) === true\">\n <gn-ui-download-item\n size=\"M\"\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromApi]=\"isFromApi(link)\"\n ></gn-ui-download-item>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: BlockListComponent, selector: "gn-ui-block-list", inputs: ["containerClass", "paginationContainerClass"], outputs: ["listChanges"] }, { kind: "component", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: ["link", "color", "format", "isFromApi", "size"], outputs: ["exportUrl"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: PreviousNextButtonsComponent, selector: "gn-ui-previous-next-buttons", inputs: ["listComponent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32559
32700
  }
32560
32701
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DownloadsListComponent, decorators: [{
32561
32702
  type: Component,
@@ -32566,7 +32707,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
32566
32707
  DownloadItemComponent,
32567
32708
  TranslateDirective,
32568
32709
  PreviousNextButtonsComponent,
32569
- ], template: "<div\n class=\"flex flex-wrap justify-between items-center pb-4\"\n *ngIf=\"links && links.length > 0\"\n>\n <div class=\"flex flex-row items-center gap-x-4\">\n <div>\n <h3\n class=\"inline-block font-title text-xl text-title font-medium mr-4\"\n translate\n >\n record.metadata.download\n </h3>\n <span class=\"px-3\">({{ linksCount }})</span>\n </div>\n <gn-ui-previous-next-buttons\n class=\"md:block hidden\"\n *ngIf=\"_list?.pagesCount > 1\"\n [listComponent]=\"_list\"\n ></gn-ui-previous-next-buttons>\n </div>\n\n <div\n class=\"flex flex-wrap justify-start sm:justify-end\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-60')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n\n<ng-container>\n <gn-ui-block-list\n class=\"md:block hidden\"\n #blockList\n (listChanges)=\"updateList($event)\"\n containerClass=\"gap-4 pt-5 pb-7\"\n >\n <gn-ui-download-item\n #block\n *ngFor=\"let link of filteredLinks\"\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromApi]=\"isFromApi(link)\"\n [size]=\"blockList.subComponentSize\"\n ></gn-ui-download-item>\n </gn-ui-block-list>\n</ng-container>\n\n<div class=\"mb-5 md:hidden block\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n size=\"M\"\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromApi]=\"isFromApi(link)\"\n ></gn-ui-download-item>\n</div>\n" }]
32710
+ ], template: "<div\n class=\"flex flex-wrap justify-between items-center pb-4\"\n *ngIf=\"links && links.length > 0\"\n>\n <div class=\"flex flex-row items-center gap-x-4\">\n <div>\n <h3\n class=\"inline-block font-title text-xl text-title font-medium mr-4\"\n translate\n >\n record.metadata.download\n </h3>\n <span class=\"px-3\">({{ linksCount }})</span>\n </div>\n <gn-ui-previous-next-buttons\n *ngIf=\"(isMobile$ | async) === false && _list?.pagesCount > 1\"\n [listComponent]=\"_list\"\n ></gn-ui-previous-next-buttons>\n </div>\n\n <div\n class=\"flex flex-wrap justify-start sm:justify-end\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-60')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n\n<ng-container>\n <gn-ui-block-list\n *ngIf=\"(isMobile$ | async) === false\"\n #blockList\n (listChanges)=\"updateList($event)\"\n containerClass=\"gap-4 pt-5 pb-7\"\n >\n <gn-ui-download-item\n #block\n *ngFor=\"let link of filteredLinks\"\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromApi]=\"isFromApi(link)\"\n [size]=\"blockList.subComponentSize\"\n ></gn-ui-download-item>\n </gn-ui-block-list>\n</ng-container>\n\n<div class=\"mb-5\" *ngFor=\"let link of filteredLinks\">\n <ng-container *ngIf=\"(isMobile$ | async) === true\">\n <gn-ui-download-item\n size=\"M\"\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromApi]=\"isFromApi(link)\"\n ></gn-ui-download-item>\n </ng-container>\n</div>\n" }]
32570
32711
  }], ctorParameters: () => [{ type: i1$1.TranslateService }, { type: i0.ChangeDetectorRef }], propDecorators: { links: [{
32571
32712
  type: Input
32572
32713
  }] } });
@@ -32634,9 +32775,10 @@ class GeoDataBadgeComponent {
32634
32775
  this.linkClassifier = linkClassifier;
32635
32776
  this.showLabel = true;
32636
32777
  this.styling = 'default';
32778
+ this.isMobile$ = getIsMobile();
32637
32779
  }
32638
32780
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GeoDataBadgeComponent, deps: [{ token: LinkClassifierService }], target: i0.ɵɵFactoryTarget.Component }); }
32639
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GeoDataBadgeComponent, isStandalone: true, selector: "gn-ui-geo-data-badge", inputs: { showLabel: "showLabel", styling: "styling", record: "record" }, ngImport: i0, template: "<div\n [class]=\"badgeClasses\"\n [title]=\"'record.metadata.isGeographical' | translate\"\n *ngIf=\"isGeodata()\"\n>\n <ng-icon\n class=\"shrink-0 text-[0.75em]\"\n name=\"matLocationSearchingOutline\"\n ></ng-icon>\n <span class=\"ml-1 hidden sm:inline-block shrink-0\" *ngIf=\"showLabel\" translate\n >record.metadata.isGeographical</span\n >\n</div>\n", styles: [":host{--gn-ui-geo-data-badge-background-color: var(--color-primary-white);--gn-ui-geo-data-badge-text-color: var(--color-primary-darkest)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], viewProviders: [
32781
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: GeoDataBadgeComponent, isStandalone: true, selector: "gn-ui-geo-data-badge", inputs: { showLabel: "showLabel", styling: "styling", record: "record" }, ngImport: i0, template: "<div\n [class]=\"badgeClasses\"\n [title]=\"'record.metadata.isGeographical' | translate\"\n *ngIf=\"isGeodata()\"\n>\n <ng-icon\n class=\"shrink-0 text-[0.75em]\"\n name=\"matLocationSearchingOutline\"\n ></ng-icon>\n <span\n class=\"ml-1 inline-block shrink-0\"\n *ngIf=\"(isMobile$ | async) === false && showLabel\"\n translate\n >record.metadata.isGeographical</span\n >\n</div>\n", styles: [":host{--gn-ui-geo-data-badge-background-color: var(--color-primary-white);--gn-ui-geo-data-badge-text-color: var(--color-primary-darkest)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], viewProviders: [
32640
32782
  provideIcons({
32641
32783
  matLocationSearchingOutline,
32642
32784
  }),
@@ -32648,7 +32790,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
32648
32790
  provideIcons({
32649
32791
  matLocationSearchingOutline,
32650
32792
  }),
32651
- ], template: "<div\n [class]=\"badgeClasses\"\n [title]=\"'record.metadata.isGeographical' | translate\"\n *ngIf=\"isGeodata()\"\n>\n <ng-icon\n class=\"shrink-0 text-[0.75em]\"\n name=\"matLocationSearchingOutline\"\n ></ng-icon>\n <span class=\"ml-1 hidden sm:inline-block shrink-0\" *ngIf=\"showLabel\" translate\n >record.metadata.isGeographical</span\n >\n</div>\n", styles: [":host{--gn-ui-geo-data-badge-background-color: var(--color-primary-white);--gn-ui-geo-data-badge-text-color: var(--color-primary-darkest)}\n"] }]
32793
+ ], template: "<div\n [class]=\"badgeClasses\"\n [title]=\"'record.metadata.isGeographical' | translate\"\n *ngIf=\"isGeodata()\"\n>\n <ng-icon\n class=\"shrink-0 text-[0.75em]\"\n name=\"matLocationSearchingOutline\"\n ></ng-icon>\n <span\n class=\"ml-1 inline-block shrink-0\"\n *ngIf=\"(isMobile$ | async) === false && showLabel\"\n translate\n >record.metadata.isGeographical</span\n >\n</div>\n", styles: [":host{--gn-ui-geo-data-badge-background-color: var(--color-primary-white);--gn-ui-geo-data-badge-text-color: var(--color-primary-darkest)}\n"] }]
32652
32794
  }], ctorParameters: () => [{ type: LinkClassifierService }], propDecorators: { showLabel: [{
32653
32795
  type: Input
32654
32796
  }], styling: [{
@@ -38632,7 +38774,7 @@ class DataTableComponent {
38632
38774
  }
38633
38775
  }
38634
38776
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableComponent, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
38635
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataTableComponent, isStandalone: true, selector: "gn-ui-data-table", inputs: { featureAttributes: "featureAttributes", dataset: "dataset", activeId: "activeId" }, outputs: { selected: "selected" }, providers: [{ provide: MatPaginatorIntl, useClass: CustomMatPaginatorIntl }], viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col border border-gray-300 rounded-lg bg-white h-full\">\n <div class=\"flex-1 overflow-y-hidden overflow-x-auto rounded-lg relative\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n (matSortChange)=\"setSort($event)\"\n [matSortDisableClear]=\"true\"\n *ngrxLet=\"properties$ as properties\"\n >\n <ng-container\n *ngFor=\"let attr of _featureAttributes\"\n [matColumnDef]=\"attr.value\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ attr.label }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[attr.value] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"\n activeId !== undefined && activeId !== null && row.id === activeId\n \"\n ></tr>\n </table>\n <gn-ui-loading-mask\n *ngIf=\"loading$ | async\"\n class=\"sticky inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0 z-[100]\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n <div class=\"flex justify-between items-center overflow-hidden\">\n <div class=\"text-gray-900 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n\n <mat-paginator\n class=\"my-[-16px]\"\n (page)=\"setPagination()\"\n [length]=\"count\"\n [pageSize]=\"10\"\n [showFirstLastButtons]=\"true\"\n [hidePageSize]=\"true\"\n ></mat-paginator>\n </div>\n</div>\n", styles: ["table{width:100%;background:#fff}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:#f5f5f5}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}.mat-mdc-paginator{background:none}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i2$5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2$5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2$5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2$5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2$5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2$5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2$5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2$5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2$5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2$5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i3$1.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i3$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38777
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataTableComponent, isStandalone: true, selector: "gn-ui-data-table", inputs: { featureAttributes: "featureAttributes", dataset: "dataset", activeId: "activeId" }, outputs: { selected: "selected" }, providers: [{ provide: MatPaginatorIntl, useClass: CustomMatPaginatorIntl }], viewQueries: [{ propertyName: "sort", first: true, predicate: MatSort, descendants: true }, { propertyName: "paginator", first: true, predicate: MatPaginator, descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"flex flex-col border border-gray-300 rounded-lg bg-white h-full\">\n <div class=\"flex-1 overflow-y-hidden overflow-x-auto rounded-lg relative\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n (matSortChange)=\"setSort($event)\"\n [matSortDisableClear]=\"true\"\n *ngrxLet=\"properties$ as properties\"\n >\n <ng-container\n *ngFor=\"let attr of _featureAttributes\"\n [matColumnDef]=\"attr.value\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ attr.label }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[attr.value] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"\n activeId !== undefined && activeId !== null && row.id === activeId\n \"\n ></tr>\n </table>\n <gn-ui-loading-mask\n *ngIf=\"loading$ | async\"\n class=\"sticky inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0 z-[100]\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n <div class=\"flex justify-between items-center overflow-hidden\">\n <div class=\"text-gray-900 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n\n <mat-paginator\n class=\"my-[-16px]\"\n (page)=\"setPagination()\"\n [length]=\"count\"\n [pageSize]=\"10\"\n [showFirstLastButtons]=\"true\"\n [hidePageSize]=\"true\"\n ></mat-paginator>\n </div>\n</div>\n", styles: ["table{width:100%;background:#fff}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:#f5f5f5}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}.mat-mdc-paginator{background:none}\n"], dependencies: [{ kind: "ngmodule", type: MatTableModule }, { kind: "component", type: i2$5.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i2$5.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i2$5.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i2$5.MatColumnDef, selector: "[matColumnDef]", inputs: ["matColumnDef"] }, { kind: "directive", type: i2$5.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i2$5.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i2$5.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i2$5.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i2$5.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i2$5.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "ngmodule", type: MatSortModule }, { kind: "directive", type: i3$1.MatSort, selector: "[matSort]", inputs: ["matSortActive", "matSortStart", "matSortDirection", "matSortDisableClear", "matSortDisabled"], outputs: ["matSortChange"], exportAs: ["matSort"] }, { kind: "component", type: i3$1.MatSortHeader, selector: "[mat-sort-header]", inputs: ["mat-sort-header", "arrowPosition", "start", "disabled", "sortActionDescription", "disableClear"], exportAs: ["matSortHeader"] }, { kind: "ngmodule", type: MatPaginatorModule }, { kind: "component", type: i4.MatPaginator, selector: "mat-paginator", inputs: ["color", "pageIndex", "length", "pageSize", "pageSizeOptions", "hidePageSize", "showFirstLastButtons", "selectConfig", "disabled"], outputs: ["page"], exportAs: ["matPaginator"] }, { kind: "ngmodule", type: ScrollingModule }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: LetDirective, selector: "[ngrxLet]", inputs: ["ngrxLet", "ngrxLetSuspenseTpl"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38636
38778
  }
38637
38779
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataTableComponent, decorators: [{
38638
38780
  type: Component,
@@ -38646,6 +38788,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
38646
38788
  PopupAlertComponent,
38647
38789
  LetDirective,
38648
38790
  TranslatePipe,
38791
+ TranslateDirective,
38649
38792
  ], providers: [{ provide: MatPaginatorIntl, useClass: CustomMatPaginatorIntl }], selector: 'gn-ui-data-table', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col border border-gray-300 rounded-lg bg-white h-full\">\n <div class=\"flex-1 overflow-y-hidden overflow-x-auto rounded-lg relative\">\n <table\n mat-table\n [dataSource]=\"dataSource\"\n matSort\n (matSortChange)=\"setSort($event)\"\n [matSortDisableClear]=\"true\"\n *ngrxLet=\"properties$ as properties\"\n >\n <ng-container\n *ngFor=\"let attr of _featureAttributes\"\n [matColumnDef]=\"attr.value\"\n >\n <th\n mat-header-cell\n *matHeaderCellDef\n mat-sort-header\n class=\"text-sm text-black bg-white\"\n >\n {{ attr.label }}\n </th>\n <td\n mat-cell\n *matCellDef=\"let element\"\n class=\"whitespace-nowrap pr-1 truncate\"\n >\n {{ element[attr.value] }}\n </td>\n </ng-container>\n\n <tr mat-header-row *matHeaderRowDef=\"properties; sticky: true\"></tr>\n <tr\n [id]=\"getRowEltId(row.id)\"\n mat-row\n *matRowDef=\"let row; columns: properties\"\n (click)=\"selected.emit(row)\"\n [class.active]=\"\n activeId !== undefined && activeId !== null && row.id === activeId\n \"\n ></tr>\n </table>\n <gn-ui-loading-mask\n *ngIf=\"loading$ | async\"\n class=\"sticky inset-0\"\n [message]=\"'table.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0 z-[100]\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n <div class=\"flex justify-between items-center overflow-hidden\">\n <div class=\"text-gray-900 px-4 py-2 text-sm\">\n <span class=\"count font-extrabold text-primary\">{{ count }}</span\n >&nbsp;<span translate>table.object.count</span>.\n </div>\n\n <mat-paginator\n class=\"my-[-16px]\"\n (page)=\"setPagination()\"\n [length]=\"count\"\n [pageSize]=\"10\"\n [showFirstLastButtons]=\"true\"\n [hidePageSize]=\"true\"\n ></mat-paginator>\n </div>\n</div>\n", styles: ["table{width:100%;background:#fff}th.mat-mdc-header-cell,td.mat-mdc-cell,td.mat-mdc-footer-cell{padding-right:20px}tr.mat-mdc-row,tr.mat-mdc-footer-row{height:36px}tr:hover{background:#f5f5f5}tr.mat-mdc-header-row{height:48px}[mat-header-cell]{color:#0000008a;font-size:12px;font-weight:500}tr{cursor:pointer}.active .mat-mdc-cell{color:var(--color-primary)}.mat-mdc-paginator{background:none}\n"] }]
38650
38793
  }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { featureAttributes: [{
38651
38794
  type: Input
@@ -38806,6 +38949,12 @@ class ChartViewComponent {
38806
38949
  set chartType(value) {
38807
38950
  this.chartType$.next(value);
38808
38951
  }
38952
+ set userChartConfig(config) {
38953
+ this.aggregation$.next(config.aggregation);
38954
+ this.xProperty$.next(config.xProperty);
38955
+ this.yProperty$.next(config.yProperty);
38956
+ this.chartType$.next(config.chartType);
38957
+ }
38809
38958
  get aggregationChoices() {
38810
38959
  if (!this.yProperty$.value) {
38811
38960
  return [{ label: 'chart.aggregation.count', value: 'count' }];
@@ -38966,7 +39115,7 @@ class ChartViewComponent {
38966
39115
  this.changeDetector.detectChanges();
38967
39116
  }
38968
39117
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartViewComponent, deps: [{ token: DataService }, { token: i0.ChangeDetectorRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
38969
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChartViewComponent, isStandalone: true, selector: "gn-ui-chart-view", inputs: { featureCatalog: "featureCatalog", cacheActive: "cacheActive", link: "link", aggregation: "aggregation", xProperty: "xProperty", yProperty: "yProperty", chartType: "chartType" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div\n class=\"flex flex-col space-y-2 sm:flex-row sm:space-y-0 sm:space-x-2 justify-between text-[13px]\"\n >\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"typeChoices\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"chartType$.next($event)\"\n [selected]=\"chartType$.value\"\n [title]=\"'chart.dropdown.type' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"xChoices$ | async\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"xProperty$.next($event)\"\n [selected]=\"xProperty$.value\"\n [title]=\"'chart.dropdown.xProperty' | translate\"\n ></gn-ui-dropdown-selector>\n <ng-container *ngIf=\"yChoices$ | async as yChoices\">\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n *ngIf=\"!isCountAggregation\"\n [choices]=\"yChoices\"\n (selectValue)=\"yProperty$.next($event)\"\n [selected]=\"yProperty$.value\"\n [title]=\"'chart.dropdown.yProperty' | translate\"\n class=\"select-y-prop\"\n ></gn-ui-dropdown-selector>\n </ng-container>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"aggregationChoices\"\n class=\"aggregation-choices\"\n (selectValue)=\"aggregation$.next($event)\"\n [selected]=\"aggregation$.value\"\n [title]=\"'chart.dropdown.aggregation' | translate\"\n ></gn-ui-dropdown-selector>\n </div>\n <div\n class=\"relative h-full mt-2 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-chart\n *ngIf=\"!error\"\n [data]=\"chartData$ | async\"\n [type]=\"chartType$.value\"\n [prettyLabel]=\"prettyLabel$ | async\"\n [labelProperty]=\"labelProperty\"\n [valueProperty]=\"valueProperty\"\n ></gn-ui-chart>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'chart.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: ChartComponent, selector: "gn-ui-chart", inputs: ["data", "labelProperty", "prettyLabel", "valueProperty", "secondaryValueProperty", "type"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39118
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ChartViewComponent, isStandalone: true, selector: "gn-ui-chart-view", inputs: { featureCatalog: "featureCatalog", cacheActive: "cacheActive", link: "link", aggregation: "aggregation", xProperty: "xProperty", yProperty: "yProperty", chartType: "chartType", userChartConfig: "userChartConfig" }, outputs: { chartConfig$: "chartConfig$" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col\">\n <div\n class=\"flex flex-col space-y-2 sm:flex-row sm:space-y-0 sm:space-x-2 justify-between text-[13px]\"\n >\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"typeChoices\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"chartType$.next($event)\"\n [selected]=\"chartType$.value\"\n [title]=\"'chart.dropdown.type' | translate\"\n ></gn-ui-dropdown-selector>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"xChoices$ | async\"\n [extraBtnClass]=\"'secondary min-w-full'\"\n (selectValue)=\"xProperty$.next($event)\"\n [selected]=\"xProperty$.value\"\n [title]=\"'chart.dropdown.xProperty' | translate\"\n ></gn-ui-dropdown-selector>\n <ng-container *ngIf=\"yChoices$ | async as yChoices\">\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n *ngIf=\"!isCountAggregation\"\n [choices]=\"yChoices\"\n (selectValue)=\"yProperty$.next($event)\"\n [selected]=\"yProperty$.value\"\n [title]=\"'chart.dropdown.yProperty' | translate\"\n class=\"select-y-prop\"\n ></gn-ui-dropdown-selector>\n </ng-container>\n <gn-ui-dropdown-selector\n class=\"basis-1/4\"\n [choices]=\"aggregationChoices\"\n class=\"aggregation-choices\"\n (selectValue)=\"aggregation$.next($event)\"\n [selected]=\"aggregation$.value\"\n [title]=\"'chart.dropdown.aggregation' | translate\"\n ></gn-ui-dropdown-selector>\n </div>\n <div\n class=\"relative h-full mt-2 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-chart\n *ngIf=\"!error\"\n [data]=\"chartData$ | async\"\n [type]=\"chartType$.value\"\n [prettyLabel]=\"prettyLabel$ | async\"\n [labelProperty]=\"labelProperty\"\n [valueProperty]=\"valueProperty\"\n ></gn-ui-chart>\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'chart.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: ChartComponent, selector: "gn-ui-chart", inputs: ["data", "labelProperty", "prettyLabel", "valueProperty", "secondaryValueProperty", "type"] }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
38970
39119
  }
38971
39120
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ChartViewComponent, decorators: [{
38972
39121
  type: Component,
@@ -38992,6 +39141,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
38992
39141
  type: Input
38993
39142
  }], chartType: [{
38994
39143
  type: Input
39144
+ }], userChartConfig: [{
39145
+ type: Input
38995
39146
  }], chartConfig$: [{
38996
39147
  type: Output
38997
39148
  }] } });
@@ -39349,7 +39500,9 @@ class MdViewEffects {
39349
39500
  Metadata effects
39350
39501
  */
39351
39502
  this.loadFullMetadata$ = createEffect(() => this.actions$.pipe(ofType(loadFullMetadata), switchMap$1(({ uuid }) => this.recordsRepository.getRecord(uuid)), map$1((record) => {
39352
- if (record === null || !this.router.url.includes(record.kind)) {
39503
+ if (record === null ||
39504
+ (this.router.url !== '/' && // FIXME: special case for WC, find a better way
39505
+ !this.router.url.includes(record.kind))) {
39353
39506
  return loadFullMetadataFailure({ notFound: true });
39354
39507
  }
39355
39508
  return loadFullMetadataSuccess({ full: record });
@@ -39918,14 +40071,30 @@ class DataViewComponent {
39918
40071
  }
39919
40072
  set selectedView(value) {
39920
40073
  this._selectedView = value;
39921
- if (value !== 'map') {
40074
+ if (this.mode === value) {
39922
40075
  this.linkSelected.emit(this.selectedLink$.value);
39923
40076
  }
39924
40077
  }
40078
+ set datavizConfig(value) {
40079
+ this._selectedView = value.view;
40080
+ if (this.mode === value.view) {
40081
+ if (!value.source) {
40082
+ this.linkSelected.emit(this.selectedLink$.value);
40083
+ }
40084
+ else {
40085
+ this._chartConfig = value.chartConfig;
40086
+ this._selectedChoice = getLinkId(value.source);
40087
+ this.selectedLink$.next(value.source);
40088
+ }
40089
+ }
40090
+ }
39925
40091
  constructor(mdViewFacade) {
39926
40092
  this.mdViewFacade = mdViewFacade;
39927
40093
  this.displaySource = true;
40094
+ this.linkMap = new Map();
39928
40095
  this._selectedView = '';
40096
+ this._chartConfig = null;
40097
+ this._selectedChoice = null;
39929
40098
  this.chartConfig$ = new BehaviorSubject(null);
39930
40099
  this.linkSelected = new EventEmitter();
39931
40100
  this.cacheActive$ = this.mdViewFacade.isHighUpdateFrequency$.pipe(map$1((highF) => !highF));
@@ -39939,12 +40108,14 @@ class DataViewComponent {
39939
40108
  return a;
39940
40109
  }));
39941
40110
  this.dropdownChoices$ = this.compatibleDataLinks$.pipe(tap$1((links) => {
39942
- if (links.indexOf(this.selectedLink$.value) === -1) {
39943
- this.selectLink(JSON.stringify(links[0]));
40111
+ this.linkMap.clear();
40112
+ links.forEach((link) => this.linkMap.set(getLinkId(link), link));
40113
+ if (!links.some((l) => l.url === this.selectedLink$.value?.url)) {
40114
+ this.selectLink(getLinkId(links[0]));
39944
40115
  }
39945
40116
  }), map$1((links) => links.map((link) => ({
39946
40117
  label: getLinkLabel(link),
39947
- value: JSON.stringify(link),
40118
+ value: getLinkId(link),
39948
40119
  }))));
39949
40120
  this.selectedLink$ = new BehaviorSubject(null);
39950
40121
  this.hidePreview$ = this.excludeWfs$.pipe(map$1((excludeWfs) => this.mode === 'chart' && excludeWfs));
@@ -39952,16 +40123,15 @@ class DataViewComponent {
39952
40123
  setChartConfig(event) {
39953
40124
  this.mdViewFacade.setChartConfig(event);
39954
40125
  }
39955
- selectLink(linkAsString) {
39956
- const link = JSON.parse(linkAsString);
39957
- if (this._selectedView && this._selectedView !== 'map') {
40126
+ selectLink(linkId) {
40127
+ const link = this.linkMap.get(linkId);
40128
+ if (this._selectedView && this._selectedView === this.mode) {
39958
40129
  this.linkSelected.emit(link);
39959
40130
  }
39960
- link.url = new URL(link.url);
39961
40131
  this.selectedLink$.next(link);
39962
40132
  }
39963
40133
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewComponent, deps: [{ token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
39964
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataViewComponent, isStandalone: true, selector: "gn-ui-data-view", inputs: { mode: "mode", displaySource: "displaySource", exceedsLimit: "exceedsLimit", selectedView: "selectedView" }, outputs: { chartConfig$: "chartConfig$", linkSelected: "linkSelected" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"w-full py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"h-[44px] w-full\"\n extraBtnClass=\"font-sans font-bold\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n </div>\n <ng-container *ngIf=\"hidePreview$ | async; else dataView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #dataView>\n <div class=\"relative h-[460px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n ></gn-ui-chart-view>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: TableViewComponent, selector: "gn-ui-table-view", inputs: ["featureCatalog", "cacheActive", "link"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: ChartViewComponent, selector: "gn-ui-chart-view", inputs: ["featureCatalog", "cacheActive", "link", "aggregation", "xProperty", "yProperty", "chartType"], outputs: ["chartConfig$"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40134
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataViewComponent, isStandalone: true, selector: "gn-ui-data-view", inputs: { mode: "mode", displaySource: "displaySource", exceedsLimit: "exceedsLimit", selectedView: "selectedView", datavizConfig: "datavizConfig" }, outputs: { chartConfig$: "chartConfig$", linkSelected: "linkSelected" }, ngImport: i0, template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"w-full py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"h-[44px] w-full\"\n extraBtnClass=\"font-sans font-bold\"\n [choices]=\"choices\"\n [selected]=\"_selectedChoice\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n </div>\n <ng-container *ngIf=\"hidePreview$ | async; else dataView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #dataView>\n <div class=\"relative h-[460px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n [userChartConfig]=\"_chartConfig\"\n ></gn-ui-chart-view>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: TableViewComponent, selector: "gn-ui-table-view", inputs: ["featureCatalog", "cacheActive", "link"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: ChartViewComponent, selector: "gn-ui-chart-view", inputs: ["featureCatalog", "cacheActive", "link", "aggregation", "xProperty", "yProperty", "chartType", "userChartConfig"], outputs: ["chartConfig$"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39965
40135
  }
39966
40136
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewComponent, decorators: [{
39967
40137
  type: Component,
@@ -39973,7 +40143,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39973
40143
  TranslatePipe,
39974
40144
  ChartViewComponent,
39975
40145
  PopupAlertComponent,
39976
- ], template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"w-full py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"h-[44px] w-full\"\n extraBtnClass=\"font-sans font-bold\"\n [choices]=\"choices\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n </div>\n <ng-container *ngIf=\"hidePreview$ | async; else dataView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #dataView>\n <div class=\"relative h-[460px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n ></gn-ui-chart-view>\n </div>\n </ng-template>\n</div>\n" }]
40146
+ ], template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"w-full py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"dropdownChoices$ | async as choices\"\n [ngClass]=\"{ hidden: !displaySource }\"\n [title]=\"'table.select.data' | translate\"\n class=\"h-[44px] w-full\"\n extraBtnClass=\"font-sans font-bold\"\n [choices]=\"choices\"\n [selected]=\"_selectedChoice\"\n (selectValue)=\"selectLink($event)\"\n ></gn-ui-dropdown-selector>\n </div>\n <ng-container *ngIf=\"hidePreview$ | async; else dataView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #dataView>\n <div class=\"relative h-[460px]\">\n <gn-ui-table-view\n *ngIf=\"mode === 'table'\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n ></gn-ui-table-view>\n <gn-ui-chart-view\n *ngIf=\"mode === 'chart'\"\n (chartConfig$)=\"setChartConfig($event)\"\n [cacheActive]=\"cacheActive$ | async\"\n [link]=\"selectedLink$ | async\"\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n [userChartConfig]=\"_chartConfig\"\n ></gn-ui-chart-view>\n </div>\n </ng-template>\n</div>\n" }]
39977
40147
  }], ctorParameters: () => [{ type: MdViewFacade }], propDecorators: { mode: [{
39978
40148
  type: Input
39979
40149
  }], displaySource: [{
@@ -39982,6 +40152,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39982
40152
  type: Input
39983
40153
  }], selectedView: [{
39984
40154
  type: Input
40155
+ }], datavizConfig: [{
40156
+ type: Input
39985
40157
  }], chartConfig$: [{
39986
40158
  type: Output
39987
40159
  }], linkSelected: [{
@@ -40360,17 +40532,25 @@ class MapViewComponent {
40360
40532
  this.excludeWfs$.next(value);
40361
40533
  }
40362
40534
  set selectedView(value) {
40363
- if (value === 'map') {
40364
- this.selectedLink$.pipe(take(1)).subscribe((link) => {
40365
- this.linkSelected.emit(link);
40366
- });
40535
+ this.selectedView$.next(value);
40536
+ }
40537
+ set datavizConfig(value) {
40538
+ if (value.view === 'map') {
40539
+ this.selectedView$.next(value.view);
40540
+ if (value.styleTMSIndex) {
40541
+ this._styleFromConfig = value.styleTMSIndex;
40542
+ }
40543
+ if (value.source) {
40544
+ this.linkFromConfig$.next(value.source);
40545
+ }
40367
40546
  }
40368
40547
  }
40369
- selectLinkToDisplay(i) {
40370
- this.selectedLinkIndex$.next(i);
40548
+ selectLinkToDisplay(id) {
40549
+ this.selectedLinkId$.next(id);
40371
40550
  }
40372
40551
  selectStyleToDisplay(i) {
40373
- this.selectedStyleIndex$.next(i);
40552
+ this.selectedStyleId$.next(i);
40553
+ this.styleSelected.emit(i);
40374
40554
  }
40375
40555
  toggleLegend() {
40376
40556
  this.showLegend = !this.showLegend;
@@ -40384,8 +40564,13 @@ class MapViewComponent {
40384
40564
  this.dataService = dataService;
40385
40565
  this.changeRef = changeRef;
40386
40566
  this.translateService = translateService;
40567
+ this.linkFromConfig$ = new BehaviorSubject(null);
40568
+ this._selectedChoice = null;
40569
+ this._styleFromConfig = null;
40570
+ this.linkMap = new Map();
40387
40571
  this.displaySource = true;
40388
40572
  this.linkSelected = new EventEmitter();
40573
+ this.styleSelected = new EventEmitter();
40389
40574
  this.excludeWfs$ = new BehaviorSubject(false);
40390
40575
  this.hidePreview = false;
40391
40576
  this.showLegend = true;
@@ -40399,22 +40584,45 @@ class MapViewComponent {
40399
40584
  ...mapApiLinks,
40400
40585
  ...geoDataLinksWithGeometry,
40401
40586
  ]), shareReplay(1));
40402
- this.dropdownChoices$ = this.compatibleMapLinks$.pipe(map$1((links) => links.length
40403
- ? links.map((link, index) => ({
40404
- label: getLinkLabel(link),
40405
- value: index,
40406
- }))
40407
- : [{ label: 'map.dropdown.placeholder', value: 0 }]));
40408
- this.selectedLinkIndex$ = new BehaviorSubject(0);
40409
- this.selectedStyleIndex$ = new BehaviorSubject(0);
40587
+ this.dropdownChoices$ = this.compatibleMapLinks$.pipe(map$1((links) => {
40588
+ this.linkMap.clear();
40589
+ links.forEach((link) => this.linkMap.set(getLinkId(link), link));
40590
+ return links.length
40591
+ ? links.map((link) => ({
40592
+ label: getLinkLabel(link),
40593
+ value: getLinkId(link),
40594
+ }))
40595
+ : [{ label: 'map.dropdown.placeholder', value: '' }];
40596
+ }));
40597
+ this.selectedView$ = new BehaviorSubject(null);
40598
+ this.selectedLinkId$ = new BehaviorSubject(null);
40599
+ this.selectedStyleId$ = new BehaviorSubject(null);
40410
40600
  this.selectedSourceLink$ = combineLatest([
40411
40601
  this.compatibleMapLinks$,
40412
- this.selectedLinkIndex$.pipe(distinctUntilChanged()),
40602
+ this.linkFromConfig$,
40603
+ this.selectedLinkId$.pipe(distinctUntilChanged()),
40604
+ this.selectedView$,
40413
40605
  ]).pipe(tap$1(() => {
40414
40606
  this.error = null;
40415
- }), map$1(([links, index]) => {
40416
- this.linkSelected.emit(links[index]);
40417
- return links[index];
40607
+ }), map$1(([compatibleLinks, configLink, id, view]) => {
40608
+ if (view === 'map') {
40609
+ if (configLink &&
40610
+ !id &&
40611
+ compatibleLinks.some((link) => getLinkId(link) === getLinkId(configLink))) {
40612
+ this._selectedChoice = getLinkId(configLink);
40613
+ this.linkSelected.emit(configLink);
40614
+ return configLink;
40615
+ }
40616
+ else if (id) {
40617
+ this._selectedChoice = id;
40618
+ this.linkSelected.emit(this.linkMap.get(id));
40619
+ return this.linkMap.get(id);
40620
+ }
40621
+ else {
40622
+ this.linkSelected.emit(compatibleLinks[0]);
40623
+ return compatibleLinks[0];
40624
+ }
40625
+ }
40418
40626
  }));
40419
40627
  this.styleLinks$ = this.selectedSourceLink$.pipe(switchMap$1((src) => {
40420
40628
  if (src &&
@@ -40433,7 +40641,14 @@ class MapViewComponent {
40433
40641
  }));
40434
40642
  }
40435
40643
  return of([]);
40436
- }), tap$1(() => this.selectedStyleIndex$.next(0)), shareReplay(1));
40644
+ }), tap$1((styles) => {
40645
+ if (this._styleFromConfig && this._styleFromConfig <= styles.length) {
40646
+ this.selectedStyleId$.next(this._styleFromConfig);
40647
+ }
40648
+ else {
40649
+ this.selectedStyleId$.next(0);
40650
+ }
40651
+ }), shareReplay(1));
40437
40652
  this.styleDropdownChoices$ = this.styleLinks$.pipe(map$1((links) => links.length
40438
40653
  ? links.map((link, index) => ({
40439
40654
  label: getLinkLabel(link),
@@ -40448,7 +40663,7 @@ class MapViewComponent {
40448
40663
  this.selectedLink$ = combineLatest([
40449
40664
  this.selectedSourceLink$,
40450
40665
  this.styleLinks$,
40451
- this.selectedStyleIndex$.pipe(distinctUntilChanged()),
40666
+ this.selectedStyleId$.pipe(distinctUntilChanged()),
40452
40667
  ]).pipe(map$1(([src, styles, styleIdx]) => (styles.length ? styles[styleIdx] : src)), shareReplay(1));
40453
40668
  this.currentLayers$ = combineLatest([this.selectedLink$, this.excludeWfs$]).pipe(switchMap$1(([link, excludeWfs]) => {
40454
40669
  if (!link) {
@@ -40531,7 +40746,9 @@ class MapViewComponent {
40531
40746
  link.accessServiceProtocol === 'tms') {
40532
40747
  // FIXME: here we're assuming that the TMS serves vector tiles only; should be checked with ogc-client first
40533
40748
  return of({
40534
- url: link.url.toString().replace(/\/?$/, '/{z}/{x}/{y}.pbf'),
40749
+ url: link.url
40750
+ .toString()
40751
+ .replace(/\/?$/, `/${link.name}/{z}/{x}/{y}.pbf`),
40535
40752
  type: 'xyz',
40536
40753
  tileFormat: 'application/vnd.mapbox-vector-tile',
40537
40754
  name: link.name,
@@ -40585,7 +40802,7 @@ class MapViewComponent {
40585
40802
  this.changeRef.detectChanges();
40586
40803
  }
40587
40804
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapViewComponent, deps: [{ token: MdViewFacade }, { token: MapUtilsService }, { token: DataService }, { token: i0.ChangeDetectorRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
40588
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapViewComponent, isStandalone: true, selector: "gn-ui-map-view", inputs: { exceedsLimit: "exceedsLimit", selectedView: "selectedView", displaySource: "displaySource" }, outputs: { linkSelected: "linkSelected" }, viewQueries: [{ propertyName: "mapContainer", first: true, predicate: ["mapContainer"], descendants: true }], ngImport: i0, template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"flex flex-col md:flex-row gap-4 py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"displaySource\"\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n\n <ng-container *ngIf=\"(styleLinks$ | async)?.length > 0; else styleDisabled\">\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n (selectValue)=\"selectStyleToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n </ng-container>\n <ng-template #styleDisabled>\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0 text-gray-400\"\n extraBtnClass=\"font-sans font-bold text-gray-400\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [disabled]=\"true\"\n ></gn-ui-dropdown-selector>\n </ng-template>\n\n <div class=\"self-end md:ml-2\">\n <gn-ui-external-viewer-button\n extraClass=\"w-[44px] h-[44px]\"\n [link]=\"selectedLink$ | async\"\n >\n </gn-ui-external-viewer-button>\n </div>\n </div>\n <ng-container *ngIf=\"hidePreview; else mapView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #mapView>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n (sourceLoadError)=\"onSourceLoadError($event)\"\n ></gn-ui-map-container>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\">Legend</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n >\n Legend\n </gn-ui-button>\n\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick", "sourceLoadError"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature", "featureCatalog"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link", "extraClass"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: MapLegendComponent, selector: "gn-ui-map-legend", inputs: ["context"], outputs: ["legendStatusChange"] }], viewProviders: [provideIcons({ matClose })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40805
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MapViewComponent, isStandalone: true, selector: "gn-ui-map-view", inputs: { exceedsLimit: "exceedsLimit", selectedView: "selectedView", datavizConfig: "datavizConfig", displaySource: "displaySource" }, outputs: { linkSelected: "linkSelected", styleSelected: "styleSelected" }, viewQueries: [{ propertyName: "mapContainer", first: true, predicate: ["mapContainer"], descendants: true }], ngImport: i0, template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"flex flex-col md:flex-row gap-4 py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"displaySource\"\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n [selected]=\"_selectedChoice\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n\n <ng-container *ngIf=\"(styleLinks$ | async)?.length > 0; else styleDisabled\">\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [selected]=\"_styleFromConfig\"\n (selectValue)=\"selectStyleToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n </ng-container>\n <ng-template #styleDisabled>\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0 text-gray-400\"\n extraBtnClass=\"font-sans font-bold text-gray-400\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [disabled]=\"true\"\n ></gn-ui-dropdown-selector>\n </ng-template>\n\n <div class=\"self-end md:ml-2\">\n <gn-ui-external-viewer-button\n extraClass=\"w-[44px] h-[44px]\"\n [link]=\"selectedLink$ | async\"\n >\n </gn-ui-external-viewer-button>\n </div>\n </div>\n <ng-container *ngIf=\"hidePreview; else mapView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #mapView>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n (sourceLoadError)=\"onSourceLoadError($event)\"\n ></gn-ui-map-container>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\" translate>map.legend.title</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n translate\n >\n map.legend.title\n </gn-ui-button>\n\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n </ng-template>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick", "sourceLoadError"] }, { kind: "component", type: FeatureDetailComponent, selector: "gn-ui-feature-detail", inputs: ["feature", "featureCatalog"] }, { kind: "component", type: PopupAlertComponent, selector: "gn-ui-popup-alert", inputs: ["icon", "type", "position"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: LoadingMaskComponent, selector: "gn-ui-loading-mask", inputs: ["message"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ExternalViewerButtonComponent, selector: "gn-ui-external-viewer-button", inputs: ["link", "extraClass"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: MapLegendComponent, selector: "gn-ui-map-legend", inputs: ["context"], outputs: ["legendStatusChange"] }], viewProviders: [provideIcons({ matClose })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
40589
40806
  }
40590
40807
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MapViewComponent, decorators: [{
40591
40808
  type: Component,
@@ -40602,15 +40819,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
40602
40819
  ExternalViewerButtonComponent,
40603
40820
  ButtonComponent,
40604
40821
  MapLegendComponent,
40605
- ], viewProviders: [provideIcons({ matClose })], template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"flex flex-col md:flex-row gap-4 py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"displaySource\"\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n\n <ng-container *ngIf=\"(styleLinks$ | async)?.length > 0; else styleDisabled\">\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n (selectValue)=\"selectStyleToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n </ng-container>\n <ng-template #styleDisabled>\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0 text-gray-400\"\n extraBtnClass=\"font-sans font-bold text-gray-400\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [disabled]=\"true\"\n ></gn-ui-dropdown-selector>\n </ng-template>\n\n <div class=\"self-end md:ml-2\">\n <gn-ui-external-viewer-button\n extraClass=\"w-[44px] h-[44px]\"\n [link]=\"selectedLink$ | async\"\n >\n </gn-ui-external-viewer-button>\n </div>\n </div>\n <ng-container *ngIf=\"hidePreview; else mapView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #mapView>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n (sourceLoadError)=\"onSourceLoadError($event)\"\n ></gn-ui-map-container>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\">Legend</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n >\n Legend\n </gn-ui-button>\n\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n </ng-template>\n</div>\n" }]
40822
+ ], viewProviders: [provideIcons({ matClose })], template: "<div class=\"w-full h-full flex flex-col gap-[13px]\">\n <div\n class=\"flex flex-col md:flex-row gap-4 py-4 px-5 bg-white border border-color-border rounded-lg mt-6\"\n >\n <gn-ui-dropdown-selector\n *ngIf=\"displaySource\"\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.layer' | translate\"\n [choices]=\"dropdownChoices$ | async\"\n [selected]=\"_selectedChoice\"\n (selectValue)=\"selectLinkToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n\n <ng-container *ngIf=\"(styleLinks$ | async)?.length > 0; else styleDisabled\">\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0\"\n extraBtnClass=\"font-sans font-bold\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [selected]=\"_styleFromConfig\"\n (selectValue)=\"selectStyleToDisplay($event)\"\n ></gn-ui-dropdown-selector>\n </ng-container>\n <ng-template #styleDisabled>\n <gn-ui-dropdown-selector\n class=\"w-full md:flex-1 md:min-w-0 text-gray-400\"\n extraBtnClass=\"font-sans font-bold text-gray-400\"\n [title]=\"'map.select.style' | translate\"\n [choices]=\"styleDropdownChoices$ | async\"\n [disabled]=\"true\"\n ></gn-ui-dropdown-selector>\n </ng-template>\n\n <div class=\"self-end md:ml-2\">\n <gn-ui-external-viewer-button\n extraClass=\"w-[44px] h-[44px]\"\n [link]=\"selectedLink$ | async\"\n >\n </gn-ui-external-viewer-button>\n </div>\n </div>\n <ng-container *ngIf=\"hidePreview; else mapView\">\n <gn-ui-popup-alert\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"block h-12 p-1\"\n >\n <span translate>record.feature.limit</span>\n </gn-ui-popup-alert>\n </ng-container>\n <ng-template #mapView>\n <div\n class=\"relative w-full h-full bg-white border border-gray-300 rounded-lg overflow-hidden\"\n >\n <gn-ui-map-container\n #mapContainer\n [context]=\"mapContext$ | async\"\n (featuresClick)=\"onMapFeatureSelect($event)\"\n (sourceLoadError)=\"onSourceLoadError($event)\"\n ></gn-ui-map-container>\n <div\n class=\"top-[1em] right-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [class.hidden]=\"!selection\"\n >\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"resetSelection()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"absolute right-[0.5em] ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n <gn-ui-feature-detail\n [featureCatalog]=\"mdViewFacade.featureCatalog$ | async\"\n [feature]=\"selection\"\n ></gn-ui-feature-detail>\n </div>\n\n <div\n class=\"top-[1em] p-3 bg-white absolute overflow-y-auto overflow-x-hidden max-h-72 w-56\"\n [ngClass]=\"{ 'right-[1em]': !selection, 'right-[16em]': selection }\"\n [hidden]=\"!showLegend || !legendExists\"\n >\n <div class=\"flex justify-between items-center mb-2\">\n <div class=\"text-primary font-bold\" translate>map.legend.title</div>\n <gn-ui-button\n type=\"light\"\n (buttonClick)=\"toggleLegend()\"\n style=\"\n --gn-ui-button-padding: 0px;\n --gn-ui-button-width: 24px;\n --gn-ui-button-height: 24px;\n \"\n extraClass=\"ml-[8px] mr-[10px]\"\n >\n <ng-icon name=\"matClose\" class=\"align-middle text-sm\"></ng-icon>\n </gn-ui-button>\n </div>\n <gn-ui-map-legend\n [context]=\"mapContext$ | async\"\n (legendStatusChange)=\"onLegendStatusChange($event)\"\n ></gn-ui-map-legend>\n </div>\n\n <gn-ui-button\n *ngIf=\"!showLegend && legendExists && !selection\"\n type=\"outline\"\n (buttonClick)=\"toggleLegend()\"\n extraClass=\"absolute top-[1em] right-[1em] rounded p-1 text-xs bg-white\"\n translate\n >\n map.legend.title\n </gn-ui-button>\n\n <gn-ui-loading-mask\n *ngIf=\"loading\"\n class=\"absolute inset-0\"\n [message]=\"'map.loading.data' | translate\"\n ></gn-ui-loading-mask>\n <gn-ui-popup-alert\n *ngIf=\"error\"\n type=\"warning\"\n icon=\"matErrorOutlineOutline\"\n class=\"absolute m-2 inset-0\"\n >\n <span translate>{{ error }}</span>\n </gn-ui-popup-alert>\n </div>\n </ng-template>\n</div>\n" }]
40606
40823
  }], ctorParameters: () => [{ type: MdViewFacade }, { type: MapUtilsService }, { type: DataService }, { type: i0.ChangeDetectorRef }, { type: i1$1.TranslateService }], propDecorators: { exceedsLimit: [{
40607
40824
  type: Input
40608
40825
  }], selectedView: [{
40609
40826
  type: Input
40827
+ }], datavizConfig: [{
40828
+ type: Input
40610
40829
  }], displaySource: [{
40611
40830
  type: Input
40612
40831
  }], linkSelected: [{
40613
40832
  type: Output
40833
+ }], styleSelected: [{
40834
+ type: Output
40614
40835
  }], mapContainer: [{
40615
40836
  type: ViewChild,
40616
40837
  args: ['mapContainer']
@@ -40724,8 +40945,6 @@ const RECORD_KEYWORDS_FIELD = {
40724
40945
  model: 'keywords',
40725
40946
  formFieldConfig: {},
40726
40947
  };
40727
- // keeping track of the label to not lose existing translation
40728
- marker('editor.record.form.field.keywords');
40729
40948
  const RECORD_RESOURCE_CREATED_FIELD = {
40730
40949
  model: 'resourceCreated',
40731
40950
  formFieldConfig: {
@@ -43433,7 +43652,7 @@ class MultilingualPanelComponent {
43433
43652
  provideNgIconsConfig({
43434
43653
  size: '1.25em',
43435
43654
  }),
43436
- ], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"flex flex-col h-full w-[302px] bg-neutral-100 border-l border-gray-300 py-8 px-3 gap-6 overflow-auto\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.multilingual.title</span\n >\n <button\n [title]=\"'editor.record.form.multilingual.open' | translate\"\n (click)=\"toggleLanguageSelection()\"\n *ngIf=\"isMultilingual\"\n data-test=\"activateSelection\"\n >\n <ng-icon class=\"mt-1\" name=\"iconoirSettings\"></ng-icon>\n </button>\n </div>\n <div class=\"flex flex-col gap-2\" *ngIf=\"editTranslations || !isMultilingual\">\n <gn-ui-check-toggle\n class=\"p-2\"\n [label]=\"'editor.record.form.multilingual.enable' | translate\"\n [color]=\"'primary'\"\n [(value)]=\"isMultilingual\"\n (toggled)=\"switchMultilingual($event)\"\n ></gn-ui-check-toggle>\n <div *ngIf=\"isMultilingual\" class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row justify-between border-t border-gray-300 p-3\">\n <span class=\"mt-2 text-sm text-gray-600\" translate\n >editor.record.form.multilingual.activate</span\n >\n <gn-ui-button\n extraClass=\"w-16 h-8 font-bold\"\n type=\"gray\"\n (buttonClick)=\"validateTranslations()\"\n data-test=\"validateSelection\"\n >{{ 'editor.record.form.multilingual.validate' | translate }}\n </gn-ui-button>\n </div>\n <ng-container *ngIf=\"supportedLanguages$ | async as languages\">\n <div\n class=\"flex flex-col gap-2 w-full px-2\"\n data-test=\"langAvailable\"\n *ngFor=\"let lang of languages\"\n >\n <gn-ui-button\n [extraClass]=\"getExtraClass(lang)\"\n type=\"gray\"\n (buttonClick)=\"toggleLanguage(lang)\"\n [disabled]=\"lang === _record.defaultLanguage\"\n [title]=\"getToggleTitle(lang)\"\n >\n <span [class]=\"getIconClass(lang)\"></span>\n <span class=\"ml-2\">{{ 'language.' + lang | translate }}</span>\n </gn-ui-button>\n </div>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"!editTranslations && isMultilingual\" class=\"flex flex-col gap-2\">\n <gn-ui-button\n *ngFor=\"let recordLang of sortLanguages(recordLanguages); let i = index\"\n extraClass=\"flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full\"\n [ngClass]=\"{\n 'mt-8': isFirstUnsupported(i),\n '': true,\n }\"\n (buttonClick)=\"switchFormLang(recordLang)\"\n type=\"outline\"\n data-test=\"langSwitch\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <ng-icon\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-primary mt-1\"\n name=\"iconoirCheckCircle\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"recordLang !== formLanguage\"\n class=\"text-gray-800 mt-1\"\n name=\"iconoirCircle\"\n ></ng-icon>\n <span\n *ngIf=\"recordLang.length === 2\"\n [class]=\"getIconClass(recordLang) + 'mt-1'\"\n ></span>\n <span [ngClass]=\"recordLang === formLanguage ? 'text-black' : ''\">{{\n isLangSupported(recordLang)\n ? ('language.' + recordLang | translate)\n : recordLang.toUpperCase()\n }}</span>\n </div>\n <div class=\"flex flex-row gap-2 items-center\">\n <span\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-xs text-base\"\n translate\n >editor.record.form.multilingual.default</span\n >\n <button\n (click)=\"\n openActionMenu(recordLang, template); $event.stopPropagation()\n \"\n cdkOverlayOrigin\n #actionMenuButton\n >\n <ng-icon class=\"pb-5\" name=\"matMoreHorizOutline\"></ng-icon>\n </button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDelete]=\"recordLang !== _record.defaultLanguage\"\n page=\"record\"\n (delete)=\"confirmDeleteAction(recordLang)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (switch)=\"switchDefaultLang(recordLang)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </div>\n </gn-ui-button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: CheckToggleComponent, selector: "gn-ui-check-toggle", inputs: ["title", "label", "value", "color"], outputs: ["toggled"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "isDuplicating", "canDelete", "page"], outputs: ["duplicate", "delete", "closeActionMenu", "rollback", "switch"] }] }); }
43655
+ ], viewQueries: [{ propertyName: "actionMenuButtons", predicate: ["actionMenuButton"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-6 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.multilingual.title</span\n >\n <button\n [title]=\"'editor.record.form.multilingual.open' | translate\"\n (click)=\"toggleLanguageSelection()\"\n *ngIf=\"isMultilingual\"\n data-test=\"activateSelection\"\n >\n <ng-icon class=\"mt-1\" name=\"iconoirSettings\"></ng-icon>\n </button>\n </div>\n <div class=\"flex flex-col gap-2\" *ngIf=\"editTranslations || !isMultilingual\">\n <gn-ui-check-toggle\n class=\"p-2\"\n [label]=\"'editor.record.form.multilingual.enable' | translate\"\n [color]=\"'primary'\"\n [(value)]=\"isMultilingual\"\n (toggled)=\"switchMultilingual($event)\"\n ></gn-ui-check-toggle>\n <div *ngIf=\"isMultilingual\" class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row justify-between border-t border-gray-300 p-3\">\n <span class=\"mt-2 text-sm text-gray-600\" translate\n >editor.record.form.multilingual.activate</span\n >\n <gn-ui-button\n extraClass=\"w-16 h-8 font-bold\"\n type=\"gray\"\n (buttonClick)=\"validateTranslations()\"\n data-test=\"validateSelection\"\n >{{ 'editor.record.form.multilingual.validate' | translate }}\n </gn-ui-button>\n </div>\n <ng-container *ngIf=\"supportedLanguages$ | async as languages\">\n <div\n class=\"flex flex-col gap-2 w-full px-2\"\n data-test=\"langAvailable\"\n *ngFor=\"let lang of languages\"\n >\n <gn-ui-button\n [extraClass]=\"getExtraClass(lang)\"\n type=\"gray\"\n (buttonClick)=\"toggleLanguage(lang)\"\n [disabled]=\"lang === _record.defaultLanguage\"\n [title]=\"getToggleTitle(lang)\"\n >\n <span [class]=\"getIconClass(lang)\"></span>\n <span class=\"ml-2\">{{ 'language.' + lang | translate }}</span>\n </gn-ui-button>\n </div>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"!editTranslations && isMultilingual\" class=\"flex flex-col gap-2\">\n <gn-ui-button\n *ngFor=\"let recordLang of sortLanguages(recordLanguages); let i = index\"\n extraClass=\"flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full\"\n [ngClass]=\"{\n 'mt-8': isFirstUnsupported(i),\n '': true,\n }\"\n (buttonClick)=\"switchFormLang(recordLang)\"\n type=\"outline\"\n data-test=\"langSwitch\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <ng-icon\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-primary mt-1\"\n name=\"iconoirCheckCircle\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"recordLang !== formLanguage\"\n class=\"text-gray-800 mt-1\"\n name=\"iconoirCircle\"\n ></ng-icon>\n <span\n *ngIf=\"recordLang.length === 2\"\n [class]=\"getIconClass(recordLang) + 'mt-1'\"\n ></span>\n <span [ngClass]=\"recordLang === formLanguage ? 'text-black' : ''\">{{\n isLangSupported(recordLang)\n ? ('language.' + recordLang | translate)\n : recordLang.toUpperCase()\n }}</span>\n </div>\n <div class=\"flex flex-row gap-2 items-center\">\n <span\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-xs text-base\"\n translate\n >editor.record.form.multilingual.default</span\n >\n <button\n (click)=\"\n openActionMenu(recordLang, template); $event.stopPropagation()\n \"\n cdkOverlayOrigin\n #actionMenuButton\n >\n <ng-icon class=\"pb-5\" name=\"matMoreHorizOutline\"></ng-icon>\n </button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDelete]=\"recordLang !== _record.defaultLanguage\"\n page=\"record\"\n (delete)=\"confirmDeleteAction(recordLang)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (switch)=\"switchDefaultLang(recordLang)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </div>\n </gn-ui-button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: CheckToggleComponent, selector: "gn-ui-check-toggle", inputs: ["title", "label", "value", "color"], outputs: ["toggled"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ActionMenuComponent, selector: "gn-ui-action-menu", inputs: ["canDuplicate", "isDuplicating", "canDelete", "page"], outputs: ["duplicate", "delete", "closeActionMenu", "rollback", "switch"] }] }); }
43437
43656
  }
43438
43657
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultilingualPanelComponent, decorators: [{
43439
43658
  type: Component,
@@ -43455,7 +43674,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
43455
43674
  provideNgIconsConfig({
43456
43675
  size: '1.25em',
43457
43676
  }),
43458
- ], template: "<div\n class=\"flex flex-col h-full w-[302px] bg-neutral-100 border-l border-gray-300 py-8 px-3 gap-6 overflow-auto\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.multilingual.title</span\n >\n <button\n [title]=\"'editor.record.form.multilingual.open' | translate\"\n (click)=\"toggleLanguageSelection()\"\n *ngIf=\"isMultilingual\"\n data-test=\"activateSelection\"\n >\n <ng-icon class=\"mt-1\" name=\"iconoirSettings\"></ng-icon>\n </button>\n </div>\n <div class=\"flex flex-col gap-2\" *ngIf=\"editTranslations || !isMultilingual\">\n <gn-ui-check-toggle\n class=\"p-2\"\n [label]=\"'editor.record.form.multilingual.enable' | translate\"\n [color]=\"'primary'\"\n [(value)]=\"isMultilingual\"\n (toggled)=\"switchMultilingual($event)\"\n ></gn-ui-check-toggle>\n <div *ngIf=\"isMultilingual\" class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row justify-between border-t border-gray-300 p-3\">\n <span class=\"mt-2 text-sm text-gray-600\" translate\n >editor.record.form.multilingual.activate</span\n >\n <gn-ui-button\n extraClass=\"w-16 h-8 font-bold\"\n type=\"gray\"\n (buttonClick)=\"validateTranslations()\"\n data-test=\"validateSelection\"\n >{{ 'editor.record.form.multilingual.validate' | translate }}\n </gn-ui-button>\n </div>\n <ng-container *ngIf=\"supportedLanguages$ | async as languages\">\n <div\n class=\"flex flex-col gap-2 w-full px-2\"\n data-test=\"langAvailable\"\n *ngFor=\"let lang of languages\"\n >\n <gn-ui-button\n [extraClass]=\"getExtraClass(lang)\"\n type=\"gray\"\n (buttonClick)=\"toggleLanguage(lang)\"\n [disabled]=\"lang === _record.defaultLanguage\"\n [title]=\"getToggleTitle(lang)\"\n >\n <span [class]=\"getIconClass(lang)\"></span>\n <span class=\"ml-2\">{{ 'language.' + lang | translate }}</span>\n </gn-ui-button>\n </div>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"!editTranslations && isMultilingual\" class=\"flex flex-col gap-2\">\n <gn-ui-button\n *ngFor=\"let recordLang of sortLanguages(recordLanguages); let i = index\"\n extraClass=\"flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full\"\n [ngClass]=\"{\n 'mt-8': isFirstUnsupported(i),\n '': true,\n }\"\n (buttonClick)=\"switchFormLang(recordLang)\"\n type=\"outline\"\n data-test=\"langSwitch\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <ng-icon\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-primary mt-1\"\n name=\"iconoirCheckCircle\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"recordLang !== formLanguage\"\n class=\"text-gray-800 mt-1\"\n name=\"iconoirCircle\"\n ></ng-icon>\n <span\n *ngIf=\"recordLang.length === 2\"\n [class]=\"getIconClass(recordLang) + 'mt-1'\"\n ></span>\n <span [ngClass]=\"recordLang === formLanguage ? 'text-black' : ''\">{{\n isLangSupported(recordLang)\n ? ('language.' + recordLang | translate)\n : recordLang.toUpperCase()\n }}</span>\n </div>\n <div class=\"flex flex-row gap-2 items-center\">\n <span\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-xs text-base\"\n translate\n >editor.record.form.multilingual.default</span\n >\n <button\n (click)=\"\n openActionMenu(recordLang, template); $event.stopPropagation()\n \"\n cdkOverlayOrigin\n #actionMenuButton\n >\n <ng-icon class=\"pb-5\" name=\"matMoreHorizOutline\"></ng-icon>\n </button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDelete]=\"recordLang !== _record.defaultLanguage\"\n page=\"record\"\n (delete)=\"confirmDeleteAction(recordLang)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (switch)=\"switchDefaultLang(recordLang)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </div>\n </gn-ui-button>\n </div>\n</div>\n" }]
43677
+ ], template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-6 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.multilingual.title</span\n >\n <button\n [title]=\"'editor.record.form.multilingual.open' | translate\"\n (click)=\"toggleLanguageSelection()\"\n *ngIf=\"isMultilingual\"\n data-test=\"activateSelection\"\n >\n <ng-icon class=\"mt-1\" name=\"iconoirSettings\"></ng-icon>\n </button>\n </div>\n <div class=\"flex flex-col gap-2\" *ngIf=\"editTranslations || !isMultilingual\">\n <gn-ui-check-toggle\n class=\"p-2\"\n [label]=\"'editor.record.form.multilingual.enable' | translate\"\n [color]=\"'primary'\"\n [(value)]=\"isMultilingual\"\n (toggled)=\"switchMultilingual($event)\"\n ></gn-ui-check-toggle>\n <div *ngIf=\"isMultilingual\" class=\"flex flex-col gap-2\">\n <div class=\"flex flex-row justify-between border-t border-gray-300 p-3\">\n <span class=\"mt-2 text-sm text-gray-600\" translate\n >editor.record.form.multilingual.activate</span\n >\n <gn-ui-button\n extraClass=\"w-16 h-8 font-bold\"\n type=\"gray\"\n (buttonClick)=\"validateTranslations()\"\n data-test=\"validateSelection\"\n >{{ 'editor.record.form.multilingual.validate' | translate }}\n </gn-ui-button>\n </div>\n <ng-container *ngIf=\"supportedLanguages$ | async as languages\">\n <div\n class=\"flex flex-col gap-2 w-full px-2\"\n data-test=\"langAvailable\"\n *ngFor=\"let lang of languages\"\n >\n <gn-ui-button\n [extraClass]=\"getExtraClass(lang)\"\n type=\"gray\"\n (buttonClick)=\"toggleLanguage(lang)\"\n [disabled]=\"lang === _record.defaultLanguage\"\n [title]=\"getToggleTitle(lang)\"\n >\n <span [class]=\"getIconClass(lang)\"></span>\n <span class=\"ml-2\">{{ 'language.' + lang | translate }}</span>\n </gn-ui-button>\n </div>\n </ng-container>\n </div>\n </div>\n <div *ngIf=\"!editTranslations && isMultilingual\" class=\"flex flex-col gap-2\">\n <gn-ui-button\n *ngFor=\"let recordLang of sortLanguages(recordLanguages); let i = index\"\n extraClass=\"flex flex-row justify-between bg-white border border-white rounded mb-1 h-[34px] w-full\"\n [ngClass]=\"{\n 'mt-8': isFirstUnsupported(i),\n '': true,\n }\"\n (buttonClick)=\"switchFormLang(recordLang)\"\n type=\"outline\"\n data-test=\"langSwitch\"\n >\n <div class=\"flex flex-row gap-2 items-center\">\n <ng-icon\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-primary mt-1\"\n name=\"iconoirCheckCircle\"\n ></ng-icon>\n <ng-icon\n *ngIf=\"recordLang !== formLanguage\"\n class=\"text-gray-800 mt-1\"\n name=\"iconoirCircle\"\n ></ng-icon>\n <span\n *ngIf=\"recordLang.length === 2\"\n [class]=\"getIconClass(recordLang) + 'mt-1'\"\n ></span>\n <span [ngClass]=\"recordLang === formLanguage ? 'text-black' : ''\">{{\n isLangSupported(recordLang)\n ? ('language.' + recordLang | translate)\n : recordLang.toUpperCase()\n }}</span>\n </div>\n <div class=\"flex flex-row gap-2 items-center\">\n <span\n *ngIf=\"recordLang === formLanguage\"\n class=\"text-xs text-base\"\n translate\n >editor.record.form.multilingual.default</span\n >\n <button\n (click)=\"\n openActionMenu(recordLang, template); $event.stopPropagation()\n \"\n cdkOverlayOrigin\n #actionMenuButton\n >\n <ng-icon class=\"pb-5\" name=\"matMoreHorizOutline\"></ng-icon>\n </button>\n <ng-template #template>\n <gn-ui-action-menu\n [canDelete]=\"recordLang !== _record.defaultLanguage\"\n page=\"record\"\n (delete)=\"confirmDeleteAction(recordLang)\"\n (closeActionMenu)=\"closeActionMenu()\"\n (switch)=\"switchDefaultLang(recordLang)\"\n >\n </gn-ui-action-menu>\n </ng-template>\n </div>\n </gn-ui-button>\n </div>\n</div>\n" }]
43459
43678
  }], ctorParameters: () => [{ type: EditorFacade }, { type: i1$b.MatDialog }, { type: i1$1.TranslateService }, { type: RecordsRepositoryInterface }, { type: i1$8.Overlay }, { type: i0.ViewContainerRef }, { type: i0.ChangeDetectorRef }], propDecorators: { record: [{
43460
43679
  type: Input
43461
43680
  }], actionMenuButtons: [{
@@ -43463,6 +43682,76 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
43463
43682
  args: ['actionMenuButton', { read: ElementRef }]
43464
43683
  }] } });
43465
43684
 
43685
+ //forced translations that are not available in fields.config.ts
43686
+ marker('editor.record.form.field.keywords');
43687
+ marker('editor.record.form.field.topics');
43688
+ marker('editor.record.form.field.contacts');
43689
+ marker('editor.record.form.field.organisation');
43690
+ class MetadataQualityPanelComponent {
43691
+ constructor() {
43692
+ this.propsToValidate = getAllKeysValidator();
43693
+ this.propertiesByPage = [];
43694
+ }
43695
+ ngOnChanges() {
43696
+ if (this.editorConfig && this.record) {
43697
+ const fieldsByPage = this.editorConfig.pages.map((page) => page.sections.flatMap((section) => section.fields
43698
+ .filter((field) => this.propsToValidate.includes(field.model))
43699
+ .map((field) => field.model)));
43700
+ // FIXME: temporarily add topics and organisation to the first and third page
43701
+ // as long as they are not handled by the editor
43702
+ if (fieldsByPage.length > 0) {
43703
+ fieldsByPage[0].includes('topics') || fieldsByPage[0].push('topics');
43704
+ fieldsByPage[2].includes('organisation') ||
43705
+ fieldsByPage[2].push('organisation');
43706
+ }
43707
+ this.propertiesByPage = fieldsByPage
43708
+ .map((fields) => getQualityValidators(this.record, fields).map(({ name, validator }) => ({
43709
+ label: `editor.record.form.field.${name}`, // use same translations as in fields.config.ts
43710
+ value: validator(),
43711
+ })))
43712
+ .filter((arr) => arr.length > 0);
43713
+ }
43714
+ }
43715
+ getExtraClass(checked) {
43716
+ const baseClasses = 'flex flex-row justify-between rounded mb-1 h-[34px] w-full focus:ring-0 hover:border-none border-none hover:text-black text-black cursor-default';
43717
+ return checked
43718
+ ? `${baseClasses} bg-neutral-100 hover:bg-neutral-100`
43719
+ : `${baseClasses} bg-transparent hover:bg-transparent`;
43720
+ }
43721
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataQualityPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
43722
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataQualityPanelComponent, isStandalone: true, selector: "gn-ui-metadata-quality-panel", inputs: { editorConfig: "editorConfig", record: "record" }, providers: [
43723
+ provideIcons({
43724
+ iconoirSystemShut,
43725
+ iconoirBadgeCheck,
43726
+ }),
43727
+ provideNgIconsConfig({
43728
+ size: '1.25em',
43729
+ }),
43730
+ ], usesOnChanges: true, ngImport: i0, template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-3 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.metadataQuality.title</span\n >\n </div>\n <div\n *ngFor=\"let properties of propertiesByPage; let i = index\"\n class=\"flex flex-col gap-2\"\n >\n <gn-ui-button\n *ngFor=\"let property of properties\"\n [extraClass]=\"getExtraClass(property.value)\"\n type=\"outline\"\n attr.data-cy=\"md-quality-btn-{{ property.label }}\"\n >\n <span>{{ property.label | translate }}</span>\n <div class=\"flex flex-row gap-2 items-center\">\n <ng-icon\n *ngIf=\"property.value; else notChecked\"\n class=\"text-primary\"\n name=\"iconoirBadgeCheck\"\n ></ng-icon>\n <ng-template #notChecked>\n <ng-icon class=\"text-neutral-300\" name=\"iconoirSystemShut\"></ng-icon>\n </ng-template>\n </div>\n </gn-ui-button>\n <hr\n *ngIf=\"i !== propertiesByPage.length - 1\"\n class=\"border-gray-300 w-11/12 mx-auto\"\n />\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }] }); }
43731
+ }
43732
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataQualityPanelComponent, decorators: [{
43733
+ type: Component,
43734
+ args: [{ selector: 'gn-ui-metadata-quality-panel', standalone: true, imports: [
43735
+ CommonModule,
43736
+ TranslateDirective,
43737
+ TranslatePipe,
43738
+ ButtonComponent,
43739
+ NgIconComponent,
43740
+ ], providers: [
43741
+ provideIcons({
43742
+ iconoirSystemShut,
43743
+ iconoirBadgeCheck,
43744
+ }),
43745
+ provideNgIconsConfig({
43746
+ size: '1.25em',
43747
+ }),
43748
+ ], template: "<div\n class=\"flex flex-col h-full w-[302px] border-l border-gray-300 py-8 px-3 gap-3 overflow-auto\"\n style=\"background-color: #fafaf9\"\n>\n <div class=\"flex flex-row px-2 justify-between\">\n <span class=\"text-3xl font-title text-black/80\" translate\n >editor.record.form.metadataQuality.title</span\n >\n </div>\n <div\n *ngFor=\"let properties of propertiesByPage; let i = index\"\n class=\"flex flex-col gap-2\"\n >\n <gn-ui-button\n *ngFor=\"let property of properties\"\n [extraClass]=\"getExtraClass(property.value)\"\n type=\"outline\"\n attr.data-cy=\"md-quality-btn-{{ property.label }}\"\n >\n <span>{{ property.label | translate }}</span>\n <div class=\"flex flex-row gap-2 items-center\">\n <ng-icon\n *ngIf=\"property.value; else notChecked\"\n class=\"text-primary\"\n name=\"iconoirBadgeCheck\"\n ></ng-icon>\n <ng-template #notChecked>\n <ng-icon class=\"text-neutral-300\" name=\"iconoirSystemShut\"></ng-icon>\n </ng-template>\n </div>\n </gn-ui-button>\n <hr\n *ngIf=\"i !== propertiesByPage.length - 1\"\n class=\"border-gray-300 w-11/12 mx-auto\"\n />\n </div>\n</div>\n" }]
43749
+ }], propDecorators: { editorConfig: [{
43750
+ type: Input
43751
+ }], record: [{
43752
+ type: Input
43753
+ }] } });
43754
+
43466
43755
  const ROUTER_STATE_KEY = 'router';
43467
43756
  const ROUTER_ROUTE_SEARCH = 'search';
43468
43757
  const ROUTER_ROUTE_DATASET = 'dataset';
@@ -43907,5 +44196,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
43907
44196
  * Generated bundle index. Do not edit.
43908
44197
  */
43909
44198
 
43910
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, ActionMenuComponent, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, CellPopinComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalLinkCardComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogListComponent, FeatureCatalogModule, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GEONETWORK_UI_TAG_NAME, GEONETWORK_UI_VERSION, GeoDataBadgeComponent, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InlineFilterComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, KindBadgeComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, ModalDialogComponent, MultilingualPanelComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PossibleResourceTypes, PossibleResourceTypesDefinition, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_DATASET_URL_TOKEN, RECORD_REUSE_URL_TOKEN, RECORD_SERVICE_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_REUSE, ROUTER_ROUTE_SEARCH, ROUTER_ROUTE_SERVICE, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordKindField, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResourceTypeLegacyField, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsHitsSearchKindComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchFeatureCatalogComponent, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, ServiceCapabilitiesComponent, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpatialExtentComponent, SpinningLoaderComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEBUG_CONFIG, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, TruncatedTextComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, FacetsModule$1 as UiFacetsModule, UiSearchModule, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLang2FromLang3, getLang3FromLang2, getLayers, getLinkLabel, getLinkPriority, getLocalizedIndexKey, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getResourceType, getReuseType, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, kindToCodeListValue, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, matchesNoApplicableConstraint, matchesNoKnownConstraint, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideI18n, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateLanguages, updateRecordField, updateRecordLanguages, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
44199
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, ActionMenuComponent, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, CellPopinComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalLinkCardComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogListComponent, FeatureCatalogModule, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureNotificationsModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GEONETWORK_UI_TAG_NAME, GEONETWORK_UI_VERSION, GeoDataBadgeComponent, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InlineFilterComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, KindBadgeComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MetadataQualityPanelComponent, ModalDialogComponent, MultilingualPanelComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PossibleResourceTypes, PossibleResourceTypesDefinition, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_DATASET_URL_TOKEN, RECORD_REUSE_URL_TOKEN, RECORD_SERVICE_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_REUSE, ROUTER_ROUTE_SEARCH, ROUTER_ROUTE_SERVICE, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordKindField, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResourceTypeLegacyField, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsHitsSearchKindComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchFeatureCatalogComponent, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, ServiceCapabilitiesComponent, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpatialExtentComponent, SpinningLoaderComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEBUG_CONFIG, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, TruncatedTextComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, FacetsModule$1 as UiFacetsModule, UiSearchModule, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getAllKeysValidator, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getIsMobile, getJsonDataItemsProxy, getLang2FromLang3, getLang3FromLang2, getLayers, getLinkId, getLinkLabel, getLinkPriority, getLocalizedIndexKey, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getQualityValidators, getResourceType, getReuseType, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, kindToCodeListValue, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, matchesNoApplicableConstraint, matchesNoKnownConstraint, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideI18n, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateLanguages, updateRecordField, updateRecordLanguages, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
43911
44200
  //# sourceMappingURL=geonetwork-ui.mjs.map