geonetwork-ui 2.2.0-dev.723017a4 → 2.2.0-dev.751c5530

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 (156) hide show
  1. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.mjs +16 -4
  2. package/esm2022/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.mjs +3 -1
  3. package/esm2022/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.mjs +1 -1
  4. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/converter.mjs +7 -2
  5. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/read-parts.mjs +4 -1
  6. package/esm2022/libs/api/metadata-converter/src/lib/iso19139/write-parts.mjs +1 -1
  7. package/esm2022/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.mjs +2 -2
  8. package/esm2022/libs/common/domain/src/lib/model/record/metadata.model.mjs +1 -1
  9. package/esm2022/libs/feature/editor/src/index.mjs +6 -1
  10. package/esm2022/libs/feature/editor/src/lib/+state/editor.actions.mjs +8 -0
  11. package/esm2022/libs/feature/editor/src/lib/+state/editor.effects.mjs +26 -0
  12. package/esm2022/libs/feature/editor/src/lib/+state/editor.facade.mjs +30 -0
  13. package/esm2022/libs/feature/editor/src/lib/+state/editor.models.mjs +2 -0
  14. package/esm2022/libs/feature/editor/src/lib/+state/editor.reducer.mjs +42 -0
  15. package/esm2022/libs/feature/editor/src/lib/+state/editor.selectors.mjs +13 -0
  16. package/esm2022/libs/feature/editor/src/lib/expressions.mjs +13 -0
  17. package/esm2022/libs/feature/editor/src/lib/feature-editor.module.mjs +16 -4
  18. package/esm2022/libs/feature/editor/src/lib/fields.config.mjs +34 -0
  19. package/esm2022/libs/feature/editor/src/lib/models/fields.model.mjs +2 -0
  20. package/esm2022/libs/feature/editor/src/lib/record-form/record-form.component.mjs +15 -11
  21. package/esm2022/libs/feature/editor/src/lib/services/editor.service.mjs +22 -44
  22. package/esm2022/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.mjs +13 -13
  23. package/esm2022/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.mjs +3 -3
  24. package/esm2022/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.mjs +3 -3
  25. package/esm2022/libs/ui/elements/src/lib/max-lines/max-lines.component.mjs +5 -3
  26. package/esm2022/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.mjs +3 -3
  27. package/esm2022/libs/ui/elements/src/lib/metadata-info/metadata-info.component.mjs +17 -5
  28. package/esm2022/libs/ui/elements/src/lib/thumbnail/thumbnail.component.mjs +3 -3
  29. package/esm2022/libs/ui/inputs/src/lib/button/button.component.mjs +9 -9
  30. package/esm2022/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.mjs +3 -3
  31. package/esm2022/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.mjs +3 -3
  32. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.component.mjs +4 -2
  33. package/esm2022/libs/ui/inputs/src/lib/form-field/form-field.model.mjs +1 -1
  34. package/esm2022/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.mjs +3 -3
  35. package/esm2022/libs/ui/layout/src/lib/carousel/carousel.component.mjs +3 -3
  36. package/esm2022/libs/util/i18n/src/lib/i18n.constants.mjs +18 -1
  37. package/esm2022/libs/util/shared/src/lib/utils/index.mjs +2 -1
  38. package/esm2022/libs/util/shared/src/lib/utils/temporal-extent-union.mjs +32 -0
  39. package/esm2022/translations/de.json +35 -26
  40. package/esm2022/translations/en.json +27 -18
  41. package/esm2022/translations/es.json +24 -15
  42. package/esm2022/translations/fr.json +45 -36
  43. package/esm2022/translations/it.json +39 -30
  44. package/esm2022/translations/nl.json +25 -16
  45. package/esm2022/translations/pt.json +24 -15
  46. package/fesm2022/geonetwork-ui.mjs +581 -300
  47. package/fesm2022/geonetwork-ui.mjs.map +1 -1
  48. package/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.d.ts.map +1 -1
  49. package/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.d.ts.map +1 -1
  50. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts +1 -0
  51. package/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.d.ts.map +1 -1
  52. package/libs/api/metadata-converter/src/lib/iso19139/converter.d.ts.map +1 -1
  53. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts +1 -0
  54. package/libs/api/metadata-converter/src/lib/iso19139/read-parts.d.ts.map +1 -1
  55. package/libs/api/metadata-converter/src/lib/iso19139/write-parts.d.ts.map +1 -1
  56. package/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.d.ts.map +1 -1
  57. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts +3 -0
  58. package/libs/common/domain/src/lib/model/record/metadata.model.d.ts.map +1 -1
  59. package/libs/feature/editor/src/index.d.ts +5 -0
  60. package/libs/feature/editor/src/index.d.ts.map +1 -1
  61. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts +23 -0
  62. package/libs/feature/editor/src/lib/+state/editor.actions.d.ts.map +1 -0
  63. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts +15 -0
  64. package/libs/feature/editor/src/lib/+state/editor.effects.d.ts.map +1 -0
  65. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts +19 -0
  66. package/libs/feature/editor/src/lib/+state/editor.facade.d.ts.map +1 -0
  67. package/libs/feature/editor/src/lib/+state/editor.models.d.ts +2 -0
  68. package/libs/feature/editor/src/lib/+state/editor.models.d.ts.map +1 -0
  69. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts +18 -0
  70. package/libs/feature/editor/src/lib/+state/editor.reducer.d.ts.map +1 -0
  71. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts +15 -0
  72. package/libs/feature/editor/src/lib/+state/editor.selectors.d.ts.map +1 -0
  73. package/libs/feature/editor/src/lib/expressions.d.ts +4 -0
  74. package/libs/feature/editor/src/lib/expressions.d.ts.map +1 -0
  75. package/libs/feature/editor/src/lib/feature-editor.module.d.ts +3 -1
  76. package/libs/feature/editor/src/lib/feature-editor.module.d.ts.map +1 -1
  77. package/libs/feature/editor/src/lib/fields.config.d.ts +3 -0
  78. package/libs/feature/editor/src/lib/fields.config.d.ts.map +1 -0
  79. package/libs/feature/editor/src/lib/models/fields.model.d.ts +15 -0
  80. package/libs/feature/editor/src/lib/models/fields.model.d.ts.map +1 -0
  81. package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts +10 -5
  82. package/libs/feature/editor/src/lib/record-form/record-form.component.d.ts.map +1 -1
  83. package/libs/feature/editor/src/lib/services/editor.service.d.ts +3 -13
  84. package/libs/feature/editor/src/lib/services/editor.service.d.ts.map +1 -1
  85. package/libs/ui/elements/src/lib/max-lines/max-lines.component.d.ts.map +1 -1
  86. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts +6 -0
  87. package/libs/ui/elements/src/lib/metadata-info/metadata-info.component.d.ts.map +1 -1
  88. package/libs/ui/inputs/src/lib/button/button.component.d.ts.map +1 -1
  89. package/libs/ui/inputs/src/lib/form-field/form-field.component.d.ts.map +1 -1
  90. package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts +0 -1
  91. package/libs/ui/inputs/src/lib/form-field/form-field.model.d.ts.map +1 -1
  92. package/libs/util/i18n/src/lib/i18n.constants.d.ts +17 -0
  93. package/libs/util/i18n/src/lib/i18n.constants.d.ts.map +1 -1
  94. package/libs/util/shared/src/lib/utils/index.d.ts +1 -0
  95. package/libs/util/shared/src/lib/utils/index.d.ts.map +1 -1
  96. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts +5 -0
  97. package/libs/util/shared/src/lib/utils/temporal-extent-union.d.ts.map +1 -0
  98. package/package.json +1 -1
  99. package/src/libs/api/metadata-converter/src/lib/fixtures/generic.records.ts +2 -0
  100. package/src/libs/api/metadata-converter/src/lib/fixtures/geo2france.records.ts +2 -0
  101. package/src/libs/api/metadata-converter/src/lib/fixtures/geocat-ch.records.ts +4 -0
  102. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.field.mapper.ts +19 -3
  103. package/src/libs/api/metadata-converter/src/lib/gn4/gn4.metadata.mapper.ts +2 -0
  104. package/src/libs/api/metadata-converter/src/lib/gn4/types/metadata.model.ts +1 -0
  105. package/src/libs/api/metadata-converter/src/lib/iso19139/converter.ts +6 -0
  106. package/src/libs/api/metadata-converter/src/lib/iso19139/read-parts.ts +5 -1
  107. package/src/libs/api/metadata-converter/src/lib/iso19139/write-parts.ts +8 -2
  108. package/src/libs/api/repository/src/lib/gn4/elasticsearch/elasticsearch.service.ts +1 -1
  109. package/src/libs/common/domain/src/lib/model/record/metadata.model.ts +4 -0
  110. package/src/libs/common/fixtures/src/lib/elasticsearch/full-response.ts +1 -1
  111. package/src/libs/common/fixtures/src/lib/records.fixtures.ts +33 -11
  112. package/src/libs/feature/editor/src/index.ts +5 -0
  113. package/src/libs/feature/editor/src/lib/+state/editor.actions.ts +24 -0
  114. package/src/libs/feature/editor/src/lib/+state/editor.effects.ts +49 -0
  115. package/src/libs/feature/editor/src/lib/+state/editor.facade.ts +30 -0
  116. package/src/libs/feature/editor/src/lib/+state/editor.models.ts +1 -0
  117. package/src/libs/feature/editor/src/lib/+state/editor.reducer.ts +68 -0
  118. package/src/libs/feature/editor/src/lib/+state/editor.selectors.ts +39 -0
  119. package/src/libs/feature/editor/src/lib/expressions.ts +16 -0
  120. package/src/libs/feature/editor/src/lib/feature-editor.module.ts +11 -0
  121. package/src/libs/feature/editor/src/lib/fields.config.ts +35 -0
  122. package/src/libs/feature/editor/src/lib/models/fields.model.ts +29 -0
  123. package/src/libs/feature/editor/src/lib/record-form/record-form.component.html +9 -7
  124. package/src/libs/feature/editor/src/lib/record-form/record-form.component.ts +11 -5
  125. package/src/libs/feature/editor/src/lib/services/editor.service.ts +34 -73
  126. package/src/libs/feature/record/src/lib/data-view-permalink/data-view-permalink.component.ts +12 -12
  127. package/src/libs/feature/search/src/lib/favorites/favorite-star/favorite-star.component.html +3 -4
  128. package/src/libs/ui/catalog/src/lib/language-switcher/language-switcher.component.html +1 -1
  129. package/src/libs/ui/elements/src/lib/max-lines/max-lines.component.html +5 -1
  130. package/src/libs/ui/elements/src/lib/max-lines/max-lines.component.ts +1 -0
  131. package/src/libs/ui/elements/src/lib/metadata-contact/metadata-contact.component.html +1 -1
  132. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.html +108 -20
  133. package/src/libs/ui/elements/src/lib/metadata-info/metadata-info.component.ts +14 -0
  134. package/src/libs/ui/elements/src/lib/thumbnail/thumbnail.component.html +2 -2
  135. package/src/libs/ui/inputs/src/lib/button/button.component.css +0 -5
  136. package/src/libs/ui/inputs/src/lib/button/button.component.html +0 -1
  137. package/src/libs/ui/inputs/src/lib/button/button.component.ts +6 -6
  138. package/src/libs/ui/inputs/src/lib/dropdown-multiselect/dropdown-multiselect.component.html +1 -1
  139. package/src/libs/ui/inputs/src/lib/dropdown-selector/dropdown-selector.component.html +3 -1
  140. package/src/libs/ui/inputs/src/lib/form-field/form-field.component.ts +3 -1
  141. package/src/libs/ui/inputs/src/lib/form-field/form-field.model.ts +0 -1
  142. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.css +3 -0
  143. package/src/libs/ui/inputs/src/lib/navigation-button/navigation-button.component.html +1 -1
  144. package/src/libs/ui/layout/src/lib/carousel/carousel.component.html +1 -0
  145. package/src/libs/util/i18n/src/lib/i18n.constants.ts +18 -0
  146. package/src/libs/util/shared/src/lib/utils/index.ts +1 -0
  147. package/src/libs/util/shared/src/lib/utils/temporal-extent-union.ts +32 -0
  148. package/tailwind.base.css +44 -15
  149. package/translations/de.json +35 -26
  150. package/translations/en.json +27 -18
  151. package/translations/es.json +24 -15
  152. package/translations/fr.json +45 -36
  153. package/translations/it.json +39 -30
  154. package/translations/nl.json +25 -16
  155. package/translations/pt.json +24 -15
  156. package/translations/sk.json +117 -108
@@ -1,7 +1,7 @@
1
1
  import { parseXml, XmlDocument, XmlElement, XmlText } from '@rgrove/parse-xml';
2
2
  import format from 'date-fns/format';
3
3
  import * as i0 from '@angular/core';
4
- import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ContentChildren, ElementRef, ViewChildren } from '@angular/core';
4
+ import { InjectionToken, Injectable, Optional, Inject, NgModule, SkipSelf, Component, ChangeDetectionStrategy, Input, ViewChild, Directive, HostListener, EventEmitter, Output, ViewContainerRef, TemplateRef, Host, ContentChild, HostBinding, ContentChildren, ElementRef, ViewChildren, inject } from '@angular/core';
5
5
  import * as i1 from '@angular/common/http';
6
6
  import { HttpHeaders, HttpParams, HttpClient, HttpClientModule, HTTP_INTERCEPTORS, HttpClientXsrfModule } from '@angular/common/http';
7
7
  import * as i1$1 from '@ngx-translate/core';
@@ -15,7 +15,7 @@ import { CommonModule, NgOptimizedImage, NgForOf } from '@angular/common';
15
15
  import { of, map as map$2, lastValueFrom, switchMap, combineLatest, takeLast, forkJoin, Subject, merge, throwError, BehaviorSubject, firstValueFrom, fromEvent, timer, from, Subscription, animationFrameScheduler, ReplaySubject, distinctUntilChanged as distinctUntilChanged$1, tap as tap$2, Observable, buffer, debounceTime as debounceTime$1, combineLatestWith, catchError as catchError$1, takeUntil, EMPTY, withLatestFrom as withLatestFrom$1, startWith as startWith$1, pairwise as pairwise$1 } from 'rxjs';
16
16
  import { valid, coerce, satisfies, ltr } from 'semver';
17
17
  import * as i1$2 from '@ngrx/store';
18
- import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule } from '@ngrx/store';
18
+ import { createAction, props, createReducer, on, createFeatureSelector, createSelector, select, StoreModule, Store } from '@ngrx/store';
19
19
  import Map$1 from 'ol/Map';
20
20
  import * as i2 from '@angular/material/icon';
21
21
  import { MatIconModule } from '@angular/material/icon';
@@ -75,7 +75,7 @@ import { MatDatepickerModule } from '@angular/material/datepicker';
75
75
  import { MatInputModule } from '@angular/material/input';
76
76
  import * as basicLightbox from 'basiclightbox';
77
77
  import * as i1$8 from '@ngrx/effects';
78
- import { createEffect, ofType, EffectsModule } from '@ngrx/effects';
78
+ import { createEffect, ofType, EffectsModule, Actions } from '@ngrx/effects';
79
79
  import tippy from 'tippy.js';
80
80
  import { valid as valid$1 } from 'geojson-validation';
81
81
  import { Polygon } from 'ol/geom';
