geonetwork-ui 2.8.0-dev.6f6597946 → 2.8.0-dev.7ecc6ee1d

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 (184) 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/platform/gn4-platform.service.mjs +10 -10
  9. package/esm2022/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.mjs +3 -2
  10. package/esm2022/libs/common/domain/src/index.mjs +3 -0
  11. package/esm2022/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.mjs +1 -1
  12. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +3 -1
  13. package/esm2022/libs/common/domain/src/lib/model/search/sort-by.model.mjs +6 -1
  14. package/esm2022/libs/common/domain/src/lib/platform.service.interface.mjs +1 -1
  15. package/esm2022/libs/feature/dataviz/src/index.mjs +2 -1
  16. package/esm2022/libs/feature/dataviz/src/lib/chart-view/chart-view.component.mjs +3 -1
  17. package/esm2022/libs/feature/dataviz/src/lib/service/data.service.mjs +18 -7
  18. package/esm2022/libs/feature/dataviz/src/lib/stac-view/stac-view.component.mjs +51 -0
  19. package/esm2022/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.mjs +23 -3
  20. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +2 -2
  21. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -4
  22. package/esm2022/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.mjs +23 -8
  23. package/esm2022/libs/feature/record/src/lib/state/mdview.facade.mjs +14 -1
  24. package/esm2022/libs/feature/router/src/lib/default/router.service.mjs +5 -1
  25. package/esm2022/libs/feature/router/src/lib/default/state/router.effects.mjs +9 -7
  26. package/esm2022/libs/feature/search/src/lib/sort-by/sort-by.component.mjs +8 -12
  27. package/esm2022/libs/ui/elements/src/index.mjs +2 -1
  28. package/esm2022/libs/ui/elements/src/lib/external-link-card/external-link-card.component.mjs +11 -4
  29. package/esm2022/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.mjs +37 -0
  30. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +5 -9
  31. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.mjs +5 -5
  32. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +2 -3
  33. package/esm2022/libs/util/i18n/src/lib/date-locales.mjs +33 -0
  34. package/esm2022/libs/util/shared/src/index.mjs +2 -1
  35. package/esm2022/libs/util/shared/src/lib/humanize-date.directive.mjs +33 -0
  36. package/esm2022/libs/util/shared/src/lib/links/link-classifier.service.mjs +5 -1
  37. package/esm2022/libs/util/shared/src/lib/links/link-utils.mjs +12 -1
  38. package/esm2022/libs/util/shared/src/lib/services/date.service.mjs +19 -2
  39. package/esm2022/libs/util/shared/src/lib/utils/sort-by.mjs +9 -6
  40. package/esm2022/translations/de.json +16 -3
  41. package/esm2022/translations/en.json +16 -4
  42. package/esm2022/translations/es.json +15 -2
  43. package/esm2022/translations/fr.json +16 -3
  44. package/esm2022/translations/it.json +17 -4
  45. package/esm2022/translations/nl.json +15 -2
  46. package/esm2022/translations/pt.json +15 -2
  47. package/esm2022/translations/sk.json +16 -3
  48. package/fesm2022/geonetwork-ui-date-locales-MYnkDJ5h.mjs +35 -0
  49. package/fesm2022/geonetwork-ui-date-locales-MYnkDJ5h.mjs.map +1 -0
  50. package/fesm2022/geonetwork-ui.mjs +442 -152
  51. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  52. package/index.d.ts +1 -0
  53. package/index.d.ts.map +1 -1
  54. package/index.ts +1 -0
  55. package/libs/api/metadata-converter/src/lib/common/distribution.mapper.d.ts.map +1 -1
  56. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  57. package/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.d.ts.map +1 -1
  58. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +5 -1
  59. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  60. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  61. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts +7 -7
  62. package/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.d.ts.map +1 -1
  63. package/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.d.ts.map +1 -1
  64. package/libs/common/domain/src/index.d.ts +3 -0
  65. package/libs/common/domain/src/index.d.ts.map +1 -0
  66. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts +1 -1
  67. package/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.d.ts.map +1 -1
  68. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +7 -2
  69. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  70. package/libs/common/domain/src/lib/model/search/sort-by.model.d.ts.map +1 -1
  71. package/libs/common/domain/src/lib/platform.service.interface.d.ts +1 -1
  72. package/libs/common/domain/src/lib/platform.service.interface.d.ts.map +1 -1
  73. package/libs/feature/dataviz/src/index.d.ts +1 -0
  74. package/libs/feature/dataviz/src/index.d.ts.map +1 -1
  75. package/libs/feature/dataviz/src/lib/chart-view/chart-view.component.d.ts.map +1 -1
  76. package/libs/feature/dataviz/src/lib/service/data.service.d.ts.map +1 -1
  77. package/libs/feature/dataviz/src/lib/stac-view/stac-view.component.d.ts +16 -0
  78. package/libs/feature/dataviz/src/lib/stac-view/stac-view.component.d.ts.map +1 -0
  79. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts +2 -0
  80. package/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.d.ts.map +1 -1
  81. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts +3 -2
  82. package/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.d.ts.map +1 -1
  83. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts +3 -2
  84. package/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.d.ts.map +1 -1
  85. package/libs/feature/record/src/lib/state/mdview.facade.d.ts +28 -24
  86. package/libs/feature/record/src/lib/state/mdview.facade.d.ts.map +1 -1
  87. package/libs/feature/router/src/lib/default/router.service.d.ts +2 -0
  88. package/libs/feature/router/src/lib/default/router.service.d.ts.map +1 -1
  89. package/libs/feature/router/src/lib/default/state/router.effects.d.ts +3 -1
  90. package/libs/feature/router/src/lib/default/state/router.effects.d.ts.map +1 -1
  91. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts +4 -3
  92. package/libs/feature/search/src/lib/sort-by/sort-by.component.d.ts.map +1 -1
  93. package/libs/ui/elements/src/index.d.ts +1 -0
  94. package/libs/ui/elements/src/index.d.ts.map +1 -1
  95. package/libs/ui/elements/src/lib/downloads-list/downloads-list.component.d.ts +1 -1
  96. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts +3 -2
  97. package/libs/ui/elements/src/lib/external-link-card/external-link-card.component.d.ts.map +1 -1
  98. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts +8 -0
  99. package/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.d.ts.map +1 -0
  100. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +0 -2
  101. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  102. package/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.d.ts.map +1 -1
  103. package/libs/util/i18n/src/lib/date-locales.d.ts +5 -0
  104. package/libs/util/i18n/src/lib/date-locales.d.ts.map +1 -0
  105. package/libs/util/shared/src/index.d.ts +1 -0
  106. package/libs/util/shared/src/index.d.ts.map +1 -1
  107. package/libs/util/shared/src/lib/humanize-date.directive.d.ts +15 -0
  108. package/libs/util/shared/src/lib/humanize-date.directive.d.ts.map +1 -0
  109. package/libs/util/shared/src/lib/links/link-classifier.service.d.ts.map +1 -1
  110. package/libs/util/shared/src/lib/links/link-utils.d.ts +6 -0
  111. package/libs/util/shared/src/lib/links/link-utils.d.ts.map +1 -1
  112. package/libs/util/shared/src/lib/services/date.service.d.ts +4 -0
  113. package/libs/util/shared/src/lib/services/date.service.d.ts.map +1 -1
  114. package/libs/util/shared/src/lib/utils/sort-by.d.ts.map +1 -1
  115. package/package.json +1 -1
  116. package/src/libs/api/metadata-converter/src/lib/common/distribution.mapper.ts +2 -0
  117. package/src/libs/api/metadata-converter/src/lib/dcat-ap/dcat-ap.converter.ts +2 -2
  118. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +1 -1
  119. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.service+eaux-usees.ts +1 -1
  120. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +5 -2
  121. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +1 -1
  122. package/src/libs/api/metadata-converter/src/lib/fixtures/georhena.records.ts +1 -1
  123. package/src/libs/api/metadata-converter/src/lib/fixtures/metawal.records.ts +2 -2
  124. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.reuse.ts +1 -1
  125. package/src/libs/api/metadata-converter/src/lib/fixtures/wallonie.records.service+napitswallonia.ts +1 -1
  126. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +28 -0
  127. package/src/libs/api/metadata-converter/src/lib/iso19139/iso19139.converter.ts +13 -6
  128. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +6 -2
  129. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +4 -2
  130. package/src/libs/api/repository/src/lib/gn4/platform/gn4-platform.service.ts +37 -36
  131. package/src/libs/api/repository/src/lib/gn4/settings/gn4-settings.service.ts +3 -2
  132. package/src/libs/common/domain/src/index.ts +2 -0
  133. package/src/libs/common/domain/src/lib/model/dataviz/dataviz-configuration.model.ts +1 -1
  134. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +12 -1
  135. package/src/libs/common/domain/src/lib/model/search/sort-by.model.ts +5 -0
  136. package/src/libs/common/domain/src/lib/platform.service.interface.ts +1 -1
  137. package/src/libs/common/fixtures/src/lib/elasticsearch/metadata-links.fixtures.ts +5 -0
  138. package/src/libs/common/fixtures/src/lib/link.fixtures.ts +19 -0
  139. package/src/libs/feature/dataviz/src/index.ts +1 -0
  140. package/src/libs/feature/dataviz/src/lib/chart-view/chart-view.component.ts +1 -0
  141. package/src/libs/feature/dataviz/src/lib/service/data.service.ts +16 -5
  142. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.css +0 -0
  143. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.html +40 -0
  144. package/src/libs/feature/dataviz/src/lib/stac-view/stac-view.component.ts +62 -0
  145. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.html +3 -3
  146. package/src/libs/feature/editor/src/lib/components/record-form/form-field/form-field.component.ts +30 -0
  147. package/src/libs/feature/editor/src/lib/fields.config.ts +1 -1
  148. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +7 -1
  149. package/src/libs/feature/record/src/lib/data-view-web-component/data-view-web-component.component.ts +23 -4
  150. package/src/libs/feature/record/src/lib/state/mdview.facade.ts +30 -1
  151. package/src/libs/feature/router/src/lib/default/router.service.ts +8 -0
  152. package/src/libs/feature/router/src/lib/default/state/router.effects.ts +6 -7
  153. package/src/libs/feature/search/src/lib/sort-by/sort-by.component.ts +8 -12
  154. package/src/libs/ui/elements/src/index.ts +1 -0
  155. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.html +43 -22
  156. package/src/libs/ui/elements/src/lib/external-link-card/external-link-card.component.ts +12 -3
  157. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.css +0 -0
  158. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.html +31 -0
  159. package/src/libs/ui/elements/src/lib/metadata-doi/metadata-doi.component.ts +30 -0
  160. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +67 -21
  161. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +2 -9
  162. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.html +1 -1
  163. package/src/libs/ui/elements/src/lib/user-feedback-item/user-feedback-item.component.ts +2 -2
  164. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.ts +4 -2
  165. package/src/libs/util/i18n/src/lib/date-locales.ts +63 -0
  166. package/src/libs/util/shared/src/index.ts +1 -0
  167. package/src/libs/util/shared/src/lib/humanize-date.directive.ts +35 -0
  168. package/src/libs/util/shared/src/lib/links/link-classifier.service.ts +4 -0
  169. package/src/libs/util/shared/src/lib/links/link-utils.ts +11 -0
  170. package/src/libs/util/shared/src/lib/services/date.service.ts +27 -1
  171. package/src/libs/util/shared/src/lib/utils/sort-by.ts +8 -5
  172. package/translations/de.json +16 -3
  173. package/translations/en.json +16 -4
  174. package/translations/es.json +15 -2
  175. package/translations/fr.json +16 -3
  176. package/translations/it.json +17 -4
  177. package/translations/nl.json +15 -2
  178. package/translations/pt.json +15 -2
  179. package/translations/sk.json +16 -3
  180. package/esm2022/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.mjs +0 -59
  181. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts +0 -11
  182. package/libs/ui/elements/src/lib/user-feedback-item/time-since.pipe.d.ts.map +0 -1
  183. package/src/libs/common/domain/src/lib/index.ts +0 -2
  184. 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';
