geonetwork-ui 2.10.0-dev.89f0dfe6f → 2.10.0-dev.8afb6cd00

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 (37) hide show
  1. package/fesm2022/geonetwork-ui.mjs +411 -257
  2. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  3. package/index.d.ts +68 -12
  4. package/index.d.ts.map +1 -1
  5. package/package.json +3 -3
  6. package/src/libs/api/repository/src/lib/gn4/gn4-repository.ts +54 -32
  7. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +46 -0
  8. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +0 -5
  9. package/src/libs/common/domain/src/lib/model/user/group.model.ts +8 -0
  10. package/src/libs/common/domain/src/lib/model/user/index.ts +1 -0
  11. package/src/libs/common/domain/src/lib/platform.service.interface.ts +2 -0
  12. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +0 -2
  13. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field-topics/form-field-topics.component.ts +2 -2
  14. package/src/libs/feature/editor/src/lib/fields.config.ts +60 -47
  15. package/src/libs/feature/editor/src/lib/services/editor.service.ts +1 -1
  16. package/src/libs/feature/map/src/lib/utils/map-utils.service.ts +33 -0
  17. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +9 -1
  18. package/src/libs/ui/elements/src/lib/contact-details/contact-details.component.html +1 -1
  19. package/src/libs/ui/elements/src/lib/contact-pill/contact-pill.component.html +7 -3
  20. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +1 -1
  21. package/src/libs/ui/inputs/src/lib/button/button.component.ts +4 -0
  22. package/src/libs/ui/map/src/lib/components/spatial-extent/spatial-extent.component.ts +4 -54
  23. package/src/libs/ui/map/src/lib/map-utils.ts +48 -0
  24. package/src/libs/util/app-config/src/lib/app-config.ts +14 -1
  25. package/src/libs/util/app-config/src/lib/model.ts +3 -0
  26. package/src/libs/util/app-config/src/lib/parse-utils.ts +27 -0
  27. package/src/libs/util/shared/src/lib/links/link-utils.ts +1 -1
  28. package/src/libs/util/shared/src/lib/utils/geojson.ts +58 -1
  29. package/tailwind.base.css +6 -0
  30. package/translations/de.json +19 -19
  31. package/translations/en.json +19 -19
  32. package/translations/es.json +19 -19
  33. package/translations/fr.json +19 -19
  34. package/translations/it.json +19 -19
  35. package/translations/nl.json +19 -19
  36. package/translations/pt.json +19 -19
  37. package/translations/sk.json +19 -19
@@ -23,7 +23,7 @@ import { formatDistance } from 'date-fns/formatDistance';
23
23
  import { Scroll, NavigationEnd, Router, RouteReuseStrategy } from '@angular/router';
24
24
  import { WmtsEndpoint, WmsEndpoint, WfsEndpoint, OgcApiEndpoint, sharedFetch, useCache, StacEndpoint, TmsEndpoint } from '@camptocamp/ogc-client';
25
25
  import { getLength } from 'ol/sphere.js';
26
- import { LineString, Polygon } from 'ol/geom.js';
26
+ import { LineString } from 'ol/geom.js';
27
27
  import * as i1 from '@ngrx/store';
28
28
  import { createAction, props, createReducer, on, createFeatureSelector, createSelector, Store, select, StoreModule } from '@ngrx/store';
29
29
  import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/geocoding';
