geonetwork-ui 2.1.0 → 2.2.0-dev.05d3ea32

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 (135) hide show
  1. package/esm2022/libs/api/repository/src/index.mjs +2 -1
  2. package/esm2022/libs/feature/auth/src/lib/feature-auth.module.mjs +2 -2
  3. package/esm2022/libs/feature/catalog/src/lib/feature-catalog.module.mjs +2 -2
  4. package/esm2022/libs/feature/catalog/src/lib/organisations/organisations.component.mjs +4 -15
  5. package/esm2022/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.mjs +64 -0
  6. package/esm2022/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.mjs +63 -0
  7. package/esm2022/libs/feature/map/src/lib/feature-map.module.mjs +8 -2
  8. package/esm2022/libs/feature/map/src/lib/layers-panel/layers-panel.component.mjs +5 -3
  9. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +3 -1
  10. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +9 -6
  11. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -2
  12. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +1 -1
  13. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +3 -3
  14. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +2 -2
  15. package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +4 -4
  16. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  17. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +17 -0
  18. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +10 -3
  19. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +12 -6
  20. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +8 -3
  21. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +17 -38
  22. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +6 -3
  23. package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +3 -3
  24. package/esm2022/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.mjs +2 -2
  25. package/esm2022/libs/util/app-config/src/lib/app-config.mjs +5 -1
  26. package/esm2022/libs/util/app-config/src/lib/model.mjs +1 -1
  27. package/esm2022/libs/util/i18n/src/index.mjs +2 -1
  28. package/esm2022/libs/util/shared/src/lib/services/theme.service.mjs +8 -1
  29. package/esm2022/libs/util/shared/src/lib/utils/fuzzy-filter.mjs +27 -0
  30. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
  31. package/esm2022/translations/de.json +16 -1
  32. package/esm2022/translations/en.json +21 -6
  33. package/esm2022/translations/es.json +15 -0
  34. package/esm2022/translations/fr.json +23 -8
  35. package/esm2022/translations/it.json +24 -6
  36. package/esm2022/translations/nl.json +15 -0
  37. package/esm2022/translations/pt.json +15 -0
  38. package/fesm2022/geonetwork-ui.mjs +377 -120
  39. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  40. package/libs/api/repository/src/index.d.ts +1 -0
  41. package/libs/api/repository/src/index.d.ts.map +1 -1
  42. package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts +0 -1
  43. package/libs/feature/catalog/src/lib/organisations/organisations.component.d.ts.map +1 -1
  44. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts +2 -2
  45. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts +22 -0
  46. package/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.d.ts.map +1 -0
  47. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts +22 -0
  48. package/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.d.ts.map +1 -0
  49. package/libs/feature/map/src/lib/feature-map.module.d.ts +14 -12
  50. package/libs/feature/map/src/lib/feature-map.module.d.ts.map +1 -1
  51. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
  52. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
  53. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts +3 -2
  54. package/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.d.ts.map +1 -1
  55. package/libs/feature/search/src/lib/state/effects.d.ts +1 -1
  56. package/libs/feature/search/src/lib/state/effects.d.ts.map +1 -1
  57. package/libs/feature/search/src/lib/utils/service/fields.d.ts +1 -1
  58. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  59. package/libs/ui/dataviz/src/lib/chart/chart.component.d.ts +1 -1
  60. package/libs/ui/elements/src/index.d.ts +1 -0
  61. package/libs/ui/elements/src/index.d.ts.map +1 -1
  62. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  63. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +8 -0
  64. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -0
  65. package/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.d.ts +1 -0
  66. package/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.d.ts.map +1 -1
  67. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +1 -0
  68. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  69. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +12 -11
  70. package/libs/ui/elements/src/lib/ui-elements.module.d.ts.map +1 -1
  71. package/libs/ui/inputs/src/lib/button/button.component.d.ts +2 -4
  72. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  73. package/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.d.ts.map +1 -1
  74. package/libs/ui/inputs/src/lib/form-field/form-field.component.d.ts +1 -1
  75. package/libs/util/app-config/src/lib/app-config.d.ts.map +1 -1
  76. package/libs/util/app-config/src/lib/model.d.ts +2 -0
  77. package/libs/util/app-config/src/lib/model.d.ts.map +1 -1
  78. package/libs/util/i18n/src/index.d.ts +1 -0
  79. package/libs/util/i18n/src/index.d.ts.map +1 -1
  80. package/libs/util/shared/src/lib/services/theme.service.d.ts +1 -0
  81. package/libs/util/shared/src/lib/services/theme.service.d.ts.map +1 -1
  82. package/libs/util/shared/src/lib/utils/fuzzy-filter.d.ts +9 -0
  83. package/libs/util/shared/src/lib/utils/fuzzy-filter.d.ts.map +1 -0
  84. package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
  85. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  86. package/package.json +8 -6
  87. package/src/libs/api/repository/src/index.ts +1 -0
  88. package/src/libs/feature/auth/src/lib/feature-auth.module.ts +1 -1
  89. package/src/libs/feature/catalog/src/lib/feature-catalog.module.ts +1 -1
  90. package/src/libs/feature/catalog/src/lib/organisations/organisations.component.ts +3 -17
  91. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.css +0 -0
  92. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.html +37 -0
  93. package/src/libs/feature/map/src/lib/add-layer-from-wfs/add-layer-from-wfs.component.ts +64 -0
  94. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.css +0 -0
  95. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.html +55 -0
  96. package/src/libs/feature/map/src/lib/add-layer-from-wms/add-layer-from-wms.component.ts +63 -0
  97. package/src/libs/feature/map/src/lib/feature-map.module.ts +4 -0
  98. package/src/libs/feature/map/src/lib/layers-panel/layers-panel.component.html +6 -2
  99. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +6 -0
  100. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +12 -4
  101. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.ts +2 -4
  102. package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -1
  103. package/src/libs/feature/search/src/lib/state/effects.ts +1 -1
  104. package/src/libs/feature/search/src/lib/utils/service/fields.ts +1 -1
  105. package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -0
  106. package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.ts +1 -1
  107. package/src/libs/ui/elements/src/index.ts +1 -0
  108. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +264 -0
  109. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.html +1 -0
  110. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +16 -0
  111. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +93 -27
  112. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.ts +7 -0
  113. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.css +4 -0
  114. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +59 -32
  115. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +5 -0
  116. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +3 -0
  117. package/src/libs/ui/inputs/src/lib/button/button.component.ts +22 -42
  118. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.ts +7 -4
  119. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +8 -3
  120. package/src/libs/ui/inputs/src/lib/star-toggle/star-toggle.component.css +1 -0
  121. package/src/libs/util/app-config/src/lib/app-config.ts +4 -0
  122. package/src/libs/util/app-config/src/lib/model.ts +2 -0
  123. package/src/libs/util/i18n/src/index.ts +1 -0
  124. package/src/libs/util/shared/src/lib/services/theme.service.ts +9 -0
  125. package/src/libs/util/shared/src/lib/utils/fuzzy-filter.ts +32 -0
  126. package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
  127. package/tailwind.base.css +31 -1
  128. package/translations/de.json +16 -1
  129. package/translations/en.json +21 -6
  130. package/translations/es.json +15 -0
  131. package/translations/fr.json +23 -8
  132. package/translations/it.json +24 -6
  133. package/translations/nl.json +15 -0
  134. package/translations/pt.json +15 -0
  135. package/translations/sk.json +15 -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';
