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

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