geonetwork-ui 2.8.0-dev.93d2d87c0 → 2.8.0-dev.94b119e28

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 (206) hide show
  1. package/esm2022/index.mjs +2 -1
  2. package/esm2022/libs/api/metadata-converter/src/lib/common/distribution.mapper.mjs +5 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.mjs +3 -3
  4. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +26 -1
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.mjs +7 -7
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +3 -2
  7. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +4 -3
  8. package/esm2022/libs/api/repository/src/lib/gn4/auth/auth.service.mjs +2 -2
  9. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/constant.mjs +1 -2
  10. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.mjs +7 -3
  11. package/esm2022/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.mjs +10 -10
  12. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +3 -2
  13. package/esm2022/libs/common/domain/src/index.mjs +3 -0
  14. package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
  15. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +3 -1
  16. package/esm2022/libs/common/domain/src/lib/model/search/sort-by.model.mjs +6 -1
  17. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  18. package/esm2022/libs/data-access/gn4/src/openapi/model/user.api.model.mjs +1 -1
  19. package/esm2022/libs/feature/dataviz/src/index.mjs +2 -1
  20. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +3 -1
  21. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +18 -7
  22. package/esm2022/libs/feature/dataviz/src/lib/stac-view/stac-view.component.mjs +51 -0
  23. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +23 -3
  24. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  25. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -4
  26. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +23 -8
  27. package/esm2022/libs/feature/record/src/lib/map-view/map-view.component.mjs +2 -1
  28. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +14 -1
  29. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +5 -1
  30. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +9 -7
  31. package/esm2022/libs/feature/search/src/lib/constants.mjs +1 -2
  32. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +8 -12
  33. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  34. package/esm2022/libs/ui/elements/src/lib/external-link-card/external-link-card.component.mjs +11 -4
  35. package/esm2022/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.mjs +37 -0
  36. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +5 -9
  37. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +5 -5
  38. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +2 -3
  39. package/esm2022/libs/util/i18n/src/lib/date-locales.mjs +33 -0
  40. package/esm2022/libs/util/shared/src/index.mjs +2 -1
  41. package/esm2022/libs/util/shared/src/lib/humanize-date.directive.mjs +33 -0
  42. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +5 -1
  43. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +12 -1
  44. package/esm2022/libs/util/shared/src/lib/services/date.service.mjs +19 -2
  45. package/esm2022/libs/util/shared/src/lib/services/proxy.service.mjs +9 -11
  46. package/esm2022/libs/util/shared/src/lib/utils/sort-by.mjs +9 -6
  47. package/esm2022/translations/de.json +16 -3
  48. package/esm2022/translations/en.json +16 -4
  49. package/esm2022/translations/es.json +15 -2
  50. package/esm2022/translations/fr.json +16 -3
  51. package/esm2022/translations/it.json +17 -4
  52. package/esm2022/translations/nl.json +15 -2
  53. package/esm2022/translations/pt.json +15 -2
  54. package/esm2022/translations/sk.json +16 -3
  55. package/fesm2022/geonetwork-ui-date-locales-MYnkDJ5h.mjs +35 -0
  56. package/fesm2022/geonetwork-ui-date-locales-MYnkDJ5h.mjs.map +1 -0
  57. package/fesm2022/geonetwork-ui.mjs +457 -166
  58. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  59. package/index.d.ts +1 -0
  60. package/index.d.ts.map +1 -1
  61. package/index.ts +1 -0
  62. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  63. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  64. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  65. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -1
  66. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  67. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  68. package/libs/api/repository/src/lib/gn4/auth/auth.service.d.ts.map +1 -1
  69. package/libs/api/repository/src/lib/gn4/elasticsearch/constant.d.ts.map +1 -1
  70. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.d.ts.map +1 -1
  71. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +7 -7
  72. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  73. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  74. package/libs/common/domain/src/index.d.ts +3 -0
  75. package/libs/common/domain/src/index.d.ts.map +1 -0
  76. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +1 -1
  77. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
  78. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +7 -2
  79. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  80. package/libs/common/domain/src/lib/model/search/sort-by.model.d.ts.map +1 -1
  81. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
  82. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  83. package/libs/data-access/gn4/src/openapi/model/user.api.model.d.ts +1 -1
  84. package/libs/feature/dataviz/src/index.d.ts +1 -0
  85. package/libs/feature/dataviz/src/index.d.ts.map +1 -1
  86. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  87. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  88. package/libs/feature/dataviz/src/lib/stac-view/stac-view.component.d.ts +16 -0
  89. package/libs/feature/dataviz/src/lib/stac-view/stac-view.component.d.ts.map +1 -0
  90. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +2 -0
  91. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  92. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +3 -2
  93. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  94. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +3 -2
  95. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  96. package/libs/feature/record/src/lib/map-view/map-view.component.d.ts.map +1 -1
  97. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -24
  98. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  99. package/libs/feature/router/src/lib/default/router.service.d.ts +2 -0
  100. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  101. package/libs/feature/router/src/lib/default/state/router.effects.d.ts +3 -1
  102. package/libs/feature/router/src/lib/default/state/router.effects.d.ts.map +1 -1
  103. package/libs/feature/search/src/lib/constants.d.ts.map +1 -1
  104. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts +4 -3
  105. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts.map +1 -1
  106. package/libs/ui/elements/src/index.d.ts +1 -0
  107. package/libs/ui/elements/src/index.d.ts.map +1 -1
  108. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  109. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts +3 -2
  110. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts.map +1 -1
  111. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts +8 -0
  112. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts.map +1 -0
  113. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +0 -2
  114. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  115. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
  116. package/libs/util/i18n/src/lib/date-locales.d.ts +5 -0
  117. package/libs/util/i18n/src/lib/date-locales.d.ts.map +1 -0
  118. package/libs/util/shared/src/index.d.ts +1 -0
  119. package/libs/util/shared/src/index.d.ts.map +1 -1
  120. package/libs/util/shared/src/lib/humanize-date.directive.d.ts +15 -0
  121. package/libs/util/shared/src/lib/humanize-date.directive.d.ts.map +1 -0
  122. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  123. package/libs/util/shared/src/lib/links/link-utils.d.ts +6 -0
  124. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  125. package/libs/util/shared/src/lib/services/date.service.d.ts +4 -0
  126. package/libs/util/shared/src/lib/services/date.service.d.ts.map +1 -1
  127. package/libs/util/shared/src/lib/services/proxy.service.d.ts +5 -4
  128. package/libs/util/shared/src/lib/services/proxy.service.d.ts.map +1 -1
  129. package/libs/util/shared/src/lib/utils/sort-by.d.ts.map +1 -1
  130. package/package.json +1 -1
  131. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +2 -0
  132. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +2 -2
  133. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +1 -1
  134. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.service+eaux-usees.ts +1 -1
  135. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -2
  136. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
  137. package/src/libs/api/metadata-converter/src/lib/fixtures/georhena.records.ts +1 -1
  138. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +2 -2
  139. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.reuse.ts +1 -1
  140. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.service+napitswallonia.ts +1 -1
  141. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +28 -0
  142. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +13 -6
  143. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +6 -2
  144. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -2
  145. package/src/libs/api/repository/src/lib/gn4/auth/auth.service.ts +4 -1
  146. package/src/libs/api/repository/src/lib/gn4/elasticsearch/constant.ts +0 -1
  147. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.mapper.ts +12 -4
  148. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +37 -36
  149. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -2
  150. package/src/libs/common/domain/src/index.ts +2 -0
  151. package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +1 -1
  152. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +12 -1
  153. package/src/libs/common/domain/src/lib/model/search/sort-by.model.ts +5 -0
  154. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -1
  155. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +5 -0
  156. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +19 -0
  157. package/src/libs/data-access/gn4/src/openapi/model/user.api.model.ts +1 -1
  158. package/src/libs/feature/dataviz/src/index.ts +1 -0
  159. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +1 -0
  160. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +16 -5
  161. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.css +0 -0
  162. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.html +40 -0
  163. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.ts +62 -0
  164. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +3 -3
  165. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +30 -0
  166. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  167. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +7 -1
  168. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +23 -4
  169. package/src/libs/feature/record/src/lib/map-view/map-view.component.ts +1 -0
  170. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +30 -1
  171. package/src/libs/feature/router/src/lib/default/router.service.ts +8 -0
  172. package/src/libs/feature/router/src/lib/default/state/router.effects.ts +6 -7
  173. package/src/libs/feature/search/src/lib/constants.ts +0 -1
  174. package/src/libs/feature/search/src/lib/sort-by/sort-by.component.ts +8 -12
  175. package/src/libs/ui/elements/src/index.ts +1 -0
  176. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.html +43 -22
  177. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.ts +12 -3
  178. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.css +0 -0
  179. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.html +31 -0
  180. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.ts +30 -0
  181. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +69 -23
  182. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +2 -9
  183. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +1 -1
  184. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +2 -2
  185. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +4 -2
  186. package/src/libs/util/i18n/src/lib/date-locales.ts +63 -0
  187. package/src/libs/util/shared/src/index.ts +1 -0
  188. package/src/libs/util/shared/src/lib/humanize-date.directive.ts +35 -0
  189. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +4 -0
  190. package/src/libs/util/shared/src/lib/links/link-utils.ts +11 -0
  191. package/src/libs/util/shared/src/lib/services/date.service.ts +27 -1
  192. package/src/libs/util/shared/src/lib/services/proxy.service.ts +6 -2
  193. package/src/libs/util/shared/src/lib/utils/sort-by.ts +8 -5
  194. package/translations/de.json +16 -3
  195. package/translations/en.json +16 -4
  196. package/translations/es.json +15 -2
  197. package/translations/fr.json +16 -3
  198. package/translations/it.json +17 -4
  199. package/translations/nl.json +15 -2
  200. package/translations/pt.json +15 -2
  201. package/translations/sk.json +16 -3
  202. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.mjs +0 -59
  203. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts +0 -11
  204. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts.map +0 -1
  205. package/src/libs/common/domain/src/lib/index.ts +0 -2
  206. package/src/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.ts +0 -54
@@ -7,7 +7,7 @@ import { marker } from '@biesbjerg/ngx-translate-extract-marker';
7
7
  import { format } from 'date-fns/format';
8
8
  import { Namespace, Literal, lit, parse as parse$2, sym, BlankNode, graph } from 'rdflib';
9
9
  import * as i0 from '@angular/core';
10
- import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, APP_INITIALIZER, makeEnvironmentProviders, Directive, Input, HostListener, EventEmitter, Component, ChangeDetectionStrategy, Output, ViewChild, ViewEncapsulation, HostBinding, TemplateRef, ElementRef, ViewChildren, ContentChild, ContentChildren, Host, Pipe, ViewContainerRef, inject } from '@angular/core';
10
+ import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, APP_INITIALIZER, makeEnvironmentProviders, Directive, Input, HostListener, EventEmitter, Component, ChangeDetectionStrategy, Output, ViewChild, ViewEncapsulation, HostBinding, TemplateRef, ElementRef, ViewChildren, ContentChild, ContentChildren, Host, ViewContainerRef, inject } from '@angular/core';
11
11
  import * as i1 from '@angular/common/http';
12
12
  import { HttpHeaders, HttpParams, HttpClient, provideHttpClient, withInterceptorsFromDi, HTTP_INTERCEPTORS, HttpEventType } from '@angular/common/http';
13
13
  import * as i1$1 from '@ngx-translate/core';
