geonetwork-ui 2.2.0-dev.6695ae4d → 2.2.0-dev.723017a4

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 (115) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/atomic-operations.mjs +27 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +8 -8
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +2 -2
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +14 -0
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +7 -9
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +30 -8
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +31 -14
  9. package/esm2022/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.mjs +10 -3
  10. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +14 -5
  11. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +33 -8
  12. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  13. package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
  14. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  15. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +9 -1
  16. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
  17. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
  18. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
  19. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +7 -7
  20. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -4
  21. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +4 -4
  22. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +3 -3
  23. package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
  24. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +6 -6
  25. package/esm2022/translations/de.json +2 -1
  26. package/esm2022/translations/en.json +2 -1
  27. package/esm2022/translations/es.json +2 -1
  28. package/esm2022/translations/fr.json +2 -1
  29. package/esm2022/translations/it.json +2 -1
  30. package/esm2022/translations/nl.json +2 -1
  31. package/esm2022/translations/pt.json +2 -1
  32. package/fesm2022/geonetwork-ui.mjs +259 -114
  33. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  34. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +2 -0
  35. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  36. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  37. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +3 -5
  38. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  39. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts +3 -0
  40. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
  41. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
  42. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +2 -3
  43. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  44. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +1 -1
  45. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  46. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  47. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
  48. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  49. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
  50. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  51. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +13 -2
  52. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  53. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
  54. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
  55. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
  56. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  57. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
  58. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
  59. package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
  60. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  61. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  62. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +1 -1
  63. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -1
  64. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +3 -3
  65. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  66. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  67. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +13 -13
  68. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  69. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  70. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
  71. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
  72. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +40 -40
  73. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +1 -1
  74. package/package.json +1 -1
  75. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +55 -2
  76. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +50 -6
  77. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +203 -20
  78. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +29 -0
  79. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +11 -8
  80. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +1 -1
  81. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +3 -5
  82. package/src/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.ts +16 -0
  83. package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +5 -9
  84. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +53 -19
  85. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +78 -36
  86. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
  87. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
  88. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
  89. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +16 -3
  90. package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
  91. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
  92. package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
  93. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +25 -5
  94. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +10 -0
  95. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
  96. package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
  97. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
  98. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
  99. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
  100. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +1 -0
  101. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +5 -5
  102. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +6 -3
  103. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +2 -3
  104. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +1 -1
  105. package/src/libs/ui/inputs/src/lib/button/button.component.ts +1 -0
  106. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
  107. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +2 -2
  108. package/translations/de.json +2 -1
  109. package/translations/en.json +2 -1
  110. package/translations/es.json +2 -1
  111. package/translations/fr.json +2 -1
  112. package/translations/it.json +2 -1
  113. package/translations/nl.json +2 -1
  114. package/translations/pt.json +2 -1
  115. package/translations/sk.json +2 -1
@@ -8,7 +8,7 @@ import * as i1$1 from '@ngx-translate/core';
8
8
  import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService } from '@ngx-translate/core';
9
9
  import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
10
10
  import { TranslateHttpLoader } from '@ngx-translate/http-loader';
11
- import { map as map$1, shareReplay, filter, tap as tap$1, startWith, switchMap as switchMap$1, catchError, take, withLatestFrom, delay, debounceTime, throttleTime, distinctUntilChanged, finalize, first, share, pairwise, mergeMap } from 'rxjs/operators';
11
+ import { map as map$1, shareReplay, filter, tap as tap$1, startWith, withLatestFrom, switchMap as switchMap$1, catchError, take, delay, debounceTime, throttleTime, distinctUntilChanged, finalize, first, share, pairwise, mergeMap } from 'rxjs/operators';
12
12
  import { marker } from '@biesbjerg/ngx-translate-extract-marker';
13
13
  import * as i1$3 from '@angular/common';
14
14
  import { CommonModule, NgOptimizedImage, NgForOf } from '@angular/common';
@@ -587,6 +587,20 @@ function matchMimeType(format) {
587
587
  return format || null;
588
588
  }
589
589
 
590
+ function getKeywordTypeFromKeywordTypeCode(typeCode) {
591
+ if (!typeCode)
592
+ return 'other';
593
+ switch (typeCode) {
594
+ case 'theme':
595
+ case 'place':
596
+ case 'temporal':
597
+ case 'other':
598
+ return typeCode;
599
+ default:
600
+ return 'other';
601
+ }
602
+ }
603
+
590
604
  function extractCharacterString() {
591
605
  return pipe(fallback(findChildElement('gco:CharacterString', false), findChildElement('gmx:Anchor', false)), readText());
592
606
  }