@@ -24644,9 +24779,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
24644
24779
  }]
24645
24780
  }], ctorParameters: () => [{ type: i0.Injector }, { type: i1$2.Location }] });
24646
24781
 
24782
+ const DEFAULT_LANGUAGE = 'en';
24647
24783
  class DateService {
24648
24784
  constructor(translateService) {
24649
24785
  this.translateService = translateService;
24786
+ this.dateLocales = import('./geonetwork-ui-date-locales-MYnkDJ5h.mjs').then((obj) => obj.default);
24650
24787
  }
24651
24788
  getDateObject(date) {
24652
24789
  if (typeof date === 'string') {
@@ -24659,10 +24796,15 @@ class DateService {
24659
24796
  return date;
24660
24797
  }
24661
24798
  getLocaleAndDate(date) {
24662
- const locale = this.translateService.currentLang || 'en-US';
24799
+ const locale = this.translateService.currentLang || DEFAULT_LANGUAGE;
24663
24800
  const dateObj = this.getDateObject(date);
24664
24801
  return { locale, dateObj };
24665
24802
  }
24803
+ async getDateLocale() {
24804
+ const lang = this.translateService.currentLang || DEFAULT_LANGUAGE;
24805
+ const locales = await this.dateLocales;
24806
+ return locales[lang];
24807
+ }
24666
24808
  formatDate(date, options) {
24667
24809
  const { locale, dateObj } = this.getLocaleAndDate(date);
24668
24810
  return dateObj.toLocaleDateString(locale, options);
@@ -24671,6 +24813,15 @@ class DateService {
24671
24813
  const { locale, dateObj } = this.getLocaleAndDate(date);
24672
24814
  return dateObj.toLocaleString(locale, options);
24673
24815
  }
24816
+ async formatRelativeDateTime(date) {
24817
+ const dateObj = this.getDateObject(date);
24818
+ const now = new Date();
24819
+ const locale = await this.getDateLocale();
24820
+ return formatDistance(dateObj, now, {
24821
+ addSuffix: true,
24822
+ locale: locale,
24823
+ });
24824
+ }
24674
24825
  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 }); }
24675
24826
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateService, providedIn: 'root' }); }
24676
24827
  }