@@ -16781,8 +16782,12 @@ var de = {
16781
16782
  "datahub.header.organisations": "Organisationen",
16782
16783
  "datahub.header.popularRecords": "Die beliebtesten",
16783
16784
  "datahub.header.title.html": "<div class=\"text-white\">Entdecken Sie offene<br> Daten von meiner Organisation</div>",
16785
+ "datahub.news.contact.contactus": "",
16786
+ "datahub.news.contact.html": "",
16787
+ "datahub.news.contact.title": "",
16784
16788
  "datahub.news.feed": "Nachrichtenfeed",
16785
16789
  "datahub.news.figures": "Indikatoren",
16790
+ "datahub.record.addToFavorites": "",
16786
16791
  "datahub.search.back": "Zurück zu den Ergebnissen",
16787
16792
  "datahub.search.filter.all": "Alle",
16788
16793
  "datahub.search.filter.generatedByWfs": "Generiert durch API",
@@ -16843,10 +16848,15 @@ var de = {
16843
16848
  "map.add.layer.file": "Aus einer Datei",
16844
16849
  "map.add.layer.wfs": "Aus WFS",
16845
16850
  "map.add.layer.wms": "Aus WMS",
16851
+ "map.layer.add": "",
16852
+ "map.layers.available": "",
16846
16853
  "map.layers.list": "Ebenen",
16847
16854
  "map.loading.data": "Kartendaten werden geladen...",
16855
+ "map.loading.service": "",
16848
16856
  "map.navigation.message": "Bitte verwenden Sie STRG + Maus (oder zwei Finger auf einem Mobilgerät), um die Karte zu navigieren",
16849
16857
  "map.select.layer": "Datenquelle",
16858
+ "map.wfs.urlInput.hint": "",
16859
+ "map.wms.urlInput.hint": "",
16850
16860
  "multiselect.filter.placeholder": "Suche",
16851
16861
  "nav.back": "Zurück",
16852
16862
  next: next$6,
@@ -16881,14 +16891,16 @@ var de = {
16881
16891
  "record.metadata.catalog": "Katalog",
16882
16892
  "record.metadata.contact": "Kontakt",
16883
16893
  "record.metadata.createdOn": "Erstellt am",
16884
- "record.metadata.details": "Details",
16894
+ "record.metadata.details": "Technische Informationen",
16885
16895
  "record.metadata.download": "Downloads",
16886
16896
  "record.metadata.formats": "",
16887
16897
  "record.metadata.isOpenData": "Open Data",
16888
16898
  "record.metadata.keywords": "Stichworte",
16899
+ "record.metadata.lastUpdate": "",
16889
16900
  "record.metadata.links": "Links",
16890
16901
  "record.metadata.noUsage": "Für diesen Datensatz sind keine Verwendungsbedingungen angegeben.",
16891
16902
  "record.metadata.origin": "Über die Daten",
16903
+ "record.metadata.owner": "",
16892
16904
  "record.metadata.preview": "Vorschau",
16893
16905
  "record.metadata.publications": "Veröffentlichungen",
16894
16906
  "record.metadata.quality": "",
@@ -16911,7 +16923,10 @@ var de = {
16911
16923
  "record.metadata.quality.updateFrequency.success": "",
16912
16924
  "record.metadata.related": "Ähnliche Datensätze",
16913
16925
  "record.metadata.sheet": "Weitere Informationen erhalten Sie unter :",
16926
+ "record.metadata.themes": "",
16914
16927
  "record.metadata.title": "Titel",
16928
+ "record.metadata.type": "",
16929
+ "record.metadata.uniqueId": "",
16915
16930
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
16916
16931
  "record.metadata.updateStatus": "Aktualisierungsstatus der Daten",
16917
16932
  "record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
@@ -16975,6 +16990,7 @@ var de = {
16975
16990
  "table.object.count": "Objekte in diesem Datensatz",
16976
16991
  "table.select.data": "Datenquelle",
16977
16992
  "tooltip.html.copy": "HTML kopieren",
16993
+ "tooltip.id.copy": "",
16978
16994
  "tooltip.url.copy": "URL kopieren",
16979
16995
  "tooltip.url.open": "URL öffnen",
16980
16996
  "ui.readLess": "Weniger lesen",
@@ -17016,12 +17032,12 @@ var en = {
17016
17032
  "dashboard.records.myRecords": "My Records",
17017
17033
  "dashboard.records.noRecord": "No record for this organization",
17018
17034
  "dashboard.records.noUser": "No users for this organization",
17019
- "dashboard.records.publishedRecords": "published records",
17035
+ "dashboard.records.publishedRecords": "{count, plural, =1{published record} other{published records}}",
17020
17036
  "dashboard.records.search": "Search for \"{searchText}\"",
17021
17037
  "dashboard.records.userDetail": "Name",
17022
17038
  "dashboard.records.userEmail": "Email",
17023
17039
  "dashboard.records.username": "Username",
17024
- "dashboard.records.users": "users",
17040
+ "dashboard.records.users": "{count, plural, =1{user} other{users}}",
17025
17041
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
17026
17042
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
17027
17043
  "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
@@ -17102,9 +17118,13 @@ var en = {
17102
17118
  "datahub.header.organisations": "Organisations",
17103
17119
  "datahub.header.popularRecords": "The most popular",
17104
17120
  "datahub.header.title.html": "<div class=\"text-white\">Discover open<br> data from my Organization</div>",
17121
+ "datahub.news.contact.contactus": "Contact us",
17122
+ "datahub.news.contact.html": "<p>Do you need data that is not currently present on the platform?</p><p>Our teams are here to answer you.</p>",
17123
+ "datahub.news.contact.title": "A specific need?",
17105
17124
  "datahub.news.feed": "News feed",
17106
17125
  "datahub.news.figures": "Indicators",
17107
- "datahub.search.back": "Back to results",
17126
+ "datahub.record.addToFavorites": "Add to favorites",
17127
+ "datahub.search.back": "Back",
17108
17128
  "datahub.search.filter.all": "All",
17109
17129
  "datahub.search.filter.generatedByWfs": "generated by an API",
17110
17130
  "datahub.search.filter.others": "Others",
@@ -17164,10 +17184,15 @@ var en = {
17164
17184
  "map.add.layer.file": "From a file",
17165
17185
  "map.add.layer.wfs": "From WFS",
17166
17186
  "map.add.layer.wms": "From WMS",
17187
+ "map.layer.add": "Add",
17188
+ "map.layers.available": "Available Layers",
17167
17189
  "map.layers.list": "Layers",
17168
17190
  "map.loading.data": "Loading map data...",
17191
+ "map.loading.service": "Loading service...",
17169
17192
  "map.navigation.message": "Please use CTRL + mouse (or two fingers on mobile) to navigate the map",
17170
17193
  "map.select.layer": "Data source",
17194
+ "map.wfs.urlInput.hint": "Enter WFS service URL",
17195
+ "map.wms.urlInput.hint": "Enter WMS service URL",
17171
17196
  "multiselect.filter.placeholder": "Search",
17172
17197
  "nav.back": "Back",
17173
17198
  next: next$5,
@@ -17202,14 +17227,16 @@ var en = {
17202
17227
  "record.metadata.catalog": "Catalog",
17203
17228
  "record.metadata.contact": "Contact",
17204
17229
  "record.metadata.createdOn": "Created on",
17205
- "record.metadata.details": "Details",
17230
+ "record.metadata.details": "Technical information",
17206
17231
  "record.metadata.download": "Downloads",
17207
17232
  "record.metadata.formats": "Formats",
17208
17233
  "record.metadata.isOpenData": "Open Data",
17209
17234
  "record.metadata.keywords": "Keywords",
17235
+ "record.metadata.lastUpdate": "Last updated on",
17210
17236
  "record.metadata.links": "Links",
17211
17237
  "record.metadata.noUsage": "No usage conditions specified for this record.",
17212
17238
  "record.metadata.origin": "About the data",
17239
+ "record.metadata.owner": "Catalog of origin",
17213
17240
  "record.metadata.preview": "Preview",
17214
17241
  "record.metadata.publications": "publications",
17215
17242
  "record.metadata.quality": "Metadata Quality",
@@ -17231,11 +17258,14 @@ var en = {
17231
17258
  "record.metadata.quality.updateFrequency.failed": "Update frequency is not completed",
17232
17259
  "record.metadata.quality.updateFrequency.success": "Update frequency is completed",
17233
17260
  "record.metadata.related": "Related records",
17234
- "record.metadata.sheet": "More information available from:",
17261
+ "record.metadata.sheet": "Original metadata",
17262
+ "record.metadata.themes": "Categories",
17235
17263
  "record.metadata.title": "Title",
17264
+ "record.metadata.type": "Geographical dataset",
17265
+ "record.metadata.uniqueId": "Unique Identifier",
17236
17266
  "record.metadata.updateFrequency": "Data Update Frequency",
17237
17267
  "record.metadata.updateStatus": "Data Update Status",
17238
- "record.metadata.updatedOn": "Last Data Information Update",
17268
+ "record.metadata.updatedOn": "Metadata's last update",
17239
17269
  "record.metadata.usage": "Usage & constraints",
17240
17270
  "record.more.details": "Read more",
17241
17271
  "record.tab.chart": "Chart",
@@ -17296,6 +17326,7 @@ var en = {
17296
17326
  "table.object.count": "objects in this dataset",
17297
17327
  "table.select.data": "Data source",
17298
17328
  "tooltip.html.copy": "Copy HTML",
17329
+ "tooltip.id.copy": "Copy unique identifier",
17299
17330
  "tooltip.url.copy": "Copy URL",
17300
17331
  "tooltip.url.open": "Open URL",
17301
17332
  "ui.readLess": "Read less",
@@ -17423,8 +17454,12 @@ var es = {
17423
17454
  "datahub.header.organisations": "",
17424
17455
  "datahub.header.popularRecords": "",
17425
17456
  "datahub.header.title.html": "",
17457
+ "datahub.news.contact.contactus": "",
17458
+ "datahub.news.contact.html": "",
17459
+ "datahub.news.contact.title": "",
17426
17460
  "datahub.news.feed": "",
17427
17461
  "datahub.news.figures": "",
17462
+ "datahub.record.addToFavorites": "",
17428
17463
  "datahub.search.back": "",
17429
17464
  "datahub.search.filter.all": "",
17430
17465
  "datahub.search.filter.generatedByWfs": "",
@@ -17485,10 +17520,15 @@ var es = {
17485
17520
  "map.add.layer.file": "",
17486
17521
  "map.add.layer.wfs": "",
17487
17522
  "map.add.layer.wms": "",
17523
+ "map.layer.add": "",
17524
+ "map.layers.available": "",
17488
17525
  "map.layers.list": "",
17489
17526
  "map.loading.data": "",
17527
+ "map.loading.service": "",
17490
17528
  "map.navigation.message": "",
17491
17529
  "map.select.layer": "",
17530
+ "map.wfs.urlInput.hint": "",
17531
+ "map.wms.urlInput.hint": "",
17492
17532
  "multiselect.filter.placeholder": "",
17493
17533
  "nav.back": "",
17494
17534
  next: next$4,
@@ -17528,9 +17568,11 @@ var es = {
17528
17568
  "record.metadata.formats": "",
17529
17569
  "record.metadata.isOpenData": "",
17530
17570
  "record.metadata.keywords": "",
17571
+ "record.metadata.lastUpdate": "",
17531
17572
  "record.metadata.links": "",
17532
17573
  "record.metadata.noUsage": "",
17533
17574
  "record.metadata.origin": "",
17575
+ "record.metadata.owner": "",
17534
17576
  "record.metadata.preview": "",
17535
17577
  "record.metadata.publications": "",
17536
17578
  "record.metadata.quality": "",
@@ -17553,7 +17595,10 @@ var es = {
17553
17595
  "record.metadata.quality.updateFrequency.success": "",
17554
17596
  "record.metadata.related": "",
17555
17597
  "record.metadata.sheet": "",
17598
+ "record.metadata.themes": "",
17556
17599
  "record.metadata.title": "",
17600
+ "record.metadata.type": "",
17601
+ "record.metadata.uniqueId": "",
17557
17602
  "record.metadata.updateFrequency": "",
17558
17603
  "record.metadata.updateStatus": "",
17559
17604
  "record.metadata.updatedOn": "",
@@ -17617,6 +17662,7 @@ var es = {
17617
17662
  "table.object.count": "",
17618
17663
  "table.select.data": "",
17619
17664
  "tooltip.html.copy": "",
17665
+ "tooltip.id.copy": "",
17620
17666
  "tooltip.url.copy": "",
17621
17667
  "tooltip.url.open": "",
17622
17668
  "ui.readLess": "",
@@ -17658,12 +17704,12 @@ var fr = {
17658
17704
  "dashboard.records.myRecords": "Mes fiches publiées",
17659
17705
  "dashboard.records.noRecord": "Aucun jeu de données pour cette organisation",
17660
17706
  "dashboard.records.noUser": "Aucun utilisateur pour cette organisation",
17661
- "dashboard.records.publishedRecords": "données publiées",
17707
+ "dashboard.records.publishedRecords": "{count, plural, =1{donnée publiée} other{données publiées}}",
17662
17708
  "dashboard.records.search": "Résultats pour \"{searchText}\"",
17663
17709
  "dashboard.records.userDetail": "Nom",
17664
17710
  "dashboard.records.userEmail": "Email",
17665
17711
  "dashboard.records.username": "Nom d'utilisateur",
17666
- "dashboard.records.users": "utilisateurs",
17712
+ "dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
17667
17713
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
17668
17714
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
17669
17715
  "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
@@ -17744,9 +17790,13 @@ var fr = {
17744
17790
  "datahub.header.organisations": "Organisations",
17745
17791
  "datahub.header.popularRecords": "Les plus appréciées",
17746
17792
  "datahub.header.title.html": "<div class=\"text-white\">Toutes les données<br>publiques de mon organisation</div>",
17793
+ "datahub.news.contact.contactus": "Contactez-nous",
17794
+ "datahub.news.contact.html": "<p>Vous avez besoin de données qui ne sont pas présentes sur la plateforme actuellement ? </p><p> Nos équipes sont la pour vous répondre.</p>",
17795
+ "datahub.news.contact.title": "Un besoin spécifique ?",
17747
17796
  "datahub.news.feed": "Fil d'activité",
17748
17797
  "datahub.news.figures": "Quelques chiffres",
17749
- "datahub.search.back": "Retour aux résultats",
17798
+ "datahub.record.addToFavorites": "Ajouter aux favoris",
17799
+ "datahub.search.back": "Retour",
17750
17800
  "datahub.search.filter.all": "Tous",
17751
17801
  "datahub.search.filter.generatedByWfs": "généré par une API",
17752
17802
  "datahub.search.filter.others": "Autres",
@@ -17806,10 +17856,15 @@ var fr = {
17806
17856
  "map.add.layer.file": "",
17807
17857
  "map.add.layer.wfs": "",
17808
17858
  "map.add.layer.wms": "",
17859
+ "map.layer.add": "",
17860
+ "map.layers.available": "",
17809
17861
  "map.layers.list": "",
17810
17862
  "map.loading.data": "Chargement des données...",
17863
+ "map.loading.service": "",
17811
17864
  "map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
17812
17865
  "map.select.layer": "Source de données",
17866
+ "map.wfs.urlInput.hint": "",
17867
+ "map.wms.urlInput.hint": "",
17813
17868
  "multiselect.filter.placeholder": "Rechercher",
17814
17869
  "nav.back": "Retour",
17815
17870
  next: next$3,
@@ -17844,14 +17899,16 @@ var fr = {
17844
17899
  "record.metadata.catalog": "Catalogue",
17845
17900
  "record.metadata.contact": "Contact",
17846
17901
  "record.metadata.createdOn": "Créé le",
17847
- "record.metadata.details": "Détails",
17902
+ "record.metadata.details": "Informations techniques",
17848
17903
  "record.metadata.download": "Téléchargements",
17849
17904
  "record.metadata.formats": "Formats",
17850
17905
  "record.metadata.isOpenData": "Donnée Ouverte",
17851
17906
  "record.metadata.keywords": "Mots clés",
17907
+ "record.metadata.lastUpdate": "Mis à jour le",
17852
17908
  "record.metadata.links": "Liens",
17853
17909
  "record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
17854
17910
  "record.metadata.origin": "À propos des données",
17911
+ "record.metadata.owner": "Catalogue d'origine",
17855
17912
  "record.metadata.preview": "Aperçu",
17856
17913
  "record.metadata.publications": "données",
17857
17914
  "record.metadata.quality": "Qualité des métadonnées",
@@ -17873,11 +17930,14 @@ var fr = {
17873
17930
  "record.metadata.quality.updateFrequency.failed": "Fréquence de mise à jour n'est pas renseignée",
17874
17931
  "record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
17875
17932
  "record.metadata.related": "Voir aussi",
17876
- "record.metadata.sheet": "Plus d'informations à l'adresse suivante :",
17933
+ "record.metadata.sheet": "Fiche de métadonnées d'origine",
17934
+ "record.metadata.themes": "Catégories",
17877
17935
  "record.metadata.title": "Titre",
17936
+ "record.metadata.type": "Donnée géographique",
17937
+ "record.metadata.uniqueId": "Identificateur de ressource unique",
17878
17938
  "record.metadata.updateFrequency": "Fréquence de mise à jour des données",
17879
17939
  "record.metadata.updateStatus": "Statut de mise à jour des données",
17880
- "record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
17940
+ "record.metadata.updatedOn": "Mise à jour de la fiche de métadonnée",
17881
17941
  "record.metadata.usage": "Conditions d'utilisation",
17882
17942
  "record.more.details": "Détails",
17883
17943
  "record.tab.chart": "Graphique",
@@ -17886,10 +17946,10 @@ var fr = {
17886
17946
  "record.was.created.time": "a créé ce jeu de données {time}",
17887
17947
  records: records$3,
17888
17948
  "results.layout.selectOne": "Affichage des résultats",
17889
- "results.records.hits.displayedOn": "",
17949
+ "results.records.hits.displayedOn": "{displayed, plural, =0{Aucun enregistrement} one{1 enregistrement affiché} other{{displayed} enregistrements affichés}} {hits, plural, other{sur {hits} au total.}}",
17890
17950
  "results.records.hits.empty.help.html": "Suggestions : <ul class='list-disc list-inside'><li>Essayez d'autres mots clés</li><li>Cherchez moins de mots</li></ul>",
17891
17951
  "results.records.hits.found": "{hits, plural, =0{Aucune correspondance.} one{1 enregistrement trouvé.} other{{hits} résultats.}}",
17892
- "results.records.hits.selected": "",
17952
+ "results.records.hits.selected": "{amount, plural, one{1 selectionnée} other{{ amount } sélectionnées}}",
17893
17953
  "results.showMore": "Plus de résultats...",
17894
17954
  "results.sortBy.dateStamp": "Plus récent",
17895
17955
  "results.sortBy.popularity": "Popularité",
@@ -17938,6 +17998,7 @@ var fr = {
17938
17998
  "table.object.count": "enregistrements dans ces données",
17939
17999
  "table.select.data": "Source de données",
17940
18000
  "tooltip.html.copy": "Copier le HTML",
18001
+ "tooltip.id.copy": "Copier l'identifiant unique",
17941
18002
  "tooltip.url.copy": "Copier l'URL",
17942
18003
  "tooltip.url.open": "Ouvrir l'URL",
17943
18004
  "ui.readLess": "Réduire",
@@ -18065,9 +18126,13 @@ var it = {
18065
18126
  "datahub.header.organisations": "Organizzazioni",
18066
18127
  "datahub.header.popularRecords": "Più popolari",
18067
18128
  "datahub.header.title.html": "<div class=\"text-white\">Tutti i dati<br>pubblici della mia organizzazione</div>",
18129
+ "datahub.news.contact.contactus": "Contattateci",
18130
+ "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>",
18131
+ "datahub.news.contact.title": "Ha un bisogno specifico?",
18068
18132
  "datahub.news.feed": "Feed di attività",
18069
18133
  "datahub.news.figures": "Alcune figure",
18070
- "datahub.search.back": "Torna ai risultati",
18134
+ "datahub.record.addToFavorites": "Aggiungere a miei preferiti",
18135
+ "datahub.search.back": "Ritorna",
18071
18136
  "datahub.search.filter.all": "Tutti",
18072
18137
  "datahub.search.filter.generatedByWfs": "generato da un'API",
18073
18138
  "datahub.search.filter.others": "Altri",
@@ -18094,6 +18159,7 @@ var it = {
18094
18159
  "downloads.format.unknown": "sconosciuto",
18095
18160
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
18096
18161
  dropFile: dropFile$2,
18162
+ "externalviewer.dataset.unnamed": "Layer del datahub",
18097
18163
  "facets.block.title.OrgForResource": "Organizzazione",
18098
18164
  "facets.block.title.availableInServices": "Disponibile per",
18099
18165
  "facets.block.title.cl_hierarchyLevel.key": "Tipo di risorsa",
@@ -18126,10 +18192,15 @@ var it = {
18126
18192
  "map.add.layer.file": "Da un file",
18127
18193
  "map.add.layer.wfs": "Da un WFS",
18128
18194
  "map.add.layer.wms": "Da un WMS",
18195
+ "map.layer.add": "",
18196
+ "map.layers.available": "",
18129
18197
  "map.layers.list": "Layers",
18130
18198
  "map.loading.data": "Caricamento dati...",
18199
+ "map.loading.service": "",
18131
18200
  "map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
18132
18201
  "map.select.layer": "Sorgente dati",
18202
+ "map.wfs.urlInput.hint": "",
18203
+ "map.wms.urlInput.hint": "",
18133
18204
  "multiselect.filter.placeholder": "Cerca",
18134
18205
  "nav.back": "Indietro",
18135
18206
  next: next$2,
@@ -18164,14 +18235,16 @@ var it = {
18164
18235
  "record.metadata.catalog": "Catalogo",
18165
18236
  "record.metadata.contact": "Contatto",
18166
18237
  "record.metadata.createdOn": "Creato il",
18167
- "record.metadata.details": "Dettagli",
18238
+ "record.metadata.details": "Informazioni tecniche",
18168
18239
  "record.metadata.download": "Download",
18169
18240
  "record.metadata.formats": "Formati",
18170
18241
  "record.metadata.isOpenData": "Data aperta",
18171
18242
  "record.metadata.keywords": "Parole chiave",
18243
+ "record.metadata.lastUpdate": "Ultimo aggiornamento",
18172
18244
  "record.metadata.links": "Collegamenti",
18173
18245
  "record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
18174
18246
  "record.metadata.origin": "Informazioni sui dati",
18247
+ "record.metadata.owner": "Catalogo originale",
18175
18248
  "record.metadata.preview": "Anteprima",
18176
18249
  "record.metadata.publications": "pubblicazioni",
18177
18250
  "record.metadata.quality": "Qualità dei metadati",
@@ -18193,11 +18266,14 @@ var it = {
18193
18266
  "record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
18194
18267
  "record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
18195
18268
  "record.metadata.related": "Vedi anche",
18196
- "record.metadata.sheet": "Per ulteriori informazioni, cliccate qui:",
18269
+ "record.metadata.sheet": "Origine del metadata",
18270
+ "record.metadata.themes": "Categorie",
18197
18271
  "record.metadata.title": "Titolo",
18272
+ "record.metadata.type": "Dati geografici",
18273
+ "record.metadata.uniqueId": "Identificatore unico di risorsa",
18198
18274
  "record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
18199
18275
  "record.metadata.updateStatus": "Stato di aggiornamento dei dati",
18200
- "record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
18276
+ "record.metadata.updatedOn": "Ultimo aggiornamento del metadata",
18201
18277
  "record.metadata.usage": "Condizioni d'uso",
18202
18278
  "record.more.details": "Dettagli",
18203
18279
  "record.tab.chart": "Grafico",
@@ -18206,10 +18282,10 @@ var it = {
18206
18282
  "record.was.created.time": "ha creato questi dati {time}",
18207
18283
  records: records$2,
18208
18284
  "results.layout.selectOne": "Mostra risultati",
18209
- "results.records.hits.displayedOn": "",
18285
+ "results.records.hits.displayedOn": "{displayed, plural, =0{Nessun record} one{1 record visualizzato} other{{displayed} records visualizzati}} {hits, plural, other{su {hits} in totale.}}",
18210
18286
  "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>",
18211
18287
  "results.records.hits.found": "{hits, plural, =0{Nessuna corrispondenza.} one{1 record trovato.} other{{hits} risultati.}}",
18212
- "results.records.hits.selected": "",
18288
+ "results.records.hits.selected": "{amount, plural, one{1 selezionato} other{{ amount } selezionati}}",
18213
18289
  "results.showMore": "Altri risultati...",
18214
18290
  "results.sortBy.dateStamp": "Più recente",
18215
18291
  "results.sortBy.popularity": "Popolarità",
@@ -18258,8 +18334,11 @@ var it = {
18258
18334
  "table.object.count": "record in questi dati",
18259
18335
  "table.select.data": "Sorgente dati",
18260
18336
  "tooltip.html.copy": "Copiare il HTML",
18337
+ "tooltip.id.copy": "Copiare l'identificatore unico",
18261
18338
  "tooltip.url.copy": "Copiare l'URL",
18262
18339
  "tooltip.url.open": "Aprire l'URL",
18340
+ "ui.readLess": "Ridurre",
18341
+ "ui.readMore": "Leggi di più",
18263
18342
  "wfs.featuretype.notfound": "La classe di oggetto non è stata trovata nel servizio",
18264
18343
  "wfs.geojsongml.notsupported": "Il servizio non supporta il formato GeoJSON o GML",
18265
18344
  "wfs.unreachable.cors": "Il servizio non è accessibile a causa di limitazioni CORS",
@@ -18383,8 +18462,12 @@ var nl = {
18383
18462
  "datahub.header.organisations": "",
18384
18463
  "datahub.header.popularRecords": "",
18385
18464
  "datahub.header.title.html": "",
18465
+ "datahub.news.contact.contactus": "",
18466
+ "datahub.news.contact.html": "",
18467
+ "datahub.news.contact.title": "",
18386
18468
  "datahub.news.feed": "",
18387
18469
  "datahub.news.figures": "",
18470
+ "datahub.record.addToFavorites": "",
18388
18471
  "datahub.search.back": "",
18389
18472
  "datahub.search.filter.all": "",
18390
18473
  "datahub.search.filter.generatedByWfs": "",
@@ -18445,10 +18528,15 @@ var nl = {
18445
18528
  "map.add.layer.file": "",
18446
18529
  "map.add.layer.wfs": "",
18447
18530
  "map.add.layer.wms": "",
18531
+ "map.layer.add": "",
18532
+ "map.layers.available": "",
18448
18533
  "map.layers.list": "",
18449
18534
  "map.loading.data": "",
18535
+ "map.loading.service": "",
18450
18536
  "map.navigation.message": "",
18451
18537
  "map.select.layer": "",
18538
+ "map.wfs.urlInput.hint": "",
18539
+ "map.wms.urlInput.hint": "",
18452
18540
  "multiselect.filter.placeholder": "",
18453
18541
  "nav.back": "",
18454
18542
  next: next$1,
@@ -18488,9 +18576,11 @@ var nl = {
18488
18576
  "record.metadata.formats": "",
18489
18577
  "record.metadata.isOpenData": "",
18490
18578
  "record.metadata.keywords": "",
18579
+ "record.metadata.lastUpdate": "",
18491
18580
  "record.metadata.links": "",
18492
18581
  "record.metadata.noUsage": "",
18493
18582
  "record.metadata.origin": "",
18583
+ "record.metadata.owner": "",
18494
18584
  "record.metadata.preview": "",
18495
18585
  "record.metadata.publications": "",
18496
18586
  "record.metadata.quality": "",
@@ -18513,7 +18603,10 @@ var nl = {
18513
18603
  "record.metadata.quality.updateFrequency.success": "",
18514
18604
  "record.metadata.related": "",
18515
18605
  "record.metadata.sheet": "",
18606
+ "record.metadata.themes": "",
18516
18607
  "record.metadata.title": "",
18608
+ "record.metadata.type": "",
18609
+ "record.metadata.uniqueId": "",
18517
18610
  "record.metadata.updateFrequency": "",
18518
18611
  "record.metadata.updateStatus": "",
18519
18612
  "record.metadata.updatedOn": "",
@@ -18577,6 +18670,7 @@ var nl = {
18577
18670
  "table.object.count": "",
18578
18671
  "table.select.data": "",
18579
18672
  "tooltip.html.copy": "",
18673
+ "tooltip.id.copy": "",
18580
18674
  "tooltip.url.copy": "",
18581
18675
  "tooltip.url.open": "",
18582
18676
  "ui.readLess": "",
@@ -18704,8 +18798,12 @@ var pt = {
18704
18798
  "datahub.header.organisations": "",
18705
18799
  "datahub.header.popularRecords": "",
18706
18800
  "datahub.header.title.html": "",
18801
+ "datahub.news.contact.contactus": "",
18802
+ "datahub.news.contact.html": "",
18803
+ "datahub.news.contact.title": "",
18707
18804
  "datahub.news.feed": "",
18708
18805
  "datahub.news.figures": "",
18806
+ "datahub.record.addToFavorites": "",
18709
18807
  "datahub.search.back": "",
18710
18808
  "datahub.search.filter.all": "",
18711
18809
  "datahub.search.filter.generatedByWfs": "",
@@ -18766,10 +18864,15 @@ var pt = {
18766
18864
  "map.add.layer.file": "",
18767
18865
  "map.add.layer.wfs": "",
18768
18866
  "map.add.layer.wms": "",
18867
+ "map.layer.add": "",
18868
+ "map.layers.available": "",
18769
18869
  "map.layers.list": "",
18770
18870
  "map.loading.data": "",
18871
+ "map.loading.service": "",
18771
18872
  "map.navigation.message": "",
18772
18873
  "map.select.layer": "",
18874
+ "map.wfs.urlInput.hint": "",
18875
+ "map.wms.urlInput.hint": "",
18773
18876
  "multiselect.filter.placeholder": "",
18774
18877
  "nav.back": "",
18775
18878
  next: next,
@@ -18809,9 +18912,11 @@ var pt = {
18809
18912
  "record.metadata.formats": "",
18810
18913
  "record.metadata.isOpenData": "",
18811
18914
  "record.metadata.keywords": "",
18915
+ "record.metadata.lastUpdate": "",
18812
18916
  "record.metadata.links": "",
18813
18917
  "record.metadata.noUsage": "",
18814
18918
  "record.metadata.origin": "",
18919
+ "record.metadata.owner": "",
18815
18920
  "record.metadata.preview": "",
18816
18921
  "record.metadata.publications": "",
18817
18922
  "record.metadata.quality": "",
@@ -18834,7 +18939,10 @@ var pt = {
18834
18939
  "record.metadata.quality.updateFrequency.success": "",
18835
18940
  "record.metadata.related": "",
18836
18941
  "record.metadata.sheet": "",
18942
+ "record.metadata.themes": "",
18837
18943
  "record.metadata.title": "",
18944
+ "record.metadata.type": "",
18945
+ "record.metadata.uniqueId": "",
18838
18946
  "record.metadata.updateFrequency": "",
18839
18947
  "record.metadata.updateStatus": "",
18840
18948
  "record.metadata.updatedOn": "",
@@ -18898,6 +19006,7 @@ var pt = {
18898
19006
  "table.object.count": "",
18899
19007
  "table.select.data": "",
18900
19008
  "tooltip.html.copy": "",
19009
+ "tooltip.id.copy": "",
18901
19010
  "tooltip.url.copy": "",
18902
19011
  "tooltip.url.open": "",
18903
19012
  "ui.readLess": "",
@@ -20736,6 +20845,13 @@ class ThemeService {
20736
20845
  }
20737
20846
  return chroma.hsl(hue % 360, saturation, lightness).css();
20738
20847
  }
20848
+ static setFavicon(faviconPath) {
20849
+ const link = document.querySelector("link[rel*='icon']") ||
20850
+ document.createElement('link');
20851
+ link['rel'] = 'icon';
20852
+ link['href'] = faviconPath;
20853
+ document.getElementsByTagName('head')[0].appendChild(link);
20854
+ }
20739
20855
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThemeService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
20740
20856
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThemeService, providedIn: 'root' }); }
20741
20857
  }
@@ -20915,6 +21031,33 @@ function propagateToDocumentOnly(event) {
20915
21031
  }, 0);
20916
21032
  }
20917
21033
 
21034
+ function normalize(input) {
21035
+ return input
21036
+ .toLowerCase()
21037
+ .normalize('NFD') // explode composite chars (e.g. é) into multiple chars
21038
+ .replace(/[\u0300-\u036f]/g, '') // remove accents
21039
+ .replace(/œ/g, 'oe') // remove accents
21040
+ .replace(/[^a-z0-9\s]/g, ' '); // replace special characters with space
21041
+ }
21042
+ function asNormalizedParts(input) {
21043
+ return normalize(input)
21044
+ .split(/\s+/)
21045
+ .map((part) => part.trim())
21046
+ .filter((part) => part.length > 0);
21047
+ }
21048
+ /**
21049
+ * This creates a filter function based on a pattern (typically a user-input
21050
+ * search text).
21051
+ * @param pattern
21052
+ */
21053
+ function createFuzzyFilter(pattern) {
21054
+ const patternParts = asNormalizedParts(pattern);
21055
+ return (input) => {
21056
+ const inputParts = asNormalizedParts(input);
21057
+ return patternParts.every((patternPart) => inputParts.some((part) => part.includes(patternPart)));
21058
+ };
21059
+ }
21060
+
20918
21061
  marker('downloads.wfs.featuretype.not.found');
20919
21062
  const FORMATS = {
20920
21063
  csv: {
@@ -22043,6 +22186,7 @@ function loadAppConfig() {
22043
22186
  'login_url',
22044
22187
  'web_component_embedder_url',
22045
22188
  'languages',
22189
+ 'contact_email',
22046
22190
  ], warnings, errors);
22047
22191
  if (parsedGlobalSection?.metadata_language) {
22048
22192
  parsedGlobalSection = checkMetadataLanguage(parsedGlobalSection, warnings);
@@ -22060,6 +22204,7 @@ function loadAppConfig() {
22060
22204
  LOGIN_URL: parsedGlobalSection.login_url,
22061
22205
  WEB_COMPONENT_EMBEDDER_URL: parsedGlobalSection.web_component_embedder_url,
22062
22206
  LANGUAGES: parsedGlobalSection.languages,
22207
+ CONTACT_EMAIL: parsedGlobalSection.contact_email,
22063
22208
  };
22064
22209
  const parsedLayersSections = parseMultiConfigSection(parsed, 'map_layer', ['type'], ['name', 'url', 'data'], warnings, errors);
22065
22210
  const parsedMapSection = parseConfigSection(parsed, 'map', [], [
@@ -22093,6 +22238,7 @@ function loadAppConfig() {
22093
22238
  'fonts_stylesheet_url',
22094
22239
  'thumbnail_placeholder',
22095
22240
  'header_background',
22241
+ 'favicon',
22096
22242
  ], warnings, errors);
22097
22243
  themeConfig =
22098
22244
  parsedThemeSection === null
@@ -22108,6 +22254,7 @@ function loadAppConfig() {
22108
22254
  TITLE_FONT: parsedThemeSection.title_font,
22109
22255
  MAIN_FONT: parsedThemeSection.main_font,
22110
22256
  FONTS_STYLESHEET_URL: parsedThemeSection.fonts_stylesheet_url,
22257
+ FAVICON: parsedThemeSection.favicon,
22111
22258
  };
22112
22259
  const parsedSearchSection = parseConfigSection(parsed, 'search', [], [
22113
22260
  'filter_geometry_data',
@@ -22434,6 +22581,7 @@ const DEFAULT_VIEW = {
22434
22581
  center: [0, 15],
22435
22582
  zoom: 2,
22436
22583
  };
22584
+ const WFS_MAX_FEATURES = 10000;
22437
22585
  class MapContextService {
22438
22586
  constructor(mapUtils, styleService) {
22439
22587
  this.mapUtils = mapUtils;
@@ -22492,6 +22640,7 @@ class MapContextService {
22492
22640
  urlObj.searchParams.set('typename', layerModel.name);
22493
22641
  urlObj.searchParams.set('srsname', 'EPSG:3857');
22494
22642
  urlObj.searchParams.set('bbox', `${extent.join(',')},EPSG:3857`);
22643
+ urlObj.searchParams.set('maxFeatures', WFS_MAX_FEATURES.toString());
22495
22644
  return urlObj.toString();
22496
22645
  },
22497
22646
  strategy: bbox,
@@ -23668,6 +23817,31 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23668
23817
  args: ['contentDiv']
23669
23818
  }] } });
23670
23819
 
23820
+ class CopyTextButtonComponent {
23821
+ constructor() {
23822
+ this.displayText = true;
23823
+ this.rows = 1;
23824
+ }
23825
+ copyText(event) {
23826
+ navigator.clipboard.writeText(this.text);
23827
+ event.target.blur();
23828
+ }
23829
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23830
+ 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 }); }
23831
+ }
23832
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
23833
+ type: Component,
23834
+ 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" }]
23835
+ }], propDecorators: { text: [{
23836
+ type: Input
23837
+ }], tooltipText: [{
23838
+ type: Input
23839
+ }], displayText: [{
23840
+ type: Input
23841
+ }], rows: [{
23842
+ type: Input
23843
+ }] } });
23844
+
23671
23845
  class ContentGhostComponent {
23672
23846
  constructor() {
23673
23847
  this.ghostClass = '';
@@ -23822,6 +23996,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23822
23996
  args: ['container']
23823
23997
  }] } });
23824
23998
 
23999
+ class MarkdownParserComponent {
24000
+ get parsedMarkdown() {
24001
+ return marked.parse(this.textContent);
24002
+ }
24003
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24004
+ 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 /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 /deep/ .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host /deep/ .markdown-body h1,:host /deep/ .markdown-body h2,:host /deep/ .markdown-body h3,:host /deep/ .markdown-body h4,:host /deep/ .markdown-body h5,:host /deep/ .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host /deep/ .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host /deep/ .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host /deep/ .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host /deep/ .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host /deep/ .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host /deep/ .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host /deep/ .markdown-body p{margin-top:0;margin-bottom:10px}:host /deep/ .markdown-body p > a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host /deep/ .markdown-body p > a:hover{color:var(--color-primary-darker)!important}:host /deep/ .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host /deep/ .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host /deep/ .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host /deep/ .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host /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 /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 /deep/ .markdown-body hr::before{display:table;content:\"\"}:host /deep/ .markdown-body hr::after{display:table;clear:both;content:\"\"}:host /deep/ .markdown-body ul,:host /deep/ .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host /deep/ .markdown-body ol ol,:host /deep/ .markdown-body ul ol{list-style-type:lower-roman}:host /deep/ .markdown-body ul ul ol,:host /deep/ .markdown-body ul ol ol,:host /deep/ .markdown-body ol ul ol,:host /deep/ .markdown-body ol ol ol{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host /deep/ .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host /deep/ .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host /deep/ .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body div > ol:not([type]){list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host /deep/ .markdown-body td,:host /deep/ .markdown-body th{padding:0}:host /deep/ .markdown-body th{color:var(--color-secondary)}:host /deep/ .markdown-body table th,:host /deep/ .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host /deep/ .markdown-body table td > :last-child{margin-bottom:0}:host /deep/ .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host /deep/ .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host /deep/ .markdown-body table img{background-color:transparent}:host /deep/ .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host /deep/ .markdown-body img[align=\"right\"]{padding-left:20px}:host /deep/ .markdown-body img[align=\"left\"]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24005
+ }
24006
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
24007
+ type: Component,
24008
+ args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host /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 /deep/ .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host /deep/ .markdown-body h1,:host /deep/ .markdown-body h2,:host /deep/ .markdown-body h3,:host /deep/ .markdown-body h4,:host /deep/ .markdown-body h5,:host /deep/ .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host /deep/ .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host /deep/ .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host /deep/ .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host /deep/ .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host /deep/ .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host /deep/ .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host /deep/ .markdown-body p{margin-top:0;margin-bottom:10px}:host /deep/ .markdown-body p > a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host /deep/ .markdown-body p > a:hover{color:var(--color-primary-darker)!important}:host /deep/ .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host /deep/ .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host /deep/ .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host /deep/ .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host /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 /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 /deep/ .markdown-body hr::before{display:table;content:\"\"}:host /deep/ .markdown-body hr::after{display:table;clear:both;content:\"\"}:host /deep/ .markdown-body ul,:host /deep/ .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host /deep/ .markdown-body ol ol,:host /deep/ .markdown-body ul ol{list-style-type:lower-roman}:host /deep/ .markdown-body ul ul ol,:host /deep/ .markdown-body ul ol ol,:host /deep/ .markdown-body ol ul ol,:host /deep/ .markdown-body ol ol ol{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host /deep/ .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host /deep/ .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host /deep/ .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host /deep/ .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body div > ol:not([type]){list-style:unset;list-style-type:decimal}:host /deep/ .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host /deep/ .markdown-body td,:host /deep/ .markdown-body th{padding:0}:host /deep/ .markdown-body th{color:var(--color-secondary)}:host /deep/ .markdown-body table th,:host /deep/ .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host /deep/ .markdown-body table td > :last-child{margin-bottom:0}:host /deep/ .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host /deep/ .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host /deep/ .markdown-body table img{background-color:transparent}:host /deep/ .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host /deep/ .markdown-body img[align=\"right\"]{padding-left:20px}:host /deep/ .markdown-body img[align=\"left\"]{padding-right:20px}\n"] }]
24009
+ }], propDecorators: { textContent: [{
24010
+ type: Input
24011
+ }] } });
24012
+
23825
24013
  class MetadataInfoComponent {
23826
24014
  constructor() {
23827
24015
  this.keyword = new EventEmitter();
@@ -23859,12 +24047,16 @@ class MetadataInfoComponent {
23859
24047
  onKeywordClick(keyword) {
23860
24048
  this.keyword.emit(keyword);
23861
24049
  }
24050
+ copyText() {
24051
+ navigator.clipboard.writeText(this.metadata.uniqueIdentifier);
24052
+ event.target.blur();
24053
+ }
23862
24054
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23863
- 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 }); }
24055
+ 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 }); }
23864
24056
  }
23865
24057
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
23866
24058
  type: Component,
23867
- 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"] }]
24059
+ 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"] }]
23868
24060
  }], propDecorators: { metadata: [{
23869
24061
  type: Input
23870
24062
  }], incomplete: [{
@@ -23900,53 +24092,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23900
24092
 
23901
24093
  class ButtonComponent {
23902
24094
  constructor() {
23903
- this.type = 'default';
23904
24095
  this.disabled = false;
23905
24096
  this.extraClass = '';
23906
24097
  this.buttonClick = new EventEmitter();
23907
24098
  }
23908
- get classList() {
23909
- return `${this.color} ${this.textColor} ${this.borderColor} ${this.extraClass}`;
23910
- }
23911
- get color() {
23912
- switch (this.type) {
23913
- case 'default':
23914
- return 'bg-gray-700 hover:bg-gray-800 hover:bg-gray-800 active:bg-gray-900';
24099
+ // btn-classes are explicited to allow tailwind recognize them and add it in css.
24100
+ set type(value) {
24101
+ switch (value) {
23915
24102
  case 'primary':
23916
- return 'bg-primary hover:bg-primary-darker focus:bg-primary-darker active:bg-primary-darkest';
23917
- case 'secondary':
23918
- return 'bg-secondary hover:bg-secondary-darker focus:bg-secondary-darker active:bg-secondary-darkest';
23919
- case 'outline':
23920
- return 'bg-white';
23921
- case 'light':
23922
- return 'bg-white hover:bg-gray-50 focus:bg-gray-50 active:bg-gray-100';
23923
- }
23924
- }
23925
- get textColor() {
23926
- switch (this.type) {
23927
- case 'default':
24103
+ this.btnClass = 'btn-primary';
24104
+ break;
23928
24105
  case 'secondary':
23929
- case 'primary':
23930
- return 'text-white';
24106
+ this.btnClass = 'btn-secondary';
24107
+ break;
23931
24108
  case 'outline':
23932
- return 'text-main hover:text-primary-darker focus:text-primary-darker active:text-primary-black';
24109
+ this.btnClass = 'btn-outline';
24110
+ break;
23933
24111
  case 'light':
23934
- return 'text-main';
24112
+ this.btnClass = 'btn-light';
24113
+ break;
24114
+ default:
24115
+ this.btnClass = 'btn-default';
24116
+ break;
23935
24117
  }
23936
24118
  }
23937
- get borderColor() {
23938
- switch (this.type) {
23939
- case 'default':
23940
- return 'border border-gray-700 focus:ring-4 focus:ring-gray-200';
23941
- case 'secondary':
23942
- return 'border border-secondary focus:ring-4 focus:ring-secondary-lightest';
23943
- case 'primary':
23944
- return 'border border-primary focus:ring-4 focus:ring-primary-lightest';
23945
- case 'outline':
23946
- return 'border border-gray-300 hover:border-primary-lighter focus:border-primary-lighter focus:ring-4 focus:ring-primary-lightest active:border-primary-darker';
23947
- case 'light':
23948
- return 'border border-white focus:ring-4 focus:ring-gray-300';
23949
- }
24119
+ get classList() {
24120
+ return `${this.btnClass} ${this.extraClass}`;
23950
24121
  }
23951
24122
  handleClick(event) {
23952
24123
  this.buttonClick.emit();
@@ -24042,31 +24213,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
24042
24213
  type: Input
24043
24214
  }] } });
24044
24215
 
24045
- class CopyTextButtonComponent {
24046
- constructor() {
24047
- this.displayText = true;
24048
- this.rows = 1;
24049
- }
24050
- copyText(event) {
24051
- navigator.clipboard.writeText(this.text);
24052
- event.target.blur();
24053
- }
24054
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24055
- 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 }); }
24056
- }
24057
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CopyTextButtonComponent, decorators: [{
24058
- type: Component,
24059
- 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" }]
24060
- }], propDecorators: { text: [{
24061
- type: Input
24062
- }], tooltipText: [{
24063
- type: Input
24064
- }], displayText: [{
24065
- type: Input
24066
- }], rows: [{
24067
- type: Input
24068
- }] } });
24069
-
24070
24216
  class ApiCardComponent {
24071
24217
  constructor() {
24072
24218
  this.currentlyActive = false;
@@ -24346,15 +24492,21 @@ class MetadataContactComponent {
24346
24492
  ? this.metadata.contactsForResource
24347
24493
  : this.metadata.contacts) || []);
24348
24494
  }
24495
+ get address() {
24496
+ const addressParts = this.contacts[0].address
24497
+ .split(',')
24498
+ .map((part) => part.trim());
24499
+ return addressParts;
24500
+ }
24349
24501
  onOrganizationClick() {
24350
24502
  this.organizationClick.emit(this.shownOrganization);
24351
24503
  }
24352
24504
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24353
- 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 }); }
24505
+ 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24354
24506
  }
24355
24507
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
24356
24508
  type: Component,
24357
- 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" }]
24509
+ 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" }]
24358
24510
  }], propDecorators: { metadata: [{
24359
24511
  type: Input
24360
24512
  }], organizationClick: [{
@@ -24620,7 +24772,10 @@ class DropdownMultiselectComponent {
24620
24772
  return this.choices.filter((choice) => this.selected.indexOf(choice.value) > -1);
24621
24773
  }
24622
24774
  get filteredChoicesByText() {
24623
- return this.choices.filter((choice) => choice.label.toLowerCase().includes(this.searchInputValue?.toLowerCase()));
24775
+ if (!this.searchInputValue)
24776
+ return this.choices;
24777
+ const filter = createFuzzyFilter(this.searchInputValue);
24778
+ return this.choices.filter((choice) => filter(choice.label));
24624
24779
  }
24625
24780
  get focusedIndex() {
24626
24781
  return this.checkboxes.reduce((prev, curr, curIndex) => curr.nativeElement === document.activeElement ? curIndex : prev, -1);
@@ -25071,11 +25226,11 @@ class StarToggleComponent {
25071
25226
  event.preventDefault();
25072
25227
  }
25073
25228
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StarToggleComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25074
- 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 }); }
25229
+ 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 }); }
25075
25230
  }
25076
25231
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: StarToggleComponent, decorators: [{
25077
25232
  type: Component,
25078
- 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"] }]
25233
+ 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"] }]
25079
25234
  }], propDecorators: { toggled: [{
25080
25235
  type: Input
25081
25236
  }], disabled: [{
@@ -25187,11 +25342,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25187
25342
 
25188
25343
  class NavigationButtonComponent {
25189
25344
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25190
- 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 }); }
25345
+ 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 }); }
25191
25346
  }