@@ -833,14 +847,35 @@ function readDatasetUpdated(rootEl) {
833
847
  function readContacts(rootEl) {
834
848
  return pipe(findIdentification(), combine(findChildrenElement('gmd:contact'), findChildrenElement('gmd:pointOfContact')), flattenArray(), mapArray(findChildElement('gmd:CI_ResponsibleParty', false)), mapArray(extractIndividuals()), flattenArray())(rootEl);
835
849
  }
836
- function readKeywordsOfType(isTheme) {
837
- return pipe(findIdentification(), findNestedElements('gmd:descriptiveKeywords', 'gmd:MD_Keywords'), filterArray(pipe(findChildrenElement('gmd:MD_KeywordTypeCode'), mapArray(readAttribute('codeListValue')), map((values) => isTheme === values.indexOf('theme') > -1))), mapArray(findChildrenElement('gmd:keyword')), flattenArray(), mapArray(extractCharacterString()));
850
+ // from gmd:thesaurusName
851
+ function readThesaurus(rootEl) {
852
+ if (!rootEl)
853
+ return null;
854
+ const findIdentifier = findNestedElement('gmd:CI_Citation', 'gmd:identifier', 'gmd:MD_Identifier', 'gmd:code');
855
+ const id = pipe(findIdentifier, extractCharacterString())(rootEl);
856
+ const url = pipe(findIdentifier, extractUrl())(rootEl);
857
+ const name = pipe(findNestedElement('gmd:CI_Citation', 'gmd:title'), extractCharacterString())(rootEl);
858
+ return {
859
+ id,
860
+ ...(name && { name }),
861
+ ...(url && { url }),
862
+ };
838
863
  }
839
- function readKeywords(rootEl) {
840
- return readKeywordsOfType(false)(rootEl);
864
+ // from gmd:MD_Keywords
865
+ function readKeywordGroup(rootEl) {
866
+ const type = pipe(findChildrenElement('gmd:MD_KeywordTypeCode'), mapArray(readAttribute('codeListValue')), map((values) => getKeywordTypeFromKeywordTypeCode(values[0])))(rootEl);
867
+ const thesaurus = pipe(findNestedElement('gmd:thesaurusName'), readThesaurus)(rootEl);
868
+ return pipe(findChildrenElement('gmd:keyword'), mapArray((el) => {
869
+ const label = extractCharacterString()(el);
870
+ return {
871
+ ...(thesaurus ? { thesaurus } : {}),
872
+ label,
873
+ type,
874
+ };
875
+ }))(rootEl);
841
876
  }
842
- function readThemes(rootEl) {
843
- return readKeywordsOfType(true)(rootEl);
877
+ function readKeywords(rootEl) {
878
+ return pipe(findIdentification(), findNestedElements('gmd:descriptiveKeywords', 'gmd:MD_Keywords'), mapArray(readKeywordGroup), flattenArray())(rootEl);
844
879
  }
845
880
  function readStatus(rootEl) {
846
881
  return pipe(findIdentification(), findChildElement('gmd:status', false), extractStatus())(rootEl);
@@ -860,7 +895,7 @@ function readLicenses(rootEl) {
860
895
  }
861
896
  // not used yet
862
897
  function readIsoTopics(rootEl) {
863
- return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode', false), mapArray(readText()))(rootEl);
898
+ return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode', true), mapArray(readText()))(rootEl);
864
899
  }
865
900
  function readSpatialRepresentation(rootEl) {
866
901
  return pipe(findIdentification(), findNestedElement('gmd:spatialRepresentationType', 'gmd:MD_SpatialRepresentationTypeCode'), readAttribute('codeListValue'), map(getSpatialRepresentationFromCode))(rootEl);
@@ -1076,15 +1111,32 @@ function updateCitationDate(date, type) {
1076
1111
  function appendCitationDate(date, type) {
1077
1112
  return appendChildren(pipe(createElement('gmd:date'), createChild('gmd:CI_Date'), appendChildren(pipe(createElement('gmd:date'), writeDateTime(date)), pipe(createElement('gmd:dateType'), createChild('gmd:CI_DateTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#CI_DateTypeCode'), addAttribute('codeListValue', type)))));
1078
1113
  }
1079
- function removeKeywords(type) {
1080
- return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords'), filterArray(pipe(findNestedElement('gmd:MD_Keywords', 'gmd:type', 'gmd:MD_KeywordTypeCode'), readAttribute('codeListValue'),
1081
- // if a specific type is targeted, compare with it; otherwise remove keywords if they have no type defined
1082
- map((typeValue) => (type !== null ? type === typeValue : true))))));
1083
- }
1084
- function appendKeywords(keywords, type) {
1085
- return appendChildren(pipe(createElement('gmd:descriptiveKeywords'), createChild('gmd:MD_Keywords'), type !== null
1086
- ? appendChildren(pipe(createElement('gmd:type'), createChild('gmd:MD_KeywordTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'), addAttribute('codeListValue', type)))
1087
- : noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword))))));
1114
+ function removeKeywords() {
1115
+ return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')));
1116
+ }
1117
+ // returns a <gmd:thesaurusName> element
1118
+ function createThesaurus(thesaurus) {
1119
+ return pipe(createElement('gmd:thesaurusName'), createChild('gmd:CI_Citation'), appendChildren(pipe(createElement('gmd:title'), writeCharacterString(thesaurus.name || thesaurus.id)), pipe(createElement('gmd:identifier'), createChild('gmd:MD_Identifier'), appendChildren(pipe(createElement('gmd:code'), thesaurus.url
1120
+ ? writeAnchor(thesaurus.url, thesaurus.id)
1121
+ : writeCharacterString(thesaurus.id))))));
1122
+ }
1123
+ function appendKeywords(keywords) {
1124
+ const keywordsByThesaurus = keywords.reduce((acc, keyword) => {
1125
+ const thesaurusId = keyword.thesaurus?.id;
1126
+ const type = keyword.type;
1127
+ let existingGroup = acc.find((group) => group[0].thesaurus
1128
+ ? group[0].thesaurus.id === thesaurusId
1129
+ : group[0].type === type);
1130
+ if (!existingGroup) {
1131
+ existingGroup = [];
1132
+ acc.push(existingGroup);
1133
+ }
1134
+ existingGroup.push(keyword);
1135
+ return acc;
1136
+ }, []);
1137
+ return appendChildren(...keywordsByThesaurus.map((keywords) => pipe(createElement('gmd:descriptiveKeywords'), createChild('gmd:MD_Keywords'), appendChildren(pipe(createElement('gmd:type'), createChild('gmd:MD_KeywordTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'), addAttribute('codeListValue', keywords[0].type))), keywords[0].thesaurus
1138
+ ? appendChildren(createThesaurus(keywords[0].thesaurus))
1139
+ : noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword.label)))))));
1088
1140
  }