@@ -24981,13 +25132,16 @@ function sortByToStrings(sortBy) {
24981
25132
  return array.map((param) => `${param[0] === 'desc' ? '-' : ''}${param[1]}`);
24982
25133
  }
24983
25134
  function sortByToString(sortBy) {
24984
- return sortByToStrings(sortBy)[0];
25135
+ return sortByToStrings(sortBy).join(',');
24985
25136
  }
24986
25137
  function sortByFromString(sortByString) {
24987
- return [
24988
- sortByString.startsWith('-') ? 'desc' : 'asc',
24989
- sortByString.startsWith('-') ? sortByString.substring(1) : sortByString,
24990
- ];
25138
+ const fields = sortByString
25139
+ .split(',')
25140
+ .map((field) => [
25141
+ field.startsWith('-') ? 'desc' : 'asc',
25142
+ field.startsWith('-') ? field.substring(1) : field,
25143
+ ]);
25144
+ return fields.length > 1 ? fields : fields[0];
24991
25145
  }
24992
25146
 
24993
25147
  const stripHtml = function (html) {
@@ -25185,6 +25339,12 @@ const FORMATS = {
25185
25339
  color: '#5A9E6F',
25186
25340
  mimeTypes: ['image/webp'],
25187
25341
  },
25342
+ postgis: {
25343
+ extensions: ['postgis'],
25344
+ priority: 18,
25345
+ color: '#336791',
25346
+ mimeTypes: [],
25347
+ },
25188
25348
  };
25189
25349
  function getFormatPriority(linkFormat) {
25190
25350
  for (const format in FORMATS) {
@@ -25215,6 +25375,11 @@ function getFileFormatFromServiceOutput(serviceOutput) {
25215
25375
  return null;
25216
25376
  }
25217
25377
  function getFileFormat(link) {
25378
+ if ('accessServiceProtocol' in link) {
25379
+ if (link.accessServiceProtocol in FORMATS) {
25380
+ return link.accessServiceProtocol;
25381
+ }
25382
+ }
25218
25383
  if ('mimeType' in link) {
25219
25384
  const mimeTypeFormat = mimeTypeToFormat(link.mimeType);
25220
25385
  if (mimeTypeFormat !== null) {
@@ -25380,6 +25545,10 @@ class LinkClassifierService {
25380
25545
  return [LinkUsage.API, LinkUsage.DOWNLOAD, LinkUsage.GEODATA];
25381
25546
  case 'GPFDL':
25382
25547
  return [LinkUsage.API];
25548
+ case 'postgis':
25549
+ return [LinkUsage.UNKNOWN];
25550
+ case 'stac':
25551
+ return [LinkUsage.API];
25383
25552
  default:
25384
25553
  return [LinkUsage.UNKNOWN];
25385
25554
  }
@@ -25443,7 +25612,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
25443
25612
  }] } });
25444
25613
 
25445
25614
  var name = "geonetwork-ui";
25446
- var version = "2.8.0-dev.6f6597946";
25615
+ var version = "2.8.0-dev.7ecc6ee1d";
25447
25616
  var engines = {
25448
25617
  node: ">=20"
25449
25618
  };
@@ -25645,6 +25814,35 @@ function updateLanguages(record, defaultLanguage, otherLanguages) {
25645
25814
  return updatedRecord;
25646
25815
  }
25647
25816
 
