geonetwork-ui 2.2.0-dev.438f1ef6 → 2.2.0-dev.46643468

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 (165) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +2 -1
  2. package/esm2022/libs/api/repository/src/index.mjs +2 -1
  3. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  4. package/esm2022/libs/feature/auth/src/lib/feature-auth.module.mjs +2 -2
  5. package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +2 -2
  6. package/esm2022/libs/feature/catalog/src/lib/organisations/organisations.component.mjs +4 -15
  7. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +5 -4
  8. package/esm2022/libs/feature/map/src/lib/add-layer-from-catalog/add-layer-record-preview/add-layer-record-preview.component.mjs +1 -1
  9. package/esm2022/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.mjs +106 -0
  10. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +64 -0
  11. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +63 -0
  12. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +11 -2
  13. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +6 -3
  14. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +3 -1
  15. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +9 -6
  16. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -2
  17. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +1 -1
  18. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +3 -3
  19. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +2 -2
  20. package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +4 -4
  21. package/esm2022/libs/ui/catalog/src/lib/organisation-preview/organisation-preview.component.mjs +1 -1
  22. package/esm2022/libs/ui/elements/src/index.mjs +3 -1
  23. package/esm2022/libs/ui/elements/src/lib/downloads-list/downloads-list.component.mjs +3 -3
  24. package/esm2022/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.mjs +27 -0
  25. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +17 -0
  26. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +10 -3
  27. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +12 -6
  28. package/esm2022/libs/ui/elements/src/lib/related-record-card/related-record-card.component.mjs +3 -3
  29. package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +7 -3
  30. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +13 -3
  31. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +24 -5
  32. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +6 -3
  33. package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +3 -3
  34. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +2 -2
  35. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +2 -2
  36. package/esm2022/libs/ui/search/src/lib/record-preview-card/record-preview-card.component.mjs +1 -1
  37. package/esm2022/libs/ui/search/src/lib/record-preview-feed/record-preview-feed.component.mjs +1 -1
  38. package/esm2022/libs/ui/search/src/lib/record-preview-list/record-preview-list.component.mjs +1 -1
  39. package/esm2022/libs/ui/search/src/lib/record-preview-row/record-preview-row.component.mjs +1 -1
  40. package/esm2022/libs/ui/search/src/lib/record-preview-title/record-preview-title.component.mjs +1 -1
  41. package/esm2022/libs/util/i18n/src/index.mjs +2 -1
  42. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +29 -13
  43. package/esm2022/libs/util/shared/src/lib/utils/fuzzy-filter.mjs +27 -0
  44. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
  45. package/esm2022/translations/de.json +101 -87
  46. package/esm2022/translations/en.json +34 -20
  47. package/esm2022/translations/es.json +14 -0
  48. package/esm2022/translations/fr.json +18 -4
  49. package/esm2022/translations/it.json +26 -12
  50. package/esm2022/translations/nl.json +14 -0
  51. package/esm2022/translations/pt.json +14 -0
  52. package/fesm2022/geonetwork-ui.mjs +640 -217
  53. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  54. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
  55. package/libs/api/repository/src/index.d.ts +1 -0
  56. package/libs/api/repository/src/index.d.ts.map +1 -1
  57. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +1 -0
  58. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  59. package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts +0 -1
  60. package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts.map +1 -1
  61. package/libs/feature/dataviz/src/lib/service/data.service.d.ts +15 -2
  62. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  63. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts +22 -0
  64. package/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.d.ts.map +1 -0
  65. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts +22 -0
  66. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -0
  67. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts +22 -0
  68. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts.map +1 -0
  69. package/libs/feature/map/src/lib/feature-map.module.d.ts +15 -12
  70. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  71. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
  72. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
  73. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +3 -2
  74. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  75. package/libs/feature/search/src/lib/state/effects.d.ts +1 -1
  76. package/libs/feature/search/src/lib/state/effects.d.ts.map +1 -1
  77. package/libs/feature/search/src/lib/utils/service/fields.d.ts +1 -1
  78. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  79. package/libs/ui/elements/src/index.d.ts +2 -0
  80. package/libs/ui/elements/src/index.d.ts.map +1 -1
  81. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  82. package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts +10 -0
  83. package/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.d.ts.map +1 -0
  84. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +8 -0
  85. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -0
  86. package/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.d.ts +1 -0
  87. package/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.d.ts.map +1 -1
  88. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +1 -0
  89. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  90. package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts +3 -2
  91. package/libs/ui/elements/src/lib/thumbnail/thumbnail.component.d.ts.map +1 -1
  92. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +13 -11
  93. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  94. package/libs/ui/inputs/src/lib/button/button.component.d.ts +2 -1
  95. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  96. package/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.d.ts.map +1 -1
  97. package/libs/util/i18n/src/index.d.ts +1 -0
  98. package/libs/util/i18n/src/index.d.ts.map +1 -1
  99. package/libs/util/shared/src/lib/links/link-utils.d.ts +19 -7
  100. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  101. package/libs/util/shared/src/lib/utils/fuzzy-filter.d.ts +9 -0
  102. package/libs/util/shared/src/lib/utils/fuzzy-filter.d.ts.map +1 -0
  103. package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
  104. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  105. package/package.json +1 -1
  106. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +1 -0
  107. package/src/libs/api/repository/src/index.ts +1 -0
  108. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +1 -0
  109. package/src/libs/feature/auth/src/lib/feature-auth.module.ts +1 -1
  110. package/src/libs/feature/catalog/src/lib/feature-catalog.module.ts +1 -1
  111. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.ts +3 -17
  112. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +8 -5
  113. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.css +0 -0
  114. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.html +21 -0
  115. package/src/libs/feature/map/src/lib/add-layer-from-file/add-layer-from-file.component.ts +107 -0
  116. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.css +0 -0
  117. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.html +37 -0
  118. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +64 -0
  119. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.css +0 -0
  120. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.html +55 -0
  121. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.ts +63 -0
  122. package/src/libs/feature/map/src/lib/feature-map.module.ts +6 -0
  123. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +9 -3
  124. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +6 -0
  125. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +12 -4
  126. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +2 -4
  127. package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -1
  128. package/src/libs/feature/search/src/lib/state/effects.ts +1 -1
  129. package/src/libs/feature/search/src/lib/utils/service/fields.ts +1 -1
  130. package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -0
  131. package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.ts +1 -1
  132. package/src/libs/ui/elements/src/index.ts +2 -0
  133. package/src/libs/ui/elements/src/lib/downloads-list/downloads-list.component.html +4 -1
  134. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.css +0 -0
  135. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.html +29 -0
  136. package/src/libs/ui/elements/src/lib/image-overlay-preview/image-overlay-preview.component.ts +15 -0
  137. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +264 -0
  138. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.html +1 -0
  139. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +16 -0
  140. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +93 -27
  141. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts +7 -0
  142. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +4 -0
  143. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +59 -32
  144. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +5 -0
  145. package/src/libs/ui/elements/src/lib/related-record-card/related-record-card.component.html +1 -1
  146. package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.ts +4 -0
  147. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +6 -0
  148. package/src/libs/ui/inputs/src/lib/button/button.component.css +1 -1
  149. package/src/libs/ui/inputs/src/lib/button/button.component.ts +26 -3
  150. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.ts +7 -4
  151. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +8 -3
  152. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.css +1 -0
  153. package/src/libs/ui/layout/src/lib/carousel/carousel.component.css +1 -1
  154. package/src/libs/util/i18n/src/index.ts +1 -0
  155. package/src/libs/util/shared/src/lib/links/link-utils.ts +34 -11
  156. package/src/libs/util/shared/src/lib/utils/fuzzy-filter.ts +32 -0
  157. package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
  158. package/translations/de.json +101 -87
  159. package/translations/en.json +34 -20
  160. package/translations/es.json +14 -0
  161. package/translations/fr.json +18 -4
  162. package/translations/it.json +26 -12
  163. package/translations/nl.json +14 -0
  164. package/translations/pt.json +14 -0
  165. package/translations/sk.json +14 -0
@@ -32,7 +32,7 @@ import WMTS, { optionsFromCapabilities } from 'ol/source/WMTS';
32
32
  import { defaults, DragPan, MouseWheelZoom } from 'ol/interaction';
33
33
  import { mouseOnly, noModifierKeys, primaryAction, platformModifierKeyOnly } from 'ol/events/condition';
34
34
  import WMTSCapabilities from 'ol/format/WMTSCapabilities';
35
- import { WmsEndpoint, sharedFetch, useCache, WfsEndpoint } from '@camptocamp/ogc-client';
35
+ import { WmsEndpoint, WfsEndpoint, sharedFetch, useCache } from '@camptocamp/ogc-client';
36
36
  import chroma from 'chroma-js';
37
37
  import { register, fromEPSGCode } from 'ol/proj/proj4';
38
38
  import proj4 from 'proj4/dist/proj4';
@@ -58,6 +58,7 @@ import * as i1$4 from '@angular/material/progress-spinner';
58
58
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
59
59
  import * as i3 from '@angular/material/tooltip';
60
60
  import { MatTooltipModule } from '@angular/material/tooltip';
61
+ import { marked } from 'marked';
61
62
  import EmblaCarousel from 'embla-carousel';
62
63
  import * as i1$6 from '@angular/cdk/overlay';
63
64
  import { CdkConnectedOverlay, OverlayModule } from '@angular/cdk/overlay';
@@ -72,6 +73,7 @@ import { MatFormFieldModule } from '@angular/material/form-field';
72
73
  import * as i3$2 from '@angular/material/datepicker';
73
74
  import { MatDatepickerModule } from '@angular/material/datepicker';
74
75
  import { MatInputModule } from '@angular/material/input';
76
+ import * as basicLightbox from 'basiclightbox';
75
77
  import * as i1$8 from '@ngrx/effects';
76
78
  import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
77
79
  import tippy from 'tippy.js';
