geonetwork-ui 2.2.0-dev.5b8d393f → 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 (194) 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 +49 -58
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +5 -4
  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 +20 -17
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +52 -23
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +52 -32
  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/search/aggregation.model.mjs +1 -1
  14. package/esm2022/libs/common/domain/src/lib/model/search/field.model.mjs +2 -0
  15. package/esm2022/libs/common/domain/src/lib/model/search/filter.model.mjs +1 -1
  16. package/esm2022/libs/common/domain/src/lib/model/search/index.mjs +2 -1
  17. package/esm2022/libs/common/domain/src/lib/model/search/search.model.mjs +1 -1
  18. package/esm2022/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.mjs +1 -1
  19. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  20. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +9 -1
  21. package/esm2022/libs/feature/record/src/lib/state/mdview.reducer.mjs +2 -2
  22. package/esm2022/libs/feature/search/src/index.mjs +3 -1
  23. package/esm2022/libs/feature/search/src/lib/feature-search.module.mjs +2 -6
  24. package/esm2022/libs/feature/search/src/lib/filter-geometry.token.mjs +4 -0
  25. package/esm2022/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.mjs +7 -3
  26. package/esm2022/libs/feature/search/src/lib/record-url.token.mjs +4 -0
  27. package/esm2022/libs/feature/search/src/lib/results-list/results-list.container.component.mjs +2 -2
  28. package/esm2022/libs/feature/search/src/lib/results-table/results-table.component.mjs +3 -4
  29. package/esm2022/libs/feature/search/src/lib/state/effects.mjs +2 -2
  30. package/esm2022/libs/feature/search/src/lib/state/search.facade.mjs +3 -2
  31. package/esm2022/libs/feature/search/src/lib/utils/service/fields.mjs +41 -26
  32. package/esm2022/libs/feature/search/src/lib/utils/service/fields.service.mjs +11 -9
  33. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
  34. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +35 -22
  35. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +3 -4
  36. package/esm2022/libs/ui/elements/src/lib/record-api-form/record-api-form.component.mjs +9 -6
  37. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +4 -4
  38. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +3 -3
  39. package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
  40. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +6 -6
  41. package/esm2022/libs/util/i18n/src/index.mjs +1 -2
  42. package/esm2022/translations/de.json +7 -5
  43. package/esm2022/translations/en.json +10 -8
  44. package/esm2022/translations/es.json +7 -5
  45. package/esm2022/translations/fr.json +9 -7
  46. package/esm2022/translations/it.json +9 -7
  47. package/esm2022/translations/nl.json +7 -5
  48. package/esm2022/translations/pt.json +7 -5
  49. package/fesm2022/geonetwork-ui.mjs +448 -396
  50. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  51. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +2 -0
  52. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  53. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts +0 -1
  54. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  55. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
  56. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +3 -5
  57. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  58. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts +3 -0
  59. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
  60. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
  61. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +6 -6
  62. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  63. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +4 -3
  64. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  65. package/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.d.ts.map +1 -1
  66. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts +1 -1
  67. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  68. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +9 -2
  69. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  70. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +18 -12
  71. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  72. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts +1 -1
  73. package/libs/common/domain/src/lib/model/search/aggregation.model.d.ts.map +1 -1
  74. package/libs/common/domain/src/lib/model/search/field.model.d.ts +2 -0
  75. package/libs/common/domain/src/lib/model/search/field.model.d.ts.map +1 -0
  76. package/libs/common/domain/src/lib/model/search/filter.model.d.ts +1 -1
  77. package/libs/common/domain/src/lib/model/search/filter.model.d.ts.map +1 -1
  78. package/libs/common/domain/src/lib/model/search/index.d.ts +1 -0
  79. package/libs/common/domain/src/lib/model/search/index.d.ts.map +1 -1
  80. package/libs/common/domain/src/lib/model/search/search.model.d.ts +1 -1
  81. package/libs/common/domain/src/lib/model/search/search.model.d.ts.map +1 -1
  82. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts +1 -0
  83. package/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.d.ts.map +1 -1
  84. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
  85. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  86. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
  87. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
  88. package/libs/feature/search/src/index.d.ts +2 -0
  89. package/libs/feature/search/src/index.d.ts.map +1 -1
  90. package/libs/feature/search/src/lib/feature-search.module.d.ts +0 -4
  91. package/libs/feature/search/src/lib/feature-search.module.d.ts.map +1 -1
  92. package/libs/feature/search/src/lib/filter-geometry.token.d.ts +4 -0
  93. package/libs/feature/search/src/lib/filter-geometry.token.d.ts.map +1 -0
  94. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts +1 -1
  95. package/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.d.ts.map +1 -1
  96. package/libs/feature/search/src/lib/record-url.token.d.ts +3 -0
  97. package/libs/feature/search/src/lib/record-url.token.d.ts.map +1 -0
  98. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts +0 -1
  99. package/libs/feature/search/src/lib/results-table/results-table.component.d.ts.map +1 -1
  100. package/libs/feature/search/src/lib/state/search.facade.d.ts +1 -1
  101. package/libs/feature/search/src/lib/state/search.facade.d.ts.map +1 -1
  102. package/libs/feature/search/src/lib/utils/service/fields.d.ts +21 -8
  103. package/libs/feature/search/src/lib/utils/service/fields.d.ts.map +1 -1
  104. package/libs/feature/search/src/lib/utils/service/fields.service.d.ts.map +1 -1
  105. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +1 -1
  106. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -1
  107. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +10 -6
  108. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  109. package/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.d.ts.map +1 -1
  110. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts +3 -1
  111. package/libs/ui/elements/src/lib/record-api-form/record-api-form.component.d.ts.map +1 -1
  112. package/libs/ui/elements/src/lib/ui-elements.module.d.ts +13 -13
  113. package/libs/ui/inputs/src/lib/button/button.component.d.ts +1 -1
  114. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  115. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
  116. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
  117. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +40 -40
  118. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +1 -1
  119. package/libs/util/i18n/src/index.d.ts +0 -1
  120. package/libs/util/i18n/src/index.d.ts.map +1 -1
  121. package/package.json +2 -2
  122. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +61 -8
  123. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +55 -9
  124. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +225 -24
  125. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +29 -0
  126. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +80 -73
  127. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +4 -3
  128. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +3 -5
  129. package/src/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.ts +16 -0
  130. package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +24 -21
  131. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +115 -62
  132. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +169 -95
  133. package/src/libs/api/repository/src/lib/gn4/organizations/organizations-from-metadata.service.ts +22 -2
  134. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +15 -4
  135. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +47 -8
  136. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +21 -14
  137. package/src/libs/common/domain/src/lib/model/search/aggregation.model.ts +1 -1
  138. package/src/libs/common/domain/src/lib/model/search/field.model.ts +1 -0
  139. package/src/libs/common/domain/src/lib/model/search/filter.model.ts +1 -1
  140. package/src/libs/common/domain/src/lib/model/search/index.ts +1 -0
  141. package/src/libs/common/domain/src/lib/model/search/search.model.ts +1 -1
  142. package/src/libs/common/domain/src/lib/model/thesaurus/thesaurus.model.ts +1 -0
  143. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -4
  144. package/src/libs/common/fixtures/src/lib/gn4/groups.fixtures.ts +1 -1
  145. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +25 -5
  146. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +10 -0
  147. package/src/libs/feature/record/src/lib/state/mdview.reducer.ts +1 -1
  148. package/src/libs/feature/search/src/index.ts +2 -0
  149. package/src/libs/feature/search/src/lib/feature-search.module.ts +1 -10
  150. package/src/libs/feature/search/src/lib/filter-geometry.token.ts +7 -0
  151. package/src/libs/feature/search/src/lib/fuzzy-search/fuzzy-search.component.ts +9 -3
  152. package/src/libs/feature/search/src/lib/record-url.token.ts +4 -0
  153. package/src/libs/feature/search/src/lib/results-list/results-list.container.component.ts +1 -1
  154. package/src/libs/feature/search/src/lib/results-table/results-table.component.html +104 -127
  155. package/src/libs/feature/search/src/lib/results-table/results-table.component.ts +0 -1
  156. package/src/libs/feature/search/src/lib/state/effects.ts +1 -1
  157. package/src/libs/feature/search/src/lib/state/search.facade.ts +2 -1
  158. package/src/libs/feature/search/src/lib/utils/service/fields.service.ts +21 -16
  159. package/src/libs/feature/search/src/lib/utils/service/fields.ts +43 -34
  160. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
  161. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
  162. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
  163. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.css +2 -2
  164. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +1 -0
  165. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +50 -23
  166. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +37 -15
  167. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +2 -3
  168. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.html +5 -5
  169. package/src/libs/ui/elements/src/lib/record-api-form/record-api-form.component.ts +12 -4
  170. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +1 -1
  171. package/src/libs/ui/inputs/src/lib/button/button.component.ts +1 -0
  172. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
  173. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +2 -2
  174. package/src/libs/util/i18n/src/index.ts +0 -1
  175. package/translations/de.json +7 -5
  176. package/translations/en.json +10 -8
  177. package/translations/es.json +7 -5
  178. package/translations/fr.json +9 -7
  179. package/translations/it.json +9 -7
  180. package/translations/nl.json +7 -5
  181. package/translations/pt.json +7 -5
  182. package/translations/sk.json +7 -5
  183. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.loader.mjs +0 -24
  184. package/esm2022/libs/util/i18n/src/lib/testing/test.translate.module.mjs +0 -109
  185. package/esm2022/libs/util/i18n/src/lib/testing/translations.model.mjs +0 -6
  186. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts +0 -17
  187. package/libs/util/i18n/src/lib/testing/test.translate.loader.d.ts.map +0 -1
  188. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts +0 -131
  189. package/libs/util/i18n/src/lib/testing/test.translate.module.d.ts.map +0 -1
  190. package/libs/util/i18n/src/lib/testing/translations.model.d.ts +0 -21
  191. package/libs/util/i18n/src/lib/testing/translations.model.d.ts.map +0 -1
  192. package/src/libs/util/i18n/src/lib/testing/test.translate.loader.ts +0 -26
  193. package/src/libs/util/i18n/src/lib/testing/test.translate.module.ts +0 -235
  194. package/src/libs/util/i18n/src/lib/testing/translations.model.ts +0 -28
@@ -5,10 +5,10 @@ import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Compo
5
5
  import * as i1 from '@angular/common/http';
6
6
  import { HttpHeaders, HttpParams, HttpClient, HttpClientModule, HTTP_INTERCEPTORS, HttpClientXsrfModule } from '@angular/common/http';
7
7
  import * as i1$1 from '@ngx-translate/core';
8
- import { TranslateCompiler, TranslateLoader, TranslateModule, TranslateService, TranslateFakeCompiler, TranslateDefaultParser, FakeMissingTranslationHandler } from '@ngx-translate/core';
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
  }
@@ -649,28 +663,32 @@ function extractStatus() {
649
663
  return pipe(findChildElement('gmd:MD_ProgressCode'), readAttribute('codeListValue'), map(getStatusFromStatusCode));
650
664
  }
651
665
  // from gmd:resourceConstraints
652
- function extractAccessConstraints() {
653
- const getOtherConstraints = pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') === -1 &&
654
- values.indexOf('otherRestrictions') > -1))), mapArray(findChildrenElement('gmd:otherConstraints')), flattenArray(), mapArray(extractCharacterString()), mapArray((text) => ({
666
+ function extractLegalConstraints() {
667
+ return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') === -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
668
+ ...(url && { url }),
655
669
  text,
656
- type: 'other',
657
670
  })));
658
- const getSecurityConstraints = pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), mapArray(extractCharacterString()), mapArray((text) => ({
671
+ }
672
+ // from gmd:resourceConstraints
673
+ function extractSecurityConstraints() {
674
+ return pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
675
+ ...(url && { url }),
659
676
  text,
660
- type: 'security',
661
677
  })));
662
- return pipe(combine(getOtherConstraints, getSecurityConstraints), flattenArray());
663
678
  }
664
679
  // from gmd:resourceConstraints
665
- function extractUseLimitations() {
666
- return pipe(combine(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), findNestedElements('gmd:MD_LegalConstraints', 'gmd:useLimitation')), flattenArray(), mapArray(extractCharacterString()));
680
+ function extractOtherConstraints() {
681
+ return pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
682
+ ...(url && { url }),
683
+ text,
684
+ })));
667
685
  }
668
686
  // from gmd:resourceConstraints