25817
+ class GnUiHumanizeDateDirective {
25818
+ constructor(dateService, el, renderer) {
25819
+ this.dateService = dateService;
25820
+ this.el = el;
25821
+ this.renderer = renderer;
25822
+ }
25823
+ async ngOnInit() {
25824
+ await this.updateElement();
25825
+ }
25826
+ async updateElement() {
25827
+ const dateValue = this.gnUiHumanizeDate;
25828
+ const fullDateTime = this.dateService.formatDateTime(dateValue);
25829
+ const relativeDate = await this.dateService.formatRelativeDateTime(dateValue);
25830
+ this.renderer.setAttribute(this.el.nativeElement, 'title', fullDateTime);
25831
+ this.renderer.setProperty(this.el.nativeElement, 'textContent', relativeDate);
25832
+ }
25833
+ 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 }); }
25834
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: GnUiHumanizeDateDirective, isStandalone: true, selector: "[gnUiHumanizeDate]", inputs: { gnUiHumanizeDate: "gnUiHumanizeDate" }, ngImport: i0 }); }
25835
+ }
25836
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: GnUiHumanizeDateDirective, decorators: [{
25837
+ type: Directive,
25838
+ args: [{
25839
+ selector: '[gnUiHumanizeDate]',
25840
+ standalone: true,
25841
+ }]
25842
+ }], ctorParameters: () => [{ type: DateService }, { type: i0.ElementRef }, { type: i0.Renderer2 }], propDecorators: { gnUiHumanizeDate: [{
25843
+ type: Input
25844
+ }] } });
25845
+
25648
25846
  class ElasticsearchService {
25649
25847
  // we're using getters in case the defined languages change over time
25650
25848
  get metadataLang() {
@@ -26195,7 +26393,7 @@ class Gn4SettingsService {
26195
26393
  this.apiVersion$ = this.getSettingsSetValueByKey('system/platform/version');
26196
26394
  }
26197
26395
  getSettingsSetValueByKey(key) {
26198
- return this.siteApiService.getSettingsSet(null, [key]).pipe(map$1((v) => v[key]), shareReplay$1({ bufferSize: 1, refCount: true }));
26396
+ return of(true).pipe(switchMap(() => this.siteApiService.getSettingsSet(null, [key])), map$1((v) => v[key]), shareReplay$1({ bufferSize: 1, refCount: true }));
26199
26397
  }
26200
26398
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4SettingsService, deps: [{ token: SiteApiService }], target: i0.ɵɵFactoryTarget.Injectable }); }
26201
26399
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: Gn4SettingsService, providedIn: 'root' }); }
@@ -27134,6 +27332,9 @@ class Gn4PlatformService {
27134
27332
  console.warn('Error while loading gnui language package');
27135
27333
  return of({});
27136
27334
  }), shareReplay$1(1));
27335
+ this.me$ = this.disableAuth
27336
+ ? of(null)
27337
+ : of(true).pipe(switchMap(() => this.meApi.getMe()), switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay$1({ bufferSize: 1, refCount: true }));
27137
27338
  /**
27138
27339
  * A map of already loaded thesauri (groups of keywords); the key is a URI
27139
27340
  * @private
@@ -27144,9 +27345,6 @@ class Gn4PlatformService {
27144
27345
  .pipe(map$1((thesaurus) => {
27145
27346
  return thesaurus[0];
27146
27347
  }), shareReplay$1(1));
27147
- this.me$ = this.disableAuth
27148
- ? of(null)
27149
- : this.meApi.getMe().pipe(switchMap((apiUser) => this.mapper.userFromMeApi(apiUser)), shareReplay$1({ bufferSize: 1, refCount: true }));
27150
27348
  this.isUserAnonymous$ = this.me$.pipe(map$1((user) => !user || !('id' in user)));
27151
27349
  this.users$ = this.usersApi.getUsers().pipe(map$1((users) => users.map((user) => this.mapper.userFromApi(user))), shareReplay$1());
27152
27350
  }
@@ -29759,8 +29957,7 @@ class DropdownSelectorComponent {
29759
29957
  ];
29760
29958
  }
29761
29959
  get selectedChoice() {
29762
- return (this.choices.find((choice) => choice.value === this.selected) ??
29763
- this.choices[0]);
29960
+ return (this.choices.find((choice) => JSON.stringify(choice.value) === JSON.stringify(this.selected)) ?? this.choices[0]);
29764
29961
  }
29765
29962
  get id() {
29766
29963
  return this.title.toLowerCase().replace(/[^a-z]+/g, '-');
@@ -33737,7 +33934,7 @@ class ExternalLinkCardComponent {
33737
33934
  }
33738
33935
  set size(value) {
33739
33936
  this._size = value;
33740
- this.cardClass = this.sizeClassMap[value];
33937
+ this.cardClass = `group flex flex-row justify-between card-shadow rounded overflow-hidden ${this.sizeClassMap[value]}`;
33741
33938
  }
33742
33939
  get size() {
33743
33940
  return this._size;
@@ -33748,6 +33945,10 @@ class ExternalLinkCardComponent {
33748
33945
  }
33749
33946
  return this.link.name || this.link.description || '';
33750
33947
  }
33948
+ get isDatabase() {
33949
+ return (this.link.type === 'service' &&
33950
+ this.link.accessServiceProtocol === 'postgis');
33951
+ }
33751
33952
  getLinkFormat(link) {
33752
33953
  return getFileFormat(link);
33753
33954
  }
@@ -33758,18 +33959,20 @@ class ExternalLinkCardComponent {
33758
33959
  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: [
33759
33960
  provideIcons({
33760
33961
  matOpenInNew,
33962
+ iconoirDatabase,
33761
33963
  }),
33762
33964
  provideNgIconsConfig({ size: '1.5em' }),
33763
- ], 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 }); }
33965
+ ], 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 }); }
33764
33966
  }
33765
33967
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ExternalLinkCardComponent, decorators: [{
33766
33968
  type: Component,
33767
33969
  args: [{ selector: 'gn-ui-external-link-card', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, NgIconComponent, TranslatePipe], providers: [
33768
33970
  provideIcons({
33769
33971
  matOpenInNew,
33972
+ iconoirDatabase,
33770
33973
  }),
33771
33974
  provideNgIconsConfig({ size: '1.5em' }),
33772
- ], 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" }]
33975
+ ], 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" }]
33773
33976
  }], propDecorators: { link: [{
33774
33977
  type: Input
33775
33978
  }], size: [{
@@ -33889,6 +34092,33 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
33889
34092
  type: Output
33890
34093
  }] } });
33891
34094
 
34095
+ class MetadataDoiComponent {
34096
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataDoiComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34097
+ 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: [
34098
+ provideIcons({
34099
+ matOpenInNew,
34100
+ }),
34101
+ ] }); }
34102
+ }
34103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataDoiComponent, decorators: [{
34104
+ type: Component,
34105
+ args: [{ selector: 'gn-ui-metadata-doi', standalone: true, imports: [
34106
+ CommonModule,
34107
+ MatTooltipModule,
34108
+ NgIcon,
34109
+ TranslatePipe,
34110
+ CopyTextButtonComponent,
34111
+ ], viewProviders: [
34112
+ provideIcons({
34113
+ matOpenInNew,
34114
+ }),
34115
+ ], 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" }]
34116
+ }], propDecorators: { code: [{
34117
+ type: Input
34118
+ }], link: [{
34119
+ type: Input
34120
+ }] } });
34121
+
33892
34122
  /* eslint-disable @angular-eslint/directive-selector */