1089
1141
  function createConstraint(constraint, type) {
1090
1142
  if (type === 'security') {
@@ -1201,10 +1253,10 @@ function writeContacts(record, rootEl) {
1201
1253
  pipe(findOrCreateIdentification(), removeChildrenByName('gmd:pointOfContact'), appendChildren(...record.contacts.map((contact) => pipe(createElement('gmd:pointOfContact'), appendResponsibleParty(contact)))))(rootEl);
1202
1254
  }
1203
1255
  function writeKeywords(record, rootEl) {
1204
- pipe(findOrCreateIdentification(), removeKeywords(null), appendKeywords(record.keywords, null))(rootEl);
1256
+ pipe(findOrCreateIdentification(), removeKeywords(), appendKeywords(record.keywords))(rootEl);
1205
1257
  }
1206
- function writeThemes(record, rootEl) {
1207
- pipe(findOrCreateIdentification(), removeKeywords('theme'), appendKeywords(record.themes, 'theme'))(rootEl);
1258
+ function writeTopics(record, rootEl) {
1259
+ pipe(findOrCreateIdentification(), removeChildrenByName('gmd:topicCategory'), appendChildren(...record.topics.map((topic) => pipe(createElement('gmd:topicCategory'), createChild('gmd:MD_TopicCategoryCode'), setTextContent(topic)))))(rootEl);
1208
1260
  }
1209
1261
  function writeLicenses(record, rootEl) {
1210
1262
  pipe(findOrCreateIdentification(), removeLicenses(), appendChildren(...record.licenses.map(createLicense)))(rootEl);
@@ -1313,14 +1365,12 @@ function toModel(xml) {
1313
1365
  const recordUpdated = readRecordUpdated(rootEl);
1314
1366
  const recordCreated = recordUpdated;
1315
1367
  const keywords = readKeywords(rootEl);
1316
- const themes = readThemes(rootEl);
1368
+ const topics = readIsoTopics(rootEl);
1317
1369
  const legalConstraints = readLegalConstraints(rootEl);
1318
1370
  const otherConstraints = readOtherConstraints(rootEl);
1319
1371
  const securityConstraints = readSecurityConstraints(rootEl);
1320
1372
  const licenses = readLicenses(rootEl);
1321
1373
  const overviews = readOverviews(rootEl);
1322
- // not used yet
1323
- const isoTopics = readIsoTopics(rootEl);
1324
1374
  if (kind === 'dataset') {
1325
1375
  const status = readStatus(rootEl);
1326
1376
  const datasetCreated = readDatasetCreated(rootEl);
@@ -1343,7 +1393,7 @@ function toModel(xml) {
1343
1393
  contacts,
1344
1394
  contactsForResource: [],
1345
1395
  keywords,
1346
- themes,
1396
+ topics,
1347
1397
  licenses,
1348
1398
  legalConstraints,
1349
1399
  securityConstraints,
@@ -1371,7 +1421,7 @@ function toModel(xml) {
1371
1421
  ownerOrganization,
1372
1422
  contacts,
1373
1423
  keywords,
1374
- themes,
1424
+ topics,
1375
1425
  licenses,
1376
1426
  legalConstraints,
1377
1427
  securityConstraints,
@@ -1400,7 +1450,7 @@ function toXml(record, originalXml) {
1400
1450
  writeAbstract(record, rootEl);
1401
1451
  fieldChanged('contacts') && writeContacts(record, rootEl);
1402
1452
  fieldChanged('keywords') && writeKeywords(record, rootEl);
1403
- fieldChanged('themes') && writeThemes(record, rootEl);
1453
+ fieldChanged('topics') && writeTopics(record, rootEl);
1404
1454
  fieldChanged('legalConstraints') && writeLegalConstraints(record, rootEl);
1405
1455
  fieldChanged('securityConstraints') &&
1406
1456
  writeSecurityConstraints(record, rootEl);
@@ -1472,6 +1522,31 @@ const mapContact = (sourceContact, lang3) => {
1472
1522
  ...(phone && { phone }),
1473
1523
  };
1474
1524
  };
1525
+ const mapKeywords = (thesauri, language) => {
1526
+ const keywords = [];
1527
+ for (const thesaurusId in thesauri) {
1528
+ const rawThesaurus = thesauri[thesaurusId];
1529
+ let thesaurus = null;
1530
+ if (rawThesaurus.id) {
1531
+ const thesaurusSource = { ...rawThesaurus };
1532
+ const url = getAsUrl(selectField(thesaurusSource, 'link'));
1533
+ const name = selectField(thesaurusSource, 'title');
1534
+ thesaurus = {
1535
+ id: rawThesaurus.id,
1536
+ ...(name && { name }),
1537
+ ...(url && { url }),
1538
+ };
1539
+ }
1540
+ for (const keyword of rawThesaurus.keywords) {
1541
+ keywords.push({
1542
+ label: selectTranslatedValue(keyword, language),
1543
+ type: getKeywordTypeFromKeywordTypeCode(rawThesaurus.theme),
1544
+ ...(thesaurus && { thesaurus }),
1545
+ });
1546
+ }
1547
+ }
1548
+ return keywords;
1549
+ };
1475
1550
 
1476
1551
  /**
1477
1552
  * Custom HttpParameterCodec
@@ -16819,8 +16894,8 @@ var de = {
16819
16894
  "record.metadata.related": "Ähnliche Datensätze",
16820
16895
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
16821
16896
  "record.metadata.status": "",
16822
- "record.metadata.themes": "Kategorien",
16823
16897
  "record.metadata.title": "Titel",
16898
+ "record.metadata.topics": "Kategorien",
16824
16899
  "record.metadata.type": "Geographischer Datensatz",
16825
16900
  "record.metadata.uniqueId": "Eindeutige Kennung",
16826
16901
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
@@ -16856,6 +16931,7 @@ var de = {
16856
16931
  "search.filters.isSpatial": "Ist räumliche Daten",
16857
16932
  "search.filters.isSpatial.no": "nicht räumlich",
16858
16933
  "search.filters.isSpatial.yes": "räumlich",
16934
+ "search.filters.keyword": "Schlüsselwort",
16859
16935
  "search.filters.license": "Lizenz",
16860
16936
  "search.filters.license.cc-by": "Creative Commons CC-BY",
16861
16937
  "search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
@@ -17159,8 +17235,8 @@ var en = {
17159
17235
  "record.metadata.related": "Related records",
17160
17236
  "record.metadata.sheet": "Original metadata",
17161
17237
  "record.metadata.status": "Status",
17162
- "record.metadata.themes": "Categories",
17163
17238
  "record.metadata.title": "Title",
17239
+ "record.metadata.topics": "Categories",
17164
17240
  "record.metadata.type": "Geographical dataset",
17165
17241
  "record.metadata.uniqueId": "Unique Identifier",
17166
17242
  "record.metadata.updateFrequency": "Data Update Frequency",
@@ -17196,6 +17272,7 @@ var en = {
17196
17272
  "search.filters.isSpatial": "Is spatial data",
17197
17273
  "search.filters.isSpatial.no": "non spatial",
17198
17274
  "search.filters.isSpatial.yes": "spatial",
17275
+ "search.filters.keyword": "Keyword",
17199
17276
  "search.filters.license": "License",
17200
17277
  "search.filters.license.cc-by": "Creative Commons CC-BY",
17201
17278
  "search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
@@ -17499,8 +17576,8 @@ var es = {
17499
17576
  "record.metadata.related": "",
17500
17577
  "record.metadata.sheet": "",
17501
17578
  "record.metadata.status": "",
17502
- "record.metadata.themes": "",
17503
17579
  "record.metadata.title": "",
17580
+ "record.metadata.topics": "",
17504
17581
  "record.metadata.type": "",
17505
17582
  "record.metadata.uniqueId": "",
17506
17583
  "record.metadata.updateFrequency": "",
@@ -17536,6 +17613,7 @@ var es = {
17536
17613
  "search.filters.isSpatial": "",
17537
17614
  "search.filters.isSpatial.no": "",
17538
17615
  "search.filters.isSpatial.yes": "",
17616
+ "search.filters.keyword": "",
17539
17617
  "search.filters.license": "",
17540
17618
  "search.filters.license.cc-by": "",
17541
17619
  "search.filters.license.cc-by-sa": "",
@@ -17839,8 +17917,8 @@ var fr = {
17839
17917
  "record.metadata.related": "Voir aussi",
17840
17918
  "record.metadata.sheet": "Fiche de métadonnées d'origine",
17841
17919
  "record.metadata.status": "",
17842
- "record.metadata.themes": "Catégories",
17843
17920
  "record.metadata.title": "Titre",
17921
+ "record.metadata.topics": "Catégories",
17844
17922
  "record.metadata.type": "Donnée géographique",
17845
17923
  "record.metadata.uniqueId": "Identificateur de ressource unique",
17846
17924
  "record.metadata.updateFrequency": "Fréquence de mise à jour des données",
@@ -17876,6 +17954,7 @@ var fr = {
17876
17954
  "search.filters.isSpatial": "Données spatiales",
17877
17955
  "search.filters.isSpatial.no": "non-géolocalisées",
17878
17956
  "search.filters.isSpatial.yes": "géolocalisées",
17957
+ "search.filters.keyword": "Mot-clé",
17879
17958
  "search.filters.license": "Licence",
17880
17959
  "search.filters.license.cc-by": "cc-by",
17881
17960
  "search.filters.license.cc-by-sa": "cc-by-sa",
@@ -18179,8 +18258,8 @@ var it = {
18179
18258
  "record.metadata.related": "Vedi anche",
18180
18259
  "record.metadata.sheet": "Origine del metadata",
18181
18260
  "record.metadata.status": "",
18182
- "record.metadata.themes": "Categorie",
18183
18261
  "record.metadata.title": "Titolo",
18262
+ "record.metadata.topics": "Categorie",
18184
18263
  "record.metadata.type": "Dati geografici",
18185
18264
  "record.metadata.uniqueId": "Identificatore unico di risorsa",
18186
18265
  "record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
@@ -18216,6 +18295,7 @@ var it = {
18216
18295
  "search.filters.isSpatial": "Dati spaziali",
18217
18296
  "search.filters.isSpatial.no": "Non geolocalizzati",
18218
18297
  "search.filters.isSpatial.yes": "Geolocalizzati",
18298
+ "search.filters.keyword": "Parola chiave",
18219
18299
  "search.filters.license": "Licenza",
18220
18300
  "search.filters.license.cc-by": "cc-by",
18221
18301
  "search.filters.license.cc-by-sa": "cc-by-sa",
@@ -18519,8 +18599,8 @@ var nl = {
18519
18599
  "record.metadata.related": "",
18520
18600
  "record.metadata.sheet": "",
18521
18601
  "record.metadata.status": "",
18522
- "record.metadata.themes": "",
18523
18602
  "record.metadata.title": "",
18603
+ "record.metadata.topics": "",
18524
18604
  "record.metadata.type": "",
18525
18605
  "record.metadata.uniqueId": "",
18526
18606
  "record.metadata.updateFrequency": "",
@@ -18556,6 +18636,7 @@ var nl = {
18556
18636
  "search.filters.isSpatial": "",
18557
18637
  "search.filters.isSpatial.no": "",
18558
18638
  "search.filters.isSpatial.yes": "",
18639
+ "search.filters.keyword": "",
18559
18640
  "search.filters.license": "",
18560
18641
  "search.filters.license.cc-by": "",
18561
18642
  "search.filters.license.cc-by-sa": "",
@@ -18859,8 +18940,8 @@ var pt = {
18859
18940
  "record.metadata.related": "",
18860
18941
  "record.metadata.sheet": "",
18861
18942
  "record.metadata.status": "",
18862
- "record.metadata.themes": "",
18863
18943
  "record.metadata.title": "",
18944
+ "record.metadata.topics": "",
18864
18945
  "record.metadata.type": "",
18865
18946
  "record.metadata.uniqueId": "",
18866
18947
  "record.metadata.updateFrequency": "",
@@ -18896,6 +18977,7 @@ var pt = {
18896
18977
  "search.filters.isSpatial": "",
18897
18978
  "search.filters.isSpatial.no": "",
18898
18979
  "search.filters.isSpatial.yes": "",
18980
+ "search.filters.keyword": "",
18899
18981
  "search.filters.license": "",
18900
18982
  "search.filters.license.cc-by": "",
18901
18983
  "search.filters.license.cc-by-sa": "",
@@ -19004,8 +19086,8 @@ class Gn4FieldMapper {
19004
19086
  },
19005
19087
  cl_topic: (output, source) => ({
19006
19088
  ...output,
19007
- themes: [
19008
- ...(output.themes || []),
19089
+ topics: [
19090
+ ...(output.topics || []),
19009
19091
  ...getAsArray(selectField(source, 'cl_topic')).map((topic) => selectTranslatedValue(topic, this.lang3)),
19010
19092
  ],
19011
19093
  }),
@@ -19060,14 +19142,14 @@ class Gn4FieldMapper {
19060
19142
  catalogUuid: selectFallback(selectField(source, 'sourceCatalogue'), 'no title'),
19061
19143
  }, output);
19062
19144
  },
19063
- tag: (output, source) => ({
19145
+ allKeywords: (output, source) => ({
19064
19146
  ...output,
19065
- keywords: getAsArray(selectField(source, 'tag')).map((tag) => selectTranslatedValue(tag, this.lang3)),
19147
+ keywords: mapKeywords(selectField(source, 'allKeywords'), this.lang3),
19066
19148
  }),
19067
19149
  inspireTheme: (output, source) => ({
19068
19150
  ...output,
19069
- themes: [
19070
- ...(output.themes || []),
19151
+ topics: [
19152
+ ...(output.topics || []),
19071
19153
  ...getAsArray(selectField(source, 'inspireTheme_syn')),
19072
19154
  ],
19073
19155
  }),
@@ -19287,7 +19369,7 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
19287
19369
  contacts: [],
19288
19370
  contactsForResource: [],
19289
19371
  keywords: [],
19290
- themes: [],
19372
+ topics: [],
19291
19373
  spatialExtents: [],
19292
19374
  temporalExtents: [],
19293
19375
  overviews: [],
@@ -20055,11 +20137,18 @@ class OrganizationsFromMetadataService {
20055
20137
  if (!allContactOrgs.length)
20056
20138
  return of(record);
20057
20139
  const ownerOrganization = allContactOrgs[0];
20058
- return this.organisations$.pipe(takeLast(1), map$1((organisations) => {
20140
+ // read the owner group as well to have a fallback logo
20141
+ const groupId = selectField(source, 'groupOwner');
20142
+ const group$ = this.groups$.pipe(map$1((groups) => groups.find((group) => {
20143
+ return group.id === Number(groupId);
20144
+ })));
20145
+ return this.organisations$.pipe(takeLast(1), withLatestFrom(group$), map$1(([organisations, group]) => {
20059
20146
  const recordOrganisation = organisations.filter((org) => org.name === ownerOrganization.name)[0];
20147
+ const logoUrl = group?.logo && getAsUrl(`${IMAGE_URL$1}${group.logo}`);
20060
20148
  return {
20061
20149
  ...record,
20062
20150
  ownerOrganization: {
20151
+ logoUrl,
20063
20152
  ...ownerOrganization,
20064
20153
  ...recordOrganisation,
20065
20154
  },
@@ -20370,12 +20459,21 @@ class Gn4PlatformMapper {
20370
20459
  const { enabled, emailAddresses, organisation, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
20371
20460
  return { ...apiUser, id: id.toString() };
20372
20461
  }
20373
- thesaurusFromApi(thesaurus) {
20462
+ thesaurusFromApi(thesaurus, lang3) {
20374
20463
  return thesaurus.map((keyword) => {
20375
- const { uri, value } = keyword;
20464
+ let key = keyword.uri;
20465
+ // sometines GN can prefix an URI with an "all thesaurus" URI; only keep the last one
20466
+ if (key.indexOf('@@@') > -1) {
20467
+ key = key.split('@@@')[1];
20468
+ }
20469
+ const label = lang3 && lang3 in keyword.values ? keyword.values[lang3] : keyword.value;
20470
+ const description = lang3 && lang3 in keyword.definitions
20471
+ ? keyword.definitions[lang3]
20472
+ : keyword.definition;
20376
20473
  return {
20377
- key: uri,
20378
- label: value,
20474
+ key,
20475
+ label,
20476
+ description,
20379
20477
  };
20380
20478
  });
20381
20479
  }
@@ -20388,13 +20486,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
20388
20486
 
20389
20487
  const minApiVersion = '4.2.2';
20390
20488
  class Gn4PlatformService {
20391
- constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService) {
20489
+ constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService) {
20392
20490
  this.siteApiService = siteApiService;
20393
20491
  this.meApi = meApi;
20394
20492
  this.usersApi = usersApi;
20395
20493
  this.mapper = mapper;
20396
20494
  this.toolsApiService = toolsApiService;
20397
20495
  this.registriesApiService = registriesApiService;
20496
+ this.langService = langService;
20398
20497
  this.type = 'GeoNetwork';
20399
20498
  this.keyTranslations$ = this.toolsApiService
20400
20499
  .getTranslationsPackage1('gnui')
@@ -20408,6 +20507,11 @@ class Gn4PlatformService {
20408
20507
  throw new Error(`Gn4 API version is not compatible.\nMinimum: ${minApiVersion}\nYour version: ${version}`);
20409
20508
  }
20410
20509
  }), shareReplay(1));
20510
+ /**
20511
+ * A map of already loaded thesauri (groups of keywords); the key is a URI
20512
+ * @private
20513
+ */
20514
+ this.thesauri = {};
20411
20515
  this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
20412
20516
  this.isAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
20413
20517
  this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay());
@@ -20434,19 +20538,36 @@ class Gn4PlatformService {
20434
20538
  return this.users$;
20435
20539
  }
20436
20540
  translateKey(key) {
20541
+ // if the key is a URI, use the registries API to look for the translation
20542
+ if (key.match(/^https?:\/\//)) {
20543
+ // the thesaurus URI is inferred by removing a part of the keyword URI
20544
+ // this is not exact science but it's OK, we'll still end up loading a bunch of keywords at once anyway
20545
+ const thesaurusUri = key.replace(/\/([^/]+)$/, '/');
20546
+ return this.getThesaurusByUri(thesaurusUri).pipe(map$1((thesaurus) => {
20547
+ for (const item of thesaurus) {
20548
+ if (item.key === key)
20549
+ return item.label;
20550
+ }
20551
+ return key;
20552
+ }));
20553
+ }
20437
20554
  return this.keyTranslations$.pipe(map$1((translations) => translations[key]));
20438
20555
  }
20439
- getThesaurusByLang(thesaurusName, lang) {
20440
- return this.registriesApiService
20441
- .searchKeywords(null, lang, 1000, 0, null, [thesaurusName])
20442
- .pipe(map$1((thesaurus) => this.mapper.thesaurusFromApi(thesaurus)));
20556
+ getThesaurusByUri(uri) {
20557
+ if (this.thesauri[uri]) {
20558
+ return this.thesauri[uri];
20559
+ }
20560
+ this.thesauri[uri] = this.registriesApiService
20561
+ .searchKeywords(null, this.langService.iso3, 1000, 0, null, null, null, `${uri}*`)
20562
+ .pipe(map$1((thesaurus) => this.mapper.thesaurusFromApi(thesaurus, this.langService.iso3)), shareReplay(1));
20563
+ return this.thesauri[uri];
20443
20564
  }
20444
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
20565
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, deps: [{ token: SiteApiService }, { token: MeApiService }, { token: UsersApiService }, { token: Gn4PlatformMapper }, { token: ToolsApiService }, { token: RegistriesApiService }, { token: LangService }], target: i0.ɵɵFactoryTarget.Injectable }); }
20445
20566
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService }); }
20446
20567
  }
20447
20568
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, decorators: [{
20448
20569
  type: Injectable
20449
- }], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }]; } });
20570
+ }], ctorParameters: function () { return [{ type: SiteApiService }, { type: MeApiService }, { type: UsersApiService }, { type: Gn4PlatformMapper }, { type: ToolsApiService }, { type: RegistriesApiService }, { type: LangService }]; } });
20450
20571
 