669
687
  function extractLicenses() {
670
- return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(pipe(findChildElement('gmd:otherConstraints'), combine(extractCharacterString(), extractUrl()), map(([text, url]) => ({
688
+ return pipe(findChildrenElement('gmd:MD_LegalConstraints', false), filterArray(pipe(findChildrenElement('gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), map((values) => values.indexOf('license') > -1))), mapArray(combine(findChildrenElement('gmd:otherConstraints'), findChildrenElement('gmd:useLimitation'))), flattenArray(), flattenArray(), mapArray(combine(extractCharacterString(), extractUrl())), mapArray(([text, url]) => ({
671
689
  ...(url && { url }),
672
690
  text,
673
- })))));
691
+ })));
674
692
  }
675
693
  // from gmd:MD_Distribution
676
694
  function extractDatasetDistributions() {
@@ -829,31 +847,55 @@ function readDatasetUpdated(rootEl) {
829
847
  function readContacts(rootEl) {
830
848
  return pipe(findIdentification(), combine(findChildrenElement('gmd:contact'), findChildrenElement('gmd:pointOfContact')), flattenArray(), mapArray(findChildElement('gmd:CI_ResponsibleParty', false)), mapArray(extractIndividuals()), flattenArray())(rootEl);
831
849
  }
832
- function readKeywordsOfType(isTheme) {
833
- 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
+ };
834
863
  }
835
- function readKeywords(rootEl) {
836
- 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);
837
876
  }
838
- function readThemes(rootEl) {
839
- return readKeywordsOfType(true)(rootEl);
877
+ function readKeywords(rootEl) {
878
+ return pipe(findIdentification(), findNestedElements('gmd:descriptiveKeywords', 'gmd:MD_Keywords'), mapArray(readKeywordGroup), flattenArray())(rootEl);
840
879
  }
841
880
  function readStatus(rootEl) {
842
881
  return pipe(findIdentification(), findChildElement('gmd:status', false), extractStatus())(rootEl);
843
882
  }
844
883
  const getConstraints = pipe(findIdentification(), findChildrenElement('gmd:resourceConstraints', false));
845
- function readAccessConstraints(rootEl) {
846
- return pipe(getConstraints, mapArray(extractAccessConstraints()), flattenArray(), flattenArray())(rootEl);
884
+ function readLegalConstraints(rootEl) {
885
+ return pipe(getConstraints, mapArray(extractLegalConstraints()), flattenArray(), flattenArray())(rootEl);
886
+ }
887
+ function readSecurityConstraints(rootEl) {
888
+ return pipe(getConstraints, mapArray(extractSecurityConstraints()), flattenArray())(rootEl);
847
889
  }
848
- function readUseLimitations(rootEl) {
849
- return pipe(getConstraints, mapArray(extractUseLimitations()), flattenArray())(rootEl);
890
+ function readOtherConstraints(rootEl) {
891
+ return pipe(getConstraints, mapArray(extractOtherConstraints()), flattenArray())(rootEl);
850
892
  }
851
893
  function readLicenses(rootEl) {
852
894
  return pipe(getConstraints, mapArray(extractLicenses()), flattenArray())(rootEl);
853
895
  }
854
896
  // not used yet
855
897
  function readIsoTopics(rootEl) {
856
- return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode', false), mapArray(readText()))(rootEl);
898
+ return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode', true), mapArray(readText()))(rootEl);
857
899
  }
858
900
  function readSpatialRepresentation(rootEl) {
859
901
  return pipe(findIdentification(), findNestedElement('gmd:spatialRepresentationType', 'gmd:MD_SpatialRepresentationTypeCode'), readAttribute('codeListValue'), map(getSpatialRepresentationFromCode))(rootEl);
@@ -1069,33 +1111,50 @@ function updateCitationDate(date, type) {
1069
1111
  function appendCitationDate(date, type) {
1070
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)))));
1071
1113
  }
1072
- function removeKeywords(type) {
1073
- return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords'), filterArray(pipe(findNestedElement('gmd:MD_Keywords', 'gmd:type', 'gmd:MD_KeywordTypeCode'), readAttribute('codeListValue'),
1074
- // if a specific type is targeted, compare with it; otherwise remove keywords if they have no type defined
1075
- map((typeValue) => (type !== null ? type === typeValue : true))))));
1076
- }
1077
- function appendKeywords(keywords, type) {
1078
- return appendChildren(pipe(createElement('gmd:descriptiveKeywords'), createChild('gmd:MD_Keywords'), type !== null
1079
- ? 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)))
1080
- : noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword))))));
1081
- }
1082
- function removeAccessConstraints() {
1083
- const securityConstraintsFilter = pipe(findChildrenElement('gmd:MD_SecurityConstraints'), (array) => array.length > 0);
1084
- // remove legal constraints that *only* have 'otherRestrictions'
1085
- const otherConstraintsFilter = pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.every((code) => code === 'otherRestrictions'));
1086
- return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray((el) => securityConstraintsFilter(el) || otherConstraintsFilter(el))));
1087
- }
1088
- function createAccessConstraint(constraint) {
1089
- if (constraint.type === 'security') {
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)))))));
1140
+ }
1141
+ function createConstraint(constraint, type) {
1142
+ if (type === 'security') {
1090
1143
  return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_SecurityConstraints'), appendChildren(pipe(createElement('gmd:classification'), createChild('gmd:MD_ClassificationCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_ClassificationCode'), addAttribute('codeListValue', 'restricted')), pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
1091
1144
  }
1092
- return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_LegalConstraints'), appendChildren(pipe(createElement('gmd:accessConstraints'), createChild('gmd:MD_RestrictionCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode'), addAttribute('codeListValue', 'otherRestrictions')), pipe(createElement('gmd:otherConstraints'), writeCharacterString(constraint.text))));
1145
+ else if (type === 'legal') {
1146
+ return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_LegalConstraints'), appendChildren(pipe(createElement('gmd:accessConstraints'), createChild('gmd:MD_RestrictionCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_RestrictionCode'), addAttribute('codeListValue', 'otherRestrictions')), pipe(createElement('gmd:otherConstraints'), writeCharacterString(constraint.text))));
1147
+ }
1148
+ return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_Constraints'), appendChildren(pipe(createElement('gmd:useLimitation'), writeCharacterString(constraint.text))));
1093
1149
  }
1094
- function removeUseLimitations() {
1150
+ function removeOtherConstraints() {
1095
1151
  return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_Constraints', 'gmd:useLimitation'), (array) => array.length > 0))));
1096
1152
  }
1097
- function createUseLimitation(useLimitation) {
1098
- return pipe(createElement('gmd:resourceConstraints'), createChild('gmd:MD_Constraints'), createChild('gmd:useLimitation'), writeCharacterString(useLimitation));
1153
+ function removeSecurityConstraints() {
1154
+ return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_SecurityConstraints', 'gmd:useLimitation'), (array) => array.length > 0))));
1155
+ }
1156
+ function removeLegalConstraints() {
1157
+ return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.every((code) => code !== 'license')))));
1099
1158
  }
1100
1159
  function removeLicenses() {
1101
1160
  return removeChildren(pipe(findChildrenElement('gmd:resourceConstraints'), filterArray(pipe(findNestedElements('gmd:MD_LegalConstraints', 'gmd:accessConstraints', 'gmd:MD_RestrictionCode'), mapArray(readAttribute('codeListValue')), (restrictionCodes) => restrictionCodes.some((code) => code === 'license')))));
@@ -1194,19 +1253,22 @@ function writeContacts(record, rootEl) {
1194
1253
  pipe(findOrCreateIdentification(), removeChildrenByName('gmd:pointOfContact'), appendChildren(...record.contacts.map((contact) => pipe(createElement('gmd:pointOfContact'), appendResponsibleParty(contact)))))(rootEl);
1195
1254
  }
1196
1255
  function writeKeywords(record, rootEl) {
1197
- pipe(findOrCreateIdentification(), removeKeywords(null), appendKeywords(record.keywords, null))(rootEl);
1256
+ pipe(findOrCreateIdentification(), removeKeywords(), appendKeywords(record.keywords))(rootEl);
1198
1257
  }
1199
- function writeThemes(record, rootEl) {
1200
- pipe(findOrCreateIdentification(), removeKeywords('theme'), appendKeywords(record.themes, 'theme'))(rootEl);
1201
- }
1202
- function writeAccessConstraints(record, rootEl) {
1203
- pipe(findOrCreateIdentification(), removeAccessConstraints(), appendChildren(...record.accessConstraints.map(createAccessConstraint)))(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);
1204
1260
  }
1205
1261
  function writeLicenses(record, rootEl) {
1206
1262
  pipe(findOrCreateIdentification(), removeLicenses(), appendChildren(...record.licenses.map(createLicense)))(rootEl);
1207
1263
  }
1208
- function writeUseLimitations(record, rootEl) {
1209
- pipe(findOrCreateIdentification(), removeUseLimitations(), appendChildren(...record.useLimitations.map(createUseLimitation)))(rootEl);
1264
+ function writeLegalConstraints(record, rootEl) {
1265
+ pipe(findOrCreateIdentification(), removeLegalConstraints(), appendChildren(...record.legalConstraints.map((c) => createConstraint(c, 'legal'))))(rootEl);
1266
+ }
1267
+ function writeSecurityConstraints(record, rootEl) {
1268
+ pipe(findOrCreateIdentification(), removeSecurityConstraints(), appendChildren(...record.securityConstraints.map((c) => createConstraint(c, 'security'))))(rootEl);
1269
+ }
1270
+ function writeOtherConstraints(record, rootEl) {
1271
+ pipe(findOrCreateIdentification(), removeOtherConstraints(), appendChildren(...record.otherConstraints.map((c) => createConstraint(c, 'other'))))(rootEl);
1210
1272
  }
1211
1273
  function writeUpdateFrequency(record, rootEl) {
1212
1274
  pipe(findOrCreateIdentification(), findChildOrCreate('gmd:resourceMaintenance'), removeAllChildren(), findChildOrCreate('gmd:MD_MaintenanceInformation'), typeof record.updateFrequency === 'object'
@@ -1303,13 +1365,12 @@ function toModel(xml) {
1303
1365
  const recordUpdated = readRecordUpdated(rootEl);
1304
1366
  const recordCreated = recordUpdated;
1305
1367
  const keywords = readKeywords(rootEl);
1306
- const themes = readThemes(rootEl);
1307
- const accessConstraints = readAccessConstraints(rootEl);
1308
- const useLimitations = readUseLimitations(rootEl);
1368
+ const topics = readIsoTopics(rootEl);
1369
+ const legalConstraints = readLegalConstraints(rootEl);
1370
+ const otherConstraints = readOtherConstraints(rootEl);
1371
+ const securityConstraints = readSecurityConstraints(rootEl);
1309
1372
  const licenses = readLicenses(rootEl);
1310
1373
  const overviews = readOverviews(rootEl);
1311
- // not used yet
1312
- const isoTopics = readIsoTopics(rootEl);
1313
1374
  if (kind === 'dataset') {
1314
1375
  const status = readStatus(rootEl);
1315
1376
  const datasetCreated = readDatasetCreated(rootEl);
@@ -1332,10 +1393,11 @@ function toModel(xml) {
1332
1393
  contacts,
1333
1394
  contactsForResource: [],
1334
1395
  keywords,
1335
- themes,
1336
- accessConstraints,
1337
- useLimitations,
1396
+ topics,
1338
1397
  licenses,
1398
+ legalConstraints,
1399
+ securityConstraints,
1400
+ otherConstraints,
1339
1401
  ...(datasetCreated && { datasetCreated }),
1340
1402
  ...(datasetUpdated && { datasetUpdated }),
1341
1403
  lineage,
@@ -1359,10 +1421,11 @@ function toModel(xml) {
1359
1421
  ownerOrganization,
1360
1422
  contacts,
1361
1423
  keywords,
1362
- themes,
1363
- accessConstraints,
1364
- useLimitations,
1424
+ topics,
1365
1425
  licenses,
1426
+ legalConstraints,
1427
+ securityConstraints,
1428
+ otherConstraints,
1366
1429
  overviews,
1367
1430
  onlineResources,
1368
1431
  };
@@ -1387,10 +1450,12 @@ function toXml(record, originalXml) {
1387
1450
  writeAbstract(record, rootEl);
1388
1451
  fieldChanged('contacts') && writeContacts(record, rootEl);
1389
1452
  fieldChanged('keywords') && writeKeywords(record, rootEl);
1390
- fieldChanged('themes') && writeThemes(record, rootEl);
1391
- fieldChanged('accessConstraints') && writeAccessConstraints(record, rootEl);
1453
+ fieldChanged('topics') && writeTopics(record, rootEl);
1454
+ fieldChanged('legalConstraints') && writeLegalConstraints(record, rootEl);
1455
+ fieldChanged('securityConstraints') &&
1456
+ writeSecurityConstraints(record, rootEl);
1392
1457
  fieldChanged('licenses') && writeLicenses(record, rootEl);
1393
- fieldChanged('useLimitations') && writeUseLimitations(record, rootEl);
1458
+ fieldChanged('otherConstraints') && writeOtherConstraints(record, rootEl);
1394
1459
  if (record.kind === 'dataset') {
1395
1460
  writeStatus(record, rootEl);
1396
1461
  fieldChanged('updateFrequency') && writeUpdateFrequency(record, rootEl);
@@ -1457,6 +1522,31 @@ const mapContact = (sourceContact, lang3) => {
1457
1522
  ...(phone && { phone }),
1458
1523
  };
1459
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
+ };
1460
1550
 
1461
1551
  /**
1462
1552
  * Custom HttpParameterCodec
@@ -16543,133 +16633,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
16543
16633
  }]
16544
16634
  }], ctorParameters: function () { return [{ type: i1$1.TranslateService }]; } });
16545
16635
 
16546
- // IMPORTANT:
16547
- // This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/test-translate-loader.service.ts
16548
- // because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
16549
- // FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
16550
- class TestTranslateLoader extends TranslateLoader {
16551
- constructor(_translations = {}) {
16552
- super();
16553
- this._translations = _translations;
16554
- }
16555
- /**
16556
- * Returns an {Observable} of translations for the specified language. If the
16557
- * language is not recognized, an empty translations object will be returned.
16558
- *
16559
- * @param language the language for which the translations should be retrieved.
16560
- * @returns the translations for the specified
16561
- * language or an empty set of translations if the language is not recognized.
16562
- */
16563
- getTranslation(language) {
16564
- return of(this._translations[language] || {});
16565
- }
16566
- }
16567
-
16568
- // IMPORTANT:
16569
- // This was copy-pasted from https://github.com/mwootendev/ngx-translate-plugins/blob/7c6c73c7d16c9519a7bafff939d29fd8ea5e574a/projects/testing/src/lib/testing.module.ts
16570
- // because the original package was expecting rxjs 7+ as a peer dep and that was conflicting with many other dependencies
16571
- // FIXME: when rxjs 7 can be used in the project, remove this and do `npm install ngx-translate-testing --save-dev`
16572
- /**
16573
- * The TranslateTestingModule provides the {TranslateModule} as well as a
16574
- * {TranslateService} configured to return translations specific for the
16575
- * test environment.
16576
- *
16577
- * @export
16578
- */
16579
- class TranslateTestingModule {
16580
- constructor() {
16581
- this._translations = {};
16582
- }
16583
- static withTranslations(languageOrTranslations, translations) {
16584
- const translateTestingModule = new TranslateTestingModule();
16585
- if (typeof languageOrTranslations === 'string') {
16586
- return translateTestingModule.withTranslations(languageOrTranslations, translations);
16587
- }
16588
- return translateTestingModule.withTranslations(languageOrTranslations);
16589
- }
16590
- get ngModule() {
16591
- return TranslateTestingModule;
16592
- }
16593
- get providers() {
16594
- const translateService = new TranslateService(null, new TestTranslateLoader(this._translations), this._compiler || new TranslateFakeCompiler(), new TranslateDefaultParser(), new FakeMissingTranslationHandler(), true, true, false, this._defaultLanguage);
16595
- return [
16596
- {
16597
- provide: TranslateService,
16598
- useValue: translateService,
16599
- },
16600
- ];
16601
- }
16602
- withTranslations(languageOrTranslations, translations) {
16603
- if (typeof languageOrTranslations === 'string' && translations) {
16604
- this.addTranslations(languageOrTranslations, translations);
16605
- this._defaultLanguage = languageOrTranslations;
16606
- }
16607
- else if (languageOrTranslations) {
16608
- Object.keys(languageOrTranslations).forEach((language) => this.addTranslations(language, languageOrTranslations[language]));
16609
- }
16610
- return this;
16611
- }
16612
- /**
16613
- * Updates the {TranslationTestingModule} to provide a {TranslateService} that will
16614
- * use the provided {TranslateCompiler} to translate the test translations.
16615
- *
16616
- * @example
16617
- *
16618
- * TranslateTestingModule.withTranslations('en', {people: '{gender, select, male{He is} female{She is} other{They are}} {how})'})
16619
- * .withCompiler(new TranslateMessageFormatCompiler());
16620
- *
16621
- * @param compiler the compiler to use to compile the test translations.
16622
- * @returns the instance that can be used to chain additional configuration.
16623
- * @memberof TranslateTestingModule
16624
- */
16625
- withCompiler(compiler) {
16626
- this._compiler = compiler;
16627
- return this;
16628
- }
16629
- /**
16630
- * Updates the {TranslateTestingModule} to use the provided language as the default language.
16631
- * By default, the default language will be set to the first language provided.
16632
- *
16633
- * @example
16634
- *
16635
- * TranslateTestingModule.withTranslations('es', SPANISH_TRANSLATIONS)
16636
- * .withTranslations('en', ENGLISH_TRANSLATIONS)
16637
- * .withDefaultLanguage('en');
16638
- *
16639
- * @param language the new default language for translations.
16640
- * @returns the instance that can be used to chain additional configuration.
16641
- * @memberof TranslateTestingModule
16642
- */
16643
- withDefaultLanguage(language) {
16644
- this._defaultLanguage = language || this._defaultLanguage;
16645
- return this;
16646
- }
16647
- addTranslations(language, translations) {
16648
- if (!this._defaultLanguage) {
16649
- this._defaultLanguage = language;
16650
- }
16651
- if (this._translations[language]) {
16652
- this._translations[language] = {
16653
- ...this._translations[language],
16654
- ...translations,
16655
- };
16656
- }
16657
- else {
16658
- this._translations[language] = translations;
16659
- }
16660
- }
16661
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
16662
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule], exports: [TranslateModule] }); }
16663
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, imports: [TranslateModule, TranslateModule] }); }
16664
- }
16665
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TranslateTestingModule, decorators: [{
16666
- type: NgModule,
16667
- args: [{
16668
- imports: [TranslateModule],
16669
- exports: [TranslateModule],
16670
- }]
16671
- }] });
16672
-
16673
16636
  var dropFile$6 = "Datei ablegen";