33893
34123
  class GnUiLinkifyDirective {
33894
34124
  constructor(el, renderer) {
@@ -34032,14 +34262,8 @@ class MetadataInfoComponent {
34032
34262
  onKeywordClick(keyword) {
34033
34263
  this.keyword.emit(keyword);
34034
34264
  }
34035
- formatDate(date) {
34036
- return this.dateService.formatDate(date);
34037
- }
34038
- formatDateTime(date) {
34039
- return this.dateService.formatDateTime(date);
34040
- }
34041
34265
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: MetadataInfoComponent, deps: [{ token: DateService }], target: i0.ɵɵFactoryTarget.Component }); }
34042
- 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 <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 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: [
34266
+ 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: [
34043
34267
  provideIcons({
34044
34268
  matOpenInNew,
34045
34269
  matMailOutline: matMailOutline$1,
@@ -34061,13 +34285,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
34061
34285
  CopyTextButtonComponent,
34062
34286
  NgIcon,
34063
34287
  GnUiLinkifyDirective,
34288
+ GnUiHumanizeDateDirective,
34064
34289
  SpatialExtentComponent,
34065
34290
  ], viewProviders: [
34066
34291
  provideIcons({
34067
34292
  matOpenInNew,
34068
34293
  matMailOutline: matMailOutline$1,
34069
34294
  }),
34070
- ], 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 <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 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"] }]
34295
+ ], 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"] }]
34071
34296
  }], ctorParameters: () => [{ type: DateService }], propDecorators: { metadata: [{
34072
34297
  type: Input
34073
34298
  }], incomplete: [{
@@ -34381,59 +34606,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
34381
34606
  type: Input
34382
34607
  }] } });
34383
34608
 