25192
25347
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
25193
25348
  type: Component,
25194
- 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" }]
25349
+ 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" }]
25195
25350
  }], propDecorators: { label: [{
25196
25351
  type: Input
25197
25352
  }], icon: [{
@@ -25775,7 +25930,8 @@ class UiElementsModule {
25775
25930
  GnUiLinkifyDirective,
25776
25931
  PaginationButtonsComponent,
25777
25932
  MaxLinesComponent,
25778
- RecordApiFormComponent], imports: [CommonModule,
25933
+ RecordApiFormComponent,
25934
+ MarkdownParserComponent], imports: [CommonModule,
25779
25935
  MatIconModule,
25780
25936
  MatTooltipModule,
25781
25937
  UiWidgetsModule,
@@ -25800,7 +25956,8 @@ class UiElementsModule {
25800
25956
  AvatarComponent,
25801
25957
  UserPreviewComponent,
25802
25958
  PaginationButtonsComponent,
25803
- RecordApiFormComponent] }); }
25959
+ RecordApiFormComponent,
25960
+ MarkdownParserComponent] }); }
25804
25961
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiElementsModule, imports: [CommonModule,
25805
25962
  MatIconModule,
25806
25963
  MatTooltipModule,
@@ -25849,6 +26006,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25849
26006
  PaginationButtonsComponent,
25850
26007
  MaxLinesComponent,
25851
26008
  RecordApiFormComponent,
26009
+ MarkdownParserComponent,
25852
26010
  ],
