geonetwork-ui 2.2.0-dev.ecc0ab67 → 2.2.0

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 (200) 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 +23 -11
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +4 -2
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.mjs +14 -0
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +12 -9
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +33 -8
  8. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +31 -14
  9. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +2 -2
  10. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  11. package/esm2022/libs/feature/editor/src/index.mjs +6 -1
  12. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +8 -0
  13. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +26 -0
  14. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +30 -0
  15. package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +2 -0
  16. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +42 -0
  17. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +13 -0
  18. package/esm2022/libs/feature/editor/src/lib/expressions.mjs +13 -0
  19. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +16 -4
  20. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +34 -0
  21. package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +2 -0
  22. package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +15 -11
  23. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +22 -44
  24. package/esm2022/libs/feature/map/src/lib/map-context/map-context.service.mjs +9 -1
  25. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -13
  26. package/esm2022/libs/feature/router/src/lib/default/index.mjs +2 -1
  27. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +1 -1
  28. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +3 -3
  29. package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +3 -3
  30. package/esm2022/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.mjs +3 -3
  31. package/esm2022/libs/ui/elements/src/lib/max-lines/max-lines.component.mjs +5 -3
  32. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
  33. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +19 -7
  34. package/esm2022/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.mjs +2 -2
  35. package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +3 -3
  36. package/esm2022/libs/ui/elements/src/lib/ui-elements.module.mjs +4 -4
  37. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +9 -9
  38. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
  39. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +3 -3
  40. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.component.mjs +4 -2
  41. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.model.mjs +1 -1
  42. package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +3 -3
  43. package/esm2022/libs/ui/inputs/src/lib/text-area/text-area.component.mjs +3 -3
  44. package/esm2022/libs/ui/inputs/src/lib/ui-inputs.module.mjs +6 -6
  45. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +3 -3
  46. package/esm2022/libs/ui/widgets/src/lib/badge/badge.component.mjs +3 -3
  47. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +18 -1
  48. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
  49. package/esm2022/libs/util/shared/src/lib/utils/temporal-extent-union.mjs +32 -0
  50. package/esm2022/translations/de.json +36 -27
  51. package/esm2022/translations/en.json +28 -19
  52. package/esm2022/translations/es.json +25 -16
  53. package/esm2022/translations/fr.json +46 -37
  54. package/esm2022/translations/it.json +40 -31
  55. package/esm2022/translations/nl.json +26 -17
  56. package/esm2022/translations/pt.json +25 -16
  57. package/fesm2022/geonetwork-ui.mjs +730 -366
  58. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  59. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts +2 -0
  60. package/libs/api/metadata-converter/src/lib/gn4/atomic-operations.d.ts.map +1 -1
  61. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  62. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
  63. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +4 -5
  64. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  65. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts +3 -0
  66. package/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.d.ts.map +1 -0
  67. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
  68. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +3 -3
  69. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  70. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts +1 -1
  71. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  72. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  73. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +16 -2
  74. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  75. package/libs/feature/editor/src/index.d.ts +5 -0
  76. package/libs/feature/editor/src/index.d.ts.map +1 -1
  77. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +23 -0
  78. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -0
  79. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +15 -0
  80. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -0
  81. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +19 -0
  82. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -0
  83. package/libs/feature/editor/src/lib/+state/editor.models.d.ts +2 -0
  84. package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -0
  85. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +18 -0
  86. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -0
  87. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +15 -0
  88. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -0
  89. package/libs/feature/editor/src/lib/expressions.d.ts +4 -0
  90. package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -0
  91. package/libs/feature/editor/src/lib/feature-editor.module.d.ts +3 -1
  92. package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
  93. package/libs/feature/editor/src/lib/fields.config.d.ts +3 -0
  94. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -0
  95. package/libs/feature/editor/src/lib/models/fields.model.d.ts +15 -0
  96. package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +1 -0
  97. package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts +10 -5
  98. package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
  99. package/libs/feature/editor/src/lib/services/editor.service.d.ts +3 -13
  100. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  101. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts +1 -0
  102. package/libs/feature/map/src/lib/map-context/map-context.service.d.ts.map +1 -1
  103. package/libs/feature/router/src/lib/default/index.d.ts +1 -0
  104. package/libs/feature/router/src/lib/default/index.d.ts.map +1 -1
  105. package/libs/feature/router/src/lib/default/router.service.d.ts +1 -1
  106. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  107. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts +1 -1
  108. package/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.d.ts.map +1 -1
  109. package/libs/ui/elements/src/lib/max-lines/max-lines.component.d.ts.map +1 -1
  110. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +9 -3
  111. package/libs/ui/elements/src/lib/metadata-info/metadata-info.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/form-field/form-field.component.d.ts.map +1 -1
  116. package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts +0 -1
  117. package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts.map +1 -1
  118. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts +1 -1
  119. package/libs/ui/inputs/src/lib/text-area/text-area.component.d.ts.map +1 -1
  120. package/libs/ui/inputs/src/lib/ui-inputs.module.d.ts +40 -40
  121. package/libs/ui/layout/src/lib/interactive-table/interactive-table-column/interactive-table-column.component.d.ts +1 -1
  122. package/libs/util/i18n/src/lib/i18n.constants.d.ts +17 -0
  123. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  124. package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
  125. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  126. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts +5 -0
  127. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts.map +1 -0
  128. package/package.json +1 -1
  129. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +57 -2
  130. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +52 -6
  131. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +207 -20
  132. package/src/libs/api/metadata-converter/src/lib/gn4/atomic-operations.ts +29 -0
  133. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +30 -11
  134. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +3 -1
  135. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +4 -5
  136. package/src/libs/api/metadata-converter/src/lib/iso19139/codelists/keyword.mapper.ts +16 -0
  137. package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +11 -9
  138. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +58 -20
  139. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +86 -38
  140. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +1 -1
  141. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +20 -3
  142. package/src/libs/common/fixtures/src/lib/elasticsearch/full-response.ts +1 -1
  143. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +46 -8
  144. package/src/libs/feature/editor/src/index.ts +5 -0
  145. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +24 -0
  146. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +49 -0
  147. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +30 -0
  148. package/src/libs/feature/editor/src/lib/+state/editor.models.ts +1 -0
  149. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +68 -0
  150. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +39 -0
  151. package/src/libs/feature/editor/src/lib/expressions.ts +16 -0
  152. package/src/libs/feature/editor/src/lib/feature-editor.module.ts +11 -0
  153. package/src/libs/feature/editor/src/lib/fields.config.ts +35 -0
  154. package/src/libs/feature/editor/src/lib/models/fields.model.ts +29 -0
  155. package/src/libs/feature/editor/src/lib/record-form/record-form.component.html +9 -7
  156. package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +11 -5
  157. package/src/libs/feature/editor/src/lib/services/editor.service.ts +34 -73
  158. package/src/libs/feature/map/src/lib/map-context/map-context.service.ts +10 -0
  159. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +12 -12
  160. package/src/libs/feature/router/src/lib/default/index.ts +1 -0
  161. package/src/libs/feature/router/src/lib/default/router.service.ts +1 -1
  162. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +5 -4
  163. package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -1
  164. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.css +5 -0
  165. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.html +39 -0
  166. package/src/libs/ui/elements/src/lib/markdown-editor/markdown-editor.component.ts +58 -0
  167. package/src/libs/ui/elements/src/lib/markdown-parser/markdown-parser.component.ts +1 -0
  168. package/src/libs/ui/elements/src/lib/max-lines/max-lines.component.html +5 -1
  169. package/src/libs/ui/elements/src/lib/max-lines/max-lines.component.ts +1 -0
  170. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +1 -1
  171. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +125 -35
  172. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +20 -3
  173. package/src/libs/ui/elements/src/lib/metadata-quality/metadata-quality.component.ts +1 -1
  174. package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.html +2 -2
  175. package/src/libs/ui/elements/src/lib/ui-elements.module.ts +1 -1
  176. package/src/libs/ui/inputs/src/lib/button/button.component.css +0 -5
  177. package/src/libs/ui/inputs/src/lib/button/button.component.html +0 -1
  178. package/src/libs/ui/inputs/src/lib/button/button.component.ts +7 -6
  179. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
  180. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.html +3 -1
  181. package/src/libs/ui/inputs/src/lib/form-field/form-field.component.ts +3 -1
  182. package/src/libs/ui/inputs/src/lib/form-field/form-field.model.ts +0 -1
  183. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.css +3 -0
  184. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +1 -1
  185. package/src/libs/ui/inputs/src/lib/text-area/text-area.component.ts +1 -0
  186. package/src/libs/ui/inputs/src/lib/ui-inputs.module.ts +2 -2
  187. package/src/libs/ui/layout/src/lib/carousel/carousel.component.html +1 -0
  188. package/src/libs/ui/widgets/src/lib/badge/badge.component.html +3 -1
  189. package/src/libs/util/i18n/src/lib/i18n.constants.ts +18 -0
  190. package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
  191. package/src/libs/util/shared/src/lib/utils/temporal-extent-union.ts +32 -0
  192. package/tailwind.base.css +44 -15
  193. package/translations/de.json +36 -27
  194. package/translations/en.json +28 -19
  195. package/translations/es.json +25 -16
  196. package/translations/fr.json +46 -37
  197. package/translations/it.json +40 -31
  198. package/translations/nl.json +26 -17
  199. package/translations/pt.json +25 -16
  200. package/translations/sk.json +118 -109
@@ -1,7 +1,7 @@
1
1
  import { parseXml, XmlDocument, XmlElement, XmlText } from '@rgrove/parse-xml';
2
2
  import format from 'date-fns/format';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ContentChildren, ElementRef, ViewChildren } from '@angular/core';
4
+ import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ContentChildren, ElementRef, ViewChildren, inject } from '@angular/core';
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';
@@ -15,7 +15,7 @@ import { CommonModule, NgOptimizedImage, NgForOf } from '@angular/common';
15
15
  import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject, firstValueFrom, fromEvent, timer, from, Subscription, animationFrameScheduler, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, takeUntil, EMPTY, withLatestFrom as withLatestFrom$1, startWith as startWith$1, pairwise as pairwise$1 } from 'rxjs';
16
16
  import { valid, coerce, satisfies, ltr } from 'semver';
17
17
  import * as i1$2 from '@ngrx/store';
18
- import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule } from '@ngrx/store';
18
+ import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule, Store } from '@ngrx/store';
19
19
  import Map$1 from 'ol/Map';
20
20
  import * as i2 from '@angular/material/icon';
21
21
  import { MatIconModule } from '@angular/material/icon';
@@ -75,7 +75,7 @@ import { MatDatepickerModule } from '@angular/material/datepicker';
75
75
  import { MatInputModule } from '@angular/material/input';
76
76
  import * as basicLightbox from 'basiclightbox';
77
77
  import * as i1$8 from '@ngrx/effects';
78
- import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
78
+ import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
79
79
  import tippy from 'tippy.js';
80
80
  import { valid as valid$1 } from 'geojson-validation';
81
81
  import { Polygon } from 'ol/geom';
@@ -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
  }
@@ -818,6 +832,9 @@ function readOwnerOrganization(rootEl) {
818
832
  function readRecordUpdated(rootEl) {
819
833
  return pipe(findChildElement('gmd:dateStamp'), extractDateTime())(rootEl);
820
834
  }
835
+ function readRecordPublished(rootEl) {
836
+ return pipe(findChildElement('gmd:dateStamp'), extractDateTime())(rootEl);
837
+ }
821
838
  function readTitle(rootEl) {
822
839
  return pipe(findIdentification(), findNestedElement('gmd:citation', 'gmd:CI_Citation', 'gmd:title'), extractCharacterString())(rootEl);
823
840
  }
@@ -833,14 +850,35 @@ function readDatasetUpdated(rootEl) {
833
850
  function readContacts(rootEl) {
834
851
  return pipe(findIdentification(), combine(findChildrenElement('gmd:contact'), findChildrenElement('gmd:pointOfContact')), flattenArray(), mapArray(findChildElement('gmd:CI_ResponsibleParty', false)), mapArray(extractIndividuals()), flattenArray())(rootEl);
835
852
  }
836
- function readKeywordsOfType(isTheme) {
837
- return pipe(findIdentification(), findNestedElements('gmd:descriptiveKeywords', 'gmd:MD_Keywords'), filterArray(pipe(findChildrenElement('gmd:MD_KeywordTypeCode'), mapArray(readAttribute('codeListValue')), map((values) => isTheme === values.indexOf('theme') > -1))), mapArray(findChildrenElement('gmd:keyword')), flattenArray(), mapArray(extractCharacterString()));
853
+ // from gmd:thesaurusName
854
+ function readThesaurus(rootEl) {
855
+ if (!rootEl)
856
+ return null;
857
+ const findIdentifier = findNestedElement('gmd:CI_Citation', 'gmd:identifier', 'gmd:MD_Identifier', 'gmd:code');
858
+ const id = pipe(findIdentifier, extractCharacterString())(rootEl);
859
+ const url = pipe(findIdentifier, extractUrl())(rootEl);
860
+ const name = pipe(findNestedElement('gmd:CI_Citation', 'gmd:title'), extractCharacterString())(rootEl);
861
+ return {
862
+ id,
863
+ ...(name && { name }),
864
+ ...(url && { url }),
865
+ };
838
866
  }
839
- function readKeywords(rootEl) {
840
- return readKeywordsOfType(false)(rootEl);
867
+ // from gmd:MD_Keywords
868
+ function readKeywordGroup(rootEl) {
869
+ const type = pipe(findChildrenElement('gmd:MD_KeywordTypeCode'), mapArray(readAttribute('codeListValue')), map((values) => getKeywordTypeFromKeywordTypeCode(values[0])))(rootEl);
870
+ const thesaurus = pipe(findNestedElement('gmd:thesaurusName'), readThesaurus)(rootEl);
871
+ return pipe(findChildrenElement('gmd:keyword'), mapArray((el) => {
872
+ const label = extractCharacterString()(el);
873
+ return {
874
+ ...(thesaurus ? { thesaurus } : {}),
875
+ label,
876
+ type,
877
+ };
878
+ }))(rootEl);
841
879
  }
842
- function readThemes(rootEl) {
843
- return readKeywordsOfType(true)(rootEl);
880
+ function readKeywords(rootEl) {
881
+ return pipe(findIdentification(), findNestedElements('gmd:descriptiveKeywords', 'gmd:MD_Keywords'), mapArray(readKeywordGroup), flattenArray())(rootEl);
844
882
  }
845
883
  function readStatus(rootEl) {
846
884
  return pipe(findIdentification(), findChildElement('gmd:status', false), extractStatus())(rootEl);
@@ -860,7 +898,7 @@ function readLicenses(rootEl) {
860
898
  }
861
899
  // not used yet
862
900
  function readIsoTopics(rootEl) {
863
- return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode', false), mapArray(readText()))(rootEl);
901
+ return pipe(findIdentification(), findChildrenElement('gmd:MD_TopicCategoryCode', true), mapArray(readText()))(rootEl);
864
902
  }
865
903
  function readSpatialRepresentation(rootEl) {
866
904
  return pipe(findIdentification(), findNestedElement('gmd:spatialRepresentationType', 'gmd:MD_SpatialRepresentationTypeCode'), readAttribute('codeListValue'), map(getSpatialRepresentationFromCode))(rootEl);
@@ -1076,15 +1114,32 @@ function updateCitationDate(date, type) {
1076
1114
  function appendCitationDate(date, type) {
1077
1115
  return appendChildren(pipe(createElement('gmd:date'), createChild('gmd:CI_Date'), appendChildren(pipe(createElement('gmd:date'), writeDateTime(date)), pipe(createElement('gmd:dateType'), createChild('gmd:CI_DateTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#CI_DateTypeCode'), addAttribute('codeListValue', type)))));
1078
1116
  }
1079
- function removeKeywords(type) {
1080
- return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords'), filterArray(pipe(findNestedElement('gmd:MD_Keywords', 'gmd:type', 'gmd:MD_KeywordTypeCode'), readAttribute('codeListValue'),
1081
- // if a specific type is targeted, compare with it; otherwise remove keywords if they have no type defined
1082
- map((typeValue) => (type !== null ? type === typeValue : true))))));
1083
- }
1084
- function appendKeywords(keywords, type) {
1085
- return appendChildren(pipe(createElement('gmd:descriptiveKeywords'), createChild('gmd:MD_Keywords'), type !== null
1086
- ? appendChildren(pipe(createElement('gmd:type'), createChild('gmd:MD_KeywordTypeCode'), addAttribute('codeList', 'http://standards.iso.org/iso/19139/resources/gmxCodelists.xml#MD_KeywordTypeCode'), addAttribute('codeListValue', type)))
1087
- : noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword))))));
1117
+ function removeKeywords() {
1118
+ return removeChildren(pipe(findNestedElements('gmd:descriptiveKeywords')));
1119
+ }
1120
+ // returns a <gmd:thesaurusName> element
1121
+ function createThesaurus(thesaurus) {
1122
+ 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
1123
+ ? writeAnchor(thesaurus.url, thesaurus.id)
1124
+ : writeCharacterString(thesaurus.id))))));
1125
+ }
1126
+ function appendKeywords(keywords) {
1127
+ const keywordsByThesaurus = keywords.reduce((acc, keyword) => {
1128
+ const thesaurusId = keyword.thesaurus?.id;
1129
+ const type = keyword.type;
1130
+ let existingGroup = acc.find((group) => group[0].thesaurus
1131
+ ? group[0].thesaurus.id === thesaurusId
1132
+ : group[0].type === type);
1133
+ if (!existingGroup) {
1134
+ existingGroup = [];
1135
+ acc.push(existingGroup);
1136
+ }
1137
+ existingGroup.push(keyword);
1138
+ return acc;
1139
+ }, []);
1140
+ 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
1141
+ ? appendChildren(createThesaurus(keywords[0].thesaurus))
1142
+ : noop, appendChildren(...keywords.map((keyword) => pipe(createElement('gmd:keyword'), writeCharacterString(keyword.label)))))));
1088
1143
  }
