geonetwork-ui 2.7.0-dev.0d8b7bca9 → 2.7.0-dev.1ac68f56b

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 (73) 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/common/domain/src/lib/model/record/metadata.model.mjs +5 -1
  4. package/esm2022/libs/feature/editor/src/index.mjs +2 -1
  5. package/esm2022/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.mjs +80 -0
  6. package/esm2022/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.mjs +3 -3
  7. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +1 -3
  8. package/esm2022/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.mjs +4 -4
  9. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +21 -43
  10. package/esm2022/libs/util/shared/src/index.mjs +2 -2
  11. package/esm2022/libs/util/shared/src/lib/record/index.mjs +3 -0
  12. package/esm2022/libs/util/shared/src/lib/record/quality-score.util.mjs +45 -0
  13. package/esm2022/libs/util/shared/src/lib/record/record.util.mjs +56 -0
  14. package/esm2022/translations/de.json +7 -0
  15. package/esm2022/translations/en.json +7 -0
  16. package/esm2022/translations/es.json +7 -0
  17. package/esm2022/translations/fr.json +8 -1
  18. package/esm2022/translations/it.json +7 -0
  19. package/esm2022/translations/nl.json +7 -0
  20. package/esm2022/translations/pt.json +7 -0
  21. package/esm2022/translations/sk.json +7 -0
  22. package/fesm2022/geonetwork-ui.mjs +209 -52
  23. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  24. package/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.d.ts.map +1 -1
  25. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  26. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  27. package/libs/feature/editor/src/index.d.ts +1 -0
  28. package/libs/feature/editor/src/index.d.ts.map +1 -1
  29. package/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.d.ts +19 -0
  30. package/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.d.ts.map +1 -0
  31. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -1
  32. package/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.d.ts.map +1 -1
  33. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts +7 -6
  34. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  35. package/libs/util/shared/src/index.d.ts +1 -1
  36. package/libs/util/shared/src/index.d.ts.map +1 -1
  37. package/libs/util/shared/src/lib/record/index.d.ts +3 -0
  38. package/libs/util/shared/src/lib/record/index.d.ts.map +1 -0
  39. package/libs/util/shared/src/lib/record/quality-score.util.d.ts +13 -0
  40. package/libs/util/shared/src/lib/record/quality-score.util.d.ts.map +1 -0
  41. package/libs/util/shared/src/lib/record/record.util.d.ts +3 -0
  42. package/libs/util/shared/src/lib/record/record.util.d.ts.map +1 -0
  43. package/package.json +1 -1
  44. package/src/libs/api/metadata-converter/src/lib/dcat-ap/utils/status.mapper.ts +3 -0
  45. package/src/libs/api/metadata-converter/src/lib/iso19139/utils/status.mapper.ts +3 -0
  46. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -0
  47. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +4 -0
  48. package/src/libs/common/fixtures/src/lib/editor/editor.fixtures.ts +0 -3
  49. package/src/libs/feature/editor/src/index.ts +1 -0
  50. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.css +0 -0
  51. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.html +37 -0
  52. package/src/libs/feature/editor/src/lib/components/metadata-quality-panel/metadata-quality-panel.component.ts +93 -0
  53. package/src/libs/feature/editor/src/lib/components/multilingual-panel/multilingual-panel.component.html +2 -1
  54. package/src/libs/feature/editor/src/lib/fields.config.ts +0 -2
  55. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.html +1 -0
  56. package/src/libs/ui/elements/src/lib/internal-link-card/internal-link-card.component.ts +5 -1
  57. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.html +1 -0
  58. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +21 -54
  59. package/src/libs/util/shared/src/index.ts +1 -1
  60. package/src/libs/util/shared/src/lib/record/index.ts +2 -0
  61. package/src/libs/util/shared/src/lib/record/quality-score.util.ts +69 -0
  62. package/src/libs/util/shared/src/lib/{record.util.ts → record/record.util.ts} +1 -1
  63. package/translations/de.json +7 -0
  64. package/translations/en.json +7 -0
  65. package/translations/es.json +7 -0
  66. package/translations/fr.json +8 -1
  67. package/translations/it.json +7 -0
  68. package/translations/nl.json +7 -0
  69. package/translations/pt.json +7 -0
  70. package/translations/sk.json +7 -0
  71. package/esm2022/libs/util/shared/src/lib/record.util.mjs +0 -56
  72. package/libs/util/shared/src/lib/record.util.d.ts +0 -3
  73. 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": "",