@@ -15,11 +15,12 @@ import { TranslateCompiler, TranslateLoader, TranslateDefaultParser, TranslatePa
15
15
  import { TranslateMessageFormatCompiler } from 'ngx-translate-messageformat-compiler';
16
16
  import { TranslateHttpLoader } from '@ngx-translate/http-loader';
17
17
  import { map as map$1, shareReplay as shareReplay$1, catchError, tap as tap$1, filter as filter$1, startWith as startWith$1, withLatestFrom, switchMap as switchMap$1, take, mergeMap, delay, distinctUntilChanged, debounceTime, finalize, throttleTime, first as first$1, pairwise as pairwise$1, share, defaultIfEmpty, toArray } from 'rxjs/operators';
18
- import { of, map as map$2, lastValueFrom, fromEvent, startWith, shareReplay, filter, pairwise, Subject, switchMap, combineLatest, from, exhaustMap, throwError, forkJoin, takeLast, firstValueFrom, merge, BehaviorSubject, timer, ReplaySubject, Subscription, first, distinctUntilChanged as distinctUntilChanged$1, animationFrameScheduler, debounceTime as debounceTime$1, Observable, buffer, tap as tap$2, combineLatestWith, take as take$1, catchError as catchError$1, takeUntil, EMPTY, mergeMap as mergeMap$1, withLatestFrom as withLatestFrom$1 } from 'rxjs';
18
+ import { of, map as map$2, lastValueFrom, fromEvent, startWith, shareReplay, filter, pairwise, switchMap, Subject, combineLatest, from, exhaustMap, throwError, forkJoin, takeLast, firstValueFrom, merge, BehaviorSubject, timer, ReplaySubject, Subscription, first, distinctUntilChanged as distinctUntilChanged$1, animationFrameScheduler, debounceTime as debounceTime$1, Observable, buffer, tap as tap$2, combineLatestWith, take as take$1, catchError as catchError$1, takeUntil, EMPTY, mergeMap as mergeMap$1, withLatestFrom as withLatestFrom$1 } from 'rxjs';
19
19
  import { lt, valid, coerce, satisfies, ltr } from 'semver';
20
20
  import chroma from 'chroma-js';
21
21
  import * as i1$2 from '@angular/common';
22
22
  import { CommonModule, NgIf, NgSwitch, NgSwitchCase, NgSwitchDefault, NgClass, NgTemplateOutlet, DatePipe } from '@angular/common';
23
+ import { formatDistance } from 'date-fns/formatDistance';
23
24
  import * as i1$d from '@angular/router';
24
25
  import { Scroll, NavigationEnd, RouteReuseStrategy } from '@angular/router';
25
26
  import { WmtsEndpoint, WmsEndpoint, WfsEndpoint, OgcApiEndpoint, sharedFetch, useCache, TmsEndpoint } from '@camptocamp/ogc-client';
@@ -31,7 +32,7 @@ import { queryDataGouvFr, queryGeonames, queryGeoadmin } from '@geospatial-sdk/g
31
32
  import { FeaturesClickEventType, FeaturesHoverEventType, MapClickEventType, SourceLoadErrorType, computeMapContextDiff, createViewFromLayer } from '@geospatial-sdk/core';
32
33
  import { listen, createMapFromContext, applyContextDiffToMap } from '@geospatial-sdk/openlayers';
33
34
  import { provideIcons, provideNgIconsConfig, NgIconComponent, NgIcon } from '@ng-icons/core';
34
- import { matSwipeOutline, matErrorOutlineOutline, matComputerOutline, matLocationSearchingOutline, matCallOutline, matLocationOnOutline, matMailOutline as matMailOutline$1, matInfoOutline, matWarningAmberOutline, matCloseOutline, matSendOutline, matMapOutline, matCloudDownloadOutline, matHomeWorkOutline, matLayersOutline, matAddCircleOutlineOutline, matMoreHorizOutline } from '@ng-icons/material-icons/outline';
35
+ import { matSwipeOutline, matErrorOutlineOutline, matComputerOutline, matLocationSearchingOutline, matCallOutline, matLocationOnOutline, matMailOutline as matMailOutline$1, matInfoOutline, matWarningAmberOutline, matCloseOutline, matSendOutline, matMapOutline, matCloudDownloadOutline, matHomeWorkOutline, matLayersOutline, matAddCircleOutlineOutline, matDeleteOutline, matMoreHorizOutline } from '@ng-icons/material-icons/outline';
35
36
  import { createLegendFromLayer } from '@geospatial-sdk/legend';
36
37
  import { defaults, DragPan, MouseWheelZoom } from 'ol/interaction';
37
38
  import { mouseOnly, noModifierKeys, primaryAction, platformModifierKeyOnly } from 'ol/events/condition';
@@ -74,8 +75,6 @@ import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
74
75
  import { valid as valid$1 } from 'geojson-validation';
75
76
  import * as basicLightbox from 'basiclightbox';
76
77
  import { marked } from 'marked';
77
- import { formatDistance } from 'date-fns/formatDistance';
78
- import { enUS, sk as sk$1, pt as pt$1, nl as nl$1, it as it$1, es as es$1, de as de$1, fr as fr$1 } from 'date-fns/locale';
79
78
  import * as i2$3 from '@angular/cdk/scrolling';
80
79
  import { CdkScrollable, ScrollingModule } from '@angular/cdk/scrolling';
81
80
  import Duration from 'duration-relativetimeformat';
@@ -666,6 +665,10 @@ function matchProtocol(protocol) {
666
665
  return 'esriRest';
667
666
  if (/DOWNLOAD-1/i.test(protocol))
668
667
  return 'GPFDL';
668
+ if (/DB:POSTGIS/i.test(protocol))
669
+ return 'postgis';
670
+ if (/stac\W*items/i.test(protocol))
671
+ return 'stac';
669
672
  return 'other';
670
673
  }
671
674
  function matchMimeType(format) {
@@ -914,6 +917,8 @@ marker('record.metadata.api.accessServiceProtocol.ogcFeatures');
914
917
  marker('record.metadata.api.accessServiceProtocol.GPFDL');
915
918
  marker('record.metadata.api.accessServiceProtocol.tms');
916
919
  marker('record.metadata.api.accessServiceProtocol.maplibre-style');
920
+ marker('record.metadata.api.accessServiceProtocol.postgis');
921
+ marker('record.metadata.api.accessServiceProtocol.stac');
917
922
  marker('record.metadata.api.accessServiceProtocol.other');
918
923
 
919
924
  function getUpdateFrequencyFromFrequencyCode(frequencyCode) {
@@ -1574,7 +1579,8 @@ function readDefaultLanguage$2(rootEl) {
1574
1579
  return pipe(findChildElement('gmd:language', false), findChildElement('lan:LanguageCode'), readAttribute('codeListValue'), map((lang) => (lang ? toLang2(lang.toLowerCase()) : null)))(rootEl);
1575
1580
  }
1576
1581
  function readResourceIdentifier(rootEl) {
1577
- return pipe(findIdentification(), findNestedElement('gmd:citation', 'gmd:CI_Citation', 'gmd:identifier', 'gmd:MD_Identifier', 'gmd:code'), extractCharacterString())(rootEl);
1582
+ const code = pipe(findIdentification(), findNestedElement('gmd:citation', 'gmd:CI_Citation', 'gmd:identifier', 'gmd:MD_Identifier', 'gmd:code'), extractCharacterString())(rootEl);
1583
+ return code ? [{ code }] : [];
1578
1584
  }
1579
1585
 
1580
1586
  function writeLocalizedElement(writeFn, text, translations, defaultLanguage) {
@@ -2080,8 +2086,9 @@ function writeDefaultLanguage$1(record, rootEl) {
2080
2086
  return pipe(findNestedChildOrCreate('gmd:language', 'gmd:LanguageCode'), writeAttribute('codeList', 'http://www.loc.gov/standards/iso639-2/'), writeAttribute('codeListValue', lang3))(rootEl);
2081
2087
  }
2082
2088
  function writeResourceIdentifier(record, rootEl) {
2083
- pipe(findOrCreateIdentification(), findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'), removeChildrenByName('gmd:identifier'), record.resourceIdentifier
2084
- ? pipe(createNestedChild('gmd:identifier', 'gmd:MD_Identifier', 'gmd:code'), writeCharacterString(record.resourceIdentifier))
2089
+ const firstIdentifier = record.resourceIdentifiers?.[0]?.code;
2090
+ pipe(findOrCreateIdentification(), findNestedChildOrCreate('gmd:citation', 'gmd:CI_Citation'), removeChildrenByName('gmd:identifier'), firstIdentifier
2091
+ ? pipe(createNestedChild('gmd:identifier', 'gmd:MD_Identifier', 'gmd:code'), writeCharacterString(firstIdentifier))
2085
2092
  : noop)(rootEl);
2086
2093
  }
2087
2094
 
@@ -2095,7 +2102,7 @@ class Iso19139Converter extends BaseConverter {
2095
2102
  recordUpdated: readRecordUpdated$2,
2096
2103
  recordCreated: () => undefined, // not supported in ISO19139
2097
2104
  recordPublished: () => undefined, // not supported in ISO19139
2098
- resourceIdentifier: readResourceIdentifier,
2105
+ resourceIdentifiers: readResourceIdentifier,
2099
2106
  resourceUpdated: readResourceUpdated$1,
2100
2107
  resourceCreated: readResourceCreated$1,
2101
2108
  resourcePublished: readResourcePublished,
@@ -2132,7 +2139,7 @@ class Iso19139Converter extends BaseConverter {
2132
2139
  recordUpdated: writeRecordUpdated$1,
2133
2140
  recordCreated: () => undefined, // not supported in ISO19139
2134
2141
  recordPublished: () => undefined, // not supported in ISO19139
2135
- resourceIdentifier: writeResourceIdentifier,
2142
+ resourceIdentifiers: writeResourceIdentifier,
2136
2143
  resourceUpdated: writeResourceUpdated$1,
2137
2144
  resourceCreated: writeResourceCreated$1,
2138
2145
  resourcePublished: writeResourcePublished$1,
@@ -2233,11 +2240,11 @@ class Iso19139Converter extends BaseConverter {
2233
2240
  const onlineResources = this.readers['onlineResources'](rootEl, tr);
2234
2241
  const otherLanguages = this.readers['otherLanguages'](rootEl, tr);
2235
2242
  const defaultLanguage = this.readers['defaultLanguage'](rootEl, tr);
2236
- const resourceIdentifier = this.readers['resourceIdentifier'](rootEl, tr);
2243
+ const resourceIdentifiers = this.readers['resourceIdentifiers'](rootEl, tr);
2237
2244
  const spatialExtents = this.readers['spatialExtents'](rootEl, tr);
2238
2245
  return {
2239
2246
  uniqueIdentifier,
2240
- ...(resourceIdentifier && { resourceIdentifier }),
2247
+ ...(resourceIdentifiers?.length > 0 && { resourceIdentifiers }),
2241
2248
  kind,
2242
2249
  otherLanguages,
2243
2250
  defaultLanguage,
@@ -2365,8 +2372,8 @@ class Iso19139Converter extends BaseConverter {
2365
2372
  this.writers['otherConstraints'](record, rootEl);
2366
2373
  fieldChanged('onlineResources') &&
2367
2374
  this.writers['onlineResources'](record, rootEl);
2368
- fieldChanged('resourceIdentifier') &&
2369
- this.writers['resourceIdentifier'](record, rootEl);
2375
+ fieldChanged('resourceIdentifiers') &&
2376
+ this.writers['resourceIdentifiers'](record, rootEl);
2370
2377
  if (record.kind === 'dataset') {
2371
2378
  fieldChanged('status') && this.writers['status'](record, rootEl);
2372
2379
  fieldChanged('updateFrequency') &&
@@ -3313,7 +3320,7 @@ class DcatApConverter extends BaseConverter {
3313
3320
  spatialExtents: readSpatialExtents,
3314
3321
  keywords: readKeywords,
3315
3322
  topics: readTopics,
3316
- resourceIdentifier: () => undefined,
3323
+ resourceIdentifiers: () => undefined,
3317
3324
  recordUpdated: readRecordUpdated,
3318
3325
  recordCreated: readRecordCreated,
3319
3326
  resourceUpdated: readResourceUpdated,
@@ -3349,7 +3356,7 @@ class DcatApConverter extends BaseConverter {
3349
3356
  recordUpdated: () => undefined,
3350
3357
  recordCreated: () => undefined,
3351
3358
  recordPublished: () => undefined,
3352
- resourceIdentifier: () => undefined,
3359
+ resourceIdentifiers: () => undefined,
3353
3360
  resourceUpdated: () => undefined,
3354
3361
  resourceCreated: () => undefined,
3355
3362
  resourcePublished: () => undefined,
@@ -19159,6 +19166,8 @@ var de = {
19159
19166
  "record.metadata.api.accessServiceProtocol.maplibre-style": "",
19160
19167
  "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
19161
19168
  "record.metadata.api.accessServiceProtocol.other": "",
19169
+ "record.metadata.api.accessServiceProtocol.postgis": "",
19170
+ "record.metadata.api.accessServiceProtocol.stac": "",
19162
19171
  "record.metadata.api.accessServiceProtocol.tms": "",
19163
19172
  "record.metadata.api.accessServiceProtocol.wfs": "",
19164
19173
  "record.metadata.api.accessServiceProtocol.wms": "",
@@ -19200,13 +19209,16 @@ var de = {
19200
19209
  "record.metadata.contact": "Kontakt",
19201
19210
  "record.metadata.creation": "Erstellungsdatum",
19202
19211
  "record.metadata.details": "Über die Daten",
19212
+ "record.metadata.doi.copy": "",
19213
+ "record.metadata.doi.open": "",
19203
19214
  "record.metadata.download": "Downloads",
19204
19215
  "record.metadata.feature.catalog": "",
19205
19216
  "record.metadata.formats": "Formate",
19206
19217
  "record.metadata.isGeographical": "Geographischer Datensatz",
19207
19218
  "record.metadata.keywords": "Stichworte",
19208
19219
  "record.metadata.languages": "Sprachen",
19209
- "record.metadata.lastUpdate": "Zuletzt aktualisiert am {date}",
19220
+ "record.metadata.link.postgis.table": "",
19221
+ "record.metadata.link.postgis.tooltip": "",
19210
19222
  "record.metadata.linked.datasets": "Verknüpfte Datensätze",
19211
19223
  "record.metadata.linked.records": "Verknüpfte Inhalte",
19212
19224
  "record.metadata.linked.reuses": "Verknüpfte Wiederverwendungen",
@@ -19247,6 +19259,9 @@ var de = {
19247
19259
  "record.metadata.quality.updateFrequency.failed": "Aktualisierungsfrequenz nicht angegeben",
19248
19260
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
19249
19261
  "record.metadata.related": "Entdecken Sie den Katalog",
19262
+ "record.metadata.resourceCreated": "Erstellt",
19263
+ "record.metadata.resourcePublished": "Veröffentlicht",
19264
+ "record.metadata.resourceUpdated": "Zuletzt aktualisiert",
19250
19265
  "record.metadata.ressources.and.links": "Ressourcen und Links",
19251
19266
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
19252
19267
  "record.metadata.status": "Status",
@@ -19259,8 +19274,9 @@ var de = {
19259
19274
  "record.metadata.title": "Titel",
19260
19275
  "record.metadata.topics": "Kategorien",
19261
19276
  "record.metadata.uniqueId": "Eindeutige Kennung",
19277
+ "record.metadata.update": "Aktualisierungsdatum",
19262
19278
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
19263
- "record.metadata.updatedOn": "Geändert am",
19279
+ "record.metadata.updatedOn": "Informationen geändert",
19264
19280
  "record.metadata.usage": "Nutzung und Einschränkungen",
19265
19281
  "record.metadata.userFeedbacks": "",
19266
19282
  "record.metadata.userFeedbacks.anonymousUser": "",
@@ -19275,6 +19291,7 @@ var de = {
19275
19291
  "record.tab.chart": "Diagramm",
19276
19292
  "record.tab.data": "Tabelle",
19277
19293
  "record.tab.map": "Karte",
19294
+ "record.tab.stac": "",
19278
19295
  "record.was.created.time": "erstellte diesen Ressource {time}",
19279
19296
  records: records$7,
19280
19297
  "results.layout.selectOne": "Layout auswählen",
@@ -19283,7 +19300,6 @@ var de = {
19283
19300
  "results.records.hits.found": "{hits, plural, =0{Keine Ressource entsprechen der angegebenen Suche.} one{1 Ressource gefunden.} other{{hits} Ressourcen gefunden.}}",
19284
19301
  "results.records.hits.selected": "{ amount } ausgewählt",
19285
19302
  "results.showMore": "Mehr Ergebnisse anzeigen...",
19286
- "results.sortBy.changeDate": "",
19287
19303
  "results.sortBy.dateStamp": "Neueste",
19288
19304
  "results.sortBy.popularity": "Beliebtheit",
19289
19305
  "results.sortBy.qualityScore": "Fertigstellungsanzeige",
@@ -19367,6 +19383,10 @@ var de = {
19367
19383
  "service.metadata.spatialExtent": "",
19368
19384
  "share.tab.permalink": "Teilen",
19369
19385
  "share.tab.webComponent": "Integrieren",
19386
+ "stac.filter.from": "",
19387
+ "stac.filter.period": "",
19388
+ "stac.filter.reset": "",
19389
+ "stac.filter.to": "",
19370
19390
  "table.loading.data": "Daten werden geladen...",
19371
19391
  "table.object.count": "Objekte in diesem Datensatz",
19372
19392
  "table.paginator.firstPage": "Erste Seite",
@@ -19634,7 +19654,6 @@ var en = {
19634
19654
  "editor.record.form.topics.inspire.intelligence": "Intelligence / Military",
19635
19655
  "editor.record.form.topics.inspire.location": "Location",
19636
19656
  "editor.record.form.topics.inspire.oceans": "Oceans",
19637
- "editor.record.form.topics.inspire.placeholder": "Select an INSPIRE theme",
19638
19657
  "editor.record.form.topics.inspire.planning": "Planning / Cadastre",
19639
19658
  "editor.record.form.topics.inspire.society": "Society",
19640
19659
  "editor.record.form.topics.inspire.structure": "Structure",
@@ -19812,6 +19831,8 @@ var en = {
19812
19831
  "record.metadata.api.accessServiceProtocol.maplibre-style": "maplibre-style",
19813
19832
  "record.metadata.api.accessServiceProtocol.ogcFeatures": "ogcFeatures",
19814
19833
  "record.metadata.api.accessServiceProtocol.other": "other",
19834
+ "record.metadata.api.accessServiceProtocol.postgis": "PostGIS",
19835
+ "record.metadata.api.accessServiceProtocol.stac": "STAC",
19815
19836
  "record.metadata.api.accessServiceProtocol.tms": "tms",
19816
19837
  "record.metadata.api.accessServiceProtocol.wfs": "wfs",
19817
19838
  "record.metadata.api.accessServiceProtocol.wms": "wms",
@@ -19853,13 +19874,16 @@ var en = {
19853
19874
  "record.metadata.contact": "Contact",
19854
19875
  "record.metadata.creation": "Date of creation",
19855
19876
  "record.metadata.details": "About the data",
19877
+ "record.metadata.doi.copy": "Copy DOI",
19878
+ "record.metadata.doi.open": "Open DOI link",
19856
19879
  "record.metadata.download": "Downloads",
19857
19880
  "record.metadata.feature.catalog": "Feature catalog",
19858
19881
  "record.metadata.formats": "Formats",
19859
19882
  "record.metadata.isGeographical": "Geographical dataset",
19860
19883
  "record.metadata.keywords": "Keywords",
19861
19884
  "record.metadata.languages": "Languages",
19862
- "record.metadata.lastUpdate": "Last updated on {date}",
19885
+ "record.metadata.link.postgis.table": "table :",
19886
+ "record.metadata.link.postgis.tooltip": "PostGIS resources do not have access links",
19863
19887
  "record.metadata.linked.datasets": "Associated datasets",
19864
19888
  "record.metadata.linked.records": "Associated content",
19865
19889
  "record.metadata.linked.reuses": "Associated reuses",
@@ -19900,6 +19924,9 @@ var en = {
19900
19924
  "record.metadata.quality.updateFrequency.failed": "Update frequency is not specified",
19901
19925
  "record.metadata.quality.updateFrequency.success": "Update frequency is specified",
19902
19926
  "record.metadata.related": "Explore the catalog",
19927
+ "record.metadata.resourceCreated": "Created",
19928
+ "record.metadata.resourcePublished": "Published",
19929
+ "record.metadata.resourceUpdated": "Last updated",
19903
19930
  "record.metadata.ressources.and.links": "Resources and links",
19904
19931
  "record.metadata.sheet": "Original metadata",
19905
19932
  "record.metadata.status": "Status",
@@ -19912,8 +19939,9 @@ var en = {
19912
19939
  "record.metadata.title": "Title",
19913
19940
  "record.metadata.topics": "Categories",
19914
19941
  "record.metadata.uniqueId": "Unique Identifier",
19942
+ "record.metadata.update": "Date of update",
19915
19943
  "record.metadata.updateFrequency": "Data Update Frequency",
19916
- "record.metadata.updatedOn": "Updated on",
19944
+ "record.metadata.updatedOn": "Metadata modified",
19917
19945
  "record.metadata.usage": "License and Conditions",
19918
19946
  "record.metadata.userFeedbacks": "Questions / Answers",
19919
19947
  "record.metadata.userFeedbacks.anonymousUser": "In order to leave a comment, please log in.",
@@ -19928,6 +19956,7 @@ var en = {
19928
19956
  "record.tab.chart": "Chart",
19929
19957
  "record.tab.data": "Table",
19930
19958
  "record.tab.map": "Map",
19959
+ "record.tab.stac": "STAC",
19931
19960
  "record.was.created.time": "created this record {time}",
19932
19961
  records: records$6,
19933
19962
  "results.layout.selectOne": "Results layout",
@@ -19936,7 +19965,6 @@ var en = {
19936
19965
  "results.records.hits.found": "{hits, plural, =0{No record match the specified search.} one{1 record found.} other{{hits} records found.}}",
19937
19966
  "results.records.hits.selected": "{ amount } selected",
19938
19967
  "results.showMore": "Show more results...",
19939
- "results.sortBy.changeDate": "Last modification",
19940
19968
  "results.sortBy.dateStamp": "Newest",
19941
19969
  "results.sortBy.popularity": "Popularity",
19942
19970
  "results.sortBy.qualityScore": "Completion score",
@@ -20020,6 +20048,10 @@ var en = {
20020
20048
  "service.metadata.spatialExtent": "Spatial extent",
20021
20049
  "share.tab.permalink": "Share",
20022
20050
  "share.tab.webComponent": "Integrate",
20051
+ "stac.filter.from": "From",
20052
+ "stac.filter.period": "Period",
20053
+ "stac.filter.reset": "Reset filters",
20054
+ "stac.filter.to": "To",
20023
20055
  "table.loading.data": "Loading data...",
20024
20056
  "table.object.count": "Objects in this dataset",
20025
20057
  "table.paginator.firstPage": "First page",
@@ -20464,6 +20496,8 @@ var es = {
20464
20496
  "record.metadata.api.accessServiceProtocol.maplibre-style": "",
20465
20497
  "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
20466
20498
  "record.metadata.api.accessServiceProtocol.other": "",
20499
+ "record.metadata.api.accessServiceProtocol.postgis": "",
20500
+ "record.metadata.api.accessServiceProtocol.stac": "",
20467
20501
  "record.metadata.api.accessServiceProtocol.tms": "",
20468
20502
  "record.metadata.api.accessServiceProtocol.wfs": "",
20469
20503
  "record.metadata.api.accessServiceProtocol.wms": "",
@@ -20505,13 +20539,16 @@ var es = {
20505
20539
  "record.metadata.contact": "",
20506
20540
  "record.metadata.creation": "",
20507
20541
  "record.metadata.details": "",
20542
+ "record.metadata.doi.copy": "",
20543
+ "record.metadata.doi.open": "",
20508
20544
  "record.metadata.download": "",
20509
20545
  "record.metadata.feature.catalog": "",
20510
20546
  "record.metadata.formats": "",
20511
20547
  "record.metadata.isGeographical": "",
20512
20548
  "record.metadata.keywords": "",
20513
20549
  "record.metadata.languages": "",
20514
- "record.metadata.lastUpdate": "",
20550
+ "record.metadata.link.postgis.table": "",
20551
+ "record.metadata.link.postgis.tooltip": "",
20515
20552
  "record.metadata.linked.datasets": "",
20516
20553
  "record.metadata.linked.records": "",
20517
20554
  "record.metadata.linked.reuses": "",
@@ -20552,6 +20589,9 @@ var es = {
20552
20589
  "record.metadata.quality.updateFrequency.failed": "",
20553
20590
  "record.metadata.quality.updateFrequency.success": "",
20554
20591
  "record.metadata.related": "",
20592
+ "record.metadata.resourceCreated": "",
20593
+ "record.metadata.resourcePublished": "",
20594
+ "record.metadata.resourceUpdated": "",
20555
20595
  "record.metadata.ressources.and.links": "Recursos y enlaces",
20556
20596
  "record.metadata.sheet": "",
20557
20597
  "record.metadata.status": "",
@@ -20564,6 +20604,7 @@ var es = {
20564
20604
  "record.metadata.title": "",
20565
20605
  "record.metadata.topics": "",
20566
20606
  "record.metadata.uniqueId": "",
20607
+ "record.metadata.update": "",
20567
20608
  "record.metadata.updateFrequency": "",
20568
20609
  "record.metadata.updatedOn": "",
20569
20610
  "record.metadata.usage": "",
@@ -20580,6 +20621,7 @@ var es = {
20580
20621
  "record.tab.chart": "",
20581
20622
  "record.tab.data": "",
20582
20623
  "record.tab.map": "",
20624
+ "record.tab.stac": "",
20583
20625
  "record.was.created.time": "",
20584
20626
  records: records$5,
20585
20627
  "results.layout.selectOne": "",
@@ -20588,7 +20630,6 @@ var es = {
20588
20630
  "results.records.hits.found": "",
20589
20631
  "results.records.hits.selected": "",
20590
20632
  "results.showMore": "",
20591
- "results.sortBy.changeDate": "",
20592
20633
  "results.sortBy.dateStamp": "",
20593
20634
  "results.sortBy.popularity": "",
20594
20635
  "results.sortBy.qualityScore": "",
@@ -20672,6 +20713,10 @@ var es = {
20672
20713
  "service.metadata.spatialExtent": "",
20673
20714
  "share.tab.permalink": "",
20674
20715
  "share.tab.webComponent": "",
20716
+ "stac.filter.from": "",
20717
+ "stac.filter.period": "",
20718
+ "stac.filter.reset": "",
20719
+ "stac.filter.to": "",
20675
20720
  "table.loading.data": "",
20676
20721
  "table.object.count": "",
20677
20722
  "table.paginator.firstPage": "Primera página",
@@ -21116,6 +21161,8 @@ var fr = {
21116
21161
  "record.metadata.api.accessServiceProtocol.maplibre-style": "",
21117
21162
  "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
21118
21163
  "record.metadata.api.accessServiceProtocol.other": "autre",
21164
+ "record.metadata.api.accessServiceProtocol.postgis": "PostGIS",
21165
+ "record.metadata.api.accessServiceProtocol.stac": "STAC",
21119
21166
  "record.metadata.api.accessServiceProtocol.tms": "",
21120
21167
  "record.metadata.api.accessServiceProtocol.wfs": "",
21121
21168
  "record.metadata.api.accessServiceProtocol.wms": "",
@@ -21157,13 +21204,16 @@ var fr = {
21157
21204
  "record.metadata.contact": "Contact",
21158
21205
  "record.metadata.creation": "Date de création",
21159
21206
  "record.metadata.details": "À propos de la donnée",
21207
+ "record.metadata.doi.copy": "Copier le DOI",
21208
+ "record.metadata.doi.open": "Ouvrir le lien DOI",
21160
21209
  "record.metadata.download": "Téléchargements",
21161
21210
  "record.metadata.feature.catalog": "Catalogue d'attributs",
21162
21211
  "record.metadata.formats": "Formats",
21163
21212
  "record.metadata.isGeographical": "Donnée géographique",
21164
21213
  "record.metadata.keywords": "Mots-clés",
21165
21214
  "record.metadata.languages": "Langues",
21166
- "record.metadata.lastUpdate": "Mis à jour le {date}",
21215
+ "record.metadata.link.postgis.table": "table :",
21216
+ "record.metadata.link.postgis.tooltip": "Les ressources de type PostGIS n'ont pas de lien d'accès",
21167
21217
  "record.metadata.linked.datasets": "Jeux de données associés",
21168
21218
  "record.metadata.linked.records": "Contenus associés",
21169
21219
  "record.metadata.linked.reuses": "Réutilisations associées",
@@ -21204,6 +21254,9 @@ var fr = {
21204
21254
  "record.metadata.quality.updateFrequency.failed": "La fréquence de mise à jour n'est pas renseignée",
21205
21255
  "record.metadata.quality.updateFrequency.success": "La fréquence de mise à jour est renseignée",
21206
21256
  "record.metadata.related": "Explorez le catalogue",
21257
+ "record.metadata.resourceCreated": "Créé",
21258
+ "record.metadata.resourcePublished": "Publié",
21259
+ "record.metadata.resourceUpdated": "Mis à jour",
21207
21260
  "record.metadata.ressources.and.links": "Ressources et liens",
21208
21261
  "record.metadata.sheet": "Fiche de métadonnées d'origine",
21209
21262
  "record.metadata.status": "Statut",
@@ -21216,8 +21269,9 @@ var fr = {
21216
21269
  "record.metadata.title": "Intitulé",
21217
21270
  "record.metadata.topics": "Catégories",
21218
21271
  "record.metadata.uniqueId": "Identificateur de ressource unique",
21272
+ "record.metadata.update": "Date de mise à jour",
21219
21273
  "record.metadata.updateFrequency": "Fréquence de mise à jour des données",
21220
- "record.metadata.updatedOn": "Modifié le",
21274
+ "record.metadata.updatedOn": "Fiche de métadonnées modifiée",
21221
21275
  "record.metadata.usage": "Licences et conditions d'utilisation",
21222
21276
  "record.metadata.userFeedbacks": "Questions / Réponses",
21223
21277
  "record.metadata.userFeedbacks.anonymousUser": "Pour rédiger un commentaire, veuillez vous identifier.",
@@ -21232,6 +21286,7 @@ var fr = {
21232
21286
  "record.tab.chart": "Graphique",
21233
21287
  "record.tab.data": "Tableau",
21234
21288
  "record.tab.map": "Carte",
21289
+ "record.tab.stac": "STAC",
21235
21290
  "record.was.created.time": "a créé cette ressource {time}",
21236
21291
  records: records$4,
21237
21292
  "results.layout.selectOne": "Affichage des résultats",
@@ -21240,7 +21295,6 @@ var fr = {
21240
21295
  "results.records.hits.found": "{hits, plural, =0{Aucune correspondance.} one{1 ressource trouvée.} other{{hits} ressources.}}",
21241
21296
  "results.records.hits.selected": "{amount, plural, one{1 selectionné} other{{ amount } sélectionnés}}",
21242
21297
  "results.showMore": "Plus de résultats...",
21243
- "results.sortBy.changeDate": "Dernière modification",
21244
21298
  "results.sortBy.dateStamp": "Plus récent",
21245
21299
  "results.sortBy.popularity": "Popularité",
21246
21300
  "results.sortBy.qualityScore": "Indicateur de complétion",
@@ -21324,6 +21378,10 @@ var fr = {
21324
21378
  "service.metadata.spatialExtent": "Etendue spatiale",
21325
21379
  "share.tab.permalink": "Partager",
21326
21380
  "share.tab.webComponent": "Intégrer",
21381
+ "stac.filter.from": "Du",
21382
+ "stac.filter.period": "Choix de la période",
21383
+ "stac.filter.reset": "Réinitialiser les filtres",
21384
+ "stac.filter.to": "Au",
21327
21385
  "table.loading.data": "Chargement des données...",
21328
21386
  "table.object.count": "enregistrements dans ce jeu de données",
21329
21387
  "table.paginator.firstPage": "Première page",
@@ -21768,6 +21826,8 @@ var it = {
21768
21826
  "record.metadata.api.accessServiceProtocol.maplibre-style": "",
21769
21827
  "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
21770
21828
  "record.metadata.api.accessServiceProtocol.other": "",
21829
+ "record.metadata.api.accessServiceProtocol.postgis": "",
21830
+ "record.metadata.api.accessServiceProtocol.stac": "",
21771
21831
  "record.metadata.api.accessServiceProtocol.tms": "",
21772
21832
  "record.metadata.api.accessServiceProtocol.wfs": "",
21773
21833
  "record.metadata.api.accessServiceProtocol.wms": "",
@@ -21809,13 +21869,16 @@ var it = {
21809
21869
  "record.metadata.contact": "Contatto",
21810
21870
  "record.metadata.creation": "Data di creazione",
21811
21871
  "record.metadata.details": "A proposito del dati",
21872
+ "record.metadata.doi.copy": "",
21873
+ "record.metadata.doi.open": "",
21812
21874
  "record.metadata.download": "Download",
21813
21875
  "record.metadata.feature.catalog": "Catalogo dei oggetti",
21814
21876
  "record.metadata.formats": "Formati",
21815
21877
  "record.metadata.isGeographical": "Dati geografici",
21816
21878
  "record.metadata.keywords": "Parole chiave",
21817
21879
  "record.metadata.languages": "Lingue",
21818
- "record.metadata.lastUpdate": "Ultimo aggiornamento il {date}",
21880
+ "record.metadata.link.postgis.table": "",
21881
+ "record.metadata.link.postgis.tooltip": "",
21819
21882
  "record.metadata.linked.datasets": "",
21820
21883
  "record.metadata.linked.records": "",
21821
21884
  "record.metadata.linked.reuses": "",
@@ -21856,8 +21919,11 @@ var it = {
21856
21919
  "record.metadata.quality.updateFrequency.failed": "La frequenza di aggiornamento non è specificata",
21857
21920
  "record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
21858
21921
  "record.metadata.related": "Vedi anche",
21922
+ "record.metadata.resourceCreated": "Creato",
21923
+ "record.metadata.resourcePublished": "Pubblicato",
21924
+ "record.metadata.resourceUpdated": "Ultimo aggiornamento",
21859
21925
  "record.metadata.ressources.and.links": "Risorse e collegamenti",
21860
- "record.metadata.sheet": "Origine del metadata",
21926
+ "record.metadata.sheet": "Origine dei metadati",
21861
21927
  "record.metadata.status": "Stato",
21862
21928
  "record.metadata.status.notPublished": "Non pubblicato",
21863
21929
  "record.metadata.status.published": "Pubblicato",
@@ -21868,8 +21934,9 @@ var it = {
21868
21934
  "record.metadata.title": "Titolo",
21869
21935
  "record.metadata.topics": "Categorie",
21870
21936
  "record.metadata.uniqueId": "Identificatore unico di risorsa",
21937
+ "record.metadata.update": "Data di aggiornamento",
21871
21938
  "record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
21872
- "record.metadata.updatedOn": "Modificato il",
21939
+ "record.metadata.updatedOn": "Metadati modificati",
21873
21940
  "record.metadata.usage": "Licenze e limiti di utilizzo",
21874
21941
  "record.metadata.userFeedbacks": "Domande / Risposte",
21875
21942
  "record.metadata.userFeedbacks.anonymousUser": "Per pubblicare un commento, effettua il login.",
@@ -21884,6 +21951,7 @@ var it = {
21884
21951
  "record.tab.chart": "Grafico",
21885
21952
  "record.tab.data": "Tabella",
21886
21953
  "record.tab.map": "Mappa",
21954
+ "record.tab.stac": "",
21887
21955
  "record.was.created.time": "ha creato questi dati {time}",
21888
21956
  records: records$3,
21889
21957
  "results.layout.selectOne": "Mostra risultati",
@@ -21892,7 +21960,6 @@ var it = {
21892
21960
  "results.records.hits.found": "{hits, plural, =0{Nessuna corrispondenza.} one{1 record trovato.} other{{hits} risultati.}}",
21893
21961
  "results.records.hits.selected": "{amount, plural, one{1 selezionato} other{{ amount } selezionati}}",
21894
21962
  "results.showMore": "Altri risultati...",
21895
- "results.sortBy.changeDate": "Ultima modifica",
21896
21963
  "results.sortBy.dateStamp": "Più recente",
21897
21964
  "results.sortBy.popularity": "Popolarità",
21898
21965
  "results.sortBy.qualityScore": "Indicatore di completamento",
@@ -21976,6 +22043,10 @@ var it = {
21976
22043
  "service.metadata.spatialExtent": "Estensione spaziale",
21977
22044
  "share.tab.permalink": "Condividere",
21978
22045
  "share.tab.webComponent": "Incorporare",
22046
+ "stac.filter.from": "",
22047
+ "stac.filter.period": "",
22048
+ "stac.filter.reset": "",
22049
+ "stac.filter.to": "",
21979
22050
  "table.loading.data": "Caricamento dei dati...",
21980
22051
  "table.object.count": "record in questi dati",
21981
22052
  "table.paginator.firstPage": "Prima pagina",
@@ -22420,6 +22491,8 @@ var nl = {
22420
22491
  "record.metadata.api.accessServiceProtocol.maplibre-style": "",
22421
22492
  "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
22422
22493
  "record.metadata.api.accessServiceProtocol.other": "",
22494
+ "record.metadata.api.accessServiceProtocol.postgis": "",
22495
+ "record.metadata.api.accessServiceProtocol.stac": "",
22423
22496
  "record.metadata.api.accessServiceProtocol.tms": "",
22424
22497
  "record.metadata.api.accessServiceProtocol.wfs": "",
22425
22498
  "record.metadata.api.accessServiceProtocol.wms": "",
@@ -22461,13 +22534,16 @@ var nl = {
22461
22534
  "record.metadata.contact": "",
22462
22535
  "record.metadata.creation": "",
22463
22536
  "record.metadata.details": "",
22537
+ "record.metadata.doi.copy": "",
22538
+ "record.metadata.doi.open": "",
22464
22539
  "record.metadata.download": "",
22465
22540
  "record.metadata.feature.catalog": "",
22466
22541
  "record.metadata.formats": "",
22467
22542
  "record.metadata.isGeographical": "",
22468
22543
  "record.metadata.keywords": "",
22469
22544
  "record.metadata.languages": "",
22470
- "record.metadata.lastUpdate": "",
22545
+ "record.metadata.link.postgis.table": "",
22546
+ "record.metadata.link.postgis.tooltip": "",
22471
22547
  "record.metadata.linked.datasets": "",
22472
22548
  "record.metadata.linked.records": "",
22473
22549
  "record.metadata.linked.reuses": "",
@@ -22508,6 +22584,9 @@ var nl = {
22508
22584
  "record.metadata.quality.updateFrequency.failed": "",
22509
22585
  "record.metadata.quality.updateFrequency.success": "",
22510
22586
  "record.metadata.related": "",
22587
+ "record.metadata.resourceCreated": "",
22588
+ "record.metadata.resourcePublished": "",
22589
+ "record.metadata.resourceUpdated": "",
22511
22590
  "record.metadata.ressources.and.links": "Bronnen en links",
22512
22591
  "record.metadata.sheet": "",
22513
22592
  "record.metadata.status": "",
@@ -22520,6 +22599,7 @@ var nl = {
22520
22599
  "record.metadata.title": "",
22521
22600
  "record.metadata.topics": "",
22522
22601
  "record.metadata.uniqueId": "",
22602
+ "record.metadata.update": "",
22523
22603
  "record.metadata.updateFrequency": "",
22524
22604
  "record.metadata.updatedOn": "",
22525
22605
  "record.metadata.usage": "",
@@ -22536,6 +22616,7 @@ var nl = {
22536
22616
  "record.tab.chart": "",
22537
22617
  "record.tab.data": "",
22538
22618
  "record.tab.map": "",
22619
+ "record.tab.stac": "",
22539
22620
  "record.was.created.time": "",
22540
22621
  records: records$2,
22541
22622
  "results.layout.selectOne": "",
@@ -22544,7 +22625,6 @@ var nl = {
22544
22625
  "results.records.hits.found": "",
22545
22626
  "results.records.hits.selected": "",
22546
22627
  "results.showMore": "",
22547
- "results.sortBy.changeDate": "",
22548
22628
  "results.sortBy.dateStamp": "",
22549
22629
  "results.sortBy.popularity": "",
22550
22630
  "results.sortBy.qualityScore": "",
@@ -22628,6 +22708,10 @@ var nl = {
22628
22708
  "service.metadata.spatialExtent": "",
22629
22709
  "share.tab.permalink": "",
22630
22710
  "share.tab.webComponent": "",
22711
+ "stac.filter.from": "",
22712
+ "stac.filter.period": "",
22713
+ "stac.filter.reset": "",
22714
+ "stac.filter.to": "",
22631
22715
  "table.loading.data": "",
22632
22716
  "table.object.count": "",
22633
22717
  "table.paginator.firstPage": "",
@@ -23072,6 +23156,8 @@ var pt = {
23072
23156
  "record.metadata.api.accessServiceProtocol.maplibre-style": "",
23073
23157
  "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
23074
23158
  "record.metadata.api.accessServiceProtocol.other": "",
23159
+ "record.metadata.api.accessServiceProtocol.postgis": "",
23160
+ "record.metadata.api.accessServiceProtocol.stac": "",
23075
23161
  "record.metadata.api.accessServiceProtocol.tms": "",
23076
23162
  "record.metadata.api.accessServiceProtocol.wfs": "",
23077
23163
  "record.metadata.api.accessServiceProtocol.wms": "",
@@ -23113,13 +23199,16 @@ var pt = {
23113
23199
  "record.metadata.contact": "",
23114
23200
  "record.metadata.creation": "",
23115
23201
  "record.metadata.details": "",
23202
+ "record.metadata.doi.copy": "",
23203
+ "record.metadata.doi.open": "",
23116
23204
  "record.metadata.download": "",
23117
23205
  "record.metadata.feature.catalog": "",
23118
23206
  "record.metadata.formats": "",
23119
23207
  "record.metadata.isGeographical": "",
23120
23208
  "record.metadata.keywords": "",
23121
23209
  "record.metadata.languages": "",
23122
- "record.metadata.lastUpdate": "",
23210
+ "record.metadata.link.postgis.table": "",
23211
+ "record.metadata.link.postgis.tooltip": "",
23123
23212
  "record.metadata.linked.datasets": "",
23124
23213
  "record.metadata.linked.records": "",
23125
23214
  "record.metadata.linked.reuses": "",
@@ -23160,6 +23249,9 @@ var pt = {
23160
23249
  "record.metadata.quality.updateFrequency.failed": "",
23161
23250
  "record.metadata.quality.updateFrequency.success": "",
23162
23251
  "record.metadata.related": "",
23252
+ "record.metadata.resourceCreated": "",
23253
+ "record.metadata.resourcePublished": "",
23254
+ "record.metadata.resourceUpdated": "",
23163
23255
  "record.metadata.ressources.and.links": "Recursos e links",
23164
23256
  "record.metadata.sheet": "",
23165
23257
  "record.metadata.status": "",
@@ -23172,6 +23264,7 @@ var pt = {
23172
23264
  "record.metadata.title": "",
23173
23265
  "record.metadata.topics": "",
23174
23266
  "record.metadata.uniqueId": "",
23267
+ "record.metadata.update": "",
23175
23268
  "record.metadata.updateFrequency": "",
23176
23269
  "record.metadata.updatedOn": "",
23177
23270
  "record.metadata.usage": "",
@@ -23188,6 +23281,7 @@ var pt = {
23188
23281
  "record.tab.chart": "",
23189
23282
  "record.tab.data": "",
23190
23283
  "record.tab.map": "",
23284
+ "record.tab.stac": "",
23191
23285
  "record.was.created.time": "",
23192
23286
  records: records$1,
23193
23287
  "results.layout.selectOne": "",
@@ -23196,7 +23290,6 @@ var pt = {
23196
23290
  "results.records.hits.found": "",
23197
23291
  "results.records.hits.selected": "",
23198
23292
  "results.showMore": "",
23199
- "results.sortBy.changeDate": "",
23200
23293
  "results.sortBy.dateStamp": "",
23201
23294
  "results.sortBy.popularity": "",
23202
23295
  "results.sortBy.qualityScore": "",
@@ -23280,6 +23373,10 @@ var pt = {
23280
23373
  "service.metadata.spatialExtent": "",
23281
23374
  "share.tab.permalink": "",
23282
23375
  "share.tab.webComponent": "",
23376
+ "stac.filter.from": "",
23377
+ "stac.filter.period": "",
23378
+ "stac.filter.reset": "",
23379
+ "stac.filter.to": "",
23283
23380
  "table.loading.data": "",
23284
23381
  "table.object.count": "",
23285
23382
  "table.paginator.firstPage": "",
@@ -23724,6 +23821,8 @@ var sk = {
23724
23821
  "record.metadata.api.accessServiceProtocol.maplibre-style": "",
23725
23822
  "record.metadata.api.accessServiceProtocol.ogcFeatures": "",
23726
23823
  "record.metadata.api.accessServiceProtocol.other": "",
23824
+ "record.metadata.api.accessServiceProtocol.postgis": "",
23825
+ "record.metadata.api.accessServiceProtocol.stac": "",
23727
23826
  "record.metadata.api.accessServiceProtocol.tms": "",
23728
23827
  "record.metadata.api.accessServiceProtocol.wfs": "",
23729
23828
  "record.metadata.api.accessServiceProtocol.wms": "",
@@ -23765,13 +23864,16 @@ var sk = {
23765
23864
  "record.metadata.contact": "Kontakt",
23766
23865
  "record.metadata.creation": "",
23767
23866
  "record.metadata.details": "Detaily",
23867
+ "record.metadata.doi.copy": "",
23868
+ "record.metadata.doi.open": "",
23768
23869
  "record.metadata.download": "Sťahovania",
23769
23870
  "record.metadata.feature.catalog": "",
23770
23871
  "record.metadata.formats": "Formáty",
23771
23872
  "record.metadata.isGeographical": "Súbor geografických údajov",
23772
23873
  "record.metadata.keywords": "Kľúčové slová",
23773
23874
  "record.metadata.languages": "",
23774
- "record.metadata.lastUpdate": "Posledná aktualizácia",
23875
+ "record.metadata.link.postgis.table": "",
23876
+ "record.metadata.link.postgis.tooltip": "",
23775
23877
  "record.metadata.linked.datasets": "",
23776
23878
  "record.metadata.linked.records": "",
23777
23879
  "record.metadata.linked.reuses": "",
@@ -23812,6 +23914,9 @@ var sk = {
23812
23914
  "record.metadata.quality.updateFrequency.failed": "Frekvencia aktualizácie nie je určená",
23813
23915
  "record.metadata.quality.updateFrequency.success": "Frekvencia aktualizácie je určená",
23814
23916
  "record.metadata.related": "Súvisiace záznamy",
23917
+ "record.metadata.resourceCreated": "",
23918
+ "record.metadata.resourcePublished": "",
23919
+ "record.metadata.resourceUpdated": "",
23815
23920
  "record.metadata.ressources.and.links": "Prostředky a odkazy",
23816
23921
  "record.metadata.sheet": "Ďalšie metadáta sú k dispozícii na:",
23817
23922
  "record.metadata.status": "Stav",
@@ -23824,8 +23929,9 @@ var sk = {
23824
23929
  "record.metadata.title": "Názov",
23825
23930
  "record.metadata.topics": "",
23826
23931
  "record.metadata.uniqueId": "Jedinečný identifikátor",
23932
+ "record.metadata.update": "Dátum aktualizácie",
23827
23933
  "record.metadata.updateFrequency": "Frekvencia aktualizácie metadát",
23828
- "record.metadata.updatedOn": "Posledná aktualizácia metadát",
23934
+ "record.metadata.updatedOn": "Metadáta zmenené",
23829
23935
  "record.metadata.usage": "Použitie a obmedzenia",
23830
23936
  "record.metadata.userFeedbacks": "",
23831
23937
  "record.metadata.userFeedbacks.anonymousUser": "",
@@ -23840,6 +23946,7 @@ var sk = {
23840
23946
  "record.tab.chart": "Graf",
23841
23947
  "record.tab.data": "Tabuľka",
23842
23948
  "record.tab.map": "Mapa",
23949
+ "record.tab.stac": "",
23843
23950
  "record.was.created.time": "vytvoril tento dataset o {time}",
23844
23951
  records: records,
23845
23952
  "results.layout.selectOne": "Rozmiestnenie výsledkov",
@@ -23848,7 +23955,6 @@ var sk = {
23848
23955
  "results.records.hits.found": "{hits, plural, =0{Žiadne dokumenty nezodpovedajú zadanému vyhľadávaniu.} one{1 záznam nájdený.} other{{hits} záznamov nájdených.}}",
23849
23956
  "results.records.hits.selected": "{ amount } označených",
23850
23957
  "results.showMore": "Zobraziť viac výsledkov...",
23851
- "results.sortBy.changeDate": "",
23852
23958
  "results.sortBy.dateStamp": "Najnovšie",
23853
23959
  "results.sortBy.popularity": "Popularita",
23854
23960
  "results.sortBy.qualityScore": "Indikátor dokončenia",
@@ -23932,6 +24038,10 @@ var sk = {
23932
24038
  "service.metadata.spatialExtent": "",
23933
24039
  "share.tab.permalink": "Zdieľať",
23934
24040
  "share.tab.webComponent": "Integrovať",
24041
+ "stac.filter.from": "",
24042
+ "stac.filter.period": "",
24043
+ "stac.filter.reset": "",
24044
+ "stac.filter.to": "",
23935
24045
  "table.loading.data": "Načítanie údajov...",
23936
24046
  "table.object.count": "objekty v tomto súbore údajov",
23937
24047
  "table.paginator.firstPage": "",
@@ -24229,6 +24339,29 @@ class Gn4FieldMapper {
24229
24339
  }),
24230
24340
  };
24231
24341
  },
24342
+ resourceIdentifier: (output, source) => {
24343
+ const identifiers = getAsArray(selectField(source, 'resourceIdentifier'));
24344
+ if (!identifiers.length)
24345
+ return output;
24346
+ const mappedIdentifiers = identifiers
24347
+ .map((id) => {
24348
+ const code = selectField(id, 'code');
24349
+ const codeSpace = selectField(id, 'codeSpace');
24350
+ const link = selectField(id, 'link');
24351
+ return {
24352
+ code,
24353
+ ...(codeSpace && { codeSpace }),
24354
+ ...(link && { url: link }),
24355
+ };
24356
+ })
24357
+ .filter((id) => id !== null);
24358
+ if (!mappedIdentifiers.length)
24359
+ return output;
24360
+ return {
24361
+ ...output,
24362
+ resourceIdentifiers: mappedIdentifiers,
24363
+ };
24364
+ },
24232
24365
  };
24233
24366
  this.genericField = (output) => output;
24234
24367
  this.constraintField = (type, output, constraintArray) => {
@@ -24337,6 +24470,8 @@ class Gn4FieldMapper {
24337
24470
  /^OGC:WMTS/.test(protocol) ||
24338
24471
  /TMS/i.test(protocol) ||
24339
24472
  /ogc\W*api\W*features/i.test(protocol) ||
24473
+ /^DB:POSTGIS/i.test(protocol) ||
24474
+ /stac\W*items/i.test(protocol) ||
24340
24475
  (/^WWW:DOWNLOAD-/.test(protocol) && /data.geopf.fr/.test(url)) // TO DO : change with the good protocol when decided
24341
24476
  ) {
24342
24477
  return 'service';
@@ -24459,7 +24594,6 @@ const ES_SOURCE_SUMMARY = [
24459
24594
  'resourceAbstractObject',
24460
24595
  'overview',
24461
24596
  'logo',
24462
- 'codelist_status_text',
24463
24597
  'link',
24464
24598
  'linkProtocol',
24465
24599
  'contactForResource*.organisation*',
@@ -24607,8 +24741,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
24607
24741
 
24608
24742
  const PROXY_PATH = new InjectionToken('proxyPath');
24609
24743
  class ProxyService {
24610
- constructor(proxyPath, location) {
24611
- this.proxyPath = proxyPath;
24744
+ get proxyPath() {
24745
+ return this.injector.get(PROXY_PATH, null);
24746
+ }
24747
+ constructor(injector, location) {
24748
+ this.injector = injector;
24612
24749
  this.location = location;
24613
24750
  }
24614
24751
  /**
@@ -24631,7 +24768,7 @@ class ProxyService {
24631
24768
  return url;
24632
24769
  return new URL(`${this.proxyPath}${encodeURIComponent(url)}`, window.location.href).toString();
24633
24770
  }
24634
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyService, deps: [{ token: PROXY_PATH, optional: true }, { token: i1$2.Location }], target: i0.ɵɵFactoryTarget.Injectable }); }
24771
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyService, deps: [{ token: i0.Injector }, { token: i1$2.Location }], target: i0.ɵɵFactoryTarget.Injectable }); }
24635
24772
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyService, providedIn: 'root' }); }
24636
24773
  }
24637
24774
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ProxyService, decorators: [{
@@ -24639,16 +24776,13 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
24639
24776
  args: [{
24640
24777
  providedIn: 'root',
24641
24778
  }]
24642
- }], ctorParameters: () => [{ type: undefined, decorators: [{
24643
- type: Optional
24644
- }, {
24645
- type: Inject,
24646
- args: [PROXY_PATH]
24647
- }] }, { type: i1$2.Location }] });
24779
+ }], ctorParameters: () => [{ type: i0.Injector }, { type: i1$2.Location }] });
24648
24780
 
24781
+ const DEFAULT_LANGUAGE = 'en';
24649
24782
  class DateService {
24650
24783
  constructor(translateService) {
24651
24784
  this.translateService = translateService;
24785
+ this.dateLocales = import('./geonetwork-ui-date-locales-MYnkDJ5h.mjs').then((obj) => obj.default);
24652
24786
  }
24653
24787
  getDateObject(date) {
24654
24788
  if (typeof date === 'string') {
@@ -24661,10 +24795,15 @@ class DateService {
24661
24795
  return date;
24662
24796
  }
24663
24797
  getLocaleAndDate(date) {
24664
- const locale = this.translateService.currentLang || 'en-US';
24798
+ const locale = this.translateService.currentLang || DEFAULT_LANGUAGE;
24665
24799
  const dateObj = this.getDateObject(date);
24666
24800
  return { locale, dateObj };
24667
24801
  }
24802
+ async getDateLocale() {
24803
+ const lang = this.translateService.currentLang || DEFAULT_LANGUAGE;
24804
+ const locales = await this.dateLocales;
24805
+ return locales[lang];
24806
+ }
24668
24807
  formatDate(date, options) {
24669
24808
  const { locale, dateObj } = this.getLocaleAndDate(date);
24670
24809
  return dateObj.toLocaleDateString(locale, options);
@@ -24673,6 +24812,15 @@ class DateService {
24673
24812
  const { locale, dateObj } = this.getLocaleAndDate(date);
24674
24813
  return dateObj.toLocaleString(locale, options);
24675
24814
  }
24815
+ async formatRelativeDateTime(date) {
24816
+ const dateObj = this.getDateObject(date);
24817
+ const now = new Date();
24818
+ const locale = await this.getDateLocale();
24819
+ return formatDistance(dateObj, now, {
24820
+ addSuffix: true,
24821
+ locale: locale,
24822
+ });
24823
+ }
24676
24824
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateService, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable }); }
24677
24825
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateService, providedIn: 'root' }); }
24678
24826
  }
@@ -24983,13 +25131,16 @@ function sortByToStrings(sortBy) {
24983
25131
  return array.map((param) => `${param[0] === 'desc' ? '-' : ''}${param[1]}`);
24984
25132
  }
24985
25133
  function sortByToString(sortBy) {
24986
- return sortByToStrings(sortBy)[0];
25134
+ return sortByToStrings(sortBy).join(',');
24987
25135
  }
24988
25136
  function sortByFromString(sortByString) {
24989
- return [
24990
- sortByString.startsWith('-') ? 'desc' : 'asc',
24991
- sortByString.startsWith('-') ? sortByString.substring(1) : sortByString,
24992
- ];
25137
+ const fields = sortByString
25138
+ .split(',')
25139
+ .map((field) => [
25140
+ field.startsWith('-') ? 'desc' : 'asc',
25141
+ field.startsWith('-') ? field.substring(1) : field,
25142
+ ]);
25143
+ return fields.length > 1 ? fields : fields[0];
24993
25144
  }
24994
25145
 
24995
25146
  const stripHtml = function (html) {
@@ -25187,6 +25338,12 @@ const FORMATS = {
25187
25338
  color: '#5A9E6F',
25188
25339
  mimeTypes: ['image/webp'],
25189
25340
  },
25341
+ postgis: {
25342
+ extensions: ['postgis'],
25343
+ priority: 18,
25344
+ color: '#336791',
25345
+ mimeTypes: [],
25346
+ },
25190
25347
  };
25191
25348
  function getFormatPriority(linkFormat) {
25192
25349
  for (const format in FORMATS) {
@@ -25217,6 +25374,11 @@ function getFileFormatFromServiceOutput(serviceOutput) {
25217
25374
  return null;
25218
25375
  }
25219
25376
  function getFileFormat(link) {
25377
+ if ('accessServiceProtocol' in link) {
25378
+ if (link.accessServiceProtocol in FORMATS) {
25379
+ return link.accessServiceProtocol;
25380
+ }
25381
+ }
25220
25382
  if ('mimeType' in link) {
25221
25383
  const mimeTypeFormat = mimeTypeToFormat(link.mimeType);
25222
25384
  if (mimeTypeFormat !== null) {
@@ -25382,6 +25544,10 @@ class LinkClassifierService {
25382
25544
  return [LinkUsage.API, LinkUsage.DOWNLOAD, LinkUsage.GEODATA];
25383
25545
  case 'GPFDL':
25384
25546
  return [LinkUsage.API];
25547
+ case 'postgis':
25548
+ return [LinkUsage.UNKNOWN];
25549
+ case 'stac':
25550
+ return [LinkUsage.API];
25385
25551
  default:
25386
25552
  return [LinkUsage.UNKNOWN];
25387
25553
  }
@@ -25445,7 +25611,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
25445
25611
  }] } });
25446
25612
 
25447
25613
  var name = "geonetwork-ui";
25448
- var version = "2.8.0-dev.93d2d87c0";
25614
+ var version = "2.8.0-dev.94b119e28";
25449
25615
  var engines = {
25450
25616
  node: ">=20"
25451
25617
  };
@@ -25647,6 +25813,35 @@ function updateLanguages(record, defaultLanguage, otherLanguages) {
25647
25813
  return updatedRecord;
25648
25814
  }
25649
25815
 
25816
+ class GnUiHumanizeDateDirective {
25817
+ constructor(dateService, el, renderer) {
25818
+ this.dateService = dateService;
25819
+ this.el = el;
25820
+ this.renderer = renderer;
25821
+ }
25822
+ async ngOnInit() {
25823
+ await this.updateElement();
25824
+ }
25825
+ async updateElement() {
25826
+ const dateValue = this.gnUiHumanizeDate;
25827
+ const fullDateTime = this.dateService.formatDateTime(dateValue);
25828
+ const relativeDate = await this.dateService.formatRelativeDateTime(dateValue);
25829
+ this.renderer.setAttribute(this.el.nativeElement, 'title', fullDateTime);
25830
+ this.renderer.setProperty(this.el.nativeElement, 'textContent', relativeDate);
25831
+ }
25832
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GnUiHumanizeDateDirective, deps: [{ token: DateService }, { token: i0.ElementRef }, { token: i0.Renderer2 }], target: i0.ɵɵFactoryTarget.Directive }); }
25833
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: GnUiHumanizeDateDirective, isStandalone: true, selector: "[gnUiHumanizeDate]", inputs: { gnUiHumanizeDate: "gnUiHumanizeDate" }, ngImport: i0 }); }
25834
+ }
25835
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GnUiHumanizeDateDirective, decorators: [{
25836
+ type: Directive,
25837
+ args: [{
25838
+ selector: '[gnUiHumanizeDate]',
25839
+ standalone: true,
25840
+ }]
25841
+ }], ctorParameters: () => [{ type: DateService }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { gnUiHumanizeDate: [{
25842
+ type: Input
25843
+ }] } });
25844
+
25650
25845
  class ElasticsearchService {
25651
25846
  // we're using getters in case the defined languages change over time
25652
25847
  get metadataLang() {
@@ -26197,7 +26392,7 @@ class Gn4SettingsService {
26197
26392
  this.apiVersion$ = this.getSettingsSetValueByKey('system/platform/version');
26198
26393
  }
26199
26394
  getSettingsSetValueByKey(key) {
26200
- return this.siteApiService.getSettingsSet(null, [key]).pipe(map$1((v) => v[key]), shareReplay$1({ bufferSize: 1, refCount: true }));
26395
+ return of(true).pipe(switchMap(() => this.siteApiService.getSettingsSet(null, [key])), map$1((v) => v[key]), shareReplay$1({ bufferSize: 1, refCount: true }));
26201
26396
  }
26202
26397
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4SettingsService, deps: [{ token: SiteApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
26203
26398
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4SettingsService, providedIn: 'root' }); }
@@ -26824,7 +27019,7 @@ class AuthService {
26824
27019
  baseUrl = baseUrl.replace('?', '&');
26825
27020
  }
26826
27021
  return baseUrl
26827
- .replace('${current_url}', new URL(this.location.path(), window.location.href).toString())
27022
+ .replace('${current_url}', new URL(this.location.prepareExternalUrl(this.location.path()), window.location.href).toString())
26828
27023
  .replace('${lang2}', toLang2(this.translateService.currentLang))
26829
27024
  .replace('${lang3}', toLang3(this.translateService.currentLang));
26830
27025
  }
@@ -27025,8 +27220,12 @@ class Gn4PlatformMapper {
27025
27220
  userFromApi(apiUser) {
27026
27221
  if (!apiUser)
27027
27222
  return null;
27028
- const { enabled, emailAddresses, organization, kind, lastLoginDate, accountNonExpired, accountNonLocked, id, credentialsNonExpired, ...user } = apiUser;
27029
- return { ...apiUser, id: id.toString() };
27223
+ const { addresses, emailAddresses, enabled, id, kind, lastLoginDate, security, primaryAddress, authorities, accountNonExpired, accountNonLocked, credentialsNonExpired, ...user } = apiUser;
27224
+ return {
27225
+ ...user,
27226
+ id: id.toString(),
27227
+ email: emailAddresses ? emailAddresses[0] || '' : '',
27228
+ };
27030
27229
  }
27031
27230
  keywordsFromApi(keywords, thesaurus, lang3) {
27032
27231
  return keywords.map((keyword) => {
@@ -27132,6 +27331,9 @@ class Gn4PlatformService {
27132
27331
  console.warn('Error while loading gnui language package');
27133
27332
  return of({});
27134
27333
  }), shareReplay$1(1));
27334
+ this.me$ = this.disableAuth
27335
+ ? of(null)
27336
+ : of(true).pipe(switchMap(() => this.meApi.getMe()), switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay$1({ bufferSize: 1, refCount: true }));
27135
27337
  /**
27136
27338
  * A map of already loaded thesauri (groups of keywords); the key is a URI
27137
27339
  * @private
@@ -27142,9 +27344,6 @@ class Gn4PlatformService {
27142
27344
  .pipe(map$1((thesaurus) => {
27143
27345
  return thesaurus[0];
27144
27346
  }), shareReplay$1(1));
27145
- this.me$ = this.disableAuth
27146
- ? of(null)
27147
- : this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay$1({ bufferSize: 1, refCount: true }));
27148
27347
  this.isUserAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
27149
27348
  this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay$1());
27150
27349
  }
@@ -29757,8 +29956,7 @@ class DropdownSelectorComponent {
29757
29956
  ];
29758
29957
  }
29759
29958
  get selectedChoice() {
29760
- return (this.choices.find((choice) => choice.value === this.selected) ??
29761
- this.choices[0]);
29959
+ return (this.choices.find((choice) => JSON.stringify(choice.value) === JSON.stringify(this.selected)) ?? this.choices[0]);
29762
29960
  }
29763
29961
  get id() {
29764
29962
  return this.title.toLowerCase().replace(/[^a-z]+/g, '-');
@@ -31768,7 +31966,6 @@ const FIELDS_SUMMARY = [
31768
31966
  'resourceAbstractObject',
31769
31967
  'overview',
31770
31968
  'logo',
31771
- 'codelist_status_text',
31772
31969
  'link',
31773
31970
  'linkProtocol',
31774
31971
  'contactForResource*.organisation*',
@@ -33735,7 +33932,7 @@ class ExternalLinkCardComponent {
33735
33932
  }
33736
33933
  set size(value) {
33737
33934
  this._size = value;
33738
- this.cardClass = this.sizeClassMap[value];
33935
+ this.cardClass = `group flex flex-row justify-between card-shadow rounded overflow-hidden ${this.sizeClassMap[value]}`;
33739
33936
  }
33740
33937
  get size() {
33741
33938
  return this._size;
@@ -33746,6 +33943,10 @@ class ExternalLinkCardComponent {
33746
33943
  }
33747
33944
  return this.link.name || this.link.description || '';
33748
33945
  }
33946
+ get isDatabase() {
33947
+ return (this.link.type === 'service' &&
33948
+ this.link.accessServiceProtocol === 'postgis');
33949
+ }
33749
33950
  getLinkFormat(link) {
33750
33951
  return getFileFormat(link);
33751
33952
  }
@@ -33756,18 +33957,20 @@ class ExternalLinkCardComponent {
33756
33957
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ExternalLinkCardComponent, isStandalone: true, selector: "gn-ui-external-link-card", inputs: { link: "link", size: "size" }, providers: [
33757
33958
  provideIcons({
33758
33959
  matOpenInNew,
33960
+ iconoirDatabase,
33759
33961
  }),
33760
33962
  provideNgIconsConfig({ size: '1.5em' }),
33761
- ], ngImport: i0, template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"group flex flex-row justify-between card-shadow cursor-pointer rounded overflow-hidden\"\n [ngClass]=\"cardClass\"\n [title]=\"title\"\n>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >{{\n getLinkFormat(link) || ('downloads.format.unknown' | translate)\n }}</span\n >\n </div>\n </div>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n</a>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33963
+ ], ngImport: i0, template: "<ng-container *ngIf=\"isDatabase; else clickableLink\">\n <div [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div\n class=\"gn-ui-card-icon\"\n [title]=\"'record.metadata.link.postgis.tooltip' | translate\"\n >\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"iconoirDatabase\"\n ></ng-icon>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #clickableLink>\n <a [href]=\"link.url\" target=\"_blank\" [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n </a>\n</ng-template>\n<ng-template #cardContent>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n <ng-container *ngIf=\"isDatabase\">\n {{ 'record.metadata.link.postgis.table' | translate }}\n </ng-container>\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >\n {{ getLinkFormat(link) || ('downloads.format.unknown' | translate) }}\n </span>\n </div>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
33762
33964
  }
33763
33965
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExternalLinkCardComponent, decorators: [{
33764
33966
  type: Component,
33765
33967
  args: [{ selector: 'gn-ui-external-link-card', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIconComponent, TranslatePipe], providers: [
33766
33968
  provideIcons({
33767
33969
  matOpenInNew,
33970
+ iconoirDatabase,
33768
33971
  }),
33769
33972
  provideNgIconsConfig({ size: '1.5em' }),
33770
- ], template: "<a\n [href]=\"link.url\"\n target=\"_blank\"\n class=\"group flex flex-row justify-between card-shadow cursor-pointer rounded overflow-hidden\"\n [ngClass]=\"cardClass\"\n [title]=\"title\"\n>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >{{\n getLinkFormat(link) || ('downloads.format.unknown' | translate)\n }}</span\n >\n </div>\n </div>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n</a>\n" }]
33973
+ ], template: "<ng-container *ngIf=\"isDatabase; else clickableLink\">\n <div [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div\n class=\"gn-ui-card-icon\"\n [title]=\"'record.metadata.link.postgis.tooltip' | translate\"\n >\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"iconoirDatabase\"\n ></ng-icon>\n </div>\n </div>\n </div>\n</ng-container>\n\n<ng-template #clickableLink>\n <a [href]=\"link.url\" target=\"_blank\" [ngClass]=\"cardClass\" [title]=\"title\">\n <ng-container *ngTemplateOutlet=\"cardContent\"></ng-container>\n <div\n class=\"flex min-w-[32px]\"\n [ngClass]=\"size === 'S' ? 'items-end' : 'items-center'\"\n >\n <div class=\"gn-ui-card-icon\">\n <ng-icon\n class=\"inline-block card-icon align-middle\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </div>\n </div>\n </a>\n</ng-template>\n<ng-template #cardContent>\n <div class=\"flex flex-col justify-between flex-1 min-w-0\">\n <div class=\"gn-ui-card-title\">\n {{ link.description || link.name }}\n </div>\n <div class=\"gn-ui-card-detail\">\n <ng-container *ngIf=\"isDatabase\">\n {{ 'record.metadata.link.postgis.table' | translate }}\n </ng-container>\n {{ link.name }}\n </div>\n <p *ngIf=\"!link.name && !link.description\" class=\"gn-ui-card-title\">\n {{ link.url }}\n </p>\n <div class=\"pt-1\">\n <span\n class=\"inline-flex items-center justify-center px-2 py-1 text-13 font-medium leading-none text-white rounded transition-opacity opacity-70 group-hover:opacity-100\"\n [style.background-color]=\"getLinkColor(link)\"\n data-cy=\"download-format\"\n >\n {{ getLinkFormat(link) || ('downloads.format.unknown' | translate) }}\n </span>\n </div>\n </div>\n</ng-template>\n" }]
33771
33974
  }], propDecorators: { link: [{
33772
33975
  type: Input
33773
33976
  }], size: [{
@@ -33887,6 +34090,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
33887
34090
  type: Output
33888
34091
  }] } });
33889
34092
 
34093
+ class MetadataDoiComponent {
34094
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataDoiComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34095
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataDoiComponent, isStandalone: true, selector: "gn-ui-metadata-doi", inputs: { code: "code", link: "link" }, ngImport: i0, template: "<div\n class=\"border border-gray-300 rounded-lg py-4 px-5 text-black flex justify-between items-center gap-4\"\n>\n <div class=\"overflow-hidden flex-1\">\n <p class=\"text-base font-medium mb-3\">DOI</p>\n <p\n class=\"text-base font-medium overflow-hidden text-ellipsis whitespace-nowrap\"\n [title]=\"code\"\n >\n {{ code }}\n </p>\n </div>\n <div class=\"flex gap-2 items-start\">\n <gn-ui-copy-text-button\n [text]=\"code\"\n [displayText]=\"false\"\n [tooltipText]=\"'record.metadata.doi.copy' | translate\"\n class=\"[&>div]:flex [&>div]:items-center [&>div]:justify-center [&_button]:w-[40px] [&_button]:h-[32px] [&_button]:flex [&_button]:items-center [&_button]:justify-center [&_button]:hover:bg-gray-100 [&_button]:rounded-lg [&_button]:transition-colors [&_button]:border [&_button]:border-gray-300 [&_button]:px-2 [&_button]:py-1 [&_ng-icon]:w-5 [&_ng-icon]:h-5\"\n ></gn-ui-copy-text-button>\n <a\n *ngIf=\"link\"\n [href]=\"link\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"w-[40px] h-[32px] flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors border border-gray-300 px-2 py-1\"\n [matTooltip]=\"'record.metadata.doi.open' | translate\"\n >\n <ng-icon name=\"matOpenInNew\" size=\"20\"></ng-icon>\n </a>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }], viewProviders: [
34096
+ provideIcons({
34097
+ matOpenInNew,
34098
+ }),
34099
+ ] }); }
34100
+ }
34101
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataDoiComponent, decorators: [{
34102
+ type: Component,
34103
+ args: [{ selector: 'gn-ui-metadata-doi', standalone: true, imports: [
34104
+ CommonModule,
34105
+ MatTooltipModule,
34106
+ NgIcon,
34107
+ TranslatePipe,
34108
+ CopyTextButtonComponent,
34109
+ ], viewProviders: [
34110
+ provideIcons({
34111
+ matOpenInNew,
34112
+ }),
34113
+ ], template: "<div\n class=\"border border-gray-300 rounded-lg py-4 px-5 text-black flex justify-between items-center gap-4\"\n>\n <div class=\"overflow-hidden flex-1\">\n <p class=\"text-base font-medium mb-3\">DOI</p>\n <p\n class=\"text-base font-medium overflow-hidden text-ellipsis whitespace-nowrap\"\n [title]=\"code\"\n >\n {{ code }}\n </p>\n </div>\n <div class=\"flex gap-2 items-start\">\n <gn-ui-copy-text-button\n [text]=\"code\"\n [displayText]=\"false\"\n [tooltipText]=\"'record.metadata.doi.copy' | translate\"\n class=\"[&>div]:flex [&>div]:items-center [&>div]:justify-center [&_button]:w-[40px] [&_button]:h-[32px] [&_button]:flex [&_button]:items-center [&_button]:justify-center [&_button]:hover:bg-gray-100 [&_button]:rounded-lg [&_button]:transition-colors [&_button]:border [&_button]:border-gray-300 [&_button]:px-2 [&_button]:py-1 [&_ng-icon]:w-5 [&_ng-icon]:h-5\"\n ></gn-ui-copy-text-button>\n <a\n *ngIf=\"link\"\n [href]=\"link\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n class=\"w-[40px] h-[32px] flex items-center justify-center hover:bg-gray-100 rounded-lg transition-colors border border-gray-300 px-2 py-1\"\n [matTooltip]=\"'record.metadata.doi.open' | translate\"\n >\n <ng-icon name=\"matOpenInNew\" size=\"20\"></ng-icon>\n </a>\n </div>\n</div>\n" }]
34114
+ }], propDecorators: { code: [{
34115
+ type: Input
34116
+ }], link: [{
34117
+ type: Input
34118
+ }] } });
34119
+
33890
34120
  /* eslint-disable @angular-eslint/directive-selector */
33891
34121
  class GnUiLinkifyDirective {
33892
34122
  constructor(el, renderer) {
@@ -34030,14 +34260,8 @@ class MetadataInfoComponent {
34030
34260
  onKeywordClick(keyword) {
34031
34261
  this.keyword.emit(keyword);
34032
34262
  }
34033
- formatDate(date) {
34034
- return this.dateService.formatDate(date);
34035
- }
34036
- formatDateTime(date) {
34037
- return this.dateService.formatDateTime(date);
34038
- }
34039
34263
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataInfoComponent, deps: [{ token: DateService }], target: i0.ɵɵFactoryTarget.Component }); }
34040
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataInfoComponent, isStandalone: true, 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\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\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\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <div *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords 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\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\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 <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\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 <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\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.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n (metadata.kind === 'dataset' && metadata.status)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\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 <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\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.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\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.otherLanguages?.length\">\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.otherLanguages\"\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=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\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 && formatDateTime(metadata.recordUpdated) }}\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 [clickable]=\"false\"\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 ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "iconColor", "collapsed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { 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: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }], viewProviders: [
34264
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: MetadataInfoComponent, isStandalone: true, 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\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines\n [maxLines]=\"6\"\n *ngIf=\"metadata.abstract\"\n data-test=\"metadata-info-abstract\"\n >\n <div class=\"mb-6\">\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\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <gn-ui-max-lines [maxLines]=\"7\" *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords 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 </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\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 <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\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 <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\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.kind === 'dataset' && metadata.lineage) ||\n resourceContact ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n>\n <div\n *ngIf=\"metadata.kind === 'dataset' && metadata.lineage\"\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div\n class=\"flex flex-row gap-6 mt-5 mb-8 resource-contact\"\n *ngIf=\"resourceContact\"\n data-test=\"details-panel-resource-contact\"\n >\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 <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\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\n *ngIf=\"metadata.resourceCreated\"\n data-test=\"details-panel-resource-created\"\n >\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.resourcePublished\"\n data-test=\"details-panel-resource-published\"\n >\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.resourceUpdated\"\n data-test=\"details-panel-resource-updated\"\n >\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.kind === 'dataset' && metadata.updateFrequency\"\n data-test=\"details-panel-update-frequency\"\n >\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\n *ngIf=\"metadata.otherLanguages?.length\"\n data-test=\"details-panel-other-languages\"\n >\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 other-languages\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div\n *ngIf=\"metadata.kind === 'dataset' && temporalExtent\"\n data-test=\"details-panel-temporal-extent\"\n >\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\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=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\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\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\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 [clickable]=\"false\"\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 ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent", "whitoutStyles"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "iconColor", "collapsed"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable", "removable"], outputs: ["badgeRemoveClicked"] }, { 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: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "directive", type: GnUiHumanizeDateDirective, selector: "[gnUiHumanizeDate]", inputs: ["gnUiHumanizeDate"] }, { kind: "component", type: SpatialExtentComponent, selector: "gn-ui-spatial-extent", inputs: ["spatialExtents"] }], viewProviders: [
34041
34265
  provideIcons({
34042
34266
  matOpenInNew,
34043
34267
  matMailOutline: matMailOutline$1,
@@ -34059,13 +34283,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
34059
34283
  CopyTextButtonComponent,
34060
34284
  NgIcon,
34061
34285
  GnUiLinkifyDirective,
34286
+ GnUiHumanizeDateDirective,
34062
34287
  SpatialExtentComponent,
34063
34288
  ], viewProviders: [
34064
34289
  provideIcons({
34065
34290
  matOpenInNew,
34066
34291
  matMailOutline: matMailOutline$1,
34067
34292
  }),
34068
- ], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div class=\"mb-6\">\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\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <div *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords 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\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\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 <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\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 <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\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.kind === 'dataset' && metadata.lineage) ||\n metadata.resourceUpdated ||\n metadata.updateFrequency ||\n (metadata.kind === 'dataset' && metadata.status)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\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 <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\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.resourceCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourceCreated) }}\n </p>\n </div>\n <div *ngIf=\"metadata.resourcePublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ formatDate(metadata.resourcePublished) }}\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.otherLanguages?.length\">\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.otherLanguages\"\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=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\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 && formatDateTime(metadata.recordUpdated) }}\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 [clickable]=\"false\"\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 ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"] }]
34293
+ ], template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost\n ghostClass=\"h-[178px]\"\n [showContent]=\"fieldReady('abstract')\"\n >\n <gn-ui-max-lines\n [maxLines]=\"6\"\n *ngIf=\"metadata.abstract\"\n data-test=\"metadata-info-abstract\"\n >\n <div class=\"mb-6\">\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\n <p\n class=\"mt-6 mb-3 font-medium text-black text-sm\"\n translate\n *ngIf=\"!fieldReady('keywords') || metadata.keywords?.length\"\n >\n record.metadata.keywords\n </p>\n\n <gn-ui-content-ghost\n ghostClass=\"h-[31px] w-3/4\"\n [showContent]=\"fieldReady('keywords')\"\n >\n <gn-ui-max-lines [maxLines]=\"7\" *ngIf=\"metadata.keywords?.length\">\n <div class=\"metadata-info-keywords 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 </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.licenses ||\n metadata.legalConstraints ||\n metadata.securityConstraints ||\n metadata.otherConstraints\n \"\n [title]=\"'record.metadata.usage' | translate\"\n data-test=\"usage-panel\"\n>\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 <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\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 <div class=\"mb-6\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <span\n translate\n class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\"\n >\n record.metadata.otherConstraints\n </span>\n <div class=\"mb-6\">\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\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.kind === 'dataset' && metadata.lineage) ||\n resourceContact ||\n metadata.resourceCreated ||\n metadata.resourcePublished ||\n metadata.resourceUpdated ||\n (metadata.kind === 'dataset' && metadata.updateFrequency) ||\n metadata.otherLanguages?.length ||\n (metadata.kind === 'dataset' && temporalExtent)\n \"\n [title]=\"'record.metadata.details' | translate\"\n data-test=\"details-panel\"\n>\n <div\n *ngIf=\"metadata.kind === 'dataset' && metadata.lineage\"\n class=\"text-gray-900 flex flex-col mt-4 gap-2\"\n data-test=\"details-panel-lineage\"\n >\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div\n class=\"flex flex-row gap-6 mt-5 mb-8 resource-contact\"\n *ngIf=\"resourceContact\"\n data-test=\"details-panel-resource-contact\"\n >\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 <ng-icon\n class=\"!w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n name=\"matOpenInNew\"\n ></ng-icon>\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <ng-icon\n class=\"!w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n name=\"matMailOutline\"\n ></ng-icon>\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\n *ngIf=\"metadata.resourceCreated\"\n data-test=\"details-panel-resource-created\"\n >\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p\n class=\"text-primary font-medium mt-1 resource-created\"\n [gnUiHumanizeDate]=\"metadata.resourceCreated\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.resourcePublished\"\n data-test=\"details-panel-resource-published\"\n >\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p\n class=\"text-primary font-medium mt-1 resource-published\"\n [gnUiHumanizeDate]=\"metadata.resourcePublished\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.resourceUpdated\"\n data-test=\"details-panel-resource-updated\"\n >\n <p class=\"text-sm\" translate>record.metadata.update</p>\n <p\n class=\"text-primary font-medium mt-1 resource-updated\"\n [gnUiHumanizeDate]=\"metadata.resourceUpdated\"\n ></p>\n </div>\n <div\n *ngIf=\"metadata.kind === 'dataset' && metadata.updateFrequency\"\n data-test=\"details-panel-update-frequency\"\n >\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\n *ngIf=\"metadata.otherLanguages?.length\"\n data-test=\"details-panel-other-languages\"\n >\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 other-languages\"\n translate\n *ngFor=\"let language of metadata.otherLanguages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div\n *ngIf=\"metadata.kind === 'dataset' && temporalExtent\"\n data-test=\"details-panel-temporal-extent\"\n >\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div\n class=\"flex flex-row gap-1 mb-1 text-primary font-medium temporal-extent\"\n >\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=\"\n metadata.kind !== 'dataset' &&\n metadata.spatialExtents &&\n metadata.spatialExtents.length\n \"\n [title]=\"'service.metadata.spatialExtent' | translate\"\n data-test=\"spatial-extent-panel\"\n>\n <gn-ui-spatial-extent\n class=\"flex h-[271px] w-full rounded-lg border border-gray-100 mt-3 mb-6\"\n [spatialExtents]=\"metadata.spatialExtents\"\n ></gn-ui-spatial-extent>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'service.metadata.other' | translate\"\n data-test=\"other-panel\"\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\n class=\"text-primary font-medium\"\n [gnUiHumanizeDate]=\"metadata.recordUpdated\"\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 [clickable]=\"false\"\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 ng-icon{transform:scale(.8)}:host{--gn-ui-badge-background-color: var(--color-primary-white);--gn-ui-badge-text-color: var(--color-primary-darkest)}:host .metadata-info-keywords ::ng-deep gn-ui-badge:hover{--gn-ui-badge-text-color: white}\n"] }]
34069
34294
  }], ctorParameters: () => [{ type: DateService }], propDecorators: { metadata: [{
34070
34295
  type: Input
34071
34296
  }], incomplete: [{
@@ -34379,59 +34604,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
34379
34604
  type: Input
34380
34605
  }] } });
34381
34606
 
34382
- class TimeSincePipe {
34383
- constructor(translate) {
34384
- this.translate = translate;
34385
- }
34386
- transform(value) {
34387
- if (isNaN(value.getTime())) {
34388
- throw new Error('Invalid Date');
34389
- }
34390
- const maintenant = new Date();
34391
- let locale;
34392
- switch (this.translate.currentLang) {
34393
- case 'fr':
34394
- locale = fr$1;
34395
- break;
34396
- case 'de':
34397
- locale = de$1;
34398
- break;
34399
- case 'es':
34400
- locale = es$1;
34401
- break;
34402
- case 'it':
34403
- locale = it$1;
34404
- break;
34405
- case 'nl':
34406
- locale = nl$1;
34407
- break;
34408
- case 'pt':
34409
- locale = pt$1;
34410
- break;
34411
- case 'sk':
34412
- locale = sk$1;
34413
- break;
34414
- case 'en':
34415
- default:
34416
- locale = enUS;
34417
- break;
34418
- }
34419
- return formatDistance(value, maintenant, {
34420
- addSuffix: true,
34421
- locale: locale,
34422
- });
34423
- }
34424
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimeSincePipe, deps: [{ token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Pipe }); }
34425
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TimeSincePipe, isStandalone: true, name: "timeSince" }); }
34426
- }
34427
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimeSincePipe, decorators: [{
34428
- type: Pipe,
34429
- args: [{
34430
- name: 'timeSince',
34431
- standalone: true,
34432
- }]
34433
- }], ctorParameters: () => [{ type: i1$1.TranslateService }] });
34434
-
34435
34607
  class UserFeedbackItemComponent {
34436
34608
  constructor() {
34437
34609
  this.newUserFeedbackAnswer = new EventEmitter();
@@ -34464,7 +34636,7 @@ class UserFeedbackItemComponent {
34464
34636
  this.onNewAnswerValueChange();
34465
34637
  }
34466
34638
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserFeedbackItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34467
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserFeedbackItemComponent, isStandalone: true, selector: "gn-ui-user-feedback-item", inputs: { userFeedbackParent: "userFeedbackParent", userFeedBacksAnswers: "userFeedBacksAnswers", activeUser: "activeUser", isLastComment: "isLastComment", isAddUserFeedbackLoading: "isAddUserFeedbackLoading" }, outputs: { newUserFeedbackAnswer: "newUserFeedbackAnswer" }, ngImport: i0, template: "<div\n *ngIf=\"userFeedbackParent.published\"\n class=\"flex flex-col bg-white rounded w-full\"\n [ngClass]=\"[isAnAnswer ? 'ps-4 ' : 'p-4']\"\n>\n <div class=\"flex flex-row\">\n <div class=\"avatar\">\n <img\n class=\"rounded-full\"\n [src]=\"userFeedbackParent.avatarUrl\"\n alt=\"avatar\"\n />\n </div>\n <div class=\"p-4 flex flex-col\">\n <span>{{ userFeedbackParent.authorName }}</span>\n <span> {{ userFeedbackParent.date | timeSince }}</span>\n </div>\n </div>\n <div data-cy=\"commentText\" class=\"mt-4 whitespace-pre-line\">\n {{ userFeedbackParent.comment }}\n </div>\n <div\n class=\"w-full\"\n *ngFor=\"let userFeedBacksAnswer of userFeedBacksAnswers; let last = last\"\n >\n <hr class=\"-mx-4 my-6\" />\n <gn-ui-user-feedback-item\n [userFeedbackParent]=\"userFeedBacksAnswer\"\n [isLastComment]=\"last\"\n ></gn-ui-user-feedback-item>\n </div>\n\n <div *ngIf=\"activeUser\" class=\"mt-2 flex flex-col\">\n <hr class=\"-mx-4 my-4\" />\n <div\n id=\"new-comment-buttons\"\n class=\"flex flex-row gap-2 items-center justify-end\"\n >\n <gn-ui-text-area\n [disabled]=\"isAddUserFeedbackLoading\"\n [(value)]=\"newAnswer\"\n (valueChange)=\"onNewAnswerValueChange()\"\n (keyup.control.enter)=\"publishNewAnswer()\"\n [placeholder]=\"\n 'record.metadata.userFeedbacks.newAnswer.placeholder' | translate\n \"\n class=\"grow\"\n extraClass=\"bg-transparent border-0 placeholder-primary-darker text-primary-darker h-9\"\n ></gn-ui-text-area>\n <div *ngIf=\"!isAnswerEmpty\" class=\"flex flex-row justify-end\">\n <gn-ui-button\n [disabled]=\"isAddUserFeedbackLoading\"\n [type]=\"'outline'\"\n (buttonClick)=\"publishNewAnswer()\"\n [title]=\"\n 'record.metadata.userFeedbacks.newAnswer.buttonTitle' | translate\n \"\n extraClass=\"!p-[0.5em] text-primary-darker border-primary-darker h-9\"\n >\n <ng-icon *ngIf=\"!isAddUserFeedbackLoading\" name=\"matSendOutline\">\n </ng-icon>\n <ng-container *ngIf=\"isAddUserFeedbackLoading\">\n <div class=\"flex justify-center w-full\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n </gn-ui-button>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: UserFeedbackItemComponent, selector: "gn-ui-user-feedback-item", inputs: ["userFeedbackParent", "userFeedBacksAnswers", "activeUser", "isLastComment", "isAddUserFeedbackLoading"], outputs: ["newUserFeedbackAnswer"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: TimeSincePipe, name: "timeSince" }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], viewProviders: [
34639
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: UserFeedbackItemComponent, isStandalone: true, selector: "gn-ui-user-feedback-item", inputs: { userFeedbackParent: "userFeedbackParent", userFeedBacksAnswers: "userFeedBacksAnswers", activeUser: "activeUser", isLastComment: "isLastComment", isAddUserFeedbackLoading: "isAddUserFeedbackLoading" }, outputs: { newUserFeedbackAnswer: "newUserFeedbackAnswer" }, ngImport: i0, template: "<div\n *ngIf=\"userFeedbackParent.published\"\n class=\"flex flex-col bg-white rounded w-full\"\n [ngClass]=\"[isAnAnswer ? 'ps-4 ' : 'p-4']\"\n>\n <div class=\"flex flex-row\">\n <div class=\"avatar\">\n <img\n class=\"rounded-full\"\n [src]=\"userFeedbackParent.avatarUrl\"\n alt=\"avatar\"\n />\n </div>\n <div class=\"p-4 flex flex-col\">\n <span>{{ userFeedbackParent.authorName }}</span>\n <span [gnUiHumanizeDate]=\"userFeedbackParent.date\"></span>\n </div>\n </div>\n <div data-cy=\"commentText\" class=\"mt-4 whitespace-pre-line\">\n {{ userFeedbackParent.comment }}\n </div>\n <div\n class=\"w-full\"\n *ngFor=\"let userFeedBacksAnswer of userFeedBacksAnswers; let last = last\"\n >\n <hr class=\"-mx-4 my-6\" />\n <gn-ui-user-feedback-item\n [userFeedbackParent]=\"userFeedBacksAnswer\"\n [isLastComment]=\"last\"\n ></gn-ui-user-feedback-item>\n </div>\n\n <div *ngIf=\"activeUser\" class=\"mt-2 flex flex-col\">\n <hr class=\"-mx-4 my-4\" />\n <div\n id=\"new-comment-buttons\"\n class=\"flex flex-row gap-2 items-center justify-end\"\n >\n <gn-ui-text-area\n [disabled]=\"isAddUserFeedbackLoading\"\n [(value)]=\"newAnswer\"\n (valueChange)=\"onNewAnswerValueChange()\"\n (keyup.control.enter)=\"publishNewAnswer()\"\n [placeholder]=\"\n 'record.metadata.userFeedbacks.newAnswer.placeholder' | translate\n \"\n class=\"grow\"\n extraClass=\"bg-transparent border-0 placeholder-primary-darker text-primary-darker h-9\"\n ></gn-ui-text-area>\n <div *ngIf=\"!isAnswerEmpty\" class=\"flex flex-row justify-end\">\n <gn-ui-button\n [disabled]=\"isAddUserFeedbackLoading\"\n [type]=\"'outline'\"\n (buttonClick)=\"publishNewAnswer()\"\n [title]=\"\n 'record.metadata.userFeedbacks.newAnswer.buttonTitle' | translate\n \"\n extraClass=\"!p-[0.5em] text-primary-darker border-primary-darker h-9\"\n >\n <ng-icon *ngIf=\"!isAddUserFeedbackLoading\" name=\"matSendOutline\">\n </ng-icon>\n <ng-container *ngIf=\"isAddUserFeedbackLoading\">\n <div class=\"flex justify-center w-full\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n </gn-ui-button>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "component", type: UserFeedbackItemComponent, selector: "gn-ui-user-feedback-item", inputs: ["userFeedbackParent", "userFeedBacksAnswers", "activeUser", "isLastComment", "isAddUserFeedbackLoading"], outputs: ["newUserFeedbackAnswer"] }, { kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: TextAreaComponent, selector: "gn-ui-text-area", inputs: ["value", "disabled", "extraClass", "placeholder", "required"], outputs: ["valueChange"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "component", type: SpinningLoaderComponent, selector: "gn-ui-spinning-loader" }, { kind: "directive", type: GnUiHumanizeDateDirective, selector: "[gnUiHumanizeDate]", inputs: ["gnUiHumanizeDate"] }, { kind: "component", type: NgIcon, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }], viewProviders: [
34468
34640
  provideIcons({
34469
34641
  matSendOutline,
34470
34642
  }),
@@ -34474,17 +34646,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
34474
34646
  type: Component,
34475
34647
  args: [{ selector: 'gn-ui-user-feedback-item', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
34476
34648
  CommonModule,
34477
- TimeSincePipe,
34478
34649
  TextAreaComponent,
34479
34650
  TranslatePipe,
34480
34651
  ButtonComponent,
34481
34652
  SpinningLoaderComponent,
34653
+ GnUiHumanizeDateDirective,
34482
34654
  NgIcon,
34483
34655
  ], viewProviders: [
34484
34656
  provideIcons({
34485
34657
  matSendOutline,
34486
34658
  }),
34487
- ], template: "<div\n *ngIf=\"userFeedbackParent.published\"\n class=\"flex flex-col bg-white rounded w-full\"\n [ngClass]=\"[isAnAnswer ? 'ps-4 ' : 'p-4']\"\n>\n <div class=\"flex flex-row\">\n <div class=\"avatar\">\n <img\n class=\"rounded-full\"\n [src]=\"userFeedbackParent.avatarUrl\"\n alt=\"avatar\"\n />\n </div>\n <div class=\"p-4 flex flex-col\">\n <span>{{ userFeedbackParent.authorName }}</span>\n <span> {{ userFeedbackParent.date | timeSince }}</span>\n </div>\n </div>\n <div data-cy=\"commentText\" class=\"mt-4 whitespace-pre-line\">\n {{ userFeedbackParent.comment }}\n </div>\n <div\n class=\"w-full\"\n *ngFor=\"let userFeedBacksAnswer of userFeedBacksAnswers; let last = last\"\n >\n <hr class=\"-mx-4 my-6\" />\n <gn-ui-user-feedback-item\n [userFeedbackParent]=\"userFeedBacksAnswer\"\n [isLastComment]=\"last\"\n ></gn-ui-user-feedback-item>\n </div>\n\n <div *ngIf=\"activeUser\" class=\"mt-2 flex flex-col\">\n <hr class=\"-mx-4 my-4\" />\n <div\n id=\"new-comment-buttons\"\n class=\"flex flex-row gap-2 items-center justify-end\"\n >\n <gn-ui-text-area\n [disabled]=\"isAddUserFeedbackLoading\"\n [(value)]=\"newAnswer\"\n (valueChange)=\"onNewAnswerValueChange()\"\n (keyup.control.enter)=\"publishNewAnswer()\"\n [placeholder]=\"\n 'record.metadata.userFeedbacks.newAnswer.placeholder' | translate\n \"\n class=\"grow\"\n extraClass=\"bg-transparent border-0 placeholder-primary-darker text-primary-darker h-9\"\n ></gn-ui-text-area>\n <div *ngIf=\"!isAnswerEmpty\" class=\"flex flex-row justify-end\">\n <gn-ui-button\n [disabled]=\"isAddUserFeedbackLoading\"\n [type]=\"'outline'\"\n (buttonClick)=\"publishNewAnswer()\"\n [title]=\"\n 'record.metadata.userFeedbacks.newAnswer.buttonTitle' | translate\n \"\n extraClass=\"!p-[0.5em] text-primary-darker border-primary-darker h-9\"\n >\n <ng-icon *ngIf=\"!isAddUserFeedbackLoading\" name=\"matSendOutline\">\n </ng-icon>\n <ng-container *ngIf=\"isAddUserFeedbackLoading\">\n <div class=\"flex justify-center w-full\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n </gn-ui-button>\n </div>\n </div>\n </div>\n</div>\n" }]
34659
+ ], template: "<div\n *ngIf=\"userFeedbackParent.published\"\n class=\"flex flex-col bg-white rounded w-full\"\n [ngClass]=\"[isAnAnswer ? 'ps-4 ' : 'p-4']\"\n>\n <div class=\"flex flex-row\">\n <div class=\"avatar\">\n <img\n class=\"rounded-full\"\n [src]=\"userFeedbackParent.avatarUrl\"\n alt=\"avatar\"\n />\n </div>\n <div class=\"p-4 flex flex-col\">\n <span>{{ userFeedbackParent.authorName }}</span>\n <span [gnUiHumanizeDate]=\"userFeedbackParent.date\"></span>\n </div>\n </div>\n <div data-cy=\"commentText\" class=\"mt-4 whitespace-pre-line\">\n {{ userFeedbackParent.comment }}\n </div>\n <div\n class=\"w-full\"\n *ngFor=\"let userFeedBacksAnswer of userFeedBacksAnswers; let last = last\"\n >\n <hr class=\"-mx-4 my-6\" />\n <gn-ui-user-feedback-item\n [userFeedbackParent]=\"userFeedBacksAnswer\"\n [isLastComment]=\"last\"\n ></gn-ui-user-feedback-item>\n </div>\n\n <div *ngIf=\"activeUser\" class=\"mt-2 flex flex-col\">\n <hr class=\"-mx-4 my-4\" />\n <div\n id=\"new-comment-buttons\"\n class=\"flex flex-row gap-2 items-center justify-end\"\n >\n <gn-ui-text-area\n [disabled]=\"isAddUserFeedbackLoading\"\n [(value)]=\"newAnswer\"\n (valueChange)=\"onNewAnswerValueChange()\"\n (keyup.control.enter)=\"publishNewAnswer()\"\n [placeholder]=\"\n 'record.metadata.userFeedbacks.newAnswer.placeholder' | translate\n \"\n class=\"grow\"\n extraClass=\"bg-transparent border-0 placeholder-primary-darker text-primary-darker h-9\"\n ></gn-ui-text-area>\n <div *ngIf=\"!isAnswerEmpty\" class=\"flex flex-row justify-end\">\n <gn-ui-button\n [disabled]=\"isAddUserFeedbackLoading\"\n [type]=\"'outline'\"\n (buttonClick)=\"publishNewAnswer()\"\n [title]=\"\n 'record.metadata.userFeedbacks.newAnswer.buttonTitle' | translate\n \"\n extraClass=\"!p-[0.5em] text-primary-darker border-primary-darker h-9\"\n >\n <ng-icon *ngIf=\"!isAddUserFeedbackLoading\" name=\"matSendOutline\">\n </ng-icon>\n <ng-container *ngIf=\"isAddUserFeedbackLoading\">\n <div class=\"flex justify-center w-full\">\n <gn-ui-spinning-loader></gn-ui-spinning-loader>\n </div>\n </ng-container>\n </gn-ui-button>\n </div>\n </div>\n </div>\n</div>\n" }]
34488
34660
  }], propDecorators: { userFeedbackParent: [{
34489
34661
  type: Input
34490
34662
  }], userFeedBacksAnswers: [{
@@ -36453,6 +36625,11 @@ const SortByEnum = {
36453
36625
  RELEVANCY: ['desc', '_score'],
36454
36626
  QUALITY_SCORE: ['desc', 'qualityScore'],
36455
36627
  CHANGE_DATE: ['desc', 'changeDate'],
36628
+ RESOURCE_DATES: [
36629
+ ['desc', 'revisionDateForResource'],
36630
+ ['desc', 'publicationDateForResource'],
36631
+ ['desc', 'creationDateForResource'],
36632
+ ],
36456
36633
  };
36457
36634
 
36458
36635
  class SortByComponent {
@@ -36462,33 +36639,29 @@ class SortByComponent {
36462
36639
  this.choices = [
36463
36640
  {
36464
36641
  label: marker('results.sortBy.relevancy'),
36465
- value: SortByEnum.RELEVANCY.join(','),
36642
+ value: SortByEnum.RELEVANCY,
36466
36643
  },
36467
36644
  {
36468
36645
  label: marker('results.sortBy.dateStamp'),
36469
- value: SortByEnum.CREATE_DATE.join(','),
36470
- },
36471
- {
36472
- label: marker('results.sortBy.changeDate'),
36473
- value: SortByEnum.CHANGE_DATE.join(','),
36646
+ value: SortByEnum.RESOURCE_DATES,
36474
36647
  },
36475
36648
  {
36476
36649
  label: marker('results.sortBy.popularity'),
36477
- value: SortByEnum.POPULARITY.join(','),
36650
+ value: SortByEnum.POPULARITY,
36478
36651
  },
36479
36652
  ];
36480
- this.currentSortBy$ = this.facade.sortBy$.pipe(filter$1((sortBy) => !!sortBy), map$1((sortBy) => sortBy.join(',')));
36653
+ this.currentSortBy$ = this.facade.sortBy$.pipe(filter$1((sortBy) => !!sortBy), map$1((sortBy) => sortBy));
36481
36654
  }
36482
36655
  ngOnInit() {
36483
36656
  if (this.isQualitySortable) {
36484
36657
  this.choices.push({
36485
36658
  label: marker('results.sortBy.qualityScore'),
36486
- value: SortByEnum.QUALITY_SCORE.join(','),
36659
+ value: SortByEnum.QUALITY_SCORE,
36487
36660
  });
36488
36661
  }
36489
36662
  }
36490
- changeSortBy(criteriaAsString) {
36491
- this.searchService.setSortBy(criteriaAsString.split(','));
36663
+ changeSortBy(criteria) {
36664
+ this.searchService.setSortBy(criteria);
36492
36665
  }
36493
36666
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: SortByComponent, deps: [{ token: SearchFacade }, { token: SearchService }], target: i0.ɵɵFactoryTarget.Component }); }
36494
36667
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: SortByComponent, isStandalone: true, selector: "gn-ui-sort-by", inputs: { isQualitySortable: "isQualitySortable" }, ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'search.field.sortBy' | translate\"\n [choices]=\"choices\"\n (selectValue)=\"changeSortBy($event)\"\n [selected]=\"currentSortBy$ | async\"\n ariaName=\"search-sort-by\"\n></gn-ui-dropdown-selector>\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth", "disabled"], outputs: ["selectValue"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }] }); }
@@ -38171,13 +38344,24 @@ class DataService {
38171
38344
  if (!featureType) {
38172
38345
  throw new Error('wfs.featuretype.notfound');
38173
38346
  }
38347
+ const wfsVersion = endpoint.getVersion();
38348
+ const addSrsName = wfsVersion === '1.1.0' || wfsVersion === '2.0.0';
38349
+ const defaultCrs = featureType.defaultCrs;
38350
+ const shouldAddOutputCrs = addSrsName && defaultCrs;
38174
38351
  return {
38175
- all: featureType.outputFormats.reduce((prev, curr) => ({
38176
- ...prev,
38177
- [curr]: endpoint.getFeatureUrl(featureType.name, {
38178
- outputFormat: curr,
38179
- }),
38180
- }), {}),
38352
+ all: featureType.outputFormats.reduce((prev, curr) => {
38353
+ const isJsonFormat = curr.toLowerCase().includes('json');
38354
+ return {
38355
+ ...prev,
38356
+ [curr]: endpoint.getFeatureUrl(featureType.name, {
38357
+ outputFormat: curr,
38358
+ ...(shouldAddOutputCrs &&
38359
+ !isJsonFormat && {
38360
+ outputCrs: defaultCrs,
38361
+ }),
38362
+ }),
38363
+ };
38364
+ }, {}),
38181
38365
  geojson: endpoint.supportsJson(featureType.name)
38182
38366
  ? endpoint.getFeatureUrl(featureType.name, {
38183
38367
  asJson: true,
@@ -38852,6 +39036,8 @@ class ChartViewComponent {
38852
39036
  this.chartType$.next(value);
38853
39037
  }
38854
39038
  set userChartConfig(config) {
39039
+ if (!config)
39040
+ return;
38855
39041
  this.aggregation$.next(config.aggregation);
38856
39042
  this.xProperty$.next(config.xProperty);
38857
39043
  this.yProperty$.next(config.yProperty);
@@ -39289,6 +39475,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39289
39475
  type: Input
39290
39476
  }] } });
39291
39477
 
39478
+ class StacViewComponent {
39479
+ constructor() {
39480
+ this.currentTemporalExtent = null;
39481
+ this.isTemporalFilterModified = false;
39482
+ }
39483
+ onStartDateChange(date) {
39484
+ this.currentTemporalExtent = {
39485
+ ...this.currentTemporalExtent,
39486
+ start: date,
39487
+ };
39488
+ this.isTemporalFilterModified = true;
39489
+ }
39490
+ onEndDateChange(date) {
39491
+ this.currentTemporalExtent = {
39492
+ ...this.currentTemporalExtent,
39493
+ end: date,
39494
+ };
39495
+ this.isTemporalFilterModified = true;
39496
+ }
39497
+ onResetFilters() {
39498
+ this.currentTemporalExtent = this.initialTemporalExtent;
39499
+ this.isTemporalFilterModified = false;
39500
+ }
39501
+ ngOnInit() {
39502
+ this.currentTemporalExtent = this.initialTemporalExtent;
39503
+ }
39504
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StacViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39505
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: StacViewComponent, isStandalone: true, selector: "gn-ui-stac-view", inputs: { link: "link", initialTemporalExtent: "initialTemporalExtent" }, ngImport: i0, template: "<div\n class=\"w-full h-full flex flex-row mt-6 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n>\n <div class=\"flex-1 flex flex-col\">\n <div class=\"m-8\">\n <p class=\"mb-4\" translate>stac.filter.period</p>\n <p translate>stac.filter.from</p>\n <gn-ui-date-picker\n id=\"start-date-picker\"\n [date]=\"currentTemporalExtent?.start\"\n (dateChange)=\"onStartDateChange($event)\"\n />\n <p class=\"mt-4\" translate>stac.filter.to</p>\n <gn-ui-date-picker\n id=\"end-date-picker\"\n [date]=\"currentTemporalExtent?.end\"\n (dateChange)=\"onEndDateChange($event)\"\n />\n </div>\n\n <div class=\"mt-auto mb-8 mx-8\" *ngIf=\"isTemporalFilterModified\">\n <button\n id=\"reset-filters-button\"\n type=\"button\"\n class=\"flex items-center\"\n (click)=\"onResetFilters()\"\n >\n <span translate>stac.filter.reset</span>\n <ng-icon\n name=\"matDeleteOutline\"\n class=\"pointer-events-none ml-2\"\n ></ng-icon>\n </button>\n </div>\n </div>\n\n <div class=\"w-[655px] flex-shrink-0 flex items-center justify-center\">\n <span>Map...</span>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: DatePickerComponent, selector: "gn-ui-date-picker", inputs: ["date"], outputs: ["dateChange"] }, { kind: "component", type: NgIconComponent, selector: "ng-icon", inputs: ["name", "svg", "size", "strokeWidth", "color"] }, { kind: "directive", type: TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }], viewProviders: [provideIcons({ matDeleteOutline })], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39506
+ }
39507
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StacViewComponent, decorators: [{
39508
+ type: Component,
39509
+ args: [{ selector: 'gn-ui-stac-view', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
39510
+ CommonModule,
39511
+ DatePickerComponent,
39512
+ NgIconComponent,
39513
+ TranslateDirective,
39514
+ ], viewProviders: [provideIcons({ matDeleteOutline })], template: "<div\n class=\"w-full h-full flex flex-row mt-6 bg-white border border-gray-300 rounded-lg overflow-hidden\"\n>\n <div class=\"flex-1 flex flex-col\">\n <div class=\"m-8\">\n <p class=\"mb-4\" translate>stac.filter.period</p>\n <p translate>stac.filter.from</p>\n <gn-ui-date-picker\n id=\"start-date-picker\"\n [date]=\"currentTemporalExtent?.start\"\n (dateChange)=\"onStartDateChange($event)\"\n />\n <p class=\"mt-4\" translate>stac.filter.to</p>\n <gn-ui-date-picker\n id=\"end-date-picker\"\n [date]=\"currentTemporalExtent?.end\"\n (dateChange)=\"onEndDateChange($event)\"\n />\n </div>\n\n <div class=\"mt-auto mb-8 mx-8\" *ngIf=\"isTemporalFilterModified\">\n <button\n id=\"reset-filters-button\"\n type=\"button\"\n class=\"flex items-center\"\n (click)=\"onResetFilters()\"\n >\n <span translate>stac.filter.reset</span>\n <ng-icon\n name=\"matDeleteOutline\"\n class=\"pointer-events-none ml-2\"\n ></ng-icon>\n </button>\n </div>\n </div>\n\n <div class=\"w-[655px] flex-shrink-0 flex items-center justify-center\">\n <span>Map...</span>\n </div>\n</div>\n" }]
39515
+ }], propDecorators: { link: [{
39516
+ type: Input
39517
+ }], initialTemporalExtent: [{
39518
+ type: Input
39519
+ }] } });
39520
+
39292
39521
  /**
39293
39522
  * The Metadata View Facade is used to render complete metadata records.
39294
39523
  * Supply it with an incomplete record (at least containing the uuid) and the
@@ -39319,8 +39548,21 @@ class MdViewFacade {
39319
39548
  this.sourceOf$ = this.store.pipe(select(getSourceOf));
39320
39549
  this.chartConfig$ = this.store.pipe(select(getChartConfig));
39321
39550
  this.allLinks$ = this.metadata$.pipe(map$1((record) => 'onlineResources' in record ? record.onlineResources : []), shareReplay$1(1));
39551
+ this.resourceDoi$ = this.metadata$.pipe(map$1((record) => {
39552
+ if (!record?.resourceIdentifiers?.length)
39553
+ return null;
39554
+ const doiIdentifier = record.resourceIdentifiers.find((id) => id.codeSpace?.toLowerCase().includes('doi.org') ||
39555
+ id.code.startsWith('10.'));
39556
+ if (!doiIdentifier)
39557
+ return null;
39558
+ return {
39559
+ code: doiIdentifier.code,
39560
+ url: doiIdentifier.url ? doiIdentifier.url : null,
39561
+ };
39562
+ }), shareReplay$1(1));
39322
39563
  this.apiLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.API))), shareReplay$1(1));
39323
39564
  this.mapApiLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.MAP_API))), shareReplay$1(1));
39565
+ this.stacLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => link.type === 'service' && link.accessServiceProtocol === 'stac')), shareReplay$1(1));
39324
39566
  this.downloadLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.DOWNLOAD))));
39325
39567
  this.dataLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.DATA))));
39326
39568
  this.geoDataLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.GEODATA))));
@@ -39478,8 +39720,9 @@ class DataViewPermalinkComponent {
39478
39720
  set viewType(value) {
39479
39721
  this.viewType$.next(value);
39480
39722
  }
39481
- constructor(config, wcEmbedderBaseUrl, facade) {
39723
+ constructor(config, proxyPath, wcEmbedderBaseUrl, facade) {
39482
39724
  this.config = config;
39725
+ this.proxyPath = proxyPath;
39483
39726
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
39484
39727
  this.facade = facade;
39485
39728
  this.viewType$ = new BehaviorSubject('map');
@@ -39512,6 +39755,9 @@ class DataViewPermalinkComponent {
39512
39755
  url.searchParams.append('e', `gn-dataset-view-map`);
39513
39756
  }
39514
39757
  url.searchParams.append('a', `api-url=${this.config.basePath}`);
39758
+ if (this.proxyPath) {
39759
+ url.searchParams.append('a', `proxy-path=${this.proxyPath}`);
39760
+ }
39515
39761
  url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
39516
39762
  url.searchParams.append('a', `primary-color=#0f4395`);
39517
39763
  url.searchParams.append('a', `secondary-color=#8bc832`);
@@ -39520,7 +39766,7 @@ class DataViewPermalinkComponent {
39520
39766
  return url.toString();
39521
39767
  }));
39522
39768
  }
39523
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewPermalinkComponent, deps: [{ token: Configuration }, { token: WEB_COMPONENT_EMBEDDER_URL, optional: true }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
39769
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewPermalinkComponent, deps: [{ token: Configuration }, { token: PROXY_PATH, optional: true }, { token: WEB_COMPONENT_EMBEDDER_URL, optional: true }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
39524
39770
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataViewPermalinkComponent, isStandalone: true, selector: "gn-ui-data-view-permalink", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n *ngIf=\"wcEmbedderBaseUrl\"\n [text]=\"permalinkUrl$ | async\"\n [tooltipText]=\"'tooltip.url.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39525
39771
  }
39526
39772
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewPermalinkComponent, decorators: [{
@@ -39531,6 +39777,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39531
39777
  args: [Configuration]
39532
39778
  }] }, { type: undefined, decorators: [{
39533
39779
  type: Optional
39780
+ }, {
39781
+ type: Inject,
39782
+ args: [PROXY_PATH]
39783
+ }] }, { type: undefined, decorators: [{
39784
+ type: Optional
39534
39785
  }, {
39535
39786
  type: Inject,
39536
39787
  args: [WEB_COMPONENT_EMBEDDER_URL]
@@ -39639,8 +39890,9 @@ class DataViewWebComponentComponent {
39639
39890
  set viewType(value) {
39640
39891
  this.viewType$.next(value);
39641
39892
  }
39642
- constructor(config, facade) {
39893
+ constructor(config, proxyPath, facade) {
39643
39894
  this.config = config;
39895
+ this.proxyPath = proxyPath;
39644
39896
  this.facade = facade;
39645
39897
  this.viewType$ = new BehaviorSubject('map');
39646
39898
  this.webComponentHtml$ = combineLatest(this.viewType$, this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([viewType, config, metadata]) => {
@@ -39649,7 +39901,10 @@ class DataViewWebComponentComponent {
39649
39901
  const { aggregation, xProperty, yProperty, chartType } = config;
39650
39902
  return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${GEONETWORK_UI_TAG_NAME}/gn-wc.js"></script>
39651
39903
  <gn-dataset-view-chart
39652
- api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
39904
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"${this.proxyPath
39905
+ ? `
39906
+ proxy-path="${this.proxyPath}"`
39907
+ : ''}
39653
39908
  dataset-id="${metadata.uniqueIdentifier}"
39654
39909
  aggregation="${aggregation}"
39655
39910
  x-property="${xProperty}"
@@ -39668,7 +39923,10 @@ class DataViewWebComponentComponent {
39668
39923
  else if (viewType === 'table') {
39669
39924
  return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${GEONETWORK_UI_TAG_NAME}/gn-wc.js"></script>
39670
39925
  <gn-dataset-view-table
39671
- api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
39926
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"${this.proxyPath
39927
+ ? `
39928
+ proxy-path="${this.proxyPath}"`
39929
+ : ''}
39672
39930
  dataset-id="${metadata.uniqueIdentifier}"
39673
39931
  primary-color="#0f4395"
39674
39932
  secondary-color="#8bc832"
@@ -39681,7 +39939,10 @@ class DataViewWebComponentComponent {
39681
39939
  else {
39682
39940
  return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${GEONETWORK_UI_TAG_NAME}/gn-wc.js"></script>
39683
39941
  <gn-dataset-view-map
39684
- api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
39942
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"${this.proxyPath
39943
+ ? `
39944
+ proxy-path="${this.proxyPath}"`
39945
+ : ''}
39685
39946
  dataset-id="${metadata.uniqueIdentifier}"
39686
39947
  primary-color="#0f4395"
39687
39948
  secondary-color="#8bc832"
@@ -39693,7 +39954,7 @@ class DataViewWebComponentComponent {
39693
39954
  }
39694
39955
  }));
39695
39956
  }
39696
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewWebComponentComponent, deps: [{ token: Configuration }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
39957
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewWebComponentComponent, deps: [{ token: Configuration }, { token: PROXY_PATH, optional: true }, { token: MdViewFacade }], target: i0.ɵɵFactoryTarget.Component }); }
39697
39958
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: DataViewWebComponentComponent, isStandalone: true, selector: "gn-ui-data-view-web-component", inputs: { viewType: "viewType" }, ngImport: i0, template: "<gn-ui-copy-text-button\n [text]=\"webComponentHtml$ | async\"\n [rows]=\"3\"\n [tooltipText]=\"'tooltip.html.copy' | translate\"\n></gn-ui-copy-text-button>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "pipe", type: i1$2.AsyncPipe, name: "async" }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
39698
39959
  }
39699
39960
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewWebComponentComponent, decorators: [{
@@ -39702,6 +39963,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39702
39963
  }], ctorParameters: () => [{ type: Configuration, decorators: [{
39703
39964
  type: Inject,
39704
39965
  args: [Configuration]
39966
+ }] }, { type: undefined, decorators: [{
39967
+ type: Optional
39968
+ }, {
39969
+ type: Inject,
39970
+ args: [PROXY_PATH]
39705
39971
  }] }, { type: MdViewFacade }], propDecorators: { viewType: [{
39706
39972
  type: Input
39707
39973
  }] } });
@@ -40022,6 +40288,7 @@ class MapViewComponent {
40022
40288
  set exceedsLimit(value) {
40023
40289
  this.excludeWfs$.next(value);
40024
40290
  }
40291
+ // FIXME the map view component should not need a selectedView
40025
40292
  set selectedView(value) {
40026
40293
  this.selectedView$.next(value);
40027
40294
  }
@@ -40821,7 +41088,7 @@ const RECORD_RESOURCE_CREATED_FIELD = {
40821
41088
  gridColumnSpan: 1,
40822
41089
  };
40823
41090
  const RESOURCE_IDENTIFIER_FIELD = {
40824
- model: 'resourceIdentifier',
41091
+ model: 'resourceIdentifiers',
40825
41092
  formFieldConfig: {
40826
41093
  labelKey: marker('editor.record.form.field.resourceIdentifier'),
40827
41094
  },
@@ -43335,8 +43602,28 @@ class FormFieldComponent {
43335
43602
  get valueAsOnlineResources() {
43336
43603
  return this.value;
43337
43604
  }
43605
+ get valueAsResourceIdentifierCode() {
43606
+ const identifiers = this.value;
43607
+ return identifiers?.[0]?.code || '';
43608
+ }
43609
+ handleResourceIdentifierChange(code) {
43610
+ const identifiers = this.value;
43611
+ if (!code) {
43612
+ this.valueChange.emit(identifiers?.slice(1) || []);
43613
+ return;
43614
+ }
43615
+ if (identifiers?.[0]) {
43616
+ this.valueChange.emit([
43617
+ { ...identifiers[0], code },
43618
+ ...identifiers.slice(1),
43619
+ ]);
43620
+ }
43621
+ else {
43622
+ this.valueChange.emit([{ code }]);
43623
+ }
43624
+ }
43338
43625
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
43339
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { uniqueIdentifier: "uniqueIdentifier", model: "model", modelSpecifier: "modelSpecifier", componentName: "componentName", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden text-black/80\"\n (change)=\"valueChange.emit($event.target.value)\"\n [placeholder]=\"\n 'editor.record.form.field.title.placeholder' | translate\n \"\n >{{ valueAsString }}</textarea\n >\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifier'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'topics'\">\n <gn-ui-form-field-topics\n [value]=\"valueAsTopics\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-topics>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordLicences]=\"valueAsConstraints\"\n (recordLicencesChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["label", "recordLicences"], outputs: ["recordLicencesChange"] }, { kind: "component", type: FormFieldDateComponent, selector: "gn-ui-form-field-date", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "readonly", "invalid", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOverviewsComponent, selector: "gn-ui-form-field-overviews", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsForResourceComponent, selector: "gn-ui-form-field-contacts-for-resource", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineResourcesComponent, selector: "gn-ui-form-field-online-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineLinkResourcesComponent, selector: "gn-ui-form-field-online-link-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsComponent, selector: "gn-ui-form-field-contacts", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsComponent, selector: "gn-ui-form-field-constraints", inputs: ["label", "value", "constraintType"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsShortcutsComponent, selector: "gn-ui-form-field-constraints-shortcuts" }, { kind: "component", type: FormFieldSpatialToggleComponent, selector: "gn-ui-form-field-spatial-toggle" }, { kind: "component", type: FormFieldTopicsComponent, selector: "gn-ui-form-field-topics", inputs: ["value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "directive", type: i3$1.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
43626
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: FormFieldComponent, isStandalone: true, selector: "gn-ui-form-field", inputs: { uniqueIdentifier: "uniqueIdentifier", model: "model", modelSpecifier: "modelSpecifier", componentName: "componentName", config: "config", value: "value" }, outputs: { valueChange: "valueChange" }, viewQueries: [{ propertyName: "titleInput", first: true, predicate: ["titleInput"], descendants: true }], ngImport: i0, template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden text-black/80\"\n (change)=\"valueChange.emit($event.target.value)\"\n [placeholder]=\"\n 'editor.record.form.field.title.placeholder' | translate\n \"\n >{{ valueAsString }}</textarea\n >\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifiers'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsResourceIdentifierCode\"\n (valueChange)=\"handleResourceIdentifierChange($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'topics'\">\n <gn-ui-form-field-topics\n [value]=\"valueAsTopics\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-topics>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordLicences]=\"valueAsConstraints\"\n (recordLicencesChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$2.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "directive", type: i1$2.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1$2.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: TranslatePipe, name: "translate" }, { kind: "ngmodule", type: MatTooltipModule }, { kind: "directive", type: i2$2.MatTooltip, selector: "[matTooltip]", inputs: ["matTooltipPosition", "matTooltipPositionAtOrigin", "matTooltipDisabled", "matTooltipShowDelay", "matTooltipHideDelay", "matTooltipTouchGestures", "matTooltip", "matTooltipClass"], exportAs: ["matTooltip"] }, { kind: "component", type: FormFieldWrapperComponent, selector: "gn-ui-form-field-wrapper", inputs: ["label", "hint"] }, { kind: "component", type: FormFieldLicenseComponent, selector: "gn-ui-form-field-license", inputs: ["label", "recordLicences"], outputs: ["recordLicencesChange"] }, { kind: "component", type: FormFieldDateComponent, selector: "gn-ui-form-field-date", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldUpdateFrequencyComponent, selector: "gn-ui-form-field-update-frequency", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldTemporalExtentsComponent, selector: "gn-ui-form-field-temporal-extents", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSimpleComponent, selector: "gn-ui-form-field-simple", inputs: ["type", "readonly", "invalid", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldRichComponent, selector: "gn-ui-form-field-rich", inputs: ["label", "hint", "placeholder", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldSpatialExtentComponent, selector: "gn-ui-form-field-spatial-extent" }, { kind: "component", type: FormFieldKeywordsComponent, selector: "gn-ui-form-field-keywords", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOverviewsComponent, selector: "gn-ui-form-field-overviews", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsForResourceComponent, selector: "gn-ui-form-field-contacts-for-resource", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineResourcesComponent, selector: "gn-ui-form-field-online-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldOnlineLinkResourcesComponent, selector: "gn-ui-form-field-online-link-resources", inputs: ["metadataUuid", "value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldContactsComponent, selector: "gn-ui-form-field-contacts", inputs: ["value"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsComponent, selector: "gn-ui-form-field-constraints", inputs: ["label", "value", "constraintType"], outputs: ["valueChange"] }, { kind: "component", type: FormFieldConstraintsShortcutsComponent, selector: "gn-ui-form-field-constraints-shortcuts" }, { kind: "component", type: FormFieldSpatialToggleComponent, selector: "gn-ui-form-field-spatial-toggle" }, { kind: "component", type: FormFieldTopicsComponent, selector: "gn-ui-form-field-topics", inputs: ["value"], outputs: ["valueChange"] }, { kind: "ngmodule", type: TextFieldModule }, { kind: "directive", type: i3$1.CdkTextareaAutosize, selector: "textarea[cdkTextareaAutosize]", inputs: ["cdkAutosizeMinRows", "cdkAutosizeMaxRows", "cdkTextareaAutosize", "placeholder"], exportAs: ["cdkTextareaAutosize"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
43340
43627
  }
43341
43628
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldComponent, decorators: [{
43342
43629
  type: Component,
@@ -43363,7 +43650,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
43363
43650
  FormFieldSpatialToggleComponent,
43364
43651
  FormFieldTopicsComponent,
43365
43652
  TextFieldModule,
43366
- ], template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden text-black/80\"\n (change)=\"valueChange.emit($event.target.value)\"\n [placeholder]=\"\n 'editor.record.form.field.title.placeholder' | translate\n \"\n >{{ valueAsString }}</textarea\n >\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifier'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'topics'\">\n <gn-ui-form-field-topics\n [value]=\"valueAsTopics\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-topics>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordLicences]=\"valueAsConstraints\"\n (recordLicencesChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n" }]
43653
+ ], template: "<!-- TEMPORARY - disabling the open data switch -->\n<!-- <ng-container *ngIf=\"model === 'licenses'\">\n <gn-ui-form-field-open-data\n [value]=\"valueAsConstraints\"\n (valueChange)=\"valueChange.emit($event)\"\n (openDataChange)=\"toggleIsOpenData($event)\"\n ></gn-ui-form-field-open-data>\n</ng-container> -->\n<div class=\"flex flex-col h-full\">\n <ng-container *ngIf=\"withoutWrapper; else withGenericWrapper\">\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </ng-container>\n <ng-template #withGenericWrapper>\n <gn-ui-form-field-wrapper\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n >\n <ng-container *ngTemplateOutlet=\"fieldContent\"></ng-container>\n </gn-ui-form-field-wrapper>\n </ng-template>\n</div>\n\n<ng-template #fieldContent>\n <ng-container [ngSwitch]=\"model\">\n <ng-container *ngSwitchCase=\"'title'\">\n <div class=\"flex flex-row flex-start items-center gap-3 mb-[12px]\">\n <textarea\n #titleInput\n cdkTextareaAutosize\n #autosize=\"cdkTextareaAutosize\"\n cdkAutosizeMinRows=\"1\"\n data-test=\"recordTitleInput\"\n class=\"grow font-title text-3xl font-normal overflow-hidden text-black/80\"\n (change)=\"valueChange.emit($event.target.value)\"\n [placeholder]=\"\n 'editor.record.form.field.title.placeholder' | translate\n \"\n >{{ valueAsString }}</textarea\n >\n <div class=\"flex flex-row justify-between self-start mt-0.5\">\n <span\n class=\"material-symbols-outlined gn-ui-icon-small m-2 cursor-pointer\"\n (click)=\"focusTitleInput()\"\n >edit</span\n >\n <span\n *ngIf=\"config.hintKey\"\n class=\"material-symbols-outlined gn-ui-icon-small m-2\"\n [matTooltip]=\"config.hintKey! | translate\"\n matTooltipPosition=\"above\"\n >\n help\n </span>\n </div>\n </div>\n </ng-container>\n <ng-container *ngSwitchCase=\"'abstract'\">\n <gn-ui-form-field-rich\n [label]=\"config.labelKey! | translate\"\n [hint]=\"config.hintKey! | translate\"\n [value]=\"valueAsString\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-rich>\n </ng-container>\n <ng-container *ngSwitchCase=\"'overviews'\">\n <gn-ui-form-field-overviews\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOverviews\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-overviews>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceIdentifiers'\">\n <gn-ui-form-field-simple\n [type]=\"'text'\"\n [value]=\"valueAsResourceIdentifierCode\"\n (valueChange)=\"handleResourceIdentifierChange($event)\"\n ></gn-ui-form-field-simple>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceCreated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'resourceUpdated'\">\n <gn-ui-form-field-date\n [value]=\"valueAsDate\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-date>\n </ng-container>\n <ng-container *ngSwitchCase=\"'updateFrequency'\">\n <gn-ui-form-field-update-frequency\n [value]=\"valueAsUpdateFrequency\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-update-frequency>\n </ng-container>\n <ng-container *ngSwitchCase=\"'temporalExtents'\">\n <gn-ui-form-field-temporal-extents\n [value]=\"valueAsTemporalExtents\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-temporal-extents>\n </ng-container>\n <ng-container *ngSwitchCase=\"'spatialExtents'\">\n <gn-ui-form-field-spatial-extent></gn-ui-form-field-spatial-extent>\n </ng-container>\n <ng-container *ngSwitchCase=\"'keywords'\">\n <gn-ui-form-field-keywords\n [value]=\"valueAsKeywords\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-keywords>\n </ng-container>\n <ng-container *ngSwitchCase=\"'topics'\">\n <gn-ui-form-field-topics\n [value]=\"valueAsTopics\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-topics>\n </ng-container>\n <ng-container *ngSwitchCase=\"'licenses'\">\n <gn-ui-form-field-license\n [label]=\"config.labelKey! | translate\"\n [recordLicences]=\"valueAsConstraints\"\n (recordLicencesChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-license>\n </ng-container>\n\n <ng-container *ngSwitchCase=\"'legalConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'securityConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container>\n </ng-container>\n <ng-container *ngSwitchCase=\"'otherConstraints'\">\n <ng-container *ngTemplateOutlet=\"formFieldConstraints\"></ng-container\n ></ng-container>\n <ng-template #formFieldConstraints>\n <gn-ui-form-field-constraints\n [label]=\"config.labelKey\"\n [value]=\"valueAsConstraints\"\n [constraintType]=\"model\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-constraints\n ></ng-template>\n\n <ng-container *ngSwitchCase=\"'contactsForResource'\">\n <gn-ui-form-field-contacts-for-resource\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts-for-resource>\n </ng-container>\n <ng-container *ngSwitchCase=\"'contacts'\">\n <gn-ui-form-field-contacts\n [value]=\"valueAsIndividuals\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-contacts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:!link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-resources>\n </ng-container>\n <ng-container *ngSwitchCase=\"'onlineResources'\">\n <gn-ui-form-field-online-link-resources\n *ngIf=\"modelSpecifier === 'onlineResourceType:link'\"\n [metadataUuid]=\"uniqueIdentifier\"\n [value]=\"valueAsOnlineResources\"\n (valueChange)=\"valueChange.emit($event)\"\n ></gn-ui-form-field-online-link-resources>\n </ng-container>\n </ng-container>\n\n <ng-container *ngIf=\"!model\">\n <ng-container [ngSwitch]=\"componentName\">\n <ng-container *ngSwitchCase=\"'form-field-constraints-shortcuts'\">\n <gn-ui-form-field-constraints-shortcuts></gn-ui-form-field-constraints-shortcuts>\n </ng-container>\n <ng-container *ngSwitchCase=\"'form-field-spatial-toggle'\">\n <gn-ui-form-field-spatial-toggle></gn-ui-form-field-spatial-toggle>\n </ng-container>\n </ng-container>\n </ng-container>\n</ng-template>\n" }]
43367
43654
  }], propDecorators: { uniqueIdentifier: [{
43368
43655
  type: Input
43369
43656
  }], model: [{
@@ -43788,6 +44075,9 @@ class RouterService {
43788
44075
  getOrganizationPageRoute() {
43789
44076
  return ROUTER_ROUTE_ORGANIZATION;
43790
44077
  }
44078
+ getDefaultSort() {
44079
+ return SortByEnum.RESOURCE_DATES;
44080
+ }
43791
44081
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterService, deps: [{ token: ROUTER_CONFIG }, { token: i1$d.Router }], target: i0.ɵɵFactoryTarget.Injectable }); }
43792
44082
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterService, providedIn: 'root' }); }
43793
44083
  }
@@ -43948,13 +44238,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
43948
44238
  }], ctorParameters: () => [{ type: i1$3.Store }, { type: RouterService }] });
43949
44239
 
43950
44240
  class RouterEffects {
43951
- constructor(_actions$, _router, _location, facade, routerConfig, fieldsService) {
44241
+ constructor(_actions$, _router, _location, facade, routerConfig, fieldsService, routerService) {
43952
44242
  this._actions$ = _actions$;
43953
44243
  this._router = _router;
43954
44244
  this._location = _location;
43955
44245
  this.facade = facade;
43956
44246
  this.routerConfig = routerConfig;
43957
44247
  this.fieldsService = fieldsService;
44248
+ this.routerService = routerService;
43958
44249
  this.navigate$ = createEffect(() => this._actions$.pipe(ofType(goAction), tap$1(({ path, query: queryParams, queryParamsHandling }) => {
43959
44250
  this._router.navigate([path], {
43960
44251
  queryParams,
@@ -43966,14 +44257,14 @@ class RouterEffects {
43966
44257
  .pipe(map$1((filters) => [searchParams, filters]))), startWith([null, {}]), pairwise(), map$1(([[oldParams, oldFilters], [newParams, newFilters]]) => {
43967
44258
  let sortBy = ROUTE_PARAMS.SORT in newParams
43968
44259
  ? sortByFromString(newParams[ROUTE_PARAMS.SORT])
43969
- : SortByEnum.CHANGE_DATE;
44260
+ : this.routerService.getDefaultSort();
43970
44261
  let pageNumber = ROUTE_PARAMS.PAGE in newParams
43971
44262
  ? parseInt(newParams[ROUTE_PARAMS.PAGE])
43972
44263
  : 1;
43973
44264
  if (oldParams !== null) {
43974
44265
  const oldSort = ROUTE_PARAMS.SORT in oldParams
43975
44266
  ? sortByFromString(oldParams[ROUTE_PARAMS.SORT])
43976
- : SortByEnum.CHANGE_DATE;
44267
+ : this.routerService.getDefaultSort();
43977
44268
  if (JSON.stringify(sortBy) === JSON.stringify(oldSort)) {
43978
44269
  sortBy = null;
43979
44270
  }
@@ -44030,7 +44321,7 @@ class RouterEffects {
44030
44321
  this.navigateBack$ = createEffect(() => this._actions$.pipe(ofType(backAction), tap$1(() => this._location.back())), { dispatch: false });
44031
44322
  this.navigateForward$ = createEffect(() => this._actions$.pipe(ofType(forwardAction), tap$1(() => this._location.forward())), { dispatch: false });
44032
44323
  }
44033
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects, deps: [{ token: i1$c.Actions }, { token: i1$d.Router }, { token: i1$2.Location }, { token: RouterFacade }, { token: ROUTER_CONFIG }, { token: FieldsService }], target: i0.ɵɵFactoryTarget.Injectable }); }
44324
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects, deps: [{ token: i1$c.Actions }, { token: i1$d.Router }, { token: i1$2.Location }, { token: RouterFacade }, { token: ROUTER_CONFIG }, { token: FieldsService }, { token: RouterService }], target: i0.ɵɵFactoryTarget.Injectable }); }
44034
44325
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects }); }
44035
44326
  }
44036
44327
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects, decorators: [{
@@ -44038,7 +44329,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
44038
44329
  }], ctorParameters: () => [{ type: i1$c.Actions }, { type: i1$d.Router }, { type: i1$2.Location }, { type: RouterFacade }, { type: undefined, decorators: [{
44039
44330
  type: Inject,
44040
44331
  args: [ROUTER_CONFIG]
44041
- }] }, { type: FieldsService }] });
44332
+ }] }, { type: FieldsService }, { type: RouterService }] });
44042
44333
 
44043
44334
  class DefaultRouterModule {
44044
44335
  constructor(routerService) {
@@ -44176,5 +44467,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
44176
44467
  * Generated bundle index. Do not edit.
44177
44468
  */
44178
44469
 
44179
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, ActionMenuComponent, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, CellPopinComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DISABLE_AUTH, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalLinkCardComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetItemComponent, FacetListComponent, FacetsContainerComponent, FavoriteStarComponent, FavoritesService, FeatureCatalogListComponent, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldTopicsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GEONETWORK_UI_TAG_NAME, GEONETWORK_UI_VERSION, GeoDataBadgeComponent, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InlineFilterComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, KindBadgeComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MetadataQualityPanelComponent, ModalDialogComponent, MultilingualPanelComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PopoverComponent, PopupAlertComponent, PossibleResourceTypes, PossibleResourceTypesDefinition, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_DATASET_URL_TOKEN, RECORD_REUSE_URL_TOKEN, RECORD_SERVICE_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_REUSE, ROUTER_ROUTE_SEARCH, ROUTER_ROUTE_SERVICE, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordKindField, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResourceTypeLegacyField, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsHitsSearchKindComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchFeatureCatalogComponent, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, ServiceCapabilitiesComponent, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpatialExtentComponent, SpinningLoaderComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEBUG_CONFIG, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, TruncatedTextComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getAllKeysValidator, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryBoundingBox, getGeometryFromGeoJSON, getGlobalConfig, getIsMobile, getJsonDataItemsProxy, getLayers, getLinkId, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getQualityValidators, getResourceType, getReuseType, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, handleScrollOnNavigation, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, kindToCodeListValue, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, matchesNoApplicableConstraint, matchesNoKnownConstraint, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, organizationsServiceFactory, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideI18n, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, toLang2, toLang3, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateLanguages, updateRecordField, updateRecordLanguages, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
44470
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AbstractSearchField, ActionMenuComponent, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, ApplicationBannerComponent, AuthService, AutocompleteComponent, AvailableServicesField, AvatarComponent, AvatarServiceInterface, BASEMAP_LAYERS, BadgeComponent, BaseConverter, BaseFileReader, BaseReader, BlockListComponent, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CarouselComponent, CatalogTitleComponent, CellPopinComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ClearError, ClearResults, ColorScaleComponent, ConfirmationDialogComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_GN4_LOGIN_URL, DEFAULT_GN4_LOGOUT_URL, DEFAULT_GN4_SETTINGS_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DISABLE_AUTH, DO_NOT_USE_DEFAULT_BASEMAP, DataService, DataTableComponent, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DatePickerComponent, DateRangeDropdownComponent, DateRangePickerComponent, DateRangeSearchField, DateService, DcatApConverter, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EXTERNAL_VIEWER_OPEN_NEW_TAB, EXTERNAL_VIEWER_URL_TEMPLATE, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorComponent, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalLinkCardComponent, ExternalViewerButtonComponent, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FILTER_SUMMARY_IGNORE_LIST, FORMATS, FacetBlockComponent, FacetItemComponent, FacetListComponent, FacetsContainerComponent, FavoriteStarComponent, FavoritesService, FeatureCatalogListComponent, FeatureDetailComponent, FeatureEditorModule, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileInputComponent, FileTranslateLoader, FilesDropDirective, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldDateComponent, FormFieldFileComponent, FormFieldKeywordsComponent, FormFieldLicenseComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentsComponent, FormFieldTopicsComponent, FormFieldWrapperComponent, FullTextSearchField, FuzzySearchComponent, GEONETWORK_UI_TAG_NAME, GEONETWORK_UI_VERSION, GeoDataBadgeComponent, GeoTableViewComponent, GeocodingComponent, GeojsonReader, Gn4Converter, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GnUiHumanizeDateDirective, GpfApiDlComponent, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageInputComponent, ImageOverlayPreviewComponent, ImportRecordComponent, InlineFilterComponent, InteractiveTableColumnComponent, InteractiveTableComponent, InternalLinkCardComponent, IsSpatialSearchField, Iso191153Converter, Iso19139Converter, KindBadgeComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LOGIN_URL, LOGOUT_URL, LONLAT_CRS_CODES, LanguageSwitcherComponent, LayersPanelComponent, LicenseSearchField, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_FEATURE_KEY, MAP_VIEW_CONSTRAINTS, METADATA_LANGUAGE, MapContainerComponent, MapFacade, MapLegendComponent, MapStateContainerComponent, MapStyleService, MapUtilsService, MapViewComponent, MarkdownEditorComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataDoiComponent, MetadataInfoComponent, MetadataLinkType, MetadataMapperContext, MetadataQualityComponent, MetadataQualityItemComponent, MetadataQualityPanelComponent, ModalDialogComponent, MultilingualPanelComponent, MultilingualSearchField, MyOrgService, NAMESPACES, NOT_APPLICABLE_CONSTRAINT, NOT_KNOWN_CONSTRAINT, NotificationComponent, NotificationsContainerComponent, NotificationsService, ORGANIZATIONS_STRATEGY, ORGANIZATION_PAGE_URL_TOKEN, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationSearchField, OrganizationsFromGroupsService, OrganizationsFromMetadataService, OrganizationsServiceInterface, OwnerSearchField, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PaginationDotsComponent, PatchResultsAggregations, PlatformServiceInterface, PopoverComponent, PopupAlertComponent, PossibleResourceTypes, PossibleResourceTypesDefinition, PreviousNextButtonsComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_DATASET_URL_TOKEN, RECORD_REUSE_URL_TOKEN, RECORD_SERVICE_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_ORGANIZATION, ROUTER_ROUTE_REUSE, ROUTER_ROUTE_SEARCH, ROUTER_ROUTE_SERVICE, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordKindField, RecordMetaComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResourceTypeLegacyField, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsHitsSearchKindComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, ResultsTableContainerComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SETTINGS_URL, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchFeatureCatalogComponent, SearchFiltersSummaryComponent, SearchFiltersSummaryItemComponent, SearchInputComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, ServiceCapabilitiesComponent, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SimpleSearchField, SiteTitleComponent, SortByComponent, SortableListComponent, SourceLabelComponent, SourcesService, SpatialExtentComponent, SpinningLoaderComponent, StacViewComponent, StarToggleComponent, StickyHeaderComponent, SupportedTypes, SwitchToggleComponent, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEBUG_CONFIG, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, TranslatedSearchField, TruncatedTextComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UpdateConfigAggregations, UpdateFilters, UrlInputComponent, UserFeedbackItemComponent, UserPreviewComponent, UserSearchField, VECTOR_STYLE_DEFAULT, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, XmlParseError, _reset, allChildrenElement, appConfigWithTranslationFixture, appendChildTree, appendChildren, assertValidXml, blockModelFixture, bytesToMegabytes, canEditRecord, checkFileFormat, clearSelectedFeatures, createChild, createDocument, createElement, createFuzzyFilter, createNestedChild, createNestedElement, currentPage, defaultMapStyleFixture, defaultMapStyleHlFixture, downgradeImage, downsizeImage, draftSaveSuccess, dragPanCondition, dropEmptyTranslations, editorReducer, emptyBlockModelFixture, findChildElement, findChildOrCreate, findChildrenElement, findConverterForDocument, findNestedChildOrCreate, findNestedElement, findNestedElements, findParent, firstChildElement, formatDate, formatUserInfo, getAllKeysValidator, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryBoundingBox, getGeometryFromGeoJSON, getGlobalConfig, getIsMobile, getJsonDataItemsProxy, getLayers, getLinkId, getLinkLabel, getLinkPriority, getMapContext, getMapContextLayerFromConfig, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getNamespace, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getQualityValidators, getResourceType, getReuseType, getRootElement, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSelectedFeatures, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, handleScrollOnNavigation, hasRecordChangedSinceDraft, hasRecordChangedSinceDraftSuccess, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isDateRange, isFormatInQueryParam, isPublished, itemModelFixture, kindToCodeListValue, loadAppConfig, malformedConfigFixture, mapConfigFixture, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, matchesNoApplicableConstraint, matchesNoKnownConstraint, megabytesToBytes, mimeTypeToFormat, minimalAppConfigFixture, missingMandatoryConfigFixture, mouseWheelZoomCondition, noDuplicateFileName, okAppConfigFixture, openDataset, openRecord, organizationsServiceFactory, parse, parseXmlString, placeholder, prioritizePageScroll, propagateToDocumentOnly, provideGn4, provideI18n, provideRepositoryUrl, readAttribute, readDataset, readDatasetHeaders, readText, reducer$2 as reducer, reducerSearch, removeAllChildren, removeChildren, removeChildrenByName, removeSearchParams, removeWhitespace, renameElements, saveRecord, saveRecordFailure, saveRecordSuccess, selectCanEditRecord, selectCurrentPage, selectEditorConfig, selectEditorState, selectFallback, selectFallbackFields, selectField, selectHasRecordChanged, selectIsPublished, selectRecord, selectRecordChangedSinceSave, selectRecordSaveError, selectRecordSaving, selectRecordSections, selectRecordSource, selectTranslatedField, selectTranslatedValue, setContext, setCurrentPage, setFieldVisibility, setSelectedFeatures, setTextContent, someHabTableItemFixture, sortByFromString, sortByToString, sortByToStrings, stripHtml, stripNamespace, tableItemsFixture, toDate, toLang2, toLang3, totalPages, undoRecordDraft, unrecognizedKeysConfigFixture, updateLanguages, updateRecordField, updateRecordLanguages, wmsLayerFlatten, writeAttribute, wrongLanguageCodeConfigFixture, xmlToString };
44180
44471
  //# sourceMappingURL=geonetwork-ui.mjs.map