25853
26011
  exports: [
25854
26012
  MetadataInfoComponent,
@@ -25869,6 +26027,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25869
26027
  UserPreviewComponent,
25870
26028
  PaginationButtonsComponent,
25871
26029
  RecordApiFormComponent,
26030
+ MarkdownParserComponent,
25872
26031
  ],
25873
26032
  }]
25874
26033
  }] });
@@ -27255,6 +27414,7 @@ class FavoriteStarComponent {
27255
27414
  this.changeDetector = changeDetector;
27256
27415
  this.authService = authService;
27257
27416
  this.translateService = translateService;
27417
+ this.displayCount = true;
27258
27418
  this.isFavorite$ = this.favoritesService.myFavoritesUuid$.pipe(map$1((favorites) => favorites.indexOf(this.record.uniqueIdentifier) > -1));
27259
27419
  this.isAnonymous$ = this.platformService.isAnonymous();
27260
27420
  this.loading = false;
@@ -27317,12 +27477,14 @@ class FavoriteStarComponent {
27317
27477
  });
27318
27478
  }
27319
27479
  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 }); }
27320
- 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 }); }
27480
+ 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 }); }
27321
27481
  }
27322
27482
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, decorators: [{
27323
27483
  type: Component,
27324
- 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" }]
27325
- }], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: { record: [{
27484
+ 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" }]
27485
+ }], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: { displayCount: [{
27486
+ type: Input
27487
+ }], record: [{
27326
27488
  type: Input
27327
27489
  }], starToggleRef: [{
27328
27490
  type: ViewChild,
@@ -27365,7 +27527,7 @@ class ResultsListContainerComponent {
27365
27527
  return this.recordUrlTemplate.replace('${uuid}', metadata.uniqueIdentifier);
27366
27528
  }
27367
27529
  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 }); }
27368
- 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" }] }); }
27530
+ 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" }] }); }
27369
27531
  }