@@ -16687,20 +16689,20 @@ var de = {
16687
16689
  "chart.type.line": "Liniendiagramm",
16688
16690
  "chart.type.lineSmooth": "Geglättes Liniendiagramm",
16689
16691
  "chart.type.pie": "Kreisdiagramm",
16690
- "dashboard.labels.mySpace": "",
16691
- "dashboard.records.all": "",
16692
- "dashboard.records.myDraft": "",
16693
- "dashboard.records.myLibrary": "",
16694
- "dashboard.records.myOrg": "",
16695
- "dashboard.records.myRecords": "",
16696
- "dashboard.records.noRecord": "",
16697
- "dashboard.records.noUser": "",
16698
- "dashboard.records.publishedRecords": "",
16699
- "dashboard.records.search": "",
16700
- "dashboard.records.userDetail": "",
16701
- "dashboard.records.userEmail": "",
16702
- "dashboard.records.username": "",
16703
- "dashboard.records.users": "",
16692
+ "dashboard.labels.mySpace": "Mein Bereich",
16693
+ "dashboard.records.all": "Katalog",
16694
+ "dashboard.records.myDraft": "Meine Entwürfe",
16695
+ "dashboard.records.myLibrary": "Meine Bibliothek",
16696
+ "dashboard.records.myOrg": "Meine Organisation",
16697
+ "dashboard.records.myRecords": "Meine Datensätze",
16698
+ "dashboard.records.noRecord": "Kein Datensatz für diese Organisation",
16699
+ "dashboard.records.noUser": "Keine Benutzer für diese Organisation",
16700
+ "dashboard.records.publishedRecords": "{count, plural, =1{veröffentlichter Datensatz} other{veröffentlichte Datensätze}}",
16701
+ "dashboard.records.search": "Suche nach \"{searchText}\"",
16702
+ "dashboard.records.userDetail": "Name",
16703
+ "dashboard.records.userEmail": "E-Mail",
16704
+ "dashboard.records.username": "Benutzername",
16705
+ "dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
16704
16706
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
16705
16707
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
16706
16708
  "datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
@@ -16714,7 +16716,7 @@ var de = {
16714
16716
  "datafeeder.form.datepicker": "Wissen Sie, wann der Datensatz erstellt wurde?",
16715
16717
  "datafeeder.form.description": "Beschreiben Sie abschließend den Prozess, der zur Erstellung des Datensatzes verwendet wurde",
16716
16718
  "datafeeder.form.dropdown": "Für welche Skala wurde er erstellt?",
16717
- "datafeeder.form.tags": "Wählen Sie einen oder mehrere Tags aus, die zu Ihrem Datensatz passen",
16719
+ "datafeeder.form.tags": "Wählen Sie einen oder mehrere Tage aus, die zu Ihrem Datensatz passen",
16718
16720
  "datafeeder.form.title": "Geben Sie Ihrem Datensatz den besten Titel",
16719
16721
  "datafeeder.formsPage.title": "Erzählen Sie uns mehr über Ihren Datensatz",
16720
16722
  "datafeeder.month.april": "April",
@@ -16729,16 +16731,16 @@ var de = {
16729
16731
  "datafeeder.month.november": "November",
16730
16732
  "datafeeder.month.october": "Oktober",
16731
16733
  "datafeeder.month.september": "September",
16732
- "datafeeder.publish.hint": "Sie können diese Seite sicher verlassen. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist",
16733
- "datafeeder.publish.illustration.title": "Ein weiterer Datensatz zum Veröffentlichen?",
16734
+ "datafeeder.publish.hint": "Sie können diese Seite sicher verlassen. Sie werden benachrichtigt, wenn der Vorgang abgeschlossen ist.",
16735
+ "datafeeder.publish.illustration.title": "Ein weiterer Datensatz \n zum Veröffentlichen?",
16734
16736
  "datafeeder.publish.subtitle": "Das Veröffentlichen kann einige Minuten dauern.",
16735
- "datafeeder.publish.title": "Vielen Dank! Ihr Datensatz wird veröffentlicht",
16737
+ "datafeeder.publish.title": "Vielen Dank! \n Ihr Datensatz wird veröffentlicht",
16736
16738
  "datafeeder.publish.upload": "Jetzt hochladen",
16737
16739
  "datafeeder.publishSuccess.geonetworkRecord": "Metadatensatz",
16738
16740
  "datafeeder.publishSuccess.illustration.title": "Erledigt, alles ist gut!",
16739
16741
  "datafeeder.publishSuccess.mapViewer": "Kartenviewer",
16740
16742
  "datafeeder.publishSuccess.subtitle": "Zeigen Sie Ihre Daten an in:",
16741
- "datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! Ihr Datensatz wurde veröffentlicht",
16743
+ "datafeeder.publishSuccess.title": "Herzlichen Glückwunsch! \n Ihr Datensatz wurde veröffentlicht",
16742
16744
  "datafeeder.publishSuccess.uploadAnotherData": "Ein weiteren Datensatz hochladen",
16743
16745
  "datafeeder.summarizePage.illustration": "Kein Fehler? Los geht's!",
16744
16746
  "datafeeder.summarizePage.previous": "Zurück",
@@ -16746,11 +16748,11 @@ var de = {
16746
16748
  "datafeeder.summarizePage.title": "Sie sind fast fertig...",
16747
16749
  "datafeeder.upload.acceptedFormats": "Akzeptierte Dateiformate:",
16748
16750
  "datafeeder.upload.checkboxLabel": "Ich besitze die Rechte zur Veröffentlichung dieses Datensatzes",
16749
- "datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen geospatialen Datensatz enthält",
16751
+ "datafeeder.upload.error.subtitle.analysis": "Überprüfen Sie, ob die Datei einen gültigen geografischen Datensatz enthält",
16750
16752
  "datafeeder.upload.error.subtitle.cantOpenFile": "Bitte überprüfen Sie, ob die Datei gültig ist",
16751
16753
  "datafeeder.upload.error.subtitle.fileFormat": "Beachten Sie: Nur SHP-Dateien",
16752
- "datafeeder.upload.error.subtitle.fileSize": "Beachten Sie: Maximal {size} MB",
16753
- "datafeeder.upload.error.title.analysis": "Fehler bei der Datensatzanalyse",
16754
+ "datafeeder.upload.error.subtitle.fileSize": "Beachten Sie: Maximale Dateigröße {size} MB",
16755
+ "datafeeder.upload.error.title.analysis": "Fehler während der Datensatzanalyse",
16754
16756
  "datafeeder.upload.error.title.cantOpenFile": "Fehler beim Öffnen der Datei",
16755
16757
  "datafeeder.upload.error.title.fileFormat": "Das ausgewählte Dateiformat wird nicht unterstützt",
16756
16758
  "datafeeder.upload.error.title.fileHasntSelected": "Keine Datei ausgewählt",
@@ -16758,19 +16760,19 @@ var de = {
16758
16760
  "datafeeder.upload.error.title.noRightsToSendData": "Sie dürfen diesen Datensatz nicht veröffentlichen",
16759
16761
  "datafeeder.upload.illustration.enrichment": "Anreicherung",
16760
16762
  "datafeeder.upload.illustration.import": "Import",
16761
- "datafeeder.upload.illustration.title": "Das Hinzufügen von Daten war noch nie einfacher",
16763
+ "datafeeder.upload.illustration.title": "Das Hinzufügen von Daten \n war noch nie so einfach",
16762
16764
  "datafeeder.upload.illustration.validation": "Validierung",
16763
- "datafeeder.upload.illustration.verification": "Verifizierung",
16765
+ "datafeeder.upload.illustration.verification": "Überprüfung",
16764
16766
  "datafeeder.upload.inputLabel": "Importieren Sie Ihre Datei",
16765
16767
  "datafeeder.upload.maxFileSize": "Maximale Dateigröße beträgt {size} MB",
16766
16768
  "datafeeder.upload.title": "Laden Sie Ihren Datensatz hoch",
16767
16769
  "datafeeder.upload.uploadButton": "Hochladen",
16768
- "datafeeder.validation.encoding": "Kodierung",
16770
+ "datafeeder.validation.encoding": "Codierung",
16769
16771
  "datafeeder.validation.extent.title": "Hier ist der Datensatzumfang",
16770
16772
  "datafeeder.validation.extent.title.unknown": "Das Projektionssystem ist unbekannt",
16771
16773
  "datafeeder.validation.projection": "Raumbezugssystem:",
16772
- "datafeeder.validation.projection.unknown": "Wählen Sie ein Raumbezugssystem",
16773
- "datafeeder.validation.sample.title": "Und eine Beispieleinheit aus dem Datensatz",
16774
+ "datafeeder.validation.projection.unknown": "Wählen Sie ein Raumbezugssystem aus",
16775
+ "datafeeder.validation.sample.title": "Und eine Beispielentität aus dem Datensatz",
16774
16776
  "datafeeder.wizard.emptyRequiredValuesMessage": "Bitte füllen Sie die obligatorischen Felder aus",
16775
16777
  "datafeeder.wizardSummarize.createdAt": "Erstellt am",
16776
16778
  "datafeeder.wizardSummarize.scale": "Maßstab",
@@ -16780,19 +16782,20 @@ var de = {
16780
16782
  "datahub.header.news": "Startseite",
16781
16783
  "datahub.header.organisations": "Organisationen",
16782
16784
  "datahub.header.popularRecords": "Die beliebtesten",
16783
- "datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten von meiner Organisation</div>",
16784
- "datahub.news.contact.contactus": "",
16785
- "datahub.news.contact.html": "",
16786
- "datahub.news.contact.title": "",
16785
+ "datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten meiner Organisation</div>",
16786
+ "datahub.news.contact.contactus": "Kontaktieren Sie uns",
16787
+ "datahub.news.contact.html": "<p>Brauchen Sie Daten, die derzeit nicht auf der Plattform vorhanden sind?</p><p>Unsere Teams stehen Ihnen zur Verfügung.</p>",
16788
+ "datahub.news.contact.title": "Ein spezielles Bedürfnis?",
16787
16789
  "datahub.news.feed": "Nachrichtenfeed",
16788
16790
  "datahub.news.figures": "Indikatoren",
16789
- "datahub.search.back": "Zurück zu den Ergebnissen",
16791
+ "datahub.record.addToFavorites": "Zu Favoriten hinzufügen",
16792
+ "datahub.search.back": "Zurück",
16790
16793
  "datahub.search.filter.all": "Alle",
16791
- "datahub.search.filter.generatedByWfs": "Generiert durch API",
16794
+ "datahub.search.filter.generatedByWfs": "Generiert durch eine API",
16792
16795
  "datahub.search.filter.others": "Andere",
16793
16796
  "dataset.error.http": "Die Daten konnten aufgrund eines HTTP-Fehlers nicht geladen werden: \"{ info }\"",
16794
16797
  "dataset.error.network": "Die Daten konnten aufgrund eines Netzwerkfehlers oder CORS-Beschränkungen nicht geladen werden: \"{ info }\"",
16795
- "dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht geparst werden: \"{ info }\"",
16798
+ "dataset.error.parse": "Die Daten wurden geladen, konnten aber nicht gelesen werden: \"{ info }\"",
16796
16799
  "dataset.error.unknown": "Die Daten können nicht angezeigt werden: \"{ info }\"",
16797
16800
  "dataset.error.unsupportedType": "Der folgende Inhaltstyp wird nicht unterstützt: \"{ info }\"",
16798
16801
  "domain.record.status.completed": "Abgeschlossen",
@@ -16800,18 +16803,18 @@ var de = {
16800
16803
  "domain.record.status.ongoing": "Kontinuierliche Aktualisierung",
16801
16804
  "domain.record.status.removed": "Entfernt",
16802
16805
  "domain.record.status.under_development": "In Erstellung",
16803
- "domain.record.updateFrequency.asNeeded": "Bei Bedarf",
16804
- "domain.record.updateFrequency.continual": "Kontinuierlich",
16806
+ "domain.record.updateFrequency.asNeeded": "Nach Bedarf",
16807
+ "domain.record.updateFrequency.continual": "Fortlaufend",
16805
16808
  "domain.record.updateFrequency.day": "{count, plural, =0{0} one{Ein} other{{count}}} mal am Tag",
16806
- "domain.record.updateFrequency.irregular": "Unregelmässig",
16809
+ "domain.record.updateFrequency.irregular": "Unregelmäßig",
16807
16810
  "domain.record.updateFrequency.month": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Monat",
16808
16811
  "domain.record.updateFrequency.notPlanned": "Nicht geplant",
16809
- "domain.record.updateFrequency.periodic": "Regelmässig",
16812
+ "domain.record.updateFrequency.periodic": "Regelmäßig",
16810
16813
  "domain.record.updateFrequency.unknown": "Unbekannt",
16811
16814
  "domain.record.updateFrequency.week": "{count, plural, =0{0} one{Ein} other{{count}}} mal in der Woche",
16812
16815
  "domain.record.updateFrequency.year": "{count, plural, =0{0} one{Ein} other{{count}}} mal im Jahr",
16813
16816
  "downloads.format.unknown": "unbekannt",
16814
- "downloads.wfs.featuretype.not.found": "Die Schicht wurde nicht gefunden",
16817
+ "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
16815
16818
  dropFile: dropFile$6,
16816
16819
  "externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
16817
16820
  "facets.block.title.OrgForResource": "Organisation",
@@ -16846,10 +16849,17 @@ var de = {
16846
16849
  "map.add.layer.file": "Aus einer Datei",
16847
16850
  "map.add.layer.wfs": "Aus WFS",
16848
16851
  "map.add.layer.wms": "Aus WMS",
16852
+ "map.addFromFile.placeholder": "Klicke hier oder ziehe eine Datei herein",
16853
+ "map.help.addFromFile": "Klicke oder ziehe eine Datei herein um eine Karte hinzuzufügen (momentan wird nur das GeoJSON-Format unterstützt).",
16854
+ "map.layer.add": "Hinzufügen",
16855
+ "map.layers.available": "Verfügbare Layer",
16849
16856
  "map.layers.list": "Ebenen",
16850
16857
  "map.loading.data": "Kartendaten werden geladen...",
16858
+ "map.loading.service": "Dienst wird geladen...",
16851
16859
  "map.navigation.message": "Bitte verwenden Sie STRG + Maus (oder zwei Finger auf einem Mobilgerät), um die Karte zu navigieren",
16852
16860
  "map.select.layer": "Datenquelle",
16861
+ "map.wfs.urlInput.hint": "Geben Sie die WFS URL ein",
16862
+ "map.wms.urlInput.hint": "Geben Sie die WMS URL ein",
16853
16863
  "multiselect.filter.placeholder": "Suche",
16854
16864
  "nav.back": "Zurück",
16855
16865
  next: next$6,
@@ -16865,56 +16875,61 @@ var de = {
16865
16875
  "pagination.pageOf": "von",
16866
16876
  previous: previous$6,
16867
16877
  "record.action.download": "Herunterladen",
16868
- "record.action.view": "Ansehen",
16878
+ "record.action.view": "Anzeigen",
16869
16879
  "record.externalViewer.open": "In externem Kartenviewer öffnen",
16870
16880
  "record.metadata.about": "Beschreibung",
16871
16881
  "record.metadata.api": "API",
16872
- "record.metadata.api.form.closeButton": "",
16873
- "record.metadata.api.form.closeForm": "",
16874
- "record.metadata.api.form.create": "",
16875
- "record.metadata.api.form.customUrl": "",
16876
- "record.metadata.api.form.limit": "",
16877
- "record.metadata.api.form.limit.all": "",
16878
- "record.metadata.api.form.offset": "",
16879
- "record.metadata.api.form.openForm": "",
16880
- "record.metadata.api.form.reset": "",
16881
- "record.metadata.api.form.title": "",
16882
- "record.metadata.api.form.type": "",
16883
- "record.metadata.author": "",
16882
+ "record.metadata.api.form.closeButton": "Schließen",
16883
+ "record.metadata.api.form.closeForm": "Formular schließen",
16884
+ "record.metadata.api.form.create": "Ihre Anfrage erstellen",
16885
+ "record.metadata.api.form.customUrl": "Benutzerdefinierte URL",
16886
+ "record.metadata.api.form.limit": "Anzahl der Datensätze",
16887
+ "record.metadata.api.form.limit.all": "Alle",
16888
+ "record.metadata.api.form.offset": "Anzahl des ersten Datensatzes",
16889
+ "record.metadata.api.form.openForm": "Formular öffnen",
16890
+ "record.metadata.api.form.reset": "Zurücksetzen",
16891
+ "record.metadata.api.form.title": "Benutzerdefinierte URL generieren",
16892
+ "record.metadata.api.form.type": "Ausgabeformat",
16893
+ "record.metadata.author": "Autor",
16884
16894
  "record.metadata.catalog": "Katalog",
16885
16895
  "record.metadata.contact": "Kontakt",
16886
16896
  "record.metadata.createdOn": "Erstellt am",
16887
- "record.metadata.details": "Details",
16897
+ "record.metadata.details": "Technische Informationen",
16888
16898
  "record.metadata.download": "Downloads",
16889
- "record.metadata.formats": "",
16899
+ "record.metadata.formats": "Formate",
16890
16900
  "record.metadata.isOpenData": "Open Data",
16891
16901
  "record.metadata.keywords": "Stichworte",
16902
+ "record.metadata.lastUpdate": "Zuletzt aktualisiert am",
16892
16903
  "record.metadata.links": "Links",
16893
- "record.metadata.noUsage": "Für diesen Datensatz sind keine Verwendungsbedingungen angegeben.",
16904
+ "record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
16894
16905
  "record.metadata.origin": "Über die Daten",
16906
+ "record.metadata.owner": "",
16895
16907
  "record.metadata.preview": "Vorschau",
16896
16908
  "record.metadata.publications": "Veröffentlichungen",
16897
- "record.metadata.quality": "",
16898
- "record.metadata.quality.contact.failed": "",
16899
- "record.metadata.quality.contact.success": "",
16900
- "record.metadata.quality.description.failed": "",
16901
- "record.metadata.quality.description.success": "",
16902
- "record.metadata.quality.details": "",
16903
- "record.metadata.quality.keywords.failed": "",
16904
- "record.metadata.quality.keywords.success": "",
16905
- "record.metadata.quality.legalConstraints.failed": "",
16906
- "record.metadata.quality.legalConstraints.success": "",
16907
- "record.metadata.quality.organisation.failed": "",
16908
- "record.metadata.quality.organisation.success": "",
16909
- "record.metadata.quality.title.failed": "",
16910
- "record.metadata.quality.title.success": "",
16911
- "record.metadata.quality.topic.failed": "",
16912
- "record.metadata.quality.topic.success": "",
16913
- "record.metadata.quality.updateFrequency.failed": "",
16914
- "record.metadata.quality.updateFrequency.success": "",
16909
+ "record.metadata.quality": "Metadatenqualität",
16910
+ "record.metadata.quality.contact.failed": "Kontakt nicht angegeben",
16911
+ "record.metadata.quality.contact.success": "Kontakt angegeben",
16912
+ "record.metadata.quality.description.failed": "Beschreibung nicht angegeben",
16913
+ "record.metadata.quality.description.success": "Beschreibung angegeben",
16914
+ "record.metadata.quality.details": "Details",
16915
+ "record.metadata.quality.keywords.failed": "Schlagwörter nicht angegeben",
16916
+ "record.metadata.quality.keywords.success": "Schlagwörter angegeben",
16917
+ "record.metadata.quality.legalConstraints.failed": "Rechtliche Beschränkungen nicht angegeben",
16918
+ "record.metadata.quality.legalConstraints.success": "Rechtliche Beschränkungen angegeben",
16919
+ "record.metadata.quality.organisation.failed": "Organisation nicht angegeben",
16920
+ "record.metadata.quality.organisation.success": "Organisation angegeben",
16921
+ "record.metadata.quality.title.failed": "Titel nicht angegeben",
16922
+ "record.metadata.quality.title.success": "Titel angegeben",
16923
+ "record.metadata.quality.topic.failed": "Thema nicht angegeben",
16924
+ "record.metadata.quality.topic.success": "Thema angegeben",
16925
+ "record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
16926
+ "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
16915
16927
  "record.metadata.related": "Ähnliche Datensätze",
16916
- "record.metadata.sheet": "Weitere Informationen erhalten Sie unter :",
16928
+ "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
16929
+ "record.metadata.themes": "Kategorien",
16917
16930
  "record.metadata.title": "Titel",
16931
+ "record.metadata.type": "Geographischer Datensatz",
16932
+ "record.metadata.uniqueId": "Eindeutige Kennung",
16918
16933
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
16919
16934
  "record.metadata.updateStatus": "Aktualisierungsstatus der Daten",
16920
16935
  "record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
@@ -16926,23 +16941,23 @@ var de = {
16926
16941
  "record.was.created.time": "erstellte diesen Datensatz {time}",
16927
16942
  records: records$6,
16928
16943
  "results.layout.selectOne": "Layout auswählen",
16929
- "results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{auf {hits} insgesamt angezeigt.}}",
16930
- "results.records.hits.empty.help.html": "Vorschläge: <ul class='list-disc list-inside'><li>Versuchen Sie andere Wörter</li><li>Geben Sie weniger Wörter ein</li></ul>",
16944
+ "results.records.hits.displayedOn": "{displayed, plural, =0{Kein Datensatz.} one{1 Datensatz} other{{displayed} Datensätze }} {hits, plural, other{angezeigt von {hits} insgesamt.}}",
16945
+ "results.records.hits.empty.help.html": "Vorschläge: <ul class='list-disc list-inside'><li>Versuchen Sie es mit anderen Worten</li><li>Beschränken Sie die Suchwörter</li></ul>",
16931
16946
  "results.records.hits.found": "{hits, plural, =0{Keine Dokumente entsprechen der angegebenen Suche.} one{1 Datensatz gefunden.} other{{hits} Datensätze gefunden.}}",
16932
- "results.records.hits.selected": "",
16947
+ "results.records.hits.selected": "{ amount } ausgewählt",
16933
16948
  "results.showMore": "Mehr Ergebnisse anzeigen...",
16934
- "results.sortBy.dateStamp": "Letzte Aktualisierungen",
16949
+ "results.sortBy.dateStamp": "Neueste",
16935
16950
  "results.sortBy.popularity": "Beliebtheit",
16936
- "results.sortBy.qualityScore": "",
16951
+ "results.sortBy.qualityScore": "Qualitätsbewertung",
16937
16952
  "results.sortBy.relevancy": "Relevanz",
16938
16953
  "search.autocomplete.error": "Vorschläge konnten nicht abgerufen werden:",
16939
16954
  "search.error.couldNotReachApi": "Die API konnte nicht erreicht werden",
16940
- "search.error.receivedError": "Ein Fehler wurde empfangen",
16955
+ "search.error.receivedError": "Ein Fehler ist aufgetreten",
16941
16956
  "search.error.recordNotFound": "Der Datensatz mit der Kennung \"{ id }\" konnte nicht gefunden werden.",
16942
- "search.field.any.placeholder": "Suche nach Datensätzen ...",
16957
+ "search.field.any.placeholder": "Suche Datensätze ...",
16943
16958
  "search.field.sortBy": "Sortieren nach:",
16944
16959
  "search.filters.clear": "Zurücksetzen",
16945
- "search.filters.contact": "Kontakt",
16960
+ "search.filters.contact": "Kontakte",
16946
16961
  "search.filters.format": "Formate",
16947
16962
  "search.filters.inspireKeyword": "INSPIRE-Schlüsselwort",
16948
16963
  "search.filters.isSpatial": "Ist räumliche Daten",
@@ -16960,13 +16975,13 @@ var de = {
16960
16975
  "search.filters.license.unknown": "Unbekannt oder nicht vorhanden",
16961
16976
  "search.filters.maximize": "Erweitern",
16962
16977
  "search.filters.minimize": "Minimieren",
16963
- "search.filters.myRecords": "",
16964
- "search.filters.myRecordsHelp": "",
16965
- "search.filters.otherRecords": "",
16978
+ "search.filters.myRecords": "Nur meine Datensätze anzeigen",
16979
+ "search.filters.myRecordsHelp": "Wenn dies aktiviert ist, werden nur von mir erstellte Datensätze angezeigt; Datensätze, die von anderen erstellt wurden, werden nicht angezeigt.",
16980
+ "search.filters.otherRecords": "Datensätze von einer anderen Person anzeigen",
16966
16981
  "search.filters.publicationYear": "Veröffentlichungsjahr",
16967
16982
  "search.filters.publisher": "Organisationen",
16968
- "search.filters.representationType": "",
16969
- "search.filters.resourceType": "",
16983
+ "search.filters.representationType": "Repräsentationstyp",
16984
+ "search.filters.resourceType": "Ressourcentyp",
16970
16985
  "search.filters.standard": "Standard",
16971
16986
  "search.filters.title": "Ergebnisse filtern",
16972
16987
  "search.filters.topic": "Thema",
@@ -16978,6 +16993,7 @@ var de = {
16978
16993
  "table.object.count": "Objekte in diesem Datensatz",
16979
16994
  "table.select.data": "Datenquelle",
16980
16995
  "tooltip.html.copy": "HTML kopieren",
16996
+ "tooltip.id.copy": "",
16981
16997
  "tooltip.url.copy": "URL kopieren",
16982
16998
  "tooltip.url.open": "URL öffnen",
16983
16999
  "ui.readLess": "Weniger lesen",
@@ -17110,7 +17126,8 @@ var en = {
17110
17126
  "datahub.news.contact.title": "A specific need?",
17111
17127
  "datahub.news.feed": "News feed",
17112
17128
  "datahub.news.figures": "Indicators",
17113
- "datahub.search.back": "Back to results",
17129
+ "datahub.record.addToFavorites": "Add to favorites",
17130
+ "datahub.search.back": "Back",
17114
17131
  "datahub.search.filter.all": "All",
17115
17132
  "datahub.search.filter.generatedByWfs": "generated by an API",
17116
17133
  "datahub.search.filter.others": "Others",
@@ -17170,10 +17187,17 @@ var en = {
17170
17187
  "map.add.layer.file": "From a file",
17171
17188
  "map.add.layer.wfs": "From WFS",
17172
17189
  "map.add.layer.wms": "From WMS",
17190
+ "map.addFromFile.placeholder": "Click or drop a file here",
17191
+ "map.help.addFromFile": "Click or drag and drop a file to add to the map (currently supports GeoJSON format only).",
17192
+ "map.layer.add": "Add",
17193
+ "map.layers.available": "Available Layers",
17173
17194
  "map.layers.list": "Layers",
17174
17195
  "map.loading.data": "Loading map data...",
17196
+ "map.loading.service": "Loading service...",
17175
17197
  "map.navigation.message": "Please use CTRL + mouse (or two fingers on mobile) to navigate the map",
17176
17198
  "map.select.layer": "Data source",
17199
+ "map.wfs.urlInput.hint": "Enter WFS service URL",
17200
+ "map.wms.urlInput.hint": "Enter WMS service URL",
17177
17201
  "multiselect.filter.placeholder": "Search",
17178
17202
  "nav.back": "Back",
17179
17203
  next: next$5,
@@ -17208,40 +17232,45 @@ var en = {
17208
17232
  "record.metadata.catalog": "Catalog",
17209
17233
  "record.metadata.contact": "Contact",
17210
17234
  "record.metadata.createdOn": "Created on",
17211
- "record.metadata.details": "Details",
17235
+ "record.metadata.details": "Technical information",
17212
17236
  "record.metadata.download": "Downloads",
17213
17237
  "record.metadata.formats": "Formats",
17214
17238
  "record.metadata.isOpenData": "Open Data",
17215
17239
  "record.metadata.keywords": "Keywords",
17240
+ "record.metadata.lastUpdate": "Last updated on",
17216
17241
  "record.metadata.links": "Links",
17217
17242
  "record.metadata.noUsage": "No usage conditions specified for this record.",
17218
17243
  "record.metadata.origin": "About the data",
17244
+ "record.metadata.owner": "Catalog of origin",
17219
17245
  "record.metadata.preview": "Preview",
17220
17246
  "record.metadata.publications": "publications",
17221
17247
  "record.metadata.quality": "Metadata Quality",
17222
- "record.metadata.quality.contact.failed": "Contact is not completed",
17223
- "record.metadata.quality.contact.success": "Contact is completed",
17224
- "record.metadata.quality.description.failed": "Description is not completed",
17225
- "record.metadata.quality.description.success": "Description is completed",
17248
+ "record.metadata.quality.contact.failed": "Contact is not specified",
17249
+ "record.metadata.quality.contact.success": "Contact is specified",
17250
+ "record.metadata.quality.description.failed": "Description is not specified",
17251
+ "record.metadata.quality.description.success": "Description is specified",
17226
17252
  "record.metadata.quality.details": "Details",
17227
- "record.metadata.quality.keywords.failed": "Keywords are not completed",
17228
- "record.metadata.quality.keywords.success": "Keywords are completed",
17229
- "record.metadata.quality.legalConstraints.failed": "Legal constraints are not completed",
17230
- "record.metadata.quality.legalConstraints.success": "Legal constraints are completed",
17231
- "record.metadata.quality.organisation.failed": "Organisation is not completed",
17232
- "record.metadata.quality.organisation.success": "Organisation is completed",
17233
- "record.metadata.quality.title.failed": "Title is not completed",
17234
- "record.metadata.quality.title.success": "Title is completed",
17235
- "record.metadata.quality.topic.failed": "Topic is not completed",
17236
- "record.metadata.quality.topic.success": "Topic is completed",
17237
- "record.metadata.quality.updateFrequency.failed": "Update frequency is not completed",
17238
- "record.metadata.quality.updateFrequency.success": "Update frequency is completed",
17253
+ "record.metadata.quality.keywords.failed": "Keywords are not specified",
17254
+ "record.metadata.quality.keywords.success": "Keywords are specified",
17255
+ "record.metadata.quality.legalConstraints.failed": "Legal constraints are not specified",
17256
+ "record.metadata.quality.legalConstraints.success": "Legal constraints are specified",
17257
+ "record.metadata.quality.organisation.failed": "Organisation is not specified",
17258
+ "record.metadata.quality.organisation.success": "Organisation is specified",
17259
+ "record.metadata.quality.title.failed": "Title is not specified",
17260
+ "record.metadata.quality.title.success": "Title is specified",
17261
+ "record.metadata.quality.topic.failed": "Topic is not specified",
17262
+ "record.metadata.quality.topic.success": "Topic is specified",
17263
+ "record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
17264
+ "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
17239
17265
  "record.metadata.related": "Related records",
17240
- "record.metadata.sheet": "More information available from:",
17266
+ "record.metadata.sheet": "Original metadata",
17267
+ "record.metadata.themes": "Categories",
17241
17268
  "record.metadata.title": "Title",
17269
+ "record.metadata.type": "Geographical dataset",
17270
+ "record.metadata.uniqueId": "Unique Identifier",
17242
17271
  "record.metadata.updateFrequency": "Data Update Frequency",
17243
17272
  "record.metadata.updateStatus": "Data Update Status",
17244
- "record.metadata.updatedOn": "Last Data Information Update",
17273
+ "record.metadata.updatedOn": "Metadata's last update",
17245
17274
  "record.metadata.usage": "Usage & constraints",
17246
17275
  "record.more.details": "Read more",
17247
17276
  "record.tab.chart": "Chart",
@@ -17302,6 +17331,7 @@ var en = {
17302
17331
  "table.object.count": "objects in this dataset",
17303
17332
  "table.select.data": "Data source",
17304
17333
  "tooltip.html.copy": "Copy HTML",
17334
+ "tooltip.id.copy": "Copy unique identifier",
17305
17335
  "tooltip.url.copy": "Copy URL",
17306
17336
  "tooltip.url.open": "Open URL",
17307
17337
  "ui.readLess": "Read less",
@@ -17434,6 +17464,7 @@ var es = {
17434
17464
  "datahub.news.contact.title": "",
17435
17465
  "datahub.news.feed": "",
17436
17466
  "datahub.news.figures": "",
17467
+ "datahub.record.addToFavorites": "",
17437
17468
  "datahub.search.back": "",
17438
17469
  "datahub.search.filter.all": "",
17439
17470
  "datahub.search.filter.generatedByWfs": "",
@@ -17494,10 +17525,17 @@ var es = {
17494
17525
  "map.add.layer.file": "",
17495
17526
  "map.add.layer.wfs": "",
17496
17527
  "map.add.layer.wms": "",
17528
+ "map.addFromFile.placeholder": "",
17529
+ "map.help.addFromFile": "",
17530
+ "map.layer.add": "",
17531
+ "map.layers.available": "",
17497
17532
  "map.layers.list": "",
17498
17533
  "map.loading.data": "",
17534
+ "map.loading.service": "",
17499
17535
  "map.navigation.message": "",
17500
17536
  "map.select.layer": "",
17537
+ "map.wfs.urlInput.hint": "",
17538
+ "map.wms.urlInput.hint": "",
17501
17539
  "multiselect.filter.placeholder": "",
17502
17540
  "nav.back": "",
17503
17541
  next: next$4,
@@ -17537,9 +17575,11 @@ var es = {
17537
17575
  "record.metadata.formats": "",
17538
17576
  "record.metadata.isOpenData": "",
17539
17577
  "record.metadata.keywords": "",
17578
+ "record.metadata.lastUpdate": "",
17540
17579
  "record.metadata.links": "",
17541
17580
  "record.metadata.noUsage": "",
17542
17581
  "record.metadata.origin": "",
17582
+ "record.metadata.owner": "",
17543
17583
  "record.metadata.preview": "",
17544
17584
  "record.metadata.publications": "",
17545
17585
  "record.metadata.quality": "",
@@ -17562,7 +17602,10 @@ var es = {
17562
17602
  "record.metadata.quality.updateFrequency.success": "",
17563
17603
  "record.metadata.related": "",
17564
17604
  "record.metadata.sheet": "",
17605
+ "record.metadata.themes": "",
17565
17606
  "record.metadata.title": "",
17607
+ "record.metadata.type": "",
17608
+ "record.metadata.uniqueId": "",
17566
17609
  "record.metadata.updateFrequency": "",
17567
17610
  "record.metadata.updateStatus": "",
17568
17611
  "record.metadata.updatedOn": "",
@@ -17626,6 +17669,7 @@ var es = {
17626
17669
  "table.object.count": "",
17627
17670
  "table.select.data": "",
17628
17671
  "tooltip.html.copy": "",
17672
+ "tooltip.id.copy": "",
17629
17673
  "tooltip.url.copy": "",
17630
17674
  "tooltip.url.open": "",
17631
17675
  "ui.readLess": "",
@@ -17758,7 +17802,8 @@ var fr = {
17758
17802
  "datahub.news.contact.title": "Un besoin spécifique ?",
17759
17803
  "datahub.news.feed": "Fil d'activité",
17760
17804
  "datahub.news.figures": "Quelques chiffres",
17761
- "datahub.search.back": "Retour aux résultats",
17805
+ "datahub.record.addToFavorites": "Ajouter aux favoris",
17806
+ "datahub.search.back": "Retour",
17762
17807
  "datahub.search.filter.all": "Tous",
17763
17808
  "datahub.search.filter.generatedByWfs": "généré par une API",
17764
17809
  "datahub.search.filter.others": "Autres",
@@ -17818,10 +17863,17 @@ var fr = {
17818
17863
  "map.add.layer.file": "",
17819
17864
  "map.add.layer.wfs": "",
17820
17865
  "map.add.layer.wms": "",
17866
+ "map.addFromFile.placeholder": "",
17867
+ "map.help.addFromFile": "",
17868
+ "map.layer.add": "",
17869
+ "map.layers.available": "",
17821
17870
  "map.layers.list": "",
17822
17871
  "map.loading.data": "Chargement des données...",
17872
+ "map.loading.service": "",
17823
17873
  "map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
17824
17874
  "map.select.layer": "Source de données",
17875
+ "map.wfs.urlInput.hint": "",
17876
+ "map.wms.urlInput.hint": "",
17825
17877
  "multiselect.filter.placeholder": "Rechercher",
17826
17878
  "nav.back": "Retour",
17827
17879
  next: next$3,
@@ -17856,14 +17908,16 @@ var fr = {
17856
17908
  "record.metadata.catalog": "Catalogue",
17857
17909
  "record.metadata.contact": "Contact",
17858
17910
  "record.metadata.createdOn": "Créé le",
17859
- "record.metadata.details": "Détails",
17911
+ "record.metadata.details": "Informations techniques",
17860
17912
  "record.metadata.download": "Téléchargements",
17861
17913
  "record.metadata.formats": "Formats",
17862
17914
  "record.metadata.isOpenData": "Donnée Ouverte",
17863
17915
  "record.metadata.keywords": "Mots clés",
17916
+ "record.metadata.lastUpdate": "Mis à jour le",
17864
17917
  "record.metadata.links": "Liens",
17865
17918
  "record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
17866
17919
  "record.metadata.origin": "À propos des données",
17920
+ "record.metadata.owner": "Catalogue d'origine",
17867
17921
  "record.metadata.preview": "Aperçu",
17868
17922
  "record.metadata.publications": "données",
17869
17923
  "record.metadata.quality": "Qualité des métadonnées",
@@ -17885,11 +17939,14 @@ var fr = {
17885
17939
  "record.metadata.quality.updateFrequency.failed": "Fréquence de mise à jour n'est pas renseignée",
17886
17940
  "record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
17887
17941
  "record.metadata.related": "Voir aussi",
17888
- "record.metadata.sheet": "Plus d'informations à l'adresse suivante :",
17942
+ "record.metadata.sheet": "Fiche de métadonnées d'origine",
17943
+ "record.metadata.themes": "Catégories",
17889
17944
  "record.metadata.title": "Titre",
17945
+ "record.metadata.type": "Donnée géographique",
17946
+ "record.metadata.uniqueId": "Identificateur de ressource unique",
17890
17947
  "record.metadata.updateFrequency": "Fréquence de mise à jour des données",
17891
17948
  "record.metadata.updateStatus": "Statut de mise à jour des données",
17892
- "record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
17949
+ "record.metadata.updatedOn": "Mise à jour de la fiche de métadonnée",
17893
17950
  "record.metadata.usage": "Conditions d'utilisation",
17894
17951
  "record.more.details": "Détails",
17895
17952
  "record.tab.chart": "Graphique",
@@ -17950,6 +18007,7 @@ var fr = {
17950
18007
  "table.object.count": "enregistrements dans ces données",
17951
18008
  "table.select.data": "Source de données",
17952
18009
  "tooltip.html.copy": "Copier le HTML",
18010
+ "tooltip.id.copy": "Copier l'identifiant unique",
17953
18011
  "tooltip.url.copy": "Copier l'URL",
17954
18012
  "tooltip.url.open": "Ouvrir l'URL",
17955
18013
  "ui.readLess": "Réduire",
@@ -18077,12 +18135,13 @@ var it = {
18077
18135
  "datahub.header.organisations": "Organizzazioni",
18078
18136
  "datahub.header.popularRecords": "Più popolari",
18079
18137
  "datahub.header.title.html": "<div class=\"text-white\">Tutti i dati<br>pubblici della mia organizzazione</div>",
18080
- "datahub.news.contact.contactus": "",
18081
- "datahub.news.contact.html": "",
18082
- "datahub.news.contact.title": "",
18138
+ "datahub.news.contact.contactus": "Contattateci",
18139
+ "datahub.news.contact.html": "<p>Ha bisogno di dati che non sono attualmente disponibili sulla piattaforma? </p><p> I nostri team sono qui per aiutarla.</p>",
18140
+ "datahub.news.contact.title": "Ha un bisogno specifico?",
18083
18141
  "datahub.news.feed": "Feed di attività",
18084
18142
  "datahub.news.figures": "Alcune figure",
18085
- "datahub.search.back": "Torna ai risultati",
18143
+ "datahub.record.addToFavorites": "Aggiungere a miei preferiti",
18144
+ "datahub.search.back": "Ritorna",
18086
18145
  "datahub.search.filter.all": "Tutti",
18087
18146
  "datahub.search.filter.generatedByWfs": "generato da un'API",
18088
18147
  "datahub.search.filter.others": "Altri",
@@ -18109,7 +18168,7 @@ var it = {
18109
18168
  "downloads.format.unknown": "sconosciuto",
18110
18169
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
18111
18170
  dropFile: dropFile$2,
18112
- "externalviewer.dataset.unnamed": "",
18171
+ "externalviewer.dataset.unnamed": "Layer del datahub",
18113
18172
  "facets.block.title.OrgForResource": "Organizzazione",
18114
18173
  "facets.block.title.availableInServices": "Disponibile per",
18115
18174
  "facets.block.title.cl_hierarchyLevel.key": "Tipo di risorsa",
@@ -18142,10 +18201,17 @@ var it = {
18142
18201
  "map.add.layer.file": "Da un file",
18143
18202
  "map.add.layer.wfs": "Da un WFS",
18144
18203
  "map.add.layer.wms": "Da un WMS",
18204
+ "map.addFromFile.placeholder": "",
18205
+ "map.help.addFromFile": "",
18206
+ "map.layer.add": "",
18207
+ "map.layers.available": "",
18145
18208
  "map.layers.list": "Layers",
18146
18209
  "map.loading.data": "Caricamento dati...",
18210
+ "map.loading.service": "",
18147
18211
  "map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
18148
18212
  "map.select.layer": "Sorgente dati",
18213
+ "map.wfs.urlInput.hint": "",
18214
+ "map.wms.urlInput.hint": "",
18149
18215
  "multiselect.filter.placeholder": "Cerca",
18150
18216
  "nav.back": "Indietro",
18151
18217
  next: next$2,
@@ -18180,14 +18246,16 @@ var it = {
18180
18246
  "record.metadata.catalog": "Catalogo",
18181
18247
  "record.metadata.contact": "Contatto",
18182
18248
  "record.metadata.createdOn": "Creato il",
18183
- "record.metadata.details": "Dettagli",
18249
+ "record.metadata.details": "Informazioni tecniche",
18184
18250
  "record.metadata.download": "Download",
18185
18251
  "record.metadata.formats": "Formati",
18186
18252
  "record.metadata.isOpenData": "Data aperta",
18187
18253
  "record.metadata.keywords": "Parole chiave",
18254
+ "record.metadata.lastUpdate": "Ultimo aggiornamento",
18188
18255
  "record.metadata.links": "Collegamenti",
18189
18256
  "record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
18190
18257
  "record.metadata.origin": "Informazioni sui dati",
18258
+ "record.metadata.owner": "Catalogo originale",
18191
18259
  "record.metadata.preview": "Anteprima",
18192
18260
  "record.metadata.publications": "pubblicazioni",
18193
18261
  "record.metadata.quality": "Qualità dei metadati",
@@ -18209,11 +18277,14 @@ var it = {
18209
18277
  "record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
18210
18278
  "record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
18211
18279
  "record.metadata.related": "Vedi anche",
18212
- "record.metadata.sheet": "Per ulteriori informazioni, cliccate qui:",
18280
+ "record.metadata.sheet": "Origine del metadata",
18281
+ "record.metadata.themes": "Categorie",
18213
18282
  "record.metadata.title": "Titolo",
18283
+ "record.metadata.type": "Dati geografici",
18284
+ "record.metadata.uniqueId": "Identificatore unico di risorsa",
18214
18285
  "record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
18215
18286
  "record.metadata.updateStatus": "Stato di aggiornamento dei dati",
18216
- "record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
18287
+ "record.metadata.updatedOn": "Ultimo aggiornamento del metadata",
18217
18288
  "record.metadata.usage": "Condizioni d'uso",
18218
18289
  "record.more.details": "Dettagli",
18219
18290
  "record.tab.chart": "Grafico",
@@ -18222,10 +18293,10 @@ var it = {
18222
18293
  "record.was.created.time": "ha creato questi dati {time}",
18223
18294
  records: records$2,
18224
18295
  "results.layout.selectOne": "Mostra risultati",
18225
- "results.records.hits.displayedOn": "",
18296
+ "results.records.hits.displayedOn": "{displayed, plural, =0{Nessun record} one{1 record visualizzato} other{{displayed} records visualizzati}} {hits, plural, other{su {hits} in totale.}}",
18226
18297
  "results.records.hits.empty.help.html": "Suggerimenti: <ul class='list-disc list-inside'><li>Prova con altre parole chiave</li><li>Cerca con meno parole</li></ul>",
18227
18298
  "results.records.hits.found": "{hits, plural, =0{Nessuna corrispondenza.} one{1 record trovato.} other{{hits} risultati.}}",
18228
- "results.records.hits.selected": "",
18299
+ "results.records.hits.selected": "{amount, plural, one{1 selezionato} other{{ amount } selezionati}}",
18229
18300
  "results.showMore": "Altri risultati...",
18230
18301
  "results.sortBy.dateStamp": "Più recente",
18231
18302
  "results.sortBy.popularity": "Popolarità",
@@ -18274,10 +18345,11 @@ var it = {
18274
18345
  "table.object.count": "record in questi dati",
18275
18346
  "table.select.data": "Sorgente dati",
18276
18347
  "tooltip.html.copy": "Copiare il HTML",
18348
+ "tooltip.id.copy": "Copiare l'identificatore unico",
18277
18349
  "tooltip.url.copy": "Copiare l'URL",
18278
18350
  "tooltip.url.open": "Aprire l'URL",
18279
- "ui.readLess": "",
18280
- "ui.readMore": "",
18351
+ "ui.readLess": "Ridurre",
18352
+ "ui.readMore": "Leggi di più",
18281
18353
  "wfs.featuretype.notfound": "La classe di oggetto non è stata trovata nel servizio",
18282
18354
  "wfs.geojsongml.notsupported": "Il servizio non supporta il formato GeoJSON o GML",
18283
18355
  "wfs.unreachable.cors": "Il servizio non è accessibile a causa di limitazioni CORS",
@@ -18406,6 +18478,7 @@ var nl = {
18406
18478
  "datahub.news.contact.title": "",
18407
18479
  "datahub.news.feed": "",
18408
18480
  "datahub.news.figures": "",
18481
+ "datahub.record.addToFavorites": "",
18409
18482
  "datahub.search.back": "",
18410
18483
  "datahub.search.filter.all": "",
18411
18484
  "datahub.search.filter.generatedByWfs": "",
@@ -18466,10 +18539,17 @@ var nl = {
18466
18539
  "map.add.layer.file": "",
18467
18540
  "map.add.layer.wfs": "",
18468
18541
  "map.add.layer.wms": "",
18542
+ "map.addFromFile.placeholder": "",
18543
+ "map.help.addFromFile": "",
18544
+ "map.layer.add": "",
18545
+ "map.layers.available": "",
18469
18546
  "map.layers.list": "",
18470
18547
  "map.loading.data": "",
18548
+ "map.loading.service": "",
18471
18549
  "map.navigation.message": "",
18472
18550
  "map.select.layer": "",
18551
+ "map.wfs.urlInput.hint": "",
18552
+ "map.wms.urlInput.hint": "",
18473
18553
  "multiselect.filter.placeholder": "",
18474
18554
  "nav.back": "",
18475
18555
  next: next$1,
@@ -18509,9 +18589,11 @@ var nl = {
18509
18589
  "record.metadata.formats": "",
18510
18590
  "record.metadata.isOpenData": "",
18511
18591
  "record.metadata.keywords": "",
18592
+ "record.metadata.lastUpdate": "",
18512
18593
  "record.metadata.links": "",
18513
18594
  "record.metadata.noUsage": "",
18514
18595
  "record.metadata.origin": "",
18596
+ "record.metadata.owner": "",
18515
18597
  "record.metadata.preview": "",
18516
18598
  "record.metadata.publications": "",
18517
18599
  "record.metadata.quality": "",
@@ -18534,7 +18616,10 @@ var nl = {
18534
18616
  "record.metadata.quality.updateFrequency.success": "",
18535
18617
  "record.metadata.related": "",
18536
18618
  "record.metadata.sheet": "",
18619
+ "record.metadata.themes": "",
18537
18620
  "record.metadata.title": "",
18621
+ "record.metadata.type": "",
18622
+ "record.metadata.uniqueId": "",
18538
18623
  "record.metadata.updateFrequency": "",
18539
18624
  "record.metadata.updateStatus": "",
18540
18625
  "record.metadata.updatedOn": "",
@@ -18598,6 +18683,7 @@ var nl = {
18598
18683
  "table.object.count": "",
18599
18684
  "table.select.data": "",
18600
18685
  "tooltip.html.copy": "",
18686
+ "tooltip.id.copy": "",
18601
18687
  "tooltip.url.copy": "",
18602
18688
  "tooltip.url.open": "",
18603
18689
  "ui.readLess": "",
@@ -18730,6 +18816,7 @@ var pt = {
18730
18816
  "datahub.news.contact.title": "",
18731
18817
  "datahub.news.feed": "",
18732
18818
  "datahub.news.figures": "",
18819
+ "datahub.record.addToFavorites": "",
18733
18820
  "datahub.search.back": "",
18734
18821
  "datahub.search.filter.all": "",
18735
18822
  "datahub.search.filter.generatedByWfs": "",
@@ -18790,10 +18877,17 @@ var pt = {
18790
18877
  "map.add.layer.file": "",
18791
18878
  "map.add.layer.wfs": "",
18792
18879
  "map.add.layer.wms": "",
18880
+ "map.addFromFile.placeholder": "",
18881
+ "map.help.addFromFile": "",
18882
+ "map.layer.add": "",
18883
+ "map.layers.available": "",
18793
18884
  "map.layers.list": "",
18794
18885
  "map.loading.data": "",
18886
+ "map.loading.service": "",
18795
18887
  "map.navigation.message": "",
18796
18888
  "map.select.layer": "",
18889
+ "map.wfs.urlInput.hint": "",
18890
+ "map.wms.urlInput.hint": "",
18797
18891
  "multiselect.filter.placeholder": "",
18798
18892
  "nav.back": "",
18799
18893
  next: next,
@@ -18833,9 +18927,11 @@ var pt = {
18833
18927
  "record.metadata.formats": "",
18834
18928
  "record.metadata.isOpenData": "",
18835
18929
  "record.metadata.keywords": "",
18930
+ "record.metadata.lastUpdate": "",
18836
18931
  "record.metadata.links": "",
18837
18932
  "record.metadata.noUsage": "",
18838
18933
  "record.metadata.origin": "",
18934
+ "record.metadata.owner": "",
18839
18935
  "record.metadata.preview": "",
18840
18936
  "record.metadata.publications": "",
18841
18937
  "record.metadata.quality": "",
@@ -18858,7 +18954,10 @@ var pt = {
18858
18954
  "record.metadata.quality.updateFrequency.success": "",
18859
18955
  "record.metadata.related": "",
18860
18956
  "record.metadata.sheet": "",
18957
+ "record.metadata.themes": "",
18861
18958
  "record.metadata.title": "",
18959
+ "record.metadata.type": "",
18960
+ "record.metadata.uniqueId": "",
18862
18961
  "record.metadata.updateFrequency": "",
18863
18962
  "record.metadata.updateStatus": "",
18864
18963
  "record.metadata.updatedOn": "",
@@ -18922,6 +19021,7 @@ var pt = {
18922
19021
  "table.object.count": "",
18923
19022
  "table.select.data": "",
18924
19023
  "tooltip.html.copy": "",
19024
+ "tooltip.id.copy": "",
18925
19025
  "tooltip.url.copy": "",
18926
19026
  "tooltip.url.open": "",
18927
19027
  "ui.readLess": "",
@@ -19259,6 +19359,7 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
19259
19359
  useLimitations: [],
19260
19360
  spatialExtents: [],
19261
19361
  temporalExtents: [],
19362
+ overviews: [],
19262
19363
  };
19263
19364
  const record = Object.keys(_source).reduce((prev, fieldName) => this.fieldMapper.getMappingFn(fieldName)(prev, _source), emptyRecord);
19264
19365
  return lastValueFrom(this.orgsService.addOrganizationToRecordFromSource(_source, record));
@@ -20946,6 +21047,33 @@ function propagateToDocumentOnly(event) {
20946
21047
  }, 0);
20947
21048
  }
20948
21049
 
21050
+ function normalize(input) {
21051
+ return input
21052
+ .toLowerCase()
21053
+ .normalize('NFD') // explode composite chars (e.g. é) into multiple chars
21054
+ .replace(/[\u0300-\u036f]/g, '') // remove accents
21055
+ .replace(/œ/g, 'oe') // remove accents
21056
+ .replace(/[^a-z0-9\s]/g, ' '); // replace special characters with space
21057
+ }
21058
+ function asNormalizedParts(input) {
21059
+ return normalize(input)
21060
+ .split(/\s+/)
21061
+ .map((part) => part.trim())
21062
+ .filter((part) => part.length > 0);
21063
+ }
21064
+ /**
21065
+ * This creates a filter function based on a pattern (typically a user-input
21066
+ * search text).
21067
+ * @param pattern
21068
+ */
21069
+ function createFuzzyFilter(pattern) {
21070
+ const patternParts = asNormalizedParts(pattern);
21071
+ return (input) => {
21072
+ const inputParts = asNormalizedParts(input);
21073
+ return patternParts.every((patternPart) => inputParts.some((part) => part.includes(patternPart)));
21074
+ };
21075
+ }
21076
+
20949
21077
  marker('downloads.wfs.featuretype.not.found');
20950
21078
  const FORMATS = {
20951
21079
  csv: {
@@ -20987,9 +21115,15 @@ const FORMATS = {
20987
21115
  color: '#328556',
20988
21116
  mimeTypes: ['x-gis/x-shapefile'],
20989
21117
  },
21118
+ gml: {
21119
+ extensions: ['gml'],
21120
+ priority: 5,
21121
+ color: '#c92bce',
21122
+ mimeTypes: ['application/gml+xml', 'text/xml; subtype=gml'],
21123
+ },
20990
21124
  kml: {
20991
21125
  extensions: ['kml', 'kmz'],
20992
- priority: 5,
21126
+ priority: 6,
20993
21127
  color: '#348009',
20994
21128
  mimeTypes: [
20995
21129
  'application/vnd.google-earth.kml+xml',
@@ -20998,34 +21132,40 @@ const FORMATS = {
20998
21132
  },
20999
21133
  gpkg: {
21000
21134
  extensions: ['gpkg', 'geopackage'],
21001
- priority: 6,
21135
+ priority: 7,
21002
21136
  color: '#ea79ba',
21003
21137
  mimeTypes: ['application/geopackage+sqlite3'],
21004
21138
  },
21005
21139
  zip: {
21006
21140
  extensions: ['zip', 'tar.gz'],
21007
- priority: 7,
21141
+ priority: 8,
21008
21142
  color: '#f2bb3a',
21009
21143
  mimeTypes: ['application/zip', 'application/x-zip'],
21010
21144
  },
21011
21145
  pdf: {
21012
21146
  extensions: ['pdf'],
21013
- priority: 8,
21147
+ priority: 9,
21014
21148
  color: '#db544a',
21015
21149
  mimeTypes: ['application/pdf'],
21016
21150
  },
21017
21151
  jpg: {
21018
21152
  extensions: ['jpg', 'jpeg', 'jfif', 'pjpeg', 'pjp'],
21019
- priority: 8,
21153
+ priority: 9,
21020
21154
  color: '#673ab7',
21021
21155
  mimeTypes: ['image/jpg'],
21022
21156
  },
21023
21157
  svg: {
21024
21158
  extensions: ['svg'],
21025
- priority: 9,
21159
+ priority: 10,
21026
21160
  color: '#d98294',
21027
21161
  mimeTypes: ['image/svg+xml'],
21028
21162
  },
21163
+ dxf: {
21164
+ extensions: ['dxf'],
21165
+ priority: 11,
21166
+ color: '#de630b',
21167
+ mimeTypes: ['application/x-dxf', 'image/x-dxf'],
21168
+ },
21029
21169
  };
21030
21170
  function getFormatPriority(linkFormat) {
21031
21171
  for (const format in FORMATS) {
@@ -21042,14 +21182,18 @@ function getFormatPriority(linkFormat) {
21042
21182
  function getLinkPriority(link) {
21043
21183
  return getFormatPriority(getFileFormat(link));
21044
21184
  }
21045
- function extensionToFormat(extension) {
21046
- for (const format in FORMATS) {
21047
- for (const alias of FORMATS[format].extensions) {
21048
- if (alias === extension.toLowerCase())
21049
- return format;
21185
+ function getFileFormatFromServiceOutput(serviceOutput) {
21186
+ function formatMatcher(format) {
21187
+ const output = serviceOutput.toLowerCase();
21188
+ return (format.extensions.some((extension) => output.includes(extension)) ||
21189
+ format.mimeTypes.some((mimeType) => output.includes(mimeType)));
21190
+ }
21191
+ for (const formatName in FORMATS) {
21192
+ if (formatMatcher(FORMATS[formatName])) {
21193
+ return formatName;
21050
21194
  }
21051
21195
  }
21052
- return undefined;
21196
+ return null;
21053
21197
  }
21054
21198
  function getFileFormat(link) {
21055
21199
  if ('mimeType' in link) {
@@ -22469,6 +22613,7 @@ const DEFAULT_VIEW = {
22469
22613
  center: [0, 15],
22470
22614
  zoom: 2,
22471
22615
  };
22616
+ const WFS_MAX_FEATURES = 10000;
22472
22617
  class MapContextService {
22473
22618
  constructor(mapUtils, styleService) {
22474
22619
  this.mapUtils = mapUtils;
@@ -22527,6 +22672,7 @@ class MapContextService {
22527
22672
  urlObj.searchParams.set('typename', layerModel.name);
22528
22673
  urlObj.searchParams.set('srsname', 'EPSG:3857');
22529
22674
  urlObj.searchParams.set('bbox', `${extent.join(',')},EPSG:3857`);
22675
+ urlObj.searchParams.set('maxFeatures', WFS_MAX_FEATURES.toString());
22530
22676
  return urlObj.toString();
22531
22677
  },
22532
22678
  strategy: bbox,
@@ -23074,6 +23220,7 @@ class ThumbnailComponent {
23074
23220
  constructor(optionalPlaceholderUrl) {
23075
23221
  this.optionalPlaceholderUrl = optionalPlaceholderUrl;
23076
23222
  this.fit = 'cover';
23223
+ this.placeholderShown = new EventEmitter();
23077
23224
  this.placeholderUrl = this.optionalPlaceholderUrl || DEFAULT_PLACEHOLDER;
23078
23225
  this.images = [];
23079
23226
  }
@@ -23109,6 +23256,7 @@ class ThumbnailComponent {
23109
23256
  setNewSrcImage(image) {
23110
23257
  this.imgFit = image.fit;
23111
23258
  this.imgUrl = image.url;
23259
+ this.placeholderShown.emit(this.isPlaceholder);
23112
23260
  }
23113
23261
  setPlaceholder() {
23114
23262
  this.setNewSrcImage({ url: this.placeholderUrl, fit: 'scale-down' });
@@ -23131,7 +23279,7 @@ class ThumbnailComponent {
23131
23279
  }
23132
23280
  }
23133
23281
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, deps: [{ token: THUMBNAIL_PLACEHOLDER, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
23134
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23282
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, outputs: { placeholderShown: "placeholderShown" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23135
23283
  }
23136
23284
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, decorators: [{
23137
23285
  type: Component,
@@ -23151,11 +23299,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23151
23299
  }], containerElement: [{
23152
23300
  type: ViewChild,
23153
23301
  args: ['containerElement']
23302
+ }], placeholderShown: [{
23303
+ type: Output
23154
23304
  }] } });
23155
23305
 
23156
23306
  class RecordPreviewCardComponent extends RecordPreviewComponent {
23157
23307
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
23158
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewCardComponent, selector: "gn-ui-record-preview-card", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-full border bg-white rounded-sm overflow-hidden transition duration-200 transform hover:scale-105 hover:bg-gray-50 border-gray-300 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [title]=\"record.abstract\"\n [target]=\"linkTarget\"\n >\n <div class=\"flex flex-col min-h-full\">\n <gn-ui-thumbnail\n class=\"lg:h-48 md:h-36 border-b border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow p-4\">\n <h1 class=\"title-font text-lg font-medium mb-3 clamp-2\">\n {{ record.title }}\n </h1>\n <p class=\"leading-relaxed text-sm text-gray-700 clamp-3\">\n {{ record.abstract }}\n </p>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23308
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewCardComponent, selector: "gn-ui-record-preview-card", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-full border bg-white rounded-sm overflow-hidden transition duration-200 transform hover:scale-105 hover:bg-gray-50 border-gray-300 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [title]=\"record.abstract\"\n [target]=\"linkTarget\"\n >\n <div class=\"flex flex-col min-h-full\">\n <gn-ui-thumbnail\n class=\"lg:h-48 md:h-36 border-b border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow p-4\">\n <h1 class=\"title-font text-lg font-medium mb-3 clamp-2\">\n {{ record.title }}\n </h1>\n <p class=\"leading-relaxed text-sm text-gray-700 clamp-3\">\n {{ record.abstract }}\n </p>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23159
23309
  }
23160
23310
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewCardComponent, decorators: [{
23161
23311
  type: Component,
@@ -23164,7 +23314,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23164
23314
 
23165
23315
  class RecordPreviewListComponent extends RecordPreviewComponent {
23166
23316
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
23167
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewListComponent, selector: "gn-ui-record-preview-list", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-40 bg-white transition duration-200 border border-gray-200 rounded-md hover:bg-gray-50 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center shadow-sm\">\n <gn-ui-thumbnail\n class=\"w-40 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow h-full px-6 py-4 flex flex-col overflow-hidden\">\n <div class=\"title-font text-lg font-medium mb-2\">\n <h1 class=\"truncate\">{{ record.title }}</h1>\n </div>\n <p class=\"leading-relaxed clamp-3 text-sm text-gray-700\">\n {{ record.abstract }}\n </p>\n <div class=\"grow\"></div>\n <div class=\"flex flex-row items-center\">\n <div\n class=\"text-gray-500 text-xs truncate capitalize border-r mr-4 pr-4\"\n *ngIf=\"record.kind === 'dataset'\"\n >\n <span translate>{{ record.updateFrequency }}</span>\n </div>\n <div\n class=\"text-gray-500 text-xs border-gray-300 truncate viewable-downloadable\"\n *ngIf=\"isViewable || isDownloadable\"\n >\n <span *ngIf=\"isViewable\" translate>record.action.view</span>\n <span *ngIf=\"isViewable && isDownloadable\">,&nbsp;</span>\n <span *ngIf=\"isDownloadable\" translate>record.action.download</span>\n </div>\n </div>\n </div>\n </div>\n </a>\n</div>\n", styles: [".viewable-downloadable :first-child{text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23317
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewListComponent, selector: "gn-ui-record-preview-list", usesInheritance: true, ngImport: i0, template: "<div\n class=\"h-40 bg-white transition duration-200 border border-gray-200 rounded-md hover:bg-gray-50 hover:border-primary hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center shadow-sm\">\n <gn-ui-thumbnail\n class=\"w-40 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow h-full px-6 py-4 flex flex-col overflow-hidden\">\n <div class=\"title-font text-lg font-medium mb-2\">\n <h1 class=\"truncate\">{{ record.title }}</h1>\n </div>\n <p class=\"leading-relaxed clamp-3 text-sm text-gray-700\">\n {{ record.abstract }}\n </p>\n <div class=\"grow\"></div>\n <div class=\"flex flex-row items-center\">\n <div\n class=\"text-gray-500 text-xs truncate capitalize border-r mr-4 pr-4\"\n *ngIf=\"record.kind === 'dataset'\"\n >\n <span translate>{{ record.updateFrequency }}</span>\n </div>\n <div\n class=\"text-gray-500 text-xs border-gray-300 truncate viewable-downloadable\"\n *ngIf=\"isViewable || isDownloadable\"\n >\n <span *ngIf=\"isViewable\" translate>record.action.view</span>\n <span *ngIf=\"isViewable && isDownloadable\">,&nbsp;</span>\n <span *ngIf=\"isDownloadable\" translate>record.action.download</span>\n </div>\n </div>\n </div>\n </div>\n </a>\n</div>\n", styles: [".viewable-downloadable :first-child{text-transform:capitalize}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23168
23318
  }
23169
23319
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewListComponent, decorators: [{
23170
23320
  type: Component,
@@ -23312,7 +23462,7 @@ class RecordPreviewRowComponent extends RecordPreviewComponent {
23312
23462
  this.elementRef = elementRef;
23313
23463
  }
23314
23464
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
23315
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[record.overviews?.[0]?.url?.toString(), organization?.logoUrl?.toString()]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n {{ abstract }}\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >cloud_download</mat-icon\n >\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >map</mat-icon\n >\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23465
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewRowComponent, selector: "gn-ui-record-preview-row", usesInheritance: true, ngImport: i0, template: "<a\n class=\"group container-lg mx-auto flex cursor-pointer flex-wrap sm:flex-nowrap\"\n [title]=\"record.title\"\n [attr.href]=\"linkHref\"\n>\n <div class=\"shrink-0 w-full sm:w-52\">\n <div\n class=\"overflow-hidden bg-gray-100 rounded-lg w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full object-cover object-left-top\"\n [thumbnailUrl]=\"[record.overviews?.[0]?.url?.toString(), organization?.logoUrl?.toString()]\"\n [fit]=\"['cover', 'contain']\"\n ></gn-ui-thumbnail>\n </div>\n </div>\n <div\n class=\"content grid grow relative sm:pl-6 sm:pr-12\"\n style=\"grid-template-columns: auto 70px\"\n >\n <div class=\"mb-3 mt-5 sm:mt-2\">\n <div\n class=\"font-title text-21 text-title line-clamp-2 col-start-1 col-span-2 sm:line-clamp-1 group-hover:text-primary transition-colors\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </div>\n </div>\n <div\n class=\"abstract mt-4 mb-5 h-36 line-clamp-6 col-start-1 col-span-2 row-start-3 sm:mb-2 sm:h-[4.5rem] sm:line-clamp-3 sm:row-start-2 sm:mt-0\"\n data-cy=\"recordAbstract\"\n >\n {{ abstract }}\n </div>\n <div\n class=\"text-primary opacity-45 uppercase col-start-1 col-span-2 row-start-2 sm:truncate sm:row-start-3 sm:col-span-1\"\n data-cy=\"recordOrg\"\n [class]=\"metadataQualityDisplay ? 'limit-organisation-with-quality' : ''\"\n >\n {{ organization?.name }}\n </div>\n <div\n class=\"icons flex flex-row col-start-1 row-start-4 sm:col-start-2 sm:row-start-3 sm:absolute sm:right-[0.4em]\"\n >\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >cloud_download</mat-icon\n >\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mx-1\"\n >map</mat-icon\n >\n </div>\n <div\n *ngIf=\"metadataQualityDisplay\"\n class=\"col-start-2 row-start-4 sm:row-start-3 absolute right-[4em] sm:right-[5em]\"\n >\n <gn-ui-metadata-quality\n smaller=\"true\"\n [metadata]=\"record\"\n [metadataQualityDisplay]=\"metadataQualityDisplay\"\n ></gn-ui-metadata-quality>\n </div>\n <div\n class=\"text-right col-start-3 row-start-4 sm:absolute sm:col-start-2 sm:row-start-1 sm:top-[-1.125em] sm:right-[0.4em]\"\n data-cy=\"recordFav\"\n >\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n </div>\n</a>\n", styles: [".limit-organisation-with-quality{max-width:calc(100% - 170px)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: MetadataQualityComponent, selector: "gn-ui-metadata-quality", inputs: ["metadata", "smaller", "metadataQualityDisplay"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23316
23466
  }
23317
23467
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewRowComponent, decorators: [{
23318
23468
  type: Component,
@@ -23330,7 +23480,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23330
23480
 
23331
23481
  class RecordPreviewTitleComponent extends RecordPreviewComponent {
23332
23482
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
23333
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewTitleComponent, selector: "gn-ui-record-preview-title", usesInheritance: true, ngImport: i0, template: "<!-- Record list item: List Small -->\n<div\n class=\"h-10 w-full border-b border-gray-200 transition duration-200 rounded-sm hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center\">\n <gn-ui-thumbnail\n class=\"w-10 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow px-3 py-1 flex flex-col overflow-hidden\">\n <h1 class=\"title-font text-sm font-bold truncate md:text-clip\">\n {{ record.title }}\n </h1>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23483
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewTitleComponent, selector: "gn-ui-record-preview-title", usesInheritance: true, ngImport: i0, template: "<!-- Record list item: List Small -->\n<div\n class=\"h-10 w-full border-b border-gray-200 transition duration-200 rounded-sm hover:text-primary\"\n>\n <a\n [href]=\"record.landingPage\"\n [target]=\"linkTarget\"\n [title]=\"record.abstract\"\n >\n <div class=\"h-full flex flex-row items-center\">\n <gn-ui-thumbnail\n class=\"w-10 h-full shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"grow px-3 py-1 flex flex-col overflow-hidden\">\n <h1 class=\"title-font text-sm font-bold truncate md:text-clip\">\n {{ record.title }}\n </h1>\n </div>\n </div>\n </a>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23334
23484
  }
23335
23485
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewTitleComponent, decorators: [{
23336
23486
  type: Component,
@@ -23370,7 +23520,7 @@ class RecordPreviewFeedComponent extends RecordPreviewComponent {
23370
23520
  return this.timeFormat.format(this.record.recordCreated, Date.now());
23371
23521
  }
23372
23522
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, deps: [{ token: i0.ElementRef }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
23373
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewFeedComponent, selector: "gn-ui-record-preview-feed", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mx-[18px] pl-[18px] pb-[18px] border-solid border-l-2 border-gray-100\"\n>\n <a\n class=\"record-container block rounded-lg bg-white border border-white card-shadow\"\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n >\n <div\n class=\"record-header py-4 px-4 border-b border-gray-300 flex flex-row items-center relative transition duration-200\"\n >\n <div\n class=\"absolute w-3 h-3 bg-secondary rounded-full\"\n style=\"right: calc(100% + 14px)\"\n ></div>\n <div\n class=\"record-header-image border border-gray-300 bg-white rounded-full w-16 h-16 object-contain mr-4 overflow-hidden transition duration-200 shrink-0\"\n >\n <mat-icon\n *ngIf=\"!hasLogo\"\n class=\"material-symbols-outlined text-gray-200\"\n style=\"width: 42px; height: 42px; font-size: 42px; margin: 10px\"\n >{{ hasOnlyPerson ? 'face' : 'home_work' }}</mat-icon\n >\n <gn-ui-thumbnail\n *ngIf=\"hasLogo\"\n [thumbnailUrl]=\"record.ownerOrganization?.logoUrl?.toString()\"\n [fit]=\"'contain'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col overflow-hidden items-start\">\n <span\n *ngIf=\"hasOrganization\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ record.ownerOrganization.name }}\n </span>\n <span\n *ngIf=\"hasOnlyPerson\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ contact.firstName }} {{ contact.lastName }}\n </span>\n <p class=\"\">\n <span translate [translateParams]=\"{ time }\"\n >record.was.created.time</span\n >\n </p>\n </div>\n </div>\n <div class=\"pt-5 pb-5 px-10 relative\">\n <div class=\"absolute top-[0.85em] right-[0.85em]\">\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n <h1\n class=\"font-title text-black text-[21px] font-medium mb-3 pr-8\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </h1>\n <p class=\"line-clamp-3\">{{ abstract }}</p>\n <gn-ui-thumbnail\n *ngIf=\"record.overviews?.[0]\"\n class=\"block mt-3 w-full h-[136px] border border-gray-100 rounded-lg overflow-hidden\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n <div class=\"flex flex-row mt-3\" *ngIf=\"isDownloadable || isViewable\">\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >cloud_download\n </mat-icon>\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >map\n </mat-icon>\n </div>\n </div>\n </a>\n</div>\n", styles: [".record-container:hover .record-header,.record-container:hover .record-header-image{border-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23523
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordPreviewFeedComponent, selector: "gn-ui-record-preview-feed", usesInheritance: true, ngImport: i0, template: "<div\n class=\"mx-[18px] pl-[18px] pb-[18px] border-solid border-l-2 border-gray-100\"\n>\n <a\n class=\"record-container block rounded-lg bg-white border border-white card-shadow\"\n [attr.href]=\"linkHref\"\n [target]=\"linkTarget\"\n >\n <div\n class=\"record-header py-4 px-4 border-b border-gray-300 flex flex-row items-center relative transition duration-200\"\n >\n <div\n class=\"absolute w-3 h-3 bg-secondary rounded-full\"\n style=\"right: calc(100% + 14px)\"\n ></div>\n <div\n class=\"record-header-image border border-gray-300 bg-white rounded-full w-16 h-16 object-contain mr-4 overflow-hidden transition duration-200 shrink-0\"\n >\n <mat-icon\n *ngIf=\"!hasLogo\"\n class=\"material-symbols-outlined text-gray-200\"\n style=\"width: 42px; height: 42px; font-size: 42px; margin: 10px\"\n >{{ hasOnlyPerson ? 'face' : 'home_work' }}</mat-icon\n >\n <gn-ui-thumbnail\n *ngIf=\"hasLogo\"\n [thumbnailUrl]=\"record.ownerOrganization?.logoUrl?.toString()\"\n [fit]=\"'contain'\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col overflow-hidden items-start\">\n <span\n *ngIf=\"hasOrganization\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ record.ownerOrganization.name }}\n </span>\n <span\n *ngIf=\"hasOnlyPerson\"\n class=\"font-bold transition duration-200 text-primary truncate max-w-full\"\n >\n {{ contact.firstName }} {{ contact.lastName }}\n </span>\n <p class=\"\">\n <span translate [translateParams]=\"{ time }\"\n >record.was.created.time</span\n >\n </p>\n </div>\n </div>\n <div class=\"pt-5 pb-5 px-10 relative\">\n <div class=\"absolute top-[0.85em] right-[0.85em]\">\n <ng-container\n [ngTemplateOutlet]=\"favoriteTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: record }\"\n ></ng-container>\n </div>\n <h1\n class=\"font-title text-black text-[21px] font-medium mb-3 pr-8\"\n data-cy=\"recordTitle\"\n >\n {{ record.title }}\n </h1>\n <p class=\"line-clamp-3\">{{ abstract }}</p>\n <gn-ui-thumbnail\n *ngIf=\"record.overviews?.[0]\"\n class=\"block mt-3 w-full h-[136px] border border-gray-100 rounded-lg overflow-hidden\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n <div class=\"flex flex-row mt-3\" *ngIf=\"isDownloadable || isViewable\">\n <mat-icon\n *ngIf=\"isDownloadable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >cloud_download\n </mat-icon>\n <mat-icon\n *ngIf=\"isViewable\"\n class=\"material-symbols-outlined text-primary opacity-45 mr-3\"\n >map\n </mat-icon>\n </div>\n </div>\n </a>\n</div>\n", styles: [".record-container:hover .record-header,.record-container:hover .record-header-image{border-color:var(--color-primary-lightest)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23374
23524
  }
23375
23525
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordPreviewFeedComponent, decorators: [{
23376
23526
  type: Component,
@@ -23703,6 +23853,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23703
23853
  args: ['contentDiv']
23704
23854
  }] } });
23705
23855
 
23856
+ class CopyTextButtonComponent {
23857
+ constructor() {
23858
+ this.displayText = true;
23859
+ this.rows = 1;
23860
+ }
23861
+ copyText(event) {
23862
+ navigator.clipboard.writeText(this.text);
23863
+ event.target.blur();
23864
+ }
23865
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23866
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: { text: "text", tooltipText: "tooltipText", displayText: "displayText", rows: "rows" }, ngImport: i0, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23867
+ }
23868
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
23869
+ type: Component,
23870
+ args: [{ selector: 'gn-ui-copy-text-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n" }]
23871
+ }], propDecorators: { text: [{
23872
+ type: Input
23873
+ }], tooltipText: [{
23874
+ type: Input
23875
+ }], displayText: [{
23876
+ type: Input
23877
+ }], rows: [{
23878
+ type: Input
23879
+ }] } });
23880
+
23706
23881
  class ContentGhostComponent {
23707
23882
  constructor() {
23708
23883
  this.ghostClass = '';
@@ -23857,6 +24032,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23857
24032
  args: ['container']
23858
24033
  }] } });
23859
24034
 
24035
+ class MarkdownParserComponent {
24036
+ get parsedMarkdown() {
24037
+ return marked.parse(this.textContent);
24038
+ }
24039
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24040
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24041
+ }
24042
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
24043
+ type: Component,
24044
+ args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
24045
+ }], propDecorators: { textContent: [{
24046
+ type: Input
24047
+ }] } });
24048
+
23860
24049
  class MetadataInfoComponent {
23861
24050
  constructor() {
23862
24051
  this.keyword = new EventEmitter();
@@ -23894,12 +24083,16 @@ class MetadataInfoComponent {
23894
24083
  onKeywordClick(keyword) {
23895
24084
  this.keyword.emit(keyword);
23896
24085
  }
24086
+ copyText() {
24087
+ navigator.clipboard.writeText(this.metadata.uniqueIdentifier);
24088
+ event.target.blur();
24089
+ }
23897
24090
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23898
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<p\n class=\"text-[28px] text-title text-center mb-6 font-title sm:text-left\"\n translate\n>\n record.metadata.about\n</p>\n<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <p\n class=\"whitespace-pre-line break-words sm:mb-4 sm:pr-16\"\n [innerHTML]=\"metadata.abstract\"\n gnUiLinkify\n ></p>\n <ng-container *ngIf=\"metadata.keywords?.length\">\n <p class=\"mb-3 font-medium text-primary text-sm\" translate>\n record.metadata.keywords\n </p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </ng-container>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\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 <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"py-4 px-6 rounded bg-gray-100 text-gray-700 flex flex-wrap gap-2\">\n <gn-ui-badge *ngIf=\"metadata.extras?.isOpenData\">\n <span translate>record.metadata.isOpenData</span>\n </gn-ui-badge>\n <span\n class=\"text-primary font-medium\"\n *ngFor=\"let usage of usages\"\n gnUiLinkify\n >\n {{ usage }}\n </span>\n <span class=\"text-primary font-medium noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"py-5 px-5 rounded bg-gray-100 text-gray-700\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n</gn-ui-expandable-panel>\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;}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24091
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, 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 ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\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 <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"py-4 px-6 rounded bg-gray-100 text-gray-700 flex flex-wrap gap-2\">\n <gn-ui-badge *ngIf=\"metadata.extras?.isOpenData\">\n <span translate>record.metadata.isOpenData</span>\n </gn-ui-badge>\n <span\n class=\"text-primary font-medium\"\n *ngFor=\"let usage of usages\"\n gnUiLinkify\n >\n {{ usage }}\n </span>\n <span class=\"text-primary font-medium noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\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>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\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 <div *ngIf=\"metadata.uniqueIdentifier\">\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 <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\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 mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23899
24092
  }
23900
24093
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
23901
24094
  type: Component,
23902
- args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<p\n class=\"text-[28px] text-title text-center mb-6 font-title sm:text-left\"\n translate\n>\n record.metadata.about\n</p>\n<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <p\n class=\"whitespace-pre-line break-words sm:mb-4 sm:pr-16\"\n [innerHTML]=\"metadata.abstract\"\n gnUiLinkify\n ></p>\n <ng-container *ngIf=\"metadata.keywords?.length\">\n <p class=\"mb-3 font-medium text-primary text-sm\" translate>\n record.metadata.keywords\n </p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </ng-container>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\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 <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"py-4 px-6 rounded bg-gray-100 text-gray-700 flex flex-wrap gap-2\">\n <gn-ui-badge *ngIf=\"metadata.extras?.isOpenData\">\n <span translate>record.metadata.isOpenData</span>\n </gn-ui-badge>\n <span\n class=\"text-primary font-medium\"\n *ngFor=\"let usage of usages\"\n gnUiLinkify\n >\n {{ usage }}\n </span>\n <span class=\"text-primary font-medium noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"py-5 px-5 rounded bg-gray-100 text-gray-700\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n</gn-ui-expandable-panel>\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;}\n"] }]
24095
+ args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\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 <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"py-4 px-6 rounded bg-gray-100 text-gray-700 flex flex-wrap gap-2\">\n <gn-ui-badge *ngIf=\"metadata.extras?.isOpenData\">\n <span translate>record.metadata.isOpenData</span>\n </gn-ui-badge>\n <span\n class=\"text-primary font-medium\"\n *ngFor=\"let usage of usages\"\n gnUiLinkify\n >\n {{ usage }}\n </span>\n <span class=\"text-primary font-medium noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\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>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\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 <div *ngIf=\"metadata.uniqueIdentifier\">\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 <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\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 mat-icon{transform:scale(.8)}\n"] }]
23903
24096
  }], propDecorators: { metadata: [{
23904
24097
  type: Input
23905
24098
  }], incomplete: [{
@@ -23935,13 +24128,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23935
24128
 
23936
24129
  class ButtonComponent {
23937
24130
  constructor() {
23938
- this.type = 'default';
23939
24131
  this.disabled = false;
23940
24132
  this.extraClass = '';
23941
24133
  this.buttonClick = new EventEmitter();
23942
24134
  }
24135
+ // btn-classes are explicited to allow tailwind recognize them and add it in css.
24136
+ set type(value) {
24137
+ switch (value) {
24138
+ case 'primary':
24139
+ this.btnClass = 'btn-primary';
24140
+ break;
24141
+ case 'secondary':
24142
+ this.btnClass = 'btn-secondary';
24143
+ break;
24144
+ case 'outline':
24145
+ this.btnClass = 'btn-outline';
24146
+ break;
24147
+ case 'light':
24148
+ this.btnClass = 'btn-light';
24149
+ break;
24150
+ default:
24151
+ this.btnClass = 'btn-default';
24152
+ break;
24153
+ }
24154
+ }
23943
24155
  get classList() {
23944
- return `btn-${this.type} ${this.extraClass}`;
24156
+ return `${this.btnClass} ${this.extraClass}`;
23945
24157
  }
23946
24158
  handleClick(event) {
23947
24159
  this.buttonClick.emit();
@@ -23949,11 +24161,11 @@ class ButtonComponent {
23949
24161
  propagateToDocumentOnly(event);
23950
24162
  }
23951
24163
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23952
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host /deep/ mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24164
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23953
24165
  }
23954
24166
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
23955
24167
  type: Component,
23956
- args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host /deep/ mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
24168
+ args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
23957
24169
  }], propDecorators: { type: [{
23958
24170
  type: Input
23959
24171
  }], disabled: [{
@@ -24028,40 +24240,15 @@ class DownloadsListComponent {
24028
24240
  return link.type === 'service' && link.accessServiceProtocol === 'wfs';
24029
24241
  }
24030
24242
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
24031
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadsListComponent, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\">\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: ["link", "color", "format", "isFromWfs"], outputs: ["exportUrl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24243
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DownloadsListComponent, selector: "gn-ui-downloads-list", inputs: { links: "links" }, ngImport: i0, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div\n class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: DownloadItemComponent, selector: "gn-ui-download-item", inputs: ["link", "color", "format", "isFromWfs"], outputs: ["exportUrl"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24032
24244
  }
24033
24245
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DownloadsListComponent, decorators: [{
24034
24246
  type: Component,
24035
- args: [{ selector: 'gn-ui-downloads-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\">\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n" }]
24247
+ args: [{ selector: 'gn-ui-downloads-list', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"flex flex-wrap justify-between mt-8 mb-6 sm:mt-12 sm:mb-2\"\n *ngIf=\"links && links.length > 0\"\n>\n <p\n class=\"font-title text-[28px] text-title font-medium mr-4 pb-4 text-center sm:text-left\"\n translate\n >\n record.metadata.download\n </p>\n <div\n class=\"flex flex-wrap justify-start sm:justify-end sm:pb-4\"\n data-cy=\"download-format-filters\"\n >\n <gn-ui-button\n class=\"m-1 format-filter\"\n [extraClass]=\"\n '!px-[12px] !py-[8px] !text-[15px]' +\n (isFilterActive(format) ? ' opacity-100' : ' opacity-50')\n \"\n (buttonClick)=\"toggleFilterFormat(format)\"\n [attr.data-format]=\"format\"\n *ngFor=\"let format of visibleFormats\"\n >\n {{ getFilterFormatTitle(format) }}\n </gn-ui-button>\n </div>\n</div>\n<div class=\"mb-2 sm:mb-3\" *ngFor=\"let link of filteredLinks\">\n <gn-ui-download-item\n [link]=\"link\"\n [color]=\"getLinkColor(link)\"\n [format]=\"getLinkFormat(link)\"\n [isFromWfs]=\"isFromWfs(link)\"\n ></gn-ui-download-item>\n</div>\n" }]
24036
24248
  }], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; }, propDecorators: { links: [{
24037
24249
  type: Input
24038
24250
  }] } });
24039
24251
 
24040
- class CopyTextButtonComponent {
24041
- constructor() {
24042
- this.displayText = true;
24043
- this.rows = 1;
24044
- }
24045
- copyText(event) {
24046
- navigator.clipboard.writeText(this.text);
24047
- event.target.blur();
24048
- }
24049
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24050
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: { text: "text", tooltipText: "tooltipText", displayText: "displayText", rows: "rows" }, ngImport: i0, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24051
- }
24052
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
24053
- type: Component,
24054
- args: [{ selector: 'gn-ui-copy-text-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex\">\n <input\n *ngIf=\"displayText && rows <= 1\"\n type=\"text\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 truncate\"\n value=\"{{ text }}\"\n readonly\n />\n <textarea\n *ngIf=\"displayText && rows > 1\"\n [rows]=\"rows\"\n class=\"grow py-2 px-4 bg-gray-200 opacity-50 rounded-l-md border border-gray-300 overflow-y-auto h-max\"\n readonly\n >{{ text }}</textarea\n >\n <button\n type=\"button\"\n (click)=\"copyText($event)\"\n [ngClass]=\"{\n 'py-2 px-4 rounded-r-md bg-gray-400 hover:bg-gray-600 focus:bg-gray-800 text-white':\n displayText\n }\"\n mat-raised-button\n [matTooltip]=\"tooltipText\"\n matTooltipPosition=\"above\"\n >\n <mat-icon\n class=\"material-symbols-outlined pointer-events-none align-middle card-icon\"\n >content_copy</mat-icon\n >\n </button>\n</div>\n" }]
24055
- }], propDecorators: { text: [{
24056
- type: Input
24057
- }], tooltipText: [{
24058
- type: Input
24059
- }], displayText: [{
24060
- type: Input
24061
- }], rows: [{
24062
- type: Input
24063
- }] } });
24064
-
24065
24252
  class ApiCardComponent {
24066
24253
  constructor() {
24067
24254
  this.currentlyActive = false;
@@ -24258,11 +24445,11 @@ class CarouselComponent {
24258
24445
  this.emblaApi.scrollTo(stepIndex);
24259
24446
  }
24260
24447
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
24261
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container /deep/ > *{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24448
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24262
24449
  }
24263
24450
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
24264
24451
  type: Component,
24265
- args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container /deep/ > *{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
24452
+ args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
24266
24453
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerClass: [{
24267
24454
  type: Input
24268
24455
  }], stepsContainerClass: [{
@@ -24319,11 +24506,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
24319
24506
 
24320
24507
  class RelatedRecordCardComponent {
24321
24508
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24322
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RelatedRecordCardComponent, selector: "gn-ui-related-record-card", inputs: { record: "record" }, ngImport: i0, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0].url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24509
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RelatedRecordCardComponent, selector: "gn-ui-related-record-card", inputs: { record: "record" }, ngImport: i0, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "directive", type: i1$5.RouterLink, selector: "[routerLink]", inputs: ["target", "queryParams", "fragment", "queryParamsHandling", "state", "relativeTo", "preserveFragment", "skipLocationChange", "replaceUrl", "routerLink"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24323
24510
  }
24324
24511
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RelatedRecordCardComponent, decorators: [{
24325
24512
  type: Component,
24326
- args: [{ selector: 'gn-ui-related-record-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0].url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n" }]
24513
+ args: [{ selector: 'gn-ui-related-record-card', changeDetection: ChangeDetectionStrategy.OnPush, template: "<a\n class=\"w-72 h-96 overflow-hidden rounded-lg bg-white cursor-pointer block hover:-translate-y-2 duration-[180ms]\"\n [routerLink]=\"['/dataset', record.uniqueIdentifier]\"\n target=\"_blank\"\n>\n <div class=\"h-52 bg-gray-100\">\n <gn-ui-thumbnail\n class=\"h-52 w-full object-cover\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col justify-between h-44 px-5 pt-4 pb-6\">\n <h4\n class=\"max-h-24 font-title text-21 text-black text-ellipsis overflow-hidden\"\n >\n {{ record.title }}\n </h4>\n <div>\n <button\n mat-raised-button\n [matTooltip]=\"'tooltip.url.open' | translate\"\n matTooltipPosition=\"above\"\n >\n <mat-icon class=\"material-symbols-outlined align-middle text-secondary\"\n >open_in_new</mat-icon\n >\n </button>\n </div>\n </div>\n</a>\n" }]
24327
24514
  }], propDecorators: { record: [{
24328
24515
  type: Input
24329
24516
  }] } });
@@ -24341,15 +24528,21 @@ class MetadataContactComponent {
24341
24528
  ? this.metadata.contactsForResource
24342
24529
  : this.metadata.contacts) || []);
24343
24530
  }
24531
+ get address() {
24532
+ const addressParts = this.contacts[0].address
24533
+ .split(',')
24534
+ .map((part) => part.trim());
24535
+ return addressParts;
24536
+ }
24344
24537
  onOrganizationClick() {
24345
24538
  this.organizationClick.emit(this.shownOrganization);
24346
24539
  }
24347
24540
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24348
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div *ngIf=\"shownOrganization\" class=\"mb-6 sm:mb-12\">\n <p class=\"text-gray-700 text-xs mb-3 uppercase\" translate>\n record.metadata.contact\n </p>\n <div class=\"flex mb-1\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n >\n {{ shownOrganization.name }}\n </div>\n </div>\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-gray-700 text-sm hover:underline\"\n target=\"_blank\"\n >{{ contacts[0].email }}</a\n >\n <div *ngIf=\"shownOrganization.website\" class=\"mb-2\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24541
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6 sm:mb-12\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24349
24542
  }
24350
24543
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
24351
24544
  type: Component,
24352
- args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div *ngIf=\"shownOrganization\" class=\"mb-6 sm:mb-12\">\n <p class=\"text-gray-700 text-xs mb-3 uppercase\" translate>\n record.metadata.contact\n </p>\n <div class=\"flex mb-1\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n >\n {{ shownOrganization.name }}\n </div>\n </div>\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-gray-700 text-sm hover:underline\"\n target=\"_blank\"\n >{{ contacts[0].email }}</a\n >\n <div *ngIf=\"shownOrganization.website\" class=\"mb-2\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n</div>\n" }]
24545
+ args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6 sm:mb-12\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
24353
24546
  }], propDecorators: { metadata: [{
24354
24547
  type: Input
24355
24548
  }], organizationClick: [{
@@ -24615,7 +24808,10 @@ class DropdownMultiselectComponent {
24615
24808
  return this.choices.filter((choice) => this.selected.indexOf(choice.value) > -1);
24616
24809
  }
24617
24810
  get filteredChoicesByText() {
24618
- return this.choices.filter((choice) => choice.label.toLowerCase().includes(this.searchInputValue?.toLowerCase()));
24811
+ if (!this.searchInputValue)
24812
+ return this.choices;
24813
+ const filter = createFuzzyFilter(this.searchInputValue);
24814
+ return this.choices.filter((choice) => filter(choice.label));
24619
24815
  }
24620
24816
  get focusedIndex() {
24621
24817
  return this.checkboxes.reduce((prev, curr, curIndex) => curr.nativeElement === document.activeElement ? curIndex : prev, -1);
@@ -25066,11 +25262,11 @@ class StarToggleComponent {
25066
25262
  event.preventDefault();
25067
25263
  }
25068
25264
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StarToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25069
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: { toggled: "toggled", disabled: "disabled" }, outputs: { newValue: "newValue" }, viewQueries: [{ propertyName: "overlay", first: true, predicate: ["starOverlay"], descendants: true }], ngImport: i0, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25265
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: { toggled: "toggled", disabled: "disabled" }, outputs: { newValue: "newValue" }, viewQueries: [{ propertyName: "overlay", first: true, predicate: ["starOverlay"], descendants: true }], ngImport: i0, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40;stroke:var(--color-primary-darker)}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25070
25266
  }
25071
25267
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StarToggleComponent, decorators: [{
25072
25268
  type: Component,
25073
- args: [{ selector: 'gn-ui-star-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"] }]
25269
+ args: [{ selector: 'gn-ui-star-toggle', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"inline-block relative align-middle\" style=\"line-height: 0.7em\">\n <button\n type=\"button\"\n class=\"-m-[8px] p-[8px]\"\n (click)=\"toggle($event)\"\n [ngClass]=\"{\n enabled: toggled,\n 'disabled opacity-45': !toggled,\n 'transition hover:scale-125 will-change-transform': !disabled,\n 'cursor-default': disabled\n }\"\n >\n <mat-icon\n class=\"material-symbols-outlined\"\n [ngClass]=\"{ 'star-filled': toggled }\"\n >star</mat-icon\n >\n </button>\n <svg\n #starOverlay\n class=\"star-toggle-overlay\"\n width=\"40px\"\n height=\"40px\"\n viewBox=\"-15 -15 30 30\"\n >\n <g>\n <path d=\"M 0,13.229167 V 0\" />\n <path d=\"M -12.484186,4.0880377 0,0\" />\n <path d=\"M -7.6784102,-10.70262 0,0\" />\n <path d=\"M 7.8734079,-10.70262 0,0\" />\n <path d=\"M 12.679184,4.0880376 0,0\" />\n </g>\n </svg>\n</div>\n", styles: ["button.enabled{color:var(--star-toggle-enabled-color, var(--color-secondary))}button.disabled{color:var(--star-toggle-disabled-color, var(--color-primary))}mat-icon{width:1em;height:1em;font-size:1.5em;margin-top:-.1em;font-variation-settings:\"opsz\" 40;stroke:var(--color-primary-darker)}.star-filled{font-variation-settings:\"FILL\" 1}.star-toggle-overlay{stroke:var(--color-secondary);stroke-width:3.5px;stroke-linecap:round;position:absolute;top:50%;left:50%;width:2.5em;height:2.5em;transform:translate(-50%,-50%);pointer-events:none;stroke-dasharray:5 20;stroke-dashoffset:-15;animation:overlay-dash .8s cubic-bezier(.16,.66,.44,.96) forwards;animation-play-state:paused}@keyframes overlay-dash{to{stroke-dashoffset:7}}\n"] }]
25074
25270
  }], propDecorators: { toggled: [{
25075
25271
  type: Input
25076
25272
  }], disabled: [{
@@ -25182,11 +25378,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25182
25378
 
25183
25379
  class NavigationButtonComponent {
25184
25380
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25185
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center backdrop-blur p-1 bg-primary-opacity-50 text-white rounded\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle\">{{ icon }}</mat-icon>\n <span class=\"mx-2 hidden group-hover:inline\">{{ label }}</span>\n</button>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25381
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 text-white rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25186
25382
  }
25187
25383
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
25188
25384
  type: Component,
25189
- args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center backdrop-blur p-1 bg-primary-opacity-50 text-white rounded\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle\">{{ icon }}</mat-icon>\n <span class=\"mx-2 hidden group-hover:inline\">{{ label }}</span>\n</button>\n" }]
25385
+ args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 text-white rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n" }]
25190
25386
  }], propDecorators: { label: [{
25191
25387
  type: Input
25192
25388
  }], icon: [{
@@ -25749,6 +25945,25 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25749
25945
  type: Input
25750
25946
  }] } });
25751
25947
 
25948
+ class ImageOverlayPreviewComponent {
25949
+ constructor() {
25950
+ this.isPlaceholderShown = new EventEmitter();
25951
+ }
25952
+ openLightbox(src) {
25953
+ basicLightbox.create(`<img src="${src}"/>`).show();
25954
+ }
25955
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25956
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ImageOverlayPreviewComponent, selector: "gn-ui-image-overlay-preview", inputs: { imageUrl: "imageUrl" }, outputs: { isPlaceholderShown: "isPlaceholderShown" }, ngImport: i0, template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-36 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36 group-hover:shadow-xl group-hover:border-0 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }] }); }
25957
+ }
25958
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ImageOverlayPreviewComponent, decorators: [{
25959
+ type: Component,
25960
+ args: [{ selector: 'gn-ui-image-overlay-preview', template: "<gn-ui-content-ghost\n [showContent]=\"imageUrl !== undefined\"\n ghostClass=\"h-36 mb-3\"\n>\n <div\n *ngIf=\"imageUrl\"\n data-cy=\"record-thumbnail\"\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36 group-hover:shadow-xl group-hover:border-0 mb-3\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"imageUrl\"\n fit=\"cover\"\n (placeholderShown)=\"isPlaceholderShown.emit($event)\"\n ></gn-ui-thumbnail>\n <div class=\"relative\">\n <gn-ui-button\n class=\"absolute bottom-0 right-0 z-10 mr-2 mb-2\"\n [type]=\"'outline'\"\n [extraClass]=\"'!py-2 !px-0'\"\n (buttonClick)=\"openLightbox(imageUrl)\"\n >\n <mat-icon class=\"material-symbols-outlined font-extralight\"\n >zoom_out_map</mat-icon\n >\n </gn-ui-button>\n </div>\n </div>\n</gn-ui-content-ghost>\n" }]
25961
+ }], propDecorators: { imageUrl: [{
25962
+ type: Input
25963
+ }], isPlaceholderShown: [{
25964
+ type: Output
25965
+ }] } });
25966
+
25752
25967
  class UiElementsModule {
25753
25968
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
25754
25969
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, declarations: [MetadataInfoComponent,
@@ -25770,7 +25985,9 @@ class UiElementsModule {
25770
25985
  GnUiLinkifyDirective,
25771
25986
  PaginationButtonsComponent,
25772
25987
  MaxLinesComponent,
25773
- RecordApiFormComponent], imports: [CommonModule,
25988
+ RecordApiFormComponent,
25989
+ MarkdownParserComponent,
25990
+ ImageOverlayPreviewComponent], imports: [CommonModule,
25774
25991
  MatIconModule,
25775
25992
  MatTooltipModule,
25776
25993
  UiWidgetsModule,
@@ -25795,7 +26012,9 @@ class UiElementsModule {
25795
26012
  AvatarComponent,
25796
26013
  UserPreviewComponent,
25797
26014
  PaginationButtonsComponent,
25798
- RecordApiFormComponent] }); }
26015
+ RecordApiFormComponent,
26016
+ MarkdownParserComponent,
26017
+ ImageOverlayPreviewComponent] }); }
25799
26018
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, imports: [CommonModule,
25800
26019
  MatIconModule,
25801
26020
  MatTooltipModule,
@@ -25844,6 +26063,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25844
26063
  PaginationButtonsComponent,
25845
26064
  MaxLinesComponent,
25846
26065
  RecordApiFormComponent,
26066
+ MarkdownParserComponent,
26067
+ ImageOverlayPreviewComponent,
25847
26068
  ],
25848
26069
  exports: [
25849
26070
  MetadataInfoComponent,
@@ -25864,6 +26085,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25864
26085
  UserPreviewComponent,
25865
26086
  PaginationButtonsComponent,
25866
26087
  RecordApiFormComponent,
26088
+ MarkdownParserComponent,
26089
+ ImageOverlayPreviewComponent,
25867
26090
  ],
25868
26091
  }]
25869
26092
  }] });
@@ -27250,6 +27473,7 @@ class FavoriteStarComponent {
27250
27473
  this.changeDetector = changeDetector;
27251
27474
  this.authService = authService;
27252
27475
  this.translateService = translateService;
27476
+ this.displayCount = true;
27253
27477
  this.isFavorite$ = this.favoritesService.myFavoritesUuid$.pipe(map$1((favorites) => favorites.indexOf(this.record.uniqueIdentifier) > -1));
27254
27478
  this.isAnonymous$ = this.platformService.isAnonymous();
27255
27479
  this.loading = false;
@@ -27312,12 +27536,14 @@ class FavoriteStarComponent {
27312
27536
  });
27313
27537
  }
27314
27538
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, deps: [{ token: FavoritesService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: AuthService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
27315
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div>\n <span class=\"align-text-top mr-1.5 favorite-count\" *ngIf=\"hasFavoriteCount\">{{\n favoriteCount\n }}</span>\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: ["toggled", "disabled"], outputs: ["newValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27539
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row content-center\">\n <span\n class=\"align-text-top mr-1.5 mt-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n class=\"mt-1\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count mt-1.5\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: ["toggled", "disabled"], outputs: ["newValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27316
27540
  }
27317
27541
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, decorators: [{
27318
27542
  type: Component,
27319
- args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div>\n <span class=\"align-text-top mr-1.5 favorite-count\" *ngIf=\"hasFavoriteCount\">{{\n favoriteCount\n }}</span>\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n</div>\n" }]
27320
- }], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: { record: [{
27543
+ args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-row content-center\">\n <span\n class=\"align-text-top mr-1.5 mt-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n class=\"mt-1\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count mt-1.5\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n" }]
27544
+ }], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: { displayCount: [{
27545
+ type: Input
27546
+ }], record: [{
27321
27547
  type: Input
27322
27548
  }], starToggleRef: [{
27323
27549
  type: ViewChild,
@@ -27360,7 +27586,7 @@ class ResultsListContainerComponent {
27360
27586
  return this.recordUrlTemplate.replace('${uuid}', metadata.uniqueIdentifier);
27361
27587
  }
27362
27588
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsListContainerComponent, deps: [{ token: SearchFacade }, { token: RESULTS_LAYOUT_CONFIG }, { token: RECORD_URL_TOKEN, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
27363
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsListContainerComponent, selector: "gn-ui-results-list-container", inputs: { metadataQualityDisplay: "metadataQualityDisplay", layout: "layout", showMore: "showMore" }, outputs: { mdSelect: "mdSelect" }, ngImport: i0, template: "<div *ngIf=\"(error$ | async) === null\" class=\"search-results relative\">\n <gn-ui-results-list\n [records]=\"facade.results$ | async\"\n [layoutConfig]=\"layoutConfig$ | async\"\n [metadataQualityDisplay]=\"\n metadataQualityDisplay && (pipelineForQualityScoreActivated | async)\n \"\n [favoriteTemplate]=\"favoriteToggle\"\n [recordUrlGetter]=\"recordUrlGetter\"\n (mdSelect)=\"onMetadataSelection($event)\"\n ></gn-ui-results-list>\n <ng-container\n *ngIf=\"\n (facade.isLoading$ | async) === false &&\n (facade.isEndOfResults$ | async) === false\n \"\n >\n <div class=\"show-more h-[100px] pt-[30px]\" *ngIf=\"showMore === 'button'\">\n <gn-ui-button\n data-cy=\"addMoreBtn\"\n type=\"secondary\"\n (buttonClick)=\"onShowMore()\"\n extraClass=\"m-auto !p-[22px]\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >results.showMore</span\n >\n </gn-ui-button>\n </div>\n <div class=\"show-more h-[100px]\" *ngIf=\"showMore === 'auto'\">\n <gn-ui-viewport-intersector\n (entersViewport)=\"onShowMore()\"\n ></gn-ui-viewport-intersector>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(facade.isLoading$ | async) === true\">\n <div class=\"loading flex justify-center h-[100px] pt-[45px]\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n</div>\n\n<div class=\"p-4 max-w-[600px] m-auto text-[13px]\">\n <gn-ui-search-results-error\n *ngIf=\"(errorCode$ | async) === 0\"\n [type]=\"errorTypes.COULD_NOT_REACH_API\"\n >\n </gn-ui-search-results-error>\n <gn-ui-search-results-error\n *ngIf=\"(error$ | async) !== null && (errorCode$ | async) !== 0\"\n [type]=\"errorTypes.RECEIVED_ERROR\"\n [error]=\"errorMessage$ | async\"\n ></gn-ui-search-results-error>\n</div>\n\n<ng-template #favoriteToggle let-record>\n <gn-ui-favorite-star [record]=\"record\"></gn-ui-favorite-star>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ResultsListComponent, selector: "gn-ui-results-list", inputs: ["records", "layoutConfig", "favoriteTemplate", "recordUrlGetter", "metadataQualityDisplay"], outputs: ["mdSelect"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ViewportIntersectorComponent, selector: "gn-ui-viewport-intersector", outputs: ["isInViewport", "entersViewport", "exitsViewport"] }, { kind: "component", type: SearchResultsErrorComponent, selector: "gn-ui-search-results-error", inputs: ["type", "error", "recordId"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "component", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: ["record"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }] }); }
27589
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsListContainerComponent, selector: "gn-ui-results-list-container", inputs: { metadataQualityDisplay: "metadataQualityDisplay", layout: "layout", showMore: "showMore" }, outputs: { mdSelect: "mdSelect" }, ngImport: i0, template: "<div *ngIf=\"(error$ | async) === null\" class=\"search-results relative\">\n <gn-ui-results-list\n [records]=\"facade.results$ | async\"\n [layoutConfig]=\"layoutConfig$ | async\"\n [metadataQualityDisplay]=\"\n metadataQualityDisplay && (pipelineForQualityScoreActivated | async)\n \"\n [favoriteTemplate]=\"favoriteToggle\"\n [recordUrlGetter]=\"recordUrlGetter\"\n (mdSelect)=\"onMetadataSelection($event)\"\n ></gn-ui-results-list>\n <ng-container\n *ngIf=\"\n (facade.isLoading$ | async) === false &&\n (facade.isEndOfResults$ | async) === false\n \"\n >\n <div class=\"show-more h-[100px] pt-[30px]\" *ngIf=\"showMore === 'button'\">\n <gn-ui-button\n data-cy=\"addMoreBtn\"\n type=\"secondary\"\n (buttonClick)=\"onShowMore()\"\n extraClass=\"m-auto !p-[22px]\"\n >\n <span class=\"uppercase font-medium tracking-widest\" translate\n >results.showMore</span\n >\n </gn-ui-button>\n </div>\n <div class=\"show-more h-[100px]\" *ngIf=\"showMore === 'auto'\">\n <gn-ui-viewport-intersector\n (entersViewport)=\"onShowMore()\"\n ></gn-ui-viewport-intersector>\n </div>\n </ng-container>\n\n <ng-container *ngIf=\"(facade.isLoading$ | async) === true\">\n <div class=\"loading flex justify-center h-[100px] pt-[45px]\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n</div>\n\n<div class=\"p-4 max-w-[600px] m-auto text-[13px]\">\n <gn-ui-search-results-error\n *ngIf=\"(errorCode$ | async) === 0\"\n [type]=\"errorTypes.COULD_NOT_REACH_API\"\n >\n </gn-ui-search-results-error>\n <gn-ui-search-results-error\n *ngIf=\"(error$ | async) !== null && (errorCode$ | async) !== 0\"\n [type]=\"errorTypes.RECEIVED_ERROR\"\n [error]=\"errorMessage$ | async\"\n ></gn-ui-search-results-error>\n</div>\n\n<ng-template #favoriteToggle let-record>\n <gn-ui-favorite-star [record]=\"record\"></gn-ui-favorite-star>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ResultsListComponent, selector: "gn-ui-results-list", inputs: ["records", "layoutConfig", "favoriteTemplate", "recordUrlGetter", "metadataQualityDisplay"], outputs: ["mdSelect"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: ViewportIntersectorComponent, selector: "gn-ui-viewport-intersector", outputs: ["isInViewport", "entersViewport", "exitsViewport"] }, { kind: "component", type: SearchResultsErrorComponent, selector: "gn-ui-search-results-error", inputs: ["type", "error", "recordId"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "component", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: ["displayCount", "record"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }] }); }
27364
27590
  }
27365
27591
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsListContainerComponent, decorators: [{
27366
27592
  type: Component,
@@ -28075,7 +28301,7 @@ class AddLayerRecordPreviewComponent extends RecordPreviewComponent {
28075
28301
  return getLinkLabel(link);
28076
28302
  }
28077
28303
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerRecordPreviewComponent, deps: [{ token: i0.ElementRef }, { token: LinkClassifierService }, { token: MapFacade }, { token: MapUtilsService }], target: i0.ɵɵFactoryTarget.Component }); }
28078
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerRecordPreviewComponent, selector: "gn-ui-add-layer-record-preview", usesInheritance: true, ngImport: i0, template: "<div class=\"w-full flex flex-row rounded-sm\" [title]=\"record.abstract\">\n <gn-ui-thumbnail\n class=\"w-16 h-16 shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"flex flex-col p-2 gap-2 overflow-hidden\">\n <h1 class=\"text-sm font-medium truncate\">\n {{ record.title }}\n </h1>\n <ng-container *ngFor=\"let link of mapLinks\">\n <gn-ui-button\n [type]=\"'outline'\"\n (buttonClick)=\"handleLinkClick(link)\"\n extraClass=\"!py-[8px] !px-[12px]\"\n >\n <div class=\"text-left text-[12px] line-clamp-2\">\n {{ getLinkLabel(link) }}\n </div>\n </gn-ui-button>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28304
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerRecordPreviewComponent, selector: "gn-ui-add-layer-record-preview", usesInheritance: true, ngImport: i0, template: "<div class=\"w-full flex flex-row rounded-sm\" [title]=\"record.abstract\">\n <gn-ui-thumbnail\n class=\"w-16 h-16 shrink-0 border-r border-gray-200 bg-gray-100\"\n [thumbnailUrl]=\"record.overviews?.[0]?.url.toString()\"\n ></gn-ui-thumbnail>\n\n <div class=\"flex flex-col p-2 gap-2 overflow-hidden\">\n <h1 class=\"text-sm font-medium truncate\">\n {{ record.title }}\n </h1>\n <ng-container *ngFor=\"let link of mapLinks\">\n <gn-ui-button\n [type]=\"'outline'\"\n (buttonClick)=\"handleLinkClick(link)\"\n extraClass=\"!py-[8px] !px-[12px]\"\n >\n <div class=\"text-left text-[12px] line-clamp-2\">\n {{ getLinkLabel(link) }}\n </div>\n </gn-ui-button>\n </ng-container>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28079
28305
  }
28080
28306
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerRecordPreviewComponent, decorators: [{
28081
28307
  type: Component,
@@ -28119,6 +28345,208 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28119
28345
  ], template: "<div class=\"h-full text-sm\">\n <gn-ui-fuzzy-search></gn-ui-fuzzy-search>\n <gn-ui-results-list-container\n layout=\"ADDLAYER\"\n ></gn-ui-results-list-container>\n</div>\n", styles: ["::ng-deep .mat-tab-body-wrapper{flex-grow:1}\n"] }]
28120
28346
  }], ctorParameters: function () { return [{ type: SearchFacade }]; } });
28121
28347
 
28348
+ class AddLayerFromWmsComponent {
28349
+ constructor(mapFacade, changeDetectorRef) {
28350
+ this.mapFacade = mapFacade;
28351
+ this.changeDetectorRef = changeDetectorRef;
28352
+ this.wmsUrl = '';
28353
+ this.loading = false;
28354
+ this.layers = [];
28355
+ this.wmsEndpoint = null;
28356
+ this.urlChange = new Subject();
28357
+ this.errorMessage = null;
28358
+ }
28359
+ ngOnInit() {
28360
+ this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers());
28361
+ }
28362
+ async loadLayers() {
28363
+ this.errorMessage = null;
28364
+ try {
28365
+ this.loading = true;
28366
+ if (this.wmsUrl.trim() === '') {
28367
+ this.layers = [];
28368
+ return;
28369
+ }
28370
+ this.wmsEndpoint = await new WmsEndpoint(this.wmsUrl).isReady();
28371
+ this.layers = this.wmsEndpoint.getLayers();
28372
+ }
28373
+ catch (error) {
28374
+ const err = error;
28375
+ this.layers = [];
28376
+ this.errorMessage = 'Error loading layers: ' + err.message;
28377
+ }
28378
+ finally {
28379
+ this.loading = false;
28380
+ this.changeDetectorRef.markForCheck();
28381
+ }
28382
+ }
28383
+ addLayer(layer) {
28384
+ const layerToAdd = {
28385
+ name: layer.name,
28386
+ url: this.wmsUrl.toString(),
28387
+ type: MapContextLayerTypeEnum.WMS,
28388
+ };
28389
+ this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
28390
+ }
28391
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWmsComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
28392
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms", ngImport: i0, template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wmsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wms.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container\n *ngFor=\"let layer of layers\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: layer\n }\"\n ></ng-container>\n</div>\n\n<ng-template #layerTreeItem let-layer=\"layer\">\n <div class=\"flex items-center justify-between layer-tree-item my-2\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n <div *ngIf=\"layer.children?.length > 0\" class=\"ml-4\">\n <ng-container\n *ngFor=\"let child of layer.children\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: child\n }\"\n >\n </ng-container>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$3.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
28393
+ }
28394
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWmsComponent, decorators: [{
28395
+ type: Component,
28396
+ args: [{ selector: 'gn-ui-add-layer-from-wms', template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wmsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wms.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container\n *ngFor=\"let layer of layers\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: layer\n }\"\n ></ng-container>\n</div>\n\n<ng-template #layerTreeItem let-layer=\"layer\">\n <div class=\"flex items-center justify-between layer-tree-item my-2\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n <div *ngIf=\"layer.children?.length > 0\" class=\"ml-4\">\n <ng-container\n *ngFor=\"let child of layer.children\"\n [ngTemplateOutlet]=\"layerTreeItem\"\n [ngTemplateOutletContext]=\"{\n layer: child\n }\"\n >\n </ng-container>\n </div>\n</ng-template>\n" }]
28397
+ }], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
28398
+
28399
+ const INVALID_FILE_FORMAT_ERROR_MESSAGE = 'Invalid file format';
28400
+ class AddLayerFromFileComponent {
28401
+ constructor(mapFacade, changeDetectorRef) {
28402
+ this.mapFacade = mapFacade;
28403
+ this.changeDetectorRef = changeDetectorRef;
28404
+ this.errorMessage = null;
28405
+ this.successMessage = null;
28406
+ this.loading = false;
28407
+ this.acceptedMimeType = ['.geojson'];
28408
+ this.maxFileSize = 5000000;
28409
+ }
28410
+ async handleFileChange(file) {
28411
+ if (!file) {
28412
+ this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
28413
+ return;
28414
+ }
28415
+ if (file.size > this.maxFileSize) {
28416
+ this.displayMessage('File size exceeds the limit of 5MB', 'error');
28417
+ return;
28418
+ }
28419
+ await this.addLayer(file);
28420
+ }
28421
+ async addLayer(file) {
28422
+ this.errorMessage = null;
28423
+ this.loading = true;
28424
+ try {
28425
+ if (!this.isFileFormatValid(file)) {
28426
+ this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
28427
+ return;
28428
+ }
28429
+ const fileExtension = this.getFileExtension(file);
28430
+ switch (fileExtension) {
28431
+ case 'geojson':
28432
+ await this.addGeoJsonLayer(file);
28433
+ break;
28434
+ default:
28435
+ this.displayMessage(INVALID_FILE_FORMAT_ERROR_MESSAGE, 'error');
28436
+ break;
28437
+ }
28438
+ }
28439
+ catch (error) {
28440
+ const err = error;
28441
+ this.displayMessage('Error loading file: ' + err.message, 'error');
28442
+ }
28443
+ finally {
28444
+ this.loading = false;
28445
+ }
28446
+ }
28447
+ addGeoJsonLayer(file) {
28448
+ return new Promise((resolve, reject) => {
28449
+ try {
28450
+ const reader = new FileReader();
28451
+ reader.onload = () => {
28452
+ const result = reader.result;
28453
+ const title = file.name.split('.').slice(0, -1).join('.');
28454
+ const layerToAdd = {
28455
+ type: 'geojson',
28456
+ data: result,
28457
+ };
28458
+ this.mapFacade.addLayer({ ...layerToAdd, title: title });
28459
+ this.displayMessage('File successfully added to map', 'success');
28460
+ resolve();
28461
+ };
28462
+ reader.onerror = reject;
28463
+ reader.readAsText(file);
28464
+ }
28465
+ catch (error) {
28466
+ reject(error);
28467
+ }
28468
+ });
28469
+ }
28470
+ isFileFormatValid(file) {
28471
+ const fileExtension = this.getFileExtension(file);
28472
+ return this.acceptedMimeType.includes(`.${fileExtension}`);
28473
+ }
28474
+ getFileExtension(file) {
28475
+ return file.name.split('.').pop();
28476
+ }
28477
+ displayMessage(message, type) {
28478
+ if (type === 'success') {
28479
+ this.successMessage = message;
28480
+ }
28481
+ else if (type === 'error') {
28482
+ this.errorMessage = message;
28483
+ }
28484
+ setTimeout(() => {
28485
+ this.successMessage = null;
28486
+ this.errorMessage = null;
28487
+ this.changeDetectorRef.detectChanges();
28488
+ }, 5000);
28489
+ }
28490
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromFileComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
28491
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file", ngImport: i0, template: "<div class=\"flex flex-col gap-2 my-2\">\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-grow rounded-md border-2 border-gray-200\">\n <gn-ui-drag-and-drop-file-input\n (fileChange)=\"handleFileChange($event)\"\n [accept]=\"acceptedMimeType.join(',')\"\n [placeholder]=\"'map.addFromFile.placeholder' | translate\"\n class=\"placeholder-grey\"\n ></gn-ui-drag-and-drop-file-input>\n </div>\n </div>\n <p class=\"text-sm text-gray-600\" translate>map.help.addFromFile</p>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"successMessage\" class=\"text-green-500 mt-2\">\n {{ successMessage }}\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DragAndDropFileInputComponent, selector: "gn-ui-drag-and-drop-file-input", inputs: ["placeholder", "accept"], outputs: ["fileChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
28492
+ }
28493
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromFileComponent, decorators: [{
28494
+ type: Component,
28495
+ args: [{ selector: 'gn-ui-add-layer-from-file', template: "<div class=\"flex flex-col gap-2 my-2\">\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-grow rounded-md border-2 border-gray-200\">\n <gn-ui-drag-and-drop-file-input\n (fileChange)=\"handleFileChange($event)\"\n [accept]=\"acceptedMimeType.join(',')\"\n [placeholder]=\"'map.addFromFile.placeholder' | translate\"\n class=\"placeholder-grey\"\n ></gn-ui-drag-and-drop-file-input>\n </div>\n </div>\n <p class=\"text-sm text-gray-600\" translate>map.help.addFromFile</p>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"successMessage\" class=\"text-green-500 mt-2\">\n {{ successMessage }}\n</div>\n" }]
28496
+ }], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
28497
+
28498
+ class AddLayerFromWfsComponent {
28499
+ constructor(mapFacade, changeDetectorRef) {
28500
+ this.mapFacade = mapFacade;
28501
+ this.changeDetectorRef = changeDetectorRef;
28502
+ this.wfsUrl = '';
28503
+ this.loading = false;
28504
+ this.layers = [];
28505
+ this.wfsEndpoint = null;
28506
+ this.urlChange = new Subject();
28507
+ this.errorMessage = null;
28508
+ }
28509
+ ngOnInit() {
28510
+ this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers());
28511
+ }
28512
+ async loadLayers() {
28513
+ this.errorMessage = null;
28514
+ try {
28515
+ this.loading = true;
28516
+ if (this.wfsUrl.trim() === '') {
28517
+ this.layers = [];
28518
+ return;
28519
+ }
28520
+ this.wfsEndpoint = await new WfsEndpoint(this.wfsUrl).isReady();
28521
+ this.layers = this.wfsEndpoint.getFeatureTypes();
28522
+ console.log(this.layers);
28523
+ }
28524
+ catch (error) {
28525
+ const err = error;
28526
+ this.layers = [];
28527
+ this.errorMessage = 'Error loading layers: ' + err.message;
28528
+ }
28529
+ finally {
28530
+ this.loading = false;
28531
+ this.changeDetectorRef.markForCheck();
28532
+ }
28533
+ }
28534
+ addLayer(layer) {
28535
+ const layerToAdd = {
28536
+ name: layer.name,
28537
+ url: this.wfsUrl.toString(),
28538
+ type: MapContextLayerTypeEnum.WFS,
28539
+ };
28540
+ this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
28541
+ }
28542
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, deps: [{ token: MapFacade }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
28543
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs", ngImport: i0, template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wfsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wfs.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container *ngFor=\"let layer of layers\">\n <div class=\"flex items-center justify-between my-2 layer-item-tree\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }] }); }
28544
+ }
28545
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, decorators: [{
28546
+ type: Component,
28547
+ args: [{ selector: 'gn-ui-add-layer-from-wfs', template: "<div class=\"flex items-center mb-5\">\n <gn-ui-text-input\n [(value)]=\"wfsUrl\"\n (valueChange)=\"urlChange.next($event)\"\n [hint]=\"'map.wfs.urlInput.hint' | translate\"\n class=\"w-96\"\n >\n </gn-ui-text-input>\n</div>\n\n<div *ngIf=\"errorMessage\" class=\"text-red-500 mt-2\">\n {{ errorMessage }}\n</div>\n\n<div *ngIf=\"loading\">\n <p class=\"loading-message\" translate>map.loading.service</p>\n</div>\n\n<div *ngIf=\"!loading && layers.length > 0\">\n <h2 class=\"font-bold\" translate>map.layers.available</h2>\n <ng-container *ngFor=\"let layer of layers\">\n <div class=\"flex items-center justify-between my-2 layer-item-tree\">\n <p class=\"max-w-xs overflow-hidden overflow-ellipsis whitespace-nowrap\">\n {{ layer.title }}\n </p>\n <gn-ui-button\n *ngIf=\"layer.name\"\n class=\"layer-add-btn\"\n type=\"primary\"\n (buttonClick)=\"addLayer(layer)\"\n extraClass=\"text-sm !px-2 !py-1\"\n translate\n ><span translate> map.layer.add </span></gn-ui-button\n >\n </div>\n </ng-container>\n</div>\n" }]
28548
+ }], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
28549
+
28122
28550
  class LayersPanelComponent {
28123
28551
  constructor(mapFacade) {
28124
28552
  this.mapFacade = mapFacade;
@@ -28128,11 +28556,11 @@ class LayersPanelComponent {
28128
28556
  this.mapFacade.removeLayer(index);
28129
28557
  }
28130
28558
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
28131
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3 h-full\">Add from WMS</div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3 h-full\">Add from WFS</div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3 h-full\">Add from file</div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$3.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28559
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LayersPanelComponent, selector: "gn-ui-layers-panel", ngImport: i0, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "component", type: ExpandablePanelButtonComponent, selector: "gn-ui-expandable-panel-button", inputs: ["titleTemplate", "collapsed"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i2$3.MatTab, selector: "mat-tab", inputs: ["disabled"], exportAs: ["matTab"] }, { kind: "component", type: i2$3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple", "fitInkBarToContent", "mat-stretch-tabs"], exportAs: ["matTabGroup"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: AddLayerFromCatalogComponent, selector: "gn-ui-add-layer-from-catalog" }, { kind: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { kind: "component", type: AddLayerFromFileComponent, selector: "gn-ui-add-layer-from-file" }, { kind: "component", type: AddLayerFromWfsComponent, selector: "gn-ui-add-layer-from-wfs" }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
28132
28560
  }
28133
28561
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, decorators: [{
28134
28562
  type: Component,
28135
- args: [{ selector: 'gn-ui-layers-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3 h-full\">Add from WMS</div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3 h-full\">Add from WFS</div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3 h-full\">Add from file</div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n" }]
28563
+ args: [{ selector: 'gn-ui-layers-panel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"bg-white rounded shadow shadow-lg relative h-full w-[400px] overflow-hidden\"\n>\n <div class=\"p-3 border-b border-gray-300 flex items-center\">\n <mat-icon class=\"material-symbols-outlined mr-2\">layers</mat-icon>\n <span translate>map.layers.list</span>\n </div>\n <div class=\"flex flex-col px-4 divide-y divide-y-gray-50\">\n <div\n *ngFor=\"let layer of layers$ | async; let index = index\"\n class=\"flex flex-row py-3\"\n >\n <mat-icon class=\"material-symbols-outlined -ml-2 mr-2 shrink-0\"\n >chevron_right</mat-icon\n >\n <span class=\"mr-2 grow\">{{ layer.title }}</span>\n <a\n href\n class=\"underline text-sm text-red-700 hover:text-red-900\"\n (click)=\"deleteLayer(index)\"\n >\n delete\n </a>\n </div>\n </div>\n <gn-ui-expandable-panel-button [titleTemplate]=\"addLayerTitle\">\n <mat-tab-group animationDuration=\"200ms\" class=\"h-full\">\n <mat-tab [label]=\"'map.add.layer.catalog' | translate\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-catalog></gn-ui-add-layer-from-catalog>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wms' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wms></gn-ui-add-layer-from-wms>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.wfs' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-wfs></gn-ui-add-layer-from-wfs>\n </div>\n </mat-tab>\n <mat-tab [label]=\"'map.add.layer.file' | translate\" bodyClass=\"h-full\">\n <div class=\"p-3\">\n <gn-ui-add-layer-from-file></gn-ui-add-layer-from-file>\n </div>\n </mat-tab>\n </mat-tab-group>\n </gn-ui-expandable-panel-button>\n</div>\n\n<ng-template #addLayerTitle>\n <mat-icon class=\"material-symbols-outlined mr-4\">add_circle</mat-icon>\n <span translate>map.add.layer</span>\n</ng-template>\n" }]
28136
28564
  }], ctorParameters: function () { return [{ type: MapFacade }]; } });
28137
28565
 
28138
28566
  class MapEffects {
@@ -28172,7 +28600,10 @@ class FeatureMapModule {
28172
28600
  LayersPanelComponent,
28173
28601
  AddLayerFromCatalogComponent,
28174
28602
  MapContainerComponent,
28175
- AddLayerRecordPreviewComponent], imports: [CommonModule,
28603
+ AddLayerRecordPreviewComponent,
28604
+ AddLayerFromWmsComponent,
28605
+ AddLayerFromFileComponent,
28606
+ AddLayerFromWfsComponent], imports: [CommonModule,
28176
28607
  UiMapModule,
28177
28608
  UiLayoutModule,
28178
28609
  MatIconModule,
@@ -28212,6 +28643,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28212
28643
  AddLayerFromCatalogComponent,
28213
28644
  MapContainerComponent,
28214
28645
  AddLayerRecordPreviewComponent,
28646
+ AddLayerFromWmsComponent,
28647
+ AddLayerFromFileComponent,
28648
+ AddLayerFromWfsComponent,
28215
28649
  ],
28216
28650
  exports: [
28217
28651
  MapContextComponent,
@@ -29600,15 +30034,16 @@ class DataService {
29600
30034
  // Pour DL toutes les données
29601
30035
  return this.getDownloadUrlsFromWfs(wfsLink.url.toString(), wfsLink.name).pipe(map$1((urls) => urls.all), map$1((urls) => Object.keys(urls).map((format) => ({
29602
30036
  ...wfsLink,
30037
+ type: 'download',
29603
30038
  url: new URL(urls[format]),
29604
- mimeType: getMimeTypeForFormat(extensionToFormat(format)) || format,
30039
+ mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
29605
30040
  }))));
29606
30041
  }
29607
30042
  getDownloadLinksFromEsriRest(esriRestLink) {
29608
30043
  return ['json', 'geojson'].map((format) => ({
29609
30044
  ...esriRestLink,
29610
30045
  url: new URL(this.getDownloadUrlFromEsriRest(esriRestLink.url.toString(), format)),
29611
- mimeType: getMimeTypeForFormat(extensionToFormat(format)) || format,
30046
+ mimeType: getMimeTypeForFormat(getFileFormatFromServiceOutput(format)),
29612
30047
  }));
29613
30048
  }
29614
30049
  readAsGeoJson(link) {
@@ -30192,7 +30627,7 @@ class OrganisationPreviewComponent {
30192
30627
  this.clickedOrganisation.emit(this.organisation);
30193
30628
  }
30194
30629
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
30195
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: { organisation: "organisation", organisationUrl: "organisationUrl" }, outputs: { clickedOrganisation: "clickedOrganisation" }, ngImport: i0, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organisation.name\"\n >\n <div\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organisation.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col flex-grow overflow-hidden\">\n <span\n class=\"flex-shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organisation.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 flex-grow flex-shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organisation.description }}\n </p>\n <div class=\"flex-shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organisation.recordCount\n }}</span>\n <span translate>record.metadata.publications</span>\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30630
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: OrganisationPreviewComponent, selector: "gn-ui-organisation-preview", inputs: { organisation: "organisation", organisationUrl: "organisationUrl" }, outputs: { clickedOrganisation: "clickedOrganisation" }, ngImport: i0, template: "<a href (click)=\"clickOrganisation($event)\" [attr.href]=\"organisationUrl\">\n <div\n class=\"group cursor-pointer rounded-lg h-full flex flex-col\"\n [title]=\"organisation.name\"\n >\n <div\n class=\"flex-shrink-0 bg-gray-100 rounded-lg overflow-hidden w-full border border-gray-300 h-36\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"organisation.logoUrl\"\n [fit]=\"'contain'\"\n >\n </gn-ui-thumbnail>\n </div>\n <div class=\"px-3 pb-2 capitalize flex flex-col flex-grow overflow-hidden\">\n <span\n class=\"flex-shrink-0 mb-3 mt-5 font-title text-21 text-title group-hover:text-primary line-clamp-2 sm:mt-2 transition-colors\"\n data-cy=\"organizationName\"\n >\n {{ organisation.name }}</span\n >\n <p\n class=\"abstract mt-4 mb-5 sm:mb-2 sm:mt-0 flex-grow flex-shrink-1 overflow-hidden\"\n data-cy=\"organizationDesc\"\n >\n {{ organisation.description }}\n </p>\n <div class=\"flex-shrink-0 text-primary opacity-50 flex leading-6\">\n <mat-icon class=\"material-symbols-outlined text-primary opacity-50 mr-1\"\n >folder_open\n </mat-icon>\n <span class=\"mx-1\" data-cy=\"organizationRecordsCount\">{{\n organisation.recordCount\n }}</span>\n <span translate>record.metadata.publications</span>\n </div>\n </div>\n </div>\n</a>\n", styles: [".abstract{position:relative}.abstract:after{content:\"\";position:absolute;bottom:0;left:0;right:0;background:linear-gradient(0deg,white,transparent);height:10px}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
30196
30631
  }
30197
30632
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: OrganisationPreviewComponent, decorators: [{
30198
30633
  type: Component,
@@ -30261,7 +30696,7 @@ class LanguageSwitcherComponent {
30261
30696
  ngOnInit() {
30262
30697
  const languages = this.languagePlaceholder || DEFAULT_LANGUAGES;
30263
30698
  this.languageList = languages.map((language) => ({
30264
- label: `language.${language}`,
30699
+ label: `${language}`.toUpperCase(),
30265
30700
  value: language,
30266
30701
  }));
30267
30702
  }
@@ -30276,11 +30711,11 @@ class LanguageSwitcherComponent {
30276
30711
  this.translate.use(value);
30277
30712
  }
30278
30713
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, deps: [{ token: LANGUAGES_LIST, optional: true }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
30279
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }] }); }
30714
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center text-white !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }] }); }
30280
30715
  }
30281
30716
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
30282
30717
  type: Component,
30283
- args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n>\n</gn-ui-dropdown-selector>\n" }]
30718
+ args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center text-white !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n" }]
30284
30719
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
30285
30720
  type: Optional
30286
30721
  }, {
@@ -30422,20 +30857,8 @@ class OrganisationsComponent {
30422
30857
  filterOrganisations(organisations, filterBy) {
30423
30858
  if (!filterBy)
30424
30859
  return organisations;
30425
- const filterRegex = new RegExp(this.normalizeString(filterBy) //ignore accents and case
30426
- .replace(/[^a-z0-9\s]/g, ' ') //ignore special characters (also without spaces like l')
30427
- .replace(/\s(?=.)/g, '.*') //replace whitespaces by "AND" separator
30428
- .replace(/\s/g, ''), //remove potential whitespaces left
30429
- 'i');
30430
- return [...organisations].filter((org) => {
30431
- return this.normalizeString(org.name).match(filterRegex);
30432
- });
30433
- }
30434
- normalizeString(str) {
30435
- return str
30436
- .normalize('NFD')
30437
- .replace(/[\u0300-\u036f]/g, '')
30438
- .toLowerCase();
30860
+ const filter = createFuzzyFilter(filterBy);
30861
+ return organisations.filter((org) => filter(org.name));
30439
30862
  }
30440
30863
  sortOrganisations(organisations, sortBy) {
30441
30864
  let order;
@@ -31663,5 +32086,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
31663
32086
  * Generated bundle index. Do not edit.
31664
32087
  */
31665
32088
 
31666
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AutocompleteComponent, AvatarComponent, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_RESOURCES_VALUES, EditorService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, Gn4MetadataMapper, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapUtilsWMSService, MapViewComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordTableComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslateTestingModule, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, currentPage, defaultMapOptions, dragPanCondition, extensionToFormat, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
32089
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, Gn4MetadataMapper, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapUtilsWMSService, MapViewComponent, MarkdownParserComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordTableComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslateTestingModule, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
31667
32090
  //# sourceMappingURL=geonetwork-ui.mjs.map