@@ -18879,25 +18879,25 @@ var de = {
18879
18879
  "editor.record.form.temporalExtents.addRange": "Zeitraum",
18880
18880
  "editor.record.form.temporalExtents.date": "Datum",
18881
18881
  "editor.record.form.temporalExtents.range": "Datumsbereich",
18882
- "editor.record.form.topics.inspire.biota": "Biologie",
18883
- "editor.record.form.topics.inspire.boundaries": "Grenzen",
18884
- "editor.record.form.topics.inspire.climatology": "Klimatologie/Meteorologie/Atmosphäre",
18885
- "editor.record.form.topics.inspire.economy": "Wirtschaft",
18886
- "editor.record.form.topics.inspire.elevation": "Höhenangaben",
18887
- "editor.record.form.topics.inspire.environnement": "Umwelt",
18888
- "editor.record.form.topics.inspire.farming": "Landwirtschaft",
18889
- "editor.record.form.topics.inspire.geoscientific": "Geowissenschaften",
18890
- "editor.record.form.topics.inspire.health": "Gesundheitswesen",
18891
- "editor.record.form.topics.inspire.imagery": "Bilddaten/Basiskarten/Landbedeckung",
18892
- "editor.record.form.topics.inspire.intelligence": "Aufklärung/Militär",
18893
- "editor.record.form.topics.inspire.location": "Ortsangaben",
18894
- "editor.record.form.topics.inspire.oceans": "Meere",
18895
- "editor.record.form.topics.inspire.planning": "Planungsunterlagen/Kataster",
18896
- "editor.record.form.topics.inspire.society": "Gesellschaft",
18897
- "editor.record.form.topics.inspire.structure": "Bauwerke",
18898
- "editor.record.form.topics.inspire.transportation": "Verkehrswesen",
18899
- "editor.record.form.topics.inspire.utilities": "Ver- und Entsorgung/Nachrichtenwesen",
18900
- "editor.record.form.topics.inspire.waters": "Binnengewässer",
18882
+ "editor.record.form.topics.iso.biota": "Biologie",
18883
+ "editor.record.form.topics.iso.boundaries": "Grenzen",
18884
+ "editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "Klimatologie/Meteorologie/Atmosphäre",
18885
+ "editor.record.form.topics.iso.economy": "Wirtschaft",
18886
+ "editor.record.form.topics.iso.elevation": "Höhenangaben",
18887
+ "editor.record.form.topics.iso.environment": "Umwelt",
18888
+ "editor.record.form.topics.iso.farming": "Landwirtschaft",
18889
+ "editor.record.form.topics.iso.geoscientificInformation": "Geowissenschaften",
18890
+ "editor.record.form.topics.iso.health": "Gesundheitswesen",
18891
+ "editor.record.form.topics.iso.imageryBaseMapsEarthCover": "Bilddaten/Basiskarten/Landbedeckung",
18892
+ "editor.record.form.topics.iso.intelligenceMilitary": "Aufklärung/Militär",
18893
+ "editor.record.form.topics.iso.location": "Ortsangaben",
18894
+ "editor.record.form.topics.iso.oceans": "Meere",
18895
+ "editor.record.form.topics.iso.planningCadastre": "Planungsunterlagen/Kataster",
18896
+ "editor.record.form.topics.iso.society": "Gesellschaft",
18897
+ "editor.record.form.topics.iso.structure": "Bauwerke",
18898
+ "editor.record.form.topics.iso.transportation": "Verkehrswesen",
18899
+ "editor.record.form.topics.iso.utilitiesCommunication": "Ver- und Entsorgung/Nachrichtenwesen",
18900
+ "editor.record.form.topics.iso.inlandWaters": "Binnengewässer",
18901
18901
  "editor.record.form.topics.placeholder": "Ein oder mehrere Themen auswählen",
18902
18902
  "editor.record.form.updateFrequency.planned": "Dieses Dataset wird regelmäßig aktualisiert.",
18903
18903
  "editor.record.importFromExternalFile.failure.body": "Beim Importieren des Datensatzes ist ein Fehler aufgetreten:",
@@ -19562,25 +19562,25 @@ var en = {
19562
19562
  "editor.record.form.temporalExtents.addRange": "Time period",
19563
19563
  "editor.record.form.temporalExtents.date": "Date",
19564
19564
  "editor.record.form.temporalExtents.range": "Date range",
19565
- "editor.record.form.topics.inspire.biota": "Biota",
19566
- "editor.record.form.topics.inspire.boundaries": "Boundaries",
19567
- "editor.record.form.topics.inspire.climatology": "Climatology / Meteorology / Atmosphere",
19568
- "editor.record.form.topics.inspire.economy": "Economy",
19569
- "editor.record.form.topics.inspire.elevation": "Elevation",
19570
- "editor.record.form.topics.inspire.environnement": "Environnement",
19571
- "editor.record.form.topics.inspire.farming": "Farming",
19572
- "editor.record.form.topics.inspire.geoscientific": "Geoscientific Information",
19573
- "editor.record.form.topics.inspire.health": "Health",
19574
- "editor.record.form.topics.inspire.imagery": "Imagery / Base Maps / Earth Cover",
19575
- "editor.record.form.topics.inspire.intelligence": "Intelligence / Military",
19576
- "editor.record.form.topics.inspire.location": "Location",
19577
- "editor.record.form.topics.inspire.oceans": "Oceans",
19578
- "editor.record.form.topics.inspire.planning": "Planning / Cadastre",
19579
- "editor.record.form.topics.inspire.society": "Society",
19580
- "editor.record.form.topics.inspire.structure": "Structure",
19581
- "editor.record.form.topics.inspire.transportation": "Transportation",
19582
- "editor.record.form.topics.inspire.utilities": "Utilities / Communication",
19583
- "editor.record.form.topics.inspire.waters": "Inland Waters",
19565
+ "editor.record.form.topics.iso.biota": "Biota",
19566
+ "editor.record.form.topics.iso.boundaries": "Boundaries",
19567
+ "editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "Climatology / Meteorology / Atmosphere",
19568
+ "editor.record.form.topics.iso.economy": "Economy",
19569
+ "editor.record.form.topics.iso.elevation": "Elevation",
19570
+ "editor.record.form.topics.iso.environment": "Environnement",
19571
+ "editor.record.form.topics.iso.farming": "Farming",
19572
+ "editor.record.form.topics.iso.geoscientificInformation": "Geoscientific Information",
19573
+ "editor.record.form.topics.iso.health": "Health",
19574
+ "editor.record.form.topics.iso.imageryBaseMapsEarthCover": "Imagery / Base Maps / Earth Cover",
19575
+ "editor.record.form.topics.iso.intelligenceMilitary": "Intelligence / Military",
19576
+ "editor.record.form.topics.iso.location": "Location",
19577
+ "editor.record.form.topics.iso.oceans": "Oceans",
19578
+ "editor.record.form.topics.iso.planningCadastre": "Planning / Cadastre",
19579
+ "editor.record.form.topics.iso.society": "Society",
19580
+ "editor.record.form.topics.iso.structure": "Structure",
19581
+ "editor.record.form.topics.iso.transportation": "Transportation",
19582
+ "editor.record.form.topics.iso.utilitiesCommunication": "Utilities / Communication",
19583
+ "editor.record.form.topics.iso.inlandWaters": "Inland Waters",
19584
19584
  "editor.record.form.topics.placeholder": "Select one or several topics",
19585
19585
  "editor.record.form.updateFrequency.planned": "This dataset is updated regularly",
19586
19586
  "editor.record.importFromExternalFile.failure.body": "Failure",
@@ -20245,25 +20245,25 @@ var es = {
20245
20245
  "editor.record.form.temporalExtents.addRange": "",
20246
20246
  "editor.record.form.temporalExtents.date": "",
20247
20247
  "editor.record.form.temporalExtents.range": "",
20248
- "editor.record.form.topics.inspire.biota": "",
20249
- "editor.record.form.topics.inspire.boundaries": "",
20250
- "editor.record.form.topics.inspire.climatology": "",
20251
- "editor.record.form.topics.inspire.economy": "",
20252
- "editor.record.form.topics.inspire.elevation": "",
20253
- "editor.record.form.topics.inspire.environnement": "",
20254
- "editor.record.form.topics.inspire.farming": "",
20255
- "editor.record.form.topics.inspire.geoscientific": "",
20256
- "editor.record.form.topics.inspire.health": "",
20257
- "editor.record.form.topics.inspire.imagery": "",
20258
- "editor.record.form.topics.inspire.intelligence": "",
20259
- "editor.record.form.topics.inspire.location": "",
20260
- "editor.record.form.topics.inspire.oceans": "",
20261
- "editor.record.form.topics.inspire.planning": "",
20262
- "editor.record.form.topics.inspire.society": "",
20263
- "editor.record.form.topics.inspire.structure": "",
20264
- "editor.record.form.topics.inspire.transportation": "",
20265
- "editor.record.form.topics.inspire.utilities": "",
20266
- "editor.record.form.topics.inspire.waters": "",
20248
+ "editor.record.form.topics.iso.biota": "",
20249
+ "editor.record.form.topics.iso.boundaries": "",
20250
+ "editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "",
20251
+ "editor.record.form.topics.iso.economy": "",
20252
+ "editor.record.form.topics.iso.elevation": "",
20253
+ "editor.record.form.topics.iso.environment": "",
20254
+ "editor.record.form.topics.iso.farming": "",
20255
+ "editor.record.form.topics.iso.geoscientificInformation": "",
20256
+ "editor.record.form.topics.iso.health": "",
20257
+ "editor.record.form.topics.iso.imageryBaseMapsEarthCover": "",
20258
+ "editor.record.form.topics.iso.intelligenceMilitary": "",
20259
+ "editor.record.form.topics.iso.location": "",
20260
+ "editor.record.form.topics.iso.oceans": "",
20261
+ "editor.record.form.topics.iso.planningCadastre": "",
20262
+ "editor.record.form.topics.iso.society": "",
20263
+ "editor.record.form.topics.iso.structure": "",
20264
+ "editor.record.form.topics.iso.transportation": "",
20265
+ "editor.record.form.topics.iso.utilitiesCommunication": "",
20266
+ "editor.record.form.topics.iso.inlandWaters": "",
20267
20267
  "editor.record.form.topics.placeholder": "",
20268
20268
  "editor.record.form.updateFrequency.planned": "Este conjunto de datos se actualiza regularmente.",
20269
20269
  "editor.record.importFromExternalFile.failure.body": "",
@@ -20928,25 +20928,25 @@ var fr = {
20928
20928
  "editor.record.form.temporalExtents.addRange": "Période de temps",
20929
20929
  "editor.record.form.temporalExtents.date": "Date concernée",
20930
20930
  "editor.record.form.temporalExtents.range": "Période concernée",
20931
- "editor.record.form.topics.inspire.biota": "Biote",
20932
- "editor.record.form.topics.inspire.boundaries": "Limites",
20933
- "editor.record.form.topics.inspire.climatology": "Climatologie/Météorologie/Atmosphère",
20934
- "editor.record.form.topics.inspire.economy": "Économie",
20935
- "editor.record.form.topics.inspire.elevation": "Altitude",
20936
- "editor.record.form.topics.inspire.environnement": "Environnement",
20937
- "editor.record.form.topics.inspire.farming": "Agriculture",
20938
- "editor.record.form.topics.inspire.geoscientific": "Informations géoscientifiques",
20939
- "editor.record.form.topics.inspire.health": "Santé",
20940
- "editor.record.form.topics.inspire.imagery": "Imagerie/Cartes de base/Occupation des terres",
20941
- "editor.record.form.topics.inspire.intelligence": "Renseignement/Secteur militaire",
20942
- "editor.record.form.topics.inspire.location": "Localisation",
20943
- "editor.record.form.topics.inspire.oceans": "Océans",
20944
- "editor.record.form.topics.inspire.planning": "Planification/Cadastre",
20945
- "editor.record.form.topics.inspire.society": "Société",
20946
- "editor.record.form.topics.inspire.structure": "Structure",
20947
- "editor.record.form.topics.inspire.transportation": "Transport",
20948
- "editor.record.form.topics.inspire.utilities": "Services d’utilité publique/Communication",
20949
- "editor.record.form.topics.inspire.waters": "Eaux intérieures",
20931
+ "editor.record.form.topics.iso.biota": "Biote",
20932
+ "editor.record.form.topics.iso.boundaries": "Limites",
20933
+ "editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "Climatologie/Météorologie/Atmosphère",
20934
+ "editor.record.form.topics.iso.economy": "Économie",
20935
+ "editor.record.form.topics.iso.elevation": "Altitude",
20936
+ "editor.record.form.topics.iso.environment": "Environnement",
20937
+ "editor.record.form.topics.iso.farming": "Agriculture",
20938
+ "editor.record.form.topics.iso.geoscientificInformation": "Informations géoscientifiques",
20939
+ "editor.record.form.topics.iso.health": "Santé",
20940
+ "editor.record.form.topics.iso.imageryBaseMapsEarthCover": "Imagerie/Cartes de base/Occupation des terres",
20941
+ "editor.record.form.topics.iso.intelligenceMilitary": "Renseignement/Secteur militaire",
20942
+ "editor.record.form.topics.iso.location": "Localisation",
20943
+ "editor.record.form.topics.iso.oceans": "Océans",
20944
+ "editor.record.form.topics.iso.planningCadastre": "Planification/Cadastre",
20945
+ "editor.record.form.topics.iso.society": "Société",
20946
+ "editor.record.form.topics.iso.structure": "Structure",
20947
+ "editor.record.form.topics.iso.transportation": "Transport",
20948
+ "editor.record.form.topics.iso.utilitiesCommunication": "Services d’utilité publique/Communication",
20949
+ "editor.record.form.topics.iso.inlandWaters": "Eaux intérieures",
20950
20950
  "editor.record.form.topics.placeholder": "Sélectionnez un ou plusieurs thèmes",
20951
20951
  "editor.record.form.updateFrequency.planned": "Ce jeu de données est mis à jour régulièrement",
20952
20952
  "editor.record.importFromExternalFile.failure.body": "Une erreur est survenue pendant l'import du jeu de données : ",
@@ -21611,25 +21611,25 @@ var it = {
21611
21611
  "editor.record.form.temporalExtents.addRange": "Periodo di tempo",
21612
21612
  "editor.record.form.temporalExtents.date": "Data rilevante",
21613
21613
  "editor.record.form.temporalExtents.range": "Periodo interessato",
21614
- "editor.record.form.topics.inspire.biota": "",
21615
- "editor.record.form.topics.inspire.boundaries": "",
21616
- "editor.record.form.topics.inspire.climatology": "",
21617
- "editor.record.form.topics.inspire.economy": "",
21618
- "editor.record.form.topics.inspire.elevation": "",
21619
- "editor.record.form.topics.inspire.environnement": "",
21620
- "editor.record.form.topics.inspire.farming": "",
21621
- "editor.record.form.topics.inspire.geoscientific": "",
21622
- "editor.record.form.topics.inspire.health": "",
21623
- "editor.record.form.topics.inspire.imagery": "",
21624
- "editor.record.form.topics.inspire.intelligence": "",
21625
- "editor.record.form.topics.inspire.location": "",
21626
- "editor.record.form.topics.inspire.oceans": "",
21627
- "editor.record.form.topics.inspire.planning": "",
21628
- "editor.record.form.topics.inspire.society": "",
21629
- "editor.record.form.topics.inspire.structure": "",
21630
- "editor.record.form.topics.inspire.transportation": "",
21631
- "editor.record.form.topics.inspire.utilities": "",
21632
- "editor.record.form.topics.inspire.waters": "",
21614
+ "editor.record.form.topics.iso.biota": "",
21615
+ "editor.record.form.topics.iso.boundaries": "",
21616
+ "editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "",
21617
+ "editor.record.form.topics.iso.economy": "",
21618
+ "editor.record.form.topics.iso.elevation": "",
21619
+ "editor.record.form.topics.iso.environment": "",
21620
+ "editor.record.form.topics.iso.farming": "",
21621
+ "editor.record.form.topics.iso.geoscientificInformation": "",
21622
+ "editor.record.form.topics.iso.health": "",
21623
+ "editor.record.form.topics.iso.imageryBaseMapsEarthCover": "",
21624
+ "editor.record.form.topics.iso.intelligenceMilitary": "",
21625
+ "editor.record.form.topics.iso.location": "",
21626
+ "editor.record.form.topics.iso.oceans": "",
21627
+ "editor.record.form.topics.iso.planningCadastre": "",
21628
+ "editor.record.form.topics.iso.society": "",
21629
+ "editor.record.form.topics.iso.structure": "",
21630
+ "editor.record.form.topics.iso.transportation": "",
21631
+ "editor.record.form.topics.iso.utilitiesCommunication": "",
21632
+ "editor.record.form.topics.iso.inlandWaters": "",
21633
21633
  "editor.record.form.topics.placeholder": "",
21634
21634
  "editor.record.form.updateFrequency.planned": "Questi dati dovrebbero essere aggiornati regolarmente",
21635
21635
  "editor.record.importFromExternalFile.failure.body": "Ha successo un'errore durante l'importazione del dataset: ",
@@ -22294,25 +22294,25 @@ var nl = {
22294
22294
  "editor.record.form.temporalExtents.addRange": "",
22295
22295
  "editor.record.form.temporalExtents.date": "",
22296
22296
  "editor.record.form.temporalExtents.range": "",
22297
- "editor.record.form.topics.inspire.biota": "",
22298
- "editor.record.form.topics.inspire.boundaries": "",
22299
- "editor.record.form.topics.inspire.climatology": "",
22300
- "editor.record.form.topics.inspire.economy": "",
22301
- "editor.record.form.topics.inspire.elevation": "",
22302
- "editor.record.form.topics.inspire.environnement": "",
22303
- "editor.record.form.topics.inspire.farming": "",
22304
- "editor.record.form.topics.inspire.geoscientific": "",
22305
- "editor.record.form.topics.inspire.health": "",
22306
- "editor.record.form.topics.inspire.imagery": "",
22307
- "editor.record.form.topics.inspire.intelligence": "",
22308
- "editor.record.form.topics.inspire.location": "",
22309
- "editor.record.form.topics.inspire.oceans": "",
22310
- "editor.record.form.topics.inspire.planning": "",
22311
- "editor.record.form.topics.inspire.society": "",
22312
- "editor.record.form.topics.inspire.structure": "",
22313
- "editor.record.form.topics.inspire.transportation": "",
22314
- "editor.record.form.topics.inspire.utilities": "",
22315
- "editor.record.form.topics.inspire.waters": "",
22297
+ "editor.record.form.topics.iso.biota": "",
22298
+ "editor.record.form.topics.iso.boundaries": "",
22299
+ "editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "",
22300
+ "editor.record.form.topics.iso.economy": "",
22301
+ "editor.record.form.topics.iso.elevation": "",
22302
+ "editor.record.form.topics.iso.environment": "",
22303
+ "editor.record.form.topics.iso.farming": "",
22304
+ "editor.record.form.topics.iso.geoscientificInformation": "",
22305
+ "editor.record.form.topics.iso.health": "",
22306
+ "editor.record.form.topics.iso.imageryBaseMapsEarthCover": "",
22307
+ "editor.record.form.topics.iso.intelligenceMilitary": "",
22308
+ "editor.record.form.topics.iso.location": "",
22309
+ "editor.record.form.topics.iso.oceans": "",
22310
+ "editor.record.form.topics.iso.planningCadastre": "",
22311
+ "editor.record.form.topics.iso.society": "",
22312
+ "editor.record.form.topics.iso.structure": "",
22313
+ "editor.record.form.topics.iso.transportation": "",
22314
+ "editor.record.form.topics.iso.utilitiesCommunication": "",
22315
+ "editor.record.form.topics.iso.inlandWaters": "",
22316
22316
  "editor.record.form.topics.placeholder": "",
22317
22317
  "editor.record.form.updateFrequency.planned": "Deze dataset wordt regelmatig bijgewerkt.",
22318
22318
  "editor.record.importFromExternalFile.failure.body": "",
@@ -22977,25 +22977,25 @@ var pt = {
22977
22977
  "editor.record.form.temporalExtents.addRange": "",
22978
22978
  "editor.record.form.temporalExtents.date": "",
22979
22979
  "editor.record.form.temporalExtents.range": "",
22980
- "editor.record.form.topics.inspire.biota": "",
22981
- "editor.record.form.topics.inspire.boundaries": "",
22982
- "editor.record.form.topics.inspire.climatology": "",
22983
- "editor.record.form.topics.inspire.economy": "",
22984
- "editor.record.form.topics.inspire.elevation": "",
22985
- "editor.record.form.topics.inspire.environnement": "",
22986
- "editor.record.form.topics.inspire.farming": "",
22987
- "editor.record.form.topics.inspire.geoscientific": "",
22988
- "editor.record.form.topics.inspire.health": "",
22989
- "editor.record.form.topics.inspire.imagery": "",
22990
- "editor.record.form.topics.inspire.intelligence": "",
22991
- "editor.record.form.topics.inspire.location": "",
22992
- "editor.record.form.topics.inspire.oceans": "",
22993
- "editor.record.form.topics.inspire.planning": "",
22994
- "editor.record.form.topics.inspire.society": "",
22995
- "editor.record.form.topics.inspire.structure": "",
22996
- "editor.record.form.topics.inspire.transportation": "",
22997
- "editor.record.form.topics.inspire.utilities": "",
22998
- "editor.record.form.topics.inspire.waters": "",
22980
+ "editor.record.form.topics.iso.biota": "",
22981
+ "editor.record.form.topics.iso.boundaries": "",
22982
+ "editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "",
22983
+ "editor.record.form.topics.iso.economy": "",
22984
+ "editor.record.form.topics.iso.elevation": "",
22985
+ "editor.record.form.topics.iso.environment": "",
22986
+ "editor.record.form.topics.iso.farming": "",
22987
+ "editor.record.form.topics.iso.geoscientificInformation": "",
22988
+ "editor.record.form.topics.iso.health": "",
22989
+ "editor.record.form.topics.iso.imageryBaseMapsEarthCover": "",
22990
+ "editor.record.form.topics.iso.intelligenceMilitary": "",
22991
+ "editor.record.form.topics.iso.location": "",
22992
+ "editor.record.form.topics.iso.oceans": "",
22993
+ "editor.record.form.topics.iso.planningCadastre": "",
22994
+ "editor.record.form.topics.iso.society": "",
22995
+ "editor.record.form.topics.iso.structure": "",
22996
+ "editor.record.form.topics.iso.transportation": "",
22997
+ "editor.record.form.topics.iso.utilitiesCommunication": "",
22998
+ "editor.record.form.topics.iso.inlandWaters": "",
22999
22999
  "editor.record.form.topics.placeholder": "",
23000
23000
  "editor.record.form.updateFrequency.planned": "Este conjunto de dados é atualizado regularmente.",
23001
23001
  "editor.record.importFromExternalFile.failure.body": "",
@@ -23660,25 +23660,25 @@ var sk = {
23660
23660
  "editor.record.form.temporalExtents.addRange": "",
23661
23661
  "editor.record.form.temporalExtents.date": "",
23662
23662
  "editor.record.form.temporalExtents.range": "",
23663
- "editor.record.form.topics.inspire.biota": "",
23664
- "editor.record.form.topics.inspire.boundaries": "",
23665
- "editor.record.form.topics.inspire.climatology": "",
23666
- "editor.record.form.topics.inspire.economy": "",
23667
- "editor.record.form.topics.inspire.elevation": "",
23668
- "editor.record.form.topics.inspire.environnement": "",
23669
- "editor.record.form.topics.inspire.farming": "",
23670
- "editor.record.form.topics.inspire.geoscientific": "",
23671
- "editor.record.form.topics.inspire.health": "",
23672
- "editor.record.form.topics.inspire.imagery": "",
23673
- "editor.record.form.topics.inspire.intelligence": "",
23674
- "editor.record.form.topics.inspire.location": "",
23675
- "editor.record.form.topics.inspire.oceans": "",
23676
- "editor.record.form.topics.inspire.planning": "",
23677
- "editor.record.form.topics.inspire.society": "",
23678
- "editor.record.form.topics.inspire.structure": "",
23679
- "editor.record.form.topics.inspire.transportation": "",
23680
- "editor.record.form.topics.inspire.utilities": "",
23681
- "editor.record.form.topics.inspire.waters": "",
23663
+ "editor.record.form.topics.iso.biota": "",
23664
+ "editor.record.form.topics.iso.boundaries": "",
23665
+ "editor.record.form.topics.iso.climatologyMeteorologyAtmosphere": "",
23666
+ "editor.record.form.topics.iso.economy": "",
23667
+ "editor.record.form.topics.iso.elevation": "",
23668
+ "editor.record.form.topics.iso.environment": "",
23669
+ "editor.record.form.topics.iso.farming": "",
23670
+ "editor.record.form.topics.iso.geoscientificInformation": "",
23671
+ "editor.record.form.topics.iso.health": "",
23672
+ "editor.record.form.topics.iso.imageryBaseMapsEarthCover": "",
23673
+ "editor.record.form.topics.iso.intelligenceMilitary": "",
23674
+ "editor.record.form.topics.iso.location": "",
23675
+ "editor.record.form.topics.iso.oceans": "",
23676
+ "editor.record.form.topics.iso.planningCadastre": "",
23677
+ "editor.record.form.topics.iso.society": "",
23678
+ "editor.record.form.topics.iso.structure": "",
23679
+ "editor.record.form.topics.iso.transportation": "",
23680
+ "editor.record.form.topics.iso.utilitiesCommunication": "",
23681
+ "editor.record.form.topics.iso.inlandWaters": "",
23682
23682
  "editor.record.form.topics.placeholder": "",
23683
23683
  "editor.record.form.updateFrequency.planned": "Táto množina údajov sa pravidelne aktualizuje",
23684
23684
  "editor.record.importFromExternalFile.failure.body": "",
@@ -24985,6 +24985,51 @@ function getGeometryBoundingBox(geometry) {
24985
24985
  return coordinatesReducer(emptyExtent, geometry.coordinates);
24986
24986
  }
24987
24987
  }
24988
+ /**
24989
+ * Builds the closed GeoJSON Polygon matching the given bounding box.
24990
+ */
24991
+ function bboxToPolygon(bbox) {
24992
+ const [minX, minY, maxX, maxY] = bbox;
24993
+ return {
24994
+ type: 'Polygon',
24995
+ coordinates: [
24996
+ [
24997
+ [minX, minY],
24998
+ [minX, maxY],
24999
+ [maxX, maxY],
25000
+ [maxX, minY],
25001
+ [minX, minY],
25002
+ ],
25003
+ ],
25004
+ };
25005
+ }
25006
+ /**
25007
+ * Returns the geometry carried by a spatial extent, falling back to the polygon
25008
+ * derived from its bounding box. Returns null when the extent has neither.
25009
+ */
25010
+ function spatialExtentToGeometry(extent) {
25011
+ if (extent.geometry)
25012
+ return extent.geometry;
25013
+ if (extent.bbox)
25014
+ return bboxToPolygon(extent.bbox);
25015
+ return null;
25016
+ }
25017
+ /**
25018
+ * Converts a list of dataset spatial extents into a GeoJSON FeatureCollection,
25019
+ * e.g. to be used as the data source of a map layer.
25020
+ */
25021
+ function spatialExtentsToFeatureCollection(extents) {
25022
+ return {
25023
+ type: 'FeatureCollection',
25024
+ features: extents.reduce((features, extent) => {
25025
+ const geometry = spatialExtentToGeometry(extent);
25026
+ if (geometry) {
25027
+ features.push({ type: 'Feature', properties: {}, geometry });
25028
+ }
25029
+ return features;
25030
+ }, []),
25031
+ };
25032
+ }
24988
25033
 
24989
25034
  function downsizeImage(blob, maxWidth, maxHeight) {
24990
25035
  return new Promise((resolve, reject) => {
@@ -25484,7 +25529,7 @@ function checkFileFormat(link, format) {
25484
25529
  new RegExp(`[./]${format}`, 'i').test(link.name.toLowerCase())) ||
25485
25530
  ('url' in link &&
25486
25531
  new RegExp(`[./]${format}`, 'i').test(link.url.toString())) ||
25487
- ('name' in link && link.name.toLowerCase().includes(format)));
25532
+ ('name' in link && new RegExp(`\\b${format}\\b`, 'i').test(link.name)));
25488
25533
  }
25489
25534
  function getBadgeColor(linkFormat) {
25490
25535
  for (const format in FORMATS) {
@@ -25677,9 +25722,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
25677
25722
  }] } });
25678
25723
 
25679
25724
  var name = "geonetwork-ui";
25680
- var version = "2.10.0-dev.89f0dfe6f";
25725
+ var version = "2.10.0-dev.8afb6cd00";
25681
25726
  var engines = {
25682
- node: ">=20"
25727
+ node: ">=24"
25683
25728
  };
25684
25729
  var main = "./index.ts";
25685
25730
  var type = "module";
@@ -25717,7 +25762,7 @@ var peerDependencies = {
25717
25762
  };
25718
25763
  var dependencies = {
25719
25764
  "@biesbjerg/ngx-translate-extract-marker": "~1.0.0",
25720
- "@camptocamp/ogc-client": "1.3.1-dev.afd9c26",
25765
+ "@camptocamp/ogc-client": "1.3.1-dev.bb345f0",
25721
25766
  "@geospatial-sdk/core": "0.0.5-dev.61",
25722
25767
  "@geospatial-sdk/geocoding": "0.0.5-dev.61",
25723
25768
  "@geospatial-sdk/legend": "0.0.5-dev.61",
@@ -26493,6 +26538,9 @@ const TEMPORARY_ID_PREFIX = 'TEMP-ID-';
26493
26538
  const DISABLE_DRAFT = new InjectionToken('gnDisableDraft', {
26494
26539
  factory: () => false,
26495
26540
  });
26541
+ const DEFAULT_RECORD_CONVERTER = new InjectionToken('defaultRecordConverter', {
26542
+ factory: () => new Iso19139Converter(),
26543
+ });
26496
26544
  class Gn4Repository {
26497
26545
  constructor() {
26498
26546
  this.httpClient = inject(HttpClient);
@@ -26504,6 +26552,7 @@ class Gn4Repository {
26504
26552
  this.gn4LanguagesApi = inject(LanguagesApiService);
26505
26553
  this.settingsService = inject(Gn4SettingsService);
26506
26554
  this.disableDraft = inject(DISABLE_DRAFT, { optional: true }) ?? false;
26555
+ this.defaultConverter = inject(DEFAULT_RECORD_CONVERTER);
26507
26556
  this._draftsChanged = new Subject();
26508
26557
  this.draftsChanged$ = this._draftsChanged.asObservable();
26509
26558
  }
@@ -26656,8 +26705,14 @@ class Gn4Repository {
26656
26705
  }));
26657
26706
  }
26658
26707
  openRecordForDuplication(uniqueIdentifier) {
26659
- return this.gn4RecordsApi
26660
- .create(uniqueIdentifier, '2', 'METADATA', '', false, undefined, true, false, undefined, 'body', false, {
26708
+ return this.platformService.getUserPermissionsByGroup().pipe(map$1((permissions) => {
26709
+ const groupId = permissions.find((p) => p.canApprove)?.groupId?.toString() ??
26710
+ permissions.find((p) => p.canEdit)?.groupId?.toString();
26711
+ if (!groupId)
26712
+ throw new Error('Current user has no writable group to duplicate into');
26713
+ return groupId;
26714
+ }), switchMap((groupId) => this.gn4RecordsApi
26715
+ .create(uniqueIdentifier, groupId, 'METADATA', '', false, undefined, true, false, undefined, 'body', false, {
26661
26716
  httpHeaderAccept: 'application/json',
26662
26717
  httpContentTypeSelected: 'application/json;charset=UTF-8',
26663
26718
  })
@@ -26669,7 +26724,7 @@ class Gn4Repository {
26669
26724
  .then((record) => {
26670
26725
  return [record, xml, true];
26671
26726
  }));
26672
- }));
26727
+ }))));
26673
26728
  }