27370
27532
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsListContainerComponent, decorators: [{
27371
27533
  type: Component,
@@ -28124,6 +28286,109 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28124
28286
  ], 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"] }]
28125
28287
  }], ctorParameters: function () { return [{ type: SearchFacade }]; } });
28126
28288
 
28289
+ class AddLayerFromWmsComponent {
28290
+ constructor(mapFacade, changeDetectorRef) {
28291
+ this.mapFacade = mapFacade;
28292
+ this.changeDetectorRef = changeDetectorRef;
28293
+ this.wmsUrl = '';
28294
+ this.loading = false;
28295
+ this.layers = [];
28296
+ this.wmsEndpoint = null;
28297
+ this.urlChange = new Subject();
28298
+ this.errorMessage = null;
28299
+ }
28300
+ ngOnInit() {
28301
+ this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers());
28302
+ }
28303
+ async loadLayers() {
28304
+ this.errorMessage = null;
28305
+ try {
28306
+ this.loading = true;
28307
+ if (this.wmsUrl.trim() === '') {
28308
+ this.layers = [];
28309
+ return;
28310
+ }
28311
+ this.wmsEndpoint = await new WmsEndpoint(this.wmsUrl).isReady();
28312
+ this.layers = this.wmsEndpoint.getLayers();
28313
+ }
28314
+ catch (error) {
28315
+ const err = error;
28316
+ this.layers = [];
28317
+ this.errorMessage = 'Error loading layers: ' + err.message;
28318
+ }
28319
+ finally {
28320
+ this.loading = false;
28321
+ this.changeDetectorRef.markForCheck();
28322
+ }
28323
+ }
28324
+ addLayer(layer) {
28325
+ const layerToAdd = {
28326
+ name: layer.name,
28327
+ url: this.wmsUrl.toString(),
28328
+ type: MapContextLayerTypeEnum.WMS,
28329
+ };
28330
+ this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
28331
+ }
28332
+ 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 }); }
28333
+ 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" }] }); }
28334
+ }
28335
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWmsComponent, decorators: [{
28336
+ type: Component,
28337
+ 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" }]
28338
+ }], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
28339
+
28340
+ class AddLayerFromWfsComponent {
28341
+ constructor(mapFacade, changeDetectorRef) {
28342
+ this.mapFacade = mapFacade;
28343
+ this.changeDetectorRef = changeDetectorRef;
28344
+ this.wfsUrl = '';
28345
+ this.loading = false;
28346
+ this.layers = [];
28347
+ this.wfsEndpoint = null;
28348
+ this.urlChange = new Subject();
28349
+ this.errorMessage = null;
28350
+ }
28351
+ ngOnInit() {
28352
+ this.urlChange.pipe(debounceTime(700)).subscribe(() => this.loadLayers());
28353
+ }
28354
+ async loadLayers() {
28355
+ this.errorMessage = null;
28356
+ try {
28357
+ this.loading = true;
28358
+ if (this.wfsUrl.trim() === '') {
28359
+ this.layers = [];
28360
+ return;
28361
+ }
28362
+ this.wfsEndpoint = await new WfsEndpoint(this.wfsUrl).isReady();
28363
+ this.layers = this.wfsEndpoint.getFeatureTypes();
28364
+ console.log(this.layers);
28365
+ }
28366
+ catch (error) {
28367
+ const err = error;
28368
+ this.layers = [];
28369
+ this.errorMessage = 'Error loading layers: ' + err.message;
28370
+ }
28371
+ finally {
28372
+ this.loading = false;
28373
+ this.changeDetectorRef.markForCheck();
28374
+ }
28375
+ }
28376
+ addLayer(layer) {
28377
+ const layerToAdd = {
28378
+ name: layer.name,
28379
+ url: this.wfsUrl.toString(),
28380
+ type: MapContextLayerTypeEnum.WFS,
28381
+ };
28382
+ this.mapFacade.addLayer({ ...layerToAdd, title: layer.title });
28383
+ }
28384
+ 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 }); }
28385
+ 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" }] }); }
28386
+ }
28387
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: AddLayerFromWfsComponent, decorators: [{
28388
+ type: Component,
28389
+ 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" }]
28390
+ }], ctorParameters: function () { return [{ type: MapFacade }, { type: i0.ChangeDetectorRef }]; } });
28391
+
28127
28392
  class LayersPanelComponent {
28128
28393
  constructor(mapFacade) {
28129
28394
  this.mapFacade = mapFacade;
@@ -28133,11 +28398,11 @@ class LayersPanelComponent {
28133
28398
  this.mapFacade.removeLayer(index);
28134
28399
  }
28135
28400
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, deps: [{ token: MapFacade }], target: i0.ɵɵFactoryTarget.Component }); }
28136
- 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 }); }
28401
+ 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 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: "component", type: AddLayerFromWmsComponent, selector: "gn-ui-add-layer-from-wms" }, { 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 }); }
28137
28402
  }