34384
- class TimeSincePipe {
34385
- constructor(translate) {
34386
- this.translate = translate;
34387
- }
34388
- transform(value) {
34389
- if (isNaN(value.getTime())) {
34390
- throw new Error('Invalid Date');
34391
- }
34392
- const maintenant = new Date();
34393
- let locale;
34394
- switch (this.translate.currentLang) {
34395
- case 'fr':
34396
- locale = fr$1;
34397
- break;
34398
- case 'de':
34399
- locale = de$1;
34400
- break;
34401
- case 'es':
34402
- locale = es$1;
34403
- break;
34404
- case 'it':
34405
- locale = it$1;
34406
- break;
34407
- case 'nl':
34408
- locale = nl$1;
34409
- break;
34410
- case 'pt':
34411
- locale = pt$1;
34412
- break;
34413
- case 'sk':
34414
- locale = sk$1;
34415
- break;
34416
- case 'en':
34417
- default:
34418
- locale = enUS;
34419
- break;
34420
- }
34421
- return formatDistance(value, maintenant, {
34422
- addSuffix: true,
34423
- locale: locale,
34424
- });
34425
- }
34426
- 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 }); }
34427
- static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: TimeSincePipe, isStandalone: true, name: "timeSince" }); }
34428
- }
34429
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: TimeSincePipe, decorators: [{
34430
- type: Pipe,
34431
- args: [{
34432
- name: 'timeSince',
34433
- standalone: true,
34434
- }]
34435
- }], ctorParameters: () => [{ type: i1$1.TranslateService }] });
34436
-
34437
34609
  class UserFeedbackItemComponent {
34438
34610
  constructor() {
34439
34611
  this.newUserFeedbackAnswer = new EventEmitter();
@@ -34466,7 +34638,7 @@ class UserFeedbackItemComponent {
34466
34638
  this.onNewAnswerValueChange();
34467
34639
  }
34468
34640
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UserFeedbackItemComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
34469
- 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: [
34641
+ 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: [
34470
34642
  provideIcons({
34471
34643
  matSendOutline,
34472
34644
  }),
@@ -34476,17 +34648,17 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
34476
34648
  type: Component,
34477
34649
  args: [{ selector: 'gn-ui-user-feedback-item', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
34478
34650
  CommonModule,
34479
- TimeSincePipe,
34480
34651
  TextAreaComponent,
34481
34652
  TranslatePipe,
34482
34653
  ButtonComponent,
34483
34654
  SpinningLoaderComponent,
34655
+ GnUiHumanizeDateDirective,
34484
34656
  NgIcon,
34485
34657
  ], viewProviders: [
34486
34658
  provideIcons({
34487
34659
  matSendOutline,
34488
34660
  }),
34489
- ], 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" }]
34661
+ ], 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" }]
34490
34662
  }], propDecorators: { userFeedbackParent: [{
34491
34663
  type: Input
34492
34664
  }], userFeedBacksAnswers: [{
@@ -36455,6 +36627,11 @@ const SortByEnum = {
36455
36627
  RELEVANCY: ['desc', '_score'],
36456
36628
  QUALITY_SCORE: ['desc', 'qualityScore'],
36457
36629
  CHANGE_DATE: ['desc', 'changeDate'],
36630
+ RESOURCE_DATES: [
36631
+ ['desc', 'revisionDateForResource'],
36632
+ ['desc', 'publicationDateForResource'],
36633
+ ['desc', 'creationDateForResource'],
36634
+ ],
36458
36635
  };
36459
36636
 
36460
36637
  class SortByComponent {
@@ -36464,33 +36641,29 @@ class SortByComponent {
36464
36641
  this.choices = [
36465
36642
  {
36466
36643
  label: marker('results.sortBy.relevancy'),
36467
- value: SortByEnum.RELEVANCY.join(','),
36644
+ value: SortByEnum.RELEVANCY,
36468
36645
  },
36469
36646
  {
36470
36647
  label: marker('results.sortBy.dateStamp'),
36471
- value: SortByEnum.CREATE_DATE.join(','),
36472
- },
36473
- {
36474
- label: marker('results.sortBy.changeDate'),
36475
- value: SortByEnum.CHANGE_DATE.join(','),
36648
+ value: SortByEnum.RESOURCE_DATES,
36476
36649
  },
36477
36650
  {
36478
36651
  label: marker('results.sortBy.popularity'),
36479
- value: SortByEnum.POPULARITY.join(','),
36652
+ value: SortByEnum.POPULARITY,
36480
36653
  },
36481
36654
  ];
36482
- this.currentSortBy$ = this.facade.sortBy$.pipe(filter$1((sortBy) => !!sortBy), map$1((sortBy) => sortBy.join(',')));
36655
+ this.currentSortBy$ = this.facade.sortBy$.pipe(filter$1((sortBy) => !!sortBy), map$1((sortBy) => sortBy));
36483
36656
  }
36484
36657
  ngOnInit() {
36485
36658
  if (this.isQualitySortable) {
36486
36659
  this.choices.push({
36487
36660
  label: marker('results.sortBy.qualityScore'),
36488
- value: SortByEnum.QUALITY_SCORE.join(','),
36661
+ value: SortByEnum.QUALITY_SCORE,
36489
36662
  });
36490
36663
  }
36491
36664
  }
36492
- changeSortBy(criteriaAsString) {
36493
- this.searchService.setSortBy(criteriaAsString.split(','));
36665
+ changeSortBy(criteria) {
36666
+ this.searchService.setSortBy(criteria);
36494
36667
  }
36495
36668
  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 }); }
36496
36669
  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" }] }); }
@@ -38173,13 +38346,24 @@ class DataService {
38173
38346
  if (!featureType) {
38174
38347
  throw new Error('wfs.featuretype.notfound');
38175
38348
  }
38349
+ const wfsVersion = endpoint.getVersion();
38350
+ const addSrsName = wfsVersion === '1.1.0' || wfsVersion === '2.0.0';
38351
+ const defaultCrs = featureType.defaultCrs;
38352
+ const shouldAddOutputCrs = addSrsName && defaultCrs;
38176
38353
  return {
38177
- all: featureType.outputFormats.reduce((prev, curr) => ({
38178
- ...prev,
38179
- [curr]: endpoint.getFeatureUrl(featureType.name, {
38180
- outputFormat: curr,
38181
- }),
38182
- }), {}),
38354
+ all: featureType.outputFormats.reduce((prev, curr) => {
38355
+ const isJsonFormat = curr.toLowerCase().includes('json');
38356
+ return {
38357
+ ...prev,
38358
+ [curr]: endpoint.getFeatureUrl(featureType.name, {
38359
+ outputFormat: curr,
38360
+ ...(shouldAddOutputCrs &&
38361
+ !isJsonFormat && {
38362
+ outputCrs: defaultCrs,
38363
+ }),
38364
+ }),
38365
+ };
38366
+ }, {}),
38183
38367
  geojson: endpoint.supportsJson(featureType.name)
38184
38368
  ? endpoint.getFeatureUrl(featureType.name, {
38185
38369
  asJson: true,
@@ -38854,6 +39038,8 @@ class ChartViewComponent {
38854
39038
  this.chartType$.next(value);
38855
39039
  }
38856
39040
  set userChartConfig(config) {
39041
+ if (!config)
39042
+ return;
38857
39043
  this.aggregation$.next(config.aggregation);
38858
39044
  this.xProperty$.next(config.xProperty);
38859
39045
  this.yProperty$.next(config.yProperty);
@@ -39291,6 +39477,49 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39291
39477
  type: Input
39292
39478
  }] } });
39293
39479
 
39480
+ class StacViewComponent {
39481
+ constructor() {
39482
+ this.currentTemporalExtent = null;
39483
+ this.isTemporalFilterModified = false;
39484
+ }
39485
+ onStartDateChange(date) {
39486
+ this.currentTemporalExtent = {
39487
+ ...this.currentTemporalExtent,
39488
+ start: date,
39489
+ };
39490
+ this.isTemporalFilterModified = true;
39491
+ }
39492
+ onEndDateChange(date) {
39493
+ this.currentTemporalExtent = {
39494
+ ...this.currentTemporalExtent,
39495
+ end: date,
39496
+ };
39497
+ this.isTemporalFilterModified = true;
39498
+ }
39499
+ onResetFilters() {
39500
+ this.currentTemporalExtent = this.initialTemporalExtent;
39501
+ this.isTemporalFilterModified = false;
39502
+ }
39503
+ ngOnInit() {
39504
+ this.currentTemporalExtent = this.initialTemporalExtent;
39505
+ }
39506
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StacViewComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
39507
+ 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 }); }
39508
+ }
39509
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: StacViewComponent, decorators: [{
39510
+ type: Component,
39511
+ args: [{ selector: 'gn-ui-stac-view', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [
39512
+ CommonModule,
39513
+ DatePickerComponent,
39514
+ NgIconComponent,
39515
+ TranslateDirective,
39516
+ ], 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" }]
39517
+ }], propDecorators: { link: [{
39518
+ type: Input
39519
+ }], initialTemporalExtent: [{
39520
+ type: Input
39521
+ }] } });
39522
+
39294
39523
  /**
39295
39524
  * The Metadata View Facade is used to render complete metadata records.
39296
39525
  * Supply it with an incomplete record (at least containing the uuid) and the
@@ -39321,8 +39550,21 @@ class MdViewFacade {
39321
39550
  this.sourceOf$ = this.store.pipe(select(getSourceOf));
39322
39551
  this.chartConfig$ = this.store.pipe(select(getChartConfig));
39323
39552
  this.allLinks$ = this.metadata$.pipe(map$1((record) => 'onlineResources' in record ? record.onlineResources : []), shareReplay$1(1));
39553
+ this.resourceDoi$ = this.metadata$.pipe(map$1((record) => {
39554
+ if (!record?.resourceIdentifiers?.length)
39555
+ return null;
39556
+ const doiIdentifier = record.resourceIdentifiers.find((id) => id.codeSpace?.toLowerCase().includes('doi.org') ||
39557
+ id.code.startsWith('10.'));
39558
+ if (!doiIdentifier)
39559
+ return null;
39560
+ return {
39561
+ code: doiIdentifier.code,
39562
+ url: doiIdentifier.url ? doiIdentifier.url : null,
39563
+ };
39564
+ }), shareReplay$1(1));
39324
39565
  this.apiLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.API))), shareReplay$1(1));
39325
39566
  this.mapApiLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.MAP_API))), shareReplay$1(1));
39567
+ this.stacLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => link.type === 'service' && link.accessServiceProtocol === 'stac')), shareReplay$1(1));
39326
39568
  this.downloadLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.DOWNLOAD))));
39327
39569
  this.dataLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.DATA))));
39328
39570
  this.geoDataLinks$ = this.allLinks$.pipe(map$1((links) => links.filter((link) => this.linkClassifier.hasUsage(link, LinkUsage.GEODATA))));
@@ -39480,8 +39722,9 @@ class DataViewPermalinkComponent {
39480
39722
  set viewType(value) {
39481
39723
  this.viewType$.next(value);
39482
39724
  }
39483
- constructor(config, wcEmbedderBaseUrl, facade) {
39725
+ constructor(config, proxyPath, wcEmbedderBaseUrl, facade) {
39484
39726
  this.config = config;
39727
+ this.proxyPath = proxyPath;
39485
39728
  this.wcEmbedderBaseUrl = wcEmbedderBaseUrl;
39486
39729
  this.facade = facade;
39487
39730
  this.viewType$ = new BehaviorSubject('map');
@@ -39514,6 +39757,9 @@ class DataViewPermalinkComponent {
39514
39757
  url.searchParams.append('e', `gn-dataset-view-map`);
39515
39758
  }
39516
39759
  url.searchParams.append('a', `api-url=${this.config.basePath}`);
39760
+ if (this.proxyPath) {
39761
+ url.searchParams.append('a', `proxy-path=${this.proxyPath}`);
39762
+ }
39517
39763
  url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
39518
39764
  url.searchParams.append('a', `primary-color=#0f4395`);
39519
39765
  url.searchParams.append('a', `secondary-color=#8bc832`);
@@ -39522,7 +39768,7 @@ class DataViewPermalinkComponent {
39522
39768
  return url.toString();
39523
39769
  }));
39524
39770
  }
39525
- 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 }); }
39771
+ 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 }); }
39526
39772
  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 }); }
39527
39773
  }
39528
39774
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewPermalinkComponent, decorators: [{
@@ -39533,6 +39779,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39533
39779
  args: [Configuration]
39534
39780
  }] }, { type: undefined, decorators: [{
39535
39781
  type: Optional
39782
+ }, {
39783
+ type: Inject,
39784
+ args: [PROXY_PATH]
39785
+ }] }, { type: undefined, decorators: [{
39786
+ type: Optional
39536
39787
  }, {
39537
39788
  type: Inject,
39538
39789
  args: [WEB_COMPONENT_EMBEDDER_URL]
@@ -39641,8 +39892,9 @@ class DataViewWebComponentComponent {
39641
39892
  set viewType(value) {
39642
39893
  this.viewType$.next(value);
39643
39894
  }
39644
- constructor(config, facade) {
39895
+ constructor(config, proxyPath, facade) {
39645
39896
  this.config = config;
39897
+ this.proxyPath = proxyPath;
39646
39898
  this.facade = facade;
39647
39899
  this.viewType$ = new BehaviorSubject('map');
39648
39900
  this.webComponentHtml$ = combineLatest(this.viewType$, this.facade.chartConfig$, this.facade.metadata$).pipe(map$2(([viewType, config, metadata]) => {
@@ -39651,7 +39903,10 @@ class DataViewWebComponentComponent {
39651
39903
  const { aggregation, xProperty, yProperty, chartType } = config;
39652
39904
  return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${GEONETWORK_UI_TAG_NAME}/gn-wc.js"></script>
39653
39905
  <gn-dataset-view-chart
39654
- api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
39906
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"${this.proxyPath
39907
+ ? `
39908
+ proxy-path="${this.proxyPath}"`
39909
+ : ''}
39655
39910
  dataset-id="${metadata.uniqueIdentifier}"
39656
39911
  aggregation="${aggregation}"
39657
39912
  x-property="${xProperty}"
@@ -39670,7 +39925,10 @@ class DataViewWebComponentComponent {
39670
39925
  else if (viewType === 'table') {
39671
39926
  return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${GEONETWORK_UI_TAG_NAME}/gn-wc.js"></script>
39672
39927
  <gn-dataset-view-table
39673
- api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
39928
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"${this.proxyPath
39929
+ ? `
39930
+ proxy-path="${this.proxyPath}"`
39931
+ : ''}
39674
39932
  dataset-id="${metadata.uniqueIdentifier}"
39675
39933
  primary-color="#0f4395"
39676
39934
  secondary-color="#8bc832"
@@ -39683,7 +39941,10 @@ class DataViewWebComponentComponent {
39683
39941
  else {
39684
39942
  return `<script src="https://cdn.jsdelivr.net/gh/geonetwork/geonetwork-ui@wc-dist-${GEONETWORK_UI_TAG_NAME}/gn-wc.js"></script>
39685
39943
  <gn-dataset-view-map
39686
- api-url="${new URL(this.config.basePath, window.location.origin).toString()}"
39944
+ api-url="${new URL(this.config.basePath, window.location.origin).toString()}"${this.proxyPath
39945
+ ? `
39946
+ proxy-path="${this.proxyPath}"`
39947
+ : ''}
39687
39948
  dataset-id="${metadata.uniqueIdentifier}"
39688
39949
  primary-color="#0f4395"
39689
39950
  secondary-color="#8bc832"
@@ -39695,7 +39956,7 @@ class DataViewWebComponentComponent {
39695
39956
  }
39696
39957
  }));
39697
39958
  }
39698
- 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 }); }
39959
+ 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 }); }
39699
39960
  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 }); }
39700
39961
  }
39701
39962
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DataViewWebComponentComponent, decorators: [{
@@ -39704,6 +39965,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
39704
39965
  }], ctorParameters: () => [{ type: Configuration, decorators: [{
39705
39966
  type: Inject,
39706
39967
  args: [Configuration]
39968
+ }] }, { type: undefined, decorators: [{
39969
+ type: Optional
39970
+ }, {
39971
+ type: Inject,
39972
+ args: [PROXY_PATH]
39707
39973
  }] }, { type: MdViewFacade }], propDecorators: { viewType: [{
39708
39974
  type: Input
39709
39975
  }] } });
@@ -40824,7 +41090,7 @@ const RECORD_RESOURCE_CREATED_FIELD = {
40824
41090
  gridColumnSpan: 1,
40825
41091
  };
40826
41092
  const RESOURCE_IDENTIFIER_FIELD = {
40827
- model: 'resourceIdentifier',
41093
+ model: 'resourceIdentifiers',
40828
41094
  formFieldConfig: {
40829
41095
  labelKey: marker('editor.record.form.field.resourceIdentifier'),
40830
41096
  },
@@ -43338,8 +43604,28 @@ class FormFieldComponent {
43338
43604
  get valueAsOnlineResources() {
43339
43605
  return this.value;
43340
43606
  }
43607
+ get valueAsResourceIdentifierCode() {
43608
+ const identifiers = this.value;
43609
+ return identifiers?.[0]?.code || '';
43610
+ }
43611
+ handleResourceIdentifierChange(code) {
43612
+ const identifiers = this.value;
43613
+ if (!code) {
43614
+ this.valueChange.emit(identifiers?.slice(1) || []);
43615
+ return;
43616
+ }
43617
+ if (identifiers?.[0]) {
43618
+ this.valueChange.emit([
43619
+ { ...identifiers[0], code },
43620
+ ...identifiers.slice(1),
43621
+ ]);
43622
+ }
43623
+ else {
43624
+ this.valueChange.emit([{ code }]);
43625
+ }
43626
+ }
43341
43627
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
43342
- 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 }); }
43628
+ 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 }); }
43343
43629
  }
43344
43630
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FormFieldComponent, decorators: [{
43345
43631
  type: Component,
@@ -43366,7 +43652,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
43366
43652
  FormFieldSpatialToggleComponent,
43367
43653
  FormFieldTopicsComponent,
43368
43654
  TextFieldModule,
43369
- ], 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" }]
43655
+ ], 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" }]
43370
43656
  }], propDecorators: { uniqueIdentifier: [{
43371
43657
  type: Input
43372
43658
  }], model: [{
@@ -43791,6 +44077,9 @@ class RouterService {
43791
44077
  getOrganizationPageRoute() {
43792
44078
  return ROUTER_ROUTE_ORGANIZATION;
43793
44079
  }
44080
+ getDefaultSort() {
44081
+ return SortByEnum.RESOURCE_DATES;
44082
+ }
43794
44083
  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 }); }
43795
44084
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterService, providedIn: 'root' }); }
43796
44085
  }
@@ -43951,13 +44240,14 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
43951
44240
  }], ctorParameters: () => [{ type: i1$3.Store }, { type: RouterService }] });
43952
44241
 
43953
44242
  class RouterEffects {
43954
- constructor(_actions$, _router, _location, facade, routerConfig, fieldsService) {
44243
+ constructor(_actions$, _router, _location, facade, routerConfig, fieldsService, routerService) {
43955
44244
  this._actions$ = _actions$;
43956
44245
  this._router = _router;
43957
44246
  this._location = _location;
43958
44247
  this.facade = facade;
43959
44248
  this.routerConfig = routerConfig;
43960
44249
  this.fieldsService = fieldsService;
44250
+ this.routerService = routerService;
43961
44251
  this.navigate$ = createEffect(() => this._actions$.pipe(ofType(goAction), tap$1(({ path, query: queryParams, queryParamsHandling }) => {
43962
44252
  this._router.navigate([path], {
43963
44253
  queryParams,
@@ -43969,14 +44259,14 @@ class RouterEffects {
43969
44259
  .pipe(map$1((filters) => [searchParams, filters]))), startWith([null, {}]), pairwise(), map$1(([[oldParams, oldFilters], [newParams, newFilters]]) => {
43970
44260
  let sortBy = ROUTE_PARAMS.SORT in newParams
43971
44261
  ? sortByFromString(newParams[ROUTE_PARAMS.SORT])
43972
- : SortByEnum.CHANGE_DATE;
44262
+ : this.routerService.getDefaultSort();
43973
44263
  let pageNumber = ROUTE_PARAMS.PAGE in newParams
43974
44264
  ? parseInt(newParams[ROUTE_PARAMS.PAGE])
43975
44265
  : 1;
43976
44266
  if (oldParams !== null) {
43977
44267
  const oldSort = ROUTE_PARAMS.SORT in oldParams
43978
44268
  ? sortByFromString(oldParams[ROUTE_PARAMS.SORT])
43979
- : SortByEnum.CHANGE_DATE;
44269
+ : this.routerService.getDefaultSort();
43980
44270
  if (JSON.stringify(sortBy) === JSON.stringify(oldSort)) {
43981
44271
  sortBy = null;
43982
44272
  }
@@ -44033,7 +44323,7 @@ class RouterEffects {
44033
44323
  this.navigateBack$ = createEffect(() => this._actions$.pipe(ofType(backAction), tap$1(() => this._location.back())), { dispatch: false });
44034
44324
  this.navigateForward$ = createEffect(() => this._actions$.pipe(ofType(forwardAction), tap$1(() => this._location.forward())), { dispatch: false });
44035
44325
  }
44036
- 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 }); }
44326
+ 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 }); }
44037
44327
  static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects }); }
44038
44328
  }
44039
44329
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RouterEffects, decorators: [{
@@ -44041,7 +44331,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
44041
44331
  }], ctorParameters: () => [{ type: i1$c.Actions }, { type: i1$d.Router }, { type: i1$2.Location }, { type: RouterFacade }, { type: undefined, decorators: [{
44042
44332
  type: Inject,
44043
44333
  args: [ROUTER_CONFIG]
44044
- }] }, { type: FieldsService }] });
44334
+ }] }, { type: FieldsService }, { type: RouterService }] });
44045
44335
 
44046
44336
  class DefaultRouterModule {
44047
44337
  constructor(routerService) {
@@ -44179,5 +44469,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
44179
44469
  * Generated bundle index. Do not edit.
44180
44470
  */
44181
44471
 
44182
- 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 };
44472
+ 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 };
44183
44473
  //# sourceMappingURL=geonetwork-ui.mjs.map