20451
20572
  function provideGn4() {
20452
20573
  return [
@@ -22524,6 +22645,9 @@ class MapContextService {
22524
22645
  if (mapConfig) {
22525
22646
  mapContext = this.mergeMapConfigWithContext(mapContext, mapConfig);
22526
22647
  }
22648
+ else {
22649
+ mapContext.layers = this.addDefaultBaselayerContext(mapContext.layers);
22650
+ }
22527
22651
  if (!mapContext.view?.extent &&
22528
22652
  (!mapContext.view?.center || !mapContext.view?.zoom)) {
22529
22653
  mapContext.view = this.getFallbackView(mapConfig);
@@ -22634,6 +22758,11 @@ class MapContextService {
22634
22758
  }
22635
22759
  return view;
22636
22760
  }
22761
+ addDefaultBaselayerContext(layers) {
22762
+ return layers.includes(DEFAULT_BASELAYER_CONTEXT)
22763
+ ? layers
22764
+ : [DEFAULT_BASELAYER_CONTEXT, ...layers];
22765
+ }
22637
22766
  mergeMapConfigWithContext(mapContext, mapConfig) {
22638
22767
  return {
22639
22768
  ...mapContext,
@@ -23312,8 +23441,7 @@ class MetadataQualityComponent {
23312
23441
  : this.calculatedQualityScore;
23313
23442
  }
23314
23443
  get calculatedQualityScore() {
23315
- return Math.round((this.items.filter(({ value }) => value === true).length * 100) /
23316
- this.items.length);
23444
+ return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
23317
23445
  }
23318
23446
  showMenu() {
23319
23447
  this.isMenuShown = true;
@@ -23331,7 +23459,7 @@ class MetadataQualityComponent {
23331
23459
  this.items = [];
23332
23460
  this.add('title', !!this.metadata?.title);
23333
23461
  this.add('description', !!this.metadata?.abstract);
23334
- this.add('topic', this.metadata?.themes?.length > 0);
23462
+ this.add('topic', this.metadata?.topics?.length > 0);
23335
23463
  this.add('keywords', this.metadata?.keywords?.length > 0);
23336
23464
  this.add('legalConstraints', this.metadata?.legalConstraints?.length > 0);
23337
23465
  this.add('organisation', !!contact?.organization);
@@ -23779,6 +23907,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23779
23907
  type: Input
23780
23908
  }] } });
23781
23909
 
23910
+ class MarkdownParserComponent {
23911
+ get parsedMarkdown() {
23912
+ return marked.parse(this.textContent);
23913
+ }
23914
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23915
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, isStandalone: true, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23916
+ }
23917
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
23918
+ type: Component,
23919
+ args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
23920
+ }], propDecorators: { textContent: [{
23921
+ type: Input
23922
+ }] } });
23923
+
23782
23924
  class ContentGhostComponent {
23783
23925
  constructor() {
23784
23926
  this.ghostClass = '';
@@ -23933,20 +24075,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23933
24075
  args: ['container']
23934
24076
  }] } });