28138
28403
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LayersPanelComponent, decorators: [{
28139
28404
  type: Component,
28140
- 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" }]
28405
+ 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 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" }]
28141
28406
  }], ctorParameters: function () { return [{ type: MapFacade }]; } });
28142
28407
 
28143
28408
  class MapEffects {
@@ -28177,7 +28442,9 @@ class FeatureMapModule {
28177
28442
  LayersPanelComponent,
28178
28443
  AddLayerFromCatalogComponent,
28179
28444
  MapContainerComponent,
28180
- AddLayerRecordPreviewComponent], imports: [CommonModule,
28445
+ AddLayerRecordPreviewComponent,
28446
+ AddLayerFromWmsComponent,
28447
+ AddLayerFromWfsComponent], imports: [CommonModule,
28181
28448
  UiMapModule,
28182
28449
  UiLayoutModule,
28183
28450
  MatIconModule,
@@ -28217,6 +28484,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28217
28484
  AddLayerFromCatalogComponent,
28218
28485
  MapContainerComponent,
28219
28486
  AddLayerRecordPreviewComponent,
28487
+ AddLayerFromWmsComponent,
28488
+ AddLayerFromWfsComponent,
28220
28489
  ],
28221
28490
  exports: [
28222
28491
  MapContextComponent,
@@ -30266,7 +30535,7 @@ class LanguageSwitcherComponent {
30266
30535
  ngOnInit() {
30267
30536
  const languages = this.languagePlaceholder || DEFAULT_LANGUAGES;
30268
30537
  this.languageList = languages.map((language) => ({
30269
- label: `language.${language}`,
30538
+ label: `${language}`.toUpperCase(),
30270
30539
  value: language,
30271
30540
  }));
30272
30541
  }
@@ -30281,11 +30550,11 @@ class LanguageSwitcherComponent {
30281
30550
  this.translate.use(value);
30282
30551
  }
30283
30552
  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 }); }