@@ -832,6 +832,9 @@ function readOwnerOrganization(rootEl) {
832
832
  function readRecordUpdated(rootEl) {
833
833
  return pipe(findChildElement('gmd:dateStamp'), extractDateTime())(rootEl);
834
834
  }
835
+ function readRecordPublished(rootEl) {
836
+ return pipe(findChildElement('gmd:dateStamp'), extractDateTime())(rootEl);
837
+ }
835
838
  function readTitle(rootEl) {
836
839
  return pipe(findIdentification(), findNestedElement('gmd:citation', 'gmd:CI_Citation', 'gmd:title'), extractCharacterString())(rootEl);
837
840
  }
@@ -1364,6 +1367,7 @@ function toModel(xml) {
1364
1367
  const contacts = readContacts(rootEl);
1365
1368
  const recordUpdated = readRecordUpdated(rootEl);
1366
1369
  const recordCreated = recordUpdated;
1370
+ const recordPublished = readRecordPublished(rootEl);
1367
1371
  const keywords = readKeywords(rootEl);
1368
1372
  const topics = readIsoTopics(rootEl);
1369
1373
  const legalConstraints = readLegalConstraints(rootEl);
@@ -1384,8 +1388,10 @@ function toModel(xml) {
1384
1388
  return {
1385
1389
  uniqueIdentifier,
1386
1390
  kind,
1391
+ languages: [],
1387
1392
  recordCreated,
1388
1393
  recordUpdated,
1394
+ recordPublished,
1389
1395
  status,
1390
1396
  title,
1391
1397
  abstract,
@@ -1414,8 +1420,10 @@ function toModel(xml) {
1414
1420
  return {
1415
1421
  uniqueIdentifier,
1416
1422
  kind,
1423
+ languages: [],
1417
1424
  recordCreated,
1418
1425
  recordUpdated,
1426
+ recordPublished,
1419
1427
  title,
1420
1428
  abstract,
1421
1429
  ownerOrganization,
@@ -16533,6 +16541,23 @@ const LANG_3_TO_2_MAPPER = {
16533
16541
  chi: 'zh',
16534
16542
  slo: 'sk',
16535
16543
  };
16544
+ const LANGUAGE_NAMES = {
16545
+ en: 'English',
16546
+ nl: 'Nederlands',
16547
+ fr: 'Français',
16548
+ de: 'Deutsch',
16549
+ ko: '한국어',
16550
+ es: 'Español',
16551
+ cs: 'Čeština',
16552
+ ca: 'Català',
16553
+ fi: 'Suomi',
16554
+ is: 'Íslenska',
16555
+ it: 'Italiano',
16556
+ pt: 'Português',
16557
+ ru: 'Русский',
16558
+ zh: '中文',
16559
+ sk: 'Slovenčina',
16560
+ };
16536
16561
  // Caution: changing this can break language selection from third parties!
16537
16562
  const LANGUAGE_STORAGE_KEY = 'geonetwork-ui-language';
16538
16563
  const LANG_2_TO_3_MAPPER = Object.entries(LANG_3_TO_2_MAPPER).reduce((mapperObject, langEntry) => {
@@ -16655,7 +16680,7 @@ var de = {
16655
16680
  "chart.type.line": "Liniendiagramm",
16656
16681
  "chart.type.lineSmooth": "Geglättes Liniendiagramm",
16657
16682
  "chart.type.pie": "Kreisdiagramm",
16658
- "dashboard.createRecord": "",
16683
+ "dashboard.createRecord": "Neuer Eintrag",
16659
16684
  "dashboard.labels.mySpace": "Mein Bereich",
16660
16685
  "dashboard.records.all": "Katalog",
16661
16686
  "dashboard.records.myDraft": "Meine Entwürfe",
@@ -16668,8 +16693,8 @@ var de = {
16668
16693
  "dashboard.records.userEmail": "E-Mail",
16669
16694
  "dashboard.records.username": "Benutzername",
16670
16695
  "dashboard.records.users": "{count, plural, =1{Benutzer} other{Benutzer}}",
16671
- "dashboard.results.listMetadata": "",
16672
- "dashboard.results.listResources": "",
16696
+ "dashboard.results.listMetadata": "Metadaten anzeigen",
16697
+ "dashboard.results.listResources": "Ressourcen anzeigen",
16673
16698
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Dateiformat-Erkennung",
16674
16699
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Sammeln von Datensatzinformationen",
16675
16700
  "datafeeder.analysisProgressBar.illustration.samplingData": "Datenauswahl",
@@ -16783,6 +16808,8 @@ var de = {
16783
16808
  "downloads.format.unknown": "unbekannt",
16784
16809
  "downloads.wfs.featuretype.not.found": "Der Layer wurde nicht gefunden",
16785
16810
  dropFile: dropFile$6,
16811
+ "editor.record.publish": "",
16812
+ "editor.record.upToDate": "",
16786
16813
  "externalviewer.dataset.unnamed": "Datensatz aus dem Datahub",
16787
16814
  "facets.block.title.OrgForResource": "Organisation",
16788
16815
  "facets.block.title.availableInServices": "Verfügbar für",
@@ -16796,28 +16823,28 @@ var de = {
16796
16823
  "facets.block.title.tag.default": "Stichwort",
16797
16824
  "facets.block.title.th_regions_tree.default": "Regionen",
16798
16825
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Anmelden</a>, um auf diese Funktion zuzugreifen</div>",
16799
- "language.ca": "Català",
16800
- "language.cs": "Čeština",
16826
+ "language.ca": "Katalanisch",
16827
+ "language.cs": "Tschechisch",
16801
16828
  "language.de": "Deutsch",
16802
- "language.en": "English",
16803
- "language.es": "Español",
16804
- "language.fi": "Suomi",
16805
- "language.fr": "Français",
16806
- "language.is": "Íslenska",
16807
- "language.it": "Italiano",
16808
- "language.ko": "한국어",
16809
- "language.nl": "Nederlands",
16810
- "language.pt": "Português",
16811
- "language.ru": "Русский",
16812
- "language.sk": "Slovenčina",
16813
- "language.zh": "中文",
16829
+ "language.en": "Englisch",
16830
+ "language.es": "Spanisch",
16831
+ "language.fi": "Finnisch",
16832
+ "language.fr": "Französisch",
16833
+ "language.is": "Isländisch",
16834
+ "language.it": "Italienisch",
16835
+ "language.ko": "Koreanisch",
16836
+ "language.nl": "Niederländisch",
16837
+ "language.pt": "Portugiesisch",
16838
+ "language.ru": "Russisch",
16839
+ "language.sk": "Slowakisch",
16840
+ "language.zh": "Chinesisch",
16814
16841
  "map.add.layer": "Eine Ebene hinzufügen",
16815
16842
  "map.add.layer.catalog": "Aus dem Katalog",
16816
16843
  "map.add.layer.file": "Aus einer Datei",
16817
16844
  "map.add.layer.wfs": "Aus WFS",
16818
16845
  "map.add.layer.wms": "Aus WMS",
16819
16846
  "map.addFromFile.placeholder": "Klicke hier oder ziehe eine Datei herein",
16820
- "map.geocoding.placeholder": "",
16847
+ "map.geocoding.placeholder": "Nach einem Ort suchen",
16821
16848
  "map.help.addFromFile": "Klicke oder ziehe eine Datei herein um eine Karte hinzuzufügen (momentan wird nur das GeoJSON-Format unterstützt).",
16822
16849
  "map.layer.add": "Hinzufügen",
16823
16850
  "map.layers.available": "Verfügbare Layer",
@@ -16861,17 +16888,20 @@ var de = {
16861
16888
  "record.metadata.author": "Autor",
16862
16889
  "record.metadata.catalog": "Katalog",
16863
16890
  "record.metadata.contact": "Kontakt",
16864
- "record.metadata.details": "Technische Informationen",
16891
+ "record.metadata.creation": "Erstellungsdatum",
16892
+ "record.metadata.details": "Über die Daten",
16865
16893
  "record.metadata.download": "Downloads",
16866
16894
  "record.metadata.formats": "Formate",
16867
16895
  "record.metadata.keywords": "Stichworte",
16868
- "record.metadata.lastUpdate": "Zuletzt aktualisiert am",
16896
+ "record.metadata.languages": "Sprachen",
16897
+ "record.metadata.lastUpdate": "Zuletzt aktualisiert am {date}",
16869
16898
  "record.metadata.links": "Links",
16870
16899
  "record.metadata.noUsage": "Für diesen Datensatz sind keine Nutzungsbedingungen angegeben.",
16871
- "record.metadata.origin": "Über die Daten",
16872
- "record.metadata.otherConstraints": "",
16873
- "record.metadata.owner": "",
16900
+ "record.metadata.otherConstraints": "Zusätzliche Bedingungen",
16901
+ "record.metadata.owner": "Herkunftskatalog",
16874
16902
  "record.metadata.preview": "Vorschau",
16903
+ "record.metadata.producer": "Datenproduzent",
16904
+ "record.metadata.publication": "Veröffentlichungsdatum",
16875
16905
  "record.metadata.publications": "Veröffentlichungen",
16876
16906
  "record.metadata.quality": "Metadatenqualität",
16877
16907
  "record.metadata.quality.contact.failed": "Kontakt nicht angegeben",
@@ -16893,13 +16923,17 @@ var de = {
16893
16923
  "record.metadata.quality.updateFrequency.success": "Aktualisierungsfrequenz angegeben",
16894
16924
  "record.metadata.related": "Ähnliche Datensätze",
16895
16925
  "record.metadata.sheet": "Weitere Informationen verfügbar unter:",
16896
- "record.metadata.status": "",
16926
+ "record.metadata.status": "Status",
16927
+ "record.metadata.technical": "Technische Informationen",
16928
+ "record.metadata.temporalExtent": "Zeitlicher Umfang",
16929
+ "record.metadata.temporalExtent.fromDateToDate": "Von {start} bis {end}",
16930
+ "record.metadata.temporalExtent.sinceDate": "Seit {start}",
16931
+ "record.metadata.temporalExtent.untilDate": "Bis {end}",
16897
16932
  "record.metadata.title": "Titel",
16898
16933
  "record.metadata.topics": "Kategorien",
16899
16934
  "record.metadata.type": "Geographischer Datensatz",
16900
16935
  "record.metadata.uniqueId": "Eindeutige Kennung",
16901
16936
  "record.metadata.updateFrequency": "Aktualisierungsfrequenz der Daten",
16902
- "record.metadata.updateStatus": "Aktualisierungsstatus der Daten",
16903
16937
  "record.metadata.updatedOn": "Letzte Aktualisierung der Dateninformationen",
16904
16938
  "record.metadata.usage": "Nutzung und Einschränkungen",
16905
16939
  "record.more.details": "Weitere Details",
@@ -16962,7 +16996,7 @@ var de = {
16962
16996
  "table.object.count": "Objekte in diesem Datensatz",
16963
16997
  "table.select.data": "Datenquelle",
16964
16998
  "tooltip.html.copy": "HTML kopieren",
16965
- "tooltip.id.copy": "",
16999
+ "tooltip.id.copy": "Eindeutige Kennung kopieren",
16966
17000
  "tooltip.url.copy": "URL kopieren",
16967
17001
  "tooltip.url.open": "URL öffnen",
16968
17002
  "ui.readLess": "Weniger lesen",
@@ -17124,6 +17158,8 @@ var en = {
17124
17158
  "downloads.format.unknown": "unknown",
17125
17159
  "downloads.wfs.featuretype.not.found": "The layer was not found",
17126
17160
  dropFile: dropFile$5,
17161
+ "editor.record.publish": "Publish this record",
17162
+ "editor.record.upToDate": "This record is up to date",
17127
17163
  "externalviewer.dataset.unnamed": "Datahub layer",
17128
17164
  "facets.block.title.OrgForResource": "Organisation",
17129
17165
  "facets.block.title.availableInServices": "Available for",
@@ -17137,21 +17173,21 @@ var en = {
17137
17173
  "facets.block.title.tag.default": "Tag",
17138
17174
  "facets.block.title.th_regions_tree.default": "Regions",
17139
17175
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> to access this feature</div>",
17140
- "language.ca": "Català",
17141
- "language.cs": "Čeština",
17142
- "language.de": "Deutsch",
17176
+ "language.ca": "Catalan",
17177
+ "language.cs": "Czech",
17178
+ "language.de": "German",
17143
17179
  "language.en": "English",
17144
- "language.es": "Español",
17145
- "language.fi": "Suomi",
17146
- "language.fr": "Français",
17147
- "language.is": "Íslenska",
17148
- "language.it": "Italiano",
17149
- "language.ko": "한국어",
17150
- "language.nl": "Nederlands",
17151
- "language.pt": "Português",
17152
- "language.ru": "Русский",
17153
- "language.sk": "Slovenčina",
17154
- "language.zh": "中文",
17180
+ "language.es": "Spanish",
17181
+ "language.fi": "Finnish",
17182
+ "language.fr": "French",
17183
+ "language.is": "Icelandic",
17184
+ "language.it": "Italian",
17185
+ "language.ko": "Korean",
17186
+ "language.nl": "Dutch",
17187
+ "language.pt": "Portuguese",
17188
+ "language.ru": "Russian",
17189
+ "language.sk": "Slovak",
17190
+ "language.zh": "Chinese",
17155
17191
  "map.add.layer": "Add a layer",
17156
17192
  "map.add.layer.catalog": "From the catalog",
17157
17193
  "map.add.layer.file": "From a file",
@@ -17202,17 +17238,20 @@ var en = {
17202
17238
  "record.metadata.author": "Author",
17203
17239
  "record.metadata.catalog": "Catalog",
17204
17240
  "record.metadata.contact": "Contact",
17205
- "record.metadata.details": "Technical information",
17241
+ "record.metadata.creation": "Date of creation",
17242
+ "record.metadata.details": "About the data",
17206
17243
  "record.metadata.download": "Downloads",
17207
17244
  "record.metadata.formats": "Formats",
17208
17245
  "record.metadata.keywords": "Keywords",
17209
- "record.metadata.lastUpdate": "Last updated on",
17246
+ "record.metadata.languages": "Languages",
17247
+ "record.metadata.lastUpdate": "Last updated on {date}",
17210
17248
  "record.metadata.links": "Links",
17211
17249
  "record.metadata.noUsage": "No usage conditions specified for this record.",
17212
- "record.metadata.origin": "About the data",
17213
17250
  "record.metadata.otherConstraints": "Additional Conditions",
17214
17251
  "record.metadata.owner": "Catalog of origin",
17215
17252
  "record.metadata.preview": "Preview",
17253
+ "record.metadata.producer": "Data producer",
17254
+ "record.metadata.publication": "Date of publication",
17216
17255
  "record.metadata.publications": "publications",
17217
17256
  "record.metadata.quality": "Metadata Quality",
17218
17257
  "record.metadata.quality.contact.failed": "Contact is not specified",
@@ -17235,12 +17274,16 @@ var en = {
17235
17274
  "record.metadata.related": "Related records",
17236
17275
  "record.metadata.sheet": "Original metadata",
17237
17276
  "record.metadata.status": "Status",
17277
+ "record.metadata.technical": "Technical information",
17278
+ "record.metadata.temporalExtent": "Temporal extent",
17279
+ "record.metadata.temporalExtent.fromDateToDate": "From { start } to { end }",
17280
+ "record.metadata.temporalExtent.sinceDate": "Since { start }",
17281
+ "record.metadata.temporalExtent.untilDate": "Until { end }",
17238
17282
  "record.metadata.title": "Title",
17239
17283
  "record.metadata.topics": "Categories",
17240
17284
  "record.metadata.type": "Geographical dataset",
17241
17285
  "record.metadata.uniqueId": "Unique Identifier",
17242
17286
  "record.metadata.updateFrequency": "Data Update Frequency",
17243
- "record.metadata.updateStatus": "Data Update Status",
17244
17287
  "record.metadata.updatedOn": "Last Data Information Update",
17245
17288
  "record.metadata.usage": "License and Conditions",
17246
17289
  "record.more.details": "Read more",
@@ -17465,6 +17508,8 @@ var es = {
17465
17508
  "downloads.format.unknown": "",
17466
17509
  "downloads.wfs.featuretype.not.found": "",
17467
17510
  dropFile: dropFile$4,
17511
+ "editor.record.publish": "",
17512
+ "editor.record.upToDate": "",
17468
17513
  "externalviewer.dataset.unnamed": "",
17469
17514
  "facets.block.title.OrgForResource": "",
17470
17515
  "facets.block.title.availableInServices": "",
@@ -17478,21 +17523,21 @@ var es = {
17478
17523
  "facets.block.title.tag.default": "",
17479
17524
  "facets.block.title.th_regions_tree.default": "",
17480
17525
  "favorite.not.authenticated.tooltip": "",
17481
- "language.ca": "Català",
17482
- "language.cs": "Čeština",
17483
- "language.de": "Deutsch",
17484
- "language.en": "English",
17526
+ "language.ca": "Catalán",
17527
+ "language.cs": "Checo",
17528
+ "language.de": "Alemán",
17529
+ "language.en": "Inglés",
17485
17530
  "language.es": "Español",
17486
- "language.fi": "Suomi",
17487
- "language.fr": "Français",
17488
- "language.is": "Íslenska",
17531
+ "language.fi": "Finlandés",
17532
+ "language.fr": "Francés",
17533
+ "language.is": "Islandés",
17489
17534
  "language.it": "Italiano",
17490
- "language.ko": "한국어",
17491
- "language.nl": "Nederlands",
17492
- "language.pt": "Português",
17493
- "language.ru": "Русский",
17494
- "language.sk": "Slovenčina",
17495
- "language.zh": "中文",
17535
+ "language.ko": "Coreano",
17536
+ "language.nl": "Neerlandés",
17537
+ "language.pt": "Portugués",
17538
+ "language.ru": "Ruso",
17539
+ "language.sk": "Eslovaco",
17540
+ "language.zh": "Chino",
17496
17541
  "map.add.layer": "",
17497
17542
  "map.add.layer.catalog": "",
17498
17543
  "map.add.layer.file": "",
@@ -17543,17 +17588,20 @@ var es = {
17543
17588
  "record.metadata.author": "",
17544
17589
  "record.metadata.catalog": "",
17545
17590
  "record.metadata.contact": "",
17591
+ "record.metadata.creation": "",
17546
17592
  "record.metadata.details": "",
17547
17593
  "record.metadata.download": "",
17548
17594
  "record.metadata.formats": "",
17549
17595
  "record.metadata.keywords": "",
17596
+ "record.metadata.languages": "",
17550
17597
  "record.metadata.lastUpdate": "",
17551
17598
  "record.metadata.links": "",
17552
17599
  "record.metadata.noUsage": "",
17553
- "record.metadata.origin": "",
17554
17600
  "record.metadata.otherConstraints": "",
17555
17601
  "record.metadata.owner": "",
17556
17602
  "record.metadata.preview": "",
17603
+ "record.metadata.producer": "",
17604
+ "record.metadata.publication": "",
17557
17605
  "record.metadata.publications": "",
17558
17606
  "record.metadata.quality": "",
17559
17607
  "record.metadata.quality.contact.failed": "",
@@ -17576,12 +17624,16 @@ var es = {
17576
17624
  "record.metadata.related": "",
17577
17625
  "record.metadata.sheet": "",
17578
17626
  "record.metadata.status": "",
17627
+ "record.metadata.technical": "",
17628
+ "record.metadata.temporalExtent": "",
17629
+ "record.metadata.temporalExtent.fromDateToDate": "",
17630
+ "record.metadata.temporalExtent.sinceDate": "",
17631
+ "record.metadata.temporalExtent.untilDate": "",
17579
17632
  "record.metadata.title": "",
17580
17633
  "record.metadata.topics": "",
17581
17634
  "record.metadata.type": "",
17582
17635
  "record.metadata.uniqueId": "",
17583
17636
  "record.metadata.updateFrequency": "",
17584
- "record.metadata.updateStatus": "",
17585
17637
  "record.metadata.updatedOn": "",
17586
17638
  "record.metadata.usage": "",
17587
17639
  "record.more.details": "",
@@ -17678,7 +17730,7 @@ var fr = {
17678
17730
  "chart.type.line": "ligne",
17679
17731
  "chart.type.lineSmooth": "ligne lisse",
17680
17732
  "chart.type.pie": "camembert",
17681
- "dashboard.createRecord": "",
17733
+ "dashboard.createRecord": "Nouvel enregistrement",
17682
17734
  "dashboard.labels.mySpace": "Mon espace",
17683
17735
  "dashboard.records.all": "Catalogue",
17684
17736
  "dashboard.records.myDraft": "Mes brouillons",
@@ -17691,8 +17743,8 @@ var fr = {
17691
17743
  "dashboard.records.userEmail": "Email",
17692
17744
  "dashboard.records.username": "Nom d'utilisateur",
17693
17745
  "dashboard.records.users": "{count, plural, =1{utilisateur} other{utilisateurs}}",
17694
- "dashboard.results.listMetadata": "",
17695
- "dashboard.results.listResources": "",
17746
+ "dashboard.results.listMetadata": "Afficher les métadonnées",
17747
+ "dashboard.results.listResources": "Afficher les ressources",
17696
17748
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Détection du \n format de fichier",
17697
17749
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Récupération des informations \n sur le jeu de données",
17698
17750
  "datafeeder.analysisProgressBar.illustration.samplingData": "Sampling \n des données",
@@ -17806,6 +17858,8 @@ var fr = {
17806
17858
  "downloads.format.unknown": "inconnu",
17807
17859
  "downloads.wfs.featuretype.not.found": "La couche n'a pas été retrouvée",
17808
17860
  dropFile: dropFile$3,
17861
+ "editor.record.publish": "",
17862
+ "editor.record.upToDate": "",
17809
17863
  "externalviewer.dataset.unnamed": "Couche du datahub",
17810
17864
  "facets.block.title.OrgForResource": "Organisation",
17811
17865
  "facets.block.title.availableInServices": "Disponible pour",
@@ -17819,38 +17873,38 @@ var fr = {
17819
17873
  "facets.block.title.tag.default": "Tag",
17820
17874
  "facets.block.title.th_regions_tree.default": "Régions",
17821
17875
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Connectez-vous</a> pour avoir accès à cette fonctionnalité</div>",
17822
- "language.ca": "Català",
17823
- "language.cs": "Čeština",
17824
- "language.de": "Deutsch",
17825
- "language.en": "English",
17826
- "language.es": "Español",
17827
- "language.fi": "Suomi",
17876
+ "language.ca": "Catalan",
17877
+ "language.cs": "Tchèque",
17878
+ "language.de": "Allemand",
17879
+ "language.en": "Anglais",
17880
+ "language.es": "Espagnol",
17881
+ "language.fi": "Finnois",
17828
17882
  "language.fr": "Français",
17829
- "language.is": "Íslenska",
17830
- "language.it": "Italiano",
17831
- "language.ko": "한국어",
17832
- "language.nl": "Nederlands",
17833
- "language.pt": "Português",
17834
- "language.ru": "Русский",
17835
- "language.sk": "Slovenčina",
17836
- "language.zh": "中文",
17837
- "map.add.layer": "",
17838
- "map.add.layer.catalog": "",
17839
- "map.add.layer.file": "",
17840
- "map.add.layer.wfs": "",
17841
- "map.add.layer.wms": "",
17842
- "map.addFromFile.placeholder": "",
17843
- "map.geocoding.placeholder": "",
17844
- "map.help.addFromFile": "",
17845
- "map.layer.add": "",
17846
- "map.layers.available": "",
17847
- "map.layers.list": "",
17883
+ "language.is": "Islandais",
17884
+ "language.it": "Italien",
17885
+ "language.ko": "Coréen",
17886
+ "language.nl": "Néerlandais",
17887
+ "language.pt": "Portugais",
17888
+ "language.ru": "Russe",
17889
+ "language.sk": "Slovaque",
17890
+ "language.zh": "Chinois",
17891
+ "map.add.layer": "Ajouter une couche",
17892
+ "map.add.layer.catalog": "Du catalogue",
17893
+ "map.add.layer.file": "À partir d'un fichier",
17894
+ "map.add.layer.wfs": "Depuis un service WFS",
17895
+ "map.add.layer.wms": "Depuis un service WMS",
17896
+ "map.addFromFile.placeholder": "Cliquez ou déposez un fichier ici",
17897
+ "map.geocoding.placeholder": "Rechercher un lieu",
17898
+ "map.help.addFromFile": "Cliquez ou glissez-déposez un fichier pour l'ajouter à la carte (supporte actuellement uniquement le format GeoJSON).",
17899
+ "map.layer.add": "Ajouter",
17900
+ "map.layers.available": "Couches disponibles",
17901
+ "map.layers.list": "Couches",
17848
17902
  "map.loading.data": "Chargement des données...",
17849
- "map.loading.service": "",
17903
+ "map.loading.service": "Chargement du service...",
17850
17904
  "map.navigation.message": "Veuillez utiliser CTRL + souris (ou deux doigts sur mobile) pour naviguer sur la carte",
17851
17905
  "map.select.layer": "Source de données",
17852
- "map.wfs.urlInput.hint": "",
17853
- "map.wms.urlInput.hint": "",
17906
+ "map.wfs.urlInput.hint": "Entrez l'URL du service WFS",
17907
+ "map.wms.urlInput.hint": "Entrez l'URL du service WMS",
17854
17908
  "multiselect.filter.placeholder": "Rechercher",
17855
17909
  "nav.back": "Retour",
17856
17910
  next: next$3,
@@ -17884,17 +17938,20 @@ var fr = {
17884
17938
  "record.metadata.author": "Auteur",
17885
17939
  "record.metadata.catalog": "Catalogue",
17886
17940
  "record.metadata.contact": "Contact",
17887
- "record.metadata.details": "Informations techniques",
17941
+ "record.metadata.creation": "Date de création",
17942
+ "record.metadata.details": "A propos de la donnée",
17888
17943
  "record.metadata.download": "Téléchargements",
17889
17944
  "record.metadata.formats": "Formats",
17890
17945
  "record.metadata.keywords": "Mots clés",
17891
- "record.metadata.lastUpdate": "Mis à jour le",
17946
+ "record.metadata.languages": "Langues",
17947
+ "record.metadata.lastUpdate": "Mis à jour le {date}",
17892
17948
  "record.metadata.links": "Liens",
17893
17949
  "record.metadata.noUsage": "Aucune condition d'utilisation spécifiée pour ces données",
17894
- "record.metadata.origin": "À propos des données",
17895
17950
  "record.metadata.otherConstraints": "Limitations d'usage",
17896
17951
  "record.metadata.owner": "Catalogue d'origine",
17897
17952
  "record.metadata.preview": "Aperçu",
17953
+ "record.metadata.producer": "Producteur de la donnée",
17954
+ "record.metadata.publication": "Date de publication",
17898
17955
  "record.metadata.publications": "données",
17899
17956
  "record.metadata.quality": "Qualité des métadonnées",
17900
17957
  "record.metadata.quality.contact.failed": "Contact n'est pas renseigné",
@@ -17916,13 +17973,17 @@ var fr = {
17916
17973
  "record.metadata.quality.updateFrequency.success": "Fréquence de mise à jour est renseignée",
17917
17974
  "record.metadata.related": "Voir aussi",
17918
17975
  "record.metadata.sheet": "Fiche de métadonnées d'origine",
17919
- "record.metadata.status": "",
17976
+ "record.metadata.status": "Statut",
17977
+ "record.metadata.technical": "Informations techniques",
17978
+ "record.metadata.temporalExtent": "Etendue temporelle",
17979
+ "record.metadata.temporalExtent.fromDateToDate": "Du { start } au { end }",
17980
+ "record.metadata.temporalExtent.sinceDate": "Depuis le { start }",
17981
+ "record.metadata.temporalExtent.untilDate": "Jusqu'au { end }",
17920
17982
  "record.metadata.title": "Titre",
17921
17983
  "record.metadata.topics": "Catégories",
17922
17984
  "record.metadata.type": "Donnée géographique",
17923
17985
  "record.metadata.uniqueId": "Identificateur de ressource unique",
17924
17986
  "record.metadata.updateFrequency": "Fréquence de mise à jour des données",
17925
- "record.metadata.updateStatus": "Statut de mise à jour des données",
17926
17987
  "record.metadata.updatedOn": "Dernière mise à jour des informations sur les données",
17927
17988
  "record.metadata.usage": "Licences et conditions d'utilisation",
17928
17989
  "record.more.details": "Détails",
@@ -18019,7 +18080,7 @@ var it = {
18019
18080
  "chart.type.line": "grafico a linee",
18020
18081
  "chart.type.lineSmooth": "grafico a linea liscia",
18021
18082
  "chart.type.pie": "grafico a torta",
18022
- "dashboard.createRecord": "",
18083
+ "dashboard.createRecord": "Crea un record",
18023
18084
  "dashboard.labels.mySpace": "Il mio spazio",
18024
18085
  "dashboard.records.all": "Catalogo",
18025
18086
  "dashboard.records.myDraft": "Le mie bozze",
@@ -18032,8 +18093,8 @@ var it = {
18032
18093
  "dashboard.records.userEmail": "Email",
18033
18094
  "dashboard.records.username": "Nome utente",
18034
18095
  "dashboard.records.users": "utenti",
18035
- "dashboard.results.listMetadata": "",
18036
- "dashboard.results.listResources": "",
18096
+ "dashboard.results.listMetadata": "Elenco dei metadati",
18097
+ "dashboard.results.listResources": "Elenco delle risorse",
18037
18098
  "datafeeder.analysisProgressBar.illustration.fileFormatDetection": "Rilevamento del formato dei file",
18038
18099
  "datafeeder.analysisProgressBar.illustration.gatheringDatasetInformation": "Recupero delle informazioni dal dataset",
18039
18100
  "datafeeder.analysisProgressBar.illustration.samplingData": "Campionatura dei dati",
@@ -18147,6 +18208,8 @@ var it = {
18147
18208
  "downloads.format.unknown": "sconosciuto",
18148
18209
  "downloads.wfs.featuretype.not.found": "Il layer non è stato trovato",
18149
18210
  dropFile: dropFile$2,
18211
+ "editor.record.publish": "",
18212
+ "editor.record.upToDate": "",
18150
18213
  "externalviewer.dataset.unnamed": "Layer del datahub",
18151
18214
  "facets.block.title.OrgForResource": "Organizzazione",
18152
18215
  "facets.block.title.availableInServices": "Disponibile per",
@@ -18160,38 +18223,38 @@ var it = {
18160
18223
  "facets.block.title.tag.default": "Tag",
18161
18224
  "facets.block.title.th_regions_tree.default": "Regioni",
18162
18225
  "favorite.not.authenticated.tooltip": "<div><a href=' {link} '>Login</a> per accedere a questa funzionalità</div>",
18163
- "language.ca": "Català",
18164
- "language.cs": "Čeština",
18165
- "language.de": "Deutsch",
18166
- "language.en": "English",
18167
- "language.es": "Español",
18168
- "language.fi": "Suomi",
18169
- "language.fr": "Français",
18170
- "language.is": "Íslenska",
18226
+ "language.ca": "Catalano",
18227
+ "language.cs": "Ceco",
18228
+ "language.de": "Tedesco",
18229
+ "language.en": "Inglese",
18230
+ "language.es": "Spagnolo",
18231
+ "language.fi": "Finlandese",
18232
+ "language.fr": "Francese",
18233
+ "language.is": "Islandese",
18171
18234
  "language.it": "Italiano",
18172
- "language.ko": "한국어",
18173
- "language.nl": "Nederlands",
18174
- "language.pt": "Português",
18175
- "language.ru": "Русский",
18176
- "language.sk": "Slovenčina",
18177
- "language.zh": "中文",
18235
+ "language.ko": "Coreano",
18236
+ "language.nl": "Olandese",
18237
+ "language.pt": "Portoghese",
18238
+ "language.ru": "Russo",
18239
+ "language.sk": "Slovacco",
18240
+ "language.zh": "Cinese",
18178
18241
  "map.add.layer": "Aggiungere un layer",
18179
18242
  "map.add.layer.catalog": "Dal catalogo",
18180
18243
  "map.add.layer.file": "Da un file",
18181
18244
  "map.add.layer.wfs": "Da un WFS",
18182
18245
  "map.add.layer.wms": "Da un WMS",
18183
- "map.addFromFile.placeholder": "",
18184
- "map.geocoding.placeholder": "",
18185
- "map.help.addFromFile": "",
18186
- "map.layer.add": "",
18187
- "map.layers.available": "",
18246
+ "map.addFromFile.placeholder": "Clicca o trascina un file qui",
18247
+ "map.geocoding.placeholder": "Cerca un luogo",
18248
+ "map.help.addFromFile": "Clicca o trascina un file per aggiungerlo alla mappa (attualmente supporta solo il formato GeoJSON)",
18249
+ "map.layer.add": "Aggiungi",
18250
+ "map.layers.available": "Layer disponibili",
18188
18251
  "map.layers.list": "Layers",
18189
18252
  "map.loading.data": "Caricamento dati...",
18190
- "map.loading.service": "",
18253
+ "map.loading.service": "Caricamento del servizio...",
18191
18254
  "map.navigation.message": "Si prega di utilizzare CTRL + mouse (o due dita su mobile) per navigare sulla mappa",
18192
18255
  "map.select.layer": "Sorgente dati",
18193
- "map.wfs.urlInput.hint": "",
18194
- "map.wms.urlInput.hint": "",
18256
+ "map.wfs.urlInput.hint": "Inserisci URL del servizio WFS",
18257
+ "map.wms.urlInput.hint": "Inserisci URL del servizio WMS",
18195
18258
  "multiselect.filter.placeholder": "Cerca",
18196
18259
  "nav.back": "Indietro",
18197
18260
  next: next$2,
@@ -18225,17 +18288,20 @@ var it = {
18225
18288
  "record.metadata.author": "Autore",
18226
18289
  "record.metadata.catalog": "Catalogo",
18227
18290
  "record.metadata.contact": "Contatto",
18228
- "record.metadata.details": "Informazioni tecniche",
18291
+ "record.metadata.creation": "Data di creazione",
18292
+ "record.metadata.details": "A proposito del dati",
18229
18293
  "record.metadata.download": "Download",
18230
18294
  "record.metadata.formats": "Formati",
18231
18295
  "record.metadata.keywords": "Parole chiave",
18232
- "record.metadata.lastUpdate": "Ultimo aggiornamento",
18296
+ "record.metadata.languages": "Lingue",
18297
+ "record.metadata.lastUpdate": "Ultimo aggiornamento il {date}",
18233
18298
  "record.metadata.links": "Collegamenti",
18234
18299
  "record.metadata.noUsage": "Nessuna condizione d'uso specificata per questi dati",
18235
- "record.metadata.origin": "Informazioni sui dati",
18236
18300
  "record.metadata.otherConstraints": "Limitazioni di uso",
18237
18301
  "record.metadata.owner": "Catalogo originale",
18238
18302
  "record.metadata.preview": "Anteprima",
18303
+ "record.metadata.producer": "Produttore dei dati",
18304
+ "record.metadata.publication": "Data di pubblicazione",
18239
18305
  "record.metadata.publications": "pubblicazioni",
18240
18306
  "record.metadata.quality": "Qualità dei metadati",
18241
18307
  "record.metadata.quality.contact.failed": "Il contatto non è specificato",
@@ -18257,13 +18323,17 @@ var it = {
18257
18323
  "record.metadata.quality.updateFrequency.success": "La frequenza di aggiornamento è specificata",
18258
18324
  "record.metadata.related": "Vedi anche",
18259
18325
  "record.metadata.sheet": "Origine del metadata",
18260
- "record.metadata.status": "",
18326
+ "record.metadata.status": "Stato",
18327
+ "record.metadata.technical": "Informazioni tecniche",
18328
+ "record.metadata.temporalExtent": "Periodo di tempo",
18329
+ "record.metadata.temporalExtent.fromDateToDate": "Da {start} a {end}",
18330
+ "record.metadata.temporalExtent.sinceDate": "Dal {start}",
18331
+ "record.metadata.temporalExtent.untilDate": "Fino a {end}",
18261
18332
  "record.metadata.title": "Titolo",
18262
18333
  "record.metadata.topics": "Categorie",
18263
18334
  "record.metadata.type": "Dati geografici",
18264
18335
  "record.metadata.uniqueId": "Identificatore unico di risorsa",
18265
18336
  "record.metadata.updateFrequency": "Frequenza di aggiornamento dei dati",
18266
- "record.metadata.updateStatus": "Stato di aggiornamento dei dati",
18267
18337
  "record.metadata.updatedOn": "Ultimo aggiornamento delle informazioni sui dati",
18268
18338
  "record.metadata.usage": "Licenze e limiti di utilizzo",
18269
18339
  "record.more.details": "Dettagli",
@@ -18488,6 +18558,8 @@ var nl = {
18488
18558
  "downloads.format.unknown": "",
18489
18559
  "downloads.wfs.featuretype.not.found": "",
18490
18560
  dropFile: dropFile$1,
18561
+ "editor.record.publish": "",
18562
+ "editor.record.upToDate": "",
18491
18563
  "externalviewer.dataset.unnamed": "",
18492
18564
  "facets.block.title.OrgForResource": "",
18493
18565
  "facets.block.title.availableInServices": "",
@@ -18501,21 +18573,21 @@ var nl = {
18501
18573
  "facets.block.title.tag.default": "",
18502
18574
  "facets.block.title.th_regions_tree.default": "",
18503
18575
  "favorite.not.authenticated.tooltip": "",
18504
- "language.ca": "Català",
18505
- "language.cs": "Čeština",
18506
- "language.de": "Deutsch",
18507
- "language.en": "English",
18508
- "language.es": "Español",
18509
- "language.fi": "Suomi",
18510
- "language.fr": "Français",
18511
- "language.is": "Íslenska",
18512
- "language.it": "Italiano",
18513
- "language.ko": "한국어",
18576
+ "language.ca": "Catalaans",
18577
+ "language.cs": "Tsjechisch",
18578
+ "language.de": "Duits",
18579
+ "language.en": "Engels",
18580
+ "language.es": "Spaans",
18581
+ "language.fi": "Fins",
18582
+ "language.fr": "Frans",
18583
+ "language.is": "IJslands",
18584
+ "language.it": "Italiaans",
18585
+ "language.ko": "Koreaans",
18514
18586
  "language.nl": "Nederlands",
18515
- "language.pt": "Português",
18516
- "language.ru": "Русский",
18517
- "language.sk": "Slovenčina",
18518
- "language.zh": "中文",
18587
+ "language.pt": "Portugees",
18588
+ "language.ru": "Russisch",
18589
+ "language.sk": "Slowaaks",
18590
+ "language.zh": "Chinees",
18519
18591
  "map.add.layer": "",
18520
18592
  "map.add.layer.catalog": "",
18521
18593
  "map.add.layer.file": "",
@@ -18566,17 +18638,20 @@ var nl = {
18566
18638
  "record.metadata.author": "",
18567
18639
  "record.metadata.catalog": "",
18568
18640
  "record.metadata.contact": "",
18641
+ "record.metadata.creation": "",
18569
18642
  "record.metadata.details": "",
18570
18643
  "record.metadata.download": "",
18571
18644
  "record.metadata.formats": "",
18572
18645
  "record.metadata.keywords": "",
18646
+ "record.metadata.languages": "",
18573
18647
  "record.metadata.lastUpdate": "",
18574
18648
  "record.metadata.links": "",
18575
18649
  "record.metadata.noUsage": "",
18576
- "record.metadata.origin": "",
18577
18650
  "record.metadata.otherConstraints": "",
18578
18651
  "record.metadata.owner": "",
18579
18652
  "record.metadata.preview": "",
18653
+ "record.metadata.producer": "",
18654
+ "record.metadata.publication": "",
18580
18655
  "record.metadata.publications": "",
18581
18656
  "record.metadata.quality": "",
18582
18657
  "record.metadata.quality.contact.failed": "",
@@ -18599,12 +18674,16 @@ var nl = {
18599
18674
  "record.metadata.related": "",
18600
18675
  "record.metadata.sheet": "",
18601
18676
  "record.metadata.status": "",
18677
+ "record.metadata.technical": "",
18678
+ "record.metadata.temporalExtent": "",
18679
+ "record.metadata.temporalExtent.fromDateToDate": "",
18680
+ "record.metadata.temporalExtent.sinceDate": "",
18681
+ "record.metadata.temporalExtent.untilDate": "",
18602
18682
  "record.metadata.title": "",
18603
18683
  "record.metadata.topics": "",
18604
18684
  "record.metadata.type": "",
18605
18685
  "record.metadata.uniqueId": "",
18606
18686
  "record.metadata.updateFrequency": "",
18607
- "record.metadata.updateStatus": "",
18608
18687
  "record.metadata.updatedOn": "",
18609
18688
  "record.metadata.usage": "",
18610
18689
  "record.more.details": "",
@@ -18829,6 +18908,8 @@ var pt = {
18829
18908
  "downloads.format.unknown": "",
18830
18909
  "downloads.wfs.featuretype.not.found": "",
18831
18910
  dropFile: dropFile,
18911
+ "editor.record.publish": "",
18912
+ "editor.record.upToDate": "",
18832
18913
  "externalviewer.dataset.unnamed": "",
18833
18914
  "facets.block.title.OrgForResource": "",
18834
18915
  "facets.block.title.availableInServices": "",
@@ -18842,21 +18923,21 @@ var pt = {
18842
18923
  "facets.block.title.tag.default": "",
18843
18924
  "facets.block.title.th_regions_tree.default": "",
18844
18925
  "favorite.not.authenticated.tooltip": "",
18845
- "language.ca": "Català",
18846
- "language.cs": "Čeština",
18847
- "language.de": "Deutsch",
18848
- "language.en": "English",
18849
- "language.es": "Español",
18850
- "language.fi": "Suomi",
18851
- "language.fr": "Français",
18852
- "language.is": "Íslenska",
18926
+ "language.ca": "Catalão",
18927
+ "language.cs": "Tcheco",
18928
+ "language.de": "Alemão",
18929
+ "language.en": "Inglês",
18930
+ "language.es": "Espanhol",
18931
+ "language.fi": "Finlandês",
18932
+ "language.fr": "Francês",
18933
+ "language.is": "Islandês",
18853
18934
  "language.it": "Italiano",
18854
- "language.ko": "한국어",
18855
- "language.nl": "Nederlands",
18935
+ "language.ko": "Coreano",
18936
+ "language.nl": "Holandês",
18856
18937
  "language.pt": "Português",
18857
- "language.ru": "Русский",
18858
- "language.sk": "Slovenčina",
18859
- "language.zh": "中文",
18938
+ "language.ru": "Russo",
18939
+ "language.sk": "Eslovaco",
18940
+ "language.zh": "Chinês",
18860
18941
  "map.add.layer": "",
18861
18942
  "map.add.layer.catalog": "",
18862
18943
  "map.add.layer.file": "",
@@ -18907,17 +18988,20 @@ var pt = {
18907
18988
  "record.metadata.author": "",
18908
18989
  "record.metadata.catalog": "",
18909
18990
  "record.metadata.contact": "",
18991
+ "record.metadata.creation": "",
18910
18992
  "record.metadata.details": "",
18911
18993
  "record.metadata.download": "",
18912
18994
  "record.metadata.formats": "",
18913
18995
  "record.metadata.keywords": "",
18996
+ "record.metadata.languages": "",
18914
18997
  "record.metadata.lastUpdate": "",
18915
18998
  "record.metadata.links": "",
18916
18999
  "record.metadata.noUsage": "",
18917
- "record.metadata.origin": "",
18918
19000
  "record.metadata.otherConstraints": "",
18919
19001
  "record.metadata.owner": "",
18920
19002
  "record.metadata.preview": "",
19003
+ "record.metadata.producer": "",
19004
+ "record.metadata.publication": "",
18921
19005
  "record.metadata.publications": "",
18922
19006
  "record.metadata.quality": "",
18923
19007
  "record.metadata.quality.contact.failed": "",
@@ -18940,12 +19024,16 @@ var pt = {
18940
19024
  "record.metadata.related": "",
18941
19025
  "record.metadata.sheet": "",
18942
19026
  "record.metadata.status": "",
19027
+ "record.metadata.technical": "",
19028
+ "record.metadata.temporalExtent": "",
19029
+ "record.metadata.temporalExtent.fromDateToDate": "",
19030
+ "record.metadata.temporalExtent.sinceDate": "",
19031
+ "record.metadata.temporalExtent.untilDate": "",
18943
19032
  "record.metadata.title": "",
18944
19033
  "record.metadata.topics": "",
18945
19034
  "record.metadata.type": "",
18946
19035
  "record.metadata.uniqueId": "",
18947
19036
  "record.metadata.updateFrequency": "",
18948
- "record.metadata.updateStatus": "",
18949
19037
  "record.metadata.updatedOn": "",
18950
19038
  "record.metadata.usage": "",
18951
19039
  "record.more.details": "",
@@ -19111,6 +19199,18 @@ class Gn4FieldMapper {
19111
19199
  ...output,
19112
19200
  recordUpdated: toDate(selectField(source, 'changeDate')),
19113
19201
  }),
19202
+ publicationDateForResource: (output, source) => ({
19203
+ ...output,
19204
+ recordPublished: toDate(selectField(source, 'publicationDateForResource')),
19205
+ }),
19206
+ resourceLanguage: (output, source) => {
19207
+ const langList = getAsArray(selectField(source, 'resourceLanguage'));
19208
+ const languages = langList.map((lang) => LANG_3_TO_2_MAPPER[lang]);
19209
+ return {
19210
+ ...output,
19211
+ languages,
19212
+ };
19213
+ },
19114
19214
  link: (output, source) => {
19115
19215
  const rawLinks = getAsArray(selectField(source, 'link'));
19116
19216
  const distributions = rawLinks
@@ -19203,8 +19303,8 @@ class Gn4FieldMapper {
19203
19303
  ],
19204
19304
  };
19205
19305
  },
19206
- resourceTemporalDateRange: (output, source) => {
19207
- const ranges = getAsArray(selectField(source, 'resourceTemporalDateRange'));
19306
+ resourceTemporalExtentDateRange: (output, source) => {
19307
+ const ranges = getAsArray(selectField(source, 'resourceTemporalExtentDateRange'));
19208
19308
  return {
19209
19309
  ...output,
19210
19310
  temporalExtents: ranges.map((range) => {
@@ -19361,6 +19461,7 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
19361
19461
  status: null,
19362
19462
  lineage: null,
19363
19463
  recordUpdated: null,
19464
+ recordPublished: null,
19364
19465
  ownerOrganization: null,
19365
19466
  licenses: [],
19366
19467
  legalConstraints: [],
@@ -19373,6 +19474,7 @@ class Gn4MetadataMapper extends MetadataBaseMapper {
19373
19474
  spatialExtents: [],
19374
19475
  temporalExtents: [],
19375
19476
  overviews: [],
19477
+ languages: [],
19376
19478
  };
19377
19479
  const record = Object.keys(_source).reduce((prev, fieldName) => this.fieldMapper.getMappingFn(fieldName)(prev, _source), emptyRecord);
19378
19480
  return lastValueFrom(this.orgsService.addOrganizationToRecordFromSource(_source, record));
@@ -19532,7 +19634,7 @@ class ElasticsearchService {
19532
19634
  },
19533
19635
  };
19534
19636
  }
19535
- getRelatedRecordPayload(title, uuid, size = 6, _source = ES_SOURCE_SUMMARY) {
19637
+ getRelatedRecordPayload(title, uuid, size = 6, _source = [...ES_SOURCE_SUMMARY, 'allKeywords', 'createDate']) {
19536
19638
  return {
19537
19639
  query: {
19538
19640
  bool: {
@@ -20603,7 +20705,7 @@ const MAP_FEATURE_KEY = 'map';
20603
20705
  const initialMapState = {
20604
20706
  layers: [],
20605
20707
  };
20606
- const reducer$2 = createReducer(initialMapState, on(addLayer, (state, action) => {
20708
+ const reducer$3 = createReducer(initialMapState, on(addLayer, (state, action) => {
20607
20709
  const layers = [...state.layers];
20608
20710
  const layerWithInfo = { ...action.layer, loading: false, error: null };
20609
20711
  if (!('atIndex' in action))
@@ -20652,7 +20754,7 @@ const reducer$2 = createReducer(initialMapState, on(addLayer, (state, action) =>
20652
20754
  : layer),
20653
20755
  })));
20654
20756
  function mapReducer(state, action) {
20655
- return reducer$2(state, action);
20757
+ return reducer$3(state, action);
20656
20758
  }
20657
20759
 
20658
20760
  // Lookup the 'Map' feature state managed by NgRx
@@ -21115,6 +21217,38 @@ function createFuzzyFilter(pattern) {
21115
21217
  };
21116
21218
  }
21117
21219
 
21220
+ function getTemporalRangeUnion(ranges) {
21221
+ let earliestStartDate = Infinity;
21222
+ let latestEndDate = -Infinity;
21223
+ if (ranges.length) {
21224
+ for (let i = 0; i < ranges.length; i++) {
21225
+ const rangeStart = ranges[i].start
21226
+ ? new Date(ranges[i].start).getTime()
21227
+ : -Infinity;
21228
+ const rangeEnd = ranges[i].end
21229
+ ? new Date(ranges[i].end).getTime()
21230
+ : Infinity;
21231
+ if (rangeStart < earliestStartDate) {
21232
+ earliestStartDate = rangeStart;
21233
+ }
21234
+ if (rangeEnd > latestEndDate) {
21235
+ latestEndDate = rangeEnd;
21236
+ }
21237
+ }
21238
+ return {
21239
+ start: earliestStartDate !== -Infinity
21240
+ ? new Date(earliestStartDate).toLocaleDateString()
21241
+ : undefined,
21242
+ end: latestEndDate !== Infinity
21243
+ ? new Date(latestEndDate).toLocaleDateString()
21244
+ : undefined,
21245
+ };
21246
+ }
21247
+ else {
21248
+ return undefined;
21249
+ }
21250
+ }
21251
+
21118
21252
  marker('downloads.wfs.featuretype.not.found');
21119
21253
  const FORMATS = {
21120
21254
  csv: {
@@ -23309,11 +23443,11 @@ class ThumbnailComponent {
23309
23443
  }
23310
23444
  }
23311
23445
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, deps: [{ token: THUMBNAIL_PLACEHOLDER, optional: true }], target: i0.ɵɵFactoryTarget.Component }); }
23312
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, outputs: { placeholderShown: "placeholderShown" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23446
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: { thumbnailUrl: "thumbnailUrl", fit: "fit" }, outputs: { placeholderShown: "placeholderShown" }, viewQueries: [{ propertyName: "imgElement", first: true, predicate: ["imageElement"], descendants: true }, { propertyName: "containerElement", first: true, predicate: ["containerElement"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center justify-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5 w-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n", dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
23313
23447
  }
23314
23448
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ThumbnailComponent, decorators: [{
23315
23449
  type: Component,
23316
- args: [{ selector: 'gn-ui-thumbnail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n" }]
23450
+ args: [{ selector: 'gn-ui-thumbnail', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #containerElement\n class=\"h-full w-full relative shrink-0 overflow-hidden flex items-center justify-center\"\n [ngClass]=\"isPlaceholder ? 'bg-gray-100' : 'bg-white'\"\n [attr.data-cy-is-placeholder]=\"isPlaceholder.toString()\"\n>\n <img\n #imageElement\n class=\"relative w-full object-center\"\n [ngClass]=\"imgFit === 'contain' ? 'h-4/5 w-4/5' : 'h-full'\"\n [ngStyle]=\"{ objectFit: imgFit }\"\n alt=\"thumbnail\"\n loading=\"lazy\"\n (load)=\"setObjectFit()\"\n [src]=\"imgUrl\"\n (error)=\"useFallback()\"\n />\n</div>\n" }]
23317
23451
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
23318
23452
  type: Optional
23319
23453
  }, {
@@ -24060,14 +24194,16 @@ class MaxLinesComponent {
24060
24194
  return result;
24061
24195
  }
24062
24196
  ngOnDestroy() {
24197
+ if (!this.observer)
24198
+ return;
24063
24199
  this.observer.unobserve(this.container.nativeElement.children[0]);
24064
24200
  }
24065
24201
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MaxLinesComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
24066
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: { maxLines: "maxLines" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24202
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: { maxLines: "maxLines" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], ngImport: i0, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24067
24203
  }
24068
24204
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MaxLinesComponent, decorators: [{
24069
24205
  type: Component,
24070
- args: [{ selector: 'gn-ui-max-lines', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n" }]
24206
+ args: [{ selector: 'gn-ui-max-lines', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n #container\n class=\"max-lines overflow-hidden transition-[max-height] duration-300 relative\"\n [ngClass]=\"isExpanded ? 'ease-in' : 'ease-out'\"\n [style.maxHeight]=\"maxHeight\"\n>\n <ng-content></ng-content>\n <div\n *ngIf=\"showToggleButton && !isExpanded\"\n class=\"absolute inset-x-0 bottom-0 bg-gradient-to-b from-transparent to-white h-3\"\n ></div>\n</div>\n<div\n *ngIf=\"showToggleButton\"\n (click)=\"toggleDisplay()\"\n class=\"text-secondary cursor-pointer pt-2.5\"\n>\n {{ (isExpanded ? 'ui.readLess' : 'ui.readMore') | translate }}\n</div>\n" }]
24071
24207
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { maxLines: [{
24072
24208
  type: Input
24073
24209
  }], container: [{
@@ -24122,6 +24258,16 @@ class MetadataInfoComponent {
24122
24258
  return undefined;
24123
24259
  }
24124
24260
  }
24261
+ get temporalExtent() {
24262
+ const temporalExtents = this.metadata.temporalExtents;
24263
+ return getTemporalRangeUnion(temporalExtents);
24264
+ }
24265
+ get shownOrganization() {
24266
+ return this.metadata.ownerOrganization;
24267
+ }
24268
+ get resourceContact() {
24269
+ return this.metadata.contactsForResource?.[0];
24270
+ }
24125
24271
  fieldReady(propName) {
24126
24272
  return !this.incomplete || propName in this.metadata;
24127
24273
  }
@@ -24129,11 +24275,11 @@ class MetadataInfoComponent {
24129
24275
  this.keyword.emit(keyword);
24130
24276
  }
24131
24277
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24132
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24278
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataInfoComponent, selector: "gn-ui-metadata-info", inputs: { metadata: "metadata", incomplete: "incomplete" }, outputs: { keyword: "keyword" }, ngImport: i0, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.recordCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordCreated.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.recordPublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordPublished.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.languages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.technical' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: BadgeComponent, selector: "gn-ui-badge", inputs: ["clickable"] }, { kind: "component", type: ExpandablePanelComponent, selector: "gn-ui-expandable-panel", inputs: ["title", "collapsed"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: CopyTextButtonComponent, selector: "gn-ui-copy-text-button", inputs: ["text", "tooltipText", "displayText", "rows"] }, { kind: "component", type: MarkdownParserComponent, selector: "gn-ui-markdown-parser", inputs: ["textContent"] }, { kind: "component", type: ContentGhostComponent, selector: "gn-ui-content-ghost", inputs: ["showContent", "ghostClass"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }, { kind: "directive", type: GnUiLinkifyDirective, selector: "[gnUiLinkify]" }, { kind: "component", type: MaxLinesComponent, selector: "gn-ui-max-lines", inputs: ["maxLines"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24133
24279
  }
24134
24280
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataInfoComponent, decorators: [{
24135
24281
  type: Component,
24136
- args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n class=\"metadata-origin\"\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.origin' | translate\"\n>\n <p\n *ngIf=\"metadata.lineage\"\n class=\"mb-5 pt-4 whitespace-pre-line break-words text-gray-900\"\n gnUiLinkify\n >\n {{ metadata.lineage }}\n </p>\n <div\n class=\"py-4 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-[10px] gap-x-[20px] text-gray-700 info-grid\"\n >\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.status\">\n <p class=\"text-sm\" translate>record.metadata.updateStatus</p>\n <p class=\"text-primary font-medium mt-1\" translate>\n domain.record.status.{{ metadata.status }}\n </p>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
24282
+ args: [{ selector: 'gn-ui-metadata-info', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"mb-6 md-description sm:mb-4 sm:pr-16\">\n <gn-ui-content-ghost ghostClass=\"h-32\" [showContent]=\"fieldReady('abstract')\">\n <gn-ui-max-lines [maxLines]=\"6\" *ngIf=\"metadata.abstract\">\n <div>\n <gn-ui-markdown-parser\n [textContent]=\"metadata.abstract\"\n ></gn-ui-markdown-parser>\n </div>\n </gn-ui-max-lines>\n </gn-ui-content-ghost>\n</div>\n\n<gn-ui-expandable-panel [title]=\"'record.metadata.usage' | translate\">\n <div class=\"flex flex-col gap-[10px] mr-4 py-[12px] rounded text-gray-900\">\n <ng-container *ngFor=\"let license of licenses\">\n <div *ngIf=\"license.url; else noUrl\" class=\"text-primary\">\n <a\n [href]=\"license.url\"\n target=\"_blank\"\n class=\"cursor-pointer hover:underline transition-all\"\n >\n {{ license.text }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <ng-template #noUrl>\n <div class=\"text-primary\" gnUiLinkify>\n {{ license.text }}\n </div>\n </ng-template>\n </ng-container>\n <ng-container *ngIf=\"legalConstraints.length\">\n <gn-ui-markdown-parser\n *ngFor=\"let constraint of legalConstraints\"\n [textContent]=\"constraint\"\n >\n </gn-ui-markdown-parser>\n </ng-container>\n <ng-container *ngIf=\"otherConstraints.length\">\n <div gnUiLinkify *ngFor=\"let constraint of otherConstraints\">\n <h5 translate class=\"font-medium text-black text-sm mb-[2px] mt-[16px]\">\n record.metadata.otherConstraints\n </h5>\n <gn-ui-markdown-parser [textContent]=\"constraint\">\n </gn-ui-markdown-parser>\n </div>\n </ng-container>\n\n <span class=\"noUsage\" *ngIf=\"!hasUsage\">\n {{ 'record.metadata.noUsage' | translate }}\n </span>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"\n metadata.lineage ||\n metadata.recordUpdated ||\n metadata.updateFrequency ||\n metadata.status\n \"\n [title]=\"'record.metadata.details' | translate\"\n>\n <div *ngIf=\"metadata.lineage\" class=\"text-gray-900 flex flex-col mt-4 gap-2\">\n <p class=\"whitespace-pre-line break-words text-gray-900\" gnUiLinkify>\n {{ metadata.lineage }}\n </p>\n </div>\n <div class=\"flex flex-row gap-6 mt-5 mb-8\" *ngIf=\"resourceContact\">\n <div\n *ngIf=\"resourceContact.organization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"resourceContact.organization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"flex flex-col gap-1\">\n <p class=\"text-sm font-medium\" translate>record.metadata.producer</p>\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n data-cy=\"organization-name\"\n >\n {{ resourceContact.organization?.name }}\n </div>\n <div *ngIf=\"resourceContact.organization?.website\">\n <a\n [href]=\"resourceContact.organization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ resourceContact.organization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n <div class=\"mt-4\" *ngIf=\"resourceContact.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"resourceContact.email\"\n [href]=\"'mailto:' + resourceContact.email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ resourceContact?.email }}</a\n >\n </div>\n </div>\n </div>\n </div>\n <div\n class=\"py-6 px-6 rounded bg-gray-100 grid grid-cols-2 gap-y-6 gap-x-[20px] text-gray-700\"\n >\n <div *ngIf=\"metadata.recordCreated\">\n <p class=\"text-sm\" translate>record.metadata.creation</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordCreated.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.recordPublished\">\n <p class=\"text-sm\" translate>record.metadata.publication</p>\n <p class=\"text-primary font-medium mt-1\">\n {{ metadata.recordPublished.toLocaleDateString() }}\n </p>\n </div>\n <div *ngIf=\"updateFrequency\">\n <p class=\"text-sm\" translate>record.metadata.updateFrequency</p>\n <p\n class=\"text-primary font-medium mt-1 updateFrequency\"\n translate\n [translateParams]=\"{ count: updatedTimes }\"\n >\n {{ updateFrequency }}\n </p>\n </div>\n <div *ngIf=\"metadata.languages\">\n <p class=\"text-sm mb-1\" translate>record.metadata.languages</p>\n <div class=\"flex flex-row gap-1 flex-wrap\">\n <p\n class=\"text-primary font-medium\"\n translate\n *ngFor=\"let language of metadata.languages\"\n >\n language.{{ language }}\n </p>\n </div>\n </div>\n <div *ngIf=\"temporalExtent\">\n <p class=\"text-sm\" translate>record.metadata.temporalExtent</p>\n <div class=\"flex flex-row gap-1 mb-1 text-primary font-medium\">\n <p\n *ngIf=\"temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{\n start: temporalExtent.start,\n end: temporalExtent.end\n }\"\n >\n record.metadata.temporalExtent.fromDateToDate\n </p>\n <p\n *ngIf=\"temporalExtent.start && !temporalExtent.end\"\n translate\n [translateParams]=\"{ start: temporalExtent.start }\"\n >\n record.metadata.temporalExtent.sinceDate\n </p>\n <p\n *ngIf=\"!temporalExtent.start && temporalExtent.end\"\n translate\n [translateParams]=\"{ end: temporalExtent.end }\"\n >\n record.metadata.temporalExtent.untilDate\n </p>\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n<gn-ui-expandable-panel\n *ngIf=\"metadata.landingPage\"\n [title]=\"'record.metadata.technical' | translate\"\n>\n <div class=\"flex flex-col gap-4 mr-4 py-5 rounded text-gray-700\">\n <div *ngIf=\"metadata.recordUpdated\">\n <p class=\"text-sm\" translate>record.metadata.updatedOn</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.recordUpdated && metadata.recordUpdated.toLocaleString() }}\n </p>\n </div>\n <div *ngIf=\"metadata.landingPage\">\n <p class=\"text-sm\" translate>record.metadata.sheet</p>\n <p class=\"text-primary font-medium\" translate>\n <a [href]=\"metadata.landingPage\" target=\"_blank\">\n <span class=\"break-all\" gnUiLinkify>{{ metadata.landingPage }}</span>\n </a>\n </p>\n </div>\n <div *ngIf=\"metadata.ownerOrganization\">\n <p class=\"text-sm\" translate>record.metadata.owner</p>\n <p class=\"text-primary font-medium\">\n {{ metadata.ownerOrganization.name }}\n </p>\n </div>\n <div *ngIf=\"metadata.uniqueIdentifier\">\n <p class=\"text-sm\" translate>record.metadata.uniqueId</p>\n <div class=\"flex flex-row content-align items-end gap-1\">\n <gn-ui-copy-text-button\n [text]=\"metadata.uniqueIdentifier\"\n [tooltipText]=\"'tooltip.id.copy' | translate\"\n [displayText]=\"false\"\n ></gn-ui-copy-text-button>\n <p class=\"text-primary font-medium\">\n {{ metadata.uniqueIdentifier }}\n </p>\n </div>\n </div>\n <div *ngIf=\"metadata.topics?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.topics</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n *ngFor=\"let topic of metadata.topics\"\n >{{ topic }}</gn-ui-badge\n >\n </div>\n </div>\n <div *ngIf=\"metadata.keywords?.length\">\n <p class=\"text-sm mb-1\" translate>record.metadata.keywords</p>\n <div class=\"sm:pb-4 sm:pr-16\">\n <gn-ui-badge\n class=\"inline-block mr-2 mb-2 lowercase\"\n (click)=\"onKeywordClick(keyword)\"\n [clickable]=\"true\"\n *ngFor=\"let keyword of metadata.keywords\"\n >{{ keyword.label }}</gn-ui-badge\n >\n </div>\n </div>\n </div>\n</gn-ui-expandable-panel>\n", styles: [".md-description ::ng-deep a{@apply underline text-blue-600 hover:text-blue-800;}.info-grid>:nth-last-child(n+3){padding-bottom:10px;@apply border-b border-gray-300;}:host ::ng-deep gn-ui-copy-text-button button mat-icon{transform:scale(.8)}\n"] }]
24137
24283
  }], propDecorators: { metadata: [{
24138
24284
  type: Input
24139
24285
  }], incomplete: [{
@@ -24173,23 +24319,23 @@ class ButtonComponent {
24173
24319
  this.extraClass = '';
24174
24320
  this.buttonClick = new EventEmitter();
24175
24321
  }
24176
- // btn-classes are explicited to allow tailwind recognize them and add it in css.
24177
24322
  set type(value) {
24323
+ // btn-classes are written in full to be picked up by tailwind
24178
24324
  switch (value) {
24179
24325
  case 'primary':
24180
- this.btnClass = 'btn-primary';
24326
+ this.btnClass = 'gn-ui-btn-primary';
24181
24327
  break;
24182
24328
  case 'secondary':
24183
- this.btnClass = 'btn-secondary';
24329
+ this.btnClass = 'gn-ui-btn-secondary';
24184
24330
  break;
24185
24331
  case 'outline':
24186
- this.btnClass = 'btn-outline';
24332
+ this.btnClass = 'gn-ui-btn-outline';
24187
24333
  break;
24188
24334
  case 'light':
24189
- this.btnClass = 'btn-light';
24335
+ this.btnClass = 'gn-ui-btn-light';
24190
24336
  break;
24191
24337
  default:
24192
- this.btnClass = 'btn-default';
24338
+ this.btnClass = 'gn-ui-btn-default';
24193
24339
  break;
24194
24340
  }
24195
24341
  }
@@ -24202,11 +24348,11 @@ class ButtonComponent {
24202
24348
  propagateToDocumentOnly(event);
24203
24349
  }
24204
24350
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24205
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, isStandalone: true, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24351
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: ButtonComponent, isStandalone: true, selector: "gn-ui-button", inputs: { type: "type", disabled: "disabled", extraClass: "extraClass" }, outputs: { buttonClick: "buttonClick" }, ngImport: i0, template: "<button\n type=\"button\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [""], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24206
24352
  }
24207
24353
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: ButtonComponent, decorators: [{
24208
24354
  type: Component,
24209
- args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button\n type=\"button\"\n class=\"flex flex-row items-center text-[1em] leading-none p-[1em] rounded-[0.25em] transition-all duration-100 focus:outline-none disabled:opacity-50 disabled:pointer-events-none\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n", styles: [":host ::ng-deep mat-icon.mat-icon{margin-top:-.325em;margin-bottom:-.325em}\n"] }]
24355
+ args: [{ selector: 'gn-ui-button', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, template: "<button\n type=\"button\"\n [class]=\"classList\"\n [disabled]=\"disabled\"\n (click)=\"handleClick($event)\"\n>\n <ng-content></ng-content>\n</button>\n" }]
24210
24356
  }], propDecorators: { type: [{
24211
24357
  type: Input
24212
24358
  }], disabled: [{
@@ -24486,11 +24632,11 @@ class CarouselComponent {
24486
24632
  this.emblaApi.scrollTo(stepIndex);
24487
24633
  }
24488
24634
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component }); }
24489
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24635
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: CarouselComponent, selector: "gn-ui-carousel", inputs: { containerClass: "containerClass", stepsContainerClass: "stepsContainerClass" }, viewQueries: [{ propertyName: "carouselOverflowContainer", first: true, predicate: ["carouselOverflowContainer"], descendants: true }], ngImport: i0, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n *ngIf=\"steps.length > 1\"\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24490
24636
  }
24491
24637
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: CarouselComponent, decorators: [{
24492
24638
  type: Component,
24493
- args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
24639
+ args: [{ selector: 'gn-ui-carousel', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div #carouselOverflowContainer class=\"overflow-hidden h-full w-full\">\n <div class=\"carousel-container flex flex-row\" [ngClass]=\"containerClass\">\n <ng-content></ng-content>\n </div>\n</div>\n<div\n *ngIf=\"steps.length > 1\"\n class=\"absolute right-0 top-0 flex flex-row justify-center gap-[10px] p-1\"\n [ngClass]=\"stepsContainerClass\"\n>\n <button\n *ngFor=\"let step of steps; let i = index\"\n class=\"carousel-step-dot\"\n (click)=\"scrollToStep(i)\"\n [ngClass]=\"selectedStep === i ? 'bg-secondary' : 'bg-gray-400'\"\n ></button>\n</div>\n", styles: [":host .carousel-container ::ng-deep>*{flex-shrink:0}:host{position:relative}.carousel-step-dot{width:6px;height:6px;border-radius:6px;position:relative}.carousel-step-dot:after{content:\"\";position:absolute;left:-4px;top:-4px;width:14px;height:14px}\n"] }]
24494
24640
  }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }]; }, propDecorators: { containerClass: [{
24495
24641
  type: Input
24496
24642
  }], stepsContainerClass: [{
@@ -24642,11 +24788,11 @@ class MetadataContactComponent {
24642
24788
  this.organizationClick.emit(this.shownOrganization);
24643
24789
  }
24644
24790
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24645
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24791
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: MetadataContactComponent, selector: "gn-ui-metadata-contact", inputs: { metadata: "metadata" }, outputs: { organizationClick: "organizationClick", contactClick: "contactClick" }, ngImport: i0, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: ThumbnailComponent, selector: "gn-ui-thumbnail", inputs: ["thumbnailUrl", "fit"], outputs: ["placeholderShown"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24646
24792
  }
24647
24793
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: MetadataContactComponent, decorators: [{
24648
24794
  type: Component,
24649
- args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
24795
+ args: [{ selector: 'gn-ui-metadata-contact', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"py-5 px-5 rounded bg-gray-100 text-black mb-6\">\n <div class=\"grid gap-3 overflow-hidden\">\n <div>\n <p class=\"text-sm font-medium\" translate>record.metadata.contact</p>\n </div>\n <div\n *ngIf=\"shownOrganization?.logoUrl?.href\"\n class=\"flex items-center justify-center border-solid border border-gray-300 rounded-md bg-white h-32 overflow-hidden\"\n >\n <gn-ui-thumbnail\n class=\"relative h-full w-full\"\n [thumbnailUrl]=\"shownOrganization.logoUrl.href\"\n fit=\"contain\"\n ></gn-ui-thumbnail>\n </div>\n <div class=\"grid gap-1\">\n <div class=\"flex\">\n <div\n class=\"text-primary font-title text-21 mr-2 cursor-pointer hover:underline\"\n (click)=\"onOrganizationClick()\"\n data-cy=\"organization-name\"\n >\n {{ shownOrganization?.name }}\n </div>\n </div>\n <div *ngIf=\"shownOrganization?.website\">\n <a\n [href]=\"shownOrganization.website\"\n target=\"_blank\"\n class=\"contact-website text-primary text-sm cursor-pointer hover:underline transition-all\"\n >{{ shownOrganization.website }}\n <mat-icon\n class=\"material-symbols-outlined !w-[12px] !h-[12px] !text-[12px] opacity-75 shrink-0\"\n >open_in_new</mat-icon\n >\n </a>\n </div>\n </div>\n <div class=\"grid gap-5 py-3 overflow-hidden\">\n <div *ngIf=\"contacts[0]?.phone\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >call_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">{{ contacts[0].phone }}</p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.email\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n mail_outline</mat-icon\n >\n <a\n *ngIf=\"contacts.length\"\n [href]=\"'mailto:' + contacts[0].email\"\n class=\"text-sm hover:underline ml-2\"\n target=\"_blank\"\n data-cy=\"contact-email\"\n >{{ contacts[0].email }}</a\n >\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.firstName || contacts[0]?.lastName\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >person_outline</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p class=\"text-sm\">\n {{ contacts[0]?.firstName || '' }}\n {{ contacts[0]?.lastName || '' }}\n </p>\n </div>\n </div>\n </div>\n <div *ngIf=\"contacts[0]?.address\">\n <div class=\"flex\">\n <mat-icon\n class=\"material-symbols-outlined !w-5 !h-5 !text-[20px] opacity-75 shrink-0\"\n >\n location_on</mat-icon\n >\n <div class=\"flex flex-col ml-2\">\n <p *ngFor=\"let addressPart of address\" class=\"text-sm\">\n {{ addressPart }}\n </p>\n </div>\n </div>\n </div>\n </div>\n </div>\n</div>\n" }]
24650
24796
  }], propDecorators: { metadata: [{
24651
24797
  type: Input
24652
24798
  }], organizationClick: [{
@@ -24870,11 +25016,11 @@ class DropdownSelectorComponent {
24870
25016
  }
24871
25017
  }
24872
25018
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
24873
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: { title: "title", showTitle: "showTitle", ariaName: "ariaName", choices: "choices", selected: "selected", maxRows: "maxRows", extraBtnClass: "extraBtnClass", minWidth: "minWidth" }, outputs: { selectValue: "selectValue" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "choiceInputs", predicate: ["choiceInputs"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"!p-[8px] !pl-[16px] flex flex-row w-full {{ extraBtnClass }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25019
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: { title: "title", showTitle: "showTitle", ariaName: "ariaName", choices: "choices", selected: "selected", maxRows: "maxRows", extraBtnClass: "extraBtnClass", minWidth: "minWidth" }, outputs: { selectValue: "selectValue" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "choiceInputs", predicate: ["choiceInputs"], descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"bg-background !p-[8px] !pl-[16px] flex flex-row w-full {{\n extraBtnClass\n }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
24874
25020
  }
24875
25021
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownSelectorComponent, decorators: [{
24876
25022
  type: Component,
24877
- args: [{ selector: 'gn-ui-dropdown-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"!p-[8px] !pl-[16px] flex flex-row w-full {{ extraBtnClass }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n" }]
25023
+ args: [{ selector: 'gn-ui-dropdown-selector', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col sm:flex-row sm:items-center relative w-full\">\n <span\n *ngIf=\"showTitle\"\n class=\"tracking-wide text-sm mb-2 sm:mb-0 sm:mr-2 whitespace-nowrap\"\n [attr.for]=\"id\"\n >\n {{ title }}\n </span>\n <gn-ui-button\n type=\"outline\"\n class=\"grow min-w-0\"\n extraClass=\"bg-background !p-[8px] !pl-[16px] flex flex-row w-full {{\n extraBtnClass\n }}\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n (keydown)=\"handleTriggerKeydown($event)\"\n >\n <div class=\"grow font-medium truncate py-1 mr-2 text-left\">\n {{ getChoiceLabel() | translate }}\n </div>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n </gn-ui-button>\n</div>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.min-width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n >\n <button\n #choiceInputs\n type=\"button\"\n *ngFor=\"let choice of choices\"\n [title]=\"choice.label | translate\"\n class=\"flex px-5 py-1 w-full text-start cursor-pointer transition-colors\"\n [ngClass]=\"\n isSelected(choice)\n ? 'text-white bg-primary hover:text-white hover:bg-primary-darker focus:text-white focus:bg-primary-darker'\n : 'text-gray-900 hover:text-primary-darkest hover:bg-gray-50 focus:text-primary-darkest focus:bg-gray-50'\n \"\n (click)=\"onSelectValue(choice)\"\n (keydown)=\"selectIfEnter($event, choice)\"\n [attr.data-cy-value]=\"choice.value.toString()\"\n [attr.data-cy-active]=\"isSelected(choice) ? 'true' : undefined\"\n >\n <span class=\"text-[14px]\">\n {{ choice.label | translate }}\n </span>\n </button>\n </div>\n</ng-template>\n" }]
24878
25024
  }], propDecorators: { title: [{
24879
25025
  type: Input
24880
25026
  }], showTitle: [{
@@ -25050,11 +25196,11 @@ class DropdownMultiselectComponent {
25050
25196
  this.setFocus();
25051
25197
  }
25052
25198
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, deps: [{ token: i1$6.ScrollStrategyOptions }], target: i0.ɵɵFactoryTarget.Component }); }
25053
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25199
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: DropdownMultiselectComponent, selector: "gn-ui-dropdown-multiselect", inputs: { title: "title", choices: "choices", selected: "selected", allowSearch: "allowSearch", maxRows: "maxRows", searchInputValue: "searchInputValue" }, outputs: { selectValues: "selectValues" }, viewQueries: [{ propertyName: "overlayOrigin", first: true, predicate: ["overlayOrigin"], descendants: true }, { propertyName: "overlay", first: true, predicate: CdkConnectedOverlay, descendants: true }, { propertyName: "overlayContainer", first: true, predicate: ["overlayContainer"], descendants: true, read: ElementRef }, { propertyName: "searchFieldInput", first: true, predicate: ["searchFieldInput"], descendants: true }, { propertyName: "checkboxes", predicate: ["checkBox"], descendants: true, read: ElementRef }], ngImport: i0, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"bg-background w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2$1.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2$1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2$1.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i1$6.CdkConnectedOverlay, selector: "[cdk-connected-overlay], [connected-overlay], [cdkConnectedOverlay]", inputs: ["cdkConnectedOverlayOrigin", "cdkConnectedOverlayPositions", "cdkConnectedOverlayPositionStrategy", "cdkConnectedOverlayOffsetX", "cdkConnectedOverlayOffsetY", "cdkConnectedOverlayWidth", "cdkConnectedOverlayHeight", "cdkConnectedOverlayMinWidth", "cdkConnectedOverlayMinHeight", "cdkConnectedOverlayBackdropClass", "cdkConnectedOverlayPanelClass", "cdkConnectedOverlayViewportMargin", "cdkConnectedOverlayScrollStrategy", "cdkConnectedOverlayOpen", "cdkConnectedOverlayDisableClose", "cdkConnectedOverlayTransformOriginOn", "cdkConnectedOverlayHasBackdrop", "cdkConnectedOverlayLockPosition", "cdkConnectedOverlayFlexibleDimensions", "cdkConnectedOverlayGrowAfterOpen", "cdkConnectedOverlayPush"], outputs: ["backdropClick", "positionChange", "attach", "detach", "overlayKeydown", "overlayOutsideClick"], exportAs: ["cdkConnectedOverlay"] }, { kind: "directive", type: i1$6.CdkOverlayOrigin, selector: "[cdk-overlay-origin], [overlay-origin], [cdkOverlayOrigin]", exportAs: ["cdkOverlayOrigin"] }, { kind: "component", type: ButtonComponent, selector: "gn-ui-button", inputs: ["type", "disabled", "extraClass"], outputs: ["buttonClick"] }, { kind: "pipe", type: i1$1.TranslatePipe, name: "translate" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25054
25200
  }
25055
25201
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: DropdownMultiselectComponent, decorators: [{
25056
25202
  type: Component,
25057
- args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
25203
+ args: [{ selector: 'gn-ui-dropdown-multiselect', changeDetection: ChangeDetectionStrategy.OnPush, template: "<gn-ui-button\n type=\"outline\"\n extraClass=\"bg-background w-full !p-[8px] !pl-[16px]\"\n [title]=\"title\"\n [attr.aria-owns]=\"id\"\n (buttonClick)=\"openOverlay()\"\n (keydown)=\"handleTriggerKeydown($event)\"\n cdkOverlayOrigin\n #overlayOrigin=\"cdkOverlayOrigin\"\n>\n <div class=\"grow flex items-center mr-2 gap-2 overflow-hidden\">\n <div class=\"text-left font-medium truncate py-1\">\n {{ title }}\n </div>\n <div\n *ngIf=\"hasSelectedChoices\"\n class=\"shrink-0 rounded-full text-primary bg-primary-opacity-25 text-white font-bold text-[12px] w-5 h-5 flex items-center justify-center mr-1 selected-count\"\n >\n {{ selected.length }}\n </div>\n </div>\n <button class=\"h-6 w-6\" data-cy=\"clearSelection\">\n <mat-icon\n class=\"material-symbols-outlined shrink-0 opacity-40 mr-1.5 hover:opacity-80 transition-colors clear-btn\"\n *ngIf=\"hasSelectedChoices && !overlayOpen\"\n (click)=\"clearSelection($event)\"\n >\n close\n </mat-icon>\n </button>\n <mat-icon class=\"material-symbols-outlined shrink-0 opacity-40\">\n <ng-container *ngIf=\"overlayOpen\">expand_less</ng-container>\n <ng-container *ngIf=\"!overlayOpen\">expand_more</ng-container>\n </mat-icon>\n</gn-ui-button>\n\n<ng-template\n cdkConnectedOverlay\n cdkConnectedOverlayHasBackdrop\n cdkConnectedOverlayBackdropClass=\"cdk-overlay-transparent-backdrop\"\n [cdkConnectedOverlayOrigin]=\"overlayOrigin\"\n [cdkConnectedOverlayOpen]=\"overlayOpen\"\n [cdkConnectedOverlayPositions]=\"overlayPositions\"\n [cdkConnectedOverlayScrollStrategy]=\"scrollStrategy\"\n [cdkConnectedOverlayFlexibleDimensions]=\"true\"\n (overlayOutsideClick)=\"closeOverlay()\"\n (detach)=\"closeOverlay()\"\n>\n <div\n class=\"bg-white border border-gray-300 rounded shadow-lg py-2 w-full overflow-x-hidden overflow-y-auto overlay-container\"\n [style.max-height]=\"overlayMaxHeight\"\n [style.width]=\"overlayWidth\"\n role=\"listbox\"\n tabindex=\"-1\"\n [attr.id]=\"id\"\n [attr.aria-multiselectable]=\"true\"\n [attr.aria-label]=\"title\"\n (keydown)=\"handleOverlayKeydown($event)\"\n #overlayContainer\n >\n <div\n class=\"border border-gray-300 rounded mb-2 mx-2 min-h-[44px] flex flex-row flex-wrap p-2 focus-within:rounded focus-within:border-2 focus-within:border-primary\"\n >\n <button\n type=\"button\"\n *ngFor=\"let selected of selectedChoices\"\n [title]=\"selected.label\"\n class=\"max-w-full bg-main text-white rounded pr-[7px] flex gap-1 items-center opacity-70 hover:opacity-100 focus:opacity-100 transition-opacity mb-1\"\n (click)=\"select(selected, false)\"\n >\n <div class=\"text-sm truncate leading-[26px] px-2\">\n {{ selected.label }}\n </div>\n <div\n class=\"flex items-center justify-center rounded-full bg-white text-main h-[13px] w-[13px] pt-px -mt-px shrink-0\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[12px] !w-[12px] text-[12px]\"\n >\n close</mat-icon\n >\n </div>\n </button>\n\n <div *ngIf=\"allowSearch\" class=\"w-[50%] relative grow shrink\">\n <input\n #searchFieldInput\n class=\"w-full px-2 truncate text-[14px] h-full overlaySearchInput focus:outline-none\"\n [(ngModel)]=\"searchInputValue\"\n [placeholder]=\"'multiselect.filter.placeholder' | translate\"\n />\n <button\n *ngIf=\"!!searchInputValue\"\n class=\"absolute top-1/2 -translate-y-1/2 right-0 px-[7px] leading-tight clear-search-input mr-2\"\n (click)=\"clearSearchInputValue($event)\"\n >\n <mat-icon\n class=\"material-symbols-outlined !h-[10px] !w-[12px] text-[12px]\"\n >\n close\n </mat-icon>\n </button>\n </div>\n </div>\n\n <label\n *ngFor=\"let choice of filteredChoicesByText\"\n [title]=\"choice.label\"\n class=\"flex px-5 py-1 w-full text-gray-900 cursor-pointer hover:text-primary-darkest hover:bg-gray-50 focus-within:text-primary-darkest focus-within:bg-gray-50 transition-colors\"\n >\n <input\n class=\"w-[18px] h-[18px] align-text-top shrink-0\"\n type=\"checkbox\"\n #checkBox\n [checked]=\"isSelected(choice)\"\n (change)=\"select(choice, checkBox.checked)\"\n />\n <span class=\"ml-[8px] text-[14px] truncate\">\n {{ choice.label }}\n </span>\n </label>\n </div>\n</ng-template>\n" }]
25058
25204
  }], ctorParameters: function () { return [{ type: i1$6.ScrollStrategyOptions }]; }, propDecorators: { title: [{
25059
25205
  type: Input
25060
25206
  }], choices: [{
@@ -25482,11 +25628,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25482
25628
 
25483
25629
  class NavigationButtonComponent {
25484
25630
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
25485
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 text-white rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: [""], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25631
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: NavigationButtonComponent, selector: "gn-ui-navigation-button", inputs: { label: "label", icon: "icon" }, ngImport: i0, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
25486
25632
  }
25487
25633
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: NavigationButtonComponent, decorators: [{
25488
25634
  type: Component,
25489
- args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 text-white rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n" }]
25635
+ args: [{ selector: 'gn-ui-navigation-button', changeDetection: ChangeDetectionStrategy.OnPush, template: "<button\n class=\"group flex items-center justify-center gap-1 backdrop-blur p-1 bg-primary-opacity-30 rounded content-center\"\n>\n <mat-icon class=\"material-symbols-outlined align-middle w-[18px]\">{{\n icon\n }}</mat-icon>\n <span\n class=\"mx-2 mt-0.5 text-[16px] tracking-widest content-center opacity-75\"\n >{{ label.toUpperCase() }}</span\n >\n</button>\n", styles: ["button{color:var(--navigation-button-color, --color-background)}\n"] }]
25490
25636
  }], propDecorators: { label: [{
25491
25637
  type: Input
25492
25638
  }], icon: [{
@@ -25619,7 +25765,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
25619
25765
 
25620
25766
  class FormFieldComponent {
25621
25767
  set value(v) {
25622
- this.formControl.setValue(v);
25768
+ this.formControl.setValue(v, {
25769
+ emitEvent: false,
25770
+ });
25623
25771
  }
25624
25772
  constructor() {
25625
25773
  this.formControl = new FormControl();
@@ -26623,7 +26771,7 @@ const initSearch = () => {
26623
26771
  const initialState = {
26624
26772
  [DEFAULT_SEARCH_KEY]: initSearch(),
26625
26773
  };
26626
- function reducer$1(state = initialState, action) {
26774
+ function reducer$2(state = initialState, action) {
26627
26775
  const { id } = action;
26628
26776
  if (id) {
26629
26777
  let stateSearch = state[id] || initSearch();
@@ -27565,11 +27713,11 @@ class FavoriteStarComponent {
27565
27713
  });
27566
27714
  }
27567
27715
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, deps: [{ token: FavoritesService }, { token: PlatformServiceInterface }, { token: i0.ChangeDetectorRef }, { token: AuthService }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
27568
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row content-center\">\n <span\n class=\"align-text-top mr-1.5 mt-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n class=\"mt-1\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count mt-1.5\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: ["toggled", "disabled"], outputs: ["newValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27716
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: FavoriteStarComponent, selector: "gn-ui-favorite-star", inputs: { displayCount: "displayCount", record: "record" }, viewQueries: [{ propertyName: "starToggleRef", first: true, predicate: StarToggleComponent, descendants: true, read: ElementRef }], ngImport: i0, template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n", styles: [""], dependencies: [{ kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1$1.TranslateDirective, selector: "[translate],[ngx-translate]", inputs: ["translate", "translateParams"] }, { kind: "component", type: StarToggleComponent, selector: "gn-ui-star-toggle", inputs: ["toggled", "disabled"], outputs: ["newValue"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
27569
27717
  }
27570
27718
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FavoriteStarComponent, decorators: [{
27571
27719
  type: Component,
27572
- args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-row content-center\">\n <span\n class=\"align-text-top mr-1.5 mt-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n class=\"mt-1\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count mt-1.5\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n" }]
27720
+ args: [{ selector: 'gn-ui-favorite-star', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-row items-center\">\n <span\n class=\"align-text-top mr-1.5 favorite-count\"\n *ngIf=\"hasFavoriteCount && displayCount\"\n >{{ favoriteCount }}</span\n >\n <gn-ui-star-toggle\n [toggled]=\"isFavorite$ | async\"\n (newValue)=\"toggleFavorite($event)\"\n [disabled]=\"loading || (isAnonymous$ | async)\"\n ></gn-ui-star-toggle>\n <span\n class=\"align-text-top ml-1.5 favorite-count\"\n *ngIf=\"!displayCount\"\n translate=\"datahub.record.addToFavorites\"\n ></span>\n</div>\n" }]
27573
27721
  }], ctorParameters: function () { return [{ type: FavoritesService }, { type: PlatformServiceInterface }, { type: i0.ChangeDetectorRef }, { type: AuthService }, { type: i1$1.TranslateService }]; }, propDecorators: { displayCount: [{
27574
27722
  type: Input
27575
27723
  }], record: [{
@@ -28247,7 +28395,7 @@ class FeatureSearchModule {
28247
28395
  },
28248
28396
  ], imports: [CommonModule,
28249
28397
  TranslateModule.forChild(),
28250
- StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$1, {
28398
+ StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$2, {
28251
28399
  initialState,
28252
28400
  }),
28253
28401
  EffectsModule.forFeature([SearchEffects]),
@@ -28277,7 +28425,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
28277
28425
  imports: [
28278
28426
  CommonModule,
28279
28427
  TranslateModule.forChild(),
28280
- StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$1, {
28428
+ StoreModule.forFeature(SEARCH_FEATURE_KEY, reducer$2, {
28281
28429
  initialState,
28282
28430
  }),
28283
28431
  EffectsModule.forFeature([SearchEffects]),
@@ -29050,7 +29198,7 @@ const mdViewReducer = createReducer(initialMdviewState, on(loadFullMetadata, (st
29050
29198
  const { metadata, related, ...stateWithoutMd } = state;
29051
29199
  return stateWithoutMd;
29052
29200
  }));
29053
- function reducer(state, action) {
29201
+ function reducer$1(state, action) {
29054
29202
  return mdViewReducer(state, action);
29055
29203
  }
29056
29204
 
@@ -31000,11 +31148,11 @@ class LanguageSwitcherComponent {
31000
31148
  this.translate.use(value);
31001
31149
  }
31002
31150
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, deps: [{ token: LANGUAGES_LIST, optional: true }, { token: i1$1.TranslateService }], target: i0.ɵɵFactoryTarget.Component }); }
31003
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center text-white !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }] }); }
31151
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: LanguageSwitcherComponent, selector: "gn-ui-language-switcher", ngImport: i0, template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1\"\n>\n</gn-ui-dropdown-selector>\n", styles: [""], dependencies: [{ kind: "component", type: DropdownSelectorComponent, selector: "gn-ui-dropdown-selector", inputs: ["title", "showTitle", "ariaName", "choices", "selected", "maxRows", "extraBtnClass", "minWidth"], outputs: ["selectValue"] }] }); }
31004
31152
  }
31005
31153
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: LanguageSwitcherComponent, decorators: [{
31006
31154
  type: Component,
31007
- args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n [extraBtnClass]=\"'flex justify-items-center text-white !pl-2 !py-1'\"\n>\n</gn-ui-dropdown-selector>\n" }]
31155
+ args: [{ selector: 'gn-ui-language-switcher', template: "<gn-ui-dropdown-selector\n [title]=\"'languages'\"\n [choices]=\"languageList\"\n (selectValue)=\"changeLanguage($event)\"\n [selected]=\"currentLang\"\n ariaName=\"languages\"\n [showTitle]=\"false\"\n extraBtnClass=\"bg-transparent flex justify-items-center !pl-2 !py-1\"\n>\n</gn-ui-dropdown-selector>\n" }]
31008
31156
  }], ctorParameters: function () { return [{ type: undefined, decorators: [{
31009
31157
  type: Optional
31010
31158
  }, {
@@ -31331,18 +31479,18 @@ class DataViewPermalinkComponent {
31331
31479
  if (config) {
31332
31480
  const { aggregation, xProperty, yProperty, chartType } = config;
31333
31481
  const url = new URL(`${this.wcEmbedderBaseUrl}`, window.location.origin);
31334
- url.search = `?v=${this.version}
31335
- &e=gn-dataset-view-chart
31336
- &a=api-url=${this.config.basePath}
31337
- &a=dataset-id=${metadata.uniqueIdentifier}
31338
- &a=primary-color=%230f4395
31339
- &a=secondary-color=%238bc832
31340
- &a=main-color=%23555
31341
- &a=background-color=%23fdfbff
31342
- &a=aggregation=${aggregation}
31343
- &a=x-property=${xProperty}
31344
- &a=y-property=${yProperty}
31345
- &a=chart-type=${chartType}`;
31482
+ url.searchParams.set('v', `${this.version}`);
31483
+ url.searchParams.append('e', `gn-dataset-view-chart`);
31484
+ url.searchParams.append('a', `api-url=${this.config.basePath}`);
31485
+ url.searchParams.append('a', `dataset-id=${metadata.uniqueIdentifier}`);
31486
+ url.searchParams.append('a', `primary-color=#0f4395`);
31487
+ url.searchParams.append('a', `secondary-color=#8bc832`);
31488
+ url.searchParams.append('a', `main-color=#555`);
31489
+ url.searchParams.append('a', `background-color=#fdfbff`);
31490
+ url.searchParams.append('a', `aggregation=${aggregation}`);
31491
+ url.searchParams.append('a', `x-property=${xProperty}`);
31492
+ url.searchParams.append('a', `y-property=${yProperty}`);
31493
+ url.searchParams.append('a', `chart-type=${chartType}`);
31346
31494
  return url.toString();
31347
31495
  }
31348
31496
  return '';
@@ -31449,7 +31597,7 @@ class FeatureRecordModule {
31449
31597
  DataViewWebComponentComponent,
31450
31598
  DataViewShareComponent] }); }
31451
31599
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureRecordModule, providers: [MdViewFacade], imports: [CommonModule,
31452
- StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer),
31600
+ StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer$1),
31453
31601
  EffectsModule.forFeature([MdViewEffects]),
31454
31602
  UiLayoutModule,
31455
31603
  FeatureMapModule,
@@ -31477,7 +31625,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
31477
31625
  ],
31478
31626
  imports: [
31479
31627
  CommonModule,
31480
- StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer),
31628
+ StoreModule.forFeature(MD_VIEW_FEATURE_STATE_KEY, reducer$1),
31481
31629
  EffectsModule.forFeature([MdViewEffects]),
31482
31630
  UiLayoutModule,
31483
31631
  FeatureMapModule,
@@ -31503,6 +31651,122 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
31503
31651
  }]
31504
31652
  }] });
31505
31653
 
31654
+ const openRecord = createAction('[Editor] Open record', props());
31655
+ const updateRecordField = createAction('[Editor] Update record field', props());
31656
+ const markRecordAsChanged = createAction('[Editor] Mark record as changed');
31657
+ const saveRecord = createAction('[Editor] Save record');
31658
+ const saveRecordSuccess = createAction('[Editor] Save record success');
31659
+ const saveRecordFailure = createAction('[Editor] Save record failure', props());
31660
+
31661
+ const DEFAULT_FIELDS = [
31662
+ {
31663
+ model: 'title',
31664
+ formFieldConfig: {
31665
+ labelKey: 'Metadata title',
31666
+ type: 'text',
31667
+ },
31668
+ },
31669
+ {
31670
+ model: 'abstract',
31671
+ formFieldConfig: {
31672
+ labelKey: 'Abstract',
31673
+ type: 'rich',
31674
+ },
31675
+ },
31676
+ {
31677
+ model: 'uniqueIdentifier',
31678
+ formFieldConfig: {
31679
+ labelKey: 'Unique identifier',
31680
+ type: 'text',
31681
+ locked: true,
31682
+ },
31683
+ },
31684
+ {
31685
+ model: 'recordUpdated',
31686
+ formFieldConfig: {
31687
+ labelKey: 'Record Updated',
31688
+ type: 'text',
31689
+ locked: true,
31690
+ },
31691
+ onSaveProcess: '${dateNow()}',
31692
+ },
31693
+ ];
31694
+
31695
+ const EDITOR_FEATURE_KEY = 'editor';
31696
+ const initialEditorState = {
31697
+ record: null,
31698
+ saving: false,
31699
+ saveError: null,
31700
+ changedSinceSave: false,
31701
+ fieldsConfig: DEFAULT_FIELDS,
31702
+ };
31703
+ const reducer = createReducer(initialEditorState, on(openRecord, (state, { record }) => ({
31704
+ ...state,
31705
+ changedSinceSave: false,
31706
+ record,
31707
+ })), on(saveRecord, (state) => ({
31708
+ ...state,
31709
+ saving: true,
31710
+ saveError: null,
31711
+ })), on(saveRecordSuccess, (state) => ({
31712
+ ...state,
31713
+ saving: false,
31714
+ saveError: null,
31715
+ changedSinceSave: false,
31716
+ })), on(saveRecordFailure, (state, { error }) => ({
31717
+ ...state,
31718
+ saving: false,
31719
+ saveError: error,
31720
+ })), on(updateRecordField, (state, { field, value }) => ({
31721
+ ...state,
31722
+ record: {
31723
+ ...state.record,
31724
+ [field]: value,
31725
+ },
31726
+ })), on(markRecordAsChanged, (state) => ({
31727
+ ...state,
31728
+ changedSinceSave: true,
31729
+ })));
31730
+ function editorReducer(state, action) {
31731
+ return reducer(state, action);
31732
+ }
31733
+
31734
+ const selectEditorState = createFeatureSelector(EDITOR_FEATURE_KEY);
31735
+ const selectRecord = createSelector(selectEditorState, (state) => state.record);
31736
+ const selectRecordSaving = createSelector(selectEditorState, (state) => state.saving);
31737
+ const selectRecordSaveError = createSelector(selectEditorState, (state) => state.saveError);
31738
+ const selectRecordChangedSinceSave = createSelector(selectEditorState, (state) => state.changedSinceSave);
31739
+ const selectRecordFieldsConfig = createSelector(selectEditorState, (state) => state.fieldsConfig);
31740
+ const selectRecordFields = createSelector(selectEditorState, (state) => state.fieldsConfig.map((fieldConfig) => ({
31741
+ config: fieldConfig,
31742
+ value: state.record?.[fieldConfig.model] || null,
31743
+ })));
31744
+
31745
+ class EditorFacade {
31746
+ constructor() {
31747
+ this.store = inject(Store);
31748
+ this.record$ = this.store.pipe(select(selectRecord));
31749
+ this.saving$ = this.store.pipe(select(selectRecordSaving));
31750
+ this.saveError$ = this.store.pipe(select(selectRecordSaveError));
31751
+ this.changedSinceSave$ = this.store.pipe(select(selectRecordChangedSinceSave));
31752
+ this.recordFields$ = this.store.pipe(select(selectRecordFields));
31753
+ }
31754
+ openRecord(record) {
31755
+ this.store.dispatch(openRecord({ record }));
31756
+ }
31757
+ saveRecord() {
31758
+ this.store.dispatch(saveRecord());
31759
+ }
31760
+ updateRecordField(field, value) {
31761
+ this.store.dispatch(updateRecordField({ field, value }));
31762
+ }
31763
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorFacade, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
31764
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorFacade }); }
31765
+ }
31766
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorFacade, decorators: [{
31767
+ type: Injectable
31768
+ }] });
31769
+
31506
31770
  class WizardService {
31507
31771
  constructor(translateService) {
31508
31772
  this.translateService = translateService;
@@ -31864,6 +32128,91 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
31864
32128
  args: [{ selector: 'gn-ui-wizard-summarize', template: "<div>\n <div class=\"text-2xl font-bold title\">\n {{ title | uppercase }}\n </div>\n <div class=\"text-lg font-bold pt-2 abstract\">\n {{ abstract }}\n </div>\n <div class=\"text-lg font-normal\">\n <span translate>datafeeder.wizardSummarize.createdAt</span>\n &nbsp;<span class=\"date\">{{ createdDate }}</span> -\n <span translate>datafeeder.wizardSummarize.scale</span>\n &nbsp;<span class=\"scale\">{{ scale }}</span>\n </div>\n <div class=\"text-lg italic font-normal description\">\n {{ description }}\n </div>\n <div class=\"text-sm font-medium pt-4 tags\">\n <span class=\"icon-tag pr-2\"></span>\n {{ tags }}\n </div>\n</div>\n", styles: [".icon-tag:before{font-size:18px}\n"] }]
31865
32129
  }], ctorParameters: function () { return [{ type: WizardService }, { type: i1$1.TranslateService }]; } });
31866
32130
 
32131
+ function evaluate(expression) {
32132
+ if (expression.match(/^\${.*}$/)) {
32133
+ return evaluate(expression.slice(2, -1));
32134
+ }
32135
+ const operator = expression.split('(')[0];
32136
+ switch (operator) {
32137
+ case 'dateNow':
32138
+ return () => new Date();
32139
+ default:
32140
+ throw new Error(`Unknown operator: ${operator}`);
32141
+ }
32142
+ }
32143
+
32144
+ class EditorService {
32145
+ constructor(http, apiConfiguration) {
32146
+ this.http = http;
32147
+ this.apiConfiguration = apiConfiguration;
32148
+ this.apiUrl = `${this.apiConfiguration?.basePath || '/geonetwork/srv/api'}`;
32149
+ }
32150
+ // TODO: use the catalog repository instead
32151
+ loadRecordByUuid(uuid) {
32152
+ return this.http
32153
+ .get(`${this.apiUrl}/records/${uuid}/formatters/xml`, {
32154
+ responseType: 'text',
32155
+ headers: {
32156
+ Accept: 'application/xml',
32157
+ },
32158
+ })
32159
+ .pipe(map$1((response) => toModel(response.toString())));
32160
+ }
32161
+ // returns the record as it was when saved
32162
+ saveRecord(record, fieldsConfig) {
32163
+ const savedRecord = { ...record };
32164
+ // run onSave processes
32165
+ for (const field of fieldsConfig) {
32166
+ if (field.onSaveProcess && field.model) {
32167
+ const evaluator = evaluate(field.onSaveProcess);
32168
+ savedRecord[field.model] = evaluator({
32169
+ config: field,
32170
+ value: record[field.model],
32171
+ });
32172
+ }
32173
+ }
32174
+ // TODO: use the catalog repository instead
32175
+ return this.http
32176
+ .put(`${this.apiUrl}/records?metadataType=METADATA&uuidProcessing=OVERWRITE&transformWith=_none_&publishToAll=on`, toXml(savedRecord), {
32177
+ headers: {
32178
+ 'Content-Type': 'application/xml',
32179
+ },
32180
+ withCredentials: true,
32181
+ })
32182
+ .pipe(map$1(() => savedRecord));
32183
+ }
32184
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, deps: [{ token: i1.HttpClient }, { token: Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
32185
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, providedIn: 'root' }); }
32186
+ }
32187
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, decorators: [{
32188
+ type: Injectable,
32189
+ args: [{
32190
+ providedIn: 'root',
32191
+ }]
32192
+ }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: Configuration, decorators: [{
32193
+ type: Optional
32194
+ }, {
32195
+ type: Inject,
32196
+ args: [Configuration]
32197
+ }] }]; } });
32198
+
32199
+ class EditorEffects {
32200
+ constructor() {
32201
+ this.actions$ = inject(Actions);
32202
+ this.editorService = inject(EditorService);
32203
+ this.store = inject(Store);
32204
+ this.saveRecord$ = createEffect(() => this.actions$.pipe(ofType(saveRecord), withLatestFrom$1(this.store.select(selectRecord), this.store.select(selectRecordFieldsConfig)), switchMap$1(([, record, fieldsConfig]) => this.editorService.saveRecord(record, fieldsConfig).pipe(switchMap$1((newRecord) => of(saveRecordSuccess(), openRecord({ record: newRecord }))), catchError((error) => of(saveRecordFailure({
32205
+ error: error.message,
32206
+ })))))));
32207
+ this.markAsChanged$ = createEffect(() => this.actions$.pipe(ofType(updateRecordField), map$1(() => markRecordAsChanged())));
32208
+ }
32209
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
32210
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects }); }
32211
+ }
32212
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorEffects, decorators: [{
32213
+ type: Injectable
32214
+ }] });
32215
+
31867
32216
  class FeatureEditorModule {
31868
32217
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
31869
32218
  static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, declarations: [WizardComponent,
@@ -31874,8 +32223,8 @@ class FeatureEditorModule {
31874
32223
  MatNativeDateModule,
31875
32224
  MatFormFieldModule,
31876
32225
  HttpClientModule,
31877
- HttpClientXsrfModule], exports: [WizardComponent, WizardSummarizeComponent] }); }
31878
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, imports: [CommonModule,
32226
+ HttpClientXsrfModule, i1$2.StoreFeatureModule, i1$8.EffectsFeatureModule], exports: [WizardComponent, WizardSummarizeComponent] }); }
32227
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, providers: [EditorFacade], imports: [CommonModule,
31879
32228
  UiInputsModule,
31880
32229
  UiWidgetsModule,
31881
32230
  TranslateModule.forChild(),
@@ -31883,7 +32232,9 @@ class FeatureEditorModule {
31883
32232
  MatNativeDateModule,
31884
32233
  MatFormFieldModule,
31885
32234
  HttpClientModule,
31886
- HttpClientXsrfModule] }); }
32235
+ HttpClientXsrfModule,
32236
+ StoreModule.forFeature(EDITOR_FEATURE_KEY, editorReducer),
32237
+ EffectsModule.forFeature([EditorEffects])] }); }
31887
32238
  }
31888
32239
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: FeatureEditorModule, decorators: [{
31889
32240
  type: NgModule,
@@ -31903,105 +32254,35 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
31903
32254
  MatFormFieldModule,
31904
32255
  HttpClientModule,
31905
32256
  HttpClientXsrfModule,
32257
+ StoreModule.forFeature(EDITOR_FEATURE_KEY, editorReducer),
32258
+ EffectsModule.forFeature([EditorEffects]),
31906
32259
  ],
31907
32260
  exports: [WizardComponent, WizardSummarizeComponent],
32261
+ providers: [EditorFacade],
31908
32262
  }]
31909
32263
  }] });
31910
32264
 
31911
- class EditorService {
31912
- constructor(http, apiConfiguration) {
31913
- this.http = http;
31914
- this.apiConfiguration = apiConfiguration;
31915
- this.record$ = new BehaviorSubject(null);
31916
- this.fieldsConfig = [
31917
- {
31918
- model: 'title',
31919
- labelKey: 'Metadata title',
31920
- type: 'text',
31921
- },
31922
- {
31923
- model: 'abstract',
31924
- labelKey: 'Abstract',
31925
- type: 'rich',
31926
- },
31927
- {
31928
- model: 'uniqueIdentifier',
31929
- labelKey: 'Unique identifier',
31930
- type: 'text',
31931
- locked: true,
31932
- },
31933
- ];
31934
- this.apiUrl = `${this.apiConfiguration?.basePath || '/geonetwork/srv/api'}`;
31935
- this.fields$ = this.record$.pipe(map$1((record) => this.fieldsConfig.map((fieldConfig) => ({
31936
- config: fieldConfig,
31937
- value: record?.[fieldConfig.model] || null,
31938
- }))));
31939
- this.saving$ = new BehaviorSubject(false);
31940
- }
31941
- loadRecordByUuid(uuid) {
31942
- return this.http
31943
- .get(`${this.apiUrl}/records/${uuid}/formatters/xml`, {
31944
- responseType: 'text',
31945
- headers: {
31946
- Accept: 'application/xml',
31947
- },
31948
- })
31949
- .pipe(map$1((response) => toModel(response.toString())));
31950
- }
31951
- saveCurrentRecord() {
31952
- return this.record$.pipe(take(1), tap$1((record) => {
31953
- if (!record)
31954
- throw new Error('Save record failed: no record currently open');
31955
- this.saving$.next(true);
31956
- }), switchMap$1((record) => this.http.put(`${this.apiUrl}/records?metadataType=METADATA&uuidProcessing=OVERWRITE&transformWith=_none_&publishToAll=on`, toXml(record), {
31957
- headers: {
31958
- 'Content-Type': 'application/xml',
31959
- },
31960
- withCredentials: true,
31961
- })), map$1(() => undefined), finalize(() => {
31962
- this.saving$.next(false);
31963
- }));
31964
- }
31965
- setCurrentRecord(record) {
31966
- this.record$.next(record);
31967
- }
31968
- updateRecordField(fieldName, value) {
31969
- this.record$
31970
- .pipe(take(1), map$1((record) => ({ ...record, [fieldName]: value })))
31971
- .subscribe((record) => this.record$.next(record));
31972
- }
31973
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, deps: [{ token: i1.HttpClient }, { token: Configuration, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
31974
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, providedIn: 'root' }); }
31975
- }
31976
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: EditorService, decorators: [{
31977
- type: Injectable,
31978
- args: [{
31979
- providedIn: 'root',
31980
- }]
31981
- }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: Configuration, decorators: [{
31982
- type: Optional
31983
- }, {
31984
- type: Inject,
31985
- args: [Configuration]
31986
- }] }]; } });
31987
-
31988
32265
  class RecordFormComponent {
31989
- constructor(editorService) {
31990
- this.editorService = editorService;
32266
+ constructor(facade) {
32267
+ this.facade = facade;
32268
+ this.fields$ = this.facade.recordFields$;
31991
32269
  }
31992
- handleFieldValueChange(fieldName, value) {
31993
- this.editorService.updateRecordField(fieldName, value);
32270
+ handleFieldValueChange(field, newValue) {
32271
+ if (!field.config.model) {
32272
+ return;
32273
+ }
32274
+ this.facade.updateRecordField(field.config.model, newValue);
31994
32275
  }
31995
32276
  fieldTracker(index, field) {
31996
32277
  return field.config.model;
31997
32278
  }
31998
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorService }], target: i0.ɵɵFactoryTarget.Component }); }
31999
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32279
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, deps: [{ token: EditorFacade }], target: i0.ɵɵFactoryTarget.Component }); }
32280
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.1.7", type: RecordFormComponent, isStandalone: true, selector: "gn-ui-record-form", ngImport: i0, template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1$3.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$3.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1$3.AsyncPipe, name: "async" }, { kind: "ngmodule", type: UiInputsModule }, { kind: "component", type: FormFieldComponent, selector: "gn-ui-form-field", inputs: ["config", "value"], outputs: ["valueChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
32000
32281
  }
32001
32282
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImport: i0, type: RecordFormComponent, decorators: [{
32002
32283
  type: Component,
32003
- args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, UiInputsModule], template: "<div class=\"flex flex-col gap-6\">\n <gn-ui-form-field\n *ngFor=\"let field of editorService.fields$ | async; trackBy: fieldTracker\"\n [config]=\"field.config\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field.config.model, $event)\"\n ></gn-ui-form-field>\n</div>\n" }]
32004
- }], ctorParameters: function () { return [{ type: EditorService }]; } });
32284
+ args: [{ selector: 'gn-ui-record-form', changeDetection: ChangeDetectionStrategy.OnPush, standalone: true, imports: [CommonModule, UiInputsModule], template: "<div class=\"flex flex-col gap-6 p-6\">\n <ng-container *ngFor=\"let field of fields$ | async; trackBy: fieldTracker\">\n <gn-ui-form-field\n *ngIf=\"field.config.formFieldConfig && !field.config.hidden\"\n [config]=\"field.config.formFieldConfig\"\n [value]=\"field.value\"\n (valueChange)=\"handleFieldValueChange(field, $event)\"\n ></gn-ui-form-field>\n </ng-container>\n</div>\n" }]
32285
+ }], ctorParameters: function () { return [{ type: EditorFacade }]; } });
32005
32286
 
32006
32287
  const ROUTER_STATE_KEY = 'router';
32007
32288
  const ROUTER_ROUTE_SEARCH = 'search';
@@ -32368,5 +32649,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.7", ngImpor
32368
32649
  * Generated bundle index. Do not edit.
32369
32650
  */
32370
32651
 
32371
- export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getThemeConfig, initSearch, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$1 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, selectFallback, selectFallbackFields, selectField, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer };
32652
+ export { ADD_RESULTS, ADD_SEARCH, AbstractAction, AddLayerFromCatalogComponent, AddLayerRecordPreviewComponent, AddResults, AddSearch, AnchorLinkDirective, ApiCardComponent, AuthService, AutocompleteComponent, AvatarComponent, AvatarServiceInterface, BLOCK_MODEL_FIXTURE, BadgeComponent, BaseReader, ButtonComponent, CLEAR_ERROR, CLEAR_RESULTS, CONFIG_MALFORMED, CONFIG_MINIMAL, CONFIG_MISSING_MANDATORY, CONFIG_OK, CONFIG_UNRECOGNIZED_KEYS, CONFIG_WITH_TRANSLATIONS, CONFIG_WRONG_LANGUAGE_CODE, CarouselComponent, CatalogTitleComponent, ChartComponent, ChartViewComponent, CheckToggleComponent, CheckboxComponent, ChipsInputComponent, ClearError, ClearResults, ColorScaleComponent, ContentGhostComponent, CopyTextButtonComponent, DEFAULT_BASELAYER_CONTEXT, DEFAULT_GN4_LOGIN_URL, DEFAULT_LANG, DEFAULT_PAGE_SIZE, DEFAULT_RESULTS_LAYOUT_CONFIG, DEFAULT_SEARCH_KEY, DEFAULT_STYLE_FIXTURE, DEFAULT_STYLE_HL_FIXTURE, DEFAULT_VIEW, DataService, DataViewComponent, DataViewPermalinkComponent, DataViewShareComponent, DataViewWebComponentComponent, DateRangePickerComponent, DefaultRouterModule, DownloadItemComponent, DownloadsListComponent, DragAndDropFileInputComponent, DropdownMultiselectComponent, DropdownSelectorComponent, EDITOR_FEATURE_KEY, EMPTY_BLOCK_MODEL_FIXTURE, ES_QUERY_FIELDS_PRIORITY, ES_RESOURCES_VALUES, ES_SOURCE_SUMMARY, EditableLabelDirective, EditorFacade, EditorService, ElasticsearchService, EmbeddedTranslateLoader, ErrorType, ExpandablePanelButtonComponent, ExpandablePanelComponent, ExternalViewerButtonComponent, FACET_ITEM_FIXTURE, FEATURE_MAP_OPTIONS, FIELDS_BRIEF, FIELDS_SUMMARY, FILTER_GEOMETRY, FORMATS, FacetBlockComponent, FacetBlockStubComponent, FacetItemComponent, FacetItemStubComponent, FacetListComponent, FacetsContainerComponent, FacetsModule, FavoriteStarComponent, FavoritesService, FeatureAuthModule, FeatureCatalogModule, FeatureDatavizModule, FeatureDetailComponent, FeatureEditorModule, FeatureInfoService, FeatureMapModule, FeatureRecordModule, FeatureSearchModule, FetchError, FieldsService, FigureComponent, FigureContainerComponent, FileTranslateLoader, FilterDropdownComponent, FormFieldArrayComponent, FormFieldComponent, FormFieldFileComponent, FormFieldObjectComponent, FormFieldRichComponent, FormFieldSimpleComponent, FormFieldSpatialExtentComponent, FormFieldTemporalExtentComponent, FuzzySearchComponent, GN_UI_VERSION, GeoTableViewComponent, GeocodingComponent, Gn4MetadataMapper, Gn4PlatformMapper, Gn4PlatformService, Gn4Repository, Gn4SettingsService, GravatarService, HttpLoaderFactory, I18nInterceptor, ImageFallbackDirective, ImageOverlayPreviewComponent, InteractiveTableColumnComponent, InteractiveTableComponent, LANGUAGES_LIST, LANGUAGE_NAMES, LANGUAGE_STORAGE_KEY, LANG_2_TO_3_MAPPER, LANG_3_TO_2_MAPPER, LOGIN_URL, LONLAT_CRS_CODES, LangService, LanguageSwitcherComponent, LayersPanelComponent, LinkCardComponent, LinkClassifierService, LinkUsage, LoadingMaskComponent, LogService, MAP_CONFIG_FIXTURE, MAP_FEATURE_KEY, METADATA_LANGUAGE, MY_FORMATS, MapComponent, MapContainerComponent, MapContextComponent, MapContextLayerTypeEnum, MapContextService, MapFacade, MapInstanceDirective, MapManagerService, MapStyleService, MapUtilsService, MapViewComponent, MarkdownParserComponent, MaxLinesComponent, mdview_actions as MdViewActions, MdViewFacade, MetadataCatalogComponent, MetadataContactComponent, MetadataInfoComponent, MetadataLinkType, MetadataQualityComponent, MetadataQualityItemComponent, MyOrgService, NavigationButtonComponent, ORGANIZATIONS_STRATEGY, ORGANIZATION_URL_TOKEN, OrganisationPreviewComponent, OrganisationsComponent, OrganisationsFilterComponent, OrganisationsResultComponent, OrganizationsFromGroupsService, OrganizationsFromMetadataService, PAGINATE, PARSE_DELIMITER, PATCH_RESULTS_AGGREGATIONS, PROXY_PATH, Paginate, PaginationButtonsComponent, PaginationComponent, PatchResultsAggregations, PopupAlertComponent, ProgressBarComponent, ProxyService, QUERY_FIELDS, RECORD_URL_TOKEN, REQUEST_MORE_ON_AGGREGATION, REQUEST_MORE_RESULTS, REQUEST_NEW_RESULTS, RESULTS_LAYOUT_CONFIG, ROUTER_ROUTE_DATASET, ROUTER_ROUTE_SEARCH, ROUTER_STATE_KEY, ROUTE_PARAMS, RecordApiFormComponent, RecordFormComponent, RecordMetricComponent, RecordPreviewCardComponent, RecordPreviewComponent, RecordPreviewFeedComponent, RecordPreviewListComponent, RecordPreviewRowComponent, RecordPreviewTextComponent, RecordPreviewTitleComponent, RecordsMetricsComponent, RecordsService, RelatedRecordCardComponent, RequestMoreOnAggregation, RequestMoreResults, RequestNewResults, ResultsHitsContainerComponent, ResultsHitsNumberComponent, ResultsLayoutComponent, ResultsLayoutConfigItem, ResultsListComponent, ResultsListContainerComponent, ResultsListItemComponent, ResultsTableComponent, RouterEffects, RouterFacade, RouterService, SEARCH_FEATURE_KEY, SET_CONFIG_AGGREGATIONS, SET_CONFIG_FILTERS, SET_CONFIG_REQUEST_FIELDS, SET_ERROR, SET_FAVORITES_ONLY, SET_FILTERS, SET_INCLUDE_ON_AGGREGATION, SET_PAGE_SIZE, SET_RESULTS_AGGREGATIONS, SET_RESULTS_HITS, SET_RESULTS_LAYOUT, SET_SEARCH, SET_SORT_BY, SET_SPATIAL_FILTER_ENABLED, SearchEffects, SearchFacade, SearchInputComponent, SearchResultsErrorComponent, SearchRouterContainerDirective, SearchService, SearchStateContainerDirective, SelectionService, SetConfigAggregations, SetConfigFilters, SetConfigRequestFields, SetError, SetFavoritesOnly, SetFilters, SetIncludeOnAggregation, SetPageSize, SetResultsAggregations, SetResultsHits, SetResultsLayout, SetSearch, SetSortBy, SetSpatialFilterEnabled, SiteTitleComponent, SortByComponent, SourceLabelComponent, SourcesService, SpinningLoaderComponent, StarToggleComponent, StepBarComponent, StickyHeaderComponent, SupportedTypes, TABLE_ITEM_FIXTURE, TABLE_ITEM_FIXTURE_HAB, THUMBNAIL_PLACEHOLDER, TRANSLATE_DEFAULT_CONFIG, TRANSLATE_WITH_OVERRIDES_CONFIG, TableComponent, TableViewComponent, TextAreaComponent, TextInputComponent, ThemeService, ThumbnailComponent, UPDATE_CONFIG_AGGREGATIONS, UPDATE_FILTERS, UPDATE_REQUEST_AGGREGATION_TERM, UiCatalogModule, UiDatavizModule, UiElementsModule, FacetsModule$1 as UiFacetsModule, UiInputsModule, UiLayoutModule, UiMapModule, UiSearchModule, UiWidgetsModule, UpdateConfigAggregations, UpdateFilters, UserPreviewComponent, UtilI18nModule, UtilSharedModule, ViewportIntersectorComponent, WEB_COMPONENT_EMBEDDER_URL, WFS_MAX_FEATURES, WizardComponent, WizardFieldComponent, WizardFieldType, WizardService, WizardSummarizeComponent, _reset, addLayer, changeLayerOrder, checkFileFormat, clearLayerError, createFuzzyFilter, currentPage, defaultMapOptions, dragPanCondition, dropEmptyTranslations, editorReducer, getArrayItem, getAsArray, getAsUrl, getBadgeColor, getCustomTranslations, getError, getFavoritesOnly, getFileFormat, getFileFormatFromServiceOutput, getFirstValue, getFormatPriority, getGeometryFromGeoJSON, getGlobalConfig, getJsonDataItemsProxy, getLangFromBrowser, getLinkLabel, getLinkPriority, getMapLayers, getMapState, getMetadataQualityConfig, getMimeTypeForFormat, getOptionalMapConfig, getOptionalSearchConfig, getPageSize, getSearchConfigAggregations, getSearchFilters, getSearchResults, getSearchResultsAggregations, getSearchResultsHits, getSearchResultsLayout, getSearchResultsLoading, getSearchSortBy, getSearchState, getSearchStateSearch, getSpatialFilterEnabled, getTemporalRangeUnion, getThemeConfig, initSearch, initialEditorState, initialMapState, initialState, isConfigLoaded, isEndOfResults, isFormatInQueryParam, loadAppConfig, mapContact, mapKeywords, mapLogo, mapOrganization, mapReducer, markRecordAsChanged, mimeTypeToFormat, mouseWheelZoomCondition, openDataset, openRecord, parse, placeholder, propagateToDocumentOnly, provideGn4, provideRepositoryUrl, readDataset, readDatasetHeaders, reducer$2 as reducer, reducerSearch, removeLayer, removeSearchParams, removeWhitespace, saveRecord, saveRecordFailure, saveRecordSuccess, selectEditorState, selectFallback, selectFallbackFields, selectField, selectRecord, selectRecordChangedSinceSave, selectRecordFields, selectRecordFieldsConfig, selectRecordSaveError, selectRecordSaving, selectTranslatedField, selectTranslatedValue, setLayerError, sortByFromString, sortByToString, sortByToStrings, stripHtml, toDate, toModel, toXml, totalPages, updateLayer, updateRecordField };
32372
32653
  //# sourceMappingURL=geonetwork-ui.mjs.map