1089
1144
  function createConstraint(constraint, type) {
1090
1145
  if (type === 'security') {
@@ -1201,10 +1256,10 @@ function writeContacts(record, rootEl) {
1201
1256
  pipe(findOrCreateIdentification(), removeChildrenByName('gmd:pointOfContact'), appendChildren(...record.contacts.map((contact) => pipe(createElement('gmd:pointOfContact'), appendResponsibleParty(contact)))))(rootEl);
1202
1257
  }
1203
1258
  function writeKeywords(record, rootEl) {
1204
- pipe(findOrCreateIdentification(), removeKeywords(null), appendKeywords(record.keywords, null))(rootEl);
1259
+ pipe(findOrCreateIdentification(), removeKeywords(), appendKeywords(record.keywords))(rootEl);
1205
1260
  }
1206
- function writeThemes(record, rootEl) {
1207
- pipe(findOrCreateIdentification(), removeKeywords('theme'), appendKeywords(record.themes, 'theme'))(rootEl);
1261
+ function writeTopics(record, rootEl) {
1262
+ pipe(findOrCreateIdentification(), removeChildrenByName('gmd:topicCategory'), appendChildren(...record.topics.map((topic) => pipe(createElement('gmd:topicCategory'), createChild('gmd:MD_TopicCategoryCode'), setTextContent(topic)))))(rootEl);
1208
1263
  }
1209
1264
  function writeLicenses(record, rootEl) {
1210
1265
  pipe(findOrCreateIdentification(), removeLicenses(), appendChildren(...record.licenses.map(createLicense)))(rootEl);
@@ -1312,15 +1367,14 @@ function toModel(xml) {
1312
1367
  const contacts = readContacts(rootEl);
1313
1368
  const recordUpdated = readRecordUpdated(rootEl);
1314
1369
  const recordCreated = recordUpdated;
1370
+ const recordPublished = readRecordPublished(rootEl);
1315
1371
  const keywords = readKeywords(rootEl);
1316
- const themes = readThemes(rootEl);
1372
+ const topics = readIsoTopics(rootEl);
1317
1373
  const legalConstraints = readLegalConstraints(rootEl);
1318
1374
  const otherConstraints = readOtherConstraints(rootEl);
1319
1375
  const securityConstraints = readSecurityConstraints(rootEl);
1320
1376
  const licenses = readLicenses(rootEl);
1321
1377
  const overviews = readOverviews(rootEl);
1322
- // not used yet
1323
- const isoTopics = readIsoTopics(rootEl);
1324
1378
  if (kind === 'dataset') {
1325
1379
  const status = readStatus(rootEl);
1326
1380
  const datasetCreated = readDatasetCreated(rootEl);
@@ -1334,8 +1388,10 @@ function toModel(xml) {
1334
1388
  return {
1335
1389
  uniqueIdentifier,
1336
1390
  kind,
1391
+ languages: [],
1337
1392
  recordCreated,
1338
1393
  recordUpdated,
1394
+ recordPublished,
1339
1395
  status,
1340
1396
  title,
1341
1397
  abstract,
@@ -1343,7 +1399,7 @@ function toModel(xml) {
1343
1399
  contacts,
1344
1400
  contactsForResource: [],
1345
1401
  keywords,
1346
- themes,
1402
+ topics,
1347
1403
  licenses,
1348
1404
  legalConstraints,
1349
1405
  securityConstraints,
@@ -1364,14 +1420,16 @@ function toModel(xml) {
1364
1420
  return {
1365
1421
  uniqueIdentifier,
1366
1422
  kind,
1423
+ languages: [],
1367
1424
  recordCreated,
1368
1425
  recordUpdated,
1426
+ recordPublished,
1369
1427
  title,
1370
1428
  abstract,
1371
1429
  ownerOrganization,
1372
1430
  contacts,
1373
1431
  keywords,
1374
- themes,
1432
+ topics,
1375
1433
  licenses,
1376
1434
  legalConstraints,
1377
1435
  securityConstraints,
@@ -1400,7 +1458,7 @@ function toXml(record, originalXml) {
1400
1458
  writeAbstract(record, rootEl);
1401
1459
  fieldChanged('contacts') && writeContacts(record, rootEl);
1402
1460
  fieldChanged('keywords') && writeKeywords(record, rootEl);
1403
- fieldChanged('themes') && writeThemes(record, rootEl);
1461
+ fieldChanged('topics') && writeTopics(record, rootEl);
1404
1462
  fieldChanged('legalConstraints') && writeLegalConstraints(record, rootEl);
1405
1463
  fieldChanged('securityConstraints') &&
1406
1464
  writeSecurityConstraints(record, rootEl);
@@ -1472,6 +1530,31 @@ const mapContact = (sourceContact, lang3) => {
1472
1530
  ...(phone && { phone }),
1473
1531
  };
1474
1532
  };
1533
+ const mapKeywords = (thesauri, language) => {
1534
+ const keywords = [];
1535
+ for (const thesaurusId in thesauri) {
1536
+ const rawThesaurus = thesauri[thesaurusId];
1537
+ let thesaurus = null;
1538
+ if (rawThesaurus.id) {
1539
+ const thesaurusSource = { ...rawThesaurus };
1540
+ const url = getAsUrl(selectField(thesaurusSource, 'link'));
1541
+ const name = selectField(thesaurusSource, 'title');
1542
+ thesaurus = {
1543
+ id: rawThesaurus.id,
1544
+ ...(name && { name }),
1545
+ ...(url && { url }),
1546
+ };
1547
+ }
1548
+ for (const keyword of rawThesaurus.keywords) {
1549
+ keywords.push({
1550
+ label: selectTranslatedValue(keyword, language),
1551
+ type: getKeywordTypeFromKeywordTypeCode(rawThesaurus.theme),
1552
+ ...(thesaurus && { thesaurus }),
1553
+ });
1554
+ }
1555
+ }
1556
+ return keywords;
1557
+ };
1475
1558
 
1476
1559
  /**
1477
1560
  * Custom HttpParameterCodec
@@ -16458,6 +16541,23 @@ const LANG_3_TO_2_MAPPER = {
16458
16541
  chi: 'zh',
16459
16542
  slo: 'sk',
16460
16543
  };
16544
+ const LANGUAGE_NAMES = {
16545
+ en: 'English',
16546
+ nl: 'Nederlands',
16547
+ fr: 'Français',
16548
+ de: 'Deutsch',
16549
+ ko: '한국어',
16550
+ es: 'Español',
16551
+ cs: 'Čeština',
16552
+ ca: 'Català',
16553
+ fi: 'Suomi',
16554
+ is: 'Íslenska',
16555
+ it: 'Italiano',
16556
+ pt: 'Português',
16557
+ ru: 'Русский',
16558
+ zh: '中文',
16559
+ sk: 'Slovenčina',
16560
+ };
16461
16561
  // Caution: changing this can break language selection from third parties!
16462
16562
  const LANGUAGE_STORAGE_KEY = 'geonetwork-ui-language';
16463
16563
  const LANG_2_TO_3_MAPPER = Object.entries(LANG_3_TO_2_MAPPER).reduce((mapperObject, langEntry) => {
@@ -16580,7 +16680,7 @@ var de = {
16580
16680
  "chart.type.line": "Liniendiagramm",
16581
16681
  "chart.type.lineSmooth": "Geglättes Liniendiagramm",
16582
16682
  "chart.type.pie": "Kreisdiagramm",
16583
- "dashboard.createRecord": "",
16683
+ "dashboard.createRecord": "Neuer Eintrag",
16584
16684
  "dashboard.labels.mySpace": "Mein Bereich",
16585
16685
  "dashboard.records.all": "Katalog",
16586
16686
  "dashboard.records.myDraft": "Meine Entwürfe",
@@ -16593,8 +16693,8 @@ var de = {
16593
16693
  "dashboard.records.userEmail": "E-Mail",
16594
16694
  "dashboard.records.username": "Benutzername",
16595
16695
  "dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
16596
- "dashboard.results.listMetadata": "",
16597
- "dashboard.results.listResources": "",
16696
+ "dashboard.results.listMetadata": "Metadaten anzeigen",
16697
+ "dashboard.results.listResources": "Ressourcen anzeigen",
16598
16698
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
16599
16699
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
16600
16700
  "datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
@@ -16708,6 +16808,8 @@ var de = {
16708
16808
  "downloads.format.unknown": "unbekannt",
16709
16809
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
16710
16810
  dropFile: dropFile$6,
16811
+ "editor.record.publish": "",
16812
+ "editor.record.upToDate": "",
16711
16813
  "externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
16712
16814
  "facets.block.title.OrgForResource": "Organisation",
16713
16815
  "facets.block.title.availableInServices": "Verfügbar für",
@@ -16721,28 +16823,28 @@ var de = {
16721
16823
  "facets.block.title.tag.default": "Stichwort",
16722
16824
  "facets.block.title.th_regions_tree.default": "Regionen",
16723
16825
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Anmelden</a>, um auf diese Funktion zuzugreifen</div>",
16724
- "language.ca": "Català",
16725
- "language.cs": "Čeština",
16826
+ "language.ca": "Katalanisch",
16827
+ "language.cs": "Tschechisch",
16726
16828
  "language.de": "Deutsch",
16727
- "language.en": "English",
16728
- "language.es": "Español",
16729
- "language.fi": "Suomi",
16730
- "language.fr": "Français",
16731
- "language.is": "Íslenska",
16732
- "language.it": "Italiano",
16733
- "language.ko": "한국어",
16734
- "language.nl": "Nederlands",
16735
- "language.pt": "Português",
16736
- "language.ru": "Русский",
16737
- "language.sk": "Slovenčina",
16738
- "language.zh": "中文",
16829
+ "language.en": "Englisch",
16830
+ "language.es": "Spanisch",
16831
+ "language.fi": "Finnisch",
16832
+ "language.fr": "Französisch",
16833
+ "language.is": "Isländisch",
16834
+ "language.it": "Italienisch",
16835
+ "language.ko": "Koreanisch",
16836
+ "language.nl": "Niederländisch",
16837
+ "language.pt": "Portugiesisch",
16838
+ "language.ru": "Russisch",
16839
+ "language.sk": "Slowakisch",
16840
+ "language.zh": "Chinesisch",
16739
16841
  "map.add.layer": "Eine Ebene hinzufügen",
16740
16842
  "map.add.layer.catalog": "Aus dem Katalog",
16741
16843
  "map.add.layer.file": "Aus einer Datei",
16742
16844
  "map.add.layer.wfs": "Aus WFS",
16743
16845
  "map.add.layer.wms": "Aus WMS",
16744
16846
  "map.addFromFile.placeholder": "Klicke hier oder ziehe eine Datei herein",
16745
- "map.geocoding.placeholder": "",
16847
+ "map.geocoding.placeholder": "Nach einem Ort suchen",
16746
16848
  "map.help.addFromFile": "Klicke oder ziehe eine Datei herein um eine Karte hinzuzufügen (momentan wird nur das GeoJSON-Format unterstützt).",
16747
16849
  "map.layer.add": "Hinzufügen",
16748
16850
  "map.layers.available": "Verfügbare Layer",
@@ -16786,17 +16888,20 @@ var de = {
16786
16888
  "record.metadata.author": "Autor",
16787
16889
  "record.metadata.catalog": "Katalog",
16788
16890
  "record.metadata.contact": "Kontakt",
16789
- "record.metadata.details": "Technische Informationen",
16891
+ "record.metadata.creation": "Erstellungsdatum",
16892
+ "record.metadata.details": "Über die Daten",
16790
16893
  "record.metadata.download": "Downloads",
16791
16894
  "record.metadata.formats": "Formate",
16792
16895
  "record.metadata.keywords": "Stichworte",
16793
- "record.metadata.lastUpdate": "Zuletzt aktualisiert am",
16896
+ "record.metadata.languages": "Sprachen",
16897
+ "record.metadata.lastUpdate": "Zuletzt aktualisiert am {date}",
16794
16898
  "record.metadata.links": "Links",
16795
16899
  "record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
16796
- "record.metadata.origin": "Über die Daten",
16797
- "record.metadata.otherConstraints": "",
16798
- "record.metadata.owner": "",
16900
+ "record.metadata.otherConstraints": "Zusätzliche Bedingungen",
16901
+ "record.metadata.owner": "Herkunftskatalog",
16799
16902
  "record.metadata.preview": "Vorschau",
16903
+ "record.metadata.producer": "Datenproduzent",
16904
+ "record.metadata.publication": "Veröffentlichungsdatum",
16800
16905
  "record.metadata.publications": "Veröffentlichungen",
16801
16906
  "record.metadata.quality": "Metadatenqualität",
16802
16907
  "record.metadata.quality.contact.failed": "Kontakt nicht angegeben",
@@ -16818,13 +16923,17 @@ var de = {
16818
16923
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
16819
16924
  "record.metadata.related": "Ähnliche Datensätze",
16820
16925
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
16821
- "record.metadata.status": "",
16822
- "record.metadata.themes": "Kategorien",
16926
+ "record.metadata.status": "Status",
16927
+ "record.metadata.technical": "Technische Informationen",
16928
+ "record.metadata.temporalExtent": "Zeitlicher Umfang",
16929
+ "record.metadata.temporalExtent.fromDateToDate": "Von {start} bis {end}",
16930
+ "record.metadata.temporalExtent.sinceDate": "Seit {start}",
16931
+ "record.metadata.temporalExtent.untilDate": "Bis {end}",
16823
16932
  "record.metadata.title": "Titel",
16933
+ "record.metadata.topics": "Kategorien",
16824
16934
  "record.metadata.type": "Geographischer Datensatz",
16825
16935
  "record.metadata.uniqueId": "Eindeutige Kennung",
16826
16936
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
16827
- "record.metadata.updateStatus": "Aktualisierungsstatus der Daten",
16828
16937
  "record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
16829
16938
  "record.metadata.usage": "Nutzung und Einschränkungen",
16830
16939
  "record.more.details": "Weitere Details",
@@ -16887,7 +16996,7 @@ var de = {
16887
16996
  "table.object.count": "Objekte in diesem Datensatz",
16888
16997
  "table.select.data": "Datenquelle",
16889
16998
  "tooltip.html.copy": "HTML kopieren",
16890
- "tooltip.id.copy": "",
16999
+ "tooltip.id.copy": "Eindeutige Kennung kopieren",
16891
17000
  "tooltip.url.copy": "URL kopieren",
16892
17001
  "tooltip.url.open": "URL öffnen",
16893
17002
  "ui.readLess": "Weniger lesen",
@@ -17049,6 +17158,8 @@ var en = {
17049
17158
  "downloads.format.unknown": "unknown",
17050
17159
  "downloads.wfs.featuretype.not.found": "The layer was not found",
17051
17160
  dropFile: dropFile$5,
17161
+ "editor.record.publish": "Publish this record",
17162
+ "editor.record.upToDate": "This record is up to date",
17052
17163
  "externalviewer.dataset.unnamed": "Datahub layer",
17053
17164
  "facets.block.title.OrgForResource": "Organisation",
17054
17165
  "facets.block.title.availableInServices": "Available for",
@@ -17062,21 +17173,21 @@ var en = {
17062
17173
  "facets.block.title.tag.default": "Tag",
17063
17174
  "facets.block.title.th_regions_tree.default": "Regions",
17064
17175
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> to access this feature</div>",
17065
- "language.ca": "Català",
17066
- "language.cs": "Čeština",
17067
- "language.de": "Deutsch",
17176
+ "language.ca": "Catalan",
17177
+ "language.cs": "Czech",
17178
+ "language.de": "German",
17068
17179
  "language.en": "English",
17069
- "language.es": "Español",
17070
- "language.fi": "Suomi",
17071
- "language.fr": "Français",
17072
- "language.is": "Íslenska",
17073
- "language.it": "Italiano",
17074
- "language.ko": "한국어",
17075
- "language.nl": "Nederlands",
17076
- "language.pt": "Português",
17077
- "language.ru": "Русский",
17078
- "language.sk": "Slovenčina",
17079
- "language.zh": "中文",
17180
+ "language.es": "Spanish",
17181
+ "language.fi": "Finnish",
17182
+ "language.fr": "French",
17183
+ "language.is": "Icelandic",
17184
+ "language.it": "Italian",
17185
+ "language.ko": "Korean",
17186
+ "language.nl": "Dutch",
17187
+ "language.pt": "Portuguese",
17188
+ "language.ru": "Russian",
17189
+ "language.sk": "Slovak",
17190
+ "language.zh": "Chinese",
17080
17191
  "map.add.layer": "Add a layer",
17081
17192
  "map.add.layer.catalog": "From the catalog",
17082
17193
  "map.add.layer.file": "From a file",
@@ -17127,17 +17238,20 @@ var en = {
17127
17238
  "record.metadata.author": "Author",
17128
17239
  "record.metadata.catalog": "Catalog",
17129
17240
  "record.metadata.contact": "Contact",
17130
- "record.metadata.details": "Technical information",
17241
+ "record.metadata.creation": "Date of creation",
17242
+ "record.metadata.details": "About the data",
17131
17243
  "record.metadata.download": "Downloads",
17132
17244
  "record.metadata.formats": "Formats",
17133
17245
  "record.metadata.keywords": "Keywords",
17134
- "record.metadata.lastUpdate": "Last updated on",
17246
+ "record.metadata.languages": "Languages",
17247
+ "record.metadata.lastUpdate": "Last updated on {date}",
17135
17248
  "record.metadata.links": "Links",
17136
17249
  "record.metadata.noUsage": "No usage conditions specified for this record.",
17137
- "record.metadata.origin": "About the data",
17138
17250
  "record.metadata.otherConstraints": "Additional Conditions",
17139
17251
  "record.metadata.owner": "Catalog of origin",
17140
17252
  "record.metadata.preview": "Preview",
17253
+ "record.metadata.producer": "Data producer",
17254
+ "record.metadata.publication": "Date of publication",
17141
17255
  "record.metadata.publications": "publications",
17142
17256
  "record.metadata.quality": "Metadata Quality",
17143
17257
  "record.metadata.quality.contact.failed": "Contact is not specified",
@@ -17160,12 +17274,16 @@ var en = {
17160
17274
  "record.metadata.related": "Related records",
17161
17275
  "record.metadata.sheet": "Original metadata",
17162
17276
  "record.metadata.status": "Status",
17163
- "record.metadata.themes": "Categories",
17277
+ "record.metadata.technical": "Technical information",
17278
+ "record.metadata.temporalExtent": "Temporal extent",
17279
+ "record.metadata.temporalExtent.fromDateToDate": "From { start } to { end }",
17280
+ "record.metadata.temporalExtent.sinceDate": "Since { start }",
17281
+ "record.metadata.temporalExtent.untilDate": "Until { end }",
17164
17282
  "record.metadata.title": "Title",
17283
+ "record.metadata.topics": "Categories",
17165
17284
  "record.metadata.type": "Geographical dataset",
17166
17285
  "record.metadata.uniqueId": "Unique Identifier",
17167
17286
  "record.metadata.updateFrequency": "Data Update Frequency",
17168
- "record.metadata.updateStatus": "Data Update Status",
17169
17287
  "record.metadata.updatedOn": "Last Data Information Update",
17170
17288
  "record.metadata.usage": "License and Conditions",
17171
17289
  "record.more.details": "Read more",
@@ -17390,6 +17508,8 @@ var es = {
17390
17508
  "downloads.format.unknown": "",
17391
17509
  "downloads.wfs.featuretype.not.found": "",
17392
17510
  dropFile: dropFile$4,
17511
+ "editor.record.publish": "",
17512
+ "editor.record.upToDate": "",
17393
17513
  "externalviewer.dataset.unnamed": "",
17394
17514
  "facets.block.title.OrgForResource": "",
17395
17515
  "facets.block.title.availableInServices": "",
@@ -17403,21 +17523,21 @@ var es = {
17403
17523
  "facets.block.title.tag.default": "",
17404
17524
  "facets.block.title.th_regions_tree.default": "",
17405
17525
  "favorite.not.authenticated.tooltip": "",
17406
- "language.ca": "Català",
17407
- "language.cs": "Čeština",
17408
- "language.de": "Deutsch",
17409
- "language.en": "English",
17526
+ "language.ca": "Catalán",
17527
+ "language.cs": "Checo",
17528
+ "language.de": "Alemán",
17529
+ "language.en": "Inglés",
17410
17530
  "language.es": "Español",
17411
- "language.fi": "Suomi",
17412
- "language.fr": "Français",
17413
- "language.is": "Íslenska",
17531
+ "language.fi": "Finlandés",
17532
+ "language.fr": "Francés",
17533
+ "language.is": "Islandés",
17414
17534
  "language.it": "Italiano",
17415
- "language.ko": "한국어",
17416
- "language.nl": "Nederlands",
17417
- "language.pt": "Português",
17418
- "language.ru": "Русский",
17419
- "language.sk": "Slovenčina",
17420
- "language.zh": "中文",
17535
+ "language.ko": "Coreano",
17536
+ "language.nl": "Neerlandés",
17537
+ "language.pt": "Portugués",
17538
+ "language.ru": "Ruso",
17539
+ "language.sk": "Eslovaco",
17540
+ "language.zh": "Chino",
17421
17541
  "map.add.layer": "",
17422
17542
  "map.add.layer.catalog": "",
17423
17543
  "map.add.layer.file": "",
@@ -17468,17 +17588,20 @@ var es = {
17468
17588
  "record.metadata.author": "",
17469
17589
  "record.metadata.catalog": "",
17470
17590
  "record.metadata.contact": "",
17591
+ "record.metadata.creation": "",
17471
17592
  "record.metadata.details": "",
17472
17593
  "record.metadata.download": "",
17473
17594
  "record.metadata.formats": "",
17474
17595
  "record.metadata.keywords": "",
17596
+ "record.metadata.languages": "",
17475
17597
  "record.metadata.lastUpdate": "",
17476
17598
  "record.metadata.links": "",
17477
17599
  "record.metadata.noUsage": "",
17478
- "record.metadata.origin": "",
17479
17600
  "record.metadata.otherConstraints": "",
17480
17601
  "record.metadata.owner": "",
17481
17602
  "record.metadata.preview": "",
17603
+ "record.metadata.producer": "",
17604
+ "record.metadata.publication": "",
17482
17605
  "record.metadata.publications": "",
17483
17606
  "record.metadata.quality": "",
17484
17607
  "record.metadata.quality.contact.failed": "",
@@ -17501,12 +17624,16 @@ var es = {
17501
17624
  "record.metadata.related": "",
17502
17625
  "record.metadata.sheet": "",
17503
17626
  "record.metadata.status": "",
17504
- "record.metadata.themes": "",
17627
+ "record.metadata.technical": "",
17628
+ "record.metadata.temporalExtent": "",
17629
+ "record.metadata.temporalExtent.fromDateToDate": "",
17630
+ "record.metadata.temporalExtent.sinceDate": "",
17631
+ "record.metadata.temporalExtent.untilDate": "",
17505
17632
  "record.metadata.title": "",
17633
+ "record.metadata.topics": "",
17506
17634
  "record.metadata.type": "",
17507
17635
  "record.metadata.uniqueId": "",
17508
17636
  "record.metadata.updateFrequency": "",
17509
- "record.metadata.updateStatus": "",
17510
17637
  "record.metadata.updatedOn": "",
17511
17638
  "record.metadata.usage": "",
17512
17639
  "record.more.details": "",
@@ -17603,7 +17730,7 @@ var fr = {
17603
17730
  "chart.type.line": "ligne",
17604
17731
  "chart.type.lineSmooth": "ligne lisse",
17605
17732
  "chart.type.pie": "camembert",
17606
- "dashboard.createRecord": "",
17733
+ "dashboard.createRecord": "Nouvel enregistrement",
17607
17734
  "dashboard.labels.mySpace": "Mon espace",
17608
17735
  "dashboard.records.all": "Catalogue",
17609
17736
  "dashboard.records.myDraft": "Mes brouillons",
@@ -17616,8 +17743,8 @@ var fr = {
17616
17743
  "dashboard.records.userEmail": "Email",
17617
17744
  "dashboard.records.username": "Nom d'utilisateur",
17618
17745
  "dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
17619
- "dashboard.results.listMetadata": "",
17620
- "dashboard.results.listResources": "",
17746
+ "dashboard.results.listMetadata": "Afficher les métadonnées",
17747
+ "dashboard.results.listResources": "Afficher les ressources",
17621
17748
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
17622
17749
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
17623
17750
  "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
@@ -17731,6 +17858,8 @@ var fr = {
17731
17858
  "downloads.format.unknown": "inconnu",
17732
17859
  "downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
17733
17860
  dropFile: dropFile$3,
17861
+ "editor.record.publish": "",
17862
+ "editor.record.upToDate": "",
17734
17863
  "externalviewer.dataset.unnamed": "Couche du datahub",
17735
17864
  "facets.block.title.OrgForResource": "Organisation",
17736
17865
  "facets.block.title.availableInServices": "Disponible pour",
@@ -17744,38 +17873,38 @@ var fr = {
17744
17873
  "facets.block.title.tag.default": "Tag",
17745
17874
  "facets.block.title.th_regions_tree.default": "Régions",
17746
17875
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Connectez-vous</a> pour avoir accès à cette fonctionnalité</div>",
17747
- "language.ca": "Català",
17748
- "language.cs": "Čeština",
17749
- "language.de": "Deutsch",
17750
- "language.en": "English",
17751
- "language.es": "Español",
17752
- "language.fi": "Suomi",
17876
+ "language.ca": "Catalan",
17877
+ "language.cs": "Tchèque",
17878
+ "language.de": "Allemand",
17879
+ "language.en": "Anglais",
17880
+ "language.es": "Espagnol",
17881
+ "language.fi": "Finnois",
17753
17882
  "language.fr": "Français",
17754
- "language.is": "Íslenska",
17755
- "language.it": "Italiano",
17756
- "language.ko": "한국어",
17757
- "language.nl": "Nederlands",
17758
- "language.pt": "Português",
17759
- "language.ru": "Русский",
17760
- "language.sk": "Slovenčina",
17761
- "language.zh": "中文",
17762
- "map.add.layer": "",
17763
- "map.add.layer.catalog": "",
17764
- "map.add.layer.file": "",
17765
- "map.add.layer.wfs": "",
17766
- "map.add.layer.wms": "",
17767
- "map.addFromFile.placeholder": "",
17768
- "map.geocoding.placeholder": "",
17769
- "map.help.addFromFile": "",
17770
- "map.layer.add": "",
17771
- "map.layers.available": "",
17772
- "map.layers.list": "",
17883
+ "language.is": "Islandais",
17884
+ "language.it": "Italien",
17885
+ "language.ko": "Coréen",
17886
+ "language.nl": "Néerlandais",
17887
+ "language.pt": "Portugais",
17888
+ "language.ru": "Russe",
17889
+ "language.sk": "Slovaque",
17890
+ "language.zh": "Chinois",
17891
+ "map.add.layer": "Ajouter une couche",
17892
+ "map.add.layer.catalog": "Du catalogue",
17893
+ "map.add.layer.file": "À partir d'un fichier",
17894
+ "map.add.layer.wfs": "Depuis un service WFS",
17895
+ "map.add.layer.wms": "Depuis un service WMS",
17896
+ "map.addFromFile.placeholder": "Cliquez ou déposez un fichier ici",
17897
+ "map.geocoding.placeholder": "Rechercher un lieu",
17898
+ "map.help.addFromFile": "Cliquez ou glissez-déposez un fichier pour l'ajouter à la carte (supporte actuellement uniquement le format GeoJSON).",
17899
+ "map.layer.add": "Ajouter",
17900
+ "map.layers.available": "Couches disponibles",
17901
+ "map.layers.list": "Couches",
17773
17902
  "map.loading.data": "Chargement des données...",
17774
- "map.loading.service": "",
17903
+ "map.loading.service": "Chargement du service...",
17775
17904
  "map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
17776
17905
  "map.select.layer": "Source de données",
17777
- "map.wfs.urlInput.hint": "",
17778
- "map.wms.urlInput.hint": "",
17906
+ "map.wfs.urlInput.hint": "Entrez l'URL du service WFS",
17907
+ "map.wms.urlInput.hint": "Entrez l'URL du service WMS",
17779
17908
  "multiselect.filter.placeholder": "Rechercher",
17780
17909
  "nav.back": "Retour",
17781
17910
  next: next$3,
@@ -17809,17 +17938,20 @@ var fr = {
17809
17938
  "record.metadata.author": "Auteur",
17810
17939
  "record.metadata.catalog": "Catalogue",
17811
17940
  "record.metadata.contact": "Contact",
17812
- "record.metadata.details": "Informations techniques",
17941
+ "record.metadata.creation": "Date de création",
17942
+ "record.metadata.details": "A propos de la donnée",
17813
17943
  "record.metadata.download": "Téléchargements",
17814
17944
  "record.metadata.formats": "Formats",
17815
17945
  "record.metadata.keywords": "Mots clés",
17816
- "record.metadata.lastUpdate": "Mis à jour le",
17946
+ "record.metadata.languages": "Langues",
17947
+ "record.metadata.lastUpdate": "Mis à jour le {date}",
17817
17948
  "record.metadata.links": "Liens",
17818
17949
  "record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
17819
- "record.metadata.origin": "À propos des données",
17820
17950
  "record.metadata.otherConstraints": "Limitations d'usage",
17821
17951
  "record.metadata.owner": "Catalogue d'origine",
17822
17952
  "record.metadata.preview": "Aperçu",
17953
+ "record.metadata.producer": "Producteur de la donnée",
17954
+ "record.metadata.publication": "Date de publication",
17823
17955
  "record.metadata.publications": "données",
17824
17956
  "record.metadata.quality": "Qualité des métadonnées",
17825
17957
  "record.metadata.quality.contact.failed": "Contact n'est pas renseigné",
@@ -17841,13 +17973,17 @@ var fr = {
17841
17973
  "record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
17842
17974
  "record.metadata.related": "Voir aussi",
17843
17975
  "record.metadata.sheet": "Fiche de métadonnées d'origine",
17844
- "record.metadata.status": "",
17845
- "record.metadata.themes": "Catégories",
17976
+ "record.metadata.status": "Statut",
17977
+ "record.metadata.technical": "Informations techniques",
17978
+ "record.metadata.temporalExtent": "Etendue temporelle",
17979
+ "record.metadata.temporalExtent.fromDateToDate": "Du { start } au { end }",
17980
+ "record.metadata.temporalExtent.sinceDate": "Depuis le { start }",
17981
+ "record.metadata.temporalExtent.untilDate": "Jusqu'au { end }",
17846
17982
  "record.metadata.title": "Titre",
17983
+ "record.metadata.topics": "Catégories",
17847
17984
  "record.metadata.type": "Donnée géographique",
17848
17985
  "record.metadata.uniqueId": "Identificateur de ressource unique",
17849
17986
  "record.metadata.updateFrequency": "Fréquence de mise à jour des données",
17850
- "record.metadata.updateStatus": "Statut de mise à jour des données",
17851
17987
  "record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
17852
17988
  "record.metadata.usage": "Licences et conditions d'utilisation",
17853
17989
  "record.more.details": "Détails",
@@ -17944,7 +18080,7 @@ var it = {
17944
18080
  "chart.type.line": "grafico a linee",
17945
18081
  "chart.type.lineSmooth": "grafico a linea liscia",
17946
18082
  "chart.type.pie": "grafico a torta",
17947
- "dashboard.createRecord": "",
18083
+ "dashboard.createRecord": "Crea un record",
17948
18084
  "dashboard.labels.mySpace": "Il mio spazio",
17949
18085
  "dashboard.records.all": "Catalogo",
17950
18086
  "dashboard.records.myDraft": "Le mie bozze",
@@ -17957,8 +18093,8 @@ var it = {
17957
18093
  "dashboard.records.userEmail": "Email",
17958
18094
  "dashboard.records.username": "Nome utente",
17959
18095
  "dashboard.records.users": "utenti",
17960
- "dashboard.results.listMetadata": "",
17961
- "dashboard.results.listResources": "",
18096
+ "dashboard.results.listMetadata": "Elenco dei metadati",
18097
+ "dashboard.results.listResources": "Elenco delle risorse",
17962
18098
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
17963
18099
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
17964
18100
  "datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
@@ -18072,6 +18208,8 @@ var it = {
18072
18208
  "downloads.format.unknown": "sconosciuto",
18073
18209
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
18074
18210
  dropFile: dropFile$2,
18211
+ "editor.record.publish": "",
18212
+ "editor.record.upToDate": "",
18075
18213
  "externalviewer.dataset.unnamed": "Layer del datahub",
18076
18214
  "facets.block.title.OrgForResource": "Organizzazione",
18077
18215
  "facets.block.title.availableInServices": "Disponibile per",
@@ -18085,38 +18223,38 @@ var it = {
18085
18223
  "facets.block.title.tag.default": "Tag",
18086
18224
  "facets.block.title.th_regions_tree.default": "Regioni",
18087
18225
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> per accedere a questa funzionalità</div>",
18088
- "language.ca": "Català",
18089
- "language.cs": "Čeština",
18090
- "language.de": "Deutsch",
18091
- "language.en": "English",
18092
- "language.es": "Español",
18093
- "language.fi": "Suomi",
18094
- "language.fr": "Français",
18095
- "language.is": "Íslenska",
18226
+ "language.ca": "Catalano",
18227
+ "language.cs": "Ceco",
18228
+ "language.de": "Tedesco",
18229
+ "language.en": "Inglese",
18230
+ "language.es": "Spagnolo",
18231
+ "language.fi": "Finlandese",
18232
+ "language.fr": "Francese",
18233
+ "language.is": "Islandese",
18096
18234
  "language.it": "Italiano",
18097
- "language.ko": "한국어",
18098
- "language.nl": "Nederlands",
18099
- "language.pt": "Português",
18100
- "language.ru": "Русский",
18101
- "language.sk": "Slovenčina",
18102
- "language.zh": "中文",
18235
+ "language.ko": "Coreano",
18236
+ "language.nl": "Olandese",
18237
+ "language.pt": "Portoghese",
18238
+ "language.ru": "Russo",
18239
+ "language.sk": "Slovacco",
18240
+ "language.zh": "Cinese",
18103
18241
  "map.add.layer": "Aggiungere un layer",
18104
18242
  "map.add.layer.catalog": "Dal catalogo",
18105
18243
  "map.add.layer.file": "Da un file",
18106
18244
  "map.add.layer.wfs": "Da un WFS",
18107
18245
  "map.add.layer.wms": "Da un WMS",
18108
- "map.addFromFile.placeholder": "",
18109
- "map.geocoding.placeholder": "",
18110
- "map.help.addFromFile": "",
18111
- "map.layer.add": "",
18112
- "map.layers.available": "",
18246
+ "map.addFromFile.placeholder": "Clicca o trascina un file qui",
18247
+ "map.geocoding.placeholder": "Cerca un luogo",
18248
+ "map.help.addFromFile": "Clicca o trascina un file per aggiungerlo alla mappa (attualmente supporta solo il formato GeoJSON)",
18249
+ "map.layer.add": "Aggiungi",
18250
+ "map.layers.available": "Layer disponibili",
18113
18251
  "map.layers.list": "Layers",
18114
18252
  "map.loading.data": "Caricamento dati...",
18115
- "map.loading.service": "",
18253
+ "map.loading.service": "Caricamento del servizio...",
18116
18254
  "map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
18117
18255
  "map.select.layer": "Sorgente dati",
18118
- "map.wfs.urlInput.hint": "",
18119
- "map.wms.urlInput.hint": "",
18256
+ "map.wfs.urlInput.hint": "Inserisci URL del servizio WFS",
18257
+ "map.wms.urlInput.hint": "Inserisci URL del servizio WMS",
18120
18258
  "multiselect.filter.placeholder": "Cerca",
18121
18259
  "nav.back": "Indietro",
18122
18260
  next: next$2,
@@ -18150,17 +18288,20 @@ var it = {
18150
18288
  "record.metadata.author": "Autore",
18151
18289
  "record.metadata.catalog": "Catalogo",
18152
18290
  "record.metadata.contact": "Contatto",
18153
- "record.metadata.details": "Informazioni tecniche",
18291
+ "record.metadata.creation": "Data di creazione",
18292
+ "record.metadata.details": "A proposito del dati",
18154
18293
  "record.metadata.download": "Download",
18155
18294
  "record.metadata.formats": "Formati",
18156
18295
  "record.metadata.keywords": "Parole chiave",
18157
- "record.metadata.lastUpdate": "Ultimo aggiornamento",
18296
+ "record.metadata.languages": "Lingue",
18297
+ "record.metadata.lastUpdate": "Ultimo aggiornamento il {date}",
18158
18298
  "record.metadata.links": "Collegamenti",
18159
18299
  "record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
18160
- "record.metadata.origin": "Informazioni sui dati",
18161
18300
  "record.metadata.otherConstraints": "Limitazioni di uso",
18162
18301
  "record.metadata.owner": "Catalogo originale",
18163
18302
  "record.metadata.preview": "Anteprima",
18303
+ "record.metadata.producer": "Produttore dei dati",
18304
+ "record.metadata.publication": "Data di pubblicazione",
18164
18305
  "record.metadata.publications": "pubblicazioni",
18165
18306
  "record.metadata.quality": "Qualità dei metadati",
18166
18307
  "record.metadata.quality.contact.failed": "Il contatto non è specificato",
@@ -18182,13 +18323,17 @@ var it = {
18182
18323
  "record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
18183
18324
  "record.metadata.related": "Vedi anche",
18184
18325
  "record.metadata.sheet": "Origine del metadata",
18185
- "record.metadata.status": "",
18186
- "record.metadata.themes": "Categorie",
18326
+ "record.metadata.status": "Stato",
18327
+ "record.metadata.technical": "Informazioni tecniche",
18328
+ "record.metadata.temporalExtent": "Periodo di tempo",
18329
+ "record.metadata.temporalExtent.fromDateToDate": "Da {start} a {end}",
18330
+ "record.metadata.temporalExtent.sinceDate": "Dal {start}",
18331
+ "record.metadata.temporalExtent.untilDate": "Fino a {end}",
18187
18332
  "record.metadata.title": "Titolo",
18333
+ "record.metadata.topics": "Categorie",
18188
18334
  "record.metadata.type": "Dati geografici",
18189
18335
  "record.metadata.uniqueId": "Identificatore unico di risorsa",
18190
18336
  "record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
18191
- "record.metadata.updateStatus": "Stato di aggiornamento dei dati",
18192
18337
  "record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
18193
18338
  "record.metadata.usage": "Licenze e limiti di utilizzo",
18194
18339
  "record.more.details": "Dettagli",
@@ -18413,6 +18558,8 @@ var nl = {
18413
18558
  "downloads.format.unknown": "",
18414
18559
  "downloads.wfs.featuretype.not.found": "",
18415
18560
  dropFile: dropFile$1,
18561
+ "editor.record.publish": "",
18562
+ "editor.record.upToDate": "",
18416
18563
  "externalviewer.dataset.unnamed": "",
18417
18564
  "facets.block.title.OrgForResource": "",
18418
18565
  "facets.block.title.availableInServices": "",
@@ -18426,21 +18573,21 @@ var nl = {
18426
18573
  "facets.block.title.tag.default": "",
18427
18574
  "facets.block.title.th_regions_tree.default": "",
18428
18575
  "favorite.not.authenticated.tooltip": "",
18429
- "language.ca": "Català",
18430
- "language.cs": "Čeština",
18431
- "language.de": "Deutsch",
18432
- "language.en": "English",
18433
- "language.es": "Español",
18434
- "language.fi": "Suomi",
18435
- "language.fr": "Français",
18436
- "language.is": "Íslenska",
18437
- "language.it": "Italiano",
18438
- "language.ko": "한국어",
18576
+ "language.ca": "Catalaans",
18577
+ "language.cs": "Tsjechisch",
18578
+ "language.de": "Duits",
18579
+ "language.en": "Engels",
18580
+ "language.es": "Spaans",
18581
+ "language.fi": "Fins",
18582
+ "language.fr": "Frans",
18583
+ "language.is": "IJslands",
18584
+ "language.it": "Italiaans",
18585
+ "language.ko": "Koreaans",
18439
18586
  "language.nl": "Nederlands",
18440
- "language.pt": "Português",
18441
- "language.ru": "Русский",
18442
- "language.sk": "Slovenčina",
18443
- "language.zh": "中文",
18587
+ "language.pt": "Portugees",
18588
+ "language.ru": "Russisch",
18589
+ "language.sk": "Slowaaks",
18590
+ "language.zh": "Chinees",
18444
18591
  "map.add.layer": "",
18445
18592
  "map.add.layer.catalog": "",
18446
18593
  "map.add.layer.file": "",
@@ -18491,17 +18638,20 @@ var nl = {
18491
18638
  "record.metadata.author": "",
18492
18639
  "record.metadata.catalog": "",
18493
18640
  "record.metadata.contact": "",
18641
+ "record.metadata.creation": "",
18494
18642
  "record.metadata.details": "",
18495
18643
  "record.metadata.download": "",
18496
18644
  "record.metadata.formats": "",
18497
18645
  "record.metadata.keywords": "",
18646
+ "record.metadata.languages": "",
18498
18647
  "record.metadata.lastUpdate": "",
18499
18648
  "record.metadata.links": "",
18500
18649
  "record.metadata.noUsage": "",
18501
- "record.metadata.origin": "",
18502
18650
  "record.metadata.otherConstraints": "",
18503
18651
  "record.metadata.owner": "",
18504
18652
  "record.metadata.preview": "",
18653
+ "record.metadata.producer": "",
18654
+ "record.metadata.publication": "",
18505
18655
  "record.metadata.publications": "",
18506
18656
  "record.metadata.quality": "",
18507
18657
  "record.metadata.quality.contact.failed": "",
@@ -18524,12 +18674,16 @@ var nl = {
18524
18674
  "record.metadata.related": "",
18525
18675
  "record.metadata.sheet": "",
18526
18676
  "record.metadata.status": "",
18527
- "record.metadata.themes": "",
18677
+ "record.metadata.technical": "",
18678
+ "record.metadata.temporalExtent": "",
18679
+ "record.metadata.temporalExtent.fromDateToDate": "",
18680
+ "record.metadata.temporalExtent.sinceDate": "",
18681
+ "record.metadata.temporalExtent.untilDate": "",
18528
18682
  "record.metadata.title": "",
18683
+ "record.metadata.topics": "",
18529
18684
  "record.metadata.type": "",
18530
18685
  "record.metadata.uniqueId": "",
18531
18686
  "record.metadata.updateFrequency": "",
18532
- "record.metadata.updateStatus": "",
18533
18687
  "record.metadata.updatedOn": "",
18534
18688
  "record.metadata.usage": "",
18535
18689
  "record.more.details": "",
@@ -18754,6 +18908,8 @@ var pt = {
18754
18908
  "downloads.format.unknown": "",
18755
18909
  "downloads.wfs.featuretype.not.found": "",
18756
18910
  dropFile: dropFile,
18911
+ "editor.record.publish": "",
18912
+ "editor.record.upToDate": "",
18757
18913
  "externalviewer.dataset.unnamed": "",
18758
18914
  "facets.block.title.OrgForResource": "",
18759
18915
  "facets.block.title.availableInServices": "",
@@ -18767,21 +18923,21 @@ var pt = {
18767
18923
  "facets.block.title.tag.default": "",
18768
18924
  "facets.block.title.th_regions_tree.default": "",
18769
18925
  "favorite.not.authenticated.tooltip": "",
18770
- "language.ca": "Català",
18771
- "language.cs": "Čeština",
18772
- "language.de": "Deutsch",
18773
- "language.en": "English",
18774
- "language.es": "Español",
18775
- "language.fi": "Suomi",
18776
- "language.fr": "Français",
18777
- "language.is": "Íslenska",
18926
+ "language.ca": "Catalão",
18927
+ "language.cs": "Tcheco",
18928
+ "language.de": "Alemão",
18929
+ "language.en": "Inglês",
18930
+ "language.es": "Espanhol",
18931
+ "language.fi": "Finlandês",
18932
+ "language.fr": "Francês",
18933
+ "language.is": "Islandês",
18778
18934
  "language.it": "Italiano",
18779
- "language.ko": "한국어",
18780
- "language.nl": "Nederlands",
18935
+ "language.ko": "Coreano",
18936
+ "language.nl": "Holandês",
18781
18937
  "language.pt": "Português",
18782
- "language.ru": "Русский",
18783
- "language.sk": "Slovenčina",
18784
- "language.zh": "中文",
18938
+ "language.ru": "Russo",
18939
+ "language.sk": "Eslovaco",
18940
+ "language.zh": "Chinês",
18785
18941
  "map.add.layer": "",
18786
18942
  "map.add.layer.catalog": "",
18787
18943
  "map.add.layer.file": "",
@@ -18832,17 +18988,20 @@ var pt = {
18832
18988
  "record.metadata.author": "",
18833
18989
  "record.metadata.catalog": "",
18834
18990
  "record.metadata.contact": "",
18991
+ "record.metadata.creation": "",
18835
18992
  "record.metadata.details": "",
18836
18993
  "record.metadata.download": "",
18837
18994
  "record.metadata.formats": "",
18838
18995
  "record.metadata.keywords": "",
18996
+ "record.metadata.languages": "",
18839
18997
  "record.metadata.lastUpdate": "",
18840
18998
  "record.metadata.links": "",
18841
18999
  "record.metadata.noUsage": "",
18842
- "record.metadata.origin": "",
18843
19000
  "record.metadata.otherConstraints": "",
18844
19001
  "record.metadata.owner": "",
18845
19002
  "record.metadata.preview": "",
19003
+ "record.metadata.producer": "",
19004
+ "record.metadata.publication": "",
18846
19005
  "record.metadata.publications": "",
18847
19006
  "record.metadata.quality": "",
18848
19007
  "record.metadata.quality.contact.failed": "",
@@ -18865,12 +19024,16 @@ var pt = {
18865
19024
  "record.metadata.related": "",
18866
19025
  "record.metadata.sheet": "",
18867
19026
  "record.metadata.status": "",
18868
- "record.metadata.themes": "",
19027
+ "record.metadata.technical": "",
19028
+ "record.metadata.temporalExtent": "",
19029
+ "record.metadata.temporalExtent.fromDateToDate": "",
19030
+ "record.metadata.temporalExtent.sinceDate": "",
19031
+ "record.metadata.temporalExtent.untilDate": "",
18869
19032
  "record.metadata.title": "",
19033
+ "record.metadata.topics": "",
18870
19034
  "record.metadata.type": "",
18871
19035
  "record.metadata.uniqueId": "",
18872
19036
  "record.metadata.updateFrequency": "",
18873
- "record.metadata.updateStatus": "",
18874
19037
  "record.metadata.updatedOn": "",
18875
19038
  "record.metadata.usage": "",
18876
19039
  "record.more.details": "",
@@ -19011,8 +19174,8 @@ class Gn4FieldMapper {
19011
19174
  },
19012
19175
  cl_topic: (output, source) => ({
19013
19176
  ...output,
19014
- themes: [
19015
- ...(output.themes || []),
19177
+ topics: [
19178
+ ...(output.topics || []),
19016
19179
  ...getAsArray(selectField(source, 'cl_topic')).map((topic) => selectTranslatedValue(topic, this.lang3)),
19017
19180
  ],
19018
19181
  }),
@@ -19036,6 +19199,18 @@ class Gn4FieldMapper {
19036
19199
  ...output,
19037
19200
  recordUpdated: toDate(selectField(source, 'changeDate')),
19038
19201
  }),
19202
+ publicationDateForResource: (output, source) => ({
19203
+ ...output,
19204
+ recordPublished: toDate(selectField(source, 'publicationDateForResource')),
19205
+ }),
19206
+ resourceLanguage: (output, source) => {
19207
+ const langList = getAsArray(selectField(source, 'resourceLanguage'));
19208
+ const languages = langList.map((lang) => LANG_3_TO_2_MAPPER[lang]);
19209
+ return {
19210
+ ...output,
19211
+ languages,
19212
+ };
19213
+ },
19039
19214
  link: (output, source) => {
19040
19215
  const rawLinks = getAsArray(selectField(source, 'link'));
19041
19216
  const distributions = rawLinks
@@ -19067,14 +19242,14 @@ class Gn4FieldMapper {
19067
19242
  catalogUuid: selectFallback(selectField(source, 'sourceCatalogue'), 'no title'),
19068
19243
  }, output);
19069
19244
  },
19070
- tag: (output, source) => ({
19245
+ allKeywords: (output, source) => ({
19071
19246
  ...output,
19072
- keywords: getAsArray(selectField(source, 'tag')).map((tag) => selectTranslatedValue(tag, this.lang3)),
19247
+ keywords: mapKeywords(selectField(source, 'allKeywords'), this.lang3),
19073
19248
  }),
19074
19249
  inspireTheme: (output, source) => ({
19075
19250
  ...output,
19076
- themes: [
19077
- ...(output.themes || []),
19251
+ topics: [
19252
+ ...(output.topics || []),
19078
19253
  ...getAsArray(selectField(source, 'inspireTheme_syn')),
19079
19254
  ],
19080
19255
  }),
@@ -19128,8 +19303,8 @@ class Gn4FieldMapper {
19128
19303
  ],
19129
19304
  };
19130
19305
  },
19131
- resourceTemporalDateRange: (output, source) => {
19132
- const ranges = getAsArray(selectField(source, 'resourceTemporalDateRange'));
19306
+ resourceTemporalExtentDateRange: (output, source) => {
19307
+ const ranges = getAsArray(selectField(source, 'resourceTemporalExtentDateRange'));
19133
19308
  return {
19134
19309
  ...output,
19135
19310
  temporalExtents: ranges.map((range) => {
@@ -19286,6 +19461,7 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
19286
19461
  status: null,
19287
19462
  lineage: null,
19288
19463
  recordUpdated: null,
19464
+ recordPublished: null,
19289
19465
  ownerOrganization: null,
19290
19466
  licenses: [],
19291
19467
  legalConstraints: [],
@@ -19294,10 +19470,11 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
19294
19470
  contacts: [],
19295
19471
  contactsForResource: [],
19296
19472
  keywords: [],
19297
- themes: [],
19473
+ topics: [],
19298
19474
  spatialExtents: [],
19299
19475
  temporalExtents: [],
19300
19476
  overviews: [],
19477
+ languages: [],
19301
19478
  };
19302
19479
  const record = Object.keys(_source).reduce((prev, fieldName) => this.fieldMapper.getMappingFn(fieldName)(prev, _source), emptyRecord);
19303
19480
  return lastValueFrom(this.orgsService.addOrganizationToRecordFromSource(_source, record));
@@ -19457,7 +19634,7 @@ class ElasticsearchService {
19457
19634
  },
19458
19635
  };
19459
19636
  }
19460
- getRelatedRecordPayload(title, uuid, size = 6, _source = ES_SOURCE_SUMMARY) {
19637
+ getRelatedRecordPayload(title, uuid, size = 6, _source = [...ES_SOURCE_SUMMARY, 'allKeywords', 'createDate']) {
19461
19638
  return {
19462
19639
  query: {
19463
19640
  bool: {
@@ -20528,7 +20705,7 @@ const MAP_FEATURE_KEY = 'map';
20528
20705
  const initialMapState = {
20529
20706
  layers: [],
20530
20707
  };
20531
- const reducer$2 = createReducer(initialMapState, on(addLayer, (state, action) => {
20708
+ const reducer$3 = createReducer(initialMapState, on(addLayer, (state, action) => {
20532
20709
  const layers = [...state.layers];
20533
20710
  const layerWithInfo = { ...action.layer, loading: false, error: null };
20534
20711
  if (!('atIndex' in action))
@@ -20577,7 +20754,7 @@ const reducer$2 = createReducer(initialMapState, on(addLayer, (state, action) =>
20577
20754
  : layer),
20578
20755
  })));
20579
20756
  function mapReducer(state, action) {
20580
- return reducer$2(state, action);
20757
+ return reducer$3(state, action);
20581
20758
  }
20582
20759
 
20583
20760
  // Lookup the 'Map' feature state managed by NgRx
@@ -21040,6 +21217,38 @@ function createFuzzyFilter(pattern) {
21040
21217
  };
21041
21218
  }
21042
21219
 
21220
+ function getTemporalRangeUnion(ranges) {
21221
+ let earliestStartDate = Infinity;
21222
+ let latestEndDate = -Infinity;
21223
+ if (ranges.length) {
21224
+ for (let i = 0; i < ranges.length; i++) {
21225
+ const rangeStart = ranges[i].start
21226
+ ? new Date(ranges[i].start).getTime()
21227
+ : -Infinity;
21228
+ const rangeEnd = ranges[i].end
21229
+ ? new Date(ranges[i].end).getTime()
21230
+ : Infinity;
21231
+ if (rangeStart < earliestStartDate) {
21232
+ earliestStartDate = rangeStart;
21233
+ }
21234
+ if (rangeEnd > latestEndDate) {
21235
+ latestEndDate = rangeEnd;
21236
+ }
21237
+ }
21238
+ return {
21239
+ start: earliestStartDate !== -Infinity
21240
+ ? new Date(earliestStartDate).toLocaleDateString()
21241
+ : undefined,
21242
+ end: latestEndDate !== Infinity
21243
+ ? new Date(latestEndDate).toLocaleDateString()
21244
+ : undefined,
21245
+ };
21246
+ }
21247
+ else {
21248
+ return undefined;
21249
+ }
21250
+ }
21251
+
21043
21252
  marker('downloads.wfs.featuretype.not.found');
21044
21253
  const FORMATS = {
21045
21254
  csv: {
@@ -22570,6 +22779,9 @@ class MapContextService {
22570
22779
  if (mapConfig) {
22571
22780
  mapContext = this.mergeMapConfigWithContext(mapContext, mapConfig);
22572
22781
  }
22782
+ else {
22783
+ mapContext.layers = this.addDefaultBaselayerContext(mapContext.layers);
22784
+ }
22573
22785
  if (!mapContext.view?.extent &&
22574
22786
  (!mapContext.view?.center || !mapContext.view?.zoom)) {
22575
22787
  mapContext.view = this.getFallbackView(mapConfig);
@@ -22680,6 +22892,11 @@ class MapContextService {
22680
22892
  }
22681
22893
  return view;
22682
22894
  }
22895
+ addDefaultBaselayerContext(layers) {
22896
+ return layers.includes(DEFAULT_BASELAYER_CONTEXT)
22897
+ ? layers
22898
+ : [DEFAULT_BASELAYER_CONTEXT, ...layers];
22899
+ }
22683
22900
  mergeMapConfigWithContext(mapContext, mapConfig) {
22684
22901
  return {
22685
22902
  ...mapContext,
@@ -23226,11 +23443,11 @@ class ThumbnailComponent {
23226
23443
  }
23227
23444
  }
23228
23445
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, deps: [{ token: THUMBNAIL_PLACEHOLDER, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
23229
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, outputs: { placeholderShown: "placeholderShown" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23446
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, outputs: { placeholderShown: "placeholderShown" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center justify-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5 w-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23230
23447
  }
23231
23448
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, decorators: [{
23232
23449
  type: Component,
23233
- args: [{ selector: 'gn-ui-thumbnail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n" }]
23450
+ args: [{ selector: 'gn-ui-thumbnail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center justify-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5 w-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n" }]
23234
23451
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
23235
23452
  type: Optional
23236
23453
  }, {
@@ -23376,7 +23593,7 @@ class MetadataQualityComponent {
23376
23593
  this.items = [];
23377
23594
  this.add('title', !!this.metadata?.title);
23378
23595
  this.add('description', !!this.metadata?.abstract);
23379
- this.add('topic', this.metadata?.themes?.length > 0);
23596
+ this.add('topic', this.metadata?.topics?.length > 0);
23380
23597
  this.add('keywords', this.metadata?.keywords?.length > 0);
23381
23598
  this.add('legalConstraints', this.metadata?.legalConstraints?.length > 0);
23382
23599
  this.add('organisation', !!contact?.organization);
@@ -23690,11 +23907,11 @@ class BadgeComponent {
23690
23907
  this.clickable = false;
23691
23908
  }
23692
23909
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: BadgeComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23693
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: BadgeComponent, selector: "gn-ui-badge", inputs: { clickable: "clickable" }, ngImport: i0, template: "<div\n class=\"inline-block bg-black opacity-70 py-1.5 px-3 rounded font-medium text-gray-50 text-sm leading-none\"\n [ngClass]=\"\n clickable ? 'hover:bg-gray-800 cursor-pointer transition-colors' : ''\n \"\n>\n <ng-content></ng-content>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23910
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: BadgeComponent, selector: "gn-ui-badge", inputs: { clickable: "clickable" }, ngImport: i0, template: "<div\n class=\"inline-block bg-black opacity-70 py-1.5 px-3 rounded font-medium text-gray-50 text-sm leading-none\"\n [ngClass]=\"\n clickable\n ? 'hover:bg-primary cursor-pointer transition-colors duration-100'\n : ''\n \"\n>\n <ng-content></ng-content>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23694
23911
  }
23695
23912
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: BadgeComponent, decorators: [{
23696
23913
  type: Component,
23697
- args: [{ selector: 'gn-ui-badge', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"inline-block bg-black opacity-70 py-1.5 px-3 rounded font-medium text-gray-50 text-sm leading-none\"\n [ngClass]=\"\n clickable ? 'hover:bg-gray-800 cursor-pointer transition-colors' : ''\n \"\n>\n <ng-content></ng-content>\n</div>\n" }]
23914
+ args: [{ selector: 'gn-ui-badge', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n class=\"inline-block bg-black opacity-70 py-1.5 px-3 rounded font-medium text-gray-50 text-sm leading-none\"\n [ngClass]=\"\n clickable\n ? 'hover:bg-primary cursor-pointer transition-colors duration-100'\n : ''\n \"\n>\n <ng-content></ng-content>\n</div>\n" }]
23698
23915
  }], propDecorators: { clickable: [{
23699
23916
  type: Input
23700
23917
  }] } });
@@ -23824,6 +24041,20 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23824
24041
  type: Input
23825
24042
  }] } });
23826
24043
 
24044
+ class MarkdownParserComponent {
24045
+ get parsedMarkdown() {
24046
+ return marked.parse(this.textContent);
24047
+ }
24048
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24049
+ 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 }); }
24050
+ }
24051
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
24052
+ type: Component,
24053
+ 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"] }]
24054
+ }], propDecorators: { textContent: [{
24055
+ type: Input
24056
+ }] } });
24057
+
23827
24058
  class ContentGhostComponent {
23828
24059
  constructor() {
23829
24060
  this.ghostClass = '';
@@ -23963,14 +24194,16 @@ class MaxLinesComponent {
23963
24194
  return result;
23964
24195
  }
23965
24196
  ngOnDestroy() {
24197
+ if (!this.observer)
24198
+ return;
23966
24199
  this.observer.unobserve(this.container.nativeElement.children[0]);
23967
24200
  }
23968
24201
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MaxLinesComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
23969
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: { maxLines: "maxLines" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24202
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: { maxLines: "maxLines" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23970
24203
  }
23971
24204
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MaxLinesComponent, decorators: [{
23972
24205
  type: Component,
23973
- args: [{ selector: 'gn-ui-max-lines', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n" }]
24206
+ args: [{ selector: 'gn-ui-max-lines', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n" }]
23974
24207
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { maxLines: [{
23975
24208
  type: Input
23976
24209
  }], container: [{
@@ -23978,20 +24211,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
23978
24211
  args: ['container']
23979
24212
  }] } });
23980
24213
 
23981
- class MarkdownParserComponent {
23982
- get parsedMarkdown() {
23983
- return marked.parse(this.textContent);
23984
- }
23985
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
23986
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: { textContent: "textContent" }, ngImport: i0, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23987
- }
23988
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MarkdownParserComponent, decorators: [{
23989
- type: Component,
23990
- args: [{ selector: 'gn-ui-markdown-parser', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"markdown-body\" [innerHTML]=\"parsedMarkdown\"></div>\n", styles: [":host ::ng-deep .markdown-body{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;margin:0px 0px 1.5rem;line-height:1.5;word-wrap:break-word}:host ::ng-deep .markdown-body strong{@apply font-bold;color:var(--color-secondary-darker)}:host ::ng-deep .markdown-body h1,:host ::ng-deep .markdown-body h2,:host ::ng-deep .markdown-body h3,:host ::ng-deep .markdown-body h4,:host ::ng-deep .markdown-body h5,:host ::ng-deep .markdown-body h6{margin-top:24px;margin-bottom:16px;line-height:1.25;@apply text-title font-title font-bold;}:host ::ng-deep .markdown-body h1{margin:.67em 0;padding-bottom:.3em;font-size:2em;color:var(--color-primary)}:host ::ng-deep .markdown-body h2{padding-bottom:.3em;font-size:1.5em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h3{font-size:1.25em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h4{font-size:1em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h5{font-size:.875em;color:var(--color-secondary)}:host ::ng-deep .markdown-body h6{font-size:.85em;color:var(--color-secondary-lighter)}:host ::ng-deep .markdown-body p{margin-top:0;margin-bottom:10px}:host ::ng-deep .markdown-body p>a{margin-top:0;margin-bottom:10px;color:var(--color-primary)!important;text-decoration:none}:host ::ng-deep .markdown-body p>a:hover{color:var(--color-primary-darker)!important;@apply underline;}:host ::ng-deep .markdown-body blockquote{margin:0;padding:0 1em;color:var(--color-secondary-lighter);border-left:.25em solid var(--color-primary-lighter)}:host ::ng-deep .markdown-body pre{margin-top:0;margin-bottom:0;font-size:12px;background-color:var(--color-gray-100);word-wrap:normal}:host ::ng-deep .markdown-body pre{padding:16px;overflow:auto;font-size:85%;line-height:1.45;color:var(--color-secondary);border-radius:6px}:host ::ng-deep .markdown-body code{padding:.2em .4em;margin:0;font-size:85%;white-space:break-spaces;border-radius:6px}:host ::ng-deep .markdown-body pre code{display:inline;max-width:auto;padding:0;margin:0;overflow:visible;line-height:inherit;word-wrap:normal;border:0}:host ::ng-deep .markdown-body hr{box-sizing:content-box;overflow:hidden;background:transparent;border-bottom:1px solid var(--color-secondary);height:.15em;padding:0;margin:24px 0;background-color:var(--color-secondary);border:0}:host ::ng-deep .markdown-body hr:before{display:table;content:\"\"}:host ::ng-deep .markdown-body hr:after{display:table;clear:both;content:\"\"}:host ::ng-deep .markdown-body ul,:host ::ng-deep .markdown-body ol{margin-top:0;margin-bottom:0;padding-left:2em;list-style:revert}:host ::ng-deep .markdown-body ol ol,:host ::ng-deep .markdown-body ul ol{list-style-type:lower-roman}:host ::ng-deep .markdown-body ul ul ol,:host ::ng-deep .markdown-body ul ol ol,:host ::ng-deep .markdown-body ol ul ol,:host ::ng-deep .markdown-body ol ol ol{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"a s\"]{list-style-type:lower-alpha}:host ::ng-deep .markdown-body ol[type=\"A s\"]{list-style-type:upper-alpha}:host ::ng-deep .markdown-body ol[type=\"i s\"]{list-style-type:lower-roman}:host ::ng-deep .markdown-body ol[type=\"I s\"]{list-style-type:upper-roman}:host ::ng-deep .markdown-body ol[type=\"1\"]{list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body div>ol:not([type]){list-style:unset;list-style-type:decimal}:host ::ng-deep .markdown-body table{border-spacing:0;border-collapse:collapse;display:block;width:max-content;max-width:100%;overflow:auto;padding-bottom:15px}:host ::ng-deep .markdown-body td,:host ::ng-deep .markdown-body th{padding:0}:host ::ng-deep .markdown-body th{color:var(--color-secondary)}:host ::ng-deep .markdown-body table th,:host ::ng-deep .markdown-body table td{padding:6px 13px;border:1px solid var(--color-gray-500)}:host ::ng-deep .markdown-body table td>:last-child{margin-bottom:0}:host ::ng-deep .markdown-body table tr{background-color:#fff;border-top:1px solid var(--color-secondary-lighter)}:host ::ng-deep .markdown-body table tr:nth-child(2n){background-color:var(--color-gray-100)}:host ::ng-deep .markdown-body table img{background-color:transparent}:host ::ng-deep .markdown-body img{border-style:none;max-width:100%;box-sizing:content-box;background-color:transparent}:host ::ng-deep .markdown-body img[align=right]{padding-left:20px}:host ::ng-deep .markdown-body img[align=left]{padding-right:20px}\n"] }]
23991
- }], propDecorators: { textContent: [{
23992
- type: Input
23993
- }] } });
23994
-
23995
24214
  class MetadataInfoComponent {
23996
24215
  constructor() {
23997
24216
  this.keyword = new EventEmitter();
@@ -24039,6 +24258,16 @@ class MetadataInfoComponent {
24039
24258
  return undefined;
24040
24259
  }
24041
24260
  }
24261
+ get temporalExtent() {
24262
+ const temporalExtents = this.metadata.temporalExtents;
24263
+ return getTemporalRangeUnion(temporalExtents);
24264
+ }
24265
+ get shownOrganization() {
24266
+ return this.metadata.ownerOrganization;
24267
+ }
24268
+ get resourceContact() {
24269
+ return this.metadata.contactsForResource?.[0];
24270
+ }
24042
24271
  fieldReady(propName) {
24043
24272
  return !this.incomplete || propName in this.metadata;
24044
24273
  }
@@ -24046,11 +24275,11 @@ class MetadataInfoComponent {
24046
24275
  this.keyword.emit(keyword);
24047
24276
  }
24048
24277
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24049
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24278
+ 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 <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"mt-6 mb-3 font-medium text-primary text-sm\" translate>\n record.metadata.keywords\n </p>\n <div class=\"sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block 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 </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 *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.recordCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordCreated.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.recordPublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordPublished.toLocaleDateString() }}\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.languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.languages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.technical' | 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 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</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: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { 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 }); }
24050
24279
  }
24051
24280
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
24052
24281
  type: Component,
24053
- args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.themes?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.themes</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let theme of metadata.themes\"\n >{{ theme }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
24282
+ 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 <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"mt-6 mb-3 font-medium text-primary text-sm\" translate>\n record.metadata.keywords\n </p>\n <div class=\"sm:pb-4 flex flex-wrap gap-2\">\n <gn-ui-badge\n class=\"inline-block 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 </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 *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.recordCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordCreated.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.recordPublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordPublished.toLocaleDateString() }}\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.languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.languages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.technical' | 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 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</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"] }]
24054
24283
  }], propDecorators: { metadata: [{
24055
24284
  type: Input
24056
24285
  }], incomplete: [{
@@ -24090,23 +24319,23 @@ class ButtonComponent {
24090
24319
  this.extraClass = '';
24091
24320
  this.buttonClick = new EventEmitter();
24092
24321
  }
24093
- // btn-classes are explicited to allow tailwind recognize them and add it in css.
24094
24322
  set type(value) {
24323
+ // btn-classes are written in full to be picked up by tailwind
24095
24324
  switch (value) {
24096
24325
  case 'primary':
24097
- this.btnClass = 'btn-primary';
24326
+ this.btnClass = 'gn-ui-btn-primary';
24098
24327
  break;
24099
24328
  case 'secondary':
24100
- this.btnClass = 'btn-secondary';
24329
+ this.btnClass = 'gn-ui-btn-secondary';
24101
24330
  break;
24102
24331
  case 'outline':
24103
- this.btnClass = 'btn-outline';
24332
+ this.btnClass = 'gn-ui-btn-outline';
24104
24333
  break;
24105
24334
  case 'light':
24106
- this.btnClass = 'btn-light';
24335
+ this.btnClass = 'gn-ui-btn-light';
24107
24336
  break;
24108
24337
  default:
24109
- this.btnClass = 'btn-default';
24338
+ this.btnClass = 'gn-ui-btn-default';
24110
24339
  break;
24111
24340
  }
24112
24341
  }
@@ -24119,11 +24348,11 @@ class ButtonComponent {
24119
24348
  propagateToDocumentOnly(event);
24120
24349
  }
24121
24350
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24122
- 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 }); }
24351
+ 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]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24123
24352
  }
24124
24353
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
24125
24354
  type: Component,
24126
- 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"] }]
24355
+ args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button\n type=\"button\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n" }]
24127
24356
  }], propDecorators: { type: [{
24128
24357
  type: Input
24129
24358
  }], disabled: [{
@@ -24403,11 +24632,11 @@ class CarouselComponent {
24403
24632
  this.emblaApi.scrollTo(stepIndex);
24404
24633
  }
24405
24634
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
24406
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24635
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n *ngIf=\"steps.length > 1\"\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { 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"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24407
24636
  }
24408
24637
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
24409
24638
  type: Component,
24410
- args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
24639
+ args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n *ngIf=\"steps.length > 1\"\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
24411
24640
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerClass: [{
24412
24641
  type: Input
24413
24642
  }], stepsContainerClass: [{
@@ -24559,11 +24788,11 @@ class MetadataContactComponent {
24559
24788
  this.organizationClick.emit(this.shownOrganization);
24560
24789
  }
24561
24790
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24562
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24791
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24563
24792
  }
24564
24793
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
24565
24794
  type: Component,
24566
- args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
24795
+ args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
24567
24796
  }], propDecorators: { metadata: [{
24568
24797
  type: Input
24569
24798
  }], organizationClick: [{
@@ -24787,11 +25016,11 @@ class DropdownSelectorComponent {
24787
25016
  }
24788
25017
  }
24789
25018
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24790
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: { title: "title", showTitle: "showTitle", ariaName: "ariaName", choices: "choices", selected: "selected", maxRows: "maxRows", extraBtnClass: "extraBtnClass", minWidth: "minWidth" }, outputs: { selectValue: "selectValue" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "choiceInputs", predicate: ["choiceInputs"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"!p-[8px] !pl-[16px] flex flex-row w-full {{ extraBtnClass }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25019
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: { title: "title", showTitle: "showTitle", ariaName: "ariaName", choices: "choices", selected: "selected", maxRows: "maxRows", extraBtnClass: "extraBtnClass", minWidth: "minWidth" }, outputs: { selectValue: "selectValue" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "choiceInputs", predicate: ["choiceInputs"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"bg-background !p-[8px] !pl-[16px] flex flex-row w-full {{\n extraBtnClass\n }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24791
25020
  }
24792
25021
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, decorators: [{
24793
25022
  type: Component,
24794
- args: [{ selector: 'gn-ui-dropdown-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"!p-[8px] !pl-[16px] flex flex-row w-full {{ extraBtnClass }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n" }]
25023
+ args: [{ selector: 'gn-ui-dropdown-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"bg-background !p-[8px] !pl-[16px] flex flex-row w-full {{\n extraBtnClass\n }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n" }]
24795
25024
  }], propDecorators: { title: [{
24796
25025
  type: Input
24797
25026
  }], showTitle: [{
@@ -24967,11 +25196,11 @@ class DropdownMultiselectComponent {
24967
25196
  this.setFocus();
24968
25197
  }
24969
25198
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, deps: [{ token: i1$6.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
24970
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25199
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"bg-background w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24971
25200
  }
24972
25201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
24973
25202
  type: Component,
24974
- args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
25203
+ args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"bg-background w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
24975
25204
  }], ctorParameters: function () { return [{ type: i1$6.ScrollStrategyOptions }]; }, propDecorators: { title: [{
24976
25205
  type: Input
24977
25206
  }], choices: [{
@@ -25125,11 +25354,11 @@ class TextAreaComponent {
25125
25354
  this.rawChange.next(value);
25126
25355
  }
25127
25356
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25128
- 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"] }); }
25357
+ 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"] }); }
25129
25358
  }
25130
25359
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: TextAreaComponent, decorators: [{
25131
25360
  type: Component,
25132
- 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"] }]
25361
+ 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"] }]
25133
25362
  }], propDecorators: { value: [{
25134
25363
  type: Input
25135
25364
  }], placeholder: [{
@@ -25399,11 +25628,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25399
25628
 
25400
25629
  class NavigationButtonComponent {
25401
25630
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25402
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 text-white rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25631
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25403
25632
  }
25404
25633
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
25405
25634
  type: Component,
25406
- args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 text-white rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n" }]
25635
+ args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"] }]
25407
25636
  }], propDecorators: { label: [{
25408
25637
  type: Input
25409
25638
  }], icon: [{
@@ -25536,7 +25765,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25536
25765
 
25537
25766
  class FormFieldComponent {
25538
25767
  set value(v) {
25539
- this.formControl.setValue(v);
25768
+ this.formControl.setValue(v, {
25769
+ emitEvent: false,
25770
+ });
25540
25771
  }
25541
25772
  constructor() {
25542
25773
  this.formControl = new FormControl();
@@ -25717,10 +25948,8 @@ class UiInputsModule {
25717
25948
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
25718
25949
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: UiInputsModule, declarations: [DropdownSelectorComponent,
25719
25950
  AutocompleteComponent,
25720
- ButtonComponent,
25721
25951
  TextInputComponent,
25722
25952
  DragAndDropFileInputComponent,
25723
- TextAreaComponent,
25724
25953
  ChipsInputComponent,
25725
25954
  NavigationButtonComponent,
25726
25955
  StarToggleComponent,
@@ -25753,7 +25982,9 @@ class UiInputsModule {
25753
25982
  MatInputModule,
25754
25983
  MatDatepickerModule,
25755
25984
  MatNativeDateModule,
25756
- EditableLabelDirective], exports: [DropdownSelectorComponent,
25985
+ EditableLabelDirective,
25986
+ TextAreaComponent,
25987
+ ButtonComponent], exports: [DropdownSelectorComponent,
25757
25988
  AutocompleteComponent,
25758
25989
  ButtonComponent,
25759
25990
  TextInputComponent,
@@ -25795,10 +26026,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25795
26026
  declarations: [
25796
26027
  DropdownSelectorComponent,
25797
26028
  AutocompleteComponent,
25798
- ButtonComponent,
25799
26029
  TextInputComponent,
25800
26030
  DragAndDropFileInputComponent,
25801
- TextAreaComponent,
25802
26031
  ChipsInputComponent,
25803
26032
  NavigationButtonComponent,
25804
26033
  StarToggleComponent,
@@ -25837,6 +26066,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25837
26066
  MatDatepickerModule,
25838
26067
  MatNativeDateModule,
25839
26068
  EditableLabelDirective,
26069
+ TextAreaComponent,
26070
+ ButtonComponent,
25840
26071
  ],
25841
26072
  exports: [
25842
26073
  DropdownSelectorComponent,
@@ -26058,7 +26289,6 @@ class UiElementsModule {
26058
26289
  PaginationButtonsComponent,
26059
26290
  MaxLinesComponent,
26060
26291
  RecordApiFormComponent,
26061
- MarkdownParserComponent,
26062
26292
  ImageOverlayPreviewComponent], imports: [CommonModule,
26063
26293
  MatIconModule,
26064
26294
  MatTooltipModule,
@@ -26067,7 +26297,8 @@ class UiElementsModule {
26067
26297
  RouterModule,
26068
26298
  UiInputsModule,
26069
26299
  FormsModule,
26070
- NgOptimizedImage], exports: [MetadataInfoComponent,
26300
+ NgOptimizedImage,
26301
+ MarkdownParserComponent], exports: [MetadataInfoComponent,
26071
26302
  ContentGhostComponent,
26072
26303
  DownloadItemComponent,
26073
26304
  DownloadsListComponent,
@@ -26114,6 +26345,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26114
26345
  UiInputsModule,
26115
26346
  FormsModule,
26116
26347
  NgOptimizedImage,
26348
+ MarkdownParserComponent,
26117
26349
  ],
26118
26350
  declarations: [
26119
26351
  MetadataInfoComponent,
@@ -26136,7 +26368,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
26136
26368
  PaginationButtonsComponent,
26137
26369
  MaxLinesComponent,
26138
26370
  RecordApiFormComponent,
26139
- MarkdownParserComponent,
26140
26371
  ImageOverlayPreviewComponent,
26141
26372
  ],
26142
26373
  exports: [
@@ -26540,7 +26771,7 @@ const initSearch = () => {
26540
26771
  const initialState = {
26541
26772
  [DEFAULT_SEARCH_KEY]: initSearch(),
26542
26773
  };
26543
- function reducer$1(state = initialState, action) {
26774
+ function reducer$2(state = initialState, action) {
26544
26775
  const { id } = action;
26545
26776
  if (id) {
26546
26777
  let stateSearch = state[id] || initSearch();
@@ -27482,11 +27713,11 @@ class FavoriteStarComponent {
27482
27713
  });
27483
27714
  }
27484
27715
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, deps: [{ token: FavoritesService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: AuthService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
27485
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row content-center\">\n <span\n class=\"align-text-top mr-1.5 mt-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n class=\"mt-1\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count mt-1.5\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: ["toggled", "disabled"], outputs: ["newValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27716
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5\"\n data-test=\"favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5\"\n data-test=\"favorite-count\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: ["toggled", "disabled"], outputs: ["newValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27486
27717
  }
27487
27718
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, decorators: [{
27488
27719
  type: Component,
27489
- args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-row content-center\">\n <span\n class=\"align-text-top mr-1.5 mt-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n class=\"mt-1\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count mt-1.5\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n" }]
27720
+ args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5\"\n data-test=\"favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5\"\n data-test=\"favorite-count\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n" }]
27490
27721
  }], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: { displayCount: [{
27491
27722
  type: Input
27492
27723
  }], record: [{
@@ -28164,7 +28395,7 @@ class FeatureSearchModule {
28164
28395
  },
28165
28396
  ], imports: [CommonModule,
28166
28397
  TranslateModule.forChild(),
28167
- StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$1, {
28398
+ StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$2, {
28168
28399
  initialState,
28169
28400
  }),
28170
28401
  EffectsModule.forFeature([SearchEffects]),
@@ -28194,7 +28425,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28194
28425
  imports: [
28195
28426
  CommonModule,
28196
28427
  TranslateModule.forChild(),
28197
- StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$1, {
28428
+ StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$2, {
28198
28429
  initialState,
28199
28430
  }),
28200
28431
  EffectsModule.forFeature([SearchEffects]),
@@ -28967,7 +29198,7 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
28967
29198
  const { metadata, related, ...stateWithoutMd } = state;
28968
29199
  return stateWithoutMd;
28969
29200
  }));
28970
- function reducer(state, action) {
29201
+ function reducer$1(state, action) {
28971
29202
  return mdViewReducer(state, action);
28972
29203
  }
28973
29204
 
@@ -30917,11 +31148,11 @@ class LanguageSwitcherComponent {
30917
31148
  this.translate.use(value);
30918
31149
  }
30919
31150
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, deps: [{ token: LANGUAGES_LIST, optional: true }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
30920
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center text-white !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }] }); }
31151
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }] }); }
30921
31152
  }
30922
31153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
30923
31154
  type: Component,
30924
- args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center text-white !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n" }]
31155
+ args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1\"\n>\n</gn-ui-dropdown-selector>\n" }]
30925
31156
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
30926
31157
  type: Optional
30927
31158
  }, {
@@ -31248,18 +31479,18 @@ class DataViewPermalinkComponent {
31248
31479
  if (config) {
31249
31480
  const { aggregation, xProperty, yProperty, chartType } = config;
31250
31481
  const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
31251
- url.search = `?v=${this.version}
31252
- &e=gn-dataset-view-chart
31253
- &a=api-url=${this.config.basePath}
31254
- &a=dataset-id=${metadata.uniqueIdentifier}
31255
- &a=primary-color=%230f4395
31256
- &a=secondary-color=%238bc832
31257
- &a=main-color=%23555
31258
- &a=background-color=%23fdfbff
31259
- &a=aggregation=${aggregation}
31260
- &a=x-property=${xProperty}
31261
- &a=y-property=${yProperty}
31262
- &a=chart-type=${chartType}`;
31482
+ url.searchParams.set('v', `${this.version}`);
31483
+ url.searchParams.append('e', `gn-dataset-view-chart`);
31484
+ url.searchParams.append('a', `api-url=${this.config.basePath}`);
31485
+ url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
31486
+ url.searchParams.append('a', `primary-color=#0f4395`);
31487
+ url.searchParams.append('a', `secondary-color=#8bc832`);
31488
+ url.searchParams.append('a', `main-color=#555`);
31489
+ url.searchParams.append('a', `background-color=#fdfbff`);
31490
+ url.searchParams.append('a', `aggregation=${aggregation}`);
31491
+ url.searchParams.append('a', `x-property=${xProperty}`);
31492
+ url.searchParams.append('a', `y-property=${yProperty}`);
31493
+ url.searchParams.append('a', `chart-type=${chartType}`);
31263
31494
  return url.toString();
31264
31495
  }
31265
31496
  return '';
@@ -31366,7 +31597,7 @@ class FeatureRecordModule {
31366
31597
  DataViewWebComponentComponent,
31367
31598
  DataViewShareComponent] }); }
31368
31599
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureRecordModule, providers: [MdViewFacade], imports: [CommonModule,
31369
- StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer),
31600
+ StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer$1),
31370
31601
  EffectsModule.forFeature([MdViewEffects]),
31371
31602
  UiLayoutModule,
31372
31603
  FeatureMapModule,
@@ -31394,7 +31625,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
31394
31625
  ],
31395
31626
  imports: [
31396
31627
  CommonModule,
31397
- StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer),
31628
+ StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer$1),
31398
31629
  EffectsModule.forFeature([MdViewEffects]),
31399
31630
  UiLayoutModule,
31400
31631
  FeatureMapModule,
@@ -31420,6 +31651,122 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
31420
31651
  }]
31421
31652
  }] });
31422
31653
 
31654
+ const openRecord = createAction('[Editor] Open record', props());
31655
+ const updateRecordField = createAction('[Editor] Update record field', props());
31656
+ const markRecordAsChanged = createAction('[Editor] Mark record as changed');
31657
+ const saveRecord = createAction('[Editor] Save record');
31658
+ const saveRecordSuccess = createAction('[Editor] Save record success');
31659
+ const saveRecordFailure = createAction('[Editor] Save record failure', props());
31660
+
31661
+ const DEFAULT_FIELDS = [
31662
+ {
31663
+ model: 'title',
31664
+ formFieldConfig: {
31665
+ labelKey: 'Metadata title',
31666
+ type: 'text',
31667
+ },
31668
+ },
31669
+ {
31670
+ model: 'abstract',
31671
+ formFieldConfig: {
31672
+ labelKey: 'Abstract',
31673
+ type: 'rich',
31674
+ },
31675
+ },
31676
+ {
31677
+ model: 'uniqueIdentifier',
31678
+ formFieldConfig: {
31679
+ labelKey: 'Unique identifier',
31680
+ type: 'text',
31681
+ locked: true,
31682
+ },
31683
+ },
31684
+ {
31685
+ model: 'recordUpdated',
31686
+ formFieldConfig: {
31687
+ labelKey: 'Record Updated',
31688
+ type: 'text',
31689
+ locked: true,
31690
+ },
31691
+ onSaveProcess: '${dateNow()}',
31692
+ },
31693
+ ];
31694
+
31695
+ const EDITOR_FEATURE_KEY = 'editor';
31696
+ const initialEditorState = {
31697
+ record: null,
31698
+ saving: false,
31699
+ saveError: null,
31700
+ changedSinceSave: false,
31701
+ fieldsConfig: DEFAULT_FIELDS,
31702
+ };
31703
+ const reducer = createReducer(initialEditorState, on(openRecord, (state, { record }) => ({
31704
+ ...state,
31705
+ changedSinceSave: false,
31706
+ record,
31707
+ })), on(saveRecord, (state) => ({
31708
+ ...state,
31709
+ saving: true,
31710
+ saveError: null,
31711
+ })), on(saveRecordSuccess, (state) => ({
31712
+ ...state,
31713
+ saving: false,
31714
+ saveError: null,
31715
+ changedSinceSave: false,
31716
+ })), on(saveRecordFailure, (state, { error }) => ({
31717
+ ...state,
31718
+ saving: false,
31719
+ saveError: error,
31720
+ })), on(updateRecordField, (state, { field, value }) => ({
31721
+ ...state,
31722
+ record: {
31723
+ ...state.record,
31724
+ [field]: value,
31725
+ },
31726
+ })), on(markRecordAsChanged, (state) => ({
31727
+ ...state,
31728
+ changedSinceSave: true,
31729
+ })));
31730
+ function editorReducer(state, action) {
31731
+ return reducer(state, action);
31732
+ }
31733
+
31734
+ const selectEditorState = createFeatureSelector(EDITOR_FEATURE_KEY);
31735
+ const selectRecord = createSelector(selectEditorState, (state) => state.record);
31736
+ const selectRecordSaving = createSelector(selectEditorState, (state) => state.saving);
31737
+ const selectRecordSaveError = createSelector(selectEditorState, (state) => state.saveError);
31738
+ const selectRecordChangedSinceSave = createSelector(selectEditorState, (state) => state.changedSinceSave);
31739
+ const selectRecordFieldsConfig = createSelector(selectEditorState, (state) => state.fieldsConfig);
31740
+ const selectRecordFields = createSelector(selectEditorState, (state) => state.fieldsConfig.map((fieldConfig) => ({
31741
+ config: fieldConfig,
31742
+ value: state.record?.[fieldConfig.model] || null,
31743
+ })));
31744
+
31745
+ class EditorFacade {
31746
+ constructor() {
31747
+ this.store = inject(Store);
31748
+ this.record$ = this.store.pipe(select(selectRecord));
31749
+ this.saving$ = this.store.pipe(select(selectRecordSaving));
31750
+ this.saveError$ = this.store.pipe(select(selectRecordSaveError));
31751
+ this.changedSinceSave$ = this.store.pipe(select(selectRecordChangedSinceSave));
31752
+ this.recordFields$ = this.store.pipe(select(selectRecordFields));
31753
+ }
31754
+ openRecord(record) {
31755
+ this.store.dispatch(openRecord({ record }));
31756
+ }
31757
+ saveRecord() {
31758
+ this.store.dispatch(saveRecord());
31759
+ }
31760
+ updateRecordField(field, value) {
31761
+ this.store.dispatch(updateRecordField({ field, value }));
31762
+ }
31763
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
31764
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorFacade }); }
31765
+ }
31766
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorFacade, decorators: [{
31767
+ type: Injectable
31768
+ }] });
31769
+
31423
31770
  class WizardService {
31424
31771
  constructor(translateService) {
31425
31772
  this.translateService = translateService;
@@ -31781,6 +32128,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
31781
32128
  args: [{ selector: 'gn-ui-wizard-summarize', template: "<div>\n <div class=\"text-2xl font-bold title\">\n {{ title | uppercase }}\n </div>\n <div class=\"text-lg font-bold pt-2 abstract\">\n {{ abstract }}\n </div>\n <div class=\"text-lg font-normal\">\n <span translate>datafeeder.wizardSummarize.createdAt</span>\n &nbsp;<span class=\"date\">{{ createdDate }}</span> -\n <span translate>datafeeder.wizardSummarize.scale</span>\n &nbsp;<span class=\"scale\">{{ scale }}</span>\n </div>\n <div class=\"text-lg italic font-normal description\">\n {{ description }}\n </div>\n <div class=\"text-sm font-medium pt-4 tags\">\n <span class=\"icon-tag pr-2\"></span>\n {{ tags }}\n </div>\n</div>\n", styles: [".icon-tag:before{font-size:18px}\n"] }]
31782
32129
  }], ctorParameters: function () { return [{ type: WizardService }, { type: i1$1.TranslateService }]; } });
31783
32130
 
32131
+ function evaluate(expression) {
32132
+ if (expression.match(/^\${.*}$/)) {
32133
+ return evaluate(expression.slice(2, -1));
32134
+ }
32135
+ const operator = expression.split('(')[0];
32136
+ switch (operator) {
32137
+ case 'dateNow':
32138
+ return () => new Date();
32139
+ default:
32140
+ throw new Error(`Unknown operator: ${operator}`);
32141
+ }
32142
+ }
32143
+
32144
+ class EditorService {
32145
+ constructor(http, apiConfiguration) {
32146
+ this.http = http;
32147
+ this.apiConfiguration = apiConfiguration;
32148
+ this.apiUrl = `${this.apiConfiguration?.basePath || '/geonetwork/srv/api'}`;
32149
+ }
32150
+ // TODO: use the catalog repository instead
32151
+ loadRecordByUuid(uuid) {
32152
+ return this.http
32153
+ .get(`${this.apiUrl}/records/${uuid}/formatters/xml`, {
32154
+ responseType: 'text',
32155
+ headers: {
32156
+ Accept: 'application/xml',
32157
+ },
32158
+ })
32159
+ .pipe(map$1((response) => toModel(response.toString())));
32160
+ }
32161
+ // returns the record as it was when saved
32162
+ saveRecord(record, fieldsConfig) {
32163
+ const savedRecord = { ...record };
32164
+ // run onSave processes
32165
+ for (const field of fieldsConfig) {
32166
+ if (field.onSaveProcess && field.model) {
32167
+ const evaluator = evaluate(field.onSaveProcess);
32168
+ savedRecord[field.model] = evaluator({
32169
+ config: field,
32170
+ value: record[field.model],
32171
+ });
32172
+ }
32173
+ }
32174
+ // TODO: use the catalog repository instead
32175
+ return this.http
32176
+ .put(`${this.apiUrl}/records?metadataType=METADATA&uuidProcessing=OVERWRITE&transformWith=_none_&publishToAll=on`, toXml(savedRecord), {
32177
+ headers: {
32178
+ 'Content-Type': 'application/xml',
32179
+ },
32180
+ withCredentials: true,
32181
+ })
32182
+ .pipe(map$1(() => savedRecord));
32183
+ }
32184
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, deps: [{ token: i1.HttpClient }, { token: Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
32185
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, providedIn: 'root' }); }
32186
+ }
32187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, decorators: [{
32188
+ type: Injectable,
32189
+ args: [{
32190
+ providedIn: 'root',
32191
+ }]
32192
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: Configuration, decorators: [{
32193
+ type: Optional
32194
+ }, {
32195
+ type: Inject,
32196
+ args: [Configuration]
32197
+ }] }]; } });
32198
+
32199
+ class EditorEffects {
32200
+ constructor() {
32201
+ this.actions$ = inject(Actions);
32202
+ this.editorService = inject(EditorService);
32203
+ this.store = inject(Store);
32204
+ this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordFieldsConfig)), switchMap$1(([, record, fieldsConfig]) => this.editorService.saveRecord(record, fieldsConfig).pipe(switchMap$1((newRecord) => of(saveRecordSuccess(), openRecord({ record: newRecord }))), catchError((error) => of(saveRecordFailure({
32205
+ error: error.message,
32206
+ })))))));
32207
+ this.markAsChanged$ = createEffect(() => this.actions$.pipe(ofType(updateRecordField), map$1(() => markRecordAsChanged())));
32208
+ }
32209
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
32210
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects }); }
32211
+ }
32212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects, decorators: [{
32213
+ type: Injectable
32214
+ }] });
32215
+
31784
32216
  class FeatureEditorModule {
31785
32217
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
31786
32218
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, declarations: [WizardComponent,
@@ -31791,8 +32223,8 @@ class FeatureEditorModule {
31791
32223
  MatNativeDateModule,
31792
32224
  MatFormFieldModule,
31793
32225
  HttpClientModule,
31794
- HttpClientXsrfModule], exports: [WizardComponent, WizardSummarizeComponent] }); }
31795
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, imports: [CommonModule,
32226
+ HttpClientXsrfModule, i1$2.StoreFeatureModule, i1$8.EffectsFeatureModule], exports: [WizardComponent, WizardSummarizeComponent] }); }
32227
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, providers: [EditorFacade], imports: [CommonModule,
31796
32228
  UiInputsModule,
31797
32229
  UiWidgetsModule,
31798
32230
  TranslateModule.forChild(),
@@ -31800,7 +32232,9 @@ class FeatureEditorModule {
31800
32232
  MatNativeDateModule,
31801
32233
  MatFormFieldModule,
31802
32234
  HttpClientModule,
31803
- HttpClientXsrfModule] }); }
32235
+ HttpClientXsrfModule,
32236
+ StoreModule.forFeature(EDITOR_FEATURE_KEY, editorReducer),
32237
+ EffectsModule.forFeature([EditorEffects])] }); }
31804
32238
  }
31805
32239
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, decorators: [{
31806
32240
  type: NgModule,
@@ -31820,105 +32254,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
31820
32254
  MatFormFieldModule,
31821
32255
  HttpClientModule,
31822
32256
  HttpClientXsrfModule,
32257
+ StoreModule.forFeature(EDITOR_FEATURE_KEY, editorReducer),
32258
+ EffectsModule.forFeature([EditorEffects]),
31823
32259
  ],
31824
32260
  exports: [WizardComponent, WizardSummarizeComponent],
32261
+ providers: [EditorFacade],
31825
32262
  }]
31826
32263
  }] });
31827
32264
 
31828
- class EditorService {
31829
- constructor(http, apiConfiguration) {
31830
- this.http = http;
31831
- this.apiConfiguration = apiConfiguration;
31832
- this.record$ = new BehaviorSubject(null);
31833
- this.fieldsConfig = [
31834
- {
31835
- model: 'title',
31836
- labelKey: 'Metadata title',
31837
- type: 'text',
31838
- },
31839
- {
31840
- model: 'abstract',
31841
- labelKey: 'Abstract',
31842
- type: 'rich',
31843
- },
31844
- {
31845
- model: 'uniqueIdentifier',
31846
- labelKey: 'Unique identifier',
31847
- type: 'text',
31848
- locked: true,
31849
- },
31850
- ];
31851
- this.apiUrl = `${this.apiConfiguration?.basePath || '/geonetwork/srv/api'}`;
31852
- this.fields$ = this.record$.pipe(map$1((record) => this.fieldsConfig.map((fieldConfig) => ({
31853
- config: fieldConfig,
31854
- value: record?.[fieldConfig.model] || null,
31855
- }))));
31856
- this.saving$ = new BehaviorSubject(false);
31857
- }
31858
- loadRecordByUuid(uuid) {
31859
- return this.http
31860
- .get(`${this.apiUrl}/records/${uuid}/formatters/xml`, {
31861
- responseType: 'text',
31862
- headers: {
31863
- Accept: 'application/xml',
31864
- },
31865
- })
31866
- .pipe(map$1((response) => toModel(response.toString())));
31867
- }
31868
- saveCurrentRecord() {
31869
- return this.record$.pipe(take(1), tap$1((record) => {
31870
- if (!record)
31871
- throw new Error('Save record failed: no record currently open');
31872
- this.saving$.next(true);
31873
- }), switchMap$1((record) => this.http.put(`${this.apiUrl}/records?metadataType=METADATA&uuidProcessing=OVERWRITE&transformWith=_none_&publishToAll=on`, toXml(record), {
31874
- headers: {
31875
- 'Content-Type': 'application/xml',
31876
- },
31877
- withCredentials: true,
31878
- })), map$1(() => undefined), finalize(() => {
31879
- this.saving$.next(false);
31880
- }));
31881
- }
31882
- setCurrentRecord(record) {
31883
- this.record$.next(record);
31884
- }
31885
- updateRecordField(fieldName, value) {
31886
- this.record$
31887
- .pipe(take(1), map$1((record) => ({ ...record, [fieldName]: value })))
31888
- .subscribe((record) => this.record$.next(record));
31889
- }
31890
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, deps: [{ token: i1.HttpClient }, { token: Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
31891
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, providedIn: 'root' }); }
31892
- }
31893
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, decorators: [{
31894
- type: Injectable,
31895
- args: [{
31896
- providedIn: 'root',
31897
- }]
31898
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: Configuration, decorators: [{
31899
- type: Optional
31900
- }, {
31901
- type: Inject,
31902
- args: [Configuration]
31903
- }] }]; } });
31904
-
31905
32265
  class RecordFormComponent {
31906
- constructor(editorService) {
31907
- this.editorService = editorService;
32266
+ constructor(facade) {
32267
+ this.facade = facade;
32268
+ this.fields$ = this.facade.recordFields$;
31908
32269
  }
31909
- handleFieldValueChange(fieldName, value) {
31910
- this.editorService.updateRecordField(fieldName, value);
32270
+ handleFieldValueChange(field, newValue) {
32271
+ if (!field.config.model) {
32272
+ return;
32273
+ }
32274
+ this.facade.updateRecordField(field.config.model, newValue);
31911
32275
  }
31912
32276
  fieldTracker(index, field) {
31913
32277
  return field.config.model;
31914
32278
  }
31915
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
31916
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32279
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
32280
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { 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: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
31917
32281
  }
31918
32282
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
31919
32283
  type: Component,
31920
- args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, UiInputsModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
31921
- }], ctorParameters: function () { return [{ type: EditorService }]; } });
32284
+ args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, UiInputsModule], template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n" }]
32285
+ }], ctorParameters: function () { return [{ type: EditorFacade }]; } });
31922
32286
 
31923
32287
  const ROUTER_STATE_KEY = 'router';
31924
32288
  const ROUTER_ROUTE_SEARCH = 'search';
@@ -32285,5 +32649,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
32285
32649
  * Generated bundle index. Do not edit.
32286
32650
  */
32287
32651
 
32288
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
32652
+ 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, EDITOR_FEATURE_KEY, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorFacade, 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_NAMES, 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_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, editorReducer, 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, getTemporalRangeUnion, getThemeConfig, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, openRecord, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$2 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, saveRecord, saveRecordFailure, saveRecordSuccess, selectEditorState, selectFallback, selectFallbackFields, selectField, selectRecord, selectRecordChangedSinceSave, selectRecordFields, selectRecordFieldsConfig, selectRecordSaveError, selectRecordSaving, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer, updateRecordField };
32289
32653
  //# sourceMappingURL=geonetwork-ui.mjs.map