23935
24077
 
23936
- class MarkdownParserComponent {
23937
- get parsedMarkdown() {
23938
- return marked.parse(this.textContent);
23939
- }
23940
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23941
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23942
- }
23943
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
23944
- type: Component,
23945
- args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
23946
- }], propDecorators: { textContent: [{
23947
- type: Input
23948
- }] } });
23949
-
23950
24078
  class MetadataInfoComponent {
23951
24079
  constructor() {
23952
24080
  this.keyword = new EventEmitter();
@@ -24001,11 +24129,11 @@ class MetadataInfoComponent {
24001
24129
  this.keyword.emit(keyword);
24002
24130
  }
24003
24131
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24004
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24132
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24005
24133
  }
24006
24134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
24007
24135
  type: Component,
24008
- args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
24136
+ args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
24009
24137
  }], propDecorators: { metadata: [{
24010
24138
  type: Input
24011
24139
  }], incomplete: [{
@@ -24074,11 +24202,11 @@ class ButtonComponent {
24074
24202
  propagateToDocumentOnly(event);
24075
24203
  }
24076
24204
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24077
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24205
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, isStandalone: true, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24078
24206
  }
24079
24207
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
24080
24208
  type: Component,
24081
- args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
24209
+ args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
24082
24210
  }], propDecorators: { type: [{
24083
24211
  type: Input
24084
24212
  }], disabled: [{
@@ -25080,11 +25208,11 @@ class TextAreaComponent {
25080
25208
  this.rawChange.next(value);
25081
25209
  }
25082
25210
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25083
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: { value: "value", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
25211
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: TextAreaComponent, isStandalone: true, selector: "gn-ui-text-area", inputs: { value: "value", placeholder: "placeholder", required: "required" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "input", first: true, predicate: ["input"], descendants: true }], ngImport: i0, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }); }
25084
25212
  }