30284
- 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"] }] }); }
30553
+ 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"] }] }); }
30285
30554
  }
30286
30555
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
30287
30556
  type: Component,
30288
- 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" }]
30557
+ 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" }]
30289
30558
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
30290
30559
  type: Optional
30291
30560
  }, {
@@ -30427,20 +30696,8 @@ class OrganisationsComponent {
30427
30696
  filterOrganisations(organisations, filterBy) {
30428
30697
  if (!filterBy)
30429
30698
  return organisations;
30430
- const filterRegex = new RegExp(this.normalizeString(filterBy) //ignore accents and case
30431
- .replace(/[^a-z0-9\s]/g, ' ') //ignore special characters (also without spaces like l')
30432
- .replace(/\s(?=.)/g, '.*') //replace whitespaces by "AND" separator
30433
- .replace(/\s/g, ''), //remove potential whitespaces left
30434
- 'i');
30435
- return [...organisations].filter((org) => {
30436
- return this.normalizeString(org.name).match(filterRegex);
30437
- });
30438
- }
30439
- normalizeString(str) {
30440
- return str
30441
- .normalize('NFD')
30442
- .replace(/[\u0300-\u036f]/g, '')
30443
- .toLowerCase();
30699
+ const filter = createFuzzyFilter(filterBy);
30700
+ return organisations.filter((org) => filter(org.name));
30444
30701
  }
30445
30702
  sortOrganisations(organisations, sortBy) {
30446
30703
  let order;
@@ -31668,5 +31925,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
31668
31925
  * Generated bundle index. Do not edit.
31669
31926
  */
31670
31927
 
31671
- 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 };
31928
+ 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, 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, 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, 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 };
31672
31929
  //# sourceMappingURL=geonetwork-ui.mjs.map