@@ -19381,7 +19399,9 @@ var en = {
19381
19399
  "domain.record.status.completed": "Completed",
19382
19400
  "domain.record.status.deprecated": "Deprecated",
19383
19401
  "domain.record.status.ongoing": "Ongoing",
19402
+ "domain.record.status.planned": "Planned",
19384
19403
  "domain.record.status.removed": "Removed",
19404
+ "domain.record.status.required": "Required",
19385
19405
  "domain.record.status.under_development": "Under development",
19386
19406
  "domain.record.updateFrequency.annually": "Data is updated every year",
19387
19407
  "domain.record.updateFrequency.asNeeded": "Data is updated as deemed necessary",
@@ -19437,6 +19457,7 @@ var en = {
19437
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.",
19438
19458
  "editor.record.form.field.abstract": "Abstract",
19439
19459
  "editor.record.form.field.constraintsShortcuts": "",
19460
+ "editor.record.form.field.contacts": "Point of contact - Email",
19440
19461
  "editor.record.form.field.contacts.noContact": "Please provide at least one point of contact.",
19441
19462
  "editor.record.form.field.contacts.placeholder": "Choose a contact",
19442
19463
  "editor.record.form.field.contactsForResource.noContact": "Please provide at least one point of contact responsible for the data.",
@@ -19461,6 +19482,7 @@ var en = {
19461
19482
  "editor.record.form.field.onlineResource.toggle.dataset": "Link to a file",
19462
19483
  "editor.record.form.field.onlineResource.toggle.service": "Link to a service",
19463
19484
  "editor.record.form.field.onlineResources": "Distribution",
19485
+ "editor.record.form.field.organisation": "Point of contact - Organization",
19464
19486
  "editor.record.form.field.otherConstraints": "Other constraint",
19465
19487
  "editor.record.form.field.overviews": "Overview",
19466
19488
  "editor.record.form.field.recordUpdated": "Record updated",
@@ -19472,6 +19494,7 @@ var en = {
19472
19494
  "editor.record.form.field.temporalExtents": "Temporal extents",
19473
19495
  "editor.record.form.field.title": "Metadata title",
19474
19496
  "editor.record.form.field.title.placeholder": "Enter a title",
19497
+ "editor.record.form.field.topics": "Categories",
19475
19498
  "editor.record.form.field.uniqueIdentifier": "Unique identifier",
19476
19499
  "editor.record.form.field.updateFrequency": "Update frequency",
19477
19500
  "editor.record.form.keywords.place.placeholder": "Search for place keywords",
@@ -19486,6 +19509,8 @@ var en = {
19486
19509
  "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
19487
19510
  "editor.record.form.license.pddl": "Open Data Commons PDDL",
19488
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",
19489
19514
  "editor.record.form.multilingual.activate": "Activate the languages",
19490
19515
  "editor.record.form.multilingual.default": "Default",
19491
19516
  "editor.record.form.multilingual.enable": "Multilingual Mode",
@@ -19992,7 +20017,9 @@ var es = {
19992
20017
  "domain.record.status.completed": "",
19993
20018
  "domain.record.status.deprecated": "",
19994
20019
  "domain.record.status.ongoing": "",
20020
+ "domain.record.status.planned": "",
19995
20021
  "domain.record.status.removed": "",
20022
+ "domain.record.status.required": "",
19996
20023
  "domain.record.status.under_development": "",
19997
20024
  "domain.record.updateFrequency.annually": "Los datos se actualizan cada año",
19998
20025
  "domain.record.updateFrequency.asNeeded": "Los datos se actualizan según sea necesario",
@@ -20048,6 +20075,7 @@ var es = {
20048
20075
  "editor.record.form.draft.updateAlert": "",
20049
20076
  "editor.record.form.field.abstract": "",
20050
20077
  "editor.record.form.field.constraintsShortcuts": "",
20078
+ "editor.record.form.field.contacts": "Punto de contacto - Correo ",
20051
20079
  "editor.record.form.field.contacts.noContact": "",
20052
20080
  "editor.record.form.field.contacts.placeholder": "",
20053
20081
  "editor.record.form.field.contactsForResource.noContact": "",
@@ -20072,6 +20100,7 @@ var es = {
20072
20100
  "editor.record.form.field.onlineResource.toggle.dataset": "",
20073
20101
  "editor.record.form.field.onlineResource.toggle.service": "",
20074
20102
  "editor.record.form.field.onlineResources": "",
20103
+ "editor.record.form.field.organisation": "Punto de contacto - Organización",
20075
20104
  "editor.record.form.field.otherConstraints": "",
20076
20105
  "editor.record.form.field.overviews": "",
20077
20106
  "editor.record.form.field.recordUpdated": "",
@@ -20083,6 +20112,7 @@ var es = {
20083
20112
  "editor.record.form.field.temporalExtents": "",
20084
20113
  "editor.record.form.field.title": "",
20085
20114
  "editor.record.form.field.title.placeholder": "Introduzca un título",
20115
+ "editor.record.form.field.topics": "Categorías",
20086
20116
  "editor.record.form.field.uniqueIdentifier": "",
20087
20117
  "editor.record.form.field.updateFrequency": "",
20088
20118
  "editor.record.form.keywords.place.placeholder": "",
@@ -20097,6 +20127,8 @@ var es = {
20097
20127
  "editor.record.form.license.odc-by": "",
20098
20128
  "editor.record.form.license.pddl": "",
20099
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",
20100
20132
  "editor.record.form.multilingual.activate": "",
20101
20133
  "editor.record.form.multilingual.default": "",
20102
20134
  "editor.record.form.multilingual.enable": "",
@@ -20603,7 +20635,9 @@ var fr = {
20603
20635
  "domain.record.status.completed": "Finalisé",
20604
20636
  "domain.record.status.deprecated": "Obsolète",
20605
20637
  "domain.record.status.ongoing": "Mise à jour continue",
20638
+ "domain.record.status.planned": "Planifié",
20606
20639
  "domain.record.status.removed": "Supprimé",
20640
+ "domain.record.status.required": "Obligatoire",
20607
20641
  "domain.record.status.under_development": "En cours de création",
20608
20642
  "domain.record.updateFrequency.annually": "Les données sont mises à jour chaque année",
20609
20643
  "domain.record.updateFrequency.asNeeded": "Les données sont mises à jour selon les besoins",
@@ -20616,7 +20650,7 @@ var fr = {
20616
20650
  "domain.record.updateFrequency.irregular": "Les données sont mises à jour à intervalles irréguliers",
20617
20651
  "domain.record.updateFrequency.month": "{count, plural, =0{0 fois} one{Une fois} other{{count} fois}} par mois",
20618
20652
  "domain.record.updateFrequency.monthly": "Les données sont mises à jour chaque mois",
20619
- "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",
20620
20654
  "domain.record.updateFrequency.periodic": "Les données sont mises à jour à intervalles réguliers",
20621
20655
  "domain.record.updateFrequency.quarterly": "Les données sont mises à jour tous les trois mois",
20622
20656
  "domain.record.updateFrequency.semimonthly": "Les données sont mises à jour deux fois par mois",
@@ -20659,6 +20693,7 @@ var fr = {
20659
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.",
20660
20694
  "editor.record.form.field.abstract": "Description",
20661
20695
  "editor.record.form.field.constraintsShortcuts": "",
20696
+ "editor.record.form.field.contacts": "Point de contact - Email",
20662
20697
  "editor.record.form.field.contacts.noContact": "Veuillez renseigner au moins un point de contact.",
20663
20698
  "editor.record.form.field.contacts.placeholder": "Choisissez un contact",
20664
20699
  "editor.record.form.field.contactsForResource.noContact": "Veuillez renseigner au moins un point de contact responsable de la donnée.",
@@ -20683,6 +20718,7 @@ var fr = {
20683
20718
  "editor.record.form.field.onlineResource.toggle.dataset": "Lier un fichier",
20684
20719
  "editor.record.form.field.onlineResource.toggle.service": "Lier un service",
20685
20720
  "editor.record.form.field.onlineResources": "Distribution",
20721
+ "editor.record.form.field.organisation": "Point de contact - Organisation",
20686
20722
  "editor.record.form.field.otherConstraints": "Contrainte générale",
20687
20723
  "editor.record.form.field.overviews": "Aperçu",
20688
20724
  "editor.record.form.field.recordUpdated": "Date de mise à jour",
@@ -20694,6 +20730,7 @@ var fr = {
20694
20730
  "editor.record.form.field.temporalExtents": "Étendue temporelle",
20695
20731
  "editor.record.form.field.title": "Titre",
20696
20732
  "editor.record.form.field.title.placeholder": "Saisir un titre",
20733
+ "editor.record.form.field.topics": "Thèmes",
20697
20734
  "editor.record.form.field.uniqueIdentifier": "Identifiant unique",
20698
20735
  "editor.record.form.field.updateFrequency": "Fréquence de mise à jour",
20699
20736
  "editor.record.form.keywords.place.placeholder": "Rechercher une localisation par mot-clé",
@@ -20708,6 +20745,8 @@ var fr = {
20708
20745
  "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
20709
20746
  "editor.record.form.license.pddl": "Open Data Commons PDDL",
20710
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",
20711
20750
  "editor.record.form.multilingual.activate": "Activez les langues",
20712
20751
  "editor.record.form.multilingual.default": "Par défaut",
20713
20752
  "editor.record.form.multilingual.enable": "Mode Multilingue",
@@ -21214,7 +21253,9 @@ var it = {
21214
21253
  "domain.record.status.completed": "Completato",
21215
21254
  "domain.record.status.deprecated": "Deprecato",
21216
21255
  "domain.record.status.ongoing": "Aggiornamento continuo",
21256
+ "domain.record.status.planned": "",
21217
21257
  "domain.record.status.removed": "Rimosso",
21258
+ "domain.record.status.required": "",
21218
21259
  "domain.record.status.under_development": "In fase di creazione",
21219
21260
  "domain.record.updateFrequency.annually": "I dati vengono aggiornati ogni anno",
21220
21261
  "domain.record.updateFrequency.asNeeded": "I dati vengono aggiornati secondo necessità",
@@ -21270,6 +21311,7 @@ var it = {
21270
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.",
21271
21312
  "editor.record.form.field.abstract": "Riassunto",
21272
21313
  "editor.record.form.field.constraintsShortcuts": "",
21314
+ "editor.record.form.field.contacts": "",
21273
21315
  "editor.record.form.field.contacts.noContact": "Inserisci almeno un punto di contatto.",
21274
21316
  "editor.record.form.field.contacts.placeholder": "Scegli un contatto",
21275
21317
  "editor.record.form.field.contactsForResource.noContact": "Inserisci almeno un punto di contatto responsabile dei dati.",
@@ -21294,6 +21336,7 @@ var it = {
21294
21336
  "editor.record.form.field.onlineResource.toggle.dataset": "Collega un file",
21295
21337
  "editor.record.form.field.onlineResource.toggle.service": "Collega un servizio",
21296
21338
  "editor.record.form.field.onlineResources": "Distribuzione",
21339
+ "editor.record.form.field.organisation": "",
21297
21340
  "editor.record.form.field.otherConstraints": "Vincolo generale",
21298
21341
  "editor.record.form.field.overviews": "Panoramica",
21299
21342
  "editor.record.form.field.recordUpdated": "Data di aggiornamento",
@@ -21305,6 +21348,7 @@ var it = {
21305
21348
  "editor.record.form.field.temporalExtents": "Estensioni temporali",
21306
21349
  "editor.record.form.field.title": "Titolo",
21307
21350
  "editor.record.form.field.title.placeholder": "Inserisci un titolo",
21351
+ "editor.record.form.field.topics": "",
21308
21352
  "editor.record.form.field.uniqueIdentifier": "Identificatore univoco",
21309
21353
  "editor.record.form.field.updateFrequency": "Frequenza di aggiornamento",
21310
21354
  "editor.record.form.keywords.place.placeholder": "Cerca una posizione per parola chiave",
@@ -21319,6 +21363,8 @@ var it = {
21319
21363
  "editor.record.form.license.odc-by": "Open Data Commons ODC-By",
21320
21364
  "editor.record.form.license.pddl": "Open Data Commons PDDL",
21321
21365
  "editor.record.form.license.unknown": "Sconosciuto o assente",
21366
+ "editor.record.form.metadataQuality.open": "",
21367
+ "editor.record.form.metadataQuality.title": "",
21322
21368
  "editor.record.form.multilingual.activate": "",
21323
21369
  "editor.record.form.multilingual.default": "",
21324
21370
  "editor.record.form.multilingual.enable": "Aprire il pannello multilingue",
@@ -21825,7 +21871,9 @@ var nl = {
21825
21871
  "domain.record.status.completed": "",
21826
21872
  "domain.record.status.deprecated": "",
21827
21873
  "domain.record.status.ongoing": "",
21874
+ "domain.record.status.planned": "",
21828
21875
  "domain.record.status.removed": "",
21876
+ "domain.record.status.required": "",
21829
21877
  "domain.record.status.under_development": "",
21830
21878
  "domain.record.updateFrequency.annually": "Gegevens worden elk jaar bijgewerkt",
21831
21879
  "domain.record.updateFrequency.asNeeded": "Gegevens worden bijgewerkt naar behoefte",
@@ -21881,6 +21929,7 @@ var nl = {
21881
21929
  "editor.record.form.draft.updateAlert": "",
21882
21930
  "editor.record.form.field.abstract": "",
21883
21931
  "editor.record.form.field.constraintsShortcuts": "",
21932
+ "editor.record.form.field.contacts": "",
21884
21933
  "editor.record.form.field.contacts.noContact": "",
21885
21934
  "editor.record.form.field.contacts.placeholder": "",
21886
21935
  "editor.record.form.field.contactsForResource.noContact": "",
@@ -21905,6 +21954,7 @@ var nl = {
21905
21954
  "editor.record.form.field.onlineResource.toggle.dataset": "",
21906
21955
  "editor.record.form.field.onlineResource.toggle.service": "",
21907
21956
  "editor.record.form.field.onlineResources": "",
21957
+ "editor.record.form.field.organisation": "",
21908
21958
  "editor.record.form.field.otherConstraints": "",
21909
21959
  "editor.record.form.field.overviews": "",
21910
21960
  "editor.record.form.field.recordUpdated": "",
@@ -21916,6 +21966,7 @@ var nl = {
21916
21966
  "editor.record.form.field.temporalExtents": "",
21917
21967
  "editor.record.form.field.title": "",
21918
21968
  "editor.record.form.field.title.placeholder": "Voer een titel in",
21969
+ "editor.record.form.field.topics": "",
21919
21970
  "editor.record.form.field.uniqueIdentifier": "",
21920
21971
  "editor.record.form.field.updateFrequency": "",
21921
21972
  "editor.record.form.keywords.place.placeholder": "",
@@ -21930,6 +21981,8 @@ var nl = {
21930
21981
  "editor.record.form.license.odc-by": "",
21931
21982
  "editor.record.form.license.pddl": "",
21932
21983
  "editor.record.form.license.unknown": "",
21984
+ "editor.record.form.metadataQuality.open": "",
21985
+ "editor.record.form.metadataQuality.title": "",
21933
21986
  "editor.record.form.multilingual.activate": "",
21934
21987
  "editor.record.form.multilingual.default": "",
21935
21988
  "editor.record.form.multilingual.enable": "",
@@ -22436,7 +22489,9 @@ var pt = {
22436
22489
  "domain.record.status.completed": "",
22437
22490
  "domain.record.status.deprecated": "",
22438
22491
  "domain.record.status.ongoing": "",
22492
+ "domain.record.status.planned": "",
22439
22493
  "domain.record.status.removed": "",
22494
+ "domain.record.status.required": "",
22440
22495
  "domain.record.status.under_development": "",
22441
22496
  "domain.record.updateFrequency.annually": "Os dados são atualizados anualmente",
22442
22497
  "domain.record.updateFrequency.asNeeded": "Os dados são atualizados conforme necessário",
@@ -22492,6 +22547,7 @@ var pt = {
22492
22547
  "editor.record.form.draft.updateAlert": "",
22493
22548
  "editor.record.form.field.abstract": "",
22494
22549
  "editor.record.form.field.constraintsShortcuts": "",
22550
+ "editor.record.form.field.contacts": "",
22495
22551
  "editor.record.form.field.contacts.noContact": "",
22496
22552
  "editor.record.form.field.contacts.placeholder": "",
22497
22553
  "editor.record.form.field.contactsForResource.noContact": "",
@@ -22516,6 +22572,7 @@ var pt = {
22516
22572
  "editor.record.form.field.onlineResource.toggle.dataset": "",
22517
22573
  "editor.record.form.field.onlineResource.toggle.service": "",
22518
22574
  "editor.record.form.field.onlineResources": "",
22575
+ "editor.record.form.field.organisation": "",
22519
22576
  "editor.record.form.field.otherConstraints": "",
22520
22577
  "editor.record.form.field.overviews": "",
22521
22578
  "editor.record.form.field.recordUpdated": "",
@@ -22527,6 +22584,7 @@ var pt = {
22527
22584
  "editor.record.form.field.temporalExtents": "",
22528
22585
  "editor.record.form.field.title": "",
22529
22586
  "editor.record.form.field.title.placeholder": "Insira um título",
22587
+ "editor.record.form.field.topics": "",
22530
22588
  "editor.record.form.field.uniqueIdentifier": "",
22531
22589
  "editor.record.form.field.updateFrequency": "",
22532
22590
  "editor.record.form.keywords.place.placeholder": "",
@@ -22541,6 +22599,8 @@ var pt = {
22541
22599
  "editor.record.form.license.odc-by": "",
22542
22600
  "editor.record.form.license.pddl": "",
22543
22601
  "editor.record.form.license.unknown": "",
22602
+ "editor.record.form.metadataQuality.open": "",
22603
+ "editor.record.form.metadataQuality.title": "",
22544
22604
  "editor.record.form.multilingual.activate": "",
22545
22605
  "editor.record.form.multilingual.default": "",
22546
22606
  "editor.record.form.multilingual.enable": "",
@@ -23047,7 +23107,9 @@ var sk = {
23047
23107
  "domain.record.status.completed": "Dokončené",
23048
23108
  "domain.record.status.deprecated": "Zastarané",
23049
23109
  "domain.record.status.ongoing": "Prebiehajúce",
23110
+ "domain.record.status.planned": "",
23050
23111
  "domain.record.status.removed": "Odstránené",
23112
+ "domain.record.status.required": "",
23051
23113
  "domain.record.status.under_development": "Vo vývoji",
23052
23114
  "domain.record.updateFrequency.annually": "Údaje sa aktualizujú každý rok",
23053
23115
  "domain.record.updateFrequency.asNeeded": "Údaje sa aktualizujú podľa potreby",
@@ -23103,6 +23165,7 @@ var sk = {
23103
23165
  "editor.record.form.draft.updateAlert": "",
23104
23166
  "editor.record.form.field.abstract": "",
23105
23167
  "editor.record.form.field.constraintsShortcuts": "",
23168
+ "editor.record.form.field.contacts": "",
23106
23169
  "editor.record.form.field.contacts.noContact": "",
23107
23170
  "editor.record.form.field.contacts.placeholder": "",
23108
23171
  "editor.record.form.field.contactsForResource.noContact": "",
@@ -23127,6 +23190,7 @@ var sk = {
23127
23190
  "editor.record.form.field.onlineResource.toggle.dataset": "",
23128
23191
  "editor.record.form.field.onlineResource.toggle.service": "",
23129
23192
  "editor.record.form.field.onlineResources": "",
23193
+ "editor.record.form.field.organisation": "",
23130
23194
  "editor.record.form.field.otherConstraints": "",
23131
23195
  "editor.record.form.field.overviews": "",
23132
23196
  "editor.record.form.field.recordUpdated": "",
@@ -23138,6 +23202,7 @@ var sk = {
23138
23202
  "editor.record.form.field.temporalExtents": "",
23139
23203
  "editor.record.form.field.title": "",
23140
23204
  "editor.record.form.field.title.placeholder": "Zadajte názov",
23205
+ "editor.record.form.field.topics": "",
23141
23206
  "editor.record.form.field.uniqueIdentifier": "",
23142
23207
  "editor.record.form.field.updateFrequency": "",
23143
23208
  "editor.record.form.keywords.place.placeholder": "",
@@ -23152,6 +23217,8 @@ var sk = {
23152
23217
  "editor.record.form.license.odc-by": "",
23153
23218
  "editor.record.form.license.pddl": "",
23154
23219
  "editor.record.form.license.unknown": "",
23220
+ "editor.record.form.metadataQuality.open": "",
23221
+ "editor.record.form.metadataQuality.title": "",
23155
23222
  "editor.record.form.multilingual.activate": "",
23156
23223
  "editor.record.form.multilingual.default": "",
23157
23224
  "editor.record.form.multilingual.enable": "",
@@ -26342,7 +26409,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
26342
26409
  }] } });
26343
26410
 
26344
26411
  var name = "geonetwork-ui";
26345
- var version = "2.7.0-dev.0d8b7bca9";
26412
+ var version = "2.7.0-dev.1ac68f56b";
26346
26413
  var engines = {
26347
26414
  node: ">=20"
26348
26415
  };
@@ -26441,6 +26508,51 @@ const GEONETWORK_UI_TAG_NAME = GEONETWORK_UI_VERSION.split('-')[1] === 'dev'
26441
26508
  ? 'main'
26442
26509
  : `v${packageJson.version}`;
26443
26510
 
26511
+ const ValidatorMapper = {
26512
+ title: (record) => !!record?.title,
26513
+ abstract: (record) => !!record?.abstract,
26514
+ keywords: (record) => (record?.keywords?.length ?? 0) > 0,
26515
+ legalConstraints: (record) => (record?.legalConstraints?.length ?? 0) > 0,
26516
+ contacts: (record) => !!record?.contacts?.[0]?.email,
26517
+ updateFrequency: (record) => !!record?.updateFrequency,
26518
+ topics: (record) => (record?.topics?.length ?? 0) > 0,
26519
+ organisation: (record) => !!record?.contacts?.[0]?.organization?.name,
26520
+ capabilities: (record) => record?.onlineResources?.some((resource) => resource?.url?.href.toLowerCase().includes('capabilities')),
26521
+ source: (record) => !!record?.extras?.sourcesIdentifiers,
26522
+ };
26523
+ function getAllKeysValidator() {
26524
+ return Object.keys(ValidatorMapper);
26525
+ }
26526
+ function getMappersFromKind(kind) {
26527
+ let kindKeys = [];
26528
+ const commonsKeys = [
26529
+ 'title',
26530
+ 'abstract',
26531
+ 'keywords',
26532
+ 'legalConstraints',
26533
+ 'contacts',
26534
+ ];
26535
+ switch (kind) {
26536
+ case 'service':
26537
+ kindKeys = ['capabilities'];
26538
+ break;
26539
+ case 'reuse':
26540
+ kindKeys = ['topics', 'organisation', 'source'];
26541
+ break;
26542
+ case 'dataset':
26543
+ default:
26544
+ kindKeys = ['updateFrequency', 'topics', 'organisation'];
26545
+ }
26546
+ return [...commonsKeys, ...kindKeys];
26547
+ }
26548
+ function getQualityValidators(record, propsToValidate) {
26549
+ const filteredProps = propsToValidate.filter((prop) => getMappersFromKind(record.kind).includes(prop));
26550
+ return filteredProps.map((name) => ({
26551
+ name,
26552
+ validator: () => ValidatorMapper[name](record),
26553
+ }));
26554
+ }
26555
+
26444
26556
  function updateLanguages(record, defaultLanguage, otherLanguages) {
26445
26557
  function updateFieldTranslations(target, fieldName) {
26446
26558
  const fieldTranslations = {};
@@ -31921,58 +32033,29 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
31921
32033
  class MetadataQualityComponent {
31922
32034
  constructor() {
31923
32035
  this.smaller = false;
32036
+ this.popoverDisplay = true;
32037
+ this.forceComputeScore = false; // Instead of returning es' quality score
31924
32038
  this.items = [];
31925
- this.COMMON_CHECKS = {
31926
- title: (metadata) => !!metadata?.title,
31927
- description: (metadata) => !!metadata?.abstract,
31928
- keywords: (metadata) => (metadata?.keywords?.length ?? 0) > 0,
31929
- legalConstraints: (metadata) => (metadata?.legalConstraints?.length ?? 0) > 0,
31930
- contact: (metadata) => !!metadata?.contacts?.[0]?.email,
31931
- };
31932
- this.SPECIFIC_CHECKS = {
31933
- dataset: {
31934
- updateFrequency: (metadata) => !!metadata?.updateFrequency,
31935
- topic: (metadata) => (metadata?.topics?.length ?? 0) > 0,
31936
- organisation: (metadata) => !!metadata?.contacts?.[0]?.organization?.name,
31937
- },
31938
- service: {
31939
- capabilities: (metadata) => (metadata?.onlineResources ?? []).some((resource) => this.hasGetCapabilities(resource?.url?.href ?? '')),
31940
- },
31941
- reuse: {
31942
- topic: (metadata) => (metadata?.topics?.length ?? 0) > 0,
31943
- organisation: (metadata) => !!metadata?.contacts?.[0]?.organization?.name,
31944
- source: (metadata) => !!metadata?.extras?.sourcesIdentifiers,
31945
- },
31946
- };
31947
32039
  }
31948
32040
  get qualityScore() {
31949
- const qualityScore = this.metadata?.extras?.qualityScore;
32041
+ const qualityScore = !this.forceComputeScore
32042
+ ? this.metadata?.extras?.qualityScore
32043
+ : this.computedQualityScore;
31950
32044
  return typeof qualityScore === 'number'
31951
32045
  ? qualityScore
31952
- : this.calculatedQualityScore;
32046
+ : this.computedQualityScore;
31953
32047
  }
31954
- get calculatedQualityScore() {
32048
+ get computedQualityScore() {
31955
32049
  return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
31956
32050
  }
31957
- add(name, value) {
31958
- if (this.metadataQualityDisplay?.[name] !== false) {
31959
- this.items.push({ name, value });
31960
- }
31961
- }
31962
32051
  hasGetCapabilities(url) {
31963
32052
  return url.toLowerCase().includes('capabilities');
31964
32053
  }
31965
32054
  initialize() {
31966
- this.items = [];
31967
- Object.entries(this.COMMON_CHECKS).forEach(([name, check]) => {
31968
- this.add(name, check(this.metadata));
31969
- });
31970
- const datasetType = this.metadata?.kind;
31971
- if (datasetType && this.SPECIFIC_CHECKS[datasetType]) {
31972
- Object.entries(this.SPECIFIC_CHECKS[datasetType]).forEach(([name, check]) => {
31973
- this.add(name, check(this.metadata));
31974
- });
32055
+ if (!this.propsToValidate) {
32056
+ this.propsToValidate = getAllKeysValidator();
31975
32057
  }
32058
+ this.items = getQualityValidators(this.metadata, this.propsToValidate).map(({ name, validator }) => ({ name, value: validator() }));
31976
32059
  }
31977
32060
  ngOnChanges(changes) {
31978
32061
  if (changes['metadata'] || changes['metadataQualityDisplay']) {
@@ -31980,7 +32063,7 @@ class MetadataQualityComponent {
31980
32063
  }
31981
32064
  }
31982
32065
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataQualityComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
31983
- 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: [
32066
+ 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: [
31984
32067
  provideIcons({
31985
32068
  matInfoOutline,
31986
32069
  }),
@@ -31988,7 +32071,7 @@ class MetadataQualityComponent {
31988
32071
  size: '1.2em',
31989
32072
  strokeWidth: '1.5px',
31990
32073
  }),
31991
- ], 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 }); }
32074
+ ], 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 }); }
31992
32075
  }
31993
32076
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataQualityComponent, decorators: [{
31994
32077
  type: Component,
@@ -32007,13 +32090,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
32007
32090
  size: '1.2em',
32008
32091
  strokeWidth: '1.5px',
32009
32092
  }),
32010
- ], 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"] }]
32093
+ ], 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"] }]
32011
32094
  }], propDecorators: { metadata: [{
32012
32095
  type: Input
32013
32096
  }], smaller: [{
32014
32097
  type: Input
32015
32098
  }], metadataQualityDisplay: [{
32016
32099
  type: Input
32100
+ }], popoverDisplay: [{
32101
+ type: Input
32102
+ }], propsToValidate: [{
32103
+ type: Input
32104
+ }], forceComputeScore: [{
32105
+ type: Input
32017
32106
  }] } });
32018
32107
 
32019
32108
  class InternalLinkCardComponent {
@@ -32055,7 +32144,7 @@ class InternalLinkCardComponent {
32055
32144
  provideNgIconsConfig({
32056
32145
  size: '1.2em',
32057
32146
  }),
32058
- ], 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"] }] }); }
32147
+ ], 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"] }] }); }
32059
32148
  }
32060
32149
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InternalLinkCardComponent, decorators: [{
32061
32150
  type: Component,
@@ -32076,7 +32165,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
32076
32165
  provideNgIconsConfig({
32077
32166
  size: '1.2em',
32078
32167
  }),
32079
- ], 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"] }]
32168
+ ], 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"] }]
32080
32169
  }], ctorParameters: () => [{ type: i0.ElementRef }], propDecorators: { record: [{
32081
32170
  type: Input
32082
32171
  }], linkTarget: [{
@@ -40833,8 +40922,6 @@ const RECORD_KEYWORDS_FIELD = {
40833
40922
  model: 'keywords',
40834
40923
  formFieldConfig: {},
40835
40924
  };
40836
- // keeping track of the label to not lose existing translation
40837
- marker('editor.record.form.field.keywords');
40838
40925
  const RECORD_RESOURCE_CREATED_FIELD = {
40839
40926
  model: 'resourceCreated',
40840
40927
  formFieldConfig: {
@@ -43542,7 +43629,7 @@ class MultilingualPanelComponent {
43542
43629
  provideNgIconsConfig({
43543
43630
  size: '1.25em',
43544
43631
  }),
43545
- ], 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"] }] }); }
43632
+ ], 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"] }] }); }
43546
43633
  }
43547
43634
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MultilingualPanelComponent, decorators: [{
43548
43635
  type: Component,
@@ -43564,7 +43651,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
43564
43651
  provideNgIconsConfig({
43565
43652
  size: '1.25em',
43566
43653
  }),
43567
- ], 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" }]
43654
+ ], 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" }]
43568
43655
  }], 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: [{
43569
43656
  type: Input
43570
43657
  }], actionMenuButtons: [{
@@ -43572,6 +43659,76 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
43572
43659
  args: ['actionMenuButton', { read: ElementRef }]
43573
43660
  }] } });
43574
43661
 
43662
+ //forced translations that are not available in fields.config.ts
43663
+ marker('editor.record.form.field.keywords');
43664
+ marker('editor.record.form.field.topics');
43665
+ marker('editor.record.form.field.contacts');
43666
+ marker('editor.record.form.field.organisation');
43667
+ class MetadataQualityPanelComponent {
43668
+ constructor() {
43669
+ this.propsToValidate = getAllKeysValidator();
43670
+ this.propertiesByPage = [];
43671
+ }
43672
+ ngOnChanges() {
43673
+ if (this.editorConfig && this.record) {
43674
+ const fieldsByPage = this.editorConfig.pages.map((page) => page.sections.flatMap((section) => section.fields
43675
+ .filter((field) => this.propsToValidate.includes(field.model) && !field.hidden)
43676
+ .map((field) => field.model)));
43677
+ // FIXME: temporarily add topics and organisation to the first and third page
43678
+ // as long as they are not handled by the editor
43679
+ if (fieldsByPage.length > 0) {
43680
+ fieldsByPage[0].includes('topics') || fieldsByPage[0].push('topics');
43681
+ fieldsByPage[2].includes('organisation') ||
43682
+ fieldsByPage[2].push('organisation');
43683
+ }
43684
+ this.propertiesByPage = fieldsByPage
43685
+ .map((fields) => getQualityValidators(this.record, fields).map(({ name, validator }) => ({
43686
+ label: `editor.record.form.field.${name}`, // use same translations as in fields.config.ts
43687
+ value: validator(),
43688
+ })))
43689
+ .filter((arr) => arr.length > 0);
43690
+ }
43691
+ }
43692
+ getExtraClass(checked) {
43693
+ 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';
43694
+ return checked
43695
+ ? `${baseClasses} bg-neutral-100 hover:bg-neutral-100`
43696
+ : `${baseClasses} bg-transparent hover:bg-transparent`;
43697
+ }
43698
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataQualityPanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
43699
+ 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: [
43700
+ provideIcons({
43701
+ iconoirSystemShut,
43702
+ iconoirBadgeCheck,
43703
+ }),
43704
+ provideNgIconsConfig({
43705
+ size: '1.25em',
43706
+ }),
43707
+ ], 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"] }] }); }
43708
+ }
43709
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataQualityPanelComponent, decorators: [{
43710
+ type: Component,
43711
+ args: [{ selector: 'gn-ui-metadata-quality-panel', standalone: true, imports: [
43712
+ CommonModule,
43713
+ TranslateDirective,
43714
+ TranslatePipe,
43715
+ ButtonComponent,
43716
+ NgIconComponent,
43717
+ ], providers: [
43718
+ provideIcons({
43719
+ iconoirSystemShut,
43720
+ iconoirBadgeCheck,
43721
+ }),
43722
+ provideNgIconsConfig({
43723
+ size: '1.25em',
43724
+ }),
43725
+ ], 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" }]
43726
+ }], propDecorators: { editorConfig: [{
43727
+ type: Input
43728
+ }], record: [{
43729
+ type: Input
43730
+ }] } });
43731
+
43575
43732
  const ROUTER_STATE_KEY = 'router';
43576
43733
  const ROUTER_ROUTE_SEARCH = 'search';
43577
43734
  const ROUTER_ROUTE_DATASET = 'dataset';
@@ -44016,5 +44173,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
44016
44173
  * Generated bundle index. Do not edit.
44017
44174
  */
44018
44175
 
44019
- 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, getLinkId, 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 };
44176
+ 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 };
44020
44177
  //# sourceMappingURL=geonetwork-ui.mjs.map