16674
16637
  var next$6 = "weiter";
16675
16638
  var previous$6 = "zurück";
@@ -16692,20 +16655,21 @@ var de = {
16692
16655
  "chart.type.line": "Liniendiagramm",
16693
16656
  "chart.type.lineSmooth": "Geglättes Liniendiagramm",
16694
16657
  "chart.type.pie": "Kreisdiagramm",
16658
+ "dashboard.createRecord": "",
16695
16659
  "dashboard.labels.mySpace": "Mein Bereich",
16696
16660
  "dashboard.records.all": "Katalog",
16697
16661
  "dashboard.records.myDraft": "Meine Entwürfe",
16698
16662
  "dashboard.records.myLibrary": "Meine Bibliothek",
16699
16663
  "dashboard.records.myOrg": "Meine Organisation",
16700
16664
  "dashboard.records.myRecords": "Meine Datensätze",
16701
- "dashboard.records.noRecord": "Kein Datensatz für diese Organisation",
16702
- "dashboard.records.noUser": "Keine Benutzer für diese Organisation",
16703
16665
  "dashboard.records.publishedRecords": "{count, plural, =1{veröffentlichter Datensatz} other{veröffentlichte Datensätze}}",
16704
16666
  "dashboard.records.search": "Suche nach \"{searchText}\"",
16705
16667
  "dashboard.records.userDetail": "Name",
16706
16668
  "dashboard.records.userEmail": "E-Mail",
16707
16669
  "dashboard.records.username": "Benutzername",
16708
16670
  "dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
16671
+ "dashboard.results.listMetadata": "",
16672
+ "dashboard.results.listResources": "",
16709
16673
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
16710
16674
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
16711
16675
  "datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
@@ -16897,16 +16861,15 @@ var de = {
16897
16861
  "record.metadata.author": "Autor",
16898
16862
  "record.metadata.catalog": "Katalog",
16899
16863
  "record.metadata.contact": "Kontakt",
16900
- "record.metadata.createdOn": "Erstellt am",
16901
16864
  "record.metadata.details": "Technische Informationen",
16902
16865
  "record.metadata.download": "Downloads",
16903
16866
  "record.metadata.formats": "Formate",
16904
- "record.metadata.isOpenData": "Open Data",
16905
16867
  "record.metadata.keywords": "Stichworte",
16906
16868
  "record.metadata.lastUpdate": "Zuletzt aktualisiert am",
16907
16869
  "record.metadata.links": "Links",
16908
16870
  "record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
16909
16871
  "record.metadata.origin": "Über die Daten",
16872
+ "record.metadata.otherConstraints": "",
16910
16873
  "record.metadata.owner": "",
16911
16874
  "record.metadata.preview": "Vorschau",
16912
16875
  "record.metadata.publications": "Veröffentlichungen",
@@ -16930,8 +16893,9 @@ var de = {
16930
16893
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
16931
16894
  "record.metadata.related": "Ähnliche Datensätze",
16932
16895
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
16933
- "record.metadata.themes": "Kategorien",
16896
+ "record.metadata.status": "",
16934
16897
  "record.metadata.title": "Titel",
16898
+ "record.metadata.topics": "Kategorien",
16935
16899
  "record.metadata.type": "Geographischer Datensatz",
16936
16900
  "record.metadata.uniqueId": "Eindeutige Kennung",
16937
16901
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
@@ -16967,6 +16931,7 @@ var de = {
16967
16931
  "search.filters.isSpatial": "Ist räumliche Daten",
16968
16932
  "search.filters.isSpatial.no": "nicht räumlich",
16969
16933
  "search.filters.isSpatial.yes": "räumlich",
16934
+ "search.filters.keyword": "Schlüsselwort",
16970
16935
  "search.filters.license": "Lizenz",
16971
16936
  "search.filters.license.cc-by": "Creative Commons CC-BY",
16972
16937
  "search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
@@ -17031,20 +16996,21 @@ var en = {
17031
16996
  "chart.type.line": "line chart",
17032
16997
  "chart.type.lineSmooth": "smooth line chart",
17033
16998
  "chart.type.pie": "pie chart",
16999
+ "dashboard.createRecord": "New record",
17034
17000
  "dashboard.labels.mySpace": "My space",
17035
- "dashboard.records.all": "Catalog",
17001
+ "dashboard.records.all": "Metadata records",
17036
17002
  "dashboard.records.myDraft": "My drafts",
17037
17003
  "dashboard.records.myLibrary": "My library",
17038
17004
  "dashboard.records.myOrg": "Organization",
17039
17005
  "dashboard.records.myRecords": "My Records",
17040
- "dashboard.records.noRecord": "No record for this organization",
17041
- "dashboard.records.noUser": "No users for this organization",
17042
17006
  "dashboard.records.publishedRecords": "{count, plural, =1{published record} other{published records}}",
17043
17007
  "dashboard.records.search": "Search for \"{searchText}\"",
17044
17008
  "dashboard.records.userDetail": "Name",
17045
17009
  "dashboard.records.userEmail": "Email",
17046
17010
  "dashboard.records.username": "Username",
17047
17011
  "dashboard.records.users": "{count, plural, =1{user} other{users}}",
17012
+ "dashboard.results.listMetadata": "Show metadata",
17013
+ "dashboard.results.listResources": "Show resources",
17048
17014
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "File format \n detection",
17049
17015
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Gathering dataset \n information",
17050
17016
  "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n data",
@@ -17236,16 +17202,15 @@ var en = {
17236
17202
  "record.metadata.author": "Author",
17237
17203
  "record.metadata.catalog": "Catalog",
17238
17204
  "record.metadata.contact": "Contact",
17239
- "record.metadata.createdOn": "Created on",
17240
17205
  "record.metadata.details": "Technical information",
17241
17206
  "record.metadata.download": "Downloads",
17242
17207
  "record.metadata.formats": "Formats",
17243
- "record.metadata.isOpenData": "Open Data",
17244
17208
  "record.metadata.keywords": "Keywords",
17245
17209
  "record.metadata.lastUpdate": "Last updated on",
17246
17210
  "record.metadata.links": "Links",
17247
17211
  "record.metadata.noUsage": "No usage conditions specified for this record.",
17248
17212
  "record.metadata.origin": "About the data",
17213
+ "record.metadata.otherConstraints": "Additional Conditions",
17249
17214
  "record.metadata.owner": "Catalog of origin",
17250
17215
  "record.metadata.preview": "Preview",
17251
17216
  "record.metadata.publications": "publications",
@@ -17269,14 +17234,15 @@ var en = {
17269
17234
  "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
17270
17235
  "record.metadata.related": "Related records",
17271
17236
  "record.metadata.sheet": "Original metadata",
17272
- "record.metadata.themes": "Categories",
17237
+ "record.metadata.status": "Status",
17273
17238
  "record.metadata.title": "Title",
17239
+ "record.metadata.topics": "Categories",
17274
17240
  "record.metadata.type": "Geographical dataset",
17275
17241
  "record.metadata.uniqueId": "Unique Identifier",
17276
17242
  "record.metadata.updateFrequency": "Data Update Frequency",
17277
17243
  "record.metadata.updateStatus": "Data Update Status",
17278
- "record.metadata.updatedOn": "Metadata's last update",
17279
- "record.metadata.usage": "Usage & constraints",
17244
+ "record.metadata.updatedOn": "Last Data Information Update",
17245
+ "record.metadata.usage": "License and Conditions",
17280
17246
  "record.more.details": "Read more",
17281
17247
  "record.tab.chart": "Chart",
17282
17248
  "record.tab.data": "Table",
@@ -17306,6 +17272,7 @@ var en = {
17306
17272
  "search.filters.isSpatial": "Is spatial data",
17307
17273
  "search.filters.isSpatial.no": "non spatial",
17308
17274
  "search.filters.isSpatial.yes": "spatial",
17275
+ "search.filters.keyword": "Keyword",
17309
17276
  "search.filters.license": "License",
17310
17277
  "search.filters.license.cc-by": "Creative Commons CC-BY",
17311
17278
  "search.filters.license.cc-by-sa": "Creative Commons CC-BY-SA",
@@ -17370,20 +17337,21 @@ var es = {
17370
17337
  "chart.type.line": "gráfico de líneas",
17371
17338
  "chart.type.lineSmooth": "gráfico de líneas suave",
17372
17339
  "chart.type.pie": "gráfico circular",
17340
+ "dashboard.createRecord": "",
17373
17341
  "dashboard.labels.mySpace": "Mi espacio",
17374
17342
  "dashboard.records.all": "Catálogo",
17375
17343
  "dashboard.records.myDraft": "Mis borradores",
17376
17344
  "dashboard.records.myLibrary": "Mi biblioteca",
17377
17345
  "dashboard.records.myOrg": "Organización",
17378
17346
  "dashboard.records.myRecords": "Mis Registros",
17379
- "dashboard.records.noRecord": "",
17380
- "dashboard.records.noUser": "",
17381
17347
  "dashboard.records.publishedRecords": "",
17382
17348
  "dashboard.records.search": "Buscar \"{searchText}\"",
17383
17349
  "dashboard.records.userDetail": "",
17384
17350
  "dashboard.records.userEmail": "",
17385
17351
  "dashboard.records.username": "",
17386
17352
  "dashboard.records.users": "",
17353
+ "dashboard.results.listMetadata": "",
17354
+ "dashboard.results.listResources": "",
17387
17355
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
17388
17356
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
17389
17357
  "datafeeder.analysisProgressBar.illustration.samplingData": "",
@@ -17575,16 +17543,15 @@ var es = {
17575
17543
  "record.metadata.author": "",
17576
17544
  "record.metadata.catalog": "",
17577
17545
  "record.metadata.contact": "",
17578
- "record.metadata.createdOn": "",
17579
17546
  "record.metadata.details": "",
17580
17547
  "record.metadata.download": "",
17581
17548
  "record.metadata.formats": "",
17582
- "record.metadata.isOpenData": "",
17583
17549
  "record.metadata.keywords": "",
17584
17550
  "record.metadata.lastUpdate": "",
17585
17551
  "record.metadata.links": "",
17586
17552
  "record.metadata.noUsage": "",
17587
17553
  "record.metadata.origin": "",
17554
+ "record.metadata.otherConstraints": "",
17588
17555
  "record.metadata.owner": "",
17589
17556
  "record.metadata.preview": "",
17590
17557
  "record.metadata.publications": "",
@@ -17608,8 +17575,9 @@ var es = {
17608
17575
  "record.metadata.quality.updateFrequency.success": "",
17609
17576
  "record.metadata.related": "",
17610
17577
  "record.metadata.sheet": "",
17611
- "record.metadata.themes": "",
17578
+ "record.metadata.status": "",
17612
17579
  "record.metadata.title": "",
17580
+ "record.metadata.topics": "",
17613
17581
  "record.metadata.type": "",
17614
17582
  "record.metadata.uniqueId": "",
17615
17583
  "record.metadata.updateFrequency": "",
@@ -17645,6 +17613,7 @@ var es = {
17645
17613
  "search.filters.isSpatial": "",
17646
17614
  "search.filters.isSpatial.no": "",
17647
17615
  "search.filters.isSpatial.yes": "",
17616
+ "search.filters.keyword": "",
17648
17617
  "search.filters.license": "",
17649
17618
  "search.filters.license.cc-by": "",
17650
17619
  "search.filters.license.cc-by-sa": "",
@@ -17709,20 +17678,21 @@ var fr = {
17709
17678
  "chart.type.line": "ligne",
17710
17679
  "chart.type.lineSmooth": "ligne lisse",
17711
17680
  "chart.type.pie": "camembert",
17681
+ "dashboard.createRecord": "",
17712
17682
  "dashboard.labels.mySpace": "Mon espace",
17713
17683
  "dashboard.records.all": "Catalogue",
17714
17684
  "dashboard.records.myDraft": "Mes brouillons",
17715
17685
  "dashboard.records.myLibrary": "Ma bibliothèque",
17716
17686
  "dashboard.records.myOrg": "Mon organisation",
17717
17687
  "dashboard.records.myRecords": "Mes fiches publiées",
17718
- "dashboard.records.noRecord": "Aucun jeu de données pour cette organisation",
17719
- "dashboard.records.noUser": "Aucun utilisateur pour cette organisation",
17720
17688
  "dashboard.records.publishedRecords": "{count, plural, =1{donnée publiée} other{données publiées}}",
17721
17689
  "dashboard.records.search": "Résultats pour \"{searchText}\"",
17722
17690
  "dashboard.records.userDetail": "Nom",
17723
17691
  "dashboard.records.userEmail": "Email",
17724
17692
  "dashboard.records.username": "Nom d'utilisateur",
17725
17693
  "dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
17694
+ "dashboard.results.listMetadata": "",
17695
+ "dashboard.results.listResources": "",
17726
17696
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
17727
17697
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
17728
17698
  "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
@@ -17914,16 +17884,15 @@ var fr = {
17914
17884
  "record.metadata.author": "Auteur",
17915
17885
  "record.metadata.catalog": "Catalogue",
17916
17886
  "record.metadata.contact": "Contact",
17917
- "record.metadata.createdOn": "Créé le",
17918
17887
  "record.metadata.details": "Informations techniques",
17919
17888
  "record.metadata.download": "Téléchargements",
17920
17889
  "record.metadata.formats": "Formats",
17921
- "record.metadata.isOpenData": "Donnée Ouverte",
17922
17890
  "record.metadata.keywords": "Mots clés",
17923
17891
  "record.metadata.lastUpdate": "Mis à jour le",
17924
17892
  "record.metadata.links": "Liens",
17925
17893
  "record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
17926
17894
  "record.metadata.origin": "À propos des données",
17895
+ "record.metadata.otherConstraints": "Limitations d'usage",
17927
17896
  "record.metadata.owner": "Catalogue d'origine",
17928
17897
  "record.metadata.preview": "Aperçu",
17929
17898
  "record.metadata.publications": "données",
@@ -17947,14 +17916,15 @@ var fr = {
17947
17916
  "record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
17948
17917
  "record.metadata.related": "Voir aussi",
17949
17918
  "record.metadata.sheet": "Fiche de métadonnées d'origine",
17950
- "record.metadata.themes": "Catégories",
17919
+ "record.metadata.status": "",
17951
17920
  "record.metadata.title": "Titre",
17921
+ "record.metadata.topics": "Catégories",
17952
17922
  "record.metadata.type": "Donnée géographique",
17953
17923
  "record.metadata.uniqueId": "Identificateur de ressource unique",
17954
17924
  "record.metadata.updateFrequency": "Fréquence de mise à jour des données",
17955
17925
  "record.metadata.updateStatus": "Statut de mise à jour des données",
17956
- "record.metadata.updatedOn": "Mise à jour de la fiche de métadonnée",
17957
- "record.metadata.usage": "Conditions d'utilisation",
17926
+ "record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
17927
+ "record.metadata.usage": "Licences et conditions d'utilisation",
17958
17928
  "record.more.details": "Détails",
17959
17929
  "record.tab.chart": "Graphique",
17960
17930
  "record.tab.data": "Tableau",
@@ -17984,6 +17954,7 @@ var fr = {
17984
17954
  "search.filters.isSpatial": "Données spatiales",
17985
17955
  "search.filters.isSpatial.no": "non-géolocalisées",
17986
17956
  "search.filters.isSpatial.yes": "géolocalisées",
17957
+ "search.filters.keyword": "Mot-clé",
17987
17958
  "search.filters.license": "Licence",
17988
17959
  "search.filters.license.cc-by": "cc-by",
17989
17960
  "search.filters.license.cc-by-sa": "cc-by-sa",
@@ -18048,20 +18019,21 @@ var it = {
18048
18019
  "chart.type.line": "grafico a linee",
18049
18020
  "chart.type.lineSmooth": "grafico a linea liscia",
18050
18021
  "chart.type.pie": "grafico a torta",
18022
+ "dashboard.createRecord": "",
18051
18023
  "dashboard.labels.mySpace": "Il mio spazio",
18052
18024
  "dashboard.records.all": "Catalogo",
18053
18025
  "dashboard.records.myDraft": "Le mie bozze",
18054
18026
  "dashboard.records.myLibrary": "La mia biblioteca",
18055
18027
  "dashboard.records.myOrg": "La mia organizzazione",
18056
18028
  "dashboard.records.myRecords": "I miei dati",
18057
- "dashboard.records.noRecord": "Nessun dati per questa organizzazione",
18058
- "dashboard.records.noUser": "Nessun utente per questa organizzazione",
18059
18029
  "dashboard.records.publishedRecords": "dati pubblicati",
18060
18030
  "dashboard.records.search": "Risultati per \"{searchText}\"",
18061
18031
  "dashboard.records.userDetail": "Nome",
18062
18032
  "dashboard.records.userEmail": "Email",
18063
18033
  "dashboard.records.username": "Nome utente",
18064
18034
  "dashboard.records.users": "utenti",
18035
+ "dashboard.results.listMetadata": "",
18036
+ "dashboard.results.listResources": "",
18065
18037
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
18066
18038
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
18067
18039
  "datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
@@ -18253,16 +18225,15 @@ var it = {
18253
18225
  "record.metadata.author": "Autore",
18254
18226
  "record.metadata.catalog": "Catalogo",
18255
18227
  "record.metadata.contact": "Contatto",
18256
- "record.metadata.createdOn": "Creato il",
18257
18228
  "record.metadata.details": "Informazioni tecniche",
18258
18229
  "record.metadata.download": "Download",
18259
18230
  "record.metadata.formats": "Formati",
18260
- "record.metadata.isOpenData": "Data aperta",
18261
18231
  "record.metadata.keywords": "Parole chiave",
18262
18232
  "record.metadata.lastUpdate": "Ultimo aggiornamento",
18263
18233
  "record.metadata.links": "Collegamenti",
18264
18234
  "record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
18265
18235
  "record.metadata.origin": "Informazioni sui dati",
18236
+ "record.metadata.otherConstraints": "Limitazioni di uso",
18266
18237
  "record.metadata.owner": "Catalogo originale",
18267
18238
  "record.metadata.preview": "Anteprima",
18268
18239
  "record.metadata.publications": "pubblicazioni",
@@ -18286,14 +18257,15 @@ var it = {
18286
18257
  "record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
18287
18258
  "record.metadata.related": "Vedi anche",
18288
18259
  "record.metadata.sheet": "Origine del metadata",
18289
- "record.metadata.themes": "Categorie",
18260
+ "record.metadata.status": "",
18290
18261
  "record.metadata.title": "Titolo",
18262
+ "record.metadata.topics": "Categorie",
18291
18263
  "record.metadata.type": "Dati geografici",
18292
18264
  "record.metadata.uniqueId": "Identificatore unico di risorsa",
18293
18265
  "record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
18294
18266
  "record.metadata.updateStatus": "Stato di aggiornamento dei dati",
18295
- "record.metadata.updatedOn": "Ultimo aggiornamento del metadata",
18296
- "record.metadata.usage": "Condizioni d'uso",
18267
+ "record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
18268
+ "record.metadata.usage": "Licenze e limiti di utilizzo",
18297
18269
  "record.more.details": "Dettagli",
18298
18270
  "record.tab.chart": "Grafico",
18299
18271
  "record.tab.data": "Tabella",
@@ -18323,6 +18295,7 @@ var it = {
18323
18295
  "search.filters.isSpatial": "Dati spaziali",
18324
18296
  "search.filters.isSpatial.no": "Non geolocalizzati",
18325
18297
  "search.filters.isSpatial.yes": "Geolocalizzati",
18298
+ "search.filters.keyword": "Parola chiave",
18326
18299
  "search.filters.license": "Licenza",
18327
18300
  "search.filters.license.cc-by": "cc-by",
18328
18301
  "search.filters.license.cc-by-sa": "cc-by-sa",
@@ -18387,20 +18360,21 @@ var nl = {
18387
18360
  "chart.type.line": "lijndiagram",
18388
18361
  "chart.type.lineSmooth": "glad lijndiagram",
18389
18362
  "chart.type.pie": "cirkeldiagram",
18363
+ "dashboard.createRecord": "",
18390
18364
  "dashboard.labels.mySpace": "Mijn ruimte",
18391
18365
  "dashboard.records.all": "Catalogus",
18392
18366
  "dashboard.records.myDraft": "Mijn concepten",
18393
18367
  "dashboard.records.myLibrary": "Mijn bibliotheek",
18394
18368
  "dashboard.records.myOrg": "Organisatie",
18395
18369
  "dashboard.records.myRecords": "Mijn Records",
18396
- "dashboard.records.noRecord": "",
18397
- "dashboard.records.noUser": "",
18398
18370
  "dashboard.records.publishedRecords": "",
18399
18371
  "dashboard.records.search": "Zoeken naar \"{searchText}\"",
18400
18372
  "dashboard.records.userDetail": "",
18401
18373
  "dashboard.records.userEmail": "",
18402
18374
  "dashboard.records.username": "",
18403
18375
  "dashboard.records.users": "",
18376
+ "dashboard.results.listMetadata": "",
18377
+ "dashboard.results.listResources": "",
18404
18378
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
18405
18379
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
18406
18380
  "datafeeder.analysisProgressBar.illustration.samplingData": "",
@@ -18592,16 +18566,15 @@ var nl = {
18592
18566
  "record.metadata.author": "",
18593
18567
  "record.metadata.catalog": "",
18594
18568
  "record.metadata.contact": "",
18595
- "record.metadata.createdOn": "",
18596
18569
  "record.metadata.details": "",
18597
18570
  "record.metadata.download": "",
18598
18571
  "record.metadata.formats": "",
18599
- "record.metadata.isOpenData": "",
18600
18572
  "record.metadata.keywords": "",
18601
18573
  "record.metadata.lastUpdate": "",
18602
18574
  "record.metadata.links": "",
18603
18575
  "record.metadata.noUsage": "",
18604
18576
  "record.metadata.origin": "",
18577
+ "record.metadata.otherConstraints": "",
18605
18578
  "record.metadata.owner": "",
18606
18579
  "record.metadata.preview": "",
18607
18580
  "record.metadata.publications": "",
@@ -18625,8 +18598,9 @@ var nl = {
18625
18598
  "record.metadata.quality.updateFrequency.success": "",
18626
18599
  "record.metadata.related": "",
18627
18600
  "record.metadata.sheet": "",
18628
- "record.metadata.themes": "",
18601
+ "record.metadata.status": "",
18629
18602
  "record.metadata.title": "",
18603
+ "record.metadata.topics": "",
18630
18604
  "record.metadata.type": "",
18631
18605
  "record.metadata.uniqueId": "",
18632
18606
  "record.metadata.updateFrequency": "",
@@ -18662,6 +18636,7 @@ var nl = {
18662
18636
  "search.filters.isSpatial": "",
18663
18637
  "search.filters.isSpatial.no": "",
18664
18638
  "search.filters.isSpatial.yes": "",
18639
+ "search.filters.keyword": "",
18665
18640
  "search.filters.license": "",
18666
18641
  "search.filters.license.cc-by": "",
18667
18642
  "search.filters.license.cc-by-sa": "",
@@ -18726,20 +18701,21 @@ var pt = {
18726
18701
  "chart.type.line": "gráfico de linha",
18727
18702
  "chart.type.lineSmooth": "gráfico de linha suave",
18728
18703
  "chart.type.pie": "gráfico de pizza",
18704
+ "dashboard.createRecord": "",
18729
18705
  "dashboard.labels.mySpace": "Meu espaço",
18730
18706
  "dashboard.records.all": "Catálogo",
18731
18707
  "dashboard.records.myDraft": "Meus rascunhos",
18732
18708
  "dashboard.records.myLibrary": "Minha biblioteca",
18733
18709
  "dashboard.records.myOrg": "Organização",
18734
18710
  "dashboard.records.myRecords": "Meus Registros",
18735
- "dashboard.records.noRecord": "",
18736
- "dashboard.records.noUser": "",
18737
18711
  "dashboard.records.publishedRecords": "",
18738
18712
  "dashboard.records.search": "Buscar por \"{searchText}\"",
18739
18713
  "dashboard.records.userDetail": "",
18740
18714
  "dashboard.records.userEmail": "",
18741
18715
  "dashboard.records.username": "",
18742
18716
  "dashboard.records.users": "",
18717
+ "dashboard.results.listMetadata": "",
18718
+ "dashboard.results.listResources": "",
18743
18719
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "",
18744
18720
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "",
18745
18721
  "datafeeder.analysisProgressBar.illustration.samplingData": "",
@@ -18931,16 +18907,15 @@ var pt = {
18931
18907
  "record.metadata.author": "",
18932
18908
  "record.metadata.catalog": "",
18933
18909
  "record.metadata.contact": "",
18934
- "record.metadata.createdOn": "",
18935
18910
  "record.metadata.details": "",
18936
18911
  "record.metadata.download": "",
18937
18912
  "record.metadata.formats": "",
18938
- "record.metadata.isOpenData": "",
18939
18913
  "record.metadata.keywords": "",
18940
18914
  "record.metadata.lastUpdate": "",
18941
18915
  "record.metadata.links": "",
18942
18916
  "record.metadata.noUsage": "",
18943
18917
  "record.metadata.origin": "",
18918
+ "record.metadata.otherConstraints": "",
18944
18919
  "record.metadata.owner": "",
18945
18920
  "record.metadata.preview": "",
18946
18921
  "record.metadata.publications": "",
@@ -18964,8 +18939,9 @@ var pt = {
18964
18939
  "record.metadata.quality.updateFrequency.success": "",
18965
18940
  "record.metadata.related": "",
18966
18941
  "record.metadata.sheet": "",
18967
- "record.metadata.themes": "",
18942
+ "record.metadata.status": "",
18968
18943
  "record.metadata.title": "",
18944
+ "record.metadata.topics": "",
18969
18945
  "record.metadata.type": "",
18970
18946
  "record.metadata.uniqueId": "",
18971
18947
  "record.metadata.updateFrequency": "",
@@ -19001,6 +18977,7 @@ var pt = {
19001
18977
  "search.filters.isSpatial": "",
19002
18978
  "search.filters.isSpatial.no": "",
19003
18979
  "search.filters.isSpatial.yes": "",
18980
+ "search.filters.keyword": "",
19004
18981
  "search.filters.license": "",
19005
18982
  "search.filters.license.cc-by": "",
19006
18983
  "search.filters.license.cc-by-sa": "",
@@ -19109,8 +19086,8 @@ class Gn4FieldMapper {
19109
19086
  },
19110
19087
  cl_topic: (output, source) => ({
19111
19088
  ...output,
19112
- themes: [
19113
- ...(output.themes || []),
19089
+ topics: [
19090
+ ...(output.topics || []),
19114
19091
  ...getAsArray(selectField(source, 'cl_topic')).map((topic) => selectTranslatedValue(topic, this.lang3)),
19115
19092
  ],
19116
19093
  }),
@@ -19165,31 +19142,22 @@ class Gn4FieldMapper {
19165
19142
  catalogUuid: selectFallback(selectField(source, 'sourceCatalogue'), 'no title'),
19166
19143
  }, output);
19167
19144
  },
19168
- tag: (output, source) => ({
19145
+ allKeywords: (output, source) => ({
19169
19146
  ...output,
19170
- keywords: getAsArray(selectField(source, 'tag')).map((tag) => selectTranslatedValue(tag, this.lang3)),
19147
+ keywords: mapKeywords(selectField(source, 'allKeywords'), this.lang3),
19171
19148
  }),
19172
19149
  inspireTheme: (output, source) => ({
19173
19150
  ...output,
19174
- themes: [
19175
- ...(output.themes || []),
19151
+ topics: [
19152
+ ...(output.topics || []),
19176
19153
  ...getAsArray(selectField(source, 'inspireTheme_syn')),
19177
19154
  ],
19178
19155
  }),
19179
- MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('MD_ConstraintsUseLimitationObject', output, source),
19180
- MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('MD_LegalConstraintsUseLimitationObject', output, source),
19181
- MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('MD_LegalConstraintsOtherConstraintsObject', output, source),
19182
- MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('MD_SecurityConstraintsUseLimitationObject', output, source),
19183
- licenseObject: (output, source) => ({
19184
- ...output,
19185
- licenses: getAsArray(selectField(source, 'licenseObject')).map((license) => {
19186
- const link = getAsUrl(selectField(license, 'link'));
19187
- return {
19188
- text: selectTranslatedValue(license, this.lang3),
19189
- ...(link ? { link } : {}),
19190
- };
19191
- }),
19192
- }),
19156
+ MD_ConstraintsUseLimitationObject: (output, source) => this.constraintField('other', output, getAsArray(selectField(source, 'MD_ConstraintsUseLimitationObject'))),
19157
+ MD_LegalConstraintsUseLimitationObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsUseLimitationObject'))),
19158
+ MD_LegalConstraintsOtherConstraintsObject: (output, source) => this.constraintField('legal', output, getAsArray(selectField(source, 'MD_LegalConstraintsOtherConstraintsObject'))),
19159
+ MD_SecurityConstraintsUseLimitationObject: (output, source) => this.constraintField('security', output, getAsArray(selectField(source, 'MD_SecurityConstraintsUseLimitationObject'))),
19160
+ licenseObject: (output, source) => this.constraintField('license', output, getAsArray(selectField(source, 'licenseObject'))),
19193
19161
  lineageObject: (output, source) => ({
19194
19162
  ...output,
19195
19163
  lineage: selectTranslatedField(source, 'lineageObject', this.lang3),
@@ -19251,31 +19219,42 @@ class Gn4FieldMapper {
19251
19219
  },
19252
19220
  };
19253
19221
  this.genericField = (output) => output;
19254
- this.constraintField = (fieldName, output, source) => ({
19255
- ...output,
19256
- ...(fieldName.endsWith('UseLimitationObject')
19257
- ? {
19258
- legalConstraints: fieldName === 'MD_LegalConstraintsUseLimitationObject'
19259
- ? [
19260
- ...(output.legalConstraints || []),
19261
- ...selectField(source, fieldName).map((source) => selectTranslatedValue(source, this.lang3)),
19262
- ]
19263
- : output.legalConstraints || [],
19264
- useLimitations: [
19265
- ...(output.useLimitations || []),
19266
- ...selectField(source, fieldName).map((source) => selectTranslatedValue(source, this.lang3)),
19267
- ],
19268
- }
19269
- : {
19270
- accessConstraints: [
19271
- ...(output.accessConstraints || []),
19272
- ...selectField(source, fieldName).map((field) => ({
19273
- text: selectTranslatedValue(field, this.lang3),
19274
- type: this.getConstraintsType(fieldName),
19275
- })),
19276
- ],
19277
- }),
19278
- });
19222
+ this.constraintField = (type, output, constraintArray) => {
19223
+ let outputField;
19224
+ switch (type) {
19225
+ case 'license':
19226
+ outputField = 'licenses';
19227
+ break;
19228
+ case 'legal':
19229
+ outputField = 'legalConstraints';
19230
+ break;
19231
+ case 'security':
19232
+ outputField = 'securityConstraints';
19233
+ break;
19234
+ case 'other':
19235
+ outputField = 'otherConstraints';
19236
+ break;
19237
+ }
19238
+ const outputArray = outputField in output ? output[outputField] : [];
19239
+ outputArray.push(...constraintArray.map((item) => {
19240
+ const text = selectTranslatedValue(item, this.lang3);
19241
+ const url = getAsUrl(selectField(item, 'link'));
19242
+ return {
19243
+ text,
19244
+ ...(url ? { url } : {}),
19245
+ };
19246
+ }));
19247
+ const result = {
19248
+ ...output,
19249
+ [outputField]: outputArray,
19250
+ };
19251
+ // avoid legal constraints being duplicates of licenses
19252
+ if ('legalConstraints' in result &&
19253
+ (type === 'legal' || type === 'license')) {
19254
+ result.legalConstraints = result.legalConstraints.filter((constraint) => !output.licenses?.some((license) => license.text === constraint.text));
19255
+ }
19256
+ return result;
19257
+ };
19279
19258
  this.mapLink = (sourceLink) => {
19280
19259
  const url = getAsUrl(selectFallback(selectTranslatedField(sourceLink, 'urlObject', this.lang3), selectField(sourceLink, 'url')));
19281
19260
  const name = selectFallback(selectTranslatedField(sourceLink, 'nameObject', this.lang3), selectField(sourceLink, 'name'));
@@ -19323,17 +19302,6 @@ class Gn4FieldMapper {
19323
19302
  extras: { ...(output.extras || {}), ...value },
19324
19303
  });
19325
19304
  }
19326
- getConstraintsType(indexField) {
19327
- switch (indexField) {
19328
- case 'MD_LegalConstraintsUseLimitationObject':
19329
- return 'legal';
19330
- case 'MD_SecurityConstraintsUseLimitationObject':
19331
- return 'security';
19332
- case 'MD_ConstraintsUseLimitationObject':
19333
- default:
19334
- return 'other';
19335
- }
19336
- }
19337
19305
  getMappingFn(fieldName) {
19338
19306
  return fieldName in this.fields ? this.fields[fieldName] : this.genericField;
19339
19307
  }
@@ -19395,12 +19363,13 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
19395
19363
  recordUpdated: null,
19396
19364
  ownerOrganization: null,
19397
19365
  licenses: [],
19366
+ legalConstraints: [],
19367
+ securityConstraints: [],
19368
+ otherConstraints: [],
19398
19369
  contacts: [],
19399
19370
  contactsForResource: [],
19400
- accessConstraints: [],
19401
19371
  keywords: [],
19402
- themes: [],
19403
- useLimitations: [],
19372
+ topics: [],
19404
19373
  spatialExtents: [],
19405
19374
  temporalExtents: [],
19406
19375
  overviews: [],
@@ -20168,11 +20137,18 @@ class OrganizationsFromMetadataService {
20168
20137
  if (!allContactOrgs.length)
20169
20138
  return of(record);
20170
20139
  const ownerOrganization = allContactOrgs[0];
20171
- 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]) => {
20172
20146
  const recordOrganisation = organisations.filter((org) => org.name === ownerOrganization.name)[0];
20147
+ const logoUrl = group?.logo && getAsUrl(`${IMAGE_URL$1}${group.logo}`);
20173
20148
  return {
20174
20149
  ...record,
20175
20150
  ownerOrganization: {
20151
+ logoUrl,
20176
20152
  ...ownerOrganization,
20177
20153
  ...recordOrganisation,
20178
20154
  },
@@ -20483,12 +20459,21 @@ class Gn4PlatformMapper {
20483
20459
  const { enabled, emailAddresses, organisation, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
20484
20460
  return { ...apiUser, id: id.toString() };
20485
20461
  }
20486
- thesaurusFromApi(thesaurus) {
20462
+ thesaurusFromApi(thesaurus, lang3) {
20487
20463
  return thesaurus.map((keyword) => {
20488
- 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;
20489
20473
  return {
20490
- key: uri,
20491
- label: value,
20474
+ key,
20475
+ label,
20476
+ description,
20492
20477
  };
20493
20478
  });
20494
20479
  }
@@ -20501,13 +20486,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
20501
20486
 
20502
20487
  const minApiVersion = '4.2.2';
20503
20488
  class Gn4PlatformService {
20504
- constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService) {
20489
+ constructor(siteApiService, meApi, usersApi, mapper, toolsApiService, registriesApiService, langService) {
20505
20490
  this.siteApiService = siteApiService;
20506
20491
  this.meApi = meApi;
20507
20492
  this.usersApi = usersApi;
20508
20493
  this.mapper = mapper;
20509
20494
  this.toolsApiService = toolsApiService;
20510
20495
  this.registriesApiService = registriesApiService;
20496
+ this.langService = langService;
20511
20497
  this.type = 'GeoNetwork';
20512
20498
  this.keyTranslations$ = this.toolsApiService
20513
20499
  .getTranslationsPackage1('gnui')
@@ -20521,6 +20507,11 @@ class Gn4PlatformService {
20521
20507
  throw new Error(`Gn4 API version is not compatible.\nMinimum: ${minApiVersion}\nYour version: ${version}`);
20522
20508
  }
20523
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 = {};
20524
20515
  this.me$ = this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay({ bufferSize: 1, refCount: true }));
20525
20516
  this.isAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
20526
20517
  this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay());
@@ -20547,19 +20538,36 @@ class Gn4PlatformService {
20547
20538
  return this.users$;
20548
20539
  }
20549
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
+ }
20550
20554
  return this.keyTranslations$.pipe(map$1((translations) => translations[key]));
20551
20555
  }
20552
- getThesaurusByLang(thesaurusName, lang) {
20553
- return this.registriesApiService
20554
- .searchKeywords(null, lang, 1000, 0, null, [thesaurusName])
20555
- .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];
20556
20564
  }
20557
- 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 }); }
20558
20566
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService }); }
20559
20567
  }
20560
20568
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: Gn4PlatformService, decorators: [{
20561
20569
  type: Injectable
20562
- }], 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 }]; } });
20563
20571
 
20564
20572
  function provideGn4() {
20565
20573
  return [
@@ -22637,6 +22645,9 @@ class MapContextService {
22637
22645
  if (mapConfig) {
22638
22646
  mapContext = this.mergeMapConfigWithContext(mapContext, mapConfig);
22639
22647
  }
22648
+ else {
22649
+ mapContext.layers = this.addDefaultBaselayerContext(mapContext.layers);
22650
+ }
22640
22651
  if (!mapContext.view?.extent &&
22641
22652
  (!mapContext.view?.center || !mapContext.view?.zoom)) {
22642
22653
  mapContext.view = this.getFallbackView(mapConfig);
@@ -22747,6 +22758,11 @@ class MapContextService {
22747
22758
  }
22748
22759
  return view;
22749
22760
  }
22761
+ addDefaultBaselayerContext(layers) {
22762
+ return layers.includes(DEFAULT_BASELAYER_CONTEXT)
22763
+ ? layers
22764
+ : [DEFAULT_BASELAYER_CONTEXT, ...layers];
22765
+ }
22750
22766
  mergeMapConfigWithContext(mapContext, mapConfig) {
22751
22767
  return {
22752
22768
  ...mapContext,
@@ -23425,8 +23441,7 @@ class MetadataQualityComponent {
23425
23441
  : this.calculatedQualityScore;
23426
23442
  }
23427
23443
  get calculatedQualityScore() {
23428
- return Math.round((this.items.filter(({ value }) => value === true).length * 100) /
23429
- this.items.length);
23444
+ return Math.round((this.items.filter(({ value }) => value).length * 100) / this.items.length);
23430
23445
  }
23431
23446
  showMenu() {
23432
23447
  this.isMenuShown = true;
@@ -23444,7 +23459,7 @@ class MetadataQualityComponent {
23444
23459
  this.items = [];
23445
23460
  this.add('title', !!this.metadata?.title);
23446
23461
  this.add('description', !!this.metadata?.abstract);
23447
- this.add('topic', this.metadata?.themes?.length > 0);
23462
+ this.add('topic', this.metadata?.topics?.length > 0);
23448
23463
  this.add('keywords', this.metadata?.keywords?.length > 0);
23449
23464
  this.add('legalConstraints', this.metadata?.legalConstraints?.length > 0);
23450
23465
  this.add('organisation', !!contact?.organization);
@@ -23892,6 +23907,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23892
23907
  type: Input
23893
23908
  }] } });
23894
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
+
23895
23924
  class ContentGhostComponent {
23896
23925
  constructor() {
23897
23926
  this.ghostClass = '';
@@ -24046,36 +24075,38 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
24046
24075
  args: ['container']
24047
24076
  }] } });
24048
24077
 
24049
- class MarkdownParserComponent {
24050
- get parsedMarkdown() {
24051
- return marked.parse(this.textContent);
24052
- }
24053
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24054
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24055
- }
24056
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
24057
- type: Component,
24058
- args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none!important;@apply font-bold;}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
24059
- }], propDecorators: { textContent: [{
24060
- type: Input
24061
- }] } });
24062
-
24063
24078
  class MetadataInfoComponent {
24064
24079
  constructor() {
24065
24080
  this.keyword = new EventEmitter();
24066
24081
  }
24067
24082
  get hasUsage() {
24068
24083
  return (this.metadata.extras?.isOpenData === true ||
24069
- this.metadata.useLimitations?.length ||
24070
- this.metadata.accessConstraints?.length);
24084
+ (this.metadata.legalConstraints?.length > 0 &&
24085
+ this.legalConstraints.length > 0) ||
24086
+ (this.metadata.otherConstraints?.length > 0 &&
24087
+ this.otherConstraints.length > 0) ||
24088
+ (this.metadata.licenses?.length > 0 && this.licenses.length > 0));
24071
24089
  }
24072
- get usages() {
24090
+ get legalConstraints() {
24073
24091
  let array = [];
24074
- if (this.metadata.useLimitations?.length) {
24075
- array = array.concat(this.metadata.useLimitations);
24092
+ if (this.metadata.legalConstraints?.length) {
24093
+ array = array.concat(this.metadata.legalConstraints.filter((c) => c.text).map((c) => c.text));
24076
24094
  }
24077
- if (this.metadata.accessConstraints?.length) {
24078
- array = array.concat(this.metadata.accessConstraints.map((c) => c.text));
24095
+ return array;
24096
+ }
24097
+ get otherConstraints() {
24098
+ let array = [];
24099
+ if (this.metadata.otherConstraints?.length) {
24100
+ array = array.concat(this.metadata.otherConstraints.filter((c) => c.text).map((c) => c.text));
24101
+ }
24102
+ return array;
24103
+ }
24104
+ get licenses() {
24105
+ let array = [];
24106
+ if (this.metadata.licenses?.length) {
24107
+ array = array.concat(this.metadata.licenses
24108
+ .filter((c) => c.text)
24109
+ .map((c) => ({ text: c.text, url: c.url })));
24079
24110
  }
24080
24111
  return array;
24081
24112
  }
@@ -24097,16 +24128,12 @@ class MetadataInfoComponent {
24097
24128
  onKeywordClick(keyword) {
24098
24129
  this.keyword.emit(keyword);
24099
24130
  }
24100
- copyText() {
24101
- navigator.clipboard.writeText(this.metadata.uniqueIdentifier);
24102
- event.target.blur();
24103
- }
24104
24131
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24105
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"py-4 px-6 rounded bg-gray-100 text-gray-700 flex flex-wrap gap-2\">\n <gn-ui-badge *ngIf=\"metadata.extras?.isOpenData\">\n <span translate>record.metadata.isOpenData</span>\n </gn-ui-badge>\n <span\n class=\"text-primary font-medium\"\n *ngFor=\"let usage of usages\"\n gnUiLinkify\n >\n {{ usage }}\n </span>\n <span class=\"text-primary font-medium noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
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 }); }
24106
24133
  }
24107
24134
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
24108
24135
  type: Component,
24109
- args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"py-4 px-6 rounded bg-gray-100 text-gray-700 flex flex-wrap gap-2\">\n <gn-ui-badge *ngIf=\"metadata.extras?.isOpenData\">\n <span translate>record.metadata.isOpenData</span>\n </gn-ui-badge>\n <span\n class=\"text-primary font-medium\"\n *ngFor=\"let usage of usages\"\n gnUiLinkify\n >\n {{ usage }}\n </span>\n <span class=\"text-primary font-medium noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
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"] }]
24110
24137
  }], propDecorators: { metadata: [{
24111
24138
  type: Input
24112
24139
  }], incomplete: [{
@@ -24175,11 +24202,11 @@ class ButtonComponent {
24175
24202
  propagateToDocumentOnly(event);
24176
24203
  }
24177
24204
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24178
- 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 }); }
24179
24206
  }
24180
24207
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
24181
24208
  type: Component,
24182
- 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"] }]
24183
24210
  }], propDecorators: { type: [{
24184
24211
  type: Input
24185
24212
  }], disabled: [{
@@ -25181,11 +25208,11 @@ class TextAreaComponent {
25181
25208
  this.rawChange.next(value);
25182
25209
  }
25183
25210
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25184
- 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"] }); }
25185
25212
  }
25186
25213
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, decorators: [{
25187
25214
  type: Component,
25188
- 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"] }]
25189
25216
  }], propDecorators: { value: [{
25190
25217
  type: Input
25191
25218
  }], placeholder: [{
@@ -25773,10 +25800,8 @@ class UiInputsModule {
25773
25800
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
25774
25801
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
25775
25802
  AutocompleteComponent,
25776
- ButtonComponent,
25777
25803
  TextInputComponent,
25778
25804
  DragAndDropFileInputComponent,
25779
- TextAreaComponent,
25780
25805
  ChipsInputComponent,
25781
25806
  NavigationButtonComponent,
25782
25807
  StarToggleComponent,
@@ -25809,7 +25834,9 @@ class UiInputsModule {
25809
25834
  MatInputModule,
25810
25835
  MatDatepickerModule,
25811
25836
  MatNativeDateModule,
25812
- EditableLabelDirective], exports: [DropdownSelectorComponent,
25837
+ EditableLabelDirective,
25838
+ TextAreaComponent,
25839
+ ButtonComponent], exports: [DropdownSelectorComponent,
25813
25840
  AutocompleteComponent,
25814
25841
  ButtonComponent,
25815
25842
  TextInputComponent,
@@ -25851,10 +25878,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25851
25878
  declarations: [
25852
25879
  DropdownSelectorComponent,
25853
25880
  AutocompleteComponent,
25854
- ButtonComponent,
25855
25881
  TextInputComponent,
25856
25882
  DragAndDropFileInputComponent,
25857
- TextAreaComponent,
25858
25883
  ChipsInputComponent,
25859
25884
  NavigationButtonComponent,
25860
25885
  StarToggleComponent,
@@ -25893,6 +25918,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25893
25918
  MatDatepickerModule,
25894
25919
  MatNativeDateModule,
25895
25920
  EditableLabelDirective,
25921
+ TextAreaComponent,
25922
+ ButtonComponent,
25896
25923
  ],
25897
25924
  exports: [
25898
25925
  DropdownSelectorComponent,
@@ -26012,7 +26039,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26012
26039
 
26013
26040
  const DEFAULT_PARAMS = {
26014
26041
  OFFSET: '',
26015
- LIMIT: '',
26042
+ LIMIT: '-1',
26016
26043
  FORMAT: 'json',
26017
26044
  };
26018
26045
  class RecordApiFormComponent {
@@ -26041,6 +26068,8 @@ class RecordApiFormComponent {
26041
26068
  }
26042
26069
  return outputUrl;
26043
26070
  }));
26071
+ this.noLimitChecked$ = this.limit$.pipe(map$2((limit) => limit === '-1' || limit === ''));
26072
+ this.displayLimit$ = this.limit$.pipe(map$2((limit) => (limit !== '-1' ? limit : '')));
26044
26073
  }
26045
26074
  set apiLink(value) {
26046
26075
  this.apiBaseUrl = value ? value.url.href : undefined;
@@ -26050,10 +26079,11 @@ class RecordApiFormComponent {
26050
26079
  this.offset$.next(value);
26051
26080
  }
26052
26081
  setLimit(value) {
26053
- this.limit$.next(value);
26082
+ const newLimit = value === '' ? '-1' : value;
26083
+ this.limit$.next(newLimit);
26054
26084
  }
26055
26085
  setFormat(value) {
26056
- this.format$.next(value);
26086
+ this.format$.next(String(value));
26057
26087
  }
26058
26088
  resetUrl() {
26059
26089
  this.offset$.next(DEFAULT_PARAMS.OFFSET);
@@ -26061,11 +26091,11 @@ class RecordApiFormComponent {
26061
26091
  this.format$.next(DEFAULT_PARAMS.FORMAT);
26062
26092
  }
26063
26093
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
26064
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (input)=\"setLimit($event.target.value)\"\n [value]=\"limit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"(limit$ | async) === ''\"\n (change)=\"setLimit('')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (input)=\"setOffset($event.target.value)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26094
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordApiFormComponent, selector: "gn-ui-record-api-form", inputs: { apiLink: "apiLink" }, ngImport: i0, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"], dependencies: [{ kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }, { kind: "component", type: TextInputComponent, selector: "gn-ui-text-input", inputs: ["value", "hint", "required"], outputs: ["valueChange"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
26065
26095
  }
26066
26096
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordApiFormComponent, decorators: [{
26067
26097
  type: Component,
26068
- args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (input)=\"setLimit($event.target.value)\"\n [value]=\"limit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"(limit$ | async) === ''\"\n (change)=\"setLimit('')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (input)=\"setOffset($event.target.value)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"] }]
26098
+ args: [{ selector: 'gn-ui-record-api-form', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-8\">\n <div class=\"flex flex-col bg-white p-8 ng-star-inserted shadow-xl gap-8\">\n <div class=\"flex flex-row\">\n <div class=\"text-[16px] text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.create\n </div>\n <button\n (click)=\"resetUrl()\"\n class=\"bg-primary-opacity-50 inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded capitalize text-primary-lightest hover:bg-primary transition-colors\"\n >\n <p class=\"text-[13px] uppercase\" translate>\n record.metadata.api.form.reset\n </p>\n </button>\n </div>\n <div class=\"flex flex-row flex-wrap justify-between flex-grow gap-5\">\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-[14px]\" translate>record.metadata.api.form.limit</p>\n <div class=\"flex flex-row items-center gap-2\">\n <gn-ui-text-input\n class=\"mr-2 w-20\"\n (valueChange)=\"setLimit($event)\"\n [value]=\"displayLimit$ | async\"\n hint=\"\"\n >\n </gn-ui-text-input>\n <div class=\"flex items-center\">\n <input\n class=\"mr-2 cursor-pointer\"\n type=\"checkbox\"\n [checked]=\"noLimitChecked$ | async\"\n (change)=\"setLimit('-1')\"\n />\n <span class=\"text-sm\" translate\n >record.metadata.api.form.limit.all</span\n >\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.offset</p>\n <gn-ui-text-input\n class=\"w-20\"\n [value]=\"offset$ | async\"\n (valueChange)=\"setOffset($event)\"\n hint=\"\"\n >\n </gn-ui-text-input>\n </div>\n <div class=\"flex flex-col gap-3\">\n <p class=\"text-sm\" translate>record.metadata.api.form.type</p>\n <gn-ui-dropdown-selector\n #dropdown\n [title]=\"''\"\n extraBtnClass=\"secondary min-w-full !w-40 !text-black\"\n [showTitle]=\"false\"\n class=\"text-black\"\n [choices]=\"formatsList\"\n (selectValue)=\"setFormat($event)\"\n [selected]=\"format$ | async\"\n ></gn-ui-dropdown-selector>\n </div>\n </div>\n </div>\n <div class=\"flex flex-col gap-3 mb-3\">\n <div class=\"text-sm text-black truncate font-title w-11/12\" translate>\n record.metadata.api.form.customUrl\n </div>\n <div class=\"bg-white rounded-lg\">\n <gn-ui-copy-text-button\n [text]=\"apiQueryUrl$ | async\"\n ></gn-ui-copy-text-button>\n </div>\n </div>\n</div>\n", styles: [":host ::ng-deep input{color:#000;opacity:1}:host ::ng-deep gn-ui-copy-text-button input[type=text]{color:#000;background-color:#fff}:host ::ng-deep gn-ui-copy-text-button button,host ::ng-deep gn-ui-copy-text-button button:hover{background-color:var(--color-secondary)!important}:host ::ng-deep gn-ui-copy-text-button button mat-icon{color:#fff!important;opacity:1!important}:host ::ng-deep gn-ui-copy-text-button button:hover mat-icon{color:#d3d3d3!important}\n"] }]
26069
26099
  }], propDecorators: { apiLink: [{
26070
26100
  type: Input
26071
26101
  }] } });
@@ -26111,7 +26141,6 @@ class UiElementsModule {
26111
26141
  PaginationButtonsComponent,
26112
26142
  MaxLinesComponent,
26113
26143
  RecordApiFormComponent,
26114
- MarkdownParserComponent,
26115
26144
  ImageOverlayPreviewComponent], imports: [CommonModule,
26116
26145
  MatIconModule,
26117
26146
  MatTooltipModule,
@@ -26120,7 +26149,8 @@ class UiElementsModule {
26120
26149
  RouterModule,
26121
26150
  UiInputsModule,
26122
26151
  FormsModule,
26123
- NgOptimizedImage], exports: [MetadataInfoComponent,
26152
+ NgOptimizedImage,
26153
+ MarkdownParserComponent], exports: [MetadataInfoComponent,
26124
26154
  ContentGhostComponent,
26125
26155
  DownloadItemComponent,
26126
26156
  DownloadsListComponent,
@@ -26167,6 +26197,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26167
26197
  UiInputsModule,
26168
26198
  FormsModule,
26169
26199
  NgOptimizedImage,
26200
+ MarkdownParserComponent,
26170
26201
  ],
26171
26202
  declarations: [
26172
26203
  MetadataInfoComponent,
@@ -26189,7 +26220,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26189
26220
  PaginationButtonsComponent,
26190
26221
  MaxLinesComponent,
26191
26222
  RecordApiFormComponent,
26192
- MarkdownParserComponent,
26193
26223
  ImageOverlayPreviewComponent,
26194
26224
  ],
26195
26225
  exports: [
@@ -26873,6 +26903,9 @@ const getFavoritesOnly = createSelector(getSearchStateSearch, (state) => state.p
26873
26903
  const getError = createSelector(getSearchStateSearch, (state) => state.error);
26874
26904
  const getSpatialFilterEnabled = createSelector(getSearchStateSearch, (state) => state.params.useSpatialFilter);
26875
26905
 
26906
+ // this geometry will be used to filter & boost results accordingly
26907
+ const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
26908
+
26876
26909
  class SearchFacade {
26877
26910
  constructor(store, filterGeometry) {
26878
26911
  this.store = store;
@@ -26977,6 +27010,7 @@ class SearchFacade {
26977
27010
  this.store.dispatch(new SetFilters({}, this.searchId));
26978
27011
  this.store.dispatch(new SetSortBy([], this.searchId));
26979
27012
  this.store.dispatch(new SetFavoritesOnly(false, this.searchId));
27013
+ return this;
26980
27014
  }
26981
27015
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade, deps: [{ token: i1$2.Store }, { token: FILTER_GEOMETRY, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
26982
27016
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: SearchFacade }); }
@@ -27361,8 +27395,11 @@ class FuzzySearchComponent {
27361
27395
  this.searchService.updateFilters({ any });
27362
27396
  }
27363
27397
  }
27364
- handleInputCleared() {
27365
- this.searchService.updateFilters({ any: '' });
27398
+ async handleInputCleared() {
27399
+ const currentSearchFilters = await firstValueFrom(this.searchFacade.searchFilters$);
27400
+ if (currentSearchFilters.any) {
27401
+ this.searchService.updateFilters({ any: '' });
27402
+ }
27366
27403
  }
27367
27404
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FuzzySearchComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: RecordsRepositoryInterface }], target: i0.ɵɵFactoryTarget.Component }); }
27368
27405
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FuzzySearchComponent, selector: "gn-ui-fuzzy-search", inputs: { autoFocus: "autoFocus" }, outputs: { itemSelected: "itemSelected", inputSubmitted: "inputSubmitted" }, viewQueries: [{ propertyName: "autocomplete", first: true, predicate: AutocompleteComponent, descendants: true }], ngImport: i0, template: "<gn-ui-autocomplete\n [placeholder]=\"'search.field.any.placeholder' | translate\"\n [displayWithFn]=\"displayWithFn\"\n [action]=\"autoCompleteAction\"\n (itemSelected)=\"handleItemSelection($event)\"\n (inputSubmitted)=\"handleInputSubmission($event)\"\n (inputCleared)=\"handleInputCleared()\"\n [value]=\"searchInputValue$ | async\"\n [clearOnSelection]=\"true\"\n [autoFocus]=\"autoFocus\"\n></gn-ui-autocomplete>\n", styles: [""], dependencies: [{ kind: "component", type: AutocompleteComponent, selector: "gn-ui-autocomplete", inputs: ["placeholder", "action", "value", "clearOnSelection", "autoFocus", "displayWithFn"], outputs: ["itemSelected", "inputSubmitted", "inputCleared"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
@@ -27442,6 +27479,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
27442
27479
  args: [RESULTS_LAYOUT_CONFIG]
27443
27480
  }] }]; } });
27444
27481
 
27482
+ // expects the replacement key ${uuid}
27483
+ const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
27484
+
27445
27485
  class FavoriteStarComponent {
27446
27486
  set record(value) {
27447
27487
  this.record_ = value;
@@ -27818,10 +27858,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
27818
27858
  class AbstractSearchField {
27819
27859
  }
27820
27860
  class SimpleSearchField {
27821
- constructor(esFieldName, order = 'asc', injector) {
27861
+ constructor(esFieldName, injector, order = 'asc', orderType = 'key') {
27822
27862
  this.esFieldName = esFieldName;
27823
- this.order = order;
27824
27863
  this.injector = injector;
27864
+ this.order = order;
27865
+ this.orderType = orderType;
27825
27866
  this.repository = this.injector.get(RecordsRepositoryInterface);
27826
27867
  // FIXME: this is required to register runtime fields; abstract this as well
27827
27868
  this.esService = this.injector.get(ElasticsearchService);
@@ -27832,12 +27873,12 @@ class SimpleSearchField {
27832
27873
  type: 'terms',
27833
27874
  field: this.esFieldName,
27834
27875
  limit: 1000,
27835
- sort: [this.order, 'key'],
27876
+ sort: [this.order, this.orderType],
27836
27877
  },
27837
27878
  };
27838
27879
  }
27839
27880
  async getBucketLabel(bucket) {
27840
- return bucket.term;
27881
+ return bucket.term.toString();
27841
27882
  }
27842
27883
  getAvailableValues() {
27843
27884
  return this.repository.aggregate(this.getAggregations()).pipe(map$1((response) => response[this.esFieldName].buckets || []), switchMap((buckets) => {
@@ -27865,9 +27906,13 @@ class SimpleSearchField {
27865
27906
  return of(values);
27866
27907
  }
27867
27908
  }
27868
- class KeySearchField extends SimpleSearchField {
27869
- constructor() {
27870
- 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;
27871
27916
  this.platformService = this.injector.get(PlatformServiceInterface);
27872
27917
  }
27873
27918
  async getTranslation(key) {
@@ -27877,26 +27922,36 @@ class KeySearchField extends SimpleSearchField {
27877
27922
  return (await this.getTranslation(bucket.term)) || bucket.term;
27878
27923
  }
27879
27924
  getAvailableValues() {
27925
+ if (this.orderType === 'count')
27926
+ return super.getAvailableValues();
27880
27927
  // sort values by alphabetical order
27881
27928
  return super
27882
27929
  .getAvailableValues()
27883
27930
  .pipe(map$1((values) => values.sort((a, b) => new Intl.Collator().compare(a.label, b.label))));
27884
27931
  }
27885
27932
  }
27886
- class ThesaurusField extends KeySearchField {
27887
- constructor(esFieldName, thesaurusName, order = 'asc', injector) {
27888
- super(esFieldName, order, injector);
27889
- 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;
27890
27945
  this.langService = this.injector.get(LangService);
27891
- this.thesaurus$ = this.platformService
27892
- .getThesaurusByLang(this.thesaurusName, this.langService.iso3)
27893
- .pipe(catchError(() => {
27894
- console.warn('Error while loading thesaurus language package');
27895
- return of([]);
27896
- }), shareReplay(1));
27897
- }
27898
- async getTranslation(key) {
27899
- 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
+ }
27900
27955
  }
27901
27956
  }
27902
27957
  class FullTextSearchField {
@@ -27916,7 +27971,7 @@ marker('search.filters.isSpatial.yes');
27916
27971
  marker('search.filters.isSpatial.no');
27917
27972
  class IsSpatialSearchField extends SimpleSearchField {
27918
27973
  constructor(injector) {
27919
- super('isSpatial', 'asc', injector);
27974
+ super('isSpatial', injector, 'asc');
27920
27975
  this.translateService = this.injector.get(TranslateService);
27921
27976
  this.esService.registerRuntimeField('isSpatial', `String result = 'no';
27922
27977
  String formats = doc.format.join('|').toLowerCase();
@@ -27966,7 +28021,7 @@ marker('search.filters.license.unknown');
27966
28021
  // Note: values are inspired from https://doc.data.gouv.fr/moissonnage/licences/
27967
28022
  class LicenseSearchField extends SimpleSearchField {
27968
28023
  constructor(injector) {
27969
- super('license', 'asc', injector);
28024
+ super('license', injector, 'asc');
27970
28025
  this.translateService = this.injector.get(TranslateService);
27971
28026
  this.esService.registerRuntimeField('license', `String raw = '';
27972
28027
  if (doc.containsKey('licenseObject.default.keyword') && doc['licenseObject.default.keyword'].length > 0)
@@ -28050,7 +28105,7 @@ class OrganizationSearchField {
28050
28105
  }
28051
28106
  class OwnerSearchField extends SimpleSearchField {
28052
28107
  constructor(injector) {
28053
- super('owner', 'asc', injector);
28108
+ super('owner', injector, 'asc');
28054
28109
  }
28055
28110
  getAvailableValues() {
28056
28111
  return of([]);
@@ -28059,6 +28114,7 @@ class OwnerSearchField extends SimpleSearchField {
28059
28114
 
28060
28115
  marker('search.filters.format');
28061
28116
  marker('search.filters.inspireKeyword');
28117
+ marker('search.filters.keyword');
28062
28118
  marker('search.filters.isSpatial');
28063
28119
  marker('search.filters.license');
28064
28120
  marker('search.filters.publicationYear');
@@ -28076,13 +28132,14 @@ class FieldsService {
28076
28132
  this.injector = injector;
28077
28133
  this.fields = {
28078
28134
  publisher: new OrganizationSearchField(this.injector),
28079
- format: new SimpleSearchField('format', 'asc', this.injector),
28080
- resourceType: new KeySearchField('resourceType', 'asc', this.injector),
28081
- representationType: new KeySearchField('cl_spatialRepresentationType.key', 'asc', this.injector),
28082
- publicationYear: new SimpleSearchField('publicationYearForResource', 'desc', this.injector),
28083
- topic: new KeySearchField('cl_topic.key', 'asc', this.injector),
28084
- inspireKeyword: new ThesaurusField('th_httpinspireeceuropaeutheme-theme.link', 'external.theme.httpinspireeceuropaeutheme-theme', 'asc', this.injector),
28085
- 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'),
28086
28143
  isSpatial: new IsSpatialSearchField(this.injector),
28087
28144
  q: new FullTextSearchField(),
28088
28145
  license: new LicenseSearchField(this.injector),
@@ -28156,10 +28213,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28156
28213
  type: Input
28157
28214
  }] } });
28158
28215
 
28159
- // this geometry will be used to filter & boost results accordingly
28160
- const FILTER_GEOMETRY = new InjectionToken('filter-geometry');
28161
- // expects the replacement key ${uuid}
28162
- const RECORD_URL_TOKEN = new InjectionToken('record-url-token');
28163
28216
  class FeatureSearchModule {
28164
28217
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
28165
28218
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureSearchModule, declarations: [SortByComponent,
@@ -28265,7 +28318,6 @@ class ResultsTableComponent {
28265
28318
  this.selectionService = selectionService;
28266
28319
  this.recordClick = new EventEmitter();
28267
28320
  this.records$ = this.searchFacade.results$;
28268
- this.recordCount$ = this.searchFacade.resultsHits$;
28269
28321
  this.selectedRecords$ = this.selectionService.selectedRecordsIdentifiers$;
28270
28322
  }
28271
28323
  dateToString(date) {
@@ -28351,7 +28403,7 @@ class ResultsTableComponent {
28351
28403
  }));
28352
28404
  }
28353
28405
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, deps: [{ token: SearchFacade }, { token: SearchService }, { token: SelectionService }], target: i0.ɵɵFactoryTarget.Component }); }
28354
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", outputs: { recordClick: "recordClick" }, ngImport: i0, template: "<div>\n <div class=\"flex\" data-cy=\"records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: (records$ | async).length,\n hits: (recordCount$ | async)\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"(selectedRecords$ | async).length as selectedRecordCount\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecordCount }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n >\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n </gn-ui-interactive-table>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
28406
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ResultsTableComponent, isStandalone: true, selector: "gn-ui-results-table", outputs: { recordClick: "recordClick" }, ngImport: i0, template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: CheckboxComponent, selector: "gn-ui-checkbox", inputs: ["type", "checked", "indeterminate"], outputs: ["changed"] }, { kind: "component", type: InteractiveTableComponent, selector: "gn-ui-interactive-table", inputs: ["items"], outputs: ["itemClick"] }, { kind: "component", type: InteractiveTableColumnComponent, selector: "gn-ui-interactive-table-column", inputs: ["grow", "sortable", "activeSort"], outputs: ["sortChange"] }, { kind: "ngmodule", type: MatIconModule }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "ngmodule", type: TranslateModule }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }] }); }
28355
28407
  }
28356
28408
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ResultsTableComponent, decorators: [{
28357
28409
  type: Component,
@@ -28362,7 +28414,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28362
28414
  InteractiveTableColumnComponent,
28363
28415
  MatIconModule,
28364
28416
  TranslateModule,
28365
- ], template: "<div>\n <div class=\"flex\" data-cy=\"records-information\">\n <div\n translate\n class=\"my-8 ml-4 block text-gray-800\"\n [translateParams]=\"{\n displayed: (records$ | async).length,\n hits: (recordCount$ | async)\n }\"\n >\n results.records.hits.displayedOn\n </div>\n <div\n *ngIf=\"(selectedRecords$ | async).length as selectedRecordCount\"\n class=\"my-8 ml-6 block text-gray-400 selected-records\"\n translate\n [translateParams]=\"{ amount: selectedRecordCount }\"\n >\n results.records.hits.selected\n </div>\n </div>\n\n <gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n >\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n </gn-ui-interactive-table>\n</div>\n" }]
28417
+ ], template: "<gn-ui-interactive-table\n [items]=\"records$ | async\"\n (itemClick)=\"handleRecordClick($event)\"\n>\n <!-- SELECTED COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <gn-ui-checkbox\n [checked]=\"isAllSelected() | async\"\n [indeterminate]=\"isSomeSelected() | async\"\n (changed)=\"toggleSelectAll()\"\n type=\"default\"\n class=\"-m-2 mr-3\"\n >\n </gn-ui-checkbox>\n </ng-template>\n <ng-template #cell let-item>\n <gn-ui-checkbox\n [checked]=\"isChecked(item) | async\"\n (changed)=\"handleRecordSelectedChange($event, item)\"\n class=\"-m-2\"\n type=\"default\"\n ></gn-ui-checkbox>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- TITLE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('resourceTitleObject.default.keyword') | async\"\n (sortChange)=\"setSortBy('resourceTitleObject.default.keyword', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.title</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.title }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- FORMATS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.formats</span>\n </ng-template>\n <ng-template #cell let-item>\n <div\n class=\"flex justify-start items-center gap-2\"\n *ngIf=\"getRecordFormats(item) as formats\"\n [title]=\"formats.join(', ')\"\n >\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[0])\"\n *ngIf=\"formats[0]\"\n >\n {{ formats[0] }}\n </span>\n <span\n class=\"badge-btn min-w-[45px] text-sm text-white px-2 flex-shrink-0\"\n [style.background-color]=\"getBadgeColor(formats[1])\"\n *ngIf=\"formats[1]\"\n >\n {{ formats[1] }}\n </span>\n <div class=\"flex-shrink-0\" *ngIf=\"formats.slice(2).length > 0\">\n <span>+{{ formats.slice(2).length }}</span>\n </div>\n </div>\n <div *ngIf=\"!getRecordFormats(item)\"></div>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- OWNER COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('recordOwner') | async\"\n (sortChange)=\"setSortBy('recordOwner', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.author</span>\n </ng-template>\n <ng-template #cell let-item>\n <mat-icon class=\"material-symbols-outlined\">person</mat-icon>\n <span>{{ formatUserInfo(item.extras?.ownerInfo) }}</span>\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- STATUS COLUMN -->\n <gn-ui-interactive-table-column>\n <ng-template #header>\n <span translate>record.metadata.status</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ item.status }}\n </ng-template>\n </gn-ui-interactive-table-column>\n\n <!-- UPDATE DATE COLUMN -->\n <gn-ui-interactive-table-column\n [sortable]=\"true\"\n [activeSort]=\"isSortedBy('changeDate') | async\"\n (sortChange)=\"setSortBy('changeDate', $event)\"\n >\n <ng-template #header>\n <span translate>record.metadata.updatedOn</span>\n </ng-template>\n <ng-template #cell let-item>\n {{ dateToString(item.recordUpdated) }}\n </ng-template>\n </gn-ui-interactive-table-column>\n</gn-ui-interactive-table>\n" }]
28366
28418
  }], ctorParameters: function () { return [{ type: SearchFacade }, { type: SearchService }, { type: SelectionService }]; }, propDecorators: { recordClick: [{
28367
28419
  type: Output
28368
28420
  }] } });
@@ -28994,7 +29046,7 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
28994
29046
  ...state,
28995
29047
  chartConfig,
28996
29048
  })), on(close, (state) => {
28997
- // eslint-disable-next-line
29049
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
28998
29050
  const { metadata, related, ...stateWithoutMd } = state;
28999
29051
  return stateWithoutMd;
29000
29052
  }));
@@ -32316,5 +32368,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
32316
32368
  * Generated bundle index. Do not edit.
32317
32369
  */
32318
32370
 
32319
- 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, TranslateTestingModule, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, 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 };
32320
32372
  //# sourceMappingURL=geonetwork-ui.mjs.map