26674
26729
  saveRecord(record, referenceRecordSource, publishToAll = true) {
26675
26730
  return this.platformService.getApiVersion().pipe(map$1((version) => {
@@ -26782,10 +26837,10 @@ class Gn4Repository {
26782
26837
  .pipe(map$1((response) => response.body), catchError((error) => error.status === 404 ? of(null) : throwError(() => error)));
26783
26838
  }
26784
26839
  serializeRecordToXml(record, referenceRecordSource) {
26785
- // if there's a reference record, use that standard; otherwise, use iso19139
26840
+ // if there's a reference record, use that standard; otherwise, use standard based on configuration or default
26786
26841
  const converter = referenceRecordSource
26787
26842
  ? findConverterForDocument(referenceRecordSource)
26788
- : new Iso19139Converter();
26843
+ : this.defaultConverter;
26789
26844
  return from(converter.writeRecord(record, referenceRecordSource));
26790
26845
  }
26791
26846
  getExternalRecordAsXml(recordDownloadUrl) {
@@ -27409,6 +27464,7 @@ class Gn4PlatformService {
27409
27464
  constructor() {
27410
27465
  this.meApi = inject(MeApiService);
27411
27466
  this.usersApi = inject(UsersApiService);
27467
+ this.groupsApi = inject(GroupsApiService);
27412
27468
  this.mapper = inject(Gn4PlatformMapper);
27413
27469
  this.toolsApiService = inject(ToolsApiService);
27414
27470
  this.registriesApiService = inject(RegistriesApiService);
@@ -27473,6 +27529,48 @@ class Gn4PlatformService {
27473
27529
  getUsers() {
27474
27530
  return this.users$;
27475
27531
  }
27532
+ getUserPermissionsByGroup() {
27533
+ if (this.disableAuth)
27534
+ return of([]);
27535
+ return combineLatest([this.meApi.getMe(), this.groupsApi.getGroups()]).pipe(map$1(([meResponse, groups]) => {
27536
+ if (!meResponse)
27537
+ return [];
27538
+ if (meResponse.admin) {
27539
+ return groups.map((group) => ({
27540
+ groupId: group.id,
27541
+ groupName: group.name,
27542
+ isMember: true,
27543
+ canEdit: true,
27544
+ canApprove: true,
27545
+ canAdministrate: true,
27546
+ }));
27547
+ }
27548
+ const reviewerIds = meResponse.groupsWithReviewer ?? [];
27549
+ const editorIds = meResponse.groupsWithEditor ?? [];
27550
+ const memberIds = meResponse.groupsWithRegisteredUser ?? [];
27551
+ const adminIds = meResponse.groupsWithUserAdmin ?? [];
27552
+ const groupsById = new Map(groups.map((g) => [g.id, g]));
27553
+ return [
27554
+ ...new Set([
27555
+ ...reviewerIds,
27556
+ ...editorIds,
27557
+ ...groups.map((g) => g.id),
27558
+ ]),
27559
+ ]
27560
+ .filter((id) => groupsById.has(id))
27561
+ .map((id) => {
27562
+ const group = groupsById.get(id);
27563
+ return {
27564
+ groupId: group.id,
27565
+ groupName: group.name,
27566
+ isMember: memberIds.includes(id),
27567
+ canEdit: editorIds.includes(id),
27568
+ canApprove: reviewerIds.includes(id),
27569
+ canAdministrate: adminIds.includes(id),
27570
+ };
27571
+ });
27572
+ }));
27573
+ }
27476
27574
  translateKey(key) {
27477
27575
  // if the key is a URI, use the registries API to look for the translation
27478
27576
  if (key.match(/^https?:\/\//)) {
@@ -28074,6 +28172,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
28074
28172
  type: Output
28075
28173
  }] } });
28076
28174
 
28175
+ /**
28176
+ * Default style for a spatial-extent layer: a solid black outline over a
28177
+ * translucent grey fill.
28178
+ */
28179
+ const DEFAULT_SPATIAL_EXTENT_STYLE = {
28180
+ 'stroke-color': 'black',
28181
+ 'stroke-width': 2,
28182
+ 'fill-color': 'rgba(153, 153, 153, 0.3)',
28183
+ };
28184
+ /**
28185
+ * Builds a GeoJSON map layer drawing the given spatial extents: each extent is
28186
+ * rendered from its own geometry or, when only a bounding box is available,
28187
+ * from a polygon derived from that box.
28188
+ *
28189
+ * @returns the layer, or `null` when none of the extents can be represented.
28190
+ */
28191
+ function createSpatialExtentLayer(extents, overrides) {
28192
+ const data = spatialExtentsToFeatureCollection(extents);
28193
+ if (data.features.length === 0) {
28194
+ return null;
28195
+ }
28196
+ return {
28197
+ type: 'geojson',
28198
+ data,
28199
+ label: 'Spatial extents',
28200
+ style: DEFAULT_SPATIAL_EXTENT_STYLE,
28201
+ ...overrides,
28202
+ };
28203
+ }
28077
28204
  function prioritizePageScroll(interactions) {
28078
28205
  interactions.clear();
28079
28206
  interactions.extend(defaults({
@@ -28114,39 +28241,10 @@ class SpatialExtentComponent {
28114
28241
  this._cdr = inject(ChangeDetectorRef);
28115
28242
  this.spatialExtents$ = new BehaviorSubject([]);
28116
28243
  this.mapContext$ = this.spatialExtents$.pipe(switchMap$1((extents) => {
28117
- if (extents.length === 0) {
28244
+ const layer = createSpatialExtentLayer(extents);
28245
+ if (!layer) {
28118
28246
  return of(null);
28119
28247
  }
28120
- const featureCollection = {
28121
- type: 'FeatureCollection',
28122
- features: [],
28123
- };
28124
- extents.forEach((extent) => {
28125
- if (extent.geometry) {
28126
- featureCollection.features.push({
28127
- type: 'Feature',
28128
- properties: {},
28129
- geometry: extent.geometry,
28130
- });
28131
- }
28132
- else if (extent.bbox?.length >= 0) {
28133
- featureCollection.features.push({
28134
- type: 'Feature',
28135
- properties: {},
28136
- geometry: this.bboxCoordsToGeometry(extent.bbox),
28137
- });
28138
- }
28139
- });
28140
- const layer = {
28141
- type: 'geojson',
28142
- data: featureCollection,
28143
- label: 'Spatial extents',
28144
- style: {
28145
- 'stroke-color': 'black',
28146
- 'stroke-width': 2,
28147
- 'fill-color': 'rgba(153, 153, 153, 0.3)',
28148
- },
28149
- };
28150
28248
  return from(createViewFromLayer(layer)).pipe(map$1((view) => ({ view, layers: [layer] })), tap$1(() => this._cdr.markForCheck()));
28151
28249
  }));
28152
28250
  this.error = '';
@@ -28154,18 +28252,6 @@ class SpatialExtentComponent {
28154
28252
  set spatialExtents(value) {
28155
28253
  this.spatialExtents$.next(value);
28156
28254
  }
28157
- bboxCoordsToGeometry(bbox) {
28158
- const geometry = new Polygon([
28159
- [
28160
- [bbox[0], bbox[1]],
28161
- [bbox[0], bbox[3]],
28162
- [bbox[2], bbox[3]],
28163
- [bbox[2], bbox[1]],
28164
- [bbox[0], bbox[1]],
28165
- ],
28166
- ]);
28167
- return new GeoJSON().writeGeometryObject(geometry);
28168
- }
28169
28255
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: SpatialExtentComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
28170
28256
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "20.3.19", type: SpatialExtentComponent, isStandalone: true, selector: "gn-ui-spatial-extent", inputs: { spatialExtents: "spatialExtents" }, ngImport: i0, template: "<gn-ui-map-container\n class=\"h-full w-full\"\n [context]=\"mapContext$ | async\"\n></gn-ui-map-container>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: MapContainerComponent, selector: "gn-ui-map-container", inputs: ["context"], outputs: ["featuresClick", "featuresHover", "mapClick", "extentChange", "sourceLoadError", "resolvedExtentChange"] }, { kind: "pipe", type: i1$1.AsyncPipe, name: "async" }] }); }
28171
28257
  }
@@ -28198,6 +28284,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
28198
28284
 
28199
28285
  const LONLAT_CRS_CODES = ['EPSG:4326', 'CRS:84'];
28200
28286
 
28287
+ /**
28288
+ * Style of the extent overlay drawn on top of the previewed data: a dashed
28289
+ * black outline over a very light fill, so the extent stays readable without
28290
+ * hiding the data underneath.
28291
+ */
28292
+ const RECORD_EXTENT_OVERLAY_STYLE = {
28293
+ 'stroke-color': 'rgba(0, 0, 0, 0.6)',
28294
+ 'stroke-width': 2,
28295
+ 'stroke-line-dash': [8, 6],
28296
+ 'fill-color': 'rgba(0, 0, 0, 0.03)',
28297
+ };
28201
28298
  class MapUtilsService {
28202
28299
  getRecordExtent(record) {
28203
28300
  if (!('spatialExtents' in record) || record.spatialExtents.length === 0) {
@@ -28213,6 +28310,21 @@ class MapUtilsService {
28213
28310
  return prev;
28214
28311
  }, [Infinity, Infinity, -Infinity, -Infinity]);
28215
28312
  }
28313
+ /**
28314
+ * Builds a non-interactive overlay layer drawing the spatial extent(s)
28315
+ * declared in the record's metadata (bounding boxes and/or geometries).
28316
+ * Returns null when the record has no usable spatial extent.
28317
+ *
28318
+ * This is purely for display and is independent from the map's initial view,
28319
+ * which is derived separately (see {@link getRecordExtent}).
28320
+ */
28321
+ getRecordExtentLayer(record) {
28322
+ return createSpatialExtentLayer(record.spatialExtents ?? [], {
28323
+ label: 'Spatial extent',
28324
+ clickable: false,
28325
+ style: RECORD_EXTENT_OVERLAY_STYLE,
28326
+ });
28327
+ }
28216
28328
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MapUtilsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
28217
28329
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MapUtilsService, providedIn: 'root' }); }
28218
28330
  }
@@ -28324,6 +28436,22 @@ function checkNewRecordDefaultLanguage(parsedConfigSection, outWarnings) {
28324
28436
  new_record_default_language: lang2,
28325
28437
  };
28326
28438
  }
28439
+ function checkNewRecordStandard(parsedConfigSection, outWarnings) {
28440
+ const standard = parsedConfigSection.new_record_standard;
28441
+ const normalizedStandard = typeof standard === 'string' ? standard.trim().toLowerCase() : null;
28442
+ if (normalizedStandard === 'iso19139' ||
28443
+ normalizedStandard === 'iso19115-3') {
28444
+ return {
28445
+ ...parsedConfigSection,
28446
+ new_record_standard: normalizedStandard,
28447
+ };
28448
+ }
28449
+ outWarnings.push(`In the [editing] section: new_record_standard = "${standard}" is not a supported metadata standard`);
28450
+ return {
28451
+ ...parsedConfigSection,
28452
+ new_record_standard: undefined,
28453
+ };
28454
+ }
28327
28455
 
28328
28456
  /**
28329
28457
  * This loader extends the default one based on JSON files but also loads custom translations
@@ -28525,16 +28653,21 @@ function loadAppConfig(configUrl = 'assets/configuration/default.toml') {
28525
28653
  ENABLED: parsedMetadataQualitySection.enabled,
28526
28654
  SORTABLE: parsedMetadataQualitySection.sortable,
28527
28655
  };
28528
- let parsedEditingSection = parseConfigSection(parsed, 'editing', [], ['new_record_default_language'], warnings, errors);
28656
+ let parsedEditingSection = parseConfigSection(parsed, 'editing', [], ['new_record_default_language', 'new_record_standard'], warnings, errors);
28529
28657
  if (parsedEditingSection !== null &&
28530
28658
  parsedEditingSection.new_record_default_language !== undefined) {
28531
28659
  parsedEditingSection = checkNewRecordDefaultLanguage(parsedEditingSection, warnings);
28532
28660
  }
28661
+ if (parsedEditingSection !== null &&
28662
+ parsedEditingSection.new_record_standard !== undefined) {
28663
+ parsedEditingSection = checkNewRecordStandard(parsedEditingSection, warnings);
28664
+ }
28533
28665
  editorConfig =
28534
28666
  parsedEditingSection === null
28535
28667
  ? null
28536
28668
  : {
28537
28669
  NEW_RECORD_DEFAULT_LANGUAGE: parsedEditingSection.new_record_default_language,
28670
+ NEW_RECORD_STANDARD: parsedEditingSection.new_record_standard,
28538
28671
  };
28539
28672
  customTranslations = parseTranslationsConfigSection(parsed, 'translations');
28540
28673
  if (errors.length) {
@@ -29323,6 +29456,9 @@ class ButtonComponent {
29323
29456
  case 'gray':
29324
29457
  this.btnClass = 'gn-ui-btn-gray';
29325
29458
  break;
29459
+ case 'gray-light':
29460
+ this.btnClass = 'gn-ui-btn-gray-light';
29461
+ break;
29326
29462
  case 'black':
29327
29463
  this.btnClass = 'gn-ui-btn-black';
29328
29464
  break;
@@ -34399,7 +34535,7 @@ class ContactDetailsComponent {
34399
34535
  return getAddressLines(this.contact?.address);
34400
34536
  }
34401
34537
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactDetailsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34402
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ContactDetailsComponent, isStandalone: true, selector: "gn-ui-contact-details", inputs: { contact: "contact" }, ngImport: i0, template: "<div\n class=\"bg-gray-50 rounded border border-gray-200 shadow-md p-4 flex flex-col gap-3 w-full\"\n data-test=\"contact-details\"\n>\n @if (displayName) {\n <div class=\"flex items-center gap-3\">\n @if (organization?.logoUrl?.href) {\n <div\n class=\"flex items-center justify-center rounded-md bg-white w-14 h-14 shrink-0 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <span\n class=\"font-title text-xl leading-tight\"\n data-test=\"contact-details-name\"\n >{{ displayName }}</span\n >\n </div>\n }\n\n <!-- Email + phone: always shown; icon dimmed when field is absent -->\n <div class=\"grid grid-cols-2 gap-1 rounded-md overflow-hidden\">\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.email\"\n [class.opacity-75]=\"!!contact.email\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contact.email) {\n <a\n [href]=\"'mailto:' + contact.email\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-email\"\n >{{ contact.email }}</a\n >\n }\n </div>\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.phone\"\n [class.opacity-75]=\"!!contact.phone\"\n name=\"matCallOutline\"\n ></ng-icon>\n @if (contact.phone) {\n <span class=\"text-sm\" data-test=\"contact-details-phone\">{{\n contact.phone\n }}</span>\n }\n </div>\n </div>\n\n <!-- Address: always shown; icon dimmed when absent -->\n <div class=\"bg-gray-100 rounded-md flex items-start gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0 mt-0.5\"\n [class.opacity-30]=\"!addressLines.length\"\n [class.opacity-75]=\"!!addressLines.length\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n @if (addressLines.length) {\n <div class=\"flex flex-col\" data-test=\"contact-details-address\">\n @for (line of addressLines; track line) {\n <p class=\"text-sm m-0\">{{ line }}</p>\n }\n </div>\n }\n </div>\n\n <!-- Website: only shown when org exists; icon dimmed when absent -->\n @if (organization) {\n <div class=\"bg-gray-100 rounded-md flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!organization.website\"\n [class.opacity-75]=\"!!organization.website\"\n name=\"matOpenInNew\"\n ></ng-icon>\n @if (organization.website) {\n <a\n [href]=\"organization.website.href\"\n target=\"_blank\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-website\"\n >{{ organization.website.href }}</a\n >\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "ngmodule", type: TranslateModule }], viewProviders: [
34538
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ContactDetailsComponent, isStandalone: true, selector: "gn-ui-contact-details", inputs: { contact: "contact" }, ngImport: i0, template: "<div\n class=\"bg-gray-50 text-black rounded border border-gray-200 shadow-md p-4 flex flex-col gap-3 w-full\"\n data-test=\"contact-details\"\n>\n @if (displayName) {\n <div class=\"flex items-center gap-3\">\n @if (organization?.logoUrl?.href) {\n <div\n class=\"flex items-center justify-center rounded-md bg-white w-14 h-14 shrink-0 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <span\n class=\"font-title text-xl leading-tight\"\n data-test=\"contact-details-name\"\n >{{ displayName }}</span\n >\n </div>\n }\n\n <!-- Email + phone: always shown; icon dimmed when field is absent -->\n <div class=\"grid grid-cols-2 gap-1 rounded-md overflow-hidden\">\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.email\"\n [class.opacity-75]=\"!!contact.email\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contact.email) {\n <a\n [href]=\"'mailto:' + contact.email\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-email\"\n >{{ contact.email }}</a\n >\n }\n </div>\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.phone\"\n [class.opacity-75]=\"!!contact.phone\"\n name=\"matCallOutline\"\n ></ng-icon>\n @if (contact.phone) {\n <span class=\"text-sm\" data-test=\"contact-details-phone\">{{\n contact.phone\n }}</span>\n }\n </div>\n </div>\n\n <!-- Address: always shown; icon dimmed when absent -->\n <div class=\"bg-gray-100 rounded-md flex items-start gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0 mt-0.5\"\n [class.opacity-30]=\"!addressLines.length\"\n [class.opacity-75]=\"!!addressLines.length\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n @if (addressLines.length) {\n <div class=\"flex flex-col\" data-test=\"contact-details-address\">\n @for (line of addressLines; track line) {\n <p class=\"text-sm m-0\">{{ line }}</p>\n }\n </div>\n }\n </div>\n\n <!-- Website: only shown when org exists; icon dimmed when absent -->\n @if (organization) {\n <div class=\"bg-gray-100 rounded-md flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!organization.website\"\n [class.opacity-75]=\"!!organization.website\"\n name=\"matOpenInNew\"\n ></ng-icon>\n @if (organization.website) {\n <a\n [href]=\"organization.website.href\"\n target=\"_blank\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-website\"\n >{{ organization.website.href }}</a\n >\n }\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "ngmodule", type: TranslateModule }], viewProviders: [
34403
34539
  provideIcons({
34404
34540
  matCallOutline,
34405
34541
  matLocationOnOutline,
@@ -34417,7 +34553,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
34417
34553
  matMailOutline,
34418
34554
  matOpenInNew,
34419
34555
  }),
34420
- ], template: "<div\n class=\"bg-gray-50 rounded border border-gray-200 shadow-md p-4 flex flex-col gap-3 w-full\"\n data-test=\"contact-details\"\n>\n @if (displayName) {\n <div class=\"flex items-center gap-3\">\n @if (organization?.logoUrl?.href) {\n <div\n class=\"flex items-center justify-center rounded-md bg-white w-14 h-14 shrink-0 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <span\n class=\"font-title text-xl leading-tight\"\n data-test=\"contact-details-name\"\n >{{ displayName }}</span\n >\n </div>\n }\n\n <!-- Email + phone: always shown; icon dimmed when field is absent -->\n <div class=\"grid grid-cols-2 gap-1 rounded-md overflow-hidden\">\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.email\"\n [class.opacity-75]=\"!!contact.email\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contact.email) {\n <a\n [href]=\"'mailto:' + contact.email\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-email\"\n >{{ contact.email }}</a\n >\n }\n </div>\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.phone\"\n [class.opacity-75]=\"!!contact.phone\"\n name=\"matCallOutline\"\n ></ng-icon>\n @if (contact.phone) {\n <span class=\"text-sm\" data-test=\"contact-details-phone\">{{\n contact.phone\n }}</span>\n }\n </div>\n </div>\n\n <!-- Address: always shown; icon dimmed when absent -->\n <div class=\"bg-gray-100 rounded-md flex items-start gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0 mt-0.5\"\n [class.opacity-30]=\"!addressLines.length\"\n [class.opacity-75]=\"!!addressLines.length\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n @if (addressLines.length) {\n <div class=\"flex flex-col\" data-test=\"contact-details-address\">\n @for (line of addressLines; track line) {\n <p class=\"text-sm m-0\">{{ line }}</p>\n }\n </div>\n }\n </div>\n\n <!-- Website: only shown when org exists; icon dimmed when absent -->\n @if (organization) {\n <div class=\"bg-gray-100 rounded-md flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!organization.website\"\n [class.opacity-75]=\"!!organization.website\"\n name=\"matOpenInNew\"\n ></ng-icon>\n @if (organization.website) {\n <a\n [href]=\"organization.website.href\"\n target=\"_blank\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-website\"\n >{{ organization.website.href }}</a\n >\n }\n </div>\n }\n</div>\n" }]
34556
+ ], template: "<div\n class=\"bg-gray-50 text-black rounded border border-gray-200 shadow-md p-4 flex flex-col gap-3 w-full\"\n data-test=\"contact-details\"\n>\n @if (displayName) {\n <div class=\"flex items-center gap-3\">\n @if (organization?.logoUrl?.href) {\n <div\n class=\"flex items-center justify-center rounded-md bg-white w-14 h-14 shrink-0 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n }\n <span\n class=\"font-title text-xl leading-tight\"\n data-test=\"contact-details-name\"\n >{{ displayName }}</span\n >\n </div>\n }\n\n <!-- Email + phone: always shown; icon dimmed when field is absent -->\n <div class=\"grid grid-cols-2 gap-1 rounded-md overflow-hidden\">\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.email\"\n [class.opacity-75]=\"!!contact.email\"\n name=\"matMailOutline\"\n ></ng-icon>\n @if (contact.email) {\n <a\n [href]=\"'mailto:' + contact.email\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-email\"\n >{{ contact.email }}</a\n >\n }\n </div>\n <div class=\"bg-gray-100 flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!contact.phone\"\n [class.opacity-75]=\"!!contact.phone\"\n name=\"matCallOutline\"\n ></ng-icon>\n @if (contact.phone) {\n <span class=\"text-sm\" data-test=\"contact-details-phone\">{{\n contact.phone\n }}</span>\n }\n </div>\n </div>\n\n <!-- Address: always shown; icon dimmed when absent -->\n <div class=\"bg-gray-100 rounded-md flex items-start gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0 mt-0.5\"\n [class.opacity-30]=\"!addressLines.length\"\n [class.opacity-75]=\"!!addressLines.length\"\n name=\"matLocationOnOutline\"\n ></ng-icon>\n @if (addressLines.length) {\n <div class=\"flex flex-col\" data-test=\"contact-details-address\">\n @for (line of addressLines; track line) {\n <p class=\"text-sm m-0\">{{ line }}</p>\n }\n </div>\n }\n </div>\n\n <!-- Website: only shown when org exists; icon dimmed when absent -->\n @if (organization) {\n <div class=\"bg-gray-100 rounded-md flex items-center gap-2 px-3 py-2\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] shrink-0\"\n [class.opacity-30]=\"!organization.website\"\n [class.opacity-75]=\"!!organization.website\"\n name=\"matOpenInNew\"\n ></ng-icon>\n @if (organization.website) {\n <a\n [href]=\"organization.website.href\"\n target=\"_blank\"\n class=\"text-sm break-all hover:underline\"\n data-test=\"contact-details-website\"\n >{{ organization.website.href }}</a\n >\n }\n </div>\n }\n</div>\n" }]
34421
34557
  }], propDecorators: { contact: [{
34422
34558
  type: Input
34423
34559
  }] } });
@@ -34462,11 +34598,11 @@ class ContactPillComponent {
34462
34598
  this.overlayOpen = false;
34463
34599
  }
34464
34600
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactPillComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34465
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ContactPillComponent, isStandalone: true, selector: "gn-ui-contact-pill", inputs: { contact: "contact" }, ngImport: i0, template: "<gn-ui-button\n [type]=\"overlayOpen ? 'primary' : 'primary-light'\"\n extraClass=\"group w-full min-h-12 gap-3 justify-between py-2 pl-5 pr-4 rounded\"\n data-test=\"contact-pill\"\n (buttonClick)=\"toggleOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <span\n class=\"font-title font-medium text-base leading-tight truncate group-hover:text-white\"\n [title]=\"displayName\"\n >{{ displayName }}</span\n >\n <div\n class=\"gn-ui-card-icon items-center justify-center w-10 h-8 group-hover:border-white group-hover:text-white\"\n >\n @if (overlayOpen) {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matClose\"></ng-icon>\n } @else {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matInfoOutline\"></ng-icon>\n }\n </div>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetX]=\"overlayOffsetX\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div [style.width.px]=\"overlayWidth\">\n <gn-ui-contact-details [contact]=\"contact\"></gn-ui-contact-details>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$8.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$8.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ContactDetailsComponent, selector: "gn-ui-contact-details", inputs: ["contact"] }], viewProviders: [provideIcons({ matClose, matInfoOutline })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34601
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: ContactPillComponent, isStandalone: true, selector: "gn-ui-contact-pill", inputs: { contact: "contact" }, ngImport: i0, template: "<gn-ui-button\n [type]=\"overlayOpen ? 'gray-light' : 'primary-light'\"\n extraClass=\"group w-full min-h-12 gap-3 justify-between py-2 pl-5 pr-4 rounded\"\n data-test=\"contact-pill\"\n (buttonClick)=\"toggleOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <span\n class=\"font-title font-medium text-base leading-tight truncate\"\n [class]=\"!overlayOpen ? 'text-primary-black group-hover:text-white' : ''\"\n [title]=\"displayName\"\n >{{ displayName }}</span\n >\n <div\n class=\"gn-ui-card-icon items-center justify-center w-10 h-8\"\n [class]=\"\n !overlayOpen ? 'group-hover:border-white group-hover:text-white' : ''\n \"\n >\n @if (overlayOpen) {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matClose\"></ng-icon>\n } @else {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matInfoOutline\"></ng-icon>\n }\n </div>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetX]=\"overlayOffsetX\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div [style.width.px]=\"overlayWidth\">\n <gn-ui-contact-details [contact]=\"contact\"></gn-ui-contact-details>\n </div>\n</ng-template>\n", dependencies: [{ kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "ngmodule", type: OverlayModule }, { kind: "directive", type: i1$8.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush", "cdkConnectedOverlayDisposeOnNavigation"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$8.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ContactDetailsComponent, selector: "gn-ui-contact-details", inputs: ["contact"] }], viewProviders: [provideIcons({ matClose, matInfoOutline })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
34466
34602
  }
34467
34603
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: ContactPillComponent, decorators: [{
34468
34604
  type: Component,
34469
- args: [{ selector: 'gn-ui-contact-pill', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIcon, ButtonComponent, OverlayModule, ContactDetailsComponent], viewProviders: [provideIcons({ matClose, matInfoOutline })], template: "<gn-ui-button\n [type]=\"overlayOpen ? 'primary' : 'primary-light'\"\n extraClass=\"group w-full min-h-12 gap-3 justify-between py-2 pl-5 pr-4 rounded\"\n data-test=\"contact-pill\"\n (buttonClick)=\"toggleOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <span\n class=\"font-title font-medium text-base leading-tight truncate group-hover:text-white\"\n [title]=\"displayName\"\n >{{ displayName }}</span\n >\n <div\n class=\"gn-ui-card-icon items-center justify-center w-10 h-8 group-hover:border-white group-hover:text-white\"\n >\n @if (overlayOpen) {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matClose\"></ng-icon>\n } @else {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matInfoOutline\"></ng-icon>\n }\n </div>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetX]=\"overlayOffsetX\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div [style.width.px]=\"overlayWidth\">\n <gn-ui-contact-details [contact]=\"contact\"></gn-ui-contact-details>\n </div>\n</ng-template>\n" }]
34605
+ args: [{ selector: 'gn-ui-contact-pill', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [NgIcon, ButtonComponent, OverlayModule, ContactDetailsComponent], viewProviders: [provideIcons({ matClose, matInfoOutline })], template: "<gn-ui-button\n [type]=\"overlayOpen ? 'gray-light' : 'primary-light'\"\n extraClass=\"group w-full min-h-12 gap-3 justify-between py-2 pl-5 pr-4 rounded\"\n data-test=\"contact-pill\"\n (buttonClick)=\"toggleOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <span\n class=\"font-title font-medium text-base leading-tight truncate\"\n [class]=\"!overlayOpen ? 'text-primary-black group-hover:text-white' : ''\"\n [title]=\"displayName\"\n >{{ displayName }}</span\n >\n <div\n class=\"gn-ui-card-icon items-center justify-center w-10 h-8\"\n [class]=\"\n !overlayOpen ? 'group-hover:border-white group-hover:text-white' : ''\n \"\n >\n @if (overlayOpen) {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matClose\"></ng-icon>\n } @else {\n <ng-icon class=\"!w-6 !h-6 !text-[24px]\" name=\"matInfoOutline\"></ng-icon>\n }\n </div>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayOffsetX]=\"overlayOffsetX\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div [style.width.px]=\"overlayWidth\">\n <gn-ui-contact-details [contact]=\"contact\"></gn-ui-contact-details>\n </div>\n</ng-template>\n" }]
34470
34606
  }], propDecorators: { contact: [{
34471
34607
  type: Input
34472
34608
  }] } });
@@ -34551,7 +34687,7 @@ class MetadataInfoComponent {
34551
34687
  this.keyword.emit(keyword);
34552
34688
  }
34553
34689
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.19", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34554
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: MetadataInfoComponent, isStandalone: true, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-button\n type=\"primary-light\"\n class=\"inline-block opacity-70\"\n extraClass=\"lowercase text-sm py-1 px-2\"\n (buttonClick)=\"onKeywordClick(keyword)\"\n >{{ keyword.label }}</gn-ui-button\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track $index) {\n @if (license.url) {\n <div class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (metadata.contactsForResource?.length) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.resource.contacts' | translate\"\n data-test=\"contacts-panel\"\n >\n <div class=\"flex flex-col gap-1 pt-3 pb-4\">\n @for (group of contactGroups; track group.role) {\n <div class=\"flex flex-col gap-1 rounded bg-gray-50 py-4 px-2\">\n <p class=\"text-xs font-normal text-black\">\n {{ group.roleLabel | translate }}\n </p>\n <div class=\"grid gap-1 grid-cols-1 md:grid-cols-2\">\n @for (contact of group.contacts; track contact.email) {\n <gn-ui-contact-pill [contact]=\"contact\"></gn-ui-contact-pill>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n >\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n </gn-ui-expandable-panel>\n}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n }\n @if (metadata.uniqueIdentifier) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}\n"], dependencies: [{ kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "iconColor", "collapsed"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "directive", type: GnUiHumanizeDateDirective, selector: "[gnUiHumanizeDate]", inputs: ["gnUiHumanizeDate"] }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }, { kind: "component", type: ContactPillComponent, selector: "gn-ui-contact-pill", inputs: ["contact"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], viewProviders: [
34690
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "20.3.19", type: MetadataInfoComponent, isStandalone: true, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-button\n type=\"primary-light\"\n class=\"inline-block opacity-70\"\n extraClass=\"lowercase text-sm py-1 px-2\"\n (buttonClick)=\"onKeywordClick(keyword)\"\n >{{ keyword.label }}</gn-ui-button\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track $index) {\n @if (license.url) {\n <div class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (metadata.contactsForResource?.length) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.resource.contacts' | translate\"\n data-test=\"contacts-panel\"\n >\n <div class=\"flex flex-col gap-1 pt-3 pb-4\">\n @for (group of contactGroups; track group.role) {\n <div class=\"flex flex-col gap-1 rounded py-4 px-2\">\n <p class=\"text-xs font-normal text-black\">\n {{ group.roleLabel | translate }}\n </p>\n <div class=\"grid gap-1 grid-cols-1 md:grid-cols-2\">\n @for (contact of group.contacts; track contact.email) {\n <gn-ui-contact-pill [contact]=\"contact\"></gn-ui-contact-pill>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n >\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n </gn-ui-expandable-panel>\n}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n }\n @if (metadata.uniqueIdentifier) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}\n"], dependencies: [{ kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "iconColor", "collapsed"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "directive", type: GnUiHumanizeDateDirective, selector: "[gnUiHumanizeDate]", inputs: ["gnUiHumanizeDate"] }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }, { kind: "component", type: ContactPillComponent, selector: "gn-ui-contact-pill", inputs: ["contact"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], viewProviders: [
34555
34691
  provideIcons({
34556
34692
  matOpenInNew,
34557
34693
  matMailOutline: matMailOutline$1,
@@ -34580,7 +34716,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.19", ngImpo
34580
34716
  matOpenInNew,
34581
34717
  matMailOutline: matMailOutline$1,
34582
34718
  }),
34583
- ], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-button\n type=\"primary-light\"\n class=\"inline-block opacity-70\"\n extraClass=\"lowercase text-sm py-1 px-2\"\n (buttonClick)=\"onKeywordClick(keyword)\"\n >{{ keyword.label }}</gn-ui-button\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track $index) {\n @if (license.url) {\n <div class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (metadata.contactsForResource?.length) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.resource.contacts' | translate\"\n data-test=\"contacts-panel\"\n >\n <div class=\"flex flex-col gap-1 pt-3 pb-4\">\n @for (group of contactGroups; track group.role) {\n <div class=\"flex flex-col gap-1 rounded bg-gray-50 py-4 px-2\">\n <p class=\"text-xs font-normal text-black\">\n {{ group.roleLabel | translate }}\n </p>\n <div class=\"grid gap-1 grid-cols-1 md:grid-cols-2\">\n @for (contact of group.contacts; track contact.email) {\n <gn-ui-contact-pill [contact]=\"contact\"></gn-ui-contact-pill>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n >\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n </gn-ui-expandable-panel>\n}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n }\n @if (metadata.uniqueIdentifier) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}\n"] }]
34719
+ ], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n @if (metadata.abstract) {\n <gn-ui-max-lines [maxLines]=\"6\" data-test=\"metadata-info-abstract\">\n <div class=\"mb-6\">\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n\n @if (!fieldReady('keywords') || metadata.keywords?.length) {\n <p class=\"mt-6 mb-3 font-medium text-black text-sm\" translate>\n record.metadata.keywords\n </p>\n }\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n @if (metadata.keywords?.length) {\n <gn-ui-max-lines [maxLines]=\"7\">\n <div class=\"metadata-info-keywords sm:pb-4 flex flex-wrap gap-2\">\n @for (keyword of metadata.keywords; track keyword) {\n <gn-ui-button\n type=\"primary-light\"\n class=\"inline-block opacity-70\"\n extraClass=\"lowercase text-sm py-1 px-2\"\n (buttonClick)=\"onKeywordClick(keyword)\"\n >{{ keyword.label }}</gn-ui-button\n >\n }\n </div>\n </gn-ui-max-lines>\n }\n </gn-ui-content-ghost>\n</div>\n\n@if (\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n >\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n @for (license of licenses; track $index) {\n @if (license.url) {\n <div class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n } @else {\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n }\n }\n @if (legalConstraints.length) {\n <div class=\"mb-6\">\n @for (constraint of legalConstraints; track constraint) {\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n }\n </div>\n }\n @if (otherConstraints.length) {\n @for (constraint of otherConstraints; track constraint) {\n <div gnUiLinkify>\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </div>\n }\n }\n @if (!hasUsage) {\n <span class=\"noUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (metadata.contactsForResource?.length) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.resource.contacts' | translate\"\n data-test=\"contacts-panel\"\n >\n <div class=\"flex flex-col gap-1 pt-3 pb-4\">\n @for (group of contactGroups; track group.role) {\n <div class=\"flex flex-col gap-1 rounded py-4 px-2\">\n <p class=\"text-xs font-normal text-black\">\n {{ group.roleLabel | translate }}\n </p>\n <div class=\"grid gap-1 grid-cols-1 md:grid-cols-2\">\n @for (contact of group.contacts; track contact.email) {\n <gn-ui-contact-pill [contact]=\"contact\"></gn-ui-contact-pill>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n (metadata.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n) {\n <gn-ui-expandable-panel\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n >\n @if (metadata.kind === 'dataset' && metadata.lineage) {\n <div\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n }\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n @if (metadata.resourceCreated) {\n <div data-test=\"details-panel-resource-created\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n }\n @if (metadata.resourcePublished) {\n <div data-test=\"details-panel-resource-published\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n }\n @if (metadata.resourceUpdated) {\n <div data-test=\"details-panel-resource-updated\">\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n }\n @if (metadata.kind === 'dataset' && metadata.updateFrequency) {\n <div data-test=\"details-panel-update-frequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n }\n @if (metadata.otherLanguages?.length) {\n <div data-test=\"details-panel-other-languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n @for (language of metadata.otherLanguages; track language) {\n <p class=\"text-primary font-medium other-languages\" translate>\n language.{{ language }}\n </p>\n }\n </div>\n </div>\n }\n @if (metadata.kind === 'dataset' && temporalExtent) {\n <div data-test=\"details-panel-temporal-extent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\n @if (temporalExtent.start && temporalExtent.end) {\n <p\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end,\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n }\n @if (temporalExtent.start && !temporalExtent.end) {\n <p translate [translateParams]=\"{ start: temporalExtent.start }\">\n record.metadata.temporalExtent.sinceDate\n </p>\n }\n @if (!temporalExtent.start && temporalExtent.end) {\n <p translate [translateParams]=\"{ end: temporalExtent.end }\">\n record.metadata.temporalExtent.untilDate\n </p>\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n@if (\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n >\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n </gn-ui-expandable-panel>\n}\n@if (metadata.landingPage) {\n <gn-ui-expandable-panel\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\n >\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n @if (metadata.recordUpdated) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\n ></p>\n </div>\n }\n @if (metadata.landingPage) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{\n metadata.landingPage\n }}</span>\n </a>\n </p>\n </div>\n }\n @if (metadata.ownerOrganization) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n }\n @if (metadata.uniqueIdentifier) {\n <div>\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n }\n @if (metadata.topics?.length) {\n <div>\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n @for (topic of metadata.topics; track topic) {\n <gn-ui-badge\n [clickable]=\"false\"\n class=\"inline-block mr-2 mb-2 lowercase\"\n >{{ topic }}</gn-ui-badge\n >\n }\n </div>\n </div>\n }\n </div>\n </gn-ui-expandable-panel>\n}\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}\n"] }]
34584
34720
  }], propDecorators: { metadata: [{
34585
34721
  type: Input
34586
34722
  }], incomplete: [{
@@ -40686,12 +40822,20 @@ class MapViewComponent {
40686
40822
  layers: [],
40687
40823
  view: null,
40688
40824
  }), withLatestFrom$1(this.mdViewFacade.metadata$), map$1(([context, metadata]) => {
40825
+ // overlay the record's declared spatial extent on top of the data layers
40826
+ const extentLayer = this.mapUtils.getRecordExtentLayer(metadata);
40827
+ const layers = extentLayer
40828
+ ? [...context.layers, extentLayer]
40829
+ : context.layers;
40830
+ // the view (initial zoom) is derived from the data layer or, as a
40831
+ // fallback, from the record extent — independently from the overlay above
40689
40832
  if (context.view)
40690
- return context;
40833
+ return { ...context, layers };
40691
40834
  const extent = this.mapUtils.getRecordExtent(metadata);
40692
40835
  const view = extent ? { extent } : null;
40693
40836
  return {
40694
40837
  ...context,
40838
+ layers,
40695
40839
  view,
40696
40840
  };
40697
40841
  }), shareReplay$1(1));
@@ -41820,76 +41964,86 @@ const SPATIAL_SCOPES = [
41820
41964
  },
41821
41965
  ];
41822
41966
  /************************************************************
41823
- *************** INSPIRE TOPICS **************
41967
+ *************** ISO TOPICS **************
41824
41968
  ************************************************************
41825
41969
  */
41826
- const INSPIRE_TOPICS = [
41827
- { value: 'biota', label: 'editor.record.form.topics.inspire.biota' },
41970
+ // label keys mirror the ISO MD_TopicCategoryCode value for consistency
41971
+ // TODO: correctly handle code lists; for instance, this code list is specific to ISO 19139
41972
+ const ISO_TOPICS = [
41973
+ { value: 'biota', label: marker('editor.record.form.topics.iso.biota') },
41828
41974
  {
41829
41975
  value: 'boundaries',
41830
- label: 'editor.record.form.topics.inspire.boundaries',
41976
+ label: marker('editor.record.form.topics.iso.boundaries'),
41831
41977
  },
41832
41978
  {
41833
41979
  value: 'climatologyMeteorologyAtmosphere',
41834
- label: 'editor.record.form.topics.inspire.climatology',
41980
+ label: marker('editor.record.form.topics.iso.climatologyMeteorologyAtmosphere'),
41981
+ },
41982
+ {
41983
+ value: 'economy',
41984
+ label: marker('editor.record.form.topics.iso.economy'),
41985
+ },
41986
+ {
41987
+ value: 'elevation',
41988
+ label: marker('editor.record.form.topics.iso.elevation'),
41835
41989
  },
41836
- { value: 'economy', label: 'editor.record.form.topics.inspire.economy' },
41837
- { value: 'elevation', label: 'editor.record.form.topics.inspire.elevation' },
41838
41990
  {
41839
41991
  value: 'environment',
41840
- label: 'editor.record.form.topics.inspire.environnement',
41992
+ label: marker('editor.record.form.topics.iso.environment'),
41841
41993
  },
41842
- { value: 'farming', label: 'editor.record.form.topics.inspire.farming' },
41843
41994
  {
41844
- value: 'geoscientific information',
41845
- label: 'editor.record.form.topics.inspire.geoscientific',
41995
+ value: 'farming',
41996
+ label: marker('editor.record.form.topics.iso.farming'),
41997
+ },
41998
+ {
41999
+ value: 'geoscientificInformation',
42000
+ label: marker('editor.record.form.topics.iso.geoscientificInformation'),
42001
+ },
42002
+ {
42003
+ value: 'health',
42004
+ label: marker('editor.record.form.topics.iso.health'),
41846
42005
  },
41847
- { value: 'health', label: 'editor.record.form.topics.inspire.health' },
41848
42006
  {
41849
42007
  value: 'imageryBaseMapsEarthCover',
41850
- label: 'editor.record.form.topics.inspire.imagery',
42008
+ label: marker('editor.record.form.topics.iso.imageryBaseMapsEarthCover'),
42009
+ },
42010
+ {
42011
+ value: 'inlandWaters',
42012
+ label: marker('editor.record.form.topics.iso.inlandWaters'),
41851
42013
  },
41852
- { value: 'inlandWaters', label: 'editor.record.form.topics.inspire.waters' },
41853
42014
  {
41854
42015
  value: 'intelligenceMilitary',
41855
- label: 'editor.record.form.topics.inspire.intelligence',
42016
+ label: marker('editor.record.form.topics.iso.intelligenceMilitary'),
42017
+ },
42018
+ {
42019
+ value: 'location',
42020
+ label: marker('editor.record.form.topics.iso.location'),
42021
+ },
42022
+ {
42023
+ value: 'oceans',
42024
+ label: marker('editor.record.form.topics.iso.oceans'),
41856
42025
  },
41857
- { value: 'Location', label: 'editor.record.form.topics.inspire.location' },
41858
- { value: 'Oceans', label: 'editor.record.form.topics.inspire.oceans' },
41859
42026
  {
41860
42027
  value: 'planningCadastre',
41861
- label: 'editor.record.form.topics.inspire.planning',
42028
+ label: marker('editor.record.form.topics.iso.planningCadastre'),
42029
+ },
42030
+ {
42031
+ value: 'society',
42032
+ label: marker('editor.record.form.topics.iso.society'),
42033
+ },
42034
+ {
42035
+ value: 'structure',
42036
+ label: marker('editor.record.form.topics.iso.structure'),
41862
42037
  },
41863
- { value: 'Society', label: 'editor.record.form.topics.inspire.society' },
41864
- { value: 'Structure', label: 'editor.record.form.topics.inspire.structure' },
41865
42038
  {
41866
- value: 'Transportation',
41867
- label: 'editor.record.form.topics.inspire.transportation',
42039
+ value: 'transportation',
42040
+ label: marker('editor.record.form.topics.iso.transportation'),
41868
42041
  },
41869
42042
  {
41870
42043
  value: 'utilitiesCommunication',
41871
- label: 'editor.record.form.topics.inspire.utilities',
42044
+ label: marker('editor.record.form.topics.iso.utilitiesCommunication'),
41872
42045
  },
41873
42046
  ];
41874
- marker('editor.record.form.topics.inspire.biota');
41875
- marker('editor.record.form.topics.inspire.boundaries');
41876
- marker('editor.record.form.topics.inspire.climatology');
41877
- marker('editor.record.form.topics.inspire.economy');
41878
- marker('editor.record.form.topics.inspire.elevation');
41879
- marker('editor.record.form.topics.inspire.environnement');
41880
- marker('editor.record.form.topics.inspire.farming');
41881
- marker('editor.record.form.topics.inspire.geoscientific');
41882
- marker('editor.record.form.topics.inspire.health');
41883
- marker('editor.record.form.topics.inspire.imagery');
41884
- marker('editor.record.form.topics.inspire.intelligence');
41885
- marker('editor.record.form.topics.inspire.location');
41886
- marker('editor.record.form.topics.inspire.oceans');
41887
- marker('editor.record.form.topics.inspire.planning');
41888
- marker('editor.record.form.topics.inspire.society');
41889
- marker('editor.record.form.topics.inspire.structure');
41890
- marker('editor.record.form.topics.inspire.transportation');
41891
- marker('editor.record.form.topics.inspire.utilities');
41892
- marker('editor.record.form.topics.inspire.waters');
41893
42047
 
41894
42048
  const EDITOR_FEATURE_KEY = 'editor';
41895
42049
  const initialEditorState = {
@@ -44254,7 +44408,7 @@ class FormFieldTopicsComponent {
44254
44408
  this.translateService = inject(TranslateService);
44255
44409
  this.topics = [];
44256
44410
  this.valueChange = new EventEmitter();
44257
- this.availableTopics = INSPIRE_TOPICS.map((topic) => {
44411
+ this.availableTopics = ISO_TOPICS.map((topic) => {
44258
44412
  return {
44259
44413
  label: this.translateService.instant(topic.label),
44260
44414
  value: topic.value,
@@ -45075,5 +45229,5 @@ const CHART_TYPE_VALUES = [
45075
45229
  * Generated bundle index. Do not edit.
45076
45230
  */
45077
45231
 
45078
- export { ABOUT_SECTION, ADD_RESULTS, ADD_SEARCH, ANNEXES_SECTION, ASSOCIATED_RESOURCES_SECTION, AVAILABLE_LICENSES, AbstractAction, AbstractSearchField, ActionMenuComponent, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CHART_TYPE_VALUES, CLASSIFICATION_SECTION, CLEAR_ERROR, CLEAR_RESULTS, CONSTRAINTS_SHORTCUTS, CONTACTS, CONTACTS_FOR_RESOURCE_FIELD, CarouselComponent, CatalogTitleComponent, CellPopinComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContactDetailsComponent, ContactPillComponent, ContentGhostComponent, CopyTextButtonComponent, DATA_MANAGERS_SECTION, DEFAULT_CONFIGURATION, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DISABLE_AUTH, DISABLE_DRAFT, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangeInputsComponent, 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, FacetItemComponent, FacetListComponent, FacetsContainerComponent, FavoriteStarComponent, FavoritesService, FeatureCatalogListComponent, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldFocusDirective, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldTopicsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GEOGRAPHICAL_COVERAGE_SECTION, GEONETWORK_UI_TAG_NAME, GEONETWORK_UI_VERSION, GeoDataBadgeComponent, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GnUiHumanizeDateDirective, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, INSPIRE_TOPICS, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InlineFilterComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, KindBadgeComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LEGAL_CONSTRAINTS_FIELD, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, MAX_UPLOAD_SIZE_MB, METADATA_LANGUAGE, METADATA_POINT_OF_CONTACT_SECTION, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataDoiComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MetadataQualityPanelComponent, ModalDialogComponent, MultilingualPanelComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, OPEN_DATA_LICENSE, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OTHER_CONSTRAINTS_FIELD, OnlineResourceCardComponent, OnlineServiceResourceInputComponent, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OrganizationsServiceInterface, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PlatformServiceInterface, PopoverComponent, PopupAlertComponent, PossibleResourceTypes, PossibleResourceTypesDefinition, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_ABSTRACT_FIELD, RECORD_DATASET_URL_TOKEN, RECORD_GRAPHICAL_OVERVIEW_FIELD, RECORD_KEYWORDS_FIELD, RECORD_LICENSE_FIELD, RECORD_ONLINE_LINK_RESOURCES, RECORD_ONLINE_RESOURCES, RECORD_RESOURCE_CREATED_FIELD, RECORD_RESOURCE_UPDATED_FIELD, RECORD_REUSE_URL_TOKEN, RECORD_SERVICE_URL_TOKEN, RECORD_SPATIAL_EXTENTS_FIELD, RECORD_SPATIAL_TOGGLE_FIELD, RECORD_TEMPORAL_EXTENTS_FIELD, RECORD_TITLE_FIELD, RECORD_TOPICS_FIELD, RECORD_UNIQUE_IDENTIFIER_FIELD, RECORD_UPDATED_FIELD, RECORD_UPDATE_FREQUENCY_FIELD, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESOURCE_IDENTIFIER_FIELD, 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, RecordStatusValues, RecordsMetricsComponent, RecordsRepositoryInterface, RecordsService, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResourceTypeLegacyField, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsHitsSearchKindComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, ReusePresentationForms, RoleLabels, RoleValues, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SECURITY_CONSTRAINTS_FIELD, 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, SPATIAL_SCOPES, 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, SortByEnum, SortableListComponent, SourceLabelComponent, SourcesService, SpatialExtentComponent, SpinningLoaderComponent, StacItemsResultGridComponent, StacViewComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TITLE_SECTION, TOPICS_SECTION, 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, USE_AND_ACCESS_CONDITIONS_SECTION, 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, getAddressLines, getAllKeysValidator, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryBoundingBox, getGeometryFromGeoJSON, getGlobalConfig, getIndividualDisplayName, getIsMobile, getJsonDataItemsProxy, getLayers, getLinkId, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalEditorConfig, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getQualityValidators, getResourceType, getReusePresentationForm, getReuseType, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, handleScrollOnNavigation, 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, organizationsServiceFactory, 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, setEditorConfiguration, setFieldVisibility, setFocusedField, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, toIndividual, toLang2, toLang3, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateFrequencyCodeValues, updateLanguages, updateRecordField, updateRecordLanguages, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
45232
+ export { ABOUT_SECTION, ADD_RESULTS, ADD_SEARCH, ANNEXES_SECTION, ASSOCIATED_RESOURCES_SECTION, AVAILABLE_LICENSES, AbstractAction, AbstractSearchField, ActionMenuComponent, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CHART_TYPE_VALUES, CLASSIFICATION_SECTION, CLEAR_ERROR, CLEAR_RESULTS, CONSTRAINTS_SHORTCUTS, CONTACTS, CONTACTS_FOR_RESOURCE_FIELD, CarouselComponent, CatalogTitleComponent, CellPopinComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContactDetailsComponent, ContactPillComponent, ContentGhostComponent, CopyTextButtonComponent, DATA_MANAGERS_SECTION, DEFAULT_CONFIGURATION, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RECORD_CONVERTER, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_SPATIAL_EXTENT_STYLE, DISABLE_AUTH, DISABLE_DRAFT, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangeInputsComponent, 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, FacetItemComponent, FacetListComponent, FacetsContainerComponent, FavoriteStarComponent, FavoritesService, FeatureCatalogListComponent, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldFocusDirective, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldTopicsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GEOGRAPHICAL_COVERAGE_SECTION, GEONETWORK_UI_TAG_NAME, GEONETWORK_UI_VERSION, GeoDataBadgeComponent, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GnUiHumanizeDateDirective, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ISO_TOPICS, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InlineFilterComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, KindBadgeComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LEGAL_CONSTRAINTS_FIELD, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, MAX_UPLOAD_SIZE_MB, METADATA_LANGUAGE, METADATA_POINT_OF_CONTACT_SECTION, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataDoiComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MetadataQualityPanelComponent, ModalDialogComponent, MultilingualPanelComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, OPEN_DATA_LICENSE, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OTHER_CONSTRAINTS_FIELD, OnlineResourceCardComponent, OnlineServiceResourceInputComponent, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OrganizationsServiceInterface, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PlatformServiceInterface, PopoverComponent, PopupAlertComponent, PossibleResourceTypes, PossibleResourceTypesDefinition, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_ABSTRACT_FIELD, RECORD_DATASET_URL_TOKEN, RECORD_GRAPHICAL_OVERVIEW_FIELD, RECORD_KEYWORDS_FIELD, RECORD_LICENSE_FIELD, RECORD_ONLINE_LINK_RESOURCES, RECORD_ONLINE_RESOURCES, RECORD_RESOURCE_CREATED_FIELD, RECORD_RESOURCE_UPDATED_FIELD, RECORD_REUSE_URL_TOKEN, RECORD_SERVICE_URL_TOKEN, RECORD_SPATIAL_EXTENTS_FIELD, RECORD_SPATIAL_TOGGLE_FIELD, RECORD_TEMPORAL_EXTENTS_FIELD, RECORD_TITLE_FIELD, RECORD_TOPICS_FIELD, RECORD_UNIQUE_IDENTIFIER_FIELD, RECORD_UPDATED_FIELD, RECORD_UPDATE_FREQUENCY_FIELD, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESOURCE_IDENTIFIER_FIELD, 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, RecordStatusValues, RecordsMetricsComponent, RecordsRepositoryInterface, RecordsService, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResourceTypeLegacyField, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsHitsSearchKindComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, ReusePresentationForms, RoleLabels, RoleValues, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SECURITY_CONSTRAINTS_FIELD, 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, SPATIAL_SCOPES, 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, SortByEnum, SortableListComponent, SourceLabelComponent, SourcesService, SpatialExtentComponent, SpinningLoaderComponent, StacItemsResultGridComponent, StacViewComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TITLE_SECTION, TOPICS_SECTION, 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, USE_AND_ACCESS_CONDITIONS_SECTION, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, bboxToPolygon, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, createSpatialExtentLayer, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getAddressLines, getAllKeysValidator, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryBoundingBox, getGeometryFromGeoJSON, getGlobalConfig, getIndividualDisplayName, getIsMobile, getJsonDataItemsProxy, getLayers, getLinkId, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalEditorConfig, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getQualityValidators, getResourceType, getReusePresentationForm, getReuseType, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, handleScrollOnNavigation, 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, organizationsServiceFactory, 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, setEditorConfiguration, setFieldVisibility, setFocusedField, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, spatialExtentToGeometry, spatialExtentsToFeatureCollection, stripHtml, stripNamespace, tableItemsFixture, toDate, toIndividual, toLang2, toLang3, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateFrequencyCodeValues, updateLanguages, updateRecordField, updateRecordLanguages, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
45079
45233
  //# sourceMappingURL=geonetwork-ui.mjs.map