25085
25213
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, decorators: [{
25086
25214
  type: Component,
25087
- args: [{ selector: 'gn-ui-text-area', template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
25215
+ args: [{ selector: 'gn-ui-text-area', standalone: true, template: "<div class=\"h-full flex\">\n <textarea\n #input\n name=\"textArea\"\n [placeholder]=\"placeholder\"\n [value]=\"value\"\n (change)=\"handleChange($event)\"\n (input)=\"handleChange($event)\"\n class=\"w-full pt-2 pl-2 resize-none border border-gray-800 rounded italic leading-tight focus:outline-none focus:bg-background focus:border-primary\"\n [attr.required]=\"required || null\"\n ></textarea>\n</div>\n", styles: [".invalid{border-color:var(--color-secondary)}\n"] }]
25088
25216
  }], propDecorators: { value: [{
25089
25217
  type: Input
25090
25218
  }], placeholder: [{
@@ -25672,10 +25800,8 @@ class UiInputsModule {
25672
25800
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
25673
25801
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
25674
25802
  AutocompleteComponent,
25675
- ButtonComponent,
25676
25803
  TextInputComponent,
25677
25804
  DragAndDropFileInputComponent,
25678
- TextAreaComponent,
25679
25805
  ChipsInputComponent,
25680
25806
  NavigationButtonComponent,
25681
25807
  StarToggleComponent,
@@ -25708,7 +25834,9 @@ class UiInputsModule {
25708
25834
  MatInputModule,
25709
25835
  MatDatepickerModule,
25710
25836
  MatNativeDateModule,
25711
- EditableLabelDirective], exports: [DropdownSelectorComponent,
25837
+ EditableLabelDirective,
25838
+ TextAreaComponent,
25839
+ ButtonComponent], exports: [DropdownSelectorComponent,
25712
25840
  AutocompleteComponent,
25713
25841
  ButtonComponent,
25714
25842
  TextInputComponent,
@@ -25750,10 +25878,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25750
25878
  declarations: [
25751
25879
  DropdownSelectorComponent,
25752
25880
  AutocompleteComponent,
25753
- ButtonComponent,
25754
25881
  TextInputComponent,
25755
25882
  DragAndDropFileInputComponent,
25756
- TextAreaComponent,
25757
25883
  ChipsInputComponent,
25758
25884
  NavigationButtonComponent,
25759
25885
  StarToggleComponent,
@@ -25792,6 +25918,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25792
25918
  MatDatepickerModule,
25793
25919
  MatNativeDateModule,
25794
25920
  EditableLabelDirective,
25921
+ TextAreaComponent,
25922
+ ButtonComponent,
25795
25923
  ],
25796
25924
  exports: [
25797
25925
  DropdownSelectorComponent,
@@ -26013,7 +26141,6 @@ class UiElementsModule {
26013
26141
  PaginationButtonsComponent,
26014
26142
  MaxLinesComponent,
26015
26143
  RecordApiFormComponent,
26016
- MarkdownParserComponent,
26017
26144
  ImageOverlayPreviewComponent], imports: [CommonModule,
26018
26145
  MatIconModule,
26019
26146
  MatTooltipModule,
@@ -26022,7 +26149,8 @@ class UiElementsModule {
26022
26149
  RouterModule,
26023
26150
  UiInputsModule,
26024
26151
  FormsModule,
26025
- NgOptimizedImage], exports: [MetadataInfoComponent,
26152
+ NgOptimizedImage,
26153
+ MarkdownParserComponent], exports: [MetadataInfoComponent,
26026
26154
  ContentGhostComponent,
26027
26155
  DownloadItemComponent,
26028
26156
  DownloadsListComponent,
@@ -26069,6 +26197,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26069
26197
  UiInputsModule,
26070
26198
  FormsModule,
26071
26199
  NgOptimizedImage,
26200
+ MarkdownParserComponent,
26072
26201
  ],
26073
26202
  declarations: [
26074
26203
  MetadataInfoComponent,
@@ -26091,7 +26220,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26091
26220
  PaginationButtonsComponent,
26092
26221
  MaxLinesComponent,
26093
26222
  RecordApiFormComponent,
26094
- MarkdownParserComponent,
26095
26223
  ImageOverlayPreviewComponent,
26096
26224
  ],
26097
26225
  exports: [
@@ -27730,10 +27858,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
27730
27858
  class AbstractSearchField {
27731
27859
  }
27732
27860
  class SimpleSearchField {
27733
- constructor(esFieldName, order = 'asc', injector) {
27861
+ constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
27734
27862
  this.esFieldName = esFieldName;
27735
- this.order = order;
27736
27863
  this.injector = injector;
27864
+ this.order = order;
27865
+ this.orderType = orderType;
27737
27866
  this.repository = this.injector.get(RecordsRepositoryInterface);
27738
27867
  // FIXME: this is required to register runtime fields; abstract this as well
27739
27868
  this.esService = this.injector.get(ElasticsearchService);
@@ -27744,12 +27873,12 @@ class SimpleSearchField {
27744
27873
  type: 'terms',
27745
27874
  field: this.esFieldName,
27746
27875
  limit: 1000,
27747
- sort: [this.order, 'key'],
27876
+ sort: [this.order, this.orderType],
27748
27877
  },
27749
27878
  };
27750
27879
  }
27751
27880
  async getBucketLabel(bucket) {
27752
- return bucket.term;
27881
+ return bucket.term.toString();
27753
27882
  }
27754
27883
  getAvailableValues() {
27755
27884
  return this.repository.aggregate(this.getAggregations()).pipe(map$1((response) => response[this.esFieldName].buckets || []), switchMap((buckets) => {
@@ -27777,9 +27906,13 @@ class SimpleSearchField {
27777
27906
  return of(values);
27778
27907
  }
27779
27908
  }
27780
- class KeySearchField extends SimpleSearchField {
27781
- constructor() {
27782
- super(...arguments);
27909
+ class TranslatedSearchField extends SimpleSearchField {
27910
+ constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
27911
+ super(esFieldName, injector, order, orderType);
27912
+ this.esFieldName = esFieldName;
27913
+ this.injector = injector;
27914
+ this.order = order;
27915
+ this.orderType = orderType;
27783
27916
  this.platformService = this.injector.get(PlatformServiceInterface);
27784
27917
  }
27785
27918
  async getTranslation(key) {
@@ -27789,26 +27922,36 @@ class KeySearchField extends SimpleSearchField {
27789
27922
  return (await this.getTranslation(bucket.term)) || bucket.term;
27790
27923
  }
27791
27924
  getAvailableValues() {
27925
+ if (this.orderType === 'count')
27926
+ return super.getAvailableValues();
27792
27927
  // sort values by alphabetical order
27793
27928
  return super
27794
27929
  .getAvailableValues()
27795
27930
  .pipe(map$1((values) => values.sort((a, b) => new Intl.Collator().compare(a.label, b.label))));
27796
27931
  }
27797
27932
  }
27798
- class ThesaurusField extends KeySearchField {
27799
- constructor(esFieldName, thesaurusName, order = 'asc', injector) {
27800
- super(esFieldName, order, injector);
27801
- this.thesaurusName = thesaurusName;
27933
+ /**
27934
+ * This search field will either target the `.default` field, or a specific `.langxyz` field according
27935
+ * to the defined METADATA_LANGUAGE token
27936
+ * The provided ES field name should not include any prefix such as `.langeng`
27937
+ */
27938
+ class MultilingualSearchField extends SimpleSearchField {
27939
+ constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
27940
+ super(esFieldName, injector, order, orderType);
27941
+ this.esFieldName = esFieldName;
27942
+ this.injector = injector;
27943
+ this.order = order;
27944
+ this.orderType = orderType;
27802
27945
  this.langService = this.injector.get(LangService);
27803
- this.thesaurus$ = this.platformService
27804
- .getThesaurusByLang(this.thesaurusName, this.langService.iso3)
27805
- .pipe(catchError(() => {
27806
- console.warn('Error while loading thesaurus language package');
27807
- return of([]);
27808
- }), shareReplay(1));
27809
- }
27810
- async getTranslation(key) {
27811
- return firstValueFrom(this.thesaurus$.pipe(map$1((thesaurus) => thesaurus.find((keyword) => keyword.key === key)?.label)));
27946
+ this.searchLanguage = this.injector.get(METADATA_LANGUAGE, null);
27947
+ // note: we're excluding the metadata language "current" value because that would produce
27948
+ // permalinks that might not work for different users
27949
+ if (this.searchLanguage && this.searchLanguage !== 'current') {
27950
+ this.esFieldName += `.lang${this.searchLanguage}`;
27951
+ }
27952
+ else {
27953
+ this.esFieldName += '.default';
27954
+ }
27812
27955
  }
27813
27956
  }
27814
27957
  class FullTextSearchField {
@@ -27828,7 +27971,7 @@ marker('search.filters.isSpatial.yes');
27828
27971
  marker('search.filters.isSpatial.no');
27829
27972
  class IsSpatialSearchField extends SimpleSearchField {
27830
27973
  constructor(injector) {
27831
- super('isSpatial', 'asc', injector);
27974
+ super('isSpatial', injector, 'asc');
27832
27975
  this.translateService = this.injector.get(TranslateService);
27833
27976
  this.esService.registerRuntimeField('isSpatial', `String result = 'no';
27834
27977
  String formats = doc.format.join('|').toLowerCase();
@@ -27878,7 +28021,7 @@ marker('search.filters.license.unknown');
27878
28021
  // Note: values are inspired from https://doc.data.gouv.fr/moissonnage/licences/
27879
28022
  class LicenseSearchField extends SimpleSearchField {
27880
28023
  constructor(injector) {
27881
- super('license', 'asc', injector);
28024
+ super('license', injector, 'asc');
27882
28025
  this.translateService = this.injector.get(TranslateService);
27883
28026
  this.esService.registerRuntimeField('license', `String raw = '';
27884
28027
  if (doc.containsKey('licenseObject.default.keyword') && doc['licenseObject.default.keyword'].length > 0)
@@ -27962,7 +28105,7 @@ class OrganizationSearchField {
27962
28105
  }
27963
28106
  class OwnerSearchField extends SimpleSearchField {
27964
28107
  constructor(injector) {
27965
- super('owner', 'asc', injector);
28108
+ super('owner', injector, 'asc');
27966
28109
  }
27967
28110
  getAvailableValues() {
27968
28111
  return of([]);
@@ -27971,6 +28114,7 @@ class OwnerSearchField extends SimpleSearchField {
27971
28114
 
27972
28115
  marker('search.filters.format');
27973
28116
  marker('search.filters.inspireKeyword');
28117
+ marker('search.filters.keyword');
27974
28118
  marker('search.filters.isSpatial');
27975
28119
  marker('search.filters.license');
27976
28120
  marker('search.filters.publicationYear');
@@ -27988,13 +28132,14 @@ class FieldsService {
27988
28132
  this.injector = injector;
27989
28133
  this.fields = {
27990
28134
  publisher: new OrganizationSearchField(this.injector),
27991
- format: new SimpleSearchField('format', 'asc', this.injector),
27992
- resourceType: new KeySearchField('resourceType', 'asc', this.injector),
27993
- representationType: new KeySearchField('cl_spatialRepresentationType.key', 'asc', this.injector),
27994
- publicationYear: new SimpleSearchField('publicationYearForResource', 'desc', this.injector),
27995
- topic: new KeySearchField('cl_topic.key', 'asc', this.injector),
27996
- inspireKeyword: new ThesaurusField('th_httpinspireeceuropaeutheme-theme.link', 'external.theme.httpinspireeceuropaeutheme-theme', 'asc', this.injector),
27997
- documentStandard: new SimpleSearchField('documentStandard', 'asc', this.injector),
28135
+ format: new SimpleSearchField('format', this.injector, 'asc'),
28136
+ resourceType: new TranslatedSearchField('resourceType', this.injector, 'asc'),
28137
+ representationType: new TranslatedSearchField('cl_spatialRepresentationType.key', this.injector, 'asc'),
28138
+ publicationYear: new SimpleSearchField('publicationYearForResource', this.injector, 'desc'),
28139
+ topic: new TranslatedSearchField('cl_topic.key', this.injector, 'asc'),
28140
+ inspireKeyword: new TranslatedSearchField('th_httpinspireeceuropaeutheme-theme.link', this.injector, 'asc'),
28141
+ keyword: new MultilingualSearchField('tag', this.injector, 'desc', 'count'),
28142
+ documentStandard: new SimpleSearchField('documentStandard', this.injector, 'asc'),
27998
28143
  isSpatial: new IsSpatialSearchField(this.injector),
27999
28144
  q: new FullTextSearchField(),
28000
28145
  license: new LicenseSearchField(this.injector),
@@ -32223,5 +32368,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
32223
32368
  * Generated bundle index. Do not edit.
32224
32369
  */
32225
32370
 
32226
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
32371
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
32227
32372
  //# sourceMappingURL=geonetwork